Merge branch 'link' of github.com:pikalaxalt/pokeemerald into link
This commit is contained in:
+36
-36
@@ -17,6 +17,7 @@
|
||||
#include "item.h"
|
||||
#include "constants/items.h"
|
||||
#include "constants/hold_effects.h"
|
||||
#include "constants/trainers.h"
|
||||
#include "link.h"
|
||||
#include "link_rfu.h"
|
||||
#include "bg.h"
|
||||
@@ -39,7 +40,6 @@
|
||||
#include "pokedex.h"
|
||||
#include "constants/abilities.h"
|
||||
#include "constants/moves.h"
|
||||
#include "trainer_classes.h"
|
||||
#include "evolution_scene.h"
|
||||
#include "roamer.h"
|
||||
#include "tv.h"
|
||||
@@ -93,8 +93,8 @@ extern struct UnknownPokemonStruct2 gUnknown_02022FF8[3]; // what is it used for
|
||||
extern struct UnknownPokemonStruct2* gUnknown_02023058; // what is it used for?
|
||||
extern u8 gUnknown_02039B28[]; // possibly a struct?
|
||||
extern struct UnknownStruct6 gUnknown_02038C28; // todo: identify & document
|
||||
extern struct MusicPlayerInfo gMPlay_SE1;
|
||||
extern struct MusicPlayerInfo gMPlay_SE2;
|
||||
extern struct MusicPlayerInfo gMPlayInfo_SE1;
|
||||
extern struct MusicPlayerInfo gMPlayInfo_SE2;
|
||||
extern u8 gDecompressionBuffer[];
|
||||
extern u16 gUnknown_020243FC;
|
||||
extern u8 gHealthBoxesIds[BATTLE_BANKS_COUNT];
|
||||
@@ -153,7 +153,7 @@ extern u8 gUnknown_020241E9;
|
||||
extern u16 gChosenMove;
|
||||
|
||||
extern const struct BattleMove gBattleMoves[];
|
||||
extern const u16 gUnknown_08C004E0[]; // battle textbox palette
|
||||
extern const u16 gBattleTextboxPalette[]; // battle textbox palette
|
||||
extern const struct BgTemplate gUnknown_0831AA08[];
|
||||
extern const struct WindowTemplate * const gUnknown_0831ABA0[];
|
||||
extern const u8 gUnknown_0831ACE0[];
|
||||
@@ -186,7 +186,7 @@ extern void sub_80356D0(void);
|
||||
extern void GetFrontierTrainerName(u8* dst, u16 trainerId); // battle tower
|
||||
extern void sub_8166188(void); // battle tower, sets link battle mons level but why?
|
||||
extern void sub_8165B88(u8* dst, u16 trainerId); // battle tower, gets language
|
||||
extern void sub_81DB4DC(u8* dst, u8 arg2); //
|
||||
extern void PadNameString(u8* dst, u8 arg2); //
|
||||
extern void sub_81B9150(void);
|
||||
extern void sub_800AC34(void);
|
||||
extern void sub_80B3AF8(u8 taskId); // cable club
|
||||
@@ -416,7 +416,7 @@ static void CB2_InitBattleInternal(void)
|
||||
|
||||
gBattleTerrain = BattleSetup_GetTerrainId();
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_RECORDED)
|
||||
gBattleTerrain = BATTLE_TERRAIN_INSIDE;
|
||||
gBattleTerrain = BATTLE_TERRAIN_BUILDING;
|
||||
|
||||
sub_80356D0();
|
||||
LoadBattleTextboxAndBackground();
|
||||
@@ -755,7 +755,7 @@ static void CB2_HandleStartBattle(void)
|
||||
ResetBlockReceivedFlags();
|
||||
sub_8036EB8(2, playerMultiplayerId);
|
||||
SetAllPlayersBerryData();
|
||||
taskId = CreateTask(task00_0800F6FC, 0);
|
||||
taskId = CreateTask(sub_8035D74, 0);
|
||||
gTasks[taskId].data[1] = 0x10E;
|
||||
gTasks[taskId].data[2] = 0x5A;
|
||||
gTasks[taskId].data[5] = 0;
|
||||
@@ -957,7 +957,7 @@ static void CB2_HandleStartMultiPartnerBattle(void)
|
||||
ResetBlockReceivedFlags();
|
||||
sub_8036EB8(2, playerMultiplayerId);
|
||||
SetAllPlayersBerryData();
|
||||
taskId = CreateTask(task00_0800F6FC, 0);
|
||||
taskId = CreateTask(sub_8035D74, 0);
|
||||
gTasks[taskId].data[1] = 0x10E;
|
||||
gTasks[taskId].data[2] = 0x5A;
|
||||
gTasks[taskId].data[5] = 0;
|
||||
@@ -1141,7 +1141,7 @@ static void sub_80379F8(u8 arrayIdPlus)
|
||||
gUnknown_02022FF8[i].gender = GetMonGender(&gPlayerParty[arrayIdPlus + i]);
|
||||
StripExtCtrlCodes(gUnknown_02022FF8[i].nickname);
|
||||
if (GetMonData(&gPlayerParty[arrayIdPlus + i], MON_DATA_LANGUAGE) != LANGUAGE_JAPANESE)
|
||||
sub_81DB4DC(gUnknown_02022FF8[i].nickname, 0);
|
||||
PadNameString(gUnknown_02022FF8[i].nickname, CHAR_SPACE);
|
||||
}
|
||||
memcpy(gUnknown_02023058, gUnknown_02022FF8, sizeof(gUnknown_02022FF8));
|
||||
}
|
||||
@@ -1343,7 +1343,7 @@ static void CB2_HandleStartMultiBattle(void)
|
||||
sub_8036EB8(4, playerMultiplayerId);
|
||||
SetAllPlayersBerryData();
|
||||
sub_8068AA4();
|
||||
var = CreateTask(task00_0800F6FC, 0);
|
||||
var = CreateTask(sub_8035D74, 0);
|
||||
gTasks[var].data[1] = 0x10E;
|
||||
gTasks[var].data[2] = 0x5A;
|
||||
gTasks[var].data[5] = 0;
|
||||
@@ -1611,8 +1611,8 @@ void CB2_QuitRecordedBattle(void)
|
||||
UpdatePaletteFade();
|
||||
if (!gPaletteFade.active)
|
||||
{
|
||||
m4aMPlayStop(&gMPlay_SE1);
|
||||
m4aMPlayStop(&gMPlay_SE2);
|
||||
m4aMPlayStop(&gMPlayInfo_SE1);
|
||||
m4aMPlayStop(&gMPlayInfo_SE2);
|
||||
FreeRestoreBattleData();
|
||||
FreeAllWindowBuffers();
|
||||
SetMainCallback2(gMain.savedCallback);
|
||||
@@ -1719,7 +1719,7 @@ static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum, bool8 fir
|
||||
{
|
||||
const struct TrainerMonNoItemDefaultMoves *partyData = gTrainers[trainerNum].party.NoItemDefaultMoves;
|
||||
|
||||
for (j = 0; gSpeciesNames[partyData[i].species][j] != 0xFF; j++)
|
||||
for (j = 0; gSpeciesNames[partyData[i].species][j] != EOS; j++)
|
||||
nameHash += gSpeciesNames[partyData[i].species][j];
|
||||
|
||||
personalityValue += nameHash << 8;
|
||||
@@ -1727,11 +1727,11 @@ static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum, bool8 fir
|
||||
CreateMon(&party[i], partyData[i].species, partyData[i].lvl, fixedIV, TRUE, personalityValue, OT_ID_RANDOM_NO_SHINY, 0);
|
||||
break;
|
||||
}
|
||||
case PARTY_FLAG_CUSTOM_MOVES:
|
||||
case F_TRAINER_PARTY_CUSTOM_MOVESET:
|
||||
{
|
||||
const struct TrainerMonNoItemCustomMoves *partyData = gTrainers[trainerNum].party.NoItemCustomMoves;
|
||||
|
||||
for (j = 0; gSpeciesNames[partyData[i].species][j] != 0xFF; j++)
|
||||
for (j = 0; gSpeciesNames[partyData[i].species][j] != EOS; j++)
|
||||
nameHash += gSpeciesNames[partyData[i].species][j];
|
||||
|
||||
personalityValue += nameHash << 8;
|
||||
@@ -1745,11 +1745,11 @@ static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum, bool8 fir
|
||||
}
|
||||
break;
|
||||
}
|
||||
case PARTY_FLAG_HAS_ITEM:
|
||||
case F_TRAINER_PARTY_HELD_ITEM:
|
||||
{
|
||||
const struct TrainerMonItemDefaultMoves *partyData = gTrainers[trainerNum].party.ItemDefaultMoves;
|
||||
|
||||
for (j = 0; gSpeciesNames[partyData[i].species][j] != 0xFF; j++)
|
||||
for (j = 0; gSpeciesNames[partyData[i].species][j] != EOS; j++)
|
||||
nameHash += gSpeciesNames[partyData[i].species][j];
|
||||
|
||||
personalityValue += nameHash << 8;
|
||||
@@ -1759,11 +1759,11 @@ static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum, bool8 fir
|
||||
SetMonData(&party[i], MON_DATA_HELD_ITEM, &partyData[i].heldItem);
|
||||
break;
|
||||
}
|
||||
case PARTY_FLAG_CUSTOM_MOVES | PARTY_FLAG_HAS_ITEM:
|
||||
case F_TRAINER_PARTY_CUSTOM_MOVESET | F_TRAINER_PARTY_HELD_ITEM:
|
||||
{
|
||||
const struct TrainerMonItemCustomMoves *partyData = gTrainers[trainerNum].party.ItemCustomMoves;
|
||||
|
||||
for (j = 0; gSpeciesNames[partyData[i].species][j] != 0xFF; j++)
|
||||
for (j = 0; gSpeciesNames[partyData[i].species][j] != EOS; j++)
|
||||
nameHash += gSpeciesNames[partyData[i].species][j];
|
||||
|
||||
personalityValue += nameHash << 8;
|
||||
@@ -1979,7 +1979,7 @@ void sub_8038D64(void)
|
||||
gBattle_BG3_Y = 0;
|
||||
|
||||
sub_80356D0();
|
||||
LoadCompressedPalette(gUnknown_08C004E0, 0, 64);
|
||||
LoadCompressedPalette(gBattleTextboxPalette, 0, 64);
|
||||
ApplyPlayerChosenFrameToBattleMenu();
|
||||
ResetSpriteData();
|
||||
ResetTasks();
|
||||
@@ -1989,7 +1989,7 @@ void sub_8038D64(void)
|
||||
gReservedSpritePaletteCount = 4;
|
||||
SetVBlankCallback(VBlankCB_Battle);
|
||||
|
||||
taskId = CreateTask(task00_0800F6FC, 0);
|
||||
taskId = CreateTask(sub_8035D74, 0);
|
||||
gTasks[taskId].data[1] = 0x10E;
|
||||
gTasks[taskId].data[2] = 0x5A;
|
||||
gTasks[taskId].data[5] = 1;
|
||||
@@ -4739,9 +4739,9 @@ static void HandleEndTurn_BattleWon(void)
|
||||
gBattlescriptCurrInstr = BattleScript_FrontierTrainerBattleWon;
|
||||
|
||||
if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_3FE)
|
||||
PlayBGM(BGM_KACHI3);
|
||||
PlayBGM(MUS_KACHI3);
|
||||
else
|
||||
PlayBGM(BGM_KACHI1);
|
||||
PlayBGM(MUS_KACHI1);
|
||||
}
|
||||
else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && !(gBattleTypeFlags & BATTLE_TYPE_LINK))
|
||||
{
|
||||
@@ -4750,23 +4750,23 @@ static void HandleEndTurn_BattleWon(void)
|
||||
|
||||
switch (gTrainers[gTrainerBattleOpponent_A].trainerClass)
|
||||
{
|
||||
case CLASS_ELITE_FOUR:
|
||||
case CLASS_CHAMPION:
|
||||
PlayBGM(BGM_KACHI5);
|
||||
case TRAINER_CLASS_ELITE_FOUR:
|
||||
case TRAINER_CLASS_CHAMPION:
|
||||
PlayBGM(MUS_KACHI5);
|
||||
break;
|
||||
case CLASS_TEAM_AQUA:
|
||||
case CLASS_TEAM_MAGMA:
|
||||
case CLASS_AQUA_ADMIN:
|
||||
case CLASS_AQUA_LEADER:
|
||||
case CLASS_MAGMA_ADMIN:
|
||||
case CLASS_MAGMA_LEADER:
|
||||
PlayBGM(BGM_KACHI4);
|
||||
case TRAINER_CLASS_TEAM_AQUA:
|
||||
case TRAINER_CLASS_TEAM_MAGMA:
|
||||
case TRAINER_CLASS_AQUA_ADMIN:
|
||||
case TRAINER_CLASS_AQUA_LEADER:
|
||||
case TRAINER_CLASS_MAGMA_ADMIN:
|
||||
case TRAINER_CLASS_MAGMA_LEADER:
|
||||
PlayBGM(MUS_KACHI4);
|
||||
break;
|
||||
case CLASS_LEADER:
|
||||
PlayBGM(BGM_KACHI3);
|
||||
case TRAINER_CLASS_LEADER:
|
||||
PlayBGM(MUS_KACHI3);
|
||||
break;
|
||||
default:
|
||||
PlayBGM(BGM_KACHI1);
|
||||
PlayBGM(MUS_KACHI1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
+222
-229
File diff suppressed because it is too large
Load Diff
+39
-38
@@ -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"
|
||||
@@ -36,9 +37,9 @@ extern u16 gBattle_BG2_X;
|
||||
extern u16 gBattle_BG2_Y;
|
||||
extern u16 gBattlePartyID[BATTLE_BANKS_COUNT];
|
||||
extern u8 gBankSpriteIds[BATTLE_BANKS_COUNT];
|
||||
extern struct MusicPlayerInfo gMPlay_BGM;
|
||||
extern struct MusicPlayerInfo gMPlay_SE1;
|
||||
extern struct MusicPlayerInfo gMPlay_SE2;
|
||||
extern struct MusicPlayerInfo gMPlayInfo_BGM;
|
||||
extern struct MusicPlayerInfo gMPlayInfo_SE1;
|
||||
extern struct MusicPlayerInfo gMPlayInfo_SE2;
|
||||
extern u8 gDecompressionBuffer[];
|
||||
|
||||
extern const u16 gUnknown_082C8D64[];
|
||||
@@ -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,
|
||||
@@ -271,7 +272,7 @@ void LaunchBattleAnimation(const u8 *const animsTable[], u16 tableId, bool8 isMo
|
||||
{
|
||||
if (tableId == gUnknown_082C8D64[i])
|
||||
{
|
||||
m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 128);
|
||||
m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 128);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -513,8 +514,8 @@ static void ScriptCmd_end(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
m4aMPlayStop(&gMPlay_SE1);
|
||||
m4aMPlayStop(&gMPlay_SE2);
|
||||
m4aMPlayStop(&gMPlayInfo_SE1);
|
||||
m4aMPlayStop(&gMPlayInfo_SE2);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -533,7 +534,7 @@ static void ScriptCmd_end(void)
|
||||
|
||||
if (!continuousAnim) // may have been used for debug?
|
||||
{
|
||||
m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 256);
|
||||
m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 256);
|
||||
if (!IsContest())
|
||||
{
|
||||
sub_80A8278();
|
||||
@@ -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);
|
||||
@@ -1649,8 +1650,8 @@ static void ScriptCmd_waitsound(void)
|
||||
{
|
||||
if (++sSoundAnimFramesToWait > 90)
|
||||
{
|
||||
m4aMPlayStop(&gMPlay_SE1);
|
||||
m4aMPlayStop(&gMPlay_SE2);
|
||||
m4aMPlayStop(&gMPlayInfo_SE1);
|
||||
m4aMPlayStop(&gMPlayInfo_SE2);
|
||||
sSoundAnimFramesToWait = 0;
|
||||
}
|
||||
else
|
||||
@@ -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)
|
||||
@@ -1832,7 +1833,7 @@ static void ScriptCmd_doublebattle_2E(void)
|
||||
|
||||
static void ScriptCmd_stopsound(void)
|
||||
{
|
||||
m4aMPlayStop(&gMPlay_SE1);
|
||||
m4aMPlayStop(&gMPlay_SE2);
|
||||
m4aMPlayStop(&gMPlayInfo_SE1);
|
||||
m4aMPlayStop(&gMPlayInfo_SE2);
|
||||
sBattleAnimScriptPtr++;
|
||||
}
|
||||
|
||||
+754
@@ -0,0 +1,754 @@
|
||||
#include "global.h"
|
||||
#include "battle.h"
|
||||
#include "sprite.h"
|
||||
#include "constants/trainers.h"
|
||||
#include "graphics.h"
|
||||
#include "decompress.h"
|
||||
#include "bg.h"
|
||||
#include "palette.h"
|
||||
#include "main.h"
|
||||
#include "gpu_regs.h"
|
||||
#include "link.h"
|
||||
#include "battle_message.h"
|
||||
#include "task.h"
|
||||
#include "trig.h"
|
||||
#include "sound.h"
|
||||
#include "constants/songs.h"
|
||||
#include "strings.h"
|
||||
#include "window.h"
|
||||
#include "text_window.h"
|
||||
#include "new_menu_helpers.h"
|
||||
|
||||
struct BattleBackground
|
||||
{
|
||||
const void *tileset;
|
||||
const void *tilemap;
|
||||
const void *entryTileset;
|
||||
const void *entryTilemap;
|
||||
const void *palette;
|
||||
};
|
||||
|
||||
extern const struct SpriteTemplate gUnknown_0831A9D0;
|
||||
extern const struct SpriteTemplate gUnknown_0831A9E8;
|
||||
extern const struct CompressedSpriteSheet gUnknown_0831AA00;
|
||||
extern const struct BgTemplate gUnknown_0831AA08[4];
|
||||
extern const struct WindowTemplate *gUnknown_0831ABA0[];
|
||||
extern const struct BattleBackground gBattleTerrainTable[];
|
||||
|
||||
extern u8 gBattleTerrain;
|
||||
extern u16 gTrainerBattleOpponent_A;
|
||||
extern u16 gBattle_BG1_X;
|
||||
extern u16 gBattle_BG1_Y;
|
||||
extern u16 gBattle_BG2_X;
|
||||
extern u16 gBattle_BG2_Y;
|
||||
extern u16 gPartnerTrainerId;
|
||||
|
||||
extern u8 GetCurrentMapBattleScene(void);
|
||||
|
||||
void sub_8035658(void)
|
||||
{
|
||||
ResetBgsAndClearDma3BusyFlags(0);
|
||||
InitBgsFromTemplates(0, gUnknown_0831AA08, ARRAY_COUNT(gUnknown_0831AA08));
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_ARENA)
|
||||
{
|
||||
gBattleScripting.field_24 = 1;
|
||||
SetBgTilemapBuffer(1, gUnknown_02023060);
|
||||
SetBgTilemapBuffer(2, gUnknown_02023060);
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattleScripting.field_24 = 0;
|
||||
}
|
||||
|
||||
InitWindows(gUnknown_0831ABA0[gBattleScripting.field_24]);
|
||||
DeactivateAllTextPrinters();
|
||||
}
|
||||
|
||||
void sub_80356D0(void)
|
||||
{
|
||||
DisableInterrupts(INTR_FLAG_HBLANK);
|
||||
EnableInterrupts(INTR_FLAG_VBLANK | INTR_FLAG_VCOUNT | INTR_FLAG_TIMER3 | INTR_FLAG_SERIAL);
|
||||
sub_8035658();
|
||||
SetGpuReg(REG_OFFSET_BLDCNT, 0);
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
|
||||
SetGpuReg(REG_OFFSET_BLDY, 0);
|
||||
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJWIN_ON | DISPCNT_WIN0_ON | DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
|
||||
}
|
||||
|
||||
void ApplyPlayerChosenFrameToBattleMenu(void)
|
||||
{
|
||||
sub_809882C(2, 0x12, 0x10);
|
||||
sub_809882C(2, 0x22, 0x10);
|
||||
LoadCompressedPalette(gUnknown_08D85600, 0x50, 0x20);
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_ARENA)
|
||||
{
|
||||
sub_81978B0(0x70);
|
||||
copy_textbox_border_tile_patterns_to_vram(0, 0x30, 0x70);
|
||||
gPlttBufferUnfaded[0x76] = 0;
|
||||
CpuCopy16(&gPlttBufferUnfaded[0x76], &gPlttBufferFaded[0x76], 2);
|
||||
}
|
||||
}
|
||||
|
||||
void DrawMainBattleBackground(void)
|
||||
{
|
||||
if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_FRONTIER | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_x2000000))
|
||||
{
|
||||
LZDecompressVram(gBattleTerrainTiles_Building, (void*)(VRAM + 0x8000));
|
||||
LZDecompressVram(gBattleTerrainTilemap_Building, (void*)(VRAM + 0xD000));
|
||||
LoadCompressedPalette(gBattleTerrainPalette_Frontier, 0x20, 0x60);
|
||||
}
|
||||
else if (gBattleTypeFlags & BATTLE_TYPE_GROUDON)
|
||||
{
|
||||
LZDecompressVram(gBattleTerrainTiles_Cave, (void*)(VRAM + 0x8000));
|
||||
LZDecompressVram(gBattleTerrainTilemap_Cave, (void*)(VRAM + 0xD000));
|
||||
LoadCompressedPalette(gBattleTerrainPalette_Groudon, 0x20, 0x60);
|
||||
}
|
||||
else if (gBattleTypeFlags & BATTLE_TYPE_KYOGRE)
|
||||
{
|
||||
LZDecompressVram(gBattleTerrainTiles_Water, (void*)(VRAM + 0x8000));
|
||||
LZDecompressVram(gBattleTerrainTilemap_Water, (void*)(VRAM + 0xD000));
|
||||
LoadCompressedPalette(gBattleTerrainPalette_Kyogre, 0x20, 0x60);
|
||||
}
|
||||
else if (gBattleTypeFlags & BATTLE_TYPE_RAYQUAZA)
|
||||
{
|
||||
LZDecompressVram(gBattleTerrainTiles_Rayquaza, (void*)(VRAM + 0x8000));
|
||||
LZDecompressVram(gBattleTerrainTilemap_Rayquaza, (void*)(VRAM + 0xD000));
|
||||
LoadCompressedPalette(gBattleTerrainPalette_Rayquaza, 0x20, 0x60);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
|
||||
{
|
||||
u8 trainerClass = gTrainers[gTrainerBattleOpponent_A].trainerClass;
|
||||
if (trainerClass == TRAINER_CLASS_LEADER)
|
||||
{
|
||||
LZDecompressVram(gBattleTerrainTiles_Building, (void*)(VRAM + 0x8000));
|
||||
LZDecompressVram(gBattleTerrainTilemap_Building, (void*)(VRAM + 0xD000));
|
||||
LoadCompressedPalette(gBattleTerrainPalette_BuildingLeader, 0x20, 0x60);
|
||||
return;
|
||||
}
|
||||
else if (trainerClass == TRAINER_CLASS_CHAMPION)
|
||||
{
|
||||
LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(VRAM + 0x8000));
|
||||
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(VRAM + 0xD000));
|
||||
LoadCompressedPalette(gBattleTerrainPalette_StadiumWallace, 0x20, 0x60);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
switch (GetCurrentMapBattleScene())
|
||||
{
|
||||
default:
|
||||
case MAP_BATTLE_SCENE_NORMAL:
|
||||
LZDecompressVram(gBattleTerrainTable[gBattleTerrain].tileset, (void*)(VRAM + 0x8000));
|
||||
LZDecompressVram(gBattleTerrainTable[gBattleTerrain].tilemap, (void*)(VRAM + 0xD000));
|
||||
LoadCompressedPalette(gBattleTerrainTable[gBattleTerrain].palette, 0x20, 0x60);
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_GYM:
|
||||
LZDecompressVram(gBattleTerrainTiles_Building, (void*)(VRAM + 0x8000));
|
||||
LZDecompressVram(gBattleTerrainTilemap_Building, (void*)(VRAM + 0xD000));
|
||||
LoadCompressedPalette(gBattleTerrainPalette_BuildingGym, 0x20, 0x60);
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_MAGMA:
|
||||
LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(VRAM + 0x8000));
|
||||
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(VRAM + 0xD000));
|
||||
LoadCompressedPalette(gBattleTerrainPalette_StadiumMagma, 0x20, 0x60);
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_AQUA:
|
||||
LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(VRAM + 0x8000));
|
||||
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(VRAM + 0xD000));
|
||||
LoadCompressedPalette(gBattleTerrainPalette_StadiumAqua, 0x20, 0x60);
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_SIDNEY:
|
||||
LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(VRAM + 0x8000));
|
||||
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(VRAM + 0xD000));
|
||||
LoadCompressedPalette(gBattleTerrainPalette_StadiumSidney, 0x20, 0x60);
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_PHOEBE:
|
||||
LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(VRAM + 0x8000));
|
||||
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(VRAM + 0xD000));
|
||||
LoadCompressedPalette(gBattleTerrainPalette_StadiumPhoebe, 0x20, 0x60);
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_GLACIA:
|
||||
LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(VRAM + 0x8000));
|
||||
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(VRAM + 0xD000));
|
||||
LoadCompressedPalette(gBattleTerrainPalette_StadiumGlacia, 0x20, 0x60);
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_DRAKE:
|
||||
LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(VRAM + 0x8000));
|
||||
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(VRAM + 0xD000));
|
||||
LoadCompressedPalette(gBattleTerrainPalette_StadiumDrake, 0x20, 0x60);
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_FRONTIER:
|
||||
LZDecompressVram(gBattleTerrainTiles_Building, (void*)(VRAM + 0x8000));
|
||||
LZDecompressVram(gBattleTerrainTilemap_Building, (void*)(VRAM + 0xD000));
|
||||
LoadCompressedPalette(gBattleTerrainPalette_Frontier, 0x20, 0x60);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LoadBattleTextboxAndBackground(void)
|
||||
{
|
||||
LZDecompressVram(gBattleTextboxTiles, (void*)(VRAM));
|
||||
CopyToBgTilemapBuffer(0, gBattleTextboxTilemap, 0, 0);
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
LoadCompressedPalette(gBattleTextboxPalette, 0, 0x40);
|
||||
ApplyPlayerChosenFrameToBattleMenu();
|
||||
|
||||
DrawMainBattleBackground();
|
||||
}
|
||||
|
||||
static void sub_8035AE4(u8 taskId, u8 bank, u8 bgId, u8 destX, u8 destY)
|
||||
{
|
||||
s32 i;
|
||||
u16 var = 0;
|
||||
u16 src[6];
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
|
||||
{
|
||||
if (gTasks[taskId].data[5] != 0)
|
||||
{
|
||||
switch (bank)
|
||||
{
|
||||
case 0:
|
||||
var = 0x3F & gTasks[taskId].data[3];
|
||||
break;
|
||||
case 1:
|
||||
var = (0xFC0 & gTasks[taskId].data[4]) >> 6;
|
||||
break;
|
||||
case 2:
|
||||
var = (0xFC0 & gTasks[taskId].data[3]) >> 6;
|
||||
break;
|
||||
case 3:
|
||||
var = 0x3F & gTasks[taskId].data[4];
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (bank)
|
||||
{
|
||||
case 0:
|
||||
var = 0x3F & gTasks[taskId].data[3];
|
||||
break;
|
||||
case 1:
|
||||
var = 0x3F & gTasks[taskId].data[4];
|
||||
break;
|
||||
case 2:
|
||||
var = (0xFC0 & gTasks[taskId].data[3]) >> 6;
|
||||
break;
|
||||
case 3:
|
||||
var = (0xFC0 & gTasks[taskId].data[4]) >> 6;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < 3; i++)
|
||||
{
|
||||
src[i] = ((var & (3 << (i * 2))) >> (i * 2)) + 0x6001;
|
||||
}
|
||||
|
||||
CopyToBgTilemapBufferRect_ChangePalette(bgId, src, destX, destY, 3, 1, 0x11);
|
||||
CopyBgTilemapBufferToVram(bgId);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (bank == gBattleScripting.multiplayerId)
|
||||
var = gTasks[taskId].data[3];
|
||||
else
|
||||
var = gTasks[taskId].data[4];
|
||||
|
||||
for (i = 0; i < 6; i++)
|
||||
{
|
||||
src[i] = ((var & (3 << (i * 2))) >> (i * 2)) + 0x6001;
|
||||
}
|
||||
|
||||
CopyToBgTilemapBufferRect_ChangePalette(bgId, src, destX, destY, 6, 1, 0x11);
|
||||
CopyBgTilemapBufferToVram(bgId);
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_8035C4C(void)
|
||||
{
|
||||
if (gBattleOutcome == BATTLE_DREW)
|
||||
{
|
||||
BattleHandleAddTextPrinter(gText_Draw, 0x15);
|
||||
}
|
||||
else if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
|
||||
{
|
||||
if (gBattleOutcome == BATTLE_WON)
|
||||
{
|
||||
switch (gLinkPlayers[gBattleScripting.multiplayerId].lp_field_18)
|
||||
{
|
||||
case 0:
|
||||
BattleHandleAddTextPrinter(gText_Win, 0x16);
|
||||
BattleHandleAddTextPrinter(gText_Loss, 0x17);
|
||||
break;
|
||||
case 1:
|
||||
BattleHandleAddTextPrinter(gText_Win, 0x17);
|
||||
BattleHandleAddTextPrinter(gText_Loss, 0x16);
|
||||
break;
|
||||
case 2:
|
||||
BattleHandleAddTextPrinter(gText_Win, 0x16);
|
||||
BattleHandleAddTextPrinter(gText_Loss, 0x17);
|
||||
break;
|
||||
case 3:
|
||||
BattleHandleAddTextPrinter(gText_Win, 0x17);
|
||||
BattleHandleAddTextPrinter(gText_Loss, 0x16);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (gLinkPlayers[gBattleScripting.multiplayerId].lp_field_18)
|
||||
{
|
||||
case 0:
|
||||
BattleHandleAddTextPrinter(gText_Win, 0x17);
|
||||
BattleHandleAddTextPrinter(gText_Loss, 0x16);
|
||||
break;
|
||||
case 1:
|
||||
BattleHandleAddTextPrinter(gText_Win, 0x16);
|
||||
BattleHandleAddTextPrinter(gText_Loss, 0x17);
|
||||
break;
|
||||
case 2:
|
||||
BattleHandleAddTextPrinter(gText_Win, 0x17);
|
||||
BattleHandleAddTextPrinter(gText_Loss, 0x16);
|
||||
break;
|
||||
case 3:
|
||||
BattleHandleAddTextPrinter(gText_Win, 0x16);
|
||||
BattleHandleAddTextPrinter(gText_Loss, 0x17);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (gBattleOutcome == BATTLE_WON)
|
||||
{
|
||||
if (gLinkPlayers[gBattleScripting.multiplayerId].lp_field_18 != 0)
|
||||
{
|
||||
BattleHandleAddTextPrinter(gText_Win, 0x17);
|
||||
BattleHandleAddTextPrinter(gText_Loss, 0x16);
|
||||
}
|
||||
else
|
||||
{
|
||||
BattleHandleAddTextPrinter(gText_Win, 0x16);
|
||||
BattleHandleAddTextPrinter(gText_Loss, 0x17);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gLinkPlayers[gBattleScripting.multiplayerId].lp_field_18 != 0)
|
||||
{
|
||||
BattleHandleAddTextPrinter(gText_Win, 0x16);
|
||||
BattleHandleAddTextPrinter(gText_Loss, 0x17);
|
||||
}
|
||||
else
|
||||
{
|
||||
BattleHandleAddTextPrinter(gText_Win, 0x17);
|
||||
BattleHandleAddTextPrinter(gText_Loss, 0x16);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8035D74(u8 taskId)
|
||||
{
|
||||
struct LinkPlayer *linkPlayer;
|
||||
u8 *name;
|
||||
s32 i, palId;
|
||||
|
||||
switch (gTasks[taskId].data[0])
|
||||
{
|
||||
case 0:
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
|
||||
{
|
||||
for (i = 0; i < BATTLE_BANKS_COUNT; i++)
|
||||
{
|
||||
name = gLinkPlayers[i].name;
|
||||
linkPlayer = &gLinkPlayers[i];
|
||||
|
||||
switch (linkPlayer->lp_field_18)
|
||||
{
|
||||
case 0:
|
||||
BattleHandleAddTextPrinter(name, 0x11);
|
||||
sub_8035AE4(taskId, linkPlayer->lp_field_18, 1, 2, 4);
|
||||
break;
|
||||
case 1:
|
||||
BattleHandleAddTextPrinter(name, 0x12);
|
||||
sub_8035AE4(taskId, linkPlayer->lp_field_18, 2, 2, 4);
|
||||
break;
|
||||
case 2:
|
||||
BattleHandleAddTextPrinter(name, 0x13);
|
||||
sub_8035AE4(taskId, linkPlayer->lp_field_18, 1, 2, 8);
|
||||
break;
|
||||
case 3:
|
||||
BattleHandleAddTextPrinter(name, 0x14);
|
||||
sub_8035AE4(taskId, linkPlayer->lp_field_18, 2, 2, 8);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
u8 playerId = gBattleScripting.multiplayerId;
|
||||
u8 opponentId = playerId ^ BIT_SIDE;
|
||||
u8 opponentId_copy = opponentId;
|
||||
|
||||
if (gLinkPlayers[playerId].lp_field_18 != 0)
|
||||
opponentId = playerId, playerId = opponentId_copy;
|
||||
|
||||
name = gLinkPlayers[playerId].name;
|
||||
BattleHandleAddTextPrinter(name, 0xF);
|
||||
|
||||
name = gLinkPlayers[opponentId].name;
|
||||
BattleHandleAddTextPrinter(name, 0x10);
|
||||
|
||||
sub_8035AE4(taskId, playerId, 1, 2, 7);
|
||||
sub_8035AE4(taskId, opponentId, 2, 2, 7);
|
||||
}
|
||||
gTasks[taskId].data[0]++;
|
||||
break;
|
||||
case 1:
|
||||
palId = AllocSpritePalette(0x2710);
|
||||
gPlttBufferUnfaded[palId * 16 + 0x10F] = gPlttBufferFaded[palId * 16 + 0x10F] = 0x7FFF;
|
||||
gBattleStruct->field_7D = CreateSprite(&gUnknown_0831A9D0, 111, 80, 0);
|
||||
gBattleStruct->field_7E = CreateSprite(&gUnknown_0831A9E8, 129, 80, 0);
|
||||
gSprites[gBattleStruct->field_7D].invisible = 1;
|
||||
gSprites[gBattleStruct->field_7E].invisible = 1;
|
||||
gTasks[taskId].data[0]++;
|
||||
break;
|
||||
case 2:
|
||||
if (gTasks[taskId].data[5] != 0)
|
||||
{
|
||||
gBattle_BG1_X = -(20) - (Sin2(gTasks[taskId].data[1]) / 32);
|
||||
gBattle_BG2_X = -(140) - (Sin2(gTasks[taskId].data[2]) / 32);
|
||||
gBattle_BG1_Y = -36;
|
||||
gBattle_BG2_Y = -36;
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattle_BG1_X = -(20) - (Sin2(gTasks[taskId].data[1]) / 32);
|
||||
gBattle_BG1_Y = (Cos2(gTasks[taskId].data[1]) / 32) - 164;
|
||||
gBattle_BG2_X = -(140) - (Sin2(gTasks[taskId].data[2]) / 32);
|
||||
gBattle_BG2_Y = (Cos2(gTasks[taskId].data[2]) / 32) - 164;
|
||||
}
|
||||
|
||||
if (gTasks[taskId].data[2] != 0)
|
||||
{
|
||||
gTasks[taskId].data[2] -= 2;
|
||||
gTasks[taskId].data[1] += 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gTasks[taskId].data[5] != 0)
|
||||
sub_8035C4C();
|
||||
|
||||
PlaySE(SE_W231);
|
||||
DestroyTask(taskId);
|
||||
gSprites[gBattleStruct->field_7D].invisible = 0;
|
||||
gSprites[gBattleStruct->field_7E].invisible = 0;
|
||||
gSprites[gBattleStruct->field_7E].oam.tileNum += 0x40;
|
||||
gSprites[gBattleStruct->field_7D].data[0] = 0;
|
||||
gSprites[gBattleStruct->field_7E].data[0] = 1;
|
||||
gSprites[gBattleStruct->field_7D].data[1] = gSprites[gBattleStruct->field_7D].pos1.x;
|
||||
gSprites[gBattleStruct->field_7E].data[1] = gSprites[gBattleStruct->field_7E].pos1.x;
|
||||
gSprites[gBattleStruct->field_7D].data[2] = 0;
|
||||
gSprites[gBattleStruct->field_7E].data[2] = 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void LoadBattleEntryBackground(void)
|
||||
{
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
|
||||
{
|
||||
LZDecompressVram(gUnknown_08D778F0, (void*)(VRAM + 0x4000));
|
||||
LZDecompressVram(gUnknown_08D77B0C, (void*)(VRAM + 0x10000));
|
||||
LoadCompressedPalette(gUnknown_08D77AE4, 0x60, 0x20);
|
||||
SetBgAttribute(1, BG_CTRL_ATTR_MAPBASEINDEX, 1);
|
||||
SetGpuReg(REG_OFFSET_BG1CNT, 0x5C04);
|
||||
CopyToBgTilemapBuffer(1, gUnknown_08D779D8, 0, 0);
|
||||
CopyToBgTilemapBuffer(2, gUnknown_08D779D8, 0, 0);
|
||||
CopyBgTilemapBufferToVram(1);
|
||||
CopyBgTilemapBufferToVram(2);
|
||||
SetGpuReg(REG_OFFSET_WININ, 0x36);
|
||||
SetGpuReg(REG_OFFSET_WINOUT, 0x36);
|
||||
gBattle_BG1_Y = 0xFF5C;
|
||||
gBattle_BG2_Y = 0xFF5C;
|
||||
LoadCompressedObjectPicUsingHeap(&gUnknown_0831AA00);
|
||||
}
|
||||
else if (gBattleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000 | BATTLE_TYPE_EREADER_TRAINER))
|
||||
{
|
||||
if (!(gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) || gPartnerTrainerId == STEVEN_PARTNER_ID)
|
||||
{
|
||||
LZDecompressVram(gBattleTerrainAnimTiles_Building, (void*)(VRAM + 0x4000));
|
||||
LZDecompressVram(gBattleTerrainAnimTilemap_Building, (void*)(VRAM + 0xE000));
|
||||
}
|
||||
else
|
||||
{
|
||||
SetBgAttribute(1, BG_CTRL_ATTR_VISIBLE, 2);
|
||||
SetBgAttribute(2, BG_CTRL_ATTR_VISIBLE, 2);
|
||||
CopyToBgTilemapBuffer(1, gUnknown_08D857A8, 0, 0);
|
||||
CopyToBgTilemapBuffer(2, gUnknown_08D85A1C, 0, 0);
|
||||
CopyBgTilemapBufferToVram(1);
|
||||
CopyBgTilemapBufferToVram(2);
|
||||
}
|
||||
}
|
||||
else if (gBattleTypeFlags & BATTLE_TYPE_GROUDON)
|
||||
{
|
||||
LZDecompressVram(gBattleTerrainAnimTiles_Cave, (void*)(VRAM + 0x4000));
|
||||
LZDecompressVram(gBattleTerrainAnimTilemap_Cave, (void*)(VRAM + 0xE000));
|
||||
}
|
||||
else if (gBattleTypeFlags & BATTLE_TYPE_KYOGRE)
|
||||
{
|
||||
LZDecompressVram(gBattleTerrainAnimTiles_Underwater, (void*)(VRAM + 0x4000));
|
||||
LZDecompressVram(gBattleTerrainAnimTilemap_Underwater, (void*)(VRAM + 0xE000));
|
||||
}
|
||||
else if (gBattleTypeFlags & BATTLE_TYPE_RAYQUAZA)
|
||||
{
|
||||
LZDecompressVram(gBattleTerrainAnimTiles_Rayquaza, (void*)(VRAM + 0x4000));
|
||||
LZDecompressVram(gBattleTerrainAnimTilemap_Rayquaza, (void*)(VRAM + 0xE000));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
|
||||
{
|
||||
u8 trainerClass = gTrainers[gTrainerBattleOpponent_A].trainerClass;
|
||||
if (trainerClass == TRAINER_CLASS_LEADER)
|
||||
{
|
||||
LZDecompressVram(gBattleTerrainAnimTiles_Building, (void*)(VRAM + 0x4000));
|
||||
LZDecompressVram(gBattleTerrainAnimTilemap_Building, (void*)(VRAM + 0xE000));
|
||||
return;
|
||||
}
|
||||
else if (trainerClass == TRAINER_CLASS_CHAMPION)
|
||||
{
|
||||
LZDecompressVram(gBattleTerrainAnimTiles_Building, (void*)(VRAM + 0x4000));
|
||||
LZDecompressVram(gBattleTerrainAnimTilemap_Building, (void*)(VRAM + 0xE000));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (GetCurrentMapBattleScene() == MAP_BATTLE_SCENE_NORMAL)
|
||||
{
|
||||
LZDecompressVram(gBattleTerrainTable[gBattleTerrain].entryTileset, (void*)(VRAM + 0x4000));
|
||||
LZDecompressVram(gBattleTerrainTable[gBattleTerrain].entryTilemap, (void*)(VRAM + 0xE000));
|
||||
}
|
||||
else
|
||||
{
|
||||
LZDecompressVram(gBattleTerrainAnimTiles_Building, (void*)(VRAM + 0x4000));
|
||||
LZDecompressVram(gBattleTerrainAnimTilemap_Building, (void*)(VRAM + 0xE000));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool8 LoadChosenBattleElement(u8 caseId)
|
||||
{
|
||||
bool8 ret = FALSE;
|
||||
|
||||
switch (caseId)
|
||||
{
|
||||
case 0:
|
||||
LZDecompressVram(gBattleTextboxTiles, (void*)(VRAM));
|
||||
break;
|
||||
case 1:
|
||||
CopyToBgTilemapBuffer(0, gBattleTextboxTilemap, 0, 0);
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
break;
|
||||
case 2:
|
||||
LoadCompressedPalette(gBattleTextboxPalette, 0, 0x40);
|
||||
break;
|
||||
case 3:
|
||||
if (gBattleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000 | BATTLE_TYPE_EREADER_TRAINER))
|
||||
{
|
||||
LZDecompressVram(gBattleTerrainTiles_Building, (void*)(VRAM + 0x8000));
|
||||
}
|
||||
else if (gBattleTypeFlags & BATTLE_TYPE_GROUDON)
|
||||
{
|
||||
LZDecompressVram(gBattleTerrainTiles_Cave, (void*)(VRAM + 0x8000));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
|
||||
{
|
||||
u8 trainerClass = gTrainers[gTrainerBattleOpponent_A].trainerClass;
|
||||
if (trainerClass == TRAINER_CLASS_LEADER)
|
||||
{
|
||||
LZDecompressVram(gBattleTerrainTiles_Building, (void*)(VRAM + 0x8000));
|
||||
break;
|
||||
}
|
||||
else if (trainerClass == TRAINER_CLASS_CHAMPION)
|
||||
{
|
||||
LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(VRAM + 0x8000));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
switch (GetCurrentMapBattleScene())
|
||||
{
|
||||
default:
|
||||
case MAP_BATTLE_SCENE_NORMAL:
|
||||
LZDecompressVram(gBattleTerrainTable[gBattleTerrain].tileset, (void*)(VRAM + 0x8000));
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_GYM:
|
||||
LZDecompressVram(gBattleTerrainTiles_Building, (void*)(VRAM + 0x8000));
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_MAGMA:
|
||||
LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(VRAM + 0x8000));
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_AQUA:
|
||||
LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(VRAM + 0x8000));
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_SIDNEY:
|
||||
LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(VRAM + 0x8000));
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_PHOEBE:
|
||||
LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(VRAM + 0x8000));
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_GLACIA:
|
||||
LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(VRAM + 0x8000));
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_DRAKE:
|
||||
LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(VRAM + 0x8000));
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_FRONTIER:
|
||||
LZDecompressVram(gBattleTerrainTiles_Building, (void*)(VRAM + 0x8000));
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
if (gBattleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000 | BATTLE_TYPE_EREADER_TRAINER))
|
||||
{
|
||||
LZDecompressVram(gBattleTerrainTilemap_Building, (void*)(VRAM + 0xD000));
|
||||
}
|
||||
else if (gBattleTypeFlags & BATTLE_TYPE_KYOGRE_GROUDON)
|
||||
{
|
||||
if (gGameVersion == VERSION_RUBY)
|
||||
LZDecompressVram(gBattleTerrainTilemap_Cave, (void*)(VRAM + 0xD000));
|
||||
else
|
||||
LZDecompressVram(gBattleTerrainTilemap_Water, (void*)(VRAM + 0xD000));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
|
||||
{
|
||||
u8 trainerClass = gTrainers[gTrainerBattleOpponent_A].trainerClass;
|
||||
if (trainerClass == TRAINER_CLASS_LEADER)
|
||||
{
|
||||
LZDecompressVram(gBattleTerrainTilemap_Building, (void*)(VRAM + 0xD000));
|
||||
break;
|
||||
}
|
||||
else if (trainerClass == TRAINER_CLASS_CHAMPION)
|
||||
{
|
||||
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(VRAM + 0xD000));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
switch (GetCurrentMapBattleScene())
|
||||
{
|
||||
default:
|
||||
case MAP_BATTLE_SCENE_NORMAL:
|
||||
LZDecompressVram(gBattleTerrainTable[gBattleTerrain].tilemap, (void*)(VRAM + 0xD000));
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_GYM:
|
||||
LZDecompressVram(gBattleTerrainTilemap_Building, (void*)(VRAM + 0xD000));
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_MAGMA:
|
||||
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(VRAM + 0xD000));
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_AQUA:
|
||||
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(VRAM + 0xD000));
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_SIDNEY:
|
||||
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(VRAM + 0xD000));
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_PHOEBE:
|
||||
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(VRAM + 0xD000));
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_GLACIA:
|
||||
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(VRAM + 0xD000));
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_DRAKE:
|
||||
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(VRAM + 0xD000));
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_FRONTIER:
|
||||
LZDecompressVram(gBattleTerrainTilemap_Building, (void*)(VRAM + 0xD000));
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
if (gBattleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000 | BATTLE_TYPE_EREADER_TRAINER))
|
||||
{
|
||||
LoadCompressedPalette(gBattleTerrainPalette_Frontier, 0x20, 0x60);
|
||||
}
|
||||
else if (gBattleTypeFlags & BATTLE_TYPE_KYOGRE_GROUDON)
|
||||
{
|
||||
if (gGameVersion == VERSION_RUBY)
|
||||
LoadCompressedPalette(gBattleTerrainPalette_Groudon, 0x20, 0x60);
|
||||
else
|
||||
LoadCompressedPalette(gBattleTerrainPalette_Kyogre, 0x20, 0x60);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
|
||||
{
|
||||
u8 trainerClass = gTrainers[gTrainerBattleOpponent_A].trainerClass;
|
||||
if (trainerClass == TRAINER_CLASS_LEADER)
|
||||
{
|
||||
LoadCompressedPalette(gBattleTerrainPalette_BuildingLeader, 0x20, 0x60);
|
||||
break;
|
||||
}
|
||||
else if (trainerClass == TRAINER_CLASS_CHAMPION)
|
||||
{
|
||||
LoadCompressedPalette(gBattleTerrainPalette_StadiumWallace, 0x20, 0x60);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
switch (GetCurrentMapBattleScene())
|
||||
{
|
||||
default:
|
||||
case MAP_BATTLE_SCENE_NORMAL:
|
||||
LoadCompressedPalette(gBattleTerrainTable[gBattleTerrain].palette, 0x20, 0x60);
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_GYM:
|
||||
LoadCompressedPalette(gBattleTerrainPalette_BuildingGym, 0x20, 0x60);
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_MAGMA:
|
||||
LoadCompressedPalette(gBattleTerrainPalette_StadiumMagma, 0x20, 0x60);
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_AQUA:
|
||||
LoadCompressedPalette(gBattleTerrainPalette_StadiumAqua, 0x20, 0x60);
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_SIDNEY:
|
||||
LoadCompressedPalette(gBattleTerrainPalette_StadiumSidney, 0x20, 0x60);
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_PHOEBE:
|
||||
LoadCompressedPalette(gBattleTerrainPalette_StadiumPhoebe, 0x20, 0x60);
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_GLACIA:
|
||||
LoadCompressedPalette(gBattleTerrainPalette_StadiumGlacia, 0x20, 0x60);
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_DRAKE:
|
||||
LoadCompressedPalette(gBattleTerrainPalette_StadiumDrake, 0x20, 0x60);
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_FRONTIER:
|
||||
LoadCompressedPalette(gBattleTerrainPalette_Frontier, 0x20, 0x60);
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
ApplyPlayerChosenFrameToBattleMenu();
|
||||
break;
|
||||
default:
|
||||
ret = TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -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"
|
||||
@@ -50,7 +51,7 @@ extern u8 gBankTarget;
|
||||
extern u8 gAbsentBankFlags;
|
||||
extern u8 gUnknown_020244B4[];
|
||||
extern u32 gTransformedPersonalities[BATTLE_BANKS_COUNT];
|
||||
extern struct MusicPlayerInfo gMPlay_BGM;
|
||||
extern struct MusicPlayerInfo gMPlayInfo_BGM;
|
||||
extern struct UnusedControllerStruct gUnknown_02022D0C;
|
||||
extern u16 gTrainerBattleOpponent_A;
|
||||
extern u16 gTrainerBattleOpponent_B;
|
||||
@@ -352,11 +353,11 @@ static void sub_8064734(void)
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_LINK)
|
||||
{
|
||||
if (GetBankIdentity(gActiveBank) == IDENTITY_OPPONENT_MON1)
|
||||
m4aMPlayContinue(&gMPlay_BGM);
|
||||
m4aMPlayContinue(&gMPlayInfo_BGM);
|
||||
}
|
||||
else
|
||||
{
|
||||
m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100);
|
||||
m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -498,7 +499,7 @@ static void sub_8064DD0(void)
|
||||
if (gSprites[gBankSpriteIds[gActiveBank]].callback == SpriteCallbackDummy
|
||||
|| gSprites[gBankSpriteIds[gActiveBank]].callback == SpriteCallbackDummy_2)
|
||||
{
|
||||
m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100);
|
||||
m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100);
|
||||
LinkOpponentBufferExecCompleted();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
@@ -37,7 +38,7 @@ extern u8 gBankSpriteIds[BATTLE_BANKS_COUNT];
|
||||
extern u8 gBattleBufferA[BATTLE_BANKS_COUNT][0x200];
|
||||
extern u8 gBattleBufferB[BATTLE_BANKS_COUNT][0x200];
|
||||
extern u8 gHealthBoxesIds[BATTLE_BANKS_COUNT];
|
||||
extern struct MusicPlayerInfo gMPlay_BGM;
|
||||
extern struct MusicPlayerInfo gMPlayInfo_BGM;
|
||||
extern u8 gUnknown_03005D7C[BATTLE_BANKS_COUNT];
|
||||
extern void (*gBattleBankFunc[BATTLE_BANKS_COUNT])(void);
|
||||
extern void *gUnknown_020244D8;
|
||||
@@ -349,10 +350,10 @@ static void sub_805F560(void)
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_LINK)
|
||||
{
|
||||
if (GetBankIdentity(gActiveBank) == 1)
|
||||
m4aMPlayContinue(&gMPlay_BGM);
|
||||
m4aMPlayContinue(&gMPlayInfo_BGM);
|
||||
}
|
||||
else
|
||||
m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100);
|
||||
m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100);
|
||||
}
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_1_x20 = 1;
|
||||
sp = TRUE;
|
||||
@@ -484,7 +485,7 @@ static void sub_805FC80(void)
|
||||
{
|
||||
if (gSprites[gBankSpriteIds[gActiveBank]].callback == SpriteCallbackDummy || gSprites[gBankSpriteIds[gActiveBank]].callback == SpriteCallbackDummy_2)
|
||||
{
|
||||
m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100);
|
||||
m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100);
|
||||
OpponentBufferExecCompleted();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
@@ -42,7 +43,7 @@ extern u8 gBattleBufferA[BATTLE_BANKS_COUNT][0x200];
|
||||
extern u8 gBattleBufferB[BATTLE_BANKS_COUNT][0x200];
|
||||
extern u8 gMultiUsePlayerCursor;
|
||||
extern struct BattlePokemon gBattleMons[BATTLE_BANKS_COUNT];
|
||||
extern struct MusicPlayerInfo gMPlay_BGM;
|
||||
extern struct MusicPlayerInfo gMPlayInfo_BGM;
|
||||
extern u16 gPartnerTrainerId;
|
||||
extern struct SpriteTemplate gUnknown_0202499C;
|
||||
extern u8 gBattleMonForms[BATTLE_BANKS_COUNT];
|
||||
@@ -234,7 +235,7 @@ static void (*const sPlayerBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
|
||||
static const u8 sTargetIdentities[] = {IDENTITY_PLAYER_MON1, IDENTITY_PLAYER_MON2, IDENTITY_OPPONENT_MON2, IDENTITY_OPPONENT_MON1};
|
||||
|
||||
// unknown unused data
|
||||
static const u8 gUnknown_0831C5FC[] = {0x48, 0x48, 0x20, 0x5a, 0x50, 0x50, 0x50, 0x58};
|
||||
static const u8 sUnknown_0831C5FC[] = {0x48, 0x48, 0x20, 0x5a, 0x50, 0x50, 0x50, 0x58};
|
||||
|
||||
void nullsub_21(void)
|
||||
{
|
||||
@@ -1053,9 +1054,9 @@ static void sub_8058B40(void)
|
||||
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_1_x20)
|
||||
{
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_LINK)
|
||||
m4aMPlayContinue(&gMPlay_BGM);
|
||||
m4aMPlayContinue(&gMPlayInfo_BGM);
|
||||
else
|
||||
m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100);
|
||||
m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100);
|
||||
}
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_1_x20 = 1;
|
||||
r9 = TRUE;
|
||||
@@ -1118,7 +1119,7 @@ static void sub_8058FC0(void)
|
||||
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].specialAnimActive
|
||||
&& !IsCryPlayingOrClearCrySongs())
|
||||
{
|
||||
m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100);
|
||||
m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100);
|
||||
HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
|
||||
PlayerBufferExecCompleted();
|
||||
}
|
||||
@@ -1147,7 +1148,7 @@ void c3_0802FDF4(u8 taskId)
|
||||
{
|
||||
if (!IsCryPlayingOrClearCrySongs())
|
||||
{
|
||||
m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100);
|
||||
m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100);
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
@@ -198,7 +199,7 @@ static void (*const sPlayerPartnerBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
|
||||
};
|
||||
|
||||
// unknown unused data
|
||||
static const u8 gUnknown_08617254[] =
|
||||
static const u8 sUnknown_08617254[] =
|
||||
{
|
||||
0x83, 0x4d, 0xf3, 0x5f, 0x6f, 0x4f, 0xeb, 0x3e,
|
||||
0x67, 0x2e, 0x10, 0x46, 0x8c, 0x3d, 0x28, 0x35,
|
||||
|
||||
@@ -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"
|
||||
@@ -51,7 +52,7 @@ extern u8 gBankTarget;
|
||||
extern u8 gAbsentBankFlags;
|
||||
extern u8 gUnknown_020244B4[];
|
||||
extern u32 gTransformedPersonalities[BATTLE_BANKS_COUNT];
|
||||
extern struct MusicPlayerInfo gMPlay_BGM;
|
||||
extern struct MusicPlayerInfo gMPlayInfo_BGM;
|
||||
extern struct UnusedControllerStruct gUnknown_02022D0C;
|
||||
extern u16 gTrainerBattleOpponent_A;
|
||||
extern u16 gTrainerBattleOpponent_B;
|
||||
@@ -330,11 +331,11 @@ static void sub_818686C(void)
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_LINK)
|
||||
{
|
||||
if (GetBankIdentity(gActiveBank) == IDENTITY_OPPONENT_MON1)
|
||||
m4aMPlayContinue(&gMPlay_BGM);
|
||||
m4aMPlayContinue(&gMPlayInfo_BGM);
|
||||
}
|
||||
else
|
||||
{
|
||||
m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100);
|
||||
m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100);
|
||||
}
|
||||
}
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_1_x20 = 1;
|
||||
@@ -483,7 +484,7 @@ static void sub_8186F14(void)
|
||||
if (gSprites[gBankSpriteIds[gActiveBank]].callback == SpriteCallbackDummy
|
||||
|| gSprites[gBankSpriteIds[gActiveBank]].callback == SpriteCallbackDummy_2)
|
||||
{
|
||||
m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100);
|
||||
m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100);
|
||||
RecordedOpponentBufferExecCompleted();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
@@ -53,7 +54,7 @@ extern u8 gUnknown_020244B4[];
|
||||
extern u32 gTransformedPersonalities[BATTLE_BANKS_COUNT];
|
||||
extern u8 gBattleCommunication[];
|
||||
extern u8 gUnknown_0203C7B4;
|
||||
extern struct MusicPlayerInfo gMPlay_BGM;
|
||||
extern struct MusicPlayerInfo gMPlayInfo_BGM;
|
||||
extern struct UnusedControllerStruct gUnknown_02022D0C;
|
||||
|
||||
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
|
||||
@@ -353,11 +354,11 @@ static void sub_8189D40(void)
|
||||
if ((gBattleTypeFlags & BATTLE_TYPE_LINK) && (gBattleTypeFlags & BATTLE_TYPE_MULTI))
|
||||
{
|
||||
if (GetBankIdentity(gActiveBank) == IDENTITY_PLAYER_MON1)
|
||||
m4aMPlayContinue(&gMPlay_BGM);
|
||||
m4aMPlayContinue(&gMPlayInfo_BGM);
|
||||
}
|
||||
else
|
||||
{
|
||||
m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100);
|
||||
m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
@@ -19,6 +20,7 @@
|
||||
#include "reshow_battle_screen.h"
|
||||
#include "pokeball.h"
|
||||
#include "data2.h"
|
||||
#include "pokeblock.h"
|
||||
|
||||
extern u32 gBattleExecBuffer;
|
||||
extern u8 gActiveBank;
|
||||
@@ -291,13 +293,13 @@ static void CompleteOnSpecialAnimDone(void)
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void OpenPokeblockCase(void)
|
||||
static void SafariOpenPokeblockCase(void)
|
||||
{
|
||||
if (!gPaletteFade.active)
|
||||
{
|
||||
gBattleBankFunc[gActiveBank] = CompleteWhenChosePokeblock;
|
||||
FreeAllWindowBuffers();
|
||||
sub_81358F4();
|
||||
OpenPokeblockCaseInBattle();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -497,7 +499,7 @@ static void SafariHandleChooseItem(void)
|
||||
s32 i;
|
||||
|
||||
BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
|
||||
gBattleBankFunc[gActiveBank] = OpenPokeblockCase;
|
||||
gBattleBankFunc[gActiveBank] = SafariOpenPokeblockCase;
|
||||
gBankInMenu = gActiveBank;
|
||||
}
|
||||
|
||||
|
||||
@@ -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"
|
||||
@@ -41,7 +42,7 @@ extern u8 gBattleBufferA[BATTLE_BANKS_COUNT][0x200];
|
||||
extern u8 gBattleBufferB[BATTLE_BANKS_COUNT][0x200];
|
||||
extern u8 gMultiUsePlayerCursor;
|
||||
extern struct BattlePokemon gBattleMons[BATTLE_BANKS_COUNT];
|
||||
extern struct MusicPlayerInfo gMPlay_BGM;
|
||||
extern struct MusicPlayerInfo gMPlayInfo_BGM;
|
||||
extern u16 gPartnerTrainerId;
|
||||
extern struct SpriteTemplate gUnknown_0202499C;
|
||||
extern u8 gBattleMonForms[BATTLE_BANKS_COUNT];
|
||||
|
||||
+16
-15
@@ -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"
|
||||
@@ -33,14 +34,14 @@ extern u8 gBankSpriteIds[BATTLE_BANKS_COUNT];
|
||||
extern u8 gHealthBoxesIds[BATTLE_BANKS_COUNT];
|
||||
extern u8 gBattleMonForms[BATTLE_BANKS_COUNT];
|
||||
extern u32 gTransformedPersonalities[BATTLE_BANKS_COUNT];
|
||||
extern struct MusicPlayerInfo gMPlay_SE1;
|
||||
extern struct MusicPlayerInfo gMPlay_SE2;
|
||||
extern struct MusicPlayerInfo gMPlay_BGM;
|
||||
extern struct MusicPlayerInfo gMPlayInfo_SE1;
|
||||
extern struct MusicPlayerInfo gMPlayInfo_SE2;
|
||||
extern struct MusicPlayerInfo gMPlayInfo_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[];
|
||||
@@ -63,7 +64,7 @@ extern const u8 gUnknown_08C1F46C[];
|
||||
extern const u8 gUnknown_08C1F5E8[];
|
||||
extern const u8 gUnknown_08C1F76C[];
|
||||
extern const u8 gUnknown_08C1F8E8[];
|
||||
extern const u8 gUnknown_08C0237C[];
|
||||
extern const u8 gBlankGfxCompressed[];
|
||||
extern const u16 gBattleInterface_BallStatusBarPal[];
|
||||
extern const u16 gBattleInterface_BallDisplayPal[];
|
||||
|
||||
@@ -110,10 +111,10 @@ static const struct CompressedSpriteSheet gUnknown_0832C100 =
|
||||
|
||||
static const struct CompressedSpriteSheet gUnknown_0832C108[BATTLE_BANKS_COUNT] =
|
||||
{
|
||||
{gUnknown_08C0237C, 0x0100, 0xd704},
|
||||
{gUnknown_08C0237C, 0x0120, 0xd705},
|
||||
{gUnknown_08C0237C, 0x0100, 0xd706},
|
||||
{gUnknown_08C0237C, 0x0120, 0xd707}
|
||||
{gBlankGfxCompressed, 0x0100, 0xd704},
|
||||
{gBlankGfxCompressed, 0x0120, 0xd705},
|
||||
{gBlankGfxCompressed, 0x0100, 0xd706},
|
||||
{gBlankGfxCompressed, 0x0120, 0xd707}
|
||||
};
|
||||
|
||||
static const struct SpritePalette gUnknown_0832C128[2] =
|
||||
@@ -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;
|
||||
@@ -526,8 +527,8 @@ bool8 mplay_80342A4(u8 bank)
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_8 < 30)
|
||||
return TRUE;
|
||||
|
||||
m4aMPlayStop(&gMPlay_SE1);
|
||||
m4aMPlayStop(&gMPlay_SE2);
|
||||
m4aMPlayStop(&gMPlayInfo_SE1);
|
||||
m4aMPlayStop(&gMPlayInfo_SE2);
|
||||
}
|
||||
if (zero == 0)
|
||||
{
|
||||
|
||||
@@ -177,7 +177,6 @@ extern const u16 gBattleInterface_BallDisplayPal[];
|
||||
extern const u8 gHealthboxElementsGfxTable[][32];
|
||||
|
||||
// functions
|
||||
extern void AddTextPrinterParametrized2(u8 windowId, u8 fontId, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, struct TextColor *color, s8 speed, const u8 *str); // menu.h
|
||||
extern void LoadBattleBarGfx(u8 arg0);
|
||||
|
||||
// this file's functions
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
#include "window.h"
|
||||
#include "palette.h"
|
||||
#include "battle_controllers.h"
|
||||
#include "battle_setup.h"
|
||||
|
||||
extern u16 gLastUsedItem;
|
||||
extern u8 gLastUsedAbility;
|
||||
@@ -54,8 +55,6 @@ extern void sub_81D5554(u8 *txtPtr, u16 trainerId); // pokenav
|
||||
extern void GetEreaderTrainerName(u8 *txtPtr);
|
||||
extern void sub_81A36D0(u8 arg0, u16 trainerId); // battle_frontier_2
|
||||
extern void sub_81D572C(u8 arg0, u16 trainerId); // pokenav
|
||||
extern const u8* GetTrainer1LoseText(void); // battle_setup
|
||||
extern const u8* GetTrainer2LoseText(void); // battle_setup
|
||||
extern void GetFrontierTrainerName(u8 *dst, u16 trainerId);
|
||||
extern s32 GetStringCenterAlignXOffsetWithLetterSpacing(u8 fontId, const u8 *str, s32 totalWidth, s16 letterSpacing);
|
||||
extern u8 GetTextSpeedInRecordedBattle(void);
|
||||
@@ -485,8 +484,8 @@ const u8 gText_PkmnBrokeFree[] = _("Oh, no!\nThe POKéMON broke free!");
|
||||
const u8 gText_ItAppearedCaught[] = _("Aww!\nIt appeared to be caught!");
|
||||
const u8 gText_AarghAlmostHadIt[] = _("Aargh!\nAlmost had it!");
|
||||
const u8 gText_ShootSoClose[] = _("Shoot!\nIt was so close, too!");
|
||||
const u8 gText_GotchaPkmnCaught[] = _("Gotcha!\n{B_OPPONENT_MON1_NAME} was caught!{UNKNOWN_A}{PLAY_BGM BGM_KACHI22}\p");
|
||||
const u8 gText_GotchaPkmnCaught2[] = _("Gotcha!\n{B_OPPONENT_MON1_NAME} was caught!{UNKNOWN_A}{PLAY_BGM BGM_KACHI22}{PAUSE 127}");
|
||||
const u8 gText_GotchaPkmnCaught[] = _("Gotcha!\n{B_OPPONENT_MON1_NAME} was caught!{UNKNOWN_A}{PLAY_BGM MUS_KACHI22}\p");
|
||||
const u8 gText_GotchaPkmnCaught2[] = _("Gotcha!\n{B_OPPONENT_MON1_NAME} was caught!{UNKNOWN_A}{PLAY_BGM MUS_KACHI22}{PAUSE 127}");
|
||||
const u8 gText_GiveNicknameCaptured[] = _("Give a nickname to the\ncaptured {B_OPPONENT_MON1_NAME}?");
|
||||
const u8 gText_PkmnSentToPC[] = _("{B_OPPONENT_MON1_NAME} was sent to\n{B_PC_CREATOR_NAME} PC.");
|
||||
const u8 gText_Someones[] = _("someone’s");
|
||||
@@ -1367,7 +1366,7 @@ static const u16 sUnknownMoveTable[] =
|
||||
|
||||
static const u8 sDummyWeirdStatusString[] = {EOS, EOS, EOS, EOS, EOS, EOS, EOS, EOS, 0, 0};
|
||||
|
||||
static const u8 gUnknown_085CD42C[] =
|
||||
static const u8 sUnknown_085CD42C[] =
|
||||
{
|
||||
0xFF, 0x1, 0x0, 0x1, 0x0, 0x0, 0x1, 0x1, 0xF, 0x6, 0x0, 0x0, 0xFF, 0x1,
|
||||
0x1, 0x1, 0x0, 0x0, 0x0, 0x1, 0xF, 0x6, 0x0, 0x0, 0xEE, 0x1, 0x0, 0x1, 0x0,
|
||||
@@ -1392,7 +1391,7 @@ static const u8 gUnknown_085CD42C[] =
|
||||
0x6, 0x0, 0x0, 0x0, 0x1, 0xFF, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x6, 0x0, 0x0
|
||||
};
|
||||
|
||||
static const u8 gUnknown_085CD54C[] =
|
||||
static const u8 sUnknown_085CD54C[] =
|
||||
{
|
||||
0xFF, 0x1, 0x0, 0x1, 0x0, 0x0, 0x1, 0x1, 0xF, 0x6, 0x0, 0x0, 0xFF, 0x1,
|
||||
0x1, 0x1, 0x0, 0x0, 0x0, 0x1, 0xF, 0x6, 0x0, 0x0, 0xEE, 0x1, 0x0, 0x1, 0x0,
|
||||
@@ -1419,7 +1418,7 @@ static const u8 gUnknown_085CD54C[] =
|
||||
|
||||
static const u8 * const gUnknown_085CD660[] =
|
||||
{
|
||||
gUnknown_085CD42C, gUnknown_085CD54C
|
||||
sUnknown_085CD42C, sUnknown_085CD54C
|
||||
};
|
||||
|
||||
static const u8 sRecordedBattleTextSpeeds[] = {8, 4, 1, 0};
|
||||
@@ -2068,7 +2067,7 @@ u32 BattleStringExpandPlaceholders(const u8* src, u8* dst)
|
||||
}
|
||||
else
|
||||
{
|
||||
toCpy = GetTrainer1LoseText();
|
||||
toCpy = GetTrainerALoseText();
|
||||
}
|
||||
break;
|
||||
case B_TXT_TRAINER1_WIN_TEXT: // trainerA win text
|
||||
@@ -2165,7 +2164,7 @@ u32 BattleStringExpandPlaceholders(const u8* src, u8* dst)
|
||||
}
|
||||
else
|
||||
{
|
||||
toCpy = GetTrainer2LoseText();
|
||||
toCpy = GetTrainerBLoseText();
|
||||
}
|
||||
break;
|
||||
case B_TXT_TRAINER2_WIN_TEXT:
|
||||
|
||||
@@ -17,6 +17,8 @@
|
||||
#include "battle_interface.h"
|
||||
#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"
|
||||
@@ -110,7 +112,7 @@ extern u16 gBattle_BG1_Y;
|
||||
extern u16 gBattle_BG2_X;
|
||||
extern u16 gBattle_BG2_Y;
|
||||
extern u16 gBattle_BG3_X;
|
||||
extern struct MusicPlayerInfo gMPlay_BGM;
|
||||
extern struct MusicPlayerInfo gMPlayInfo_BGM;
|
||||
|
||||
struct TrainerMoney
|
||||
{
|
||||
@@ -6236,19 +6238,19 @@ static u32 GetTrainerMoneyToGive(u16 trainerId)
|
||||
lastMonLevel = party[gTrainers[trainerId].partySize - 1].lvl;
|
||||
}
|
||||
break;
|
||||
case PARTY_FLAG_CUSTOM_MOVES:
|
||||
case F_TRAINER_PARTY_CUSTOM_MOVESET:
|
||||
{
|
||||
const struct TrainerMonNoItemCustomMoves *party = gTrainers[trainerId].party.NoItemCustomMoves;
|
||||
lastMonLevel = party[gTrainers[trainerId].partySize - 1].lvl;
|
||||
}
|
||||
break;
|
||||
case PARTY_FLAG_HAS_ITEM:
|
||||
case F_TRAINER_PARTY_HELD_ITEM:
|
||||
{
|
||||
const struct TrainerMonItemDefaultMoves *party = gTrainers[trainerId].party.ItemDefaultMoves;
|
||||
lastMonLevel = party[gTrainers[trainerId].partySize - 1].lvl;
|
||||
}
|
||||
break;
|
||||
case PARTY_FLAG_CUSTOM_MOVES | PARTY_FLAG_HAS_ITEM:
|
||||
case F_TRAINER_PARTY_CUSTOM_MOVESET | F_TRAINER_PARTY_HELD_ITEM:
|
||||
{
|
||||
const struct TrainerMonItemCustomMoves *party = gTrainers[trainerId].party.ItemCustomMoves;
|
||||
lastMonLevel = party[gTrainers[trainerId].partySize - 1].lvl;
|
||||
@@ -7101,10 +7103,10 @@ static void atk76_various(void)
|
||||
}
|
||||
break;
|
||||
case 21:
|
||||
m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x55);
|
||||
m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x55);
|
||||
break;
|
||||
case 22:
|
||||
m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100);
|
||||
m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100);
|
||||
break;
|
||||
case 23:
|
||||
gBattleStruct->field_2A2 |= gBitTable[gActiveBank];
|
||||
@@ -7120,7 +7122,7 @@ static void atk76_various(void)
|
||||
gBattleOutcome = BATTLE_OPPONENT_TELEPORTED;
|
||||
break;
|
||||
case VARIOUS_PLAY_TRAINER_DEFEATED_MUSIC:
|
||||
EmitPlayFanfareOrBGM(0, BGM_KACHI1, TRUE);
|
||||
EmitPlayFanfareOrBGM(0, MUS_KACHI1, TRUE);
|
||||
MarkBufferBankForExecution(gActiveBank);
|
||||
break;
|
||||
}
|
||||
@@ -10334,7 +10336,7 @@ static void atkE4_getsecretpowereffect(void)
|
||||
case BATTLE_TERRAIN_POND:
|
||||
gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_SPD_MINUS_1;
|
||||
break;
|
||||
case BATTLE_TERRAIN_ROCK:
|
||||
case BATTLE_TERRAIN_MOUNTAIN:
|
||||
gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_CONFUSION;
|
||||
break;
|
||||
case BATTLE_TERRAIN_CAVE:
|
||||
|
||||
+1881
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -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"
|
||||
|
||||
+13
-15
@@ -127,15 +127,13 @@ struct BerryBlenderData
|
||||
struct BlenderGameBlock gameBlock;
|
||||
};
|
||||
|
||||
extern struct MusicPlayerInfo gMPlay_SE2;
|
||||
extern struct MusicPlayerInfo gMPlay_BGM;
|
||||
extern struct MusicPlayerInfo gMPlayInfo_SE2;
|
||||
extern struct MusicPlayerInfo gMPlayInfo_BGM;
|
||||
extern u16 gSpecialVar_ItemId;
|
||||
extern u8 gInGameOpponentsNo;
|
||||
extern u8 gUnknown_020322D5;
|
||||
extern u8 gResultsWindowId;
|
||||
|
||||
extern const u8 * const gPokeblockNames[];
|
||||
|
||||
// graphics
|
||||
extern const u8 gBerryBlenderArrowTiles[];
|
||||
extern const u8 gBerryBlenderStartTiles[];
|
||||
@@ -803,7 +801,7 @@ static const struct WindowTemplate sBlenderRecordWindowTemplate = {0, 6, 4, 0x12
|
||||
|
||||
static void Blender_ControlHitPitch(void)
|
||||
{
|
||||
m4aMPlayPitchControl(&gMPlay_SE2, 0xFFFF, 2 * (sBerryBlenderData->field_4C - 128));
|
||||
m4aMPlayPitchControl(&gMPlayInfo_SE2, 0xFFFF, 2 * (sBerryBlenderData->field_4C - 128));
|
||||
}
|
||||
|
||||
static void VBlankCB0_BerryBlender(void)
|
||||
@@ -1305,11 +1303,11 @@ static void sub_8080018(void)
|
||||
sBerryBlenderData->field_4C = 128;
|
||||
sBerryBlenderData->gameFrameTime = 0;
|
||||
SetMainCallback2(sub_8081898);
|
||||
if (GetCurrentMapMusic() != BGM_CYCLING)
|
||||
if (GetCurrentMapMusic() != MUS_CYCLING)
|
||||
{
|
||||
sBerryBlenderData->field_154 = GetCurrentMapMusic();
|
||||
}
|
||||
PlayBGM(BGM_CYCLING);
|
||||
PlayBGM(MUS_CYCLING);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1604,10 +1602,10 @@ static void sub_80808D4(void)
|
||||
sBerryBlenderData->field_120[i] = CreateTask(sUnknown_083399EC[i], 10 + i);
|
||||
}
|
||||
|
||||
if (GetCurrentMapMusic() != BGM_CYCLING)
|
||||
if (GetCurrentMapMusic() != MUS_CYCLING)
|
||||
sBerryBlenderData->field_154 = GetCurrentMapMusic();
|
||||
|
||||
PlayBGM(BGM_CYCLING);
|
||||
PlayBGM(MUS_CYCLING);
|
||||
PlaySE(SE_MOTER);
|
||||
Blender_ControlHitPitch();
|
||||
break;
|
||||
@@ -1940,9 +1938,9 @@ static void sub_80814F4(void)
|
||||
if (gRecvCmds[i][2] == 0x2345 || gRecvCmds[2][i] == 0x4523 || gRecvCmds[2][i] == 0x5432) // could be a bug, 2 and i are reversed
|
||||
{
|
||||
if (sBerryBlenderData->field_4C > 1500)
|
||||
m4aMPlayTempoControl(&gMPlay_BGM, ((sBerryBlenderData->field_4C - 750) / 20) + 256);
|
||||
m4aMPlayTempoControl(&gMPlayInfo_BGM, ((sBerryBlenderData->field_4C - 750) / 20) + 256);
|
||||
else
|
||||
m4aMPlayTempoControl(&gMPlay_BGM, 0x100);
|
||||
m4aMPlayTempoControl(&gMPlayInfo_BGM, 0x100);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2337,7 +2335,7 @@ static void CB2_HandleBlenderEndGame(void)
|
||||
switch (sBerryBlenderData->gameEndState)
|
||||
{
|
||||
case 1:
|
||||
m4aMPlayTempoControl(&gMPlay_BGM, 256);
|
||||
m4aMPlayTempoControl(&gMPlayInfo_BGM, 256);
|
||||
for (i = 0; i < gSpecialVar_0x8004; i++)
|
||||
{
|
||||
DestroyTask(sBerryBlenderData->field_120[i]);
|
||||
@@ -2357,7 +2355,7 @@ static void CB2_HandleBlenderEndGame(void)
|
||||
sBerryBlenderData->gameEndState = 5;
|
||||
|
||||
sBerryBlenderData->mainState = 0;
|
||||
m4aMPlayStop(&gMPlay_SE2);
|
||||
m4aMPlayStop(&gMPlayInfo_SE2);
|
||||
}
|
||||
Blender_ControlHitPitch();
|
||||
break;
|
||||
@@ -2444,7 +2442,7 @@ static void CB2_HandleBlenderEndGame(void)
|
||||
sBerryBlenderData->gameEndState++;
|
||||
break;
|
||||
case 10:
|
||||
switch (sub_8198C58())
|
||||
switch (ProcessMenuInputNoWrap_())
|
||||
{
|
||||
case 1:
|
||||
case -1:
|
||||
@@ -3522,7 +3520,7 @@ static void sub_8083F3C(u8 taskId)
|
||||
{
|
||||
if (gTasks[taskId].data[0] == 0)
|
||||
{
|
||||
PlayFanfare(BGM_FANFA1);
|
||||
PlayFanfare(MUS_FANFA1);
|
||||
gTasks[taskId].data[0]++;
|
||||
}
|
||||
if (IsFanfareTaskInactive())
|
||||
|
||||
+58
-58
@@ -35,9 +35,9 @@ static void berry_fix_bg_hide(void);
|
||||
|
||||
// .rodata
|
||||
|
||||
static const u8 gUnknown_08617E78[] = _("Berry Program Update");
|
||||
static const u8 gUnknown_08617E8D[] = _("Ruby/Sapphire");
|
||||
static const u8 gUnknown_08617E9B[] = _("Emerald");
|
||||
static const u8 sUnknown_08617E78[] = _("Berry Program Update");
|
||||
static const u8 sUnknown_08617E8D[] = _("Ruby/Sapphire");
|
||||
static const u8 sUnknown_08617E9B[] = _("Emerald");
|
||||
|
||||
static const u8 Unknown_08617EA3[] = _("The Berry Program on your POKéMON\nRuby/Sapphire Game Pak will be updated.\n{COLOR RED}{SHADOW LIGHT_RED}Press the A Button.");
|
||||
static const u8 Unknown_08617F07[] = _("Please ensure the connection of your\nGame Boy Advance system matches this.\n{COLOR RED}{SHADOW LIGHT_RED}YES: Press the A Button.\nNO: Turn off the power and try again.");
|
||||
@@ -62,15 +62,15 @@ static const struct WindowTemplate gUnknown_08618110[] = {
|
||||
{-1}
|
||||
};
|
||||
|
||||
static const u16 gUnknown_08618138[] = {
|
||||
static const u16 sUnknown_08618138[] = {
|
||||
0x7fff, 0x7fff, 0x318c, 0x675a,
|
||||
0x043c, 0x3aff, 0x0664, 0x4bd2,
|
||||
0x6546, 0x7b14, 0x7fff, 0x318c,
|
||||
0x675a, 0x0000, 0x0000, 0x0000
|
||||
};
|
||||
|
||||
static const u8 gUnknown_08618158[] = {10, 11, 12};
|
||||
static const u8 gUnknown_0861815B[] = { 0, 10, 13};
|
||||
static const u8 sUnknown_08618158[] = {10, 11, 12};
|
||||
static const u8 sUnknown_0861815B[] = { 0, 10, 13};
|
||||
|
||||
static const u8 *const gUnknown_08618160[] = {
|
||||
Unknown_08617F07,
|
||||
@@ -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
|
||||
},
|
||||
};
|
||||
|
||||
@@ -243,21 +243,21 @@ static void berry_fix_gpu_set(void)
|
||||
InitWindows(gUnknown_08618110);
|
||||
DeactivateAllTextPrinters();
|
||||
|
||||
DmaCopy32(3, gUnknown_08618138, BG_PLTT + 0x1E0, 0x20);
|
||||
DmaCopy32(3, sUnknown_08618138, BG_PLTT + 0x1E0, 0x20);
|
||||
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP);
|
||||
FillWindowPixelBuffer(2, 0);
|
||||
FillWindowPixelBuffer(3, 0);
|
||||
FillWindowPixelBuffer(0, 0xAA);
|
||||
|
||||
// This block is a meme among memes
|
||||
width = (0x78 - GetStringWidth(0, gUnknown_08617E9B, 0)) / 2;
|
||||
box_print(2, 0, width, 3, gUnknown_0861815B, -1, gUnknown_08617E9B);
|
||||
width = (s32)(0x78 - GetStringWidth(0, gUnknown_08617E9B, 0)) / 2 + 0x78;
|
||||
box_print(2, 0, width, 3, gUnknown_0861815B, -1, gUnknown_08617E8D);
|
||||
width = (0x70 - GetStringWidth(0, gUnknown_08617E8D, 0)) / 2;
|
||||
box_print(3, 0, width, 0, gUnknown_0861815B, -1, gUnknown_08617E8D);
|
||||
width = (0xd0 - GetStringWidth(1, gUnknown_08617E78, 0)) / 2;
|
||||
box_print(0, 1, width, 2, gUnknown_08618158, -1, gUnknown_08617E78);
|
||||
width = (0x78 - GetStringWidth(0, sUnknown_08617E9B, 0)) / 2;
|
||||
box_print(2, 0, width, 3, sUnknown_0861815B, -1, sUnknown_08617E9B);
|
||||
width = (s32)(0x78 - GetStringWidth(0, sUnknown_08617E9B, 0)) / 2 + 0x78;
|
||||
box_print(2, 0, width, 3, sUnknown_0861815B, -1, sUnknown_08617E8D);
|
||||
width = (0x70 - GetStringWidth(0, sUnknown_08617E8D, 0)) / 2;
|
||||
box_print(3, 0, width, 0, sUnknown_0861815B, -1, sUnknown_08617E8D);
|
||||
width = (0xd0 - GetStringWidth(1, sUnknown_08617E78, 0)) / 2;
|
||||
box_print(0, 1, width, 2, sUnknown_08618158, -1, sUnknown_08617E78);
|
||||
|
||||
CopyWindowToVram(2, 2);
|
||||
CopyWindowToVram(3, 2);
|
||||
@@ -346,7 +346,7 @@ __attribute__((naked)) static void berry_fix_gpu_set(void)
|
||||
"\tldr r0, =gUnknown_08618110\n"
|
||||
"\tbl InitWindows\n"
|
||||
"\tbl DeactivateAllTextPrinters\n"
|
||||
"\tldr r0, =gUnknown_08618138\n"
|
||||
"\tldr r0, =sUnknown_08618138\n"
|
||||
"\tstr r0, [r4]\n"
|
||||
"\tldr r0, =0x050001e0\n"
|
||||
"\tstr r0, [r4, 0x4]\n"
|
||||
@@ -365,7 +365,7 @@ __attribute__((naked)) static void berry_fix_gpu_set(void)
|
||||
"\tmovs r0, 0\n"
|
||||
"\tmovs r1, 0xAA\n"
|
||||
"\tbl FillWindowPixelBuffer\n"
|
||||
"\tldr r5, =gUnknown_08617E9B\n"
|
||||
"\tldr r5, =sUnknown_08617E9B\n"
|
||||
"\tmovs r0, 0\n"
|
||||
"\tadds r1, r5, 0\n"
|
||||
"\tmovs r2, 0\n"
|
||||
@@ -378,7 +378,7 @@ __attribute__((naked)) static void berry_fix_gpu_set(void)
|
||||
"\tasrs r0, 1\n"
|
||||
"\tlsls r2, r0, 24\n"
|
||||
"\tlsrs r2, 24\n"
|
||||
"\tldr r6, =gUnknown_0861815B\n"
|
||||
"\tldr r6, =sUnknown_0861815B\n"
|
||||
"\tstr r6, [sp]\n"
|
||||
"\tmovs r0, 0x1\n"
|
||||
"\tnegs r0, r0\n"
|
||||
@@ -389,7 +389,7 @@ __attribute__((naked)) static void berry_fix_gpu_set(void)
|
||||
"\tmovs r1, 0\n"
|
||||
"\tmovs r3, 0x3\n"
|
||||
"\tbl box_print\n"
|
||||
"\tldr r5, =gUnknown_08617E8D\n"
|
||||
"\tldr r5, =sUnknown_08617E8D\n"
|
||||
"\tmovs r0, 0\n"
|
||||
"\tadds r1, r5, 0\n"
|
||||
"\tmovs r2, 0\n"
|
||||
@@ -431,7 +431,7 @@ __attribute__((naked)) static void berry_fix_gpu_set(void)
|
||||
"\tmovs r1, 0\n"
|
||||
"\tmovs r3, 0\n"
|
||||
"\tbl box_print\n"
|
||||
"\tldr r4, =gUnknown_08617E78\n"
|
||||
"\tldr r4, =sUnknown_08617E78\n"
|
||||
"\tmovs r0, 0x1\n"
|
||||
"\tadds r1, r4, 0\n"
|
||||
"\tmovs r2, 0\n"
|
||||
@@ -444,7 +444,7 @@ __attribute__((naked)) static void berry_fix_gpu_set(void)
|
||||
"\tasrs r0, 1\n"
|
||||
"\tlsls r2, r0, 24\n"
|
||||
"\tlsrs r2, 24\n"
|
||||
"\tldr r0, =gUnknown_08618158\n"
|
||||
"\tldr r0, =sUnknown_08618158\n"
|
||||
"\tstr r0, [sp]\n"
|
||||
"\tmov r0, r8\n"
|
||||
"\tstr r0, [sp, 0x4]\n"
|
||||
@@ -496,7 +496,7 @@ static void berry_fix_text_print(int scene)
|
||||
{
|
||||
FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 32, 32);
|
||||
FillWindowPixelBuffer(1, 0xAA);
|
||||
box_print(1, 1, 0, 0, gUnknown_08618158, -1, gUnknown_08618160[scene]);
|
||||
box_print(1, 1, 0, 0, sUnknown_08618158, -1, gUnknown_08618160[scene]);
|
||||
PutWindowTilemap(1);
|
||||
CopyWindowToVram(1, 2);
|
||||
switch (scene)
|
||||
|
||||
@@ -1007,7 +1007,7 @@ void CopyToBgTilemapBufferRect_ChangePalette(u8 bg, void *src, u8 destX, u8 dest
|
||||
}
|
||||
// Skipping for now, it probably uses structs passed by value
|
||||
/*
|
||||
void CopyRectToBgTilemapBufferRect(u8 bg, void* src, u8 srcX, u8 srcY, u8 srcWidth, u8 srcHeight, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, u8 palette1, u16 tileOffset, u16 palette2)
|
||||
void CopyRectToBgTilemapBufferRect(u8 bg, const void* src, u8 srcX, u8 srcY, u8 srcWidth, u8 srcHeight, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, u8 palette1, u16 tileOffset, u16 palette2)
|
||||
{
|
||||
u16 attribute;
|
||||
u16 mode;
|
||||
@@ -1049,7 +1049,7 @@ void CopyRectToBgTilemapBufferRect(u8 bg, void* src, u8 srcX, u8 srcY, u8 srcWid
|
||||
}
|
||||
}*/
|
||||
__attribute__((naked))
|
||||
void CopyRectToBgTilemapBufferRect(u8 bg, void* src, u8 srcX, u8 srcY, u8 srcWidth, u8 srcHeight, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, u8 palette1, u16 tileOffset, u16 palette2)
|
||||
void CopyRectToBgTilemapBufferRect(u8 bg, const void* src, u8 srcX, u8 srcY, u8 srcWidth, u8 srcHeight, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, u8 palette1, u16 tileOffset, u16 palette2)
|
||||
{
|
||||
asm("push {r4-r7,lr}\n\
|
||||
mov r7, r10\n\
|
||||
|
||||
+1078
File diff suppressed because it is too large
Load Diff
@@ -88,7 +88,7 @@ static void Task_DoClearSaveDataScreenYesNo(u8 taskId)
|
||||
|
||||
static void Task_ClearSaveDataScreenYesNoChoice(u8 taskId)
|
||||
{
|
||||
switch(sub_8198C58())
|
||||
switch(ProcessMenuInputNoWrap_())
|
||||
{
|
||||
case 0:
|
||||
FillWindowPixelBuffer(0, 17);
|
||||
|
||||
+93
@@ -0,0 +1,93 @@
|
||||
#include "global.h"
|
||||
#include "rom6.h"
|
||||
#include "event_data.h"
|
||||
#include "rtc.h"
|
||||
#include "lottery_corner.h"
|
||||
#include "dewford_trend.h"
|
||||
#include "tv.h"
|
||||
#include "field_screen.h"
|
||||
#include "berry.h"
|
||||
#include "main.h"
|
||||
#include "overworld.h"
|
||||
#include "wallclock.h"
|
||||
|
||||
// static types
|
||||
|
||||
// static declarations
|
||||
|
||||
static void UpdatePerDay(struct Time *localTime);
|
||||
static void UpdatePerMinute(struct Time *localTime);
|
||||
|
||||
// rodata
|
||||
|
||||
// text
|
||||
|
||||
static void InitTimeBasedEvents(void)
|
||||
{
|
||||
FlagSet(FLAG_SYS_CLOCK_SET);
|
||||
RtcCalcLocalTime();
|
||||
gSaveBlock2Ptr->lastBerryTreeUpdate = gLocalTime;
|
||||
VarSet(VAR_DAYS, gLocalTime.days);
|
||||
}
|
||||
|
||||
void DoTimeBasedEvents(void)
|
||||
{
|
||||
if (FlagGet(FLAG_SYS_CLOCK_SET) && !sub_813B9C0())
|
||||
{
|
||||
RtcCalcLocalTime();
|
||||
UpdatePerDay(&gLocalTime);
|
||||
UpdatePerMinute(&gLocalTime);
|
||||
}
|
||||
}
|
||||
|
||||
static void UpdatePerDay(struct Time *localTime)
|
||||
{
|
||||
u16 *days = GetVarPointer(VAR_DAYS);
|
||||
u16 daysSince;
|
||||
|
||||
if (*days != localTime->days && *days <= localTime->days)
|
||||
{
|
||||
daysSince = localTime->days - *days;
|
||||
ClearUpperFlags();
|
||||
UpdateDewfordTrendPerDay(daysSince);
|
||||
UpdateTVShowsPerDay(daysSince);
|
||||
UpdateWeatherPerDay(daysSince);
|
||||
UpdatePartyPokerusTime(daysSince);
|
||||
UpdateMirageRnd(daysSince);
|
||||
UpdateBirchState(daysSince);
|
||||
UpdateFrontierManiac(daysSince);
|
||||
UpdateFrontierGambler(daysSince);
|
||||
SetShoalItemFlag(daysSince);
|
||||
SetRandomLotteryNumber(daysSince);
|
||||
*days = localTime->days;
|
||||
}
|
||||
}
|
||||
|
||||
static void UpdatePerMinute(struct Time *localTime)
|
||||
{
|
||||
struct Time difference;
|
||||
int minutes;
|
||||
|
||||
CalcTimeDifference(&difference, &gSaveBlock2Ptr->lastBerryTreeUpdate, localTime);
|
||||
minutes = 24 * 60 * difference.days + 60 * difference.hours + difference.minutes;
|
||||
if (minutes != 0)
|
||||
{
|
||||
if (minutes >= 0)
|
||||
{
|
||||
BerryTreeTimeUpdate(minutes);
|
||||
gSaveBlock2Ptr->lastBerryTreeUpdate = *localTime;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void ReturnFromStartWallClock(void)
|
||||
{
|
||||
InitTimeBasedEvents();
|
||||
SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music);
|
||||
}
|
||||
|
||||
void StartWallClock(void)
|
||||
{
|
||||
SetMainCallback2(Cb2_StartWallClock);
|
||||
gMain.savedCallback = ReturnFromStartWallClock;
|
||||
}
|
||||
+5
-4
@@ -40,7 +40,7 @@ extern const u8 gDaycareText_PlayOther[];
|
||||
|
||||
extern u8 GetCursorSelectionMonId(void);
|
||||
extern u16 ItemIdToBattleMoveId(u16);
|
||||
extern s32 ListMenuHandleInput(u8);
|
||||
extern s32 ListMenuHandleInputGetItemId(u8);
|
||||
extern void sub_81AE6C8(u8, u16*, u16*);
|
||||
extern void sub_819746C(u8, bool8);
|
||||
extern void sub_81973FC(u8, bool8);
|
||||
@@ -75,7 +75,7 @@ static const struct ListMenuItem sLevelMenuItems[] =
|
||||
static const struct ListMenuTemplate sDaycareListMenuLevelTemplate =
|
||||
{
|
||||
.items = sLevelMenuItems,
|
||||
.unk_04 = sub_81AF078,
|
||||
.moveCursorFunc = sub_81AF078,
|
||||
.unk_08 = DaycarePrintMonInfo,
|
||||
.totalItems = 3,
|
||||
.maxShowed = 3,
|
||||
@@ -90,7 +90,8 @@ static const struct ListMenuTemplate sDaycareListMenuLevelTemplate =
|
||||
.unk_16_0 = TRUE,
|
||||
.spaceBetweenItems = 0,
|
||||
.unk_16_7 = FALSE,
|
||||
.unk_17_0 = 1
|
||||
.unk_17_0 = 1,
|
||||
.cursorKind = 0
|
||||
};
|
||||
|
||||
static const u8 *const sCompatibilityMessages[] =
|
||||
@@ -1256,7 +1257,7 @@ static void DaycarePrintMonInfo(u8 windowId, s32 daycareSlotId, u8 y)
|
||||
|
||||
static void Task_HandleDaycareLevelMenuInput(u8 taskId)
|
||||
{
|
||||
u32 var = ListMenuHandleInput(gTasks[taskId].tMenuListTaskId);
|
||||
u32 var = ListMenuHandleInputGetItemId(gTasks[taskId].tMenuListTaskId);
|
||||
|
||||
if (gMain.newKeys & A_BUTTON)
|
||||
{
|
||||
|
||||
+13
-13
@@ -25,7 +25,7 @@
|
||||
#include "sound.h"
|
||||
#include "event_scripts.h"
|
||||
#include "event_data.h"
|
||||
#include "region_map.h"
|
||||
#include "constants/region_map_sections.h"
|
||||
#include "player_pc.h"
|
||||
#include "strings.h"
|
||||
#include "tv.h"
|
||||
@@ -792,17 +792,17 @@ void sub_8127330(u8 taskId)
|
||||
for (i = 0; i < sDecorPCBuffer->unk_520 - 1; i ++)
|
||||
{
|
||||
sub_8127454(sDecorPCBuffer->names[i], gCurDecorInventoryItems[i]);
|
||||
sDecorPCBuffer->items[i].unk_00 = sDecorPCBuffer->names[i];
|
||||
sDecorPCBuffer->items[i].unk_04 = i;
|
||||
sDecorPCBuffer->items[i].name = sDecorPCBuffer->names[i];
|
||||
sDecorPCBuffer->items[i].id = i;
|
||||
}
|
||||
StringCopy(sDecorPCBuffer->names[i], gText_Cancel);
|
||||
sDecorPCBuffer->items[i].unk_00 = sDecorPCBuffer->names[i];
|
||||
sDecorPCBuffer->items[i].unk_04 = -2;
|
||||
gUnknown_03006310 = gUnknown_085A6BD0;
|
||||
gUnknown_03006310.unk_10 = sDecorMenuWindowIndices[1];
|
||||
gUnknown_03006310.totalItems = sDecorPCBuffer->unk_520;
|
||||
gUnknown_03006310.items = sDecorPCBuffer->items;
|
||||
gUnknown_03006310.maxShowed = sDecorPCBuffer->unk_521;
|
||||
sDecorPCBuffer->items[i].name = sDecorPCBuffer->names[i];
|
||||
sDecorPCBuffer->items[i].id = -2;
|
||||
gMultiuseListMenuTemplate = gUnknown_085A6BD0;
|
||||
gMultiuseListMenuTemplate.unk_10 = sDecorMenuWindowIndices[1];
|
||||
gMultiuseListMenuTemplate.totalItems = sDecorPCBuffer->unk_520;
|
||||
gMultiuseListMenuTemplate.items = sDecorPCBuffer->items;
|
||||
gMultiuseListMenuTemplate.maxShowed = sDecorPCBuffer->unk_521;
|
||||
}
|
||||
|
||||
void sub_8127454(u8 *dest, u16 decorId)
|
||||
@@ -871,7 +871,7 @@ void sub_812759C(u8 taskId)
|
||||
sub_81272C8();
|
||||
sub_81272F8();
|
||||
sub_8127330(taskId);
|
||||
data[13] = ListMenuInit(&gUnknown_03006310, sSecretBasePCSelectDecorPageNo, sSecretBasePCSelectDecorLineNo);
|
||||
data[13] = ListMenuInit(&gMultiuseListMenuTemplate, sSecretBasePCSelectDecorPageNo, sSecretBasePCSelectDecorLineNo);
|
||||
sub_8127500();
|
||||
}
|
||||
|
||||
@@ -889,8 +889,8 @@ void sub_812764C(u8 taskId)
|
||||
data = gTasks[taskId].data;
|
||||
if (!gPaletteFade.active)
|
||||
{
|
||||
input = ListMenuHandleInput(data[13]);
|
||||
get_coro_args_x18_x1A(data[13], &sSecretBasePCSelectDecorPageNo, &sSecretBasePCSelectDecorLineNo);
|
||||
input = ListMenuHandleInputGetItemId(data[13]);
|
||||
sub_81AE860(data[13], &sSecretBasePCSelectDecorPageNo, &sSecretBasePCSelectDecorLineNo);
|
||||
switch (input)
|
||||
{
|
||||
case -1:
|
||||
|
||||
+128
-425
@@ -1,13 +1,24 @@
|
||||
#include "global.h"
|
||||
#include "dma3.h"
|
||||
|
||||
IWRAM_DATA struct {
|
||||
/* 0x00 */ const u8 *src;
|
||||
/* 0x04 */ u8 *dest;
|
||||
/* 0x08 */ u16 size;
|
||||
/* 0x0A */ u16 mode;
|
||||
/* 0x0C */ u32 value;
|
||||
} gDma3Requests[128];
|
||||
// Maximum amount of data we will transfer in one operation
|
||||
#define MAX_DMA_BLOCK_SIZE 0x1000
|
||||
|
||||
#define MAX_DMA_REQUESTS 128
|
||||
|
||||
#define DMA_REQUEST_COPY32 1
|
||||
#define DMA_REQUEST_FILL32 2
|
||||
#define DMA_REQUEST_COPY16 3
|
||||
#define DMA_REQUEST_FILL16 4
|
||||
|
||||
IWRAM_DATA struct
|
||||
{
|
||||
const u8 *src;
|
||||
u8 *dest;
|
||||
u16 size;
|
||||
u16 mode;
|
||||
u32 value;
|
||||
} gDma3Requests[MAX_DMA_REQUESTS];
|
||||
|
||||
static bool8 gDma3ManagerLocked;
|
||||
static u8 gDma3RequestCursor;
|
||||
@@ -19,88 +30,103 @@ void ClearDma3Requests(void)
|
||||
gDma3ManagerLocked = TRUE;
|
||||
gDma3RequestCursor = 0;
|
||||
|
||||
for(i = 0; i < (u8)ARRAY_COUNT(gDma3Requests); i++)
|
||||
for (i = 0; i < MAX_DMA_REQUESTS; i++)
|
||||
{
|
||||
gDma3Requests[i].size = 0;
|
||||
gDma3Requests[i].src = 0;
|
||||
gDma3Requests[i].dest = 0;
|
||||
gDma3Requests[i].src = NULL;
|
||||
gDma3Requests[i].dest = NULL;
|
||||
}
|
||||
|
||||
gDma3ManagerLocked = FALSE;
|
||||
}
|
||||
|
||||
#ifdef NONMATCHING
|
||||
#define Dma3CopyLarge_(src, dest, size, bit) \
|
||||
{ \
|
||||
const void *_src = src; \
|
||||
void *_dest = dest; \
|
||||
u32 _size = size; \
|
||||
while (1) \
|
||||
{ \
|
||||
if (_size <= MAX_DMA_BLOCK_SIZE) \
|
||||
{ \
|
||||
DmaCopy##bit(3, _src, _dest, _size); \
|
||||
break; \
|
||||
} \
|
||||
DmaCopy##bit(3, _src, _dest, MAX_DMA_BLOCK_SIZE); \
|
||||
_src += MAX_DMA_BLOCK_SIZE; \
|
||||
_dest += MAX_DMA_BLOCK_SIZE; \
|
||||
_size -= MAX_DMA_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 <= MAX_DMA_BLOCK_SIZE) \
|
||||
{ \
|
||||
DmaFill##bit(3, value, _dest, _size); \
|
||||
break; \
|
||||
} \
|
||||
DmaFill##bit(3, value, _dest, MAX_DMA_BLOCK_SIZE); \
|
||||
_dest += MAX_DMA_BLOCK_SIZE; \
|
||||
_size -= MAX_DMA_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 bytesTransferred;
|
||||
|
||||
if (gDma3ManagerLocked)
|
||||
return;
|
||||
|
||||
total_size = 0;
|
||||
bytesTransferred = 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;
|
||||
bytesTransferred += gDma3Requests[gDma3RequestCursor].size;
|
||||
|
||||
if (total_size > 0xA000)
|
||||
return; // don't do too much at once
|
||||
|
||||
if (REG_VCOUNT > 224)
|
||||
return;// we're about to leave vblank, stop
|
||||
if (bytesTransferred > 40 * 1024)
|
||||
return; // don't transfer more than 40 KiB
|
||||
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);
|
||||
case DMA_REQUEST_COPY32: // regular 32-bit copy
|
||||
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);
|
||||
case DMA_REQUEST_FILL32: // repeat a single 32-bit value across RAM
|
||||
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);
|
||||
case DMA_REQUEST_COPY16: // regular 16-bit copy
|
||||
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);
|
||||
case DMA_REQUEST_FILL16: // repeat a single 16-bit value across RAM
|
||||
Dma3FillLarge16_(gDma3Requests[gDma3RequestCursor].value,
|
||||
gDma3Requests[gDma3RequestCursor].dest,
|
||||
gDma3Requests[gDma3RequestCursor].size);
|
||||
break;
|
||||
}
|
||||
|
||||
// Free the request
|
||||
gDma3Requests[gDma3RequestCursor].src = NULL;
|
||||
gDma3Requests[gDma3RequestCursor].dest = NULL;
|
||||
gDma3Requests[gDma3RequestCursor].size = 0;
|
||||
@@ -108,375 +134,54 @@ void ProcessDma3Requests(void)
|
||||
gDma3Requests[gDma3RequestCursor].value = 0;
|
||||
gDma3RequestCursor++;
|
||||
|
||||
if (gDma3RequestCursor >= 128) // loop back to the first DMA request
|
||||
if (gDma3RequestCursor >= MAX_DMA_REQUESTS) // loop back to the first DMA request
|
||||
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)
|
||||
s16 RequestDma3Copy(const void *src, void *dest, u16 size, u8 mode)
|
||||
{
|
||||
int cursor;
|
||||
int var = 0;
|
||||
|
||||
gDma3ManagerLocked = 1;
|
||||
int i = 0;
|
||||
|
||||
gDma3ManagerLocked = TRUE;
|
||||
cursor = gDma3RequestCursor;
|
||||
while(1)
|
||||
|
||||
while (i < MAX_DMA_REQUESTS)
|
||||
{
|
||||
if(!gDma3Requests[cursor].size) // an empty copy was found and the current cursor will be returned.
|
||||
if (gDma3Requests[cursor].size == 0) // an empty request was found.
|
||||
{
|
||||
gDma3Requests[cursor].src = src;
|
||||
gDma3Requests[cursor].dest = dest;
|
||||
gDma3Requests[cursor].size = size;
|
||||
|
||||
if(mode == 1)
|
||||
gDma3Requests[cursor].mode = mode;
|
||||
if (mode == 1)
|
||||
gDma3Requests[cursor].mode = DMA_REQUEST_COPY32;
|
||||
else
|
||||
gDma3Requests[cursor].mode = 3;
|
||||
gDma3Requests[cursor].mode = DMA_REQUEST_COPY16;
|
||||
|
||||
gDma3ManagerLocked = FALSE;
|
||||
return (s16)cursor;
|
||||
return cursor;
|
||||
}
|
||||
if(++cursor >= 0x80) // loop back to start.
|
||||
{
|
||||
if (++cursor >= MAX_DMA_REQUESTS) // loop back to start.
|
||||
cursor = 0;
|
||||
}
|
||||
if(++var >= 0x80) // max checks were made. all resulted in failure.
|
||||
{
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
gDma3ManagerLocked = FALSE;
|
||||
return -1;
|
||||
return -1; // no free DMA request was found
|
||||
}
|
||||
|
||||
int RequestDma3Fill(s32 value, void *dest, u16 size, u8 mode)
|
||||
s16 RequestDma3Fill(s32 value, void *dest, u16 size, u8 mode)
|
||||
{
|
||||
int cursor;
|
||||
int var = 0;
|
||||
int i = 0;
|
||||
|
||||
cursor = gDma3RequestCursor;
|
||||
gDma3ManagerLocked = 1;
|
||||
gDma3ManagerLocked = TRUE;
|
||||
|
||||
while(1)
|
||||
while (i < MAX_DMA_REQUESTS)
|
||||
{
|
||||
if(!gDma3Requests[cursor].size)
|
||||
if (gDma3Requests[cursor].size == 0) // an empty request was found.
|
||||
{
|
||||
gDma3Requests[cursor].dest = dest;
|
||||
gDma3Requests[cursor].size = size;
|
||||
@@ -484,41 +189,39 @@ int RequestDma3Fill(s32 value, void *dest, u16 size, u8 mode)
|
||||
gDma3Requests[cursor].value = value;
|
||||
|
||||
if(mode == 1)
|
||||
gDma3Requests[cursor].mode = 2;
|
||||
gDma3Requests[cursor].mode = DMA_REQUEST_FILL32;
|
||||
else
|
||||
gDma3Requests[cursor].mode = 4;
|
||||
gDma3Requests[cursor].mode = DMA_REQUEST_FILL16;
|
||||
|
||||
gDma3ManagerLocked = FALSE;
|
||||
return (s16)cursor;
|
||||
return cursor;
|
||||
}
|
||||
if(++cursor >= 0x80) // loop back to start.
|
||||
{
|
||||
if (++cursor >= MAX_DMA_REQUESTS) // loop back to start.
|
||||
cursor = 0;
|
||||
}
|
||||
if(++var >= 0x80) // max checks were made. all resulted in failure.
|
||||
{
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
gDma3ManagerLocked = FALSE;
|
||||
return -1;
|
||||
return -1; // no free DMA request was found
|
||||
}
|
||||
|
||||
int CheckForSpaceForDma3Request(s16 index)
|
||||
{
|
||||
int current = 0;
|
||||
int i = 0;
|
||||
|
||||
if (index == -1)
|
||||
if (index == -1) // check if all requests are free
|
||||
{
|
||||
for (; current < 0x80; current ++)
|
||||
if (gDma3Requests[current].size)
|
||||
while (i < MAX_DMA_REQUESTS)
|
||||
{
|
||||
if (gDma3Requests[i].size != 0)
|
||||
return -1;
|
||||
|
||||
i++;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
else // check the specified request
|
||||
{
|
||||
if (gDma3Requests[index].size != 0)
|
||||
return -1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (gDma3Requests[index].size)
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
+12
-12
@@ -48,11 +48,11 @@ extern struct SpriteTemplate gUnknown_0202499C;
|
||||
extern void (*gFieldCallback)(void);
|
||||
|
||||
extern const struct CompressedSpriteSheet gMonFrontPicTable[];
|
||||
extern const u8 gUnknown_08C00000[];
|
||||
extern const u8 gUnknown_08C00524[];
|
||||
extern const u8 gUnknown_08C004E0[];
|
||||
extern const u16 gUnknown_08DD7300[]; // palette, gameboy advance
|
||||
extern const u32 gUnknown_08DD7360[]; // tileset gameboy advance
|
||||
extern const u8 gBattleTextboxTiles[];
|
||||
extern const u8 gBattleTextboxTilemap[];
|
||||
extern const u8 gBattleTextboxPalette[];
|
||||
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[];
|
||||
@@ -85,7 +85,7 @@ static void CreateRandomEggShardSprite(void);
|
||||
static void CreateEggShardSprite(u8 x, u8 y, s16 data1, s16 data2, s16 data3, u8 spriteAnimIndex);
|
||||
|
||||
// IWRAM bss
|
||||
static IWRAM_DATA struct EggHatchData* sEggHatchData;
|
||||
static IWRAM_DATA struct EggHatchData *sEggHatchData;
|
||||
|
||||
// rom data
|
||||
static const u16 sEggPalette[] = INCBIN_U16("graphics/pokemon/palettes/egg_palette.gbapal");
|
||||
@@ -516,9 +516,9 @@ static void CB2_EggHatch_0(void)
|
||||
gMain.state++;
|
||||
break;
|
||||
case 2:
|
||||
copy_decompressed_tile_data_to_vram_autofree(0, gUnknown_08C00000, 0, 0, 0);
|
||||
CopyToBgTilemapBuffer(0, gUnknown_08C00524, 0, 0);
|
||||
LoadCompressedPalette(gUnknown_08C004E0, 0, 0x20);
|
||||
copy_decompressed_tile_data_to_vram_autofree(0, gBattleTextboxTiles, 0, 0, 0);
|
||||
CopyToBgTilemapBuffer(0, gBattleTextboxTilemap, 0, 0);
|
||||
LoadCompressedPalette(gBattleTextboxPalette, 0, 0x20);
|
||||
gMain.state++;
|
||||
break;
|
||||
case 3:
|
||||
@@ -542,8 +542,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++;
|
||||
@@ -663,7 +663,7 @@ static void CB2_EggHatch_1(void)
|
||||
}
|
||||
break;
|
||||
case 10:
|
||||
switch (sub_8198C58())
|
||||
switch (ProcessMenuInputNoWrap_())
|
||||
{
|
||||
case 0:
|
||||
GetMonNick(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar3);
|
||||
|
||||
+98
-32
@@ -60,16 +60,8 @@ extern u8 gBattleCommunication[];
|
||||
|
||||
extern const struct WindowTemplate gUnknown_0833900C;
|
||||
extern const struct CompressedSpriteSheet gMonFrontPicTable[];
|
||||
extern const u8 gUnknown_085B58C9[][4];
|
||||
extern const u16 gUnknown_085B5884[];
|
||||
extern const u8 gUnknown_085B58D9[];
|
||||
extern const u16 gUnknown_085B51E4[];
|
||||
extern const u32 gUnknown_085B4134[];
|
||||
extern const u32 gUnknown_085B482C[];
|
||||
extern const u32 gUnknown_085B4D10[];
|
||||
|
||||
// strings
|
||||
extern const u8 gText_ShedinjaJapaneseName2[];
|
||||
extern const u8 gText_PkmnIsEvolving[];
|
||||
extern const u8 gText_CongratsPkmnEvolved[];
|
||||
extern const u8 gText_BattleYesNoChoice[];
|
||||
@@ -83,7 +75,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);
|
||||
@@ -105,6 +97,80 @@ static void InitMovingBackgroundTask(bool8 isLink);
|
||||
static void sub_813FEE8(u8 taskId);
|
||||
static void sub_8140174(void);
|
||||
|
||||
// const data
|
||||
static const u16 sUnknown_085B4114[] = INCBIN_U16("graphics/evolution_scene/unknown_5B4114.gbapal");
|
||||
static const u32 sUnknown_085B4134[] = INCBIN_U32("graphics/evolution_scene/bg.4bpp.lz");
|
||||
static const u32 sUnknown_085B482C[] = INCBIN_U32("graphics/evolution_scene/bg.bin.lz");
|
||||
static const u32 sUnknown_085B4D10[] = INCBIN_U32("graphics/evolution_scene/bg2.bin.lz");
|
||||
static const u16 sUnknown_085B51E4[] = INCBIN_U16("graphics/evolution_scene/gray_transition_intro.gbapal");
|
||||
static const u16 sUnknown_085B53E4[] = INCBIN_U16("graphics/evolution_scene/gray_transition_lighten.gbapal");
|
||||
static const u16 sUnknown_085B5544[] = INCBIN_U16("graphics/evolution_scene/gray_transition_darken.gbapal");
|
||||
static const u16 sUnknown_085B56E4[] = INCBIN_U16("graphics/evolution_scene/gray_transition_outro.gbapal");
|
||||
static const u16 sUnknown_085B5884[] = INCBIN_U16("graphics/evolution_scene/transition.gbapal");
|
||||
|
||||
static const u8 Text_ShedinjaJapaneseName[] = _("ヌケニン");
|
||||
|
||||
static const u8 sUnknown_085B58C9[][4] =
|
||||
{
|
||||
{ 0x00, 0x0C, 0x01, 0x06 },
|
||||
{ 0x0D, 0x24, 0x05, 0x02 },
|
||||
{ 0x0D, 0x18, 0x01, 0x02 },
|
||||
{ 0x25, 0x31, 0x01, 0x06 },
|
||||
};
|
||||
|
||||
static const u8 sUnknown_085B58D9[][16] = {
|
||||
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00 },
|
||||
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00 },
|
||||
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x00, 0x00 },
|
||||
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x00, 0x00 },
|
||||
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x00, 0x00 },
|
||||
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x00, 0x00 },
|
||||
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x00, 0x00 },
|
||||
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x00, 0x00 },
|
||||
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x00, 0x00 },
|
||||
{ 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x00, 0x00 },
|
||||
{ 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x00, 0x0B, 0x00, 0x00 },
|
||||
{ 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x00, 0x00 },
|
||||
{ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x00, 0x00 },
|
||||
{ 0x00, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0C, 0x00, 0x00 },
|
||||
{ 0x00, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0C, 0x0B, 0x00, 0x00 },
|
||||
{ 0x00, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0C, 0x0B, 0x0A, 0x00, 0x00 },
|
||||
{ 0x00, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0C, 0x0B, 0x0A, 0x09, 0x00, 0x00 },
|
||||
{ 0x00, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0C, 0x0B, 0x0A, 0x09, 0x08, 0x00, 0x00 },
|
||||
{ 0x00, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0C, 0x0B, 0x0A, 0x09, 0x08, 0x07, 0x00, 0x00 },
|
||||
{ 0x00, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0C, 0x0B, 0x0A, 0x09, 0x08, 0x07, 0x06, 0x00, 0x00 },
|
||||
{ 0x00, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0C, 0x0B, 0x0A, 0x09, 0x08, 0x07, 0x06, 0x05, 0x00, 0x00 },
|
||||
{ 0x00, 0x0A, 0x0B, 0x0C, 0x0D, 0x0C, 0x0B, 0x0A, 0x09, 0x08, 0x07, 0x06, 0x05, 0x04, 0x00, 0x00 },
|
||||
{ 0x00, 0x0B, 0x0C, 0x0D, 0x0C, 0x0B, 0x0A, 0x09, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x00, 0x00 },
|
||||
{ 0x00, 0x0C, 0x0D, 0x0C, 0x0B, 0x0A, 0x09, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x00, 0x00 },
|
||||
{ 0x00, 0x0D, 0x0C, 0x0B, 0x0A, 0x09, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, 0x00 },
|
||||
{ 0x00, 0x0C, 0x0B, 0x0A, 0x09, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x02, 0x00, 0x00 },
|
||||
{ 0x00, 0x0B, 0x0A, 0x09, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x02, 0x03, 0x00, 0x00 },
|
||||
{ 0x00, 0x0A, 0x09, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x02, 0x03, 0x04, 0x00, 0x00 },
|
||||
{ 0x00, 0x09, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x02, 0x03, 0x04, 0x05, 0x00, 0x00 },
|
||||
{ 0x00, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x00, 0x00 },
|
||||
{ 0x00, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x00, 0x00 },
|
||||
{ 0x00, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x00, 0x00 },
|
||||
{ 0x00, 0x05, 0x04, 0x03, 0x02, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x00, 0x00 },
|
||||
{ 0x00, 0x04, 0x03, 0x02, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x00, 0x00 },
|
||||
{ 0x00, 0x03, 0x02, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x00, 0x00 },
|
||||
{ 0x00, 0x02, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x00, 0x00 },
|
||||
{ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x00, 0x00 },
|
||||
{ 0x00, 0x0C, 0x0B, 0x0A, 0x09, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, 0x00, 0x00 },
|
||||
{ 0x00, 0x0B, 0x0A, 0x09, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00 },
|
||||
{ 0x00, 0x0A, 0x09, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00 },
|
||||
{ 0x00, 0x09, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
|
||||
{ 0x00, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
|
||||
{ 0x00, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
|
||||
{ 0x00, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
|
||||
{ 0x00, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
|
||||
{ 0x00, 0x04, 0x03, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
|
||||
{ 0x00, 0x03, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
|
||||
{ 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
|
||||
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
|
||||
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
|
||||
};
|
||||
|
||||
static void CB2_BeginEvolutionScene(void)
|
||||
{
|
||||
UpdatePaletteFade();
|
||||
@@ -541,7 +607,7 @@ static void CreateShedinja(u16 preEvoSpecies, struct Pokemon* mon)
|
||||
if (GetMonData(Shedinja, MON_DATA_SPECIES) == SPECIES_SHEDINJA
|
||||
&& GetMonData(Shedinja, MON_DATA_LANGUAGE) == LANGUAGE_JAPANESE
|
||||
&& GetMonData(mon, MON_DATA_SPECIES) == SPECIES_NINJASK)
|
||||
SetMonData(Shedinja, MON_DATA_NICKNAME, gText_ShedinjaJapaneseName2);
|
||||
SetMonData(Shedinja, MON_DATA_NICKNAME, Text_ShedinjaJapaneseName);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -591,14 +657,14 @@ static void Task_EvolutionScene(u8 taskID)
|
||||
case 3:
|
||||
if (EvoScene_IsMonAnimFinished(sEvoStructPtr->preEvoSpriteID)) // wait for animation, play tu du SE
|
||||
{
|
||||
PlaySE(BGM_ME_SHINKA);
|
||||
PlaySE(MUS_ME_SHINKA);
|
||||
gTasks[taskID].tState++;
|
||||
}
|
||||
break;
|
||||
case 4: // play evolution music and fade screen black
|
||||
if (!IsSEPlaying())
|
||||
{
|
||||
PlayNewMapMusic(BGM_SHINKA);
|
||||
PlayNewMapMusic(MUS_SHINKA);
|
||||
gTasks[taskID].tState++;
|
||||
BeginNormalPaletteFade(0x1C, 4, 0, 0x10, 0);
|
||||
}
|
||||
@@ -674,7 +740,7 @@ static void Task_EvolutionScene(u8 taskID)
|
||||
{
|
||||
StringExpandPlaceholders(gStringVar4, gText_CongratsPkmnEvolved);
|
||||
BattleHandleAddTextPrinter(gStringVar4, 0);
|
||||
PlayBGM(BGM_FANFA5);
|
||||
PlayBGM(MUS_FANFA5);
|
||||
gTasks[taskID].tState++;
|
||||
SetMonData(mon, MON_DATA_SPECIES, (void*)(&gTasks[taskID].tPostEvoSpecies));
|
||||
CalculateMonStats(mon);
|
||||
@@ -695,7 +761,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;
|
||||
@@ -724,7 +790,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);
|
||||
@@ -769,7 +835,7 @@ static void Task_EvolutionScene(u8 taskID)
|
||||
if (!IsTextPrinterActive(0) && !IsSEPlaying())
|
||||
{
|
||||
BufferMoveToLearnIntoBattleTextBuff2();
|
||||
PlayFanfare(BGM_FANFA1);
|
||||
PlayFanfare(MUS_FANFA1);
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_PKMNLEARNEDMOVE - BATTLESTRINGS_ID_ADDER]);
|
||||
BattleHandleAddTextPrinter(gDisplayedStringBattle, 0);
|
||||
gTasks[taskID].tLearnsFirstMove = 0x40; // re-used as a counter
|
||||
@@ -959,15 +1025,15 @@ static void Task_TradeEvolutionScene(u8 taskID)
|
||||
case 2:
|
||||
if (IsCryFinished())
|
||||
{
|
||||
m4aSongNumStop(BGM_SHINKA);
|
||||
PlaySE(BGM_ME_SHINKA);
|
||||
m4aSongNumStop(MUS_SHINKA);
|
||||
PlaySE(MUS_ME_SHINKA);
|
||||
gTasks[taskID].tState++;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (!IsSEPlaying())
|
||||
{
|
||||
PlayBGM(BGM_SHINKA);
|
||||
PlayBGM(MUS_SHINKA);
|
||||
gTasks[taskID].tState++;
|
||||
BeginNormalPaletteFade(0x1C, 4, 0, 0x10, 0);
|
||||
}
|
||||
@@ -1037,7 +1103,7 @@ static void Task_TradeEvolutionScene(u8 taskID)
|
||||
{
|
||||
StringExpandPlaceholders(gStringVar4, gText_CongratsPkmnEvolved);
|
||||
sub_807F1A8(0, gStringVar4, 1);
|
||||
PlayFanfare(BGM_FANFA5);
|
||||
PlayFanfare(MUS_FANFA5);
|
||||
gTasks[taskID].tState++;
|
||||
SetMonData(mon, MON_DATA_SPECIES, (&gTasks[taskID].tPostEvoSpecies));
|
||||
CalculateMonStats(mon);
|
||||
@@ -1070,7 +1136,7 @@ static void Task_TradeEvolutionScene(u8 taskID)
|
||||
}
|
||||
else
|
||||
{
|
||||
PlayBGM(BGM_SHINKA);
|
||||
PlayBGM(MUS_SHINKA);
|
||||
sub_807F1A8(0, gText_CommunicationStandby5, 1);
|
||||
gTasks[taskID].tState++;
|
||||
}
|
||||
@@ -1114,7 +1180,7 @@ static void Task_TradeEvolutionScene(u8 taskID)
|
||||
if (!IsTextPrinterActive(0) && !IsSEPlaying())
|
||||
{
|
||||
BufferMoveToLearnIntoBattleTextBuff2();
|
||||
PlayFanfare(BGM_FANFA1);
|
||||
PlayFanfare(MUS_FANFA1);
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_PKMNLEARNEDMOVE - BATTLESTRINGS_ID_ADDER]);
|
||||
sub_807F1A8(0, gDisplayedStringBattle, 1);
|
||||
gTasks[taskID].tLearnsFirstMove = 0x40; // re-used as a counter
|
||||
@@ -1165,7 +1231,7 @@ static void Task_TradeEvolutionScene(u8 taskID)
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
switch (sub_8198C58())
|
||||
switch (ProcessMenuInputNoWrap_())
|
||||
{
|
||||
case 0:
|
||||
sEvoCursorPos = 0;
|
||||
@@ -1327,17 +1393,17 @@ static void sub_813FDEC(u8 taskId)
|
||||
if (data[5]++ < 20)
|
||||
return;
|
||||
|
||||
if (data[0]++ > gUnknown_085B58C9[data[2]][3])
|
||||
if (data[0]++ > sUnknown_085B58C9[data[2]][3])
|
||||
{
|
||||
if (gUnknown_085B58C9[data[2]][1] == data[1])
|
||||
if (sUnknown_085B58C9[data[2]][1] == data[1])
|
||||
{
|
||||
data[3]++;
|
||||
if (data[3] == gUnknown_085B58C9[data[2]][2])
|
||||
if (data[3] == sUnknown_085B58C9[data[2]][2])
|
||||
{
|
||||
data[3] = 0;
|
||||
data[2]++;
|
||||
}
|
||||
data[1] = gUnknown_085B58C9[data[2]][0];
|
||||
data[1] = sUnknown_085B58C9[data[2]][0];
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1408,7 +1474,7 @@ static void InitMovingBgValues(u16 *movingBgs)
|
||||
{
|
||||
for (j = 0; j < 16; j++)
|
||||
{
|
||||
movingBgs[i * 16 + j] = gUnknown_085B5884[gUnknown_085B58D9[i * 16 + j]];
|
||||
movingBgs[i * 16 + j] = sUnknown_085B5884[sUnknown_085B58D9[i][j]];
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1425,11 +1491,11 @@ static void InitMovingBackgroundTask(bool8 isLink)
|
||||
else
|
||||
innerBgId = 1, outerBgId = 3;
|
||||
|
||||
LoadPalette(gUnknown_085B51E4, 0xA0, 0x20);
|
||||
LoadPalette(sUnknown_085B51E4, 0xA0, 0x20);
|
||||
|
||||
copy_decompressed_tile_data_to_vram_autofree(1, gUnknown_085B4134, FALSE, 0, 0);
|
||||
CopyToBgTilemapBuffer(1, gUnknown_085B482C, 0, 0);
|
||||
CopyToBgTilemapBuffer(outerBgId, gUnknown_085B4D10, 0, 0);
|
||||
copy_decompressed_tile_data_to_vram_autofree(1, sUnknown_085B4134, FALSE, 0, 0);
|
||||
CopyToBgTilemapBuffer(1, sUnknown_085B482C, 0, 0);
|
||||
CopyToBgTilemapBuffer(outerBgId, sUnknown_085B4D10, 0, 0);
|
||||
CopyBgTilemapBufferToVram(1);
|
||||
CopyBgTilemapBufferToVram(outerBgId);
|
||||
|
||||
|
||||
@@ -0,0 +1,898 @@
|
||||
#include "global.h"
|
||||
#include "field_door.h"
|
||||
#include "field_camera.h"
|
||||
#include "fieldmap.h"
|
||||
#include "metatile_behavior.h"
|
||||
#include "event_data.h"
|
||||
#include "constants/songs.h"
|
||||
#include "constants/flags.h"
|
||||
#include "constants/maps.h"
|
||||
#include "task.h"
|
||||
|
||||
bool8 sub_808A964(void);
|
||||
|
||||
const u8 DoorAnimTiles_04[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/04/0.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/04/1.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/04/2.4bpp"),
|
||||
};
|
||||
|
||||
// TODO: Make these blank palette includes?
|
||||
asm(".space 32");
|
||||
|
||||
const u8 DoorAnimTiles_05[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/05/0.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/05/1.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/05/2.4bpp"),
|
||||
};
|
||||
|
||||
asm(".space 32");
|
||||
|
||||
const u8 DoorAnimTiles_08[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/08/0.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/08/1.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/08/2.4bpp"),
|
||||
};
|
||||
|
||||
asm(".space 32");
|
||||
|
||||
const u8 DoorAnimTiles_15[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/15/0.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/15/1.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/15/2.4bpp"),
|
||||
};
|
||||
|
||||
asm(".space 32");
|
||||
|
||||
const u8 DoorAnimTiles_16[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/16/0.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/16/1.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/16/2.4bpp"),
|
||||
};
|
||||
|
||||
asm(".space 32");
|
||||
|
||||
const u8 DoorAnimTiles_00[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/00/0.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/00/1.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/00/2.4bpp"),
|
||||
};
|
||||
|
||||
asm(".space 32");
|
||||
|
||||
const u8 DoorAnimTiles_01[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/01/0.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/01/1.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/01/2.4bpp"),
|
||||
};
|
||||
|
||||
const u8 DoorAnimTiles_02[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/02/0.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/02/1.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/02/2.4bpp"),
|
||||
};
|
||||
|
||||
const u8 DoorAnimTiles_03[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/03/0.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/03/1.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/03/2.4bpp"),
|
||||
};
|
||||
|
||||
const u8 DoorAnimTiles_06[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/06/0.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/06/1.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/06/2.4bpp"),
|
||||
};
|
||||
|
||||
asm(".space 32");
|
||||
|
||||
const u8 DoorAnimTiles_07[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/07/0.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/07/1.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/07/2.4bpp"),
|
||||
};
|
||||
|
||||
asm(".space 32");
|
||||
|
||||
const u8 DoorAnimTiles_09[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/09/0.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/09/1.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/09/2.4bpp"),
|
||||
};
|
||||
|
||||
asm(".space 0x5900");
|
||||
|
||||
const u8 DoorAnimTiles_UnusedTops[][0x40] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/unused_848EDEC/0_top.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/unused_848EDEC/1_top.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/unused_848EDEC/2_top.4bpp"),
|
||||
};
|
||||
|
||||
asm(".space 0x140");
|
||||
|
||||
const u8 DoorAnimTiles_UnusedBottoms[][0x40] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/unused_848EDEC/0_bottom.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/unused_848EDEC/1_bottom.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/unused_848EDEC/2_bottom.4bpp"),
|
||||
};
|
||||
|
||||
asm(".space 32");
|
||||
|
||||
const u8 DoorAnimTiles_10[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/10/0.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/10/1.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/10/2.4bpp"),
|
||||
};
|
||||
|
||||
asm(".space 32");
|
||||
|
||||
const u8 DoorAnimTiles_11[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/11/0.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/11/1.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/11/2.4bpp"),
|
||||
};
|
||||
|
||||
asm(".space 32");
|
||||
|
||||
const u8 DoorAnimTiles_12[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/12/0.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/12/1.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/12/2.4bpp"),
|
||||
};
|
||||
|
||||
asm(".space 32");
|
||||
|
||||
const u8 DoorAnimTiles_13[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/13/0.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/13/1.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/13/2.4bpp"),
|
||||
};
|
||||
|
||||
asm(".space 32");
|
||||
|
||||
const u8 DoorAnimTiles_14[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/14/0.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/14/1.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/14/2.4bpp"),
|
||||
};
|
||||
|
||||
asm(".space 32");
|
||||
|
||||
const u8 DoorAnimTiles_17[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/17/0.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/17/1.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/17/2.4bpp"),
|
||||
};
|
||||
|
||||
asm(".space 32");
|
||||
|
||||
const u8 DoorAnimTiles_18[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/18/0.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/18/1.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/18/2.4bpp"),
|
||||
};
|
||||
|
||||
asm(".space 32");
|
||||
|
||||
const u8 DoorAnimTiles_19[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/19/0.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/19/1.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/19/2.4bpp"),
|
||||
};
|
||||
|
||||
asm(".space 32");
|
||||
|
||||
const u8 DoorAnimTiles_20[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/20/0.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/20/1.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/20/2.4bpp"),
|
||||
};
|
||||
|
||||
asm(".space 32");
|
||||
|
||||
const u8 DoorAnimTiles_21[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/21/0.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/21/1.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/21/2.4bpp"),
|
||||
};
|
||||
|
||||
asm(".space 32");
|
||||
|
||||
const u8 DoorAnimTiles_22[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/22/0.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/22/1.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/22/2.4bpp"),
|
||||
};
|
||||
|
||||
asm(".space 32");
|
||||
|
||||
const u8 DoorAnimTiles_23[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/23/0.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/23/1.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/23/2.4bpp"),
|
||||
};
|
||||
|
||||
asm(".space 32");
|
||||
|
||||
const u8 DoorAnimTiles_24[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/24/0.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/24/1.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/24/2.4bpp"),
|
||||
};
|
||||
|
||||
asm(".space 32");
|
||||
|
||||
const u8 DoorAnimTiles_25[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/25/0.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/25/1.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/25/2.4bpp"),
|
||||
};
|
||||
|
||||
asm(".space 32");
|
||||
|
||||
const u8 DoorAnimTiles_26[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/26/0.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/26/1.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/26/2.4bpp"),
|
||||
};
|
||||
|
||||
asm(".space 32");
|
||||
|
||||
const u8 DoorAnimTiles_27[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/27/0.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/27/1.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/27/2.4bpp"),
|
||||
};
|
||||
|
||||
asm(".space 32");
|
||||
|
||||
const u8 DoorAnimTiles_28[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/28/0.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/28/1.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/28/2.4bpp"),
|
||||
};
|
||||
|
||||
asm(".space 32");
|
||||
|
||||
const u8 DoorAnimTiles_29[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/29/0.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/29/1.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/29/2.4bpp"),
|
||||
};
|
||||
|
||||
asm(".space 32");
|
||||
|
||||
const u8 DoorAnimTiles_30[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/30/0.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/30/1.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/30/2.4bpp"),
|
||||
};
|
||||
|
||||
asm(".space 32");
|
||||
|
||||
const u8 DoorAnimTiles_31[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/31/0.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/31/1.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/31/2.4bpp"),
|
||||
};
|
||||
|
||||
asm(".space 32");
|
||||
|
||||
const u8 DoorAnimTiles_32[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/32/0.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/32/1.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/32/2.4bpp"),
|
||||
};
|
||||
|
||||
asm(".space 32");
|
||||
|
||||
const u8 DoorAnimTiles_33[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/33/0.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/33/1.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/33/2.4bpp"),
|
||||
};
|
||||
|
||||
asm(".space 32");
|
||||
|
||||
const u8 DoorAnimTiles_34[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/34/0.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/34/1.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/34/2.4bpp"),
|
||||
};
|
||||
|
||||
asm(".space 32");
|
||||
|
||||
const u8 DoorAnimTiles_35[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/35/0.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/35/1.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/35/2.4bpp"),
|
||||
};
|
||||
|
||||
asm(".space 32");
|
||||
|
||||
const u8 DoorAnimTiles_36[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/36/0.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/36/1.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/36/2.4bpp"),
|
||||
};
|
||||
|
||||
asm(".space 32");
|
||||
|
||||
const u8 DoorAnimTiles_37[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/37/0.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/37/1.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/37/2.4bpp"),
|
||||
};
|
||||
|
||||
asm(".space 32");
|
||||
|
||||
const u8 DoorAnimTiles_38[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/38/0.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/38/1.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/38/2.4bpp"),
|
||||
};
|
||||
|
||||
asm(".space 32");
|
||||
|
||||
const u8 DoorAnimTiles_39[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/39/0.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/39/1.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/39/2.4bpp"),
|
||||
};
|
||||
|
||||
asm(".space 32");
|
||||
|
||||
const u8 DoorAnimTiles_40[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/40/0.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/40/1.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/40/2.4bpp"),
|
||||
};
|
||||
|
||||
asm(".space 32");
|
||||
|
||||
const u8 DoorAnimTiles_41[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/41/0.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/41/1.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/41/2.4bpp"),
|
||||
};
|
||||
|
||||
const u8 DoorAnimTiles_42[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/42/0.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/42/1.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/42/2.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/42/3.4bpp"),
|
||||
};
|
||||
|
||||
asm(".space 32");
|
||||
|
||||
const u8 DoorAnimTiles_43[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/43/0.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/43/1.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/43/2.4bpp"),
|
||||
};
|
||||
|
||||
asm(".space 32");
|
||||
|
||||
const u8 DoorAnimTiles_44[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/44/0_left.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/44/0_right.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/44/1_left.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/44/1_right.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/44/2_left.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/44/2_right.4bpp"),
|
||||
};
|
||||
|
||||
asm(".space 32");
|
||||
|
||||
const u8 DoorAnimTiles_45[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/45/0.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/45/1.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/45/2.4bpp"),
|
||||
};
|
||||
|
||||
asm(".space 32");
|
||||
|
||||
const u8 DoorAnimTiles_46[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/46/0.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/46/1.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/46/2.4bpp"),
|
||||
};
|
||||
|
||||
asm(".space 32");
|
||||
|
||||
const u8 DoorAnimTiles_47[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/47/0.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/47/1.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/47/2.4bpp"),
|
||||
};
|
||||
|
||||
asm(".space 32");
|
||||
|
||||
const u8 DoorAnimTiles_48[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/48/0.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/48/1.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/48/2.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/48/3.4bpp"),
|
||||
};
|
||||
|
||||
asm(".space 32");
|
||||
|
||||
const u8 DoorAnimTiles_49[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/49/0.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/49/1.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/49/2.4bpp"),
|
||||
};
|
||||
|
||||
asm(".space 32");
|
||||
|
||||
const u8 DoorAnimTiles_50[][0x100] =
|
||||
{
|
||||
INCBIN_U8("graphics/door_anims/50/0.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/50/1.4bpp"),
|
||||
INCBIN_U8("graphics/door_anims/50/2.4bpp"),
|
||||
};
|
||||
|
||||
asm(".space 32");
|
||||
|
||||
static const struct DoorAnimFrame gDoorOpenAnimFrames[] =
|
||||
{
|
||||
{4, -1},
|
||||
{4, 0},
|
||||
{4, 0x100},
|
||||
{4, 0x200},
|
||||
{0, 0},
|
||||
};
|
||||
|
||||
static const struct DoorAnimFrame gDoorCloseAnimFrames[] =
|
||||
{
|
||||
{4, 0x200},
|
||||
{4, 0x100},
|
||||
{4, 0},
|
||||
{4, -1},
|
||||
{0, 0},
|
||||
};
|
||||
|
||||
static const struct DoorAnimFrame gBigDoorOpenAnimFrames[] =
|
||||
{
|
||||
{4, -1},
|
||||
{4, 0},
|
||||
{4, 0x200},
|
||||
{4, 0x400},
|
||||
{0, 0},
|
||||
};
|
||||
|
||||
static const struct DoorAnimFrame gBigDoorCloseAnimFrames[] =
|
||||
{
|
||||
{4, 0x400},
|
||||
{4, 0x200},
|
||||
{4, 0},
|
||||
{4, -1},
|
||||
{0, 0},
|
||||
};
|
||||
|
||||
const u8 DoorAnimPalettes_8496FDC[] = {1, 1, 1, 1, 1, 1, 1, 1}; // door 00
|
||||
const u8 DoorAnimPalettes_8496FE4[] = {1, 1, 1, 1, 1, 1, 1, 1}; // door 01
|
||||
const u8 DoorAnimPalettes_8496FEC[] = {5, 5, 5, 5, 5, 5, 5, 5}; // door 02
|
||||
const u8 DoorAnimPalettes_8496FF4[] = {0, 0, 1, 1, 1, 1, 1, 1}; // door 03
|
||||
const u8 DoorAnimPalettes_8496FFC[] = {10, 10, 6, 6, 6, 6, 6, 6}; // door 04
|
||||
const u8 DoorAnimPalettes_8497004[] = {8, 8, 8, 8, 8, 8, 8, 8}; // door 05
|
||||
const u8 DoorAnimPalettes_849700C[] = {11, 11, 11, 11, 11, 11, 11, 11}; // door 06
|
||||
const u8 DoorAnimPalettes_8497014[] = {10, 10, 10, 10, 10, 10, 10, 10}; // door 07
|
||||
const u8 DoorAnimPalettes_849701C[] = {7, 7, 7, 7, 7, 7, 7, 7}; // door 08
|
||||
const u8 DoorAnimPalettes_8497024[] = {8, 8, 8, 8, 8, 8, 8, 8}; // door 09
|
||||
const u8 DoorAnimPalettes_849702C[] = {10, 10, 9, 9, 9, 9, 9, 9}; // door 10
|
||||
const u8 DoorAnimPalettes_8497034[] = {9, 9, 1, 1, 1, 1, 1, 1}; // door 11
|
||||
const u8 DoorAnimPalettes_849703C[] = {8, 8, 8, 8, 8, 8, 8, 8}; // door 12
|
||||
const u8 DoorAnimPalettes_8497044[] = {9, 9, 9, 9, 9, 9, 9, 9}; // door 13
|
||||
const u8 DoorAnimPalettes_849704C[] = {6, 6, 6, 6, 6, 6, 6, 6}; // door 14
|
||||
const u8 DoorAnimPalettes_8497054[] = {6, 6, 6, 6, 6, 6, 6, 6}; // door 15
|
||||
const u8 DoorAnimPalettes_849705C[] = {0, 0, 5, 5, 5, 5, 5, 5}; // door 16
|
||||
const u8 DoorAnimPalettes_8497064[] = {6, 6, 1, 1, 1, 1, 1, 1}; // door 17
|
||||
const u8 DoorAnimPalettes_849706C[] = {7, 7, 7, 7, 7, 7, 7, 7}; // door 18
|
||||
const u8 DoorAnimPalettes_8497074[] = {6, 6, 5, 5, 5, 5, 5, 5}; // door 19
|
||||
const u8 DoorAnimPalettes_849707C[] = {5, 5, 5, 5, 5, 5, 5, 5}; // door 20
|
||||
const u8 DoorAnimPalettes_8497084[] = {1, 1, 1, 1, 1, 1, 1, 1}; // door 21
|
||||
const u8 DoorAnimPalettes_849708C[] = {6, 6, 6, 6, 6, 6, 6, 6}; // door 22
|
||||
const u8 DoorAnimPalettes_8497094[] = {7, 7, 7, 7, 7, 7, 7, 7}; // door 23
|
||||
const u8 DoorAnimPalettes_849709C[] = {5, 5, 5, 5, 5, 5, 5, 5}; // door 24
|
||||
const u8 DoorAnimPalettes_84970A4[] = {9, 9, 9, 9, 9, 9, 9, 9}; // door 25
|
||||
const u8 DoorAnimPalettes_84970AC[] = {8, 8, 8, 8, 8, 8, 8, 8}; // door 26
|
||||
const u8 DoorAnimPalettes_84970B4[] = {6, 6, 6, 6, 6, 6, 6, 6}; // door 27
|
||||
const u8 DoorAnimPalettes_84970BC[] = {7, 7, 7, 7, 7, 7, 7, 7}; // door 28
|
||||
const u8 DoorAnimPalettes_84970C4[] = {11, 11, 7, 7, 7, 7, 7, 7}; // door 29
|
||||
const u8 DoorAnimPalettes_84970CC[] = {7, 7, 7, 7, 7, 7, 7, 7}; // door 30
|
||||
const u8 DoorAnimPalettes_84970D4[] = {6, 6, 7, 7, 7, 7, 7, 7}; // door 31
|
||||
const u8 DoorAnimPalettes_84970DC[] = {9, 9, 9, 9, 9, 9, 9, 9}; // door 32
|
||||
const u8 DoorAnimPalettes_84970E4[] = {7, 7, 7, 7, 7, 7, 7, 7}; // door 33
|
||||
const u8 DoorAnimPalettes_84970EC[] = {9, 9, 9, 9, 9, 9, 9, 9}; // door 34
|
||||
const u8 DoorAnimPalettes_84970F4[] = {1, 1, 1, 1, 1, 1, 1, 1}; // door 35
|
||||
const u8 DoorAnimPalettes_84970FC[] = {9, 9, 9, 9, 9, 9, 9, 9}; // door 36
|
||||
const u8 DoorAnimPalettes_8497104[] = {0, 0, 0, 0, 0, 0, 0, 0}; // door 37
|
||||
const u8 DoorAnimPalettes_849710C[] = {5, 5, 5, 5, 5, 5, 5, 5}; // door 38
|
||||
const u8 DoorAnimPalettes_8497114[] = {7, 7, 7, 7, 7, 7, 7, 7}; // door 39
|
||||
const u8 DoorAnimPalettes_849711C[] = {7, 7, 7, 7, 7, 7, 7, 7}; // door 40
|
||||
const u8 DoorAnimPalettes_8497124[] = {7, 7, 7, 7, 7, 7, 7, 7}; // door 41
|
||||
const u8 DoorAnimPalettes_849712C[] = {1, 1, 1, 1, 1, 1, 1, 1}; // doors 42, 43, and 44
|
||||
const u8 DoorAnimPalettes_8497134[] = {7, 7, 7, 7, 7, 7, 7, 7}; // door 45
|
||||
const u8 DoorAnimPalettes_849713C[] = {7, 7, 7, 7, 7, 7, 7, 7}; // door 46
|
||||
const u8 DoorAnimPalettes_8497144[] = {1, 1, 1, 1, 1, 1, 1, 1}; // unused
|
||||
const u8 DoorAnimPalettes_849714C[] = {1, 1, 1, 1, 1, 1, 1, 1}; // doors 47 and 48
|
||||
const u8 DoorAnimPalettes_8497154[] = {9, 9, 7, 7, 7, 7, 7, 7}; // door 49
|
||||
const u8 DoorAnimPalettes_849715C[] = {9, 9, 9, 9, 9, 9, 9, 9}; // door 50
|
||||
const u8 DoorAnimPalettes_8497164[] = {7, 7, 7, 7, 7, 7, 7, 7}; // door 51
|
||||
const u8 DoorAnimPalettes_849716C[] = {9, 9, 7, 7, 7, 7, 7, 7}; // door 52
|
||||
|
||||
static const struct DoorGraphics gDoorAnimGraphicsTable[] =
|
||||
{
|
||||
{0x021, 0, 1, DoorAnimTiles_00, DoorAnimPalettes_8496FDC}, // door 00
|
||||
{0x061, 1, 1, DoorAnimTiles_01, DoorAnimPalettes_8496FE4}, // door 01
|
||||
{0x1CD, 1, 1, DoorAnimTiles_02, DoorAnimPalettes_8496FEC}, // door 02
|
||||
{0x041, 1, 1, DoorAnimTiles_03, DoorAnimPalettes_8496FF4}, // door 03
|
||||
{0x248, 0, 1, DoorAnimTiles_04, DoorAnimPalettes_8496FFC}, // door 04
|
||||
{0x249, 0, 1, DoorAnimTiles_05, DoorAnimPalettes_8497004}, // door 05
|
||||
{0x22F, 0, 1, DoorAnimTiles_06, DoorAnimPalettes_849700C}, // door 06
|
||||
{0x21F, 0, 1, DoorAnimTiles_07, DoorAnimPalettes_8497014}, // door 07
|
||||
{0x2A5, 0, 1, DoorAnimTiles_08, DoorAnimPalettes_849701C}, // door 08
|
||||
{0x287, 0, 1, DoorAnimTiles_09, DoorAnimPalettes_849702C}, // door 09
|
||||
{0x2AC, 0, 1, DoorAnimTiles_10, DoorAnimPalettes_849706C}, // door 10
|
||||
{0x3A1, 0, 1, DoorAnimTiles_11, DoorAnimPalettes_8497074}, // door 11
|
||||
{0x2DC, 0, 1, DoorAnimTiles_12, DoorAnimPalettes_8497064}, // door 12
|
||||
{0x225, 0, 1, DoorAnimTiles_13, DoorAnimPalettes_849705C}, // door 13
|
||||
{0x1DB, 1, 1, DoorAnimTiles_14, DoorAnimPalettes_8497084}, // door 14
|
||||
{0x246, 0, 1, DoorAnimTiles_15, DoorAnimPalettes_8497024}, // door 15
|
||||
{0x28E, 0, 1, DoorAnimTiles_16, DoorAnimPalettes_849707C}, // door 16
|
||||
{0x2A1, 0, 1, DoorAnimTiles_17, DoorAnimPalettes_8497034}, // door 17
|
||||
{0x21C, 0, 1, DoorAnimTiles_18, DoorAnimPalettes_849704C}, // door 18
|
||||
{0x21E, 0, 1, DoorAnimTiles_19, DoorAnimPalettes_8497054}, // door 19
|
||||
{0x21D, 1, 1, DoorAnimTiles_20, DoorAnimPalettes_849703C}, // door 20
|
||||
{0x21A, 0, 1, DoorAnimTiles_21, DoorAnimPalettes_8497044}, // door 21
|
||||
{0x224, 0, 1, DoorAnimTiles_22, DoorAnimPalettes_849708C}, // door 22
|
||||
{0x289, 0, 1, DoorAnimTiles_23, DoorAnimPalettes_8497094}, // door 23
|
||||
{0x30C, 1, 1, DoorAnimTiles_24, DoorAnimPalettes_849709C}, // door 24
|
||||
{0x32D, 1, 1, DoorAnimTiles_25, DoorAnimPalettes_84970A4}, // door 25
|
||||
{0x2ED, 1, 1, DoorAnimTiles_26, DoorAnimPalettes_84970AC}, // door 26
|
||||
{0x264, 1, 1, DoorAnimTiles_27, DoorAnimPalettes_84970B4}, // door 27
|
||||
{0x22B, 0, 1, DoorAnimTiles_28, DoorAnimPalettes_84970BC}, // door 28
|
||||
{0x2F7, 0, 1, DoorAnimTiles_29, DoorAnimPalettes_84970C4}, // door 29
|
||||
{0x297, 0, 1, DoorAnimTiles_30, DoorAnimPalettes_84970CC}, // door 30
|
||||
{0x285, 1, 1, DoorAnimTiles_31, DoorAnimPalettes_84970D4}, // door 31
|
||||
{0x25D, 1, 1, DoorAnimTiles_32, DoorAnimPalettes_84970DC}, // door 32
|
||||
{0x20E, 1, 1, DoorAnimTiles_33, DoorAnimPalettes_84970E4}, // door 33
|
||||
{0x3B0, 1, 1, DoorAnimTiles_34, DoorAnimPalettes_84970EC}, // door 34
|
||||
{0x28A, 1, 1, DoorAnimTiles_35, DoorAnimPalettes_84970F4}, // door 35
|
||||
{0x263, 1, 1, DoorAnimTiles_36, DoorAnimPalettes_84970FC}, // door 36
|
||||
{0x329, 1, 1, DoorAnimTiles_37, DoorAnimPalettes_8497104}, // door 37
|
||||
{0x291, 0, 1, DoorAnimTiles_38, DoorAnimPalettes_849710C}, // door 38
|
||||
{0x21B, 2, 1, DoorAnimTiles_39, DoorAnimPalettes_8497114}, // door 39
|
||||
{0x209, 1, 1, DoorAnimTiles_40, DoorAnimPalettes_849711C}, // door 40
|
||||
{0x219, 0, 1, DoorAnimTiles_41, DoorAnimPalettes_8497124}, // door 41
|
||||
{0x393, 1, 1, DoorAnimTiles_42, DoorAnimPalettes_849712C}, // door 42
|
||||
{0x3D4, 1, 1, DoorAnimTiles_42, DoorAnimPalettes_849712C}, // door 43
|
||||
{0x36C, 1, 1, DoorAnimTiles_42, DoorAnimPalettes_849712C}, // door 44
|
||||
{0x25E, 1, 1, DoorAnimTiles_43, DoorAnimPalettes_8497134}, // door 45
|
||||
{0x2AD, 1, 2, DoorAnimTiles_44, DoorAnimPalettes_849713C}, // door 46
|
||||
{0x3FC, 0, 1, DoorAnimTiles_45, DoorAnimPalettes_849714C}, // door 47
|
||||
{0x396, 1, 1, DoorAnimTiles_46, DoorAnimPalettes_849714C}, // door 48
|
||||
{0x20A, 1, 1, DoorAnimTiles_47, DoorAnimPalettes_8497154}, // door 49
|
||||
{0x26B, 1, 1, DoorAnimTiles_48, DoorAnimPalettes_849715C}, // door 50
|
||||
{0x32C, 1, 1, DoorAnimTiles_49, DoorAnimPalettes_8497164}, // door 51
|
||||
{0x383, 1, 1, DoorAnimTiles_50, DoorAnimPalettes_849716C}, // door 52
|
||||
{0, 0, 0, NULL, NULL},
|
||||
};
|
||||
|
||||
static void CopyDoorTilesToVram(const struct DoorGraphics *gfx, const struct DoorAnimFrame *frame)
|
||||
{
|
||||
if (gfx->size == 2)
|
||||
CpuFastSet(gfx->tiles + frame->offset, (void *)(VRAM + 0x7E00), 0x80);
|
||||
else
|
||||
CpuFastSet(gfx->tiles + frame->offset, (void *)(VRAM + 0x7F00), 0x40);
|
||||
}
|
||||
|
||||
static void door_build_blockdef(u16 *a, u16 b, const u8 *c)
|
||||
{
|
||||
int i;
|
||||
u16 unk;
|
||||
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
unk = *(c++) << 12;
|
||||
a[i] = unk | (b + i);
|
||||
}
|
||||
for (; i < 8; i++)
|
||||
{
|
||||
unk = *(c++) << 12;
|
||||
a[i] = unk;
|
||||
}
|
||||
}
|
||||
|
||||
static void DrawCurrentDoorAnimFrame(const struct DoorGraphics *gfx, u32 x, u32 y, const u8 *pal)
|
||||
{
|
||||
u16 arr[24];
|
||||
|
||||
if (gfx->size == 2)
|
||||
{
|
||||
door_build_blockdef(&arr[8], 0x3F0, pal);
|
||||
DrawDoorMetatileAt(x, y - 1, &arr[8]);
|
||||
door_build_blockdef(&arr[8], 0x3F4, pal + 4);
|
||||
DrawDoorMetatileAt(x, y, &arr[8]);
|
||||
door_build_blockdef(&arr[8], 0x3F8, pal);
|
||||
DrawDoorMetatileAt(x + 1, y - 1, &arr[8]);
|
||||
door_build_blockdef(&arr[8], 0x3FC, pal + 4);
|
||||
DrawDoorMetatileAt(x + 1, y, &arr[8]);
|
||||
}
|
||||
else
|
||||
{
|
||||
door_build_blockdef(&arr[0], 0x3F8, pal);
|
||||
DrawDoorMetatileAt(x, y - 1, &arr[0]);
|
||||
door_build_blockdef(&arr[0], 0x3FC, pal + 4);
|
||||
DrawDoorMetatileAt(x, y, &arr[0]);
|
||||
}
|
||||
}
|
||||
|
||||
static void DrawClosedDoorTiles(const struct DoorGraphics *gfx, u32 x, u32 y)
|
||||
{
|
||||
CurrentMapDrawMetatileAt(x, y - 1);
|
||||
CurrentMapDrawMetatileAt(x, y);
|
||||
|
||||
if (gfx->size == 2)
|
||||
{
|
||||
CurrentMapDrawMetatileAt(x + 1, y - 1);
|
||||
CurrentMapDrawMetatileAt(x + 1, y);
|
||||
}
|
||||
}
|
||||
|
||||
static void DrawDoor(const struct DoorGraphics *gfx, const struct DoorAnimFrame *frame, u32 x, u32 y)
|
||||
{
|
||||
if (frame->offset == 0xFFFF)
|
||||
{
|
||||
DrawClosedDoorTiles(gfx, x, y);
|
||||
if (sub_808A964())
|
||||
DrawClosedDoorTiles(gfx, gSpecialVar_0x8004 + 7, gSpecialVar_0x8005 + 7);
|
||||
}
|
||||
else
|
||||
{
|
||||
CopyDoorTilesToVram(gfx, frame);
|
||||
DrawCurrentDoorAnimFrame(gfx, x, y, gfx->palette);
|
||||
if (sub_808A964())
|
||||
DrawCurrentDoorAnimFrame(gfx, gSpecialVar_0x8004 + 7, gSpecialVar_0x8005 + 7, gfx->palette);
|
||||
}
|
||||
}
|
||||
|
||||
enum
|
||||
{
|
||||
TD_FRAMELIST = 0,
|
||||
TD_GFX = 2,
|
||||
TD_FRAME = 4,
|
||||
TD_COUNTER,
|
||||
TD_X,
|
||||
TD_Y
|
||||
};
|
||||
|
||||
static bool32 sub_808A5F0(struct DoorGraphics *gfx, struct DoorAnimFrame *frames, s16 *taskData)
|
||||
{
|
||||
if (taskData[TD_COUNTER] == 0)
|
||||
DrawDoor(gfx, &frames[taskData[TD_FRAME]], taskData[TD_X], taskData[TD_Y]);
|
||||
if (taskData[TD_COUNTER] == frames[taskData[TD_FRAME]].time)
|
||||
{
|
||||
taskData[TD_COUNTER] = 0;
|
||||
taskData[TD_FRAME]++;
|
||||
if (frames[taskData[TD_FRAME]].time == 0)
|
||||
return FALSE;
|
||||
else
|
||||
return TRUE;
|
||||
}
|
||||
taskData[TD_COUNTER]++;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void Task_AnimateDoor(u8 taskId)
|
||||
{
|
||||
u16 *taskData = gTasks[taskId].data;
|
||||
struct DoorAnimFrame *frames = (struct DoorAnimFrame *)(taskData[TD_FRAMELIST] << 16 | taskData[TD_FRAMELIST + 1]);
|
||||
struct DoorGraphics *gfx = (struct DoorGraphics *)(taskData[TD_GFX] << 16 | taskData[TD_GFX + 1]);
|
||||
|
||||
if (sub_808A5F0(gfx, frames, taskData) == FALSE)
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
|
||||
static const struct DoorAnimFrame *GetLastDoorFrame(const struct DoorAnimFrame *frame, const void *unused)
|
||||
{
|
||||
while (frame->time != 0)
|
||||
frame++;
|
||||
return frame - 1;
|
||||
}
|
||||
|
||||
static const struct DoorGraphics *GetDoorGraphics(const struct DoorGraphics *gfx, u16 metatileNum)
|
||||
{
|
||||
while (gfx->tiles != NULL)
|
||||
{
|
||||
if (gfx->metatileNum == metatileNum)
|
||||
return gfx;
|
||||
gfx++;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static s8 StartDoorAnimationTask(const struct DoorGraphics *gfx, const struct DoorAnimFrame *frames, u32 x, u32 y)
|
||||
{
|
||||
if (FuncIsActiveTask(Task_AnimateDoor) == TRUE)
|
||||
return -1;
|
||||
else
|
||||
{
|
||||
u8 taskId = CreateTask(Task_AnimateDoor, 0x50);
|
||||
s16 *taskData = gTasks[taskId].data;
|
||||
|
||||
taskData[TD_X] = x;
|
||||
taskData[TD_Y] = y;
|
||||
|
||||
taskData[TD_FRAMELIST + 1] = (u32)frames;
|
||||
taskData[TD_FRAMELIST] = (u32)frames >> 16;
|
||||
|
||||
taskData[TD_GFX + 1] = (u32)gfx;
|
||||
taskData[TD_GFX] = (u32)gfx >> 16;
|
||||
|
||||
return taskId;
|
||||
}
|
||||
}
|
||||
|
||||
static void DrawClosedDoor(const struct DoorGraphics *gfx, u32 x, u32 y)
|
||||
{
|
||||
DrawClosedDoorTiles(gfx, x, y);
|
||||
}
|
||||
|
||||
static void DrawOpenedDoor(const struct DoorGraphics *gfx, u32 x, u32 y)
|
||||
{
|
||||
gfx = GetDoorGraphics(gfx, MapGridGetMetatileIdAt(x, y));
|
||||
if (gfx != NULL)
|
||||
DrawDoor(gfx, GetLastDoorFrame(gDoorOpenAnimFrames, gDoorOpenAnimFrames), x, y);
|
||||
}
|
||||
|
||||
static s8 StartDoorOpenAnimation(const struct DoorGraphics *gfx, u32 x, u32 y)
|
||||
{
|
||||
gfx = GetDoorGraphics(gfx, MapGridGetMetatileIdAt(x, y));
|
||||
if (gfx == NULL)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gfx->size == 2)
|
||||
return StartDoorAnimationTask(gfx, gBigDoorOpenAnimFrames, x, y);
|
||||
else
|
||||
return StartDoorAnimationTask(gfx, gDoorOpenAnimFrames, x, y);
|
||||
}
|
||||
}
|
||||
|
||||
static s8 StartDoorCloseAnimation(const struct DoorGraphics *gfx, u32 x, u32 y)
|
||||
{
|
||||
gfx = GetDoorGraphics(gfx, MapGridGetMetatileIdAt(x, y));
|
||||
if (gfx == NULL)
|
||||
return -1;
|
||||
else
|
||||
return StartDoorAnimationTask(gfx, gDoorCloseAnimFrames, x, y);
|
||||
}
|
||||
|
||||
static s8 cur_mapdata_get_door_x2_at(const struct DoorGraphics *gfx, u32 x, u32 y)
|
||||
{
|
||||
gfx = GetDoorGraphics(gfx, MapGridGetMetatileIdAt(x, y));
|
||||
if (gfx == NULL)
|
||||
return -1;
|
||||
else
|
||||
return gfx->sound;
|
||||
}
|
||||
|
||||
void unref_sub_808A83C(u32 x, u32 y)
|
||||
{
|
||||
StartDoorOpenAnimation(gDoorAnimGraphicsTable, x, y);
|
||||
}
|
||||
|
||||
void FieldSetDoorOpened(u32 x, u32 y)
|
||||
{
|
||||
if (MetatileBehavior_IsDoor(MapGridGetMetatileBehaviorAt(x, y)))
|
||||
DrawOpenedDoor(gDoorAnimGraphicsTable, x, y);
|
||||
}
|
||||
|
||||
void FieldSetDoorClosed(u32 x, u32 y)
|
||||
{
|
||||
if (MetatileBehavior_IsDoor(MapGridGetMetatileBehaviorAt(x, y)))
|
||||
DrawClosedDoor(gDoorAnimGraphicsTable, x, y);
|
||||
}
|
||||
|
||||
s8 FieldAnimateDoorClose(u32 x, u32 y)
|
||||
{
|
||||
if (!MetatileBehavior_IsDoor(MapGridGetMetatileBehaviorAt(x, y)))
|
||||
return -1;
|
||||
else
|
||||
return StartDoorCloseAnimation(gDoorAnimGraphicsTable, x, y);
|
||||
}
|
||||
|
||||
s8 FieldAnimateDoorOpen(u32 x, u32 y)
|
||||
{
|
||||
if (!MetatileBehavior_IsDoor(MapGridGetMetatileBehaviorAt(x, y)))
|
||||
return -1;
|
||||
else
|
||||
return StartDoorOpenAnimation(gDoorAnimGraphicsTable, x, y);
|
||||
}
|
||||
|
||||
bool8 FieldIsDoorAnimationRunning(void)
|
||||
{
|
||||
return FuncIsActiveTask(Task_AnimateDoor);
|
||||
}
|
||||
|
||||
u32 GetDoorSoundEffect(u32 x, u32 y)
|
||||
{
|
||||
int sound = cur_mapdata_get_door_x2_at(gDoorAnimGraphicsTable, x, y);
|
||||
|
||||
if (sound == 0)
|
||||
return SE_DOOR;
|
||||
else if (sound == 1)
|
||||
return SE_JIDO_DOA;
|
||||
else if (sound == 2)
|
||||
return SE_TU_SAA;
|
||||
else
|
||||
return SE_DOOR;
|
||||
}
|
||||
|
||||
bool8 sub_808A964(void)
|
||||
{
|
||||
if (FlagGet(FLAG_SPECIAL_FLAG_0x4002))
|
||||
{
|
||||
if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(BATTLE_FRONTIER_BATTLE_TOWER_CORRIDOR_2) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_TOWER_CORRIDOR_2))
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
+11
-11
@@ -1174,11 +1174,11 @@ void npc_by_local_id_and_map_set_field_1_bit_x20(u8 localId, u8 mapNum, u8 mapGr
|
||||
}
|
||||
}
|
||||
|
||||
void FieldObjectGetLocalIdAndMap(struct MapObject *mapObject, u8 *localId, u8 *mapNum, u8 *mapGroup)
|
||||
void FieldObjectGetLocalIdAndMap(struct MapObject *mapObject, void *localId, void *mapNum, void *mapGroup)
|
||||
{
|
||||
*localId = mapObject->localId;
|
||||
*mapNum = mapObject->mapNum;
|
||||
*mapGroup = mapObject->mapGroup;
|
||||
*(u8*)(localId) = mapObject->localId;
|
||||
*(u8*)(mapNum) = mapObject->mapNum;
|
||||
*(u8*)(mapGroup) = mapObject->mapGroup;
|
||||
}
|
||||
|
||||
void sub_808E75C(s16 x, s16 y)
|
||||
@@ -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;
|
||||
}
|
||||
@@ -3426,7 +3426,7 @@ void FieldObjectCB_TreeDisguise(struct Sprite *sprite)
|
||||
mapObject = &gMapObjects[sprite->data[0]];
|
||||
if (mapObject->mapobj_unk_21 == 0 || (mapObject->mapobj_unk_21 == 1 && !sprite->data[7]))
|
||||
{
|
||||
FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]);
|
||||
FieldObjectGetLocalIdAndMap(mapObject, &gFieldEffectArguments[0], &gFieldEffectArguments[1], &gFieldEffectArguments[2]);
|
||||
mapObject->mapobj_unk_1A = FieldEffectStart(FLDEFF_TREE_DISGUISE);
|
||||
mapObject->mapobj_unk_21 = 1;
|
||||
sprite->data[7] ++;
|
||||
@@ -3447,7 +3447,7 @@ void FieldObjectCB_MountainDisguise(struct Sprite *sprite)
|
||||
mapObject = &gMapObjects[sprite->data[0]];
|
||||
if (mapObject->mapobj_unk_21 == 0 || (mapObject->mapobj_unk_21 == 1 && !sprite->data[7]))
|
||||
{
|
||||
FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]);
|
||||
FieldObjectGetLocalIdAndMap(mapObject, &gFieldEffectArguments[0], &gFieldEffectArguments[1], &gFieldEffectArguments[2]);
|
||||
mapObject->mapobj_unk_1A = FieldEffectStart(FLDEFF_MOUNTAIN_DISGUISE);
|
||||
mapObject->mapobj_unk_21 = 1;
|
||||
sprite->data[7] ++;
|
||||
@@ -4694,7 +4694,7 @@ bool8 sub_80954CC(struct MapObject *mapObject, struct Sprite *sprite)
|
||||
|
||||
bool8 do_exclamation_mark_bubble_1(struct MapObject *mapObject, struct Sprite *sprite)
|
||||
{
|
||||
FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]);
|
||||
FieldObjectGetLocalIdAndMap(mapObject, &gFieldEffectArguments[0], &gFieldEffectArguments[1], &gFieldEffectArguments[2]);
|
||||
FieldEffectStart(FLDEFF_EXCLAMATION_MARK_ICON_1);
|
||||
sprite->data[2] = 1;
|
||||
return TRUE;
|
||||
@@ -4702,7 +4702,7 @@ bool8 do_exclamation_mark_bubble_1(struct MapObject *mapObject, struct Sprite *s
|
||||
|
||||
bool8 do_exclamation_mark_bubble_2(struct MapObject *mapObject, struct Sprite *sprite)
|
||||
{
|
||||
FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]);
|
||||
FieldObjectGetLocalIdAndMap(mapObject, &gFieldEffectArguments[0], &gFieldEffectArguments[1], &gFieldEffectArguments[2]);
|
||||
FieldEffectStart(FLDEFF_EXCLAMATION_MARK_ICON_2);
|
||||
sprite->data[2] = 1;
|
||||
return TRUE;
|
||||
@@ -4710,7 +4710,7 @@ bool8 do_exclamation_mark_bubble_2(struct MapObject *mapObject, struct Sprite *s
|
||||
|
||||
bool8 do_heart_bubble(struct MapObject *mapObject, struct Sprite *sprite)
|
||||
{
|
||||
FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]);
|
||||
FieldObjectGetLocalIdAndMap(mapObject, &gFieldEffectArguments[0], &gFieldEffectArguments[1], &gFieldEffectArguments[2]);
|
||||
FieldEffectStart(FLDEFF_HEART_ICON);
|
||||
sprite->data[2] = 1;
|
||||
return TRUE;
|
||||
|
||||
@@ -211,7 +211,7 @@ void Task_HandleTruckSequence(u8 taskId)
|
||||
data[1]++;
|
||||
if (data[1] == 90)
|
||||
{
|
||||
PlaySE(SE_TRACK_HAIK);
|
||||
PlaySE(SE_TRACK_HAIKI);
|
||||
data[1] = 0;
|
||||
data[0] = 5;
|
||||
}
|
||||
|
||||
@@ -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
-21
@@ -54,7 +54,7 @@ static EWRAM_DATA struct HofGfx *sHofGfxPtr = NULL;
|
||||
extern bool8 gHasHallOfFameRecords;
|
||||
extern u32 gUnknown_0203BCD4;
|
||||
extern u8 gDecompressionBuffer[];
|
||||
extern struct MusicPlayerInfo gMPlay_BGM;
|
||||
extern struct MusicPlayerInfo gMPlayInfo_BGM;
|
||||
extern MainCallback gGameContinueCallback;
|
||||
extern u32 gDamagedSaveSectors;
|
||||
extern u8 gReservedSpritePaletteCount;
|
||||
@@ -97,7 +97,7 @@ extern u16 sub_818D7D8(u16 species, u32 trainerId, u32 personality, u8 arg3, s16
|
||||
extern void sub_8198204(u8 *dst, const u8 *src, u8, u8, u8);
|
||||
extern bool8 sub_80F9C30(void);
|
||||
extern void sub_8198314(void);
|
||||
extern void sub_8137C3C(void);
|
||||
extern void ReturnFromHallOfFamePC(void);
|
||||
extern void sub_8198180(const u8 *src, u8, u8);
|
||||
extern void sub_80F9BF4(u16, u16, u8);
|
||||
extern void sub_81980F0(u8, u8, u8, u8, u16);
|
||||
@@ -187,9 +187,9 @@ static const struct BgTemplate sHof_BgTemplates[] =
|
||||
|
||||
static const struct WindowTemplate sHof_WindowTemplate = {0, 2, 2, 0xE, 6, 0xE, 1};
|
||||
|
||||
static const u8 gUnknown_085E5388[] = {0, 1, 2, 0};
|
||||
static const u8 sUnknown_085E5388[] = {0, 1, 2, 0};
|
||||
|
||||
static const u8 gUnknown_085E538C[] = {0, 2, 3, 0, 4, 5, 0, 0};
|
||||
static const u8 sUnknown_085E538C[] = {0, 2, 3, 0, 4, 5, 0, 0};
|
||||
|
||||
static const struct CompressedSpriteSheet sHallOfFame_ConfettiSpriteSheet =
|
||||
{
|
||||
@@ -424,7 +424,7 @@ static bool8 InitHallOfFameScreen(void)
|
||||
if (!gPaletteFade.active)
|
||||
{
|
||||
SetMainCallback2(CB2_HallOfFame);
|
||||
PlayBGM(BGM_DENDOU);
|
||||
PlayBGM(MUS_DENDOU);
|
||||
return FALSE;
|
||||
}
|
||||
break;
|
||||
@@ -1040,7 +1040,7 @@ static void Task_HofPC_HandleInput(u8 taskId)
|
||||
if (IsCryPlayingOrClearCrySongs())
|
||||
{
|
||||
StopCryAndClearCrySongs();
|
||||
m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100);
|
||||
m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100);
|
||||
}
|
||||
gTasks[taskId].func = Task_HofPC_HandlePaletteOnExit;
|
||||
}
|
||||
@@ -1050,7 +1050,7 @@ static void Task_HofPC_HandleInput(u8 taskId)
|
||||
if (IsCryPlayingOrClearCrySongs())
|
||||
{
|
||||
StopCryAndClearCrySongs();
|
||||
m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100);
|
||||
m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100);
|
||||
}
|
||||
gTasks[taskId].func = Task_HofPC_HandlePaletteOnExit;
|
||||
}
|
||||
@@ -1108,7 +1108,7 @@ static void Task_HofPC_HandleExit(u8 taskId)
|
||||
if (sHofMonPtr != NULL)
|
||||
FREE_AND_SET_NULL(sHofMonPtr);
|
||||
|
||||
sub_8137C3C();
|
||||
ReturnFromHallOfFamePC();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1137,7 +1137,7 @@ static void HallOfFame_PrintWelcomeText(u8 unusedPossiblyWindowId, u8 unused2)
|
||||
{
|
||||
FillWindowPixelBuffer(0, 0);
|
||||
PutWindowTilemap(0);
|
||||
box_print(0, 1, GetStringCenterAlignXOffset(1, gText_WelcomeToHOF, 0xD0), 1, gUnknown_085E5388, 0, gText_WelcomeToHOF);
|
||||
box_print(0, 1, GetStringCenterAlignXOffset(1, gText_WelcomeToHOF, 0xD0), 1, sUnknown_085E5388, 0, gText_WelcomeToHOF);
|
||||
CopyWindowToVram(0, 3);
|
||||
}
|
||||
|
||||
@@ -1173,7 +1173,7 @@ static void HallOfFame_PrintMonInfo(struct HallofFameMon* currMon, u8 unused1, u
|
||||
*(stringPtr)++ = CHAR_QUESTION_MARK;
|
||||
}
|
||||
stringPtr[0] = EOS;
|
||||
box_print(0, 1, 0x10, 1, gUnknown_085E5388, -1, text);
|
||||
box_print(0, 1, 0x10, 1, sUnknown_085E5388, -1, text);
|
||||
}
|
||||
|
||||
// nick, species names, gender and level
|
||||
@@ -1182,13 +1182,13 @@ static void HallOfFame_PrintMonInfo(struct HallofFameMon* currMon, u8 unused1, u
|
||||
if (currMon->species == SPECIES_EGG)
|
||||
{
|
||||
width = GetStringCenterAlignXOffset(1, text, 0xD0);
|
||||
box_print(0, 1, width, 1, gUnknown_085E5388, -1, text);
|
||||
box_print(0, 1, width, 1, sUnknown_085E5388, -1, text);
|
||||
CopyWindowToVram(0, 3);
|
||||
}
|
||||
else
|
||||
{
|
||||
width = GetStringRightAlignXOffset(1, text, 0x80);
|
||||
box_print(0, 1, width, 1, gUnknown_085E5388, -1, text);
|
||||
box_print(0, 1, width, 1, sUnknown_085E5388, -1, text);
|
||||
|
||||
text[0] = CHAR_SLASH;
|
||||
stringPtr = StringCopy(text + 1, gSpeciesNames[currMon->species]);
|
||||
@@ -1209,15 +1209,15 @@ static void HallOfFame_PrintMonInfo(struct HallofFameMon* currMon, u8 unused1, u
|
||||
}
|
||||
|
||||
stringPtr[0] = EOS;
|
||||
box_print(0, 1, 0x80, 1, gUnknown_085E5388, -1, text);
|
||||
box_print(0, 1, 0x80, 1, sUnknown_085E5388, -1, text);
|
||||
|
||||
stringPtr = StringCopy(text, gText_Level);
|
||||
ConvertIntToDecimalStringN(stringPtr, currMon->lvl, STR_CONV_MODE_LEFT_ALIGN, 3);
|
||||
box_print(0, 1, 0x24, 0x11, gUnknown_085E5388, -1, text);
|
||||
box_print(0, 1, 0x24, 0x11, sUnknown_085E5388, -1, text);
|
||||
|
||||
stringPtr = StringCopy(text, gText_IDNumber);
|
||||
ConvertIntToDecimalStringN(stringPtr, (u16)(currMon->tid), STR_CONV_MODE_LEADING_ZEROS, 5);
|
||||
box_print(0, 1, 0x68, 0x11, gUnknown_085E5388, -1, text);
|
||||
box_print(0, 1, 0x68, 0x11, sUnknown_085E5388, -1, text);
|
||||
|
||||
CopyWindowToVram(0, 3);
|
||||
}
|
||||
@@ -1232,13 +1232,13 @@ static void HallOfFame_PrintPlayerInfo(u8 unused1, u8 unused2)
|
||||
FillWindowPixelBuffer(1, 0x11);
|
||||
PutWindowTilemap(1);
|
||||
SetWindowBorderStyle(1, FALSE, 0x21D, 0xD);
|
||||
box_print(1, 1, 0, 1, gUnknown_085E538C, -1, gText_Name);
|
||||
box_print(1, 1, 0, 1, sUnknown_085E538C, -1, gText_Name);
|
||||
|
||||
width = GetStringRightAlignXOffset(1, gSaveBlock2Ptr->playerName, 0x70);
|
||||
box_print(1, 1, width, 1, gUnknown_085E538C, -1, gSaveBlock2Ptr->playerName);
|
||||
box_print(1, 1, width, 1, sUnknown_085E538C, -1, gSaveBlock2Ptr->playerName);
|
||||
|
||||
trainerId = (gSaveBlock2Ptr->playerTrainerId[0]) | (gSaveBlock2Ptr->playerTrainerId[1] << 8);
|
||||
box_print(1, 1, 0, 0x11, gUnknown_085E538C, 0, gText_IDNumber);
|
||||
box_print(1, 1, 0, 0x11, sUnknown_085E538C, 0, gText_IDNumber);
|
||||
text[0] = (trainerId % 100000) / 10000 + CHAR_0;
|
||||
text[1] = (trainerId % 10000) / 1000 + CHAR_0;
|
||||
text[2] = (trainerId % 1000) / 100 + CHAR_0;
|
||||
@@ -1246,9 +1246,9 @@ static void HallOfFame_PrintPlayerInfo(u8 unused1, u8 unused2)
|
||||
text[4] = (trainerId % 10) / 1 + CHAR_0;
|
||||
text[5] = EOS;
|
||||
width = GetStringRightAlignXOffset(1, text, 0x70);
|
||||
box_print(1, 1, width, 0x11, gUnknown_085E538C, -1, text);
|
||||
box_print(1, 1, width, 0x11, sUnknown_085E538C, -1, text);
|
||||
|
||||
box_print(1, 1, 0, 0x21, gUnknown_085E538C, -1, gText_MainMenuTime);
|
||||
box_print(1, 1, 0, 0x21, sUnknown_085E538C, -1, gText_MainMenuTime);
|
||||
text[0] = (gSaveBlock2Ptr->playTimeHours / 100) + CHAR_0;
|
||||
text[1] = (gSaveBlock2Ptr->playTimeHours % 100) / 10 + CHAR_0;
|
||||
text[2] = (gSaveBlock2Ptr->playTimeHours % 10) + CHAR_0;
|
||||
@@ -1264,7 +1264,7 @@ static void HallOfFame_PrintPlayerInfo(u8 unused1, u8 unused2)
|
||||
text[6] = EOS;
|
||||
|
||||
width = GetStringRightAlignXOffset(1, text, 0x70);
|
||||
box_print(1, 1, width, 0x21, gUnknown_085E538C, -1, text);
|
||||
box_print(1, 1, width, 0x21, sUnknown_085E538C, -1, text);
|
||||
|
||||
CopyWindowToVram(1, 3);
|
||||
}
|
||||
|
||||
+441
@@ -0,0 +1,441 @@
|
||||
#include "global.h"
|
||||
#include "event_data.h"
|
||||
#include "constants/region_map_sections.h"
|
||||
|
||||
struct Landmark
|
||||
{
|
||||
const u8 *name;
|
||||
u16 flag;
|
||||
};
|
||||
|
||||
struct LandmarkList
|
||||
{
|
||||
u8 mapSection;
|
||||
u8 id;
|
||||
const struct Landmark *const *landmarks;
|
||||
};
|
||||
|
||||
static const u8 LandmarkName_FlowerShop[] = _("FLOWER SHOP");
|
||||
static const u8 LandmarkName_PetalburgWoods[] = _("PETALBURG WOODS");
|
||||
static const u8 LandmarkName_MrBrineysCottage[] = _("MR. BRINEY’S COTTAGE");
|
||||
static const u8 LandmarkName_AbandonedShip[] = _("ABANDONED SHIP");
|
||||
static const u8 LandmarkName_SeashoreHouse[] = _("SEASHORE HOUSE");
|
||||
static const u8 LandmarkName_SlateportBeach[] = _("SLATEPORT BEACH");
|
||||
static const u8 LandmarkName_CyclingRoad[] = _("CYCLING ROAD");
|
||||
static const u8 LandmarkName_NewMauville[] = _("NEW MAUVILLE");
|
||||
static const u8 LandmarkName_TrickHouse[] = _("TRICK HOUSE");
|
||||
static const u8 LandmarkName_OldLadysRestShop[] = _("OLD LADY’S REST STOP");
|
||||
static const u8 LandmarkName_Desert[] = _("DESERT");
|
||||
static const u8 LandmarkName_WinstrateFamily[] = _("THE WINSTRATE FAMILY");
|
||||
static const u8 LandmarkName_CableCar[] = _("CABLE CAR");
|
||||
static const u8 LandmarkName_GlassWorkshop[] = _("GLASS WORKSHOP");
|
||||
static const u8 LandmarkName_WeatherInstitute[] = _("WEATHER INSTITUTE");
|
||||
static const u8 LandmarkName_MeteorFalls[] = _("METEOR FALLS");
|
||||
static const u8 LandmarkName_TunnelersRestHouse[] = _("TUNNELER’S RESTHOUSE");
|
||||
static const u8 LandmarkName_RusturfTunnel[] = _("RUSTURF TUNNEL");
|
||||
static const u8 LandmarkName_PokemonDayCare[] = _("POKéMON DAY CARE");
|
||||
static const u8 LandmarkName_SafariZoneEntrance[] = _("SAFARI ZONE ENTRANCE");
|
||||
static const u8 LandmarkName_MtPyre[] = _("MT. PYRE");
|
||||
static const u8 LandmarkName_ShoalCave[] = _("SHOAL CAVE");
|
||||
static const u8 LandmarkName_SeafloorCavern[] = _("SEAFLOOR CAVERN");
|
||||
static const u8 LandmarkName_GraniteCave[] = _("GRANITE CAVE");
|
||||
static const u8 LandmarkName_OceanCurrent[] = _("OCEAN CURRENT");
|
||||
static const u8 LandmarkName_LanettesHouse[] = _("LANETTE’S HOUSE");
|
||||
static const u8 LandmarkName_FieryPath[] = _("FIERY PATH");
|
||||
static const u8 LandmarkName_JaggedPass[] = _("JAGGED PASS");
|
||||
static const u8 LandmarkName_SkyPillar[] = _("SKY PILLAR");
|
||||
static const u8 LandmarkName_BerryMastersHouse[] = _("BERRY MASTER’S HOUSE");
|
||||
static const u8 LandmarkName_IslandCave[] = _("ISLAND CAVE");
|
||||
static const u8 LandmarkName_DesertRuins[] = _("DESERT RUINS");
|
||||
static const u8 LandmarkName_ScorchedSlab[] = _("SCORCHED SLAB");
|
||||
static const u8 LandmarkName_AncientTomb[] = _("ANCIENT TOMB");
|
||||
static const u8 LandmarkName_SealedChamber[] = _("SEALED CHAMBER");
|
||||
static const u8 LandmarkName_FossilManiacsHouse[] = _("FOSSIL MANIAC’S HOUSE");
|
||||
static const u8 LandmarkName_HuntersHouse[] = _("HUNTER’S HOUSE");
|
||||
static const u8 LandmarkName_MagmaHideout[] = _("MAGMA HIDEOUT");
|
||||
static const u8 LandmarkName_MirageTower[] = _("MIRAGE TOWER");
|
||||
static const u8 LandmarkName_AlteringCave[] = _("ALTERING CAVE");
|
||||
static const u8 LandmarkName_DesertUnderpass[] = _("DESERT UNDERPASS");
|
||||
static const u8 LandmarkName_TrainerHill[] = _("TRAINER HILL");
|
||||
|
||||
static const struct Landmark Landmark_FlowerShop = {LandmarkName_FlowerShop, FLAG_LANDMARK_FLOWER_SHOP};
|
||||
static const struct Landmark Landmark_PetalburgWoods = {LandmarkName_PetalburgWoods, -1};
|
||||
static const struct Landmark Landmark_MrBrineysCottage = {LandmarkName_MrBrineysCottage, FLAG_LANDMARK_MR_BRINEY_HOUSE};
|
||||
static const struct Landmark Landmark_AbandonedShip = {LandmarkName_AbandonedShip, FLAG_LANDMARK_ABANDONED_SHIP};
|
||||
static const struct Landmark Landmark_SeashoreHouse = {LandmarkName_SeashoreHouse, FLAG_LANDMARK_SEASHORE_HOUSE};
|
||||
static const struct Landmark Landmark_SlateportBeach = {LandmarkName_SlateportBeach, -1};
|
||||
static const struct Landmark Landmark_CyclingRoad = {LandmarkName_CyclingRoad, -1};
|
||||
static const struct Landmark Landmark_NewMauville = {LandmarkName_NewMauville, FLAG_LANDMARK_NEW_MAUVILLE};
|
||||
static const struct Landmark Landmark_TrickHouse = {LandmarkName_TrickHouse, FLAG_LANDMARK_TRICK_HOUSE};
|
||||
static const struct Landmark Landmark_OldLadysRestShop = {LandmarkName_OldLadysRestShop, FLAG_LANDMARK_OLD_LADY_REST_SHOP};
|
||||
static const struct Landmark Landmark_Desert = {LandmarkName_Desert, -1};
|
||||
static const struct Landmark Landmark_WinstrateFamily = {LandmarkName_WinstrateFamily, FLAG_LANDMARK_WINSTRATE_FAMILY};
|
||||
static const struct Landmark Landmark_CableCar = {LandmarkName_CableCar, -1};
|
||||
static const struct Landmark Landmark_GlassWorkshop = {LandmarkName_GlassWorkshop, FLAG_LANDMARK_GLASS_WORKSHOP};
|
||||
static const struct Landmark Landmark_WeatherInstitute = {LandmarkName_WeatherInstitute, -1};
|
||||
static const struct Landmark Landmark_MeteorFalls = {LandmarkName_MeteorFalls, -1};
|
||||
static const struct Landmark Landmark_TunnelersRestHouse = {LandmarkName_TunnelersRestHouse, FLAG_LANDMARK_TUNNELERS_REST_HOUSE};
|
||||
static const struct Landmark Landmark_RusturfTunnel = {LandmarkName_RusturfTunnel, -1};
|
||||
static const struct Landmark Landmark_PokemonDayCare = {LandmarkName_PokemonDayCare, FLAG_LANDMARK_POKEMON_DAYCARE};
|
||||
static const struct Landmark Landmark_SafariZoneEntrance = {LandmarkName_SafariZoneEntrance, -1};
|
||||
static const struct Landmark Landmark_MtPyre = {LandmarkName_MtPyre, -1};
|
||||
static const struct Landmark Landmark_ShoalCave = {LandmarkName_ShoalCave, -1};
|
||||
static const struct Landmark Landmark_SeafloorCavern = {LandmarkName_SeafloorCavern, FLAG_LANDMARK_SEAFLOOR_CAVERN};
|
||||
static const struct Landmark Landmark_GraniteCave = {LandmarkName_GraniteCave, -1};
|
||||
static const struct Landmark Landmark_OceanCurrent = {LandmarkName_OceanCurrent, -1};
|
||||
static const struct Landmark Landmark_LanettesHouse = {LandmarkName_LanettesHouse, FLAG_LANDMARK_LANETTES_HOUSE};
|
||||
static const struct Landmark Landmark_FieryPath = {LandmarkName_FieryPath, FLAG_LANDMARK_FIERY_PATH};
|
||||
static const struct Landmark Landmark_JaggedPass = {LandmarkName_JaggedPass, -1};
|
||||
static const struct Landmark Landmark_BerryMastersHouse = {LandmarkName_BerryMastersHouse, FLAG_LANDMARK_BERRY_MASTERS_HOUSE};
|
||||
static const struct Landmark Landmark_IslandCave = {LandmarkName_IslandCave, FLAG_LANDMARK_ISLAND_CAVE};
|
||||
static const struct Landmark Landmark_DesertRuins = {LandmarkName_DesertRuins, FLAG_LANDMARK_DESERT_RUINS};
|
||||
static const struct Landmark Landmark_ScorchedSlab = {LandmarkName_ScorchedSlab, FLAG_LANDMARK_SCORCHED_SLAB};
|
||||
static const struct Landmark Landmark_AncientTomb = {LandmarkName_AncientTomb, FLAG_LANDMARK_ANCIENT_TOMB};
|
||||
static const struct Landmark Landmark_SealedChamber = {LandmarkName_SealedChamber, FLAG_LANDMARK_SEALED_CHAMBER};
|
||||
static const struct Landmark Landmark_FossilManiacsHouse = {LandmarkName_FossilManiacsHouse, FLAG_LANDMARK_FOSSIL_MANIACS_HOUSE};
|
||||
static const struct Landmark Landmark_HuntersHouse = {LandmarkName_HuntersHouse, FLAG_LANDMARK_HUNTERS_HOUSE};
|
||||
static const struct Landmark Landmark_SkyPillar = {LandmarkName_SkyPillar, FLAG_LANDMARK_SKY_PILLAR};
|
||||
static const struct Landmark Landmark_MirageTower = {LandmarkName_MirageTower, FLAG_LANDMARK_MIRAGE_TOWER};
|
||||
static const struct Landmark Landmark_AlteringCave = {LandmarkName_AlteringCave, FLAG_LANDMARK_ALTERING_CAVE};
|
||||
static const struct Landmark Landmark_DesertUnderpass = {LandmarkName_DesertUnderpass, FLAG_LANDMARK_DESERT_UNDERPASS};
|
||||
static const struct Landmark Landmark_TrainerHill = {LandmarkName_TrainerHill, FLAG_LANDMARK_TRAINER_HILL};
|
||||
|
||||
static const struct Landmark *const Landmarks_Route103_2[] =
|
||||
{
|
||||
&Landmark_AlteringCave,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const struct Landmark *const Landmarks_Route104_0[] =
|
||||
{
|
||||
&Landmark_FlowerShop,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const struct Landmark *const Landmarks_Route104_1[] =
|
||||
{
|
||||
&Landmark_PetalburgWoods,
|
||||
&Landmark_MrBrineysCottage,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const struct Landmark *const Landmarks_Route105_0[] =
|
||||
{
|
||||
&Landmark_IslandCave,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const struct Landmark *const Landmarks_Route106_1[] =
|
||||
{
|
||||
&Landmark_GraniteCave,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const struct Landmark *const Landmarks_Route108_0[] =
|
||||
{
|
||||
&Landmark_AbandonedShip,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const struct Landmark *const Landmarks_Route109_0[] =
|
||||
{
|
||||
&Landmark_SeashoreHouse,
|
||||
&Landmark_SlateportBeach,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const struct Landmark *const Landmarks_Route110_0[] =
|
||||
{
|
||||
&Landmark_CyclingRoad,
|
||||
&Landmark_NewMauville,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const struct Landmark *const Landmarks_Route110_1[] =
|
||||
{
|
||||
&Landmark_CyclingRoad,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const struct Landmark *const Landmarks_Route110_2[] =
|
||||
{
|
||||
&Landmark_CyclingRoad,
|
||||
&Landmark_TrickHouse,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const struct Landmark *const Landmarks_Route111_0[] =
|
||||
{
|
||||
&Landmark_OldLadysRestShop,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const struct Landmark *const Landmarks_Route111_1[] =
|
||||
{
|
||||
&Landmark_Desert,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const struct Landmark *const Landmarks_Route111_2[] =
|
||||
{
|
||||
&Landmark_MirageTower,
|
||||
&Landmark_Desert,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const struct Landmark *const Landmarks_Route111_3[] =
|
||||
{
|
||||
&Landmark_DesertRuins,
|
||||
&Landmark_Desert,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const struct Landmark *const Landmarks_Route111_4[] =
|
||||
{
|
||||
&Landmark_TrainerHill,
|
||||
&Landmark_WinstrateFamily,
|
||||
&Landmark_Desert,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const struct Landmark *const Landmarks_Route112_0[] =
|
||||
{
|
||||
&Landmark_FieryPath,
|
||||
&Landmark_JaggedPass,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const struct Landmark *const Landmarks_Route112_1[] =
|
||||
{
|
||||
&Landmark_CableCar,
|
||||
&Landmark_FieryPath,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const struct Landmark *const Landmarks_Route113_1[] =
|
||||
{
|
||||
&Landmark_GlassWorkshop,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const struct Landmark *const Landmarks_Route114_1[] =
|
||||
{
|
||||
&Landmark_DesertUnderpass,
|
||||
&Landmark_FossilManiacsHouse,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const struct Landmark *const Landmarks_Route114_2[] =
|
||||
{
|
||||
&Landmark_LanettesHouse,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const struct Landmark *const Landmarks_MeteorFalls[] =
|
||||
{
|
||||
&Landmark_MeteorFalls,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const struct Landmark *const Landmarks_Route116_1[] =
|
||||
{
|
||||
&Landmark_TunnelersRestHouse,
|
||||
&Landmark_RusturfTunnel,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const struct Landmark *const Landmarks_Route116_2[] =
|
||||
{
|
||||
&Landmark_RusturfTunnel,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const struct Landmark *const Landmarks_Route117_2[] =
|
||||
{
|
||||
&Landmark_PokemonDayCare,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const struct Landmark *const Landmarks_Route119_1[] =
|
||||
{
|
||||
&Landmark_WeatherInstitute,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const struct Landmark *const Landmarks_Route120_0[] =
|
||||
{
|
||||
&Landmark_ScorchedSlab,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const struct Landmark *const Landmarks_Route120_2[] =
|
||||
{
|
||||
&Landmark_AncientTomb,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const struct Landmark *const Landmarks_Route121_2[] =
|
||||
{
|
||||
&Landmark_SafariZoneEntrance,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const struct Landmark *const Landmarks_Route122_0[] =
|
||||
{
|
||||
&Landmark_MtPyre,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const struct Landmark *const Landmarks_Route123_0[] =
|
||||
{
|
||||
&Landmark_BerryMastersHouse,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const struct Landmark *const Landmarks_Route124_7[] =
|
||||
{
|
||||
&Landmark_HuntersHouse,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const struct Landmark *const Landmarks_Route125_2[] =
|
||||
{
|
||||
&Landmark_ShoalCave,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const struct Landmark *const Landmarks_Route128_1[] =
|
||||
{
|
||||
&Landmark_SeafloorCavern,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const struct Landmark *const Landmarks_Route131_1[] =
|
||||
{
|
||||
&Landmark_SkyPillar,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const struct Landmark *const Landmarks_OceanCurrent[] =
|
||||
{
|
||||
&Landmark_OceanCurrent,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const struct Landmark *const Landmarks_Route134_2[] =
|
||||
{
|
||||
&Landmark_SealedChamber,
|
||||
&Landmark_OceanCurrent,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const struct Landmark *const Landmarks_MtChimney_2[] =
|
||||
{
|
||||
&Landmark_CableCar,
|
||||
&Landmark_JaggedPass,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const struct LandmarkList gLandmarkLists[] =
|
||||
{
|
||||
{MAPSEC_ROUTE_103, 2, Landmarks_Route103_2},
|
||||
{MAPSEC_ROUTE_104, 0, Landmarks_Route104_0},
|
||||
{MAPSEC_ROUTE_104, 1, Landmarks_Route104_1},
|
||||
{MAPSEC_ROUTE_105, 0, Landmarks_Route105_0},
|
||||
{MAPSEC_ROUTE_106, 1, Landmarks_Route106_1},
|
||||
{MAPSEC_ROUTE_108, 0, Landmarks_Route108_0},
|
||||
{MAPSEC_ROUTE_109, 0, Landmarks_Route109_0},
|
||||
{MAPSEC_ROUTE_110, 0, Landmarks_Route110_0},
|
||||
{MAPSEC_ROUTE_110, 1, Landmarks_Route110_1},
|
||||
{MAPSEC_ROUTE_110, 2, Landmarks_Route110_2},
|
||||
{MAPSEC_ROUTE_111, 0, Landmarks_Route111_0},
|
||||
{MAPSEC_ROUTE_111, 1, Landmarks_Route111_1},
|
||||
{MAPSEC_ROUTE_111, 2, Landmarks_Route111_2},
|
||||
{MAPSEC_ROUTE_111, 3, Landmarks_Route111_3},
|
||||
{MAPSEC_ROUTE_111, 4, Landmarks_Route111_4},
|
||||
{MAPSEC_ROUTE_112, 0, Landmarks_Route112_0},
|
||||
{MAPSEC_ROUTE_112, 1, Landmarks_Route112_1},
|
||||
{MAPSEC_ROUTE_113, 1, Landmarks_Route113_1},
|
||||
{MAPSEC_ROUTE_114, 1, Landmarks_Route114_1},
|
||||
{MAPSEC_ROUTE_114, 2, Landmarks_Route114_2},
|
||||
{MAPSEC_ROUTE_114, 3, Landmarks_MeteorFalls},
|
||||
{MAPSEC_ROUTE_115, 0, Landmarks_MeteorFalls},
|
||||
{MAPSEC_ROUTE_115, 1, Landmarks_MeteorFalls},
|
||||
{MAPSEC_ROUTE_116, 1, Landmarks_Route116_1},
|
||||
{MAPSEC_ROUTE_116, 2, Landmarks_Route116_2},
|
||||
{MAPSEC_ROUTE_117, 2, Landmarks_Route117_2},
|
||||
{MAPSEC_ROUTE_119, 1, Landmarks_Route119_1},
|
||||
{MAPSEC_ROUTE_120, 0, Landmarks_Route120_0},
|
||||
{MAPSEC_ROUTE_120, 2, Landmarks_Route120_2},
|
||||
{MAPSEC_ROUTE_121, 2, Landmarks_Route121_2},
|
||||
{MAPSEC_ROUTE_122, 0, Landmarks_Route122_0},
|
||||
{MAPSEC_ROUTE_123, 0, Landmarks_Route123_0},
|
||||
{MAPSEC_ROUTE_122, 1, Landmarks_Route122_0},
|
||||
{MAPSEC_ROUTE_124, 7, Landmarks_Route124_7},
|
||||
{MAPSEC_ROUTE_125, 2, Landmarks_Route125_2},
|
||||
{MAPSEC_ROUTE_128, 1, Landmarks_Route128_1},
|
||||
{MAPSEC_ROUTE_131, 1, Landmarks_Route131_1},
|
||||
{MAPSEC_ROUTE_132, 0, Landmarks_OceanCurrent},
|
||||
{MAPSEC_ROUTE_132, 1, Landmarks_OceanCurrent},
|
||||
{MAPSEC_ROUTE_133, 0, Landmarks_OceanCurrent},
|
||||
{MAPSEC_ROUTE_133, 1, Landmarks_OceanCurrent},
|
||||
{MAPSEC_ROUTE_133, 2, Landmarks_OceanCurrent},
|
||||
{MAPSEC_ROUTE_134, 0, Landmarks_OceanCurrent},
|
||||
{MAPSEC_ROUTE_134, 1, Landmarks_OceanCurrent},
|
||||
{MAPSEC_ROUTE_134, 2, Landmarks_Route134_2},
|
||||
{MAPSEC_MT_CHIMNEY, 2, Landmarks_MtChimney_2},
|
||||
{MAPSEC_NONE, 0, NULL},
|
||||
};
|
||||
|
||||
static const struct Landmark *const *GetLandmarks(u8 mapSection, u8 id);
|
||||
|
||||
const u8 *GetLandmarkName(u8 mapSection, u8 id, u8 count)
|
||||
{
|
||||
const struct Landmark *const *landmarks = GetLandmarks(mapSection, id);
|
||||
|
||||
if (!landmarks)
|
||||
return NULL;
|
||||
|
||||
while (1)
|
||||
{
|
||||
const struct Landmark *landmark = *landmarks;
|
||||
|
||||
if (landmark->flag == 0xFFFF || FlagGet(landmark->flag) == TRUE)
|
||||
{
|
||||
if (count == 0)
|
||||
break;
|
||||
else
|
||||
count--;
|
||||
}
|
||||
|
||||
landmarks++;
|
||||
if (!*landmarks)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return (*landmarks)->name;
|
||||
}
|
||||
|
||||
static const struct Landmark *const *GetLandmarks(u8 mapSection, u8 id)
|
||||
{
|
||||
u16 i = 0;
|
||||
|
||||
for (; gLandmarkLists[i].mapSection != MAPSEC_NONE; i++)
|
||||
{
|
||||
if (gLandmarkLists[i].mapSection > mapSection)
|
||||
return NULL;
|
||||
if (gLandmarkLists[i].mapSection == mapSection)
|
||||
break;
|
||||
}
|
||||
|
||||
if (gLandmarkLists[i].mapSection == MAPSEC_NONE)
|
||||
return NULL;
|
||||
|
||||
for (; gLandmarkLists[i].mapSection == mapSection; i++)
|
||||
{
|
||||
if (gLandmarkLists[i].id == id)
|
||||
return gLandmarkLists[i].landmarks;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
-173
@@ -1,173 +0,0 @@
|
||||
#include "global.h"
|
||||
#include <stddef.h>
|
||||
|
||||
#define LBLOCKSIZE (sizeof(long))
|
||||
|
||||
// Nonzero if (long)X contains a NULL byte.
|
||||
#define CONTAINSNULL(X) (((X) - 0x01010101) & ~(X) & 0x80808080)
|
||||
|
||||
// Nonzero if X is not aligned on a "long" boundary.
|
||||
#define UNALIGNED(X) ((long)X & (LBLOCKSIZE - 1))
|
||||
|
||||
void *memcpy(void *dst0, const void *src0, size_t len0)
|
||||
{
|
||||
char *dst = dst0;
|
||||
const char *src = src0;
|
||||
long *aligned_dst;
|
||||
const long *aligned_src;
|
||||
unsigned int len = len0;
|
||||
|
||||
// If the size is small, or either src or dst is unaligned,
|
||||
// then go to the byte copy loop. This should be rare.
|
||||
if(len >= 16 && !(UNALIGNED(src) | UNALIGNED(dst)))
|
||||
{
|
||||
aligned_dst = (long *)dst;
|
||||
aligned_src = (long *)src;
|
||||
|
||||
// Copy 4X long words at a time if possible.
|
||||
while(len >= 16)
|
||||
{
|
||||
*aligned_dst++ = *aligned_src++;
|
||||
*aligned_dst++ = *aligned_src++;
|
||||
*aligned_dst++ = *aligned_src++;
|
||||
*aligned_dst++ = *aligned_src++;
|
||||
len -= 16;
|
||||
}
|
||||
|
||||
// Copy one long word at a time if possible
|
||||
while(len >= 4)
|
||||
{
|
||||
*aligned_dst++ = *aligned_src++;
|
||||
len -= 4;
|
||||
}
|
||||
|
||||
dst = (char *)aligned_dst;
|
||||
src = (char *)aligned_src;
|
||||
}
|
||||
|
||||
// Pick up any remaining bytes with a byte copier.
|
||||
while(len--)
|
||||
*dst++ = *src++;
|
||||
|
||||
return dst0;
|
||||
}
|
||||
|
||||
void *memset(void *m, int c, size_t n)
|
||||
{
|
||||
char *s = (char *)m;
|
||||
int count, i;
|
||||
unsigned long buffer;
|
||||
unsigned long *aligned_addr;
|
||||
unsigned char *unaligned_addr;
|
||||
|
||||
// If the size is small or m is unaligned,
|
||||
// then go to the byte copy loop. This should be rare.
|
||||
if(n >= LBLOCKSIZE && !UNALIGNED(m))
|
||||
{
|
||||
// We know that n is large and m is word-aligned.
|
||||
aligned_addr = (unsigned long *)m;
|
||||
|
||||
// Store C into each char sized location in buffer so that
|
||||
// we can set large blocks quickly.
|
||||
c &= 0xFF;
|
||||
if(LBLOCKSIZE == 4)
|
||||
{
|
||||
buffer = (c << 8) | c;
|
||||
buffer |= (buffer << 16);
|
||||
}
|
||||
else
|
||||
{
|
||||
buffer = 0;
|
||||
for(i = 0; i < LBLOCKSIZE; i++)
|
||||
buffer = (buffer << 8) | c;
|
||||
}
|
||||
|
||||
while(n >= LBLOCKSIZE * 4)
|
||||
{
|
||||
*aligned_addr++ = buffer;
|
||||
*aligned_addr++ = buffer;
|
||||
*aligned_addr++ = buffer;
|
||||
*aligned_addr++ = buffer;
|
||||
n -= LBLOCKSIZE * 4;
|
||||
}
|
||||
while(n >= LBLOCKSIZE)
|
||||
{
|
||||
*aligned_addr++ = buffer;
|
||||
n -= LBLOCKSIZE;
|
||||
}
|
||||
|
||||
s = (char *)aligned_addr;
|
||||
}
|
||||
|
||||
// Pick up the remainder with a bytewise loop.
|
||||
while(n--)
|
||||
*s++ = (char)c;
|
||||
|
||||
return m;
|
||||
}
|
||||
|
||||
int strcmp(const char *s1, const char *s2)
|
||||
{
|
||||
unsigned long *a1;
|
||||
unsigned long *a2;
|
||||
|
||||
// If s1 or s2 are unaligned, then skip this and compare bytes.
|
||||
if(!(UNALIGNED(s1) | UNALIGNED(s2)))
|
||||
{
|
||||
// Compare them a word at a time.
|
||||
a1 = (unsigned long *)s1;
|
||||
a2 = (unsigned long *)s2;
|
||||
while(*a1 == *a2)
|
||||
{
|
||||
// If *a1 == *a2, and we find a null in *a1,
|
||||
// then the strings must be equal, so return zero.
|
||||
if(CONTAINSNULL(*a1))
|
||||
return 0;
|
||||
|
||||
a1++;
|
||||
a2++;
|
||||
}
|
||||
|
||||
s1 = (char *)a1;
|
||||
s2 = (char *)a2;
|
||||
}
|
||||
|
||||
// Check the remaining few bytes.
|
||||
while(*s1 != '\0' && *s1 == *s2)
|
||||
{
|
||||
s1++;
|
||||
s2++;
|
||||
}
|
||||
|
||||
return (*(unsigned char *) s1) - (*(unsigned char *) s2);
|
||||
}
|
||||
|
||||
char* strcpy(char *dst0, const char *src0)
|
||||
{
|
||||
char *dst = dst0;
|
||||
const char *src = src0;
|
||||
unsigned long *a1;
|
||||
const unsigned long *a2;
|
||||
|
||||
// If SRC or DEST is unaligned, then copy bytes.
|
||||
if(!(UNALIGNED(src) | UNALIGNED(dst)))
|
||||
{
|
||||
// SRC and DEST are both "long int" aligned, try to do "long int"
|
||||
// sized copies.
|
||||
a1 = (unsigned long *)dst;
|
||||
a2 = (unsigned long *)src;
|
||||
while(!CONTAINSNULL(*a2))
|
||||
{
|
||||
*a1++ = *a2++;
|
||||
}
|
||||
|
||||
dst = (char *)a1;
|
||||
src = (char *)a2;
|
||||
}
|
||||
|
||||
// Copy the remaining few bytes.
|
||||
while(*dst++ = *src++);
|
||||
|
||||
return dst0;
|
||||
}
|
||||
|
||||
Executable
+177
@@ -0,0 +1,177 @@
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
#include "gba/gba.h"
|
||||
#include "config.h"
|
||||
|
||||
#define AGB_PRINT_FLUSH_ADDR 0x9FE209D
|
||||
#define AGB_PRINT_STRUCT_ADDR 0x9FE20F8
|
||||
#define AGB_PRINT_PROTECT_ADDR 0x9FE2FFE
|
||||
#define WSCNT_DATA (WAITCNT_PHI_OUT_16MHZ | WAITCNT_WS0_S_2 | WAITCNT_WS0_N_4)
|
||||
|
||||
// originally for auto no$gba support, the string "no$gba" should be at this address,
|
||||
// the user needs to read this string out as the memory viewer won't show it.
|
||||
#define NOCASHGBAIDADDR 0x4FFFA00
|
||||
#define NOCASHGBAPRINTADDR1 0x4FFFA10 // automatically adds a newline after the string has finished
|
||||
#define NOCASHGBAPRINTADDR2 0x4FFFA14 // does not automatically add the newline. by default, NOCASHGBAPRINTADDR2 is used. this is used to keep strings consistent between no$gba and VBA-RR, but a user can choose to forgo this.
|
||||
|
||||
struct AGBPrintStruct
|
||||
{
|
||||
u16 m_nRequest;
|
||||
u16 m_nBank;
|
||||
u16 m_nGet;
|
||||
u16 m_nPut;
|
||||
};
|
||||
|
||||
typedef void (*LPFN_PRINT_FLUSH)(void);
|
||||
|
||||
#ifndef NDEBUG
|
||||
|
||||
void AGBPrintFlush1Block(void);
|
||||
|
||||
void AGBPrintInit(void)
|
||||
{
|
||||
volatile struct AGBPrintStruct *pPrint = (struct AGBPrintStruct *)AGB_PRINT_STRUCT_ADDR;
|
||||
u16 *pWSCNT = (u16 *)REG_ADDR_WAITCNT;
|
||||
u16 *pProtect = (u16 *)AGB_PRINT_PROTECT_ADDR;
|
||||
u16 nOldWSCNT = *pWSCNT;
|
||||
*pWSCNT = WSCNT_DATA;
|
||||
*pProtect = 0x20;
|
||||
pPrint->m_nRequest = pPrint->m_nGet = pPrint->m_nPut = 0;
|
||||
pPrint->m_nBank = 0xFD;
|
||||
*pProtect = 0;
|
||||
*pWSCNT = nOldWSCNT;
|
||||
}
|
||||
|
||||
static void AGBPutcInternal(const char cChr)
|
||||
{
|
||||
volatile struct AGBPrintStruct *pPrint = (struct AGBPrintStruct *)AGB_PRINT_STRUCT_ADDR;
|
||||
u16 *pPrintBuf = (u16 *)(0x8000000 + (pPrint->m_nBank << 16));
|
||||
u16 *pProtect = (u16 *)AGB_PRINT_PROTECT_ADDR;
|
||||
u16 nData = pPrintBuf[pPrint->m_nPut / 2];
|
||||
*pProtect = 0x20;
|
||||
nData = (pPrint->m_nPut & 1) ? (nData & 0xFF) | (cChr << 8) : (nData & 0xFF00) | cChr;
|
||||
pPrintBuf[pPrint->m_nPut / 2] = nData;
|
||||
pPrint->m_nPut++;
|
||||
*pProtect = 0;
|
||||
}
|
||||
|
||||
void AGBPutc(const char cChr)
|
||||
{
|
||||
u16 *pWSCNT = (u16 *)REG_ADDR_WAITCNT;
|
||||
u16 nOldWSCNT = *pWSCNT;
|
||||
volatile struct AGBPrintStruct *pPrint;
|
||||
*pWSCNT = WSCNT_DATA;
|
||||
AGBPutcInternal(cChr);
|
||||
*pWSCNT = nOldWSCNT;
|
||||
pPrint = (struct AGBPrintStruct *)AGB_PRINT_STRUCT_ADDR;
|
||||
if (pPrint->m_nPut == ((pPrint->m_nGet - 1) & 0xFFFF))
|
||||
AGBPrintFlush1Block();
|
||||
}
|
||||
|
||||
void AGBPrint(const char *pBuf)
|
||||
{
|
||||
volatile struct AGBPrintStruct *pPrint = (struct AGBPrintStruct *)AGB_PRINT_STRUCT_ADDR;
|
||||
u16 *pWSCNT = (u16 *)REG_ADDR_WAITCNT;
|
||||
u16 nOldWSCNT = *pWSCNT;
|
||||
*pWSCNT = WSCNT_DATA;
|
||||
while (*pBuf)
|
||||
{
|
||||
AGBPutc(*pBuf);
|
||||
pBuf++;
|
||||
}
|
||||
*pWSCNT = nOldWSCNT;
|
||||
}
|
||||
|
||||
void AGBPrintf(const char *pBuf, ...)
|
||||
{
|
||||
char bufPrint[0x100];
|
||||
va_list vArgv;
|
||||
va_start(vArgv, pBuf);
|
||||
vsprintf(bufPrint, pBuf, vArgv);
|
||||
va_end(vArgv);
|
||||
AGBPrint(bufPrint);
|
||||
}
|
||||
|
||||
static void AGBPrintTransferDataInternal(u32 bAllData)
|
||||
{
|
||||
LPFN_PRINT_FLUSH lpfnFuncFlush;
|
||||
u16 *pIME;
|
||||
u16 nIME;
|
||||
u16 *pWSCNT;
|
||||
u16 nOldWSCNT;
|
||||
u16 *pProtect;
|
||||
volatile struct AGBPrintStruct *pPrint;
|
||||
|
||||
pProtect = (u16 *)AGB_PRINT_PROTECT_ADDR;
|
||||
pPrint = (struct AGBPrintStruct *)AGB_PRINT_STRUCT_ADDR;
|
||||
lpfnFuncFlush = (LPFN_PRINT_FLUSH)AGB_PRINT_FLUSH_ADDR;
|
||||
pIME = (u16 *)REG_ADDR_IME;
|
||||
nIME = *pIME;
|
||||
pWSCNT = (u16 *)REG_ADDR_WAITCNT;
|
||||
nOldWSCNT = *pWSCNT;
|
||||
*pIME = nIME & ~1;
|
||||
*pWSCNT = WSCNT_DATA;
|
||||
|
||||
if (bAllData)
|
||||
{
|
||||
while (pPrint->m_nPut != pPrint->m_nGet)
|
||||
{
|
||||
*pProtect = 0x20;
|
||||
lpfnFuncFlush();
|
||||
*pProtect = 0;
|
||||
}
|
||||
}
|
||||
else if (pPrint->m_nPut != pPrint->m_nGet)
|
||||
{
|
||||
*pProtect = 0x20;
|
||||
lpfnFuncFlush();
|
||||
*pProtect = 0;
|
||||
}
|
||||
|
||||
*pWSCNT = nOldWSCNT;
|
||||
*pIME = nIME;
|
||||
}
|
||||
|
||||
void AGBPrintFlush1Block(void)
|
||||
{
|
||||
AGBPrintTransferDataInternal(FALSE);
|
||||
}
|
||||
|
||||
void AGBPrintFlush(void)
|
||||
{
|
||||
AGBPrintTransferDataInternal(TRUE);
|
||||
}
|
||||
|
||||
void AGBAssert(const char *pFile, int nLine, const char *pExpression, int nStopProgram)
|
||||
{
|
||||
if (nStopProgram)
|
||||
{
|
||||
AGBPrintf("ASSERTION FAILED FILE=[%s] LINE=[%d] EXP=[%s] \n", pFile, nLine, pExpression);
|
||||
AGBPrintFlush();
|
||||
asm(".hword 0xEFFF");
|
||||
}
|
||||
else
|
||||
{
|
||||
AGBPrintf("WARING FILE=[%s] LINE=[%d] EXP=[%s] \n", pFile, nLine, pExpression);
|
||||
}
|
||||
}
|
||||
|
||||
// no$gba print functions, uncomment to use
|
||||
/*
|
||||
void NoCashGBAPrint(const char *pBuf)
|
||||
{
|
||||
*(volatile u32*)NOCASHGBAPRINTADDR2 = (u32)pBuf;
|
||||
}
|
||||
|
||||
void NoCashGBAPrintf(const char *pBuf, ...)
|
||||
{
|
||||
char bufPrint[0x100];
|
||||
va_list vArgv;
|
||||
va_start(vArgv, pBuf);
|
||||
vsprintf(bufPrint, pBuf, vArgv);
|
||||
va_end(vArgv);
|
||||
NoCashGBAPrint(bufPrint);
|
||||
}
|
||||
*/
|
||||
|
||||
#endif
|
||||
+17
-17
@@ -29,10 +29,10 @@ static u8 sub_818E258(const u8 *);
|
||||
|
||||
extern const u8 gText_Lady2[];
|
||||
|
||||
static const u16 gUnknown_0860B074[] = {
|
||||
static const u16 sUnknown_0860B074[] = {
|
||||
0x62, 0xcb, 0xdc, 0xcc, 0xd1
|
||||
};
|
||||
static const u16 gUnknown_0860B07E[] = {
|
||||
static const u16 sUnknown_0860B07E[] = {
|
||||
0x1a, 0x14, 0x0a
|
||||
};
|
||||
|
||||
@@ -119,11 +119,11 @@ static const u16 *const gUnknown_0860B1A4[] = {
|
||||
Unknown_0860B192
|
||||
};
|
||||
|
||||
static const u16 gUnknown_0860B1E4[] = {
|
||||
static const u16 sUnknown_0860B1E4[] = {
|
||||
0x0210, 0x0400, 0x0212, 0x1a26, 0x0208, 0x045d, 0x040a, 0x0411, 0x0464, 0x020e, 0x1a25, 0x181b, 0x1a24, 0x0420, 0x0410, 0x0400
|
||||
};
|
||||
|
||||
static const u16 gUnknown_0860B204[] = {
|
||||
static const u16 sUnknown_0860B204[] = {
|
||||
0x007b, 0x007f, 0x0081, 0x0023, 0x0023, 0x0023, 0x00a5, 0x00a7, 0x00a6, 0x000b, 0x012f, 0x006b, 0x006d, 0x0044, 0x0044, 0x000c
|
||||
};
|
||||
|
||||
@@ -176,7 +176,7 @@ static const u16 *const gUnknown_0860B2EC[] = {
|
||||
Unknown_0860B2D6
|
||||
};
|
||||
|
||||
static const u16 gUnknown_0860B304[] = {
|
||||
static const u16 sUnknown_0860B304[] = {
|
||||
0x0b, 0x6e, 0x40, 0x6f, 0x44, 0x47
|
||||
};
|
||||
|
||||
@@ -218,7 +218,7 @@ static const u8 *const gUnknown_0860B338[] = {
|
||||
gUnknown_085EADE7
|
||||
};
|
||||
|
||||
static const u16 gUnknown_0860B34C[] = {
|
||||
static const u16 sUnknown_0860B34C[] = {
|
||||
0x0120, 0x013b, 0x011e, 0x013d, 0x0019
|
||||
};
|
||||
|
||||
@@ -237,11 +237,11 @@ void sub_818D9C0(void)
|
||||
{
|
||||
LilycoveLady *lilycoveLady;
|
||||
|
||||
VarSet(VAR_0x4010, gUnknown_0860B07E[GetLilycoveLadyId()]);
|
||||
VarSet(VAR_0x4010, sUnknown_0860B07E[GetLilycoveLadyId()]);
|
||||
if (GetLilycoveLadyId() == LILYCOVE_LADY_CONTEST)
|
||||
{
|
||||
lilycoveLady = &gSaveBlock1Ptr->lilycoveLady;
|
||||
VarSet(VAR_0x4011, gUnknown_0860B074[lilycoveLady->contest.category]);
|
||||
VarSet(VAR_0x4011, sUnknown_0860B074[lilycoveLady->contest.category]);
|
||||
gSpecialVar_Result = TRUE;
|
||||
}
|
||||
else
|
||||
@@ -481,7 +481,7 @@ u16 sub_818DEA0(void)
|
||||
u16 itemId;
|
||||
|
||||
gUnknown_0203CD64 = &gSaveBlock1Ptr->lilycoveLady.favour;
|
||||
itemId = gUnknown_0860B304[gUnknown_0203CD64->unk_00c];
|
||||
itemId = sUnknown_0860B304[gUnknown_0203CD64->unk_00c];
|
||||
sub_818DE88(itemId);
|
||||
gUnknown_0203CD64->phase = 2;
|
||||
return itemId;
|
||||
@@ -508,8 +508,8 @@ static void sub_818DF00(void)
|
||||
{
|
||||
gUnknown_0203CD68->unk_002[i] = gUnknown_0860B1A4[v0][i];
|
||||
}
|
||||
gUnknown_0203CD68->unk_014 = gUnknown_0860B1E4[v0];
|
||||
gUnknown_0203CD68->itemId = gUnknown_0860B204[v0];
|
||||
gUnknown_0203CD68->unk_014 = sUnknown_0860B1E4[v0];
|
||||
gUnknown_0203CD68->itemId = sUnknown_0860B204[v0];
|
||||
gUnknown_0203CD68->unk_02b = v0;
|
||||
gUnknown_0203CD68->playerName[0] = EOS;
|
||||
}
|
||||
@@ -581,13 +581,13 @@ u8 sub_818E06C(void)
|
||||
{
|
||||
i = 0;
|
||||
}
|
||||
} while (sub_811F8D8(gUnknown_0860B1E4[i]) == 0);
|
||||
} while (sub_811F8D8(sUnknown_0860B1E4[i]) == 0);
|
||||
for (j = 0; j < 9; j ++)
|
||||
{
|
||||
quiz->unk_002[j] = gUnknown_0860B1A4[i][j];
|
||||
}
|
||||
quiz->unk_014 = gUnknown_0860B1E4[i];
|
||||
quiz->itemId = gUnknown_0860B204[i];
|
||||
quiz->unk_014 = sUnknown_0860B1E4[i];
|
||||
quiz->itemId = sUnknown_0860B204[i];
|
||||
quiz->unk_02b = i;
|
||||
quiz->playerName[0] = EOS;
|
||||
}
|
||||
@@ -943,7 +943,7 @@ static void sub_818E6B0(u8 sheen)
|
||||
}
|
||||
}
|
||||
|
||||
bool8 sub_818E704(struct Pokeblock *pokeblock)
|
||||
bool8 GivePokeblockToContestLady(struct Pokeblock *pokeblock)
|
||||
{
|
||||
u8 sheen;
|
||||
bool8 response;
|
||||
@@ -1079,7 +1079,7 @@ void sub_818E914(void)
|
||||
|
||||
void sub_818E92C(void)
|
||||
{
|
||||
sub_81357FC(3, c2_exit_to_overworld_2_switch);
|
||||
OpenPokeblockCase(3, c2_exit_to_overworld_2_switch);
|
||||
}
|
||||
|
||||
void sub_818E940(void)
|
||||
@@ -1091,7 +1091,7 @@ void sub_818E940(void)
|
||||
void sub_818E960(void)
|
||||
{
|
||||
gUnknown_0203CD6C = &gSaveBlock1Ptr->lilycoveLady.contest;
|
||||
gSpecialVar_0x8005 = gUnknown_0860B34C[gUnknown_0203CD6C->category];
|
||||
gSpecialVar_0x8005 = sUnknown_0860B34C[gUnknown_0203CD6C->category];
|
||||
}
|
||||
|
||||
u8 sub_818E990(void)
|
||||
|
||||
+5
-5
@@ -22,7 +22,7 @@
|
||||
#include "new_menu_helpers.h"
|
||||
#include "text.h"
|
||||
#include "strings.h"
|
||||
#include "songs.h"
|
||||
#include "constants/songs.h"
|
||||
#include "sound.h"
|
||||
#include "trade.h"
|
||||
#include "battle.h"
|
||||
@@ -1112,7 +1112,7 @@ static void SetBlockReceivedFlag(u8 who)
|
||||
void ResetBlockReceivedFlags(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
|
||||
if (gWirelessCommType == TRUE)
|
||||
{
|
||||
for (i = 0; i < MAX_RFU_PLAYERS; i++)
|
||||
@@ -1628,9 +1628,9 @@ void CB2_LinkError(void)
|
||||
u8 *tilemapBuffer;
|
||||
|
||||
SetGpuReg(REG_OFFSET_DISPCNT, 0);
|
||||
m4aMPlayStop(&gMPlay_SE1);
|
||||
m4aMPlayStop(&gMPlay_SE2);
|
||||
m4aMPlayStop(&gMPlay_SE3);
|
||||
m4aMPlayStop(&gMPlayInfo_SE1);
|
||||
m4aMPlayStop(&gMPlayInfo_SE2);
|
||||
m4aMPlayStop(&gMPlayInfo_SE3);
|
||||
InitHeap(gHeap, HEAP_SIZE);
|
||||
ResetSpriteData();
|
||||
FreeAllSpritePalettes();
|
||||
|
||||
+24
-144
@@ -1,4 +1,4 @@
|
||||
#include "global.h"
|
||||
#include "global.h"
|
||||
#include "gba/flash_internal.h"
|
||||
#include "load_save.h"
|
||||
#include "main.h"
|
||||
@@ -28,7 +28,7 @@ struct LoadedSaveData
|
||||
/*0x00F0*/ struct ItemSlot pokeBalls[16];
|
||||
/*0x0130*/ struct ItemSlot TMsHMs[64];
|
||||
/*0x0230*/ struct ItemSlot berries[46];
|
||||
/*0x02E8*/ struct MailStruct mail[16];
|
||||
/*0x02E8*/ struct MailStruct mail[MAIL_COUNT];
|
||||
};
|
||||
|
||||
EWRAM_DATA struct SaveBlock2 gSaveblock2 = {0};
|
||||
@@ -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)
|
||||
{
|
||||
@@ -330,7 +210,7 @@ void LoadSerializedGame(void)
|
||||
void copy_bags_and_unk_data_from_save_blocks(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
|
||||
// load player items.
|
||||
for (i = 0; i < 30; i++)
|
||||
gLoadedSaveData.items[i] = gSaveBlock1Ptr->bagPocket_Items[i];
|
||||
|
||||
+4
-4
@@ -11,10 +11,10 @@ void *gMPlayJumpTable[36];
|
||||
struct CgbChannel gCgbChans[4];
|
||||
struct MusicPlayerTrack gPokemonCryTracks[MAX_POKEMON_CRIES * 2];
|
||||
struct PokemonCrySong gPokemonCrySong;
|
||||
struct MusicPlayerInfo gMPlay_BGM;
|
||||
struct MusicPlayerInfo gMPlay_SE1;
|
||||
struct MusicPlayerInfo gMPlay_SE2;
|
||||
struct MusicPlayerInfo gMPlay_SE3;
|
||||
struct MusicPlayerInfo gMPlayInfo_BGM;
|
||||
struct MusicPlayerInfo gMPlayInfo_SE1;
|
||||
struct MusicPlayerInfo gMPlayInfo_SE2;
|
||||
struct MusicPlayerInfo gMPlayInfo_SE3;
|
||||
u8 gMPlayMemAccArea[0x10];
|
||||
|
||||
u32 MidiKeyToFreq(struct WaveData *wav, u8 key, u8 fineAdjust)
|
||||
|
||||
+164
-162
@@ -1,4 +1,5 @@
|
||||
#include "global.h"
|
||||
#include "mail.h"
|
||||
#include "constants/items.h"
|
||||
#include "main.h"
|
||||
#include "overworld.h"
|
||||
@@ -18,8 +19,43 @@
|
||||
#include "constants/species.h"
|
||||
#include "malloc.h"
|
||||
#include "easy_chat.h"
|
||||
#include "mail_data.h"
|
||||
#include "mail.h"
|
||||
|
||||
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
|
||||
|
||||
@@ -51,9 +87,7 @@ struct MailGraphics
|
||||
u16 color12;
|
||||
};
|
||||
|
||||
// Static RAM declarations
|
||||
|
||||
static EWRAM_DATA struct
|
||||
struct MailRead
|
||||
{
|
||||
/*0x0000*/ u8 strbuf[8][64];
|
||||
/*0x0200*/ u8 playerName[12];
|
||||
@@ -72,22 +106,26 @@ static EWRAM_DATA struct
|
||||
/*0x0228*/ const struct MailLayout *layout;
|
||||
/*0x022c*/ u8 bg1TilemapBuffer[0x1000];
|
||||
/*0x122c*/ u8 bg2TilemapBuffer[0x1000];
|
||||
} *gUnknown_0203A134 = NULL;
|
||||
};
|
||||
|
||||
// Static RAM declarations
|
||||
|
||||
static EWRAM_DATA struct MailRead *sMailRead = NULL;
|
||||
|
||||
// Static ROM declarations
|
||||
|
||||
void sub_81219F0(void);
|
||||
void sub_8121A1C(void);
|
||||
void sub_8121B1C(void);
|
||||
void sub_8121C50(void);
|
||||
void sub_8121C64(void);
|
||||
void sub_8121C98(void);
|
||||
void sub_8121CC0(void);
|
||||
void sub_8121D00(void);
|
||||
static void CB2_InitMailRead(void);
|
||||
static void sub_8121A1C(void);
|
||||
static void sub_8121B1C(void);
|
||||
static void VBlankCB_MailRead(void);
|
||||
static void CB2_MailRead(void);
|
||||
static void CB2_WaitForPaletteExitOnKeyPress(void);
|
||||
static void CB2_ExitOnKeyPress(void);
|
||||
static void CB2_ExitMailReadFreeVars(void);
|
||||
|
||||
// .rodata
|
||||
|
||||
const struct BgTemplate gUnknown_0859F290[] = {
|
||||
static const struct BgTemplate sUnknown_0859F290[] = {
|
||||
{
|
||||
.bg = 0,
|
||||
.charBaseIndex = 2,
|
||||
@@ -106,7 +144,7 @@ const struct BgTemplate gUnknown_0859F290[] = {
|
||||
}
|
||||
};
|
||||
|
||||
const struct WindowTemplate gUnknown_0859F29C[] = {
|
||||
static const struct WindowTemplate sUnknown_0859F29C[] = {
|
||||
{
|
||||
.priority = 0,
|
||||
.tilemapLeft = 2,
|
||||
@@ -119,89 +157,52 @@ const struct WindowTemplate gUnknown_0859F29C[] = {
|
||||
DUMMY_WIN_TEMPLATE
|
||||
};
|
||||
|
||||
const u8 gUnknown_0859F2AC[] = {
|
||||
static const u8 sUnknown_0859F2AC[] = {
|
||||
0,
|
||||
10,
|
||||
11
|
||||
};
|
||||
|
||||
const u16 gUnknown_0859F2B0[][2] = {
|
||||
static const u16 sUnknown_0859F2B0[][2] = {
|
||||
{ 0x6ACD, 0x51A5 },
|
||||
{ 0x45FC, 0x38D4 }
|
||||
};
|
||||
|
||||
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[];
|
||||
|
||||
const struct MailGraphics gUnknown_0859F2B8[] = {
|
||||
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
|
||||
}
|
||||
};
|
||||
|
||||
const struct UnkMailStruct Unknown_0859F3A8[] = {
|
||||
static const struct UnkMailStruct Unknown_0859F3A8[] = {
|
||||
{ .numEasyChatWords = 3, .lineHeight = 16 },
|
||||
{ .numEasyChatWords = 3, .lineHeight = 16 },
|
||||
{ .numEasyChatWords = 3, .lineHeight = 16 }
|
||||
};
|
||||
|
||||
const struct MailLayout gUnknown_0859F3B4[] = {
|
||||
static const struct MailLayout sUnknown_0859F3B4[] = {
|
||||
{ 0x03, 0x00, 0x00, 0x02, 0x04, Unknown_0859F3A8 },
|
||||
{ 0x03, 0x00, 0x00, 0x02, 0x04, Unknown_0859F3A8 },
|
||||
{ 0x03, 0x00, 0x00, 0x02, 0x04, Unknown_0859F3A8 },
|
||||
@@ -216,7 +217,7 @@ const struct MailLayout gUnknown_0859F3B4[] = {
|
||||
{ 0x03, 0x00, 0x00, 0x02, 0x00, Unknown_0859F3A8 }
|
||||
};
|
||||
|
||||
const struct UnkMailStruct Unknown_0859F444[] = {
|
||||
static const struct UnkMailStruct Unknown_0859F444[] = {
|
||||
{ .numEasyChatWords = 2, .lineHeight = 16 },
|
||||
{ .numEasyChatWords = 2, .lineHeight = 16 },
|
||||
{ .numEasyChatWords = 2, .lineHeight = 16 },
|
||||
@@ -224,7 +225,7 @@ const struct UnkMailStruct Unknown_0859F444[] = {
|
||||
{ .numEasyChatWords = 1, .lineHeight = 16 }
|
||||
};
|
||||
|
||||
const struct MailLayout gUnknown_0859F458[] = {
|
||||
static const struct MailLayout sUnknown_0859F458[] = {
|
||||
{ 0x05, 0x07, 0x58, 0x0b, 0x1e, Unknown_0859F444 },
|
||||
{ 0x05, 0x0a, 0x60, 0x09, 0x1e, Unknown_0859F444 },
|
||||
{ 0x05, 0x0c, 0x68, 0x05, 0x1e, Unknown_0859F444 },
|
||||
@@ -241,23 +242,23 @@ const struct MailLayout gUnknown_0859F458[] = {
|
||||
|
||||
// What the heck are these meant to be? Call them u16 for now.
|
||||
|
||||
const u16 Unknown_0859F4E8[] = {
|
||||
static const u16 Unknown_0859F4E8[] = {
|
||||
0x00, 0x4000, 0x00, 0x00
|
||||
};
|
||||
|
||||
const u16 Unknown_0859F4F0[] = {
|
||||
static const u16 Unknown_0859F4F0[] = {
|
||||
0x00, 0x00, -1, 0x00
|
||||
};
|
||||
|
||||
const u16 Unknown_0859F4F8[] = {
|
||||
static const u16 Unknown_0859F4F8[] = {
|
||||
0x04, 0x00, -1, 0x00
|
||||
};
|
||||
|
||||
const u16 Unknown_0859F500[] = {
|
||||
static const u16 Unknown_0859F500[] = {
|
||||
0x00, 0x40, -1, 0x00
|
||||
};
|
||||
|
||||
const u16 *const gUnknown_0859F508[] = {
|
||||
static const u16 *const sUnknown_0859F508[] = {
|
||||
Unknown_0859F4F0,
|
||||
Unknown_0859F4F8,
|
||||
Unknown_0859F500
|
||||
@@ -265,60 +266,62 @@ const u16 *const gUnknown_0859F508[] = {
|
||||
|
||||
// .text
|
||||
|
||||
void sub_8121478(struct MailStruct *mail, MainCallback callback, bool8 flag) {
|
||||
void ReadMail(struct MailStruct *mail, void (*callback)(void), bool8 flag)
|
||||
{
|
||||
u16 buffer[2];
|
||||
u16 species;
|
||||
|
||||
gUnknown_0203A134 = calloc(1, sizeof(*gUnknown_0203A134));
|
||||
gUnknown_0203A134->language = LANGUAGE_ENGLISH;
|
||||
gUnknown_0203A134->playerIsSender = TRUE;
|
||||
gUnknown_0203A134->parserSingle = CopyEasyChatWord;
|
||||
gUnknown_0203A134->parserMultiple = ConvertEasyChatWordsToString;
|
||||
if (mail->itemId >= ITEM_ORANGE_MAIL && mail->itemId <= ITEM_RETRO_MAIL) {
|
||||
gUnknown_0203A134->mailType = mail->itemId - ITEM_ORANGE_MAIL;
|
||||
sMailRead = calloc(1, sizeof(*sMailRead));
|
||||
sMailRead->language = LANGUAGE_ENGLISH;
|
||||
sMailRead->playerIsSender = TRUE;
|
||||
sMailRead->parserSingle = CopyEasyChatWord;
|
||||
sMailRead->parserMultiple = ConvertEasyChatWordsToString;
|
||||
if (IS_ITEM_MAIL(mail->itemId))
|
||||
{
|
||||
sMailRead->mailType = mail->itemId - ITEM_ORANGE_MAIL;
|
||||
}
|
||||
else
|
||||
{
|
||||
gUnknown_0203A134->mailType = 0;
|
||||
sMailRead->mailType = 0;
|
||||
flag = FALSE;
|
||||
}
|
||||
switch (gUnknown_0203A134->playerIsSender)
|
||||
switch (sMailRead->playerIsSender)
|
||||
{
|
||||
case FALSE:
|
||||
default:
|
||||
gUnknown_0203A134->layout = &gUnknown_0859F3B4[gUnknown_0203A134->mailType];
|
||||
sMailRead->layout = &sUnknown_0859F3B4[sMailRead->mailType];
|
||||
break;
|
||||
case TRUE:
|
||||
gUnknown_0203A134->layout = &gUnknown_0859F458[gUnknown_0203A134->mailType];
|
||||
sMailRead->layout = &sUnknown_0859F458[sMailRead->mailType];
|
||||
break;
|
||||
}
|
||||
species = sub_80D45E8(mail->species, buffer);
|
||||
species = MailSpeciesToSpecies(mail->species, buffer);
|
||||
if (species >= SPECIES_BULBASAUR && species < NUM_SPECIES)
|
||||
{
|
||||
switch (gUnknown_0203A134->mailType)
|
||||
switch (sMailRead->mailType)
|
||||
{
|
||||
default:
|
||||
gUnknown_0203A134->animsActive = 0;
|
||||
sMailRead->animsActive = 0;
|
||||
break;
|
||||
case ITEM_BEAD_MAIL - ITEM_ORANGE_MAIL:
|
||||
gUnknown_0203A134->animsActive = 1;
|
||||
sMailRead->animsActive = 1;
|
||||
break;
|
||||
case ITEM_DREAM_MAIL - ITEM_ORANGE_MAIL:
|
||||
gUnknown_0203A134->animsActive = 2;
|
||||
sMailRead->animsActive = 2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
gUnknown_0203A134->animsActive = 0;
|
||||
sMailRead->animsActive = 0;
|
||||
}
|
||||
gUnknown_0203A134->mail = mail;
|
||||
gUnknown_0203A134->callback = callback;
|
||||
gUnknown_0203A134->flag = flag;
|
||||
SetMainCallback2(sub_81219F0);
|
||||
sMailRead->mail = mail;
|
||||
sMailRead->callback = callback;
|
||||
sMailRead->flag = flag;
|
||||
SetMainCallback2(CB2_InitMailRead);
|
||||
}
|
||||
|
||||
bool8 sub_81215EC(void)
|
||||
static bool8 MailReadBuildGraphics(void)
|
||||
{
|
||||
u16 icon;
|
||||
|
||||
@@ -352,21 +355,21 @@ bool8 sub_81215EC(void)
|
||||
SetGpuReg(REG_OFFSET_BG2HOFS, 0x0000);
|
||||
SetGpuReg(REG_OFFSET_BG3HOFS, 0x0000);
|
||||
SetGpuReg(REG_OFFSET_BG3VOFS, 0x0000);
|
||||
SetGpuReg(REG_OFFSET_BLDCNT, 0x0000);
|
||||
SetGpuReg(REG_OFFSET_BLDCNT, 0x0000);
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, 0x0000);
|
||||
break;
|
||||
case 6:
|
||||
ResetBgsAndClearDma3BusyFlags(0);
|
||||
InitBgsFromTemplates(0, gUnknown_0859F290, 3);
|
||||
SetBgTilemapBuffer(1, gUnknown_0203A134->bg1TilemapBuffer);
|
||||
SetBgTilemapBuffer(2, gUnknown_0203A134->bg2TilemapBuffer);
|
||||
InitBgsFromTemplates(0, sUnknown_0859F290, 3);
|
||||
SetBgTilemapBuffer(1, sMailRead->bg1TilemapBuffer);
|
||||
SetBgTilemapBuffer(2, sMailRead->bg2TilemapBuffer);
|
||||
break;
|
||||
case 7:
|
||||
InitWindows(gUnknown_0859F29C);
|
||||
InitWindows(sUnknown_0859F29C);
|
||||
DeactivateAllTextPrinters();
|
||||
break;
|
||||
case 8:
|
||||
decompress_and_copy_tile_data_to_vram(1, gUnknown_0859F2B8[gUnknown_0203A134->mailType].tiles, 0, 0, 0);
|
||||
decompress_and_copy_tile_data_to_vram(1, sUnknown_0859F2B8[sMailRead->mailType].tiles, 0, 0, 0);
|
||||
break;
|
||||
case 9:
|
||||
if (free_temp_tile_data_buffers_if_possible())
|
||||
@@ -377,7 +380,7 @@ bool8 sub_81215EC(void)
|
||||
case 10:
|
||||
FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20);
|
||||
FillBgTilemapBufferRect_Palette0(2, 1, 0, 0, 30, 20);
|
||||
CopyToBgTilemapBuffer(1, gUnknown_0859F2B8[gUnknown_0203A134->mailType].tileMap, 0, 0);
|
||||
CopyToBgTilemapBuffer(1, sUnknown_0859F2B8[sMailRead->mailType].tileMap, 0, 0);
|
||||
break;
|
||||
case 11:
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
@@ -386,24 +389,24 @@ bool8 sub_81215EC(void)
|
||||
break;
|
||||
case 12:
|
||||
LoadPalette(GetOverworldTextboxPalettePtr(), 240, 32);
|
||||
gPlttBufferUnfaded[250] = gUnknown_0859F2B8[gUnknown_0203A134->mailType].color10;
|
||||
gPlttBufferFaded[250] = gUnknown_0859F2B8[gUnknown_0203A134->mailType].color10;
|
||||
gPlttBufferUnfaded[251] = gUnknown_0859F2B8[gUnknown_0203A134->mailType].color12;
|
||||
gPlttBufferFaded[251] = gUnknown_0859F2B8[gUnknown_0203A134->mailType].color12;
|
||||
LoadPalette(gUnknown_0859F2B8[gUnknown_0203A134->mailType].palette, 0, 32);
|
||||
gPlttBufferUnfaded[10] = gUnknown_0859F2B0[gSaveBlock2Ptr->playerGender][0];
|
||||
gPlttBufferFaded[10] = gUnknown_0859F2B0[gSaveBlock2Ptr->playerGender][0];
|
||||
gPlttBufferUnfaded[11] = gUnknown_0859F2B0[gSaveBlock2Ptr->playerGender][1];
|
||||
gPlttBufferFaded[11] = gUnknown_0859F2B0[gSaveBlock2Ptr->playerGender][1];
|
||||
gPlttBufferUnfaded[250] = sUnknown_0859F2B8[sMailRead->mailType].color10;
|
||||
gPlttBufferFaded[250] = sUnknown_0859F2B8[sMailRead->mailType].color10;
|
||||
gPlttBufferUnfaded[251] = sUnknown_0859F2B8[sMailRead->mailType].color12;
|
||||
gPlttBufferFaded[251] = sUnknown_0859F2B8[sMailRead->mailType].color12;
|
||||
LoadPalette(sUnknown_0859F2B8[sMailRead->mailType].palette, 0, 32);
|
||||
gPlttBufferUnfaded[10] = sUnknown_0859F2B0[gSaveBlock2Ptr->playerGender][0];
|
||||
gPlttBufferFaded[10] = sUnknown_0859F2B0[gSaveBlock2Ptr->playerGender][0];
|
||||
gPlttBufferUnfaded[11] = sUnknown_0859F2B0[gSaveBlock2Ptr->playerGender][1];
|
||||
gPlttBufferFaded[11] = sUnknown_0859F2B0[gSaveBlock2Ptr->playerGender][1];
|
||||
break;
|
||||
case 13:
|
||||
if (gUnknown_0203A134->flag)
|
||||
if (sMailRead->flag)
|
||||
{
|
||||
sub_8121A1C();
|
||||
}
|
||||
break;
|
||||
case 14:
|
||||
if (gUnknown_0203A134->flag)
|
||||
if (sMailRead->flag)
|
||||
{
|
||||
sub_8121B1C();
|
||||
RunTextPrinters();
|
||||
@@ -416,20 +419,20 @@ bool8 sub_81215EC(void)
|
||||
}
|
||||
break;
|
||||
case 16:
|
||||
SetVBlankCallback(sub_8121C50);
|
||||
SetVBlankCallback(VBlankCB_MailRead);
|
||||
gPaletteFade.bufferTransferDisabled = TRUE;
|
||||
break;
|
||||
case 17:
|
||||
icon = sub_80D2E84(gUnknown_0203A134->mail->species);
|
||||
switch (gUnknown_0203A134->animsActive)
|
||||
icon = sub_80D2E84(sMailRead->mail->species);
|
||||
switch (sMailRead->animsActive)
|
||||
{
|
||||
case 1:
|
||||
sub_80D2F68(icon);
|
||||
gUnknown_0203A134->monIconSprite = sub_80D2D78(icon, SpriteCallbackDummy, 0x60, 0x80, 0, 0);
|
||||
sMailRead->monIconSprite = sub_80D2D78(icon, SpriteCallbackDummy, 0x60, 0x80, 0, 0);
|
||||
break;
|
||||
case 2:
|
||||
sub_80D2F68(icon);
|
||||
gUnknown_0203A134->monIconSprite = sub_80D2D78(icon, SpriteCallbackDummy, 0x28, 0x80, 0, 0);
|
||||
sMailRead->monIconSprite = sub_80D2D78(icon, SpriteCallbackDummy, 0x28, 0x80, 0, 0);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
@@ -440,53 +443,53 @@ bool8 sub_81215EC(void)
|
||||
ShowBg(2);
|
||||
BeginNormalPaletteFade(-1, 0, 16, 0, 0);
|
||||
gPaletteFade.bufferTransferDisabled = FALSE;
|
||||
gUnknown_0203A134->callback2 = sub_8121C98;
|
||||
sMailRead->callback2 = CB2_WaitForPaletteExitOnKeyPress;
|
||||
return TRUE;
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
gMain.state ++;
|
||||
gMain.state++;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void sub_81219F0(void)
|
||||
static void CB2_InitMailRead(void)
|
||||
{
|
||||
do
|
||||
{
|
||||
if (sub_81215EC() == TRUE)
|
||||
if (MailReadBuildGraphics() == TRUE)
|
||||
{
|
||||
SetMainCallback2(sub_8121C64);
|
||||
SetMainCallback2(CB2_MailRead);
|
||||
break;
|
||||
}
|
||||
} while (sub_81221AC() != TRUE);
|
||||
}
|
||||
|
||||
void sub_8121A1C(void)
|
||||
static void sub_8121A1C(void)
|
||||
{
|
||||
u16 i;
|
||||
u8 total;
|
||||
u8 *ptr;
|
||||
|
||||
total = 0;
|
||||
for (i = 0; i < gUnknown_0203A134->layout->numSubStructs; i ++)
|
||||
for (i = 0; i < sMailRead->layout->numSubStructs; i ++)
|
||||
{
|
||||
ConvertEasyChatWordsToString(gUnknown_0203A134->strbuf[i], &gUnknown_0203A134->mail->words[total], gUnknown_0203A134->layout->var8[i].numEasyChatWords, 1);
|
||||
total += gUnknown_0203A134->layout->var8[i].numEasyChatWords;
|
||||
ConvertEasyChatWordsToString(sMailRead->strbuf[i], &sMailRead->mail->words[total], sMailRead->layout->var8[i].numEasyChatWords, 1);
|
||||
total += sMailRead->layout->var8[i].numEasyChatWords;
|
||||
}
|
||||
ptr = StringCopy(gUnknown_0203A134->playerName, gUnknown_0203A134->mail->playerName);
|
||||
if (!gUnknown_0203A134->playerIsSender)
|
||||
ptr = StringCopy(sMailRead->playerName, sMailRead->mail->playerName);
|
||||
if (!sMailRead->playerIsSender)
|
||||
{
|
||||
StringCopy(ptr, gText_FromSpace);
|
||||
gUnknown_0203A134->signatureWidth = gUnknown_0203A134->layout->signatureWidth - (StringLength(gUnknown_0203A134->playerName) * 8 - 0x60);
|
||||
sMailRead->signatureWidth = sMailRead->layout->signatureWidth - (StringLength(sMailRead->playerName) * 8 - 0x60);
|
||||
}
|
||||
else
|
||||
{
|
||||
sub_81DB52C(gUnknown_0203A134->playerName);
|
||||
gUnknown_0203A134->signatureWidth = gUnknown_0203A134->layout->signatureWidth;
|
||||
sub_81DB52C(sMailRead->playerName);
|
||||
sMailRead->signatureWidth = sMailRead->layout->signatureWidth;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8121B1C(void)
|
||||
static void sub_8121B1C(void)
|
||||
{
|
||||
u16 i;
|
||||
u8 strbuf[0x20];
|
||||
@@ -500,77 +503,76 @@ void sub_8121B1C(void)
|
||||
PutWindowTilemap(1);
|
||||
FillWindowPixelBuffer(0, 0);
|
||||
FillWindowPixelBuffer(1, 0);
|
||||
for (i = 0; i < gUnknown_0203A134->layout->numSubStructs; i ++)
|
||||
for (i = 0; i < sMailRead->layout->numSubStructs; i ++)
|
||||
{
|
||||
if (gUnknown_0203A134->strbuf[i][0] == EOS || gUnknown_0203A134->strbuf[i][0] == CHAR_SPACE)
|
||||
if (sMailRead->strbuf[i][0] == EOS || sMailRead->strbuf[i][0] == CHAR_SPACE)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
box_print(0, 1, gUnknown_0203A134->layout->var8[i].xOffset + gUnknown_0203A134->layout->wordsYPos, y + gUnknown_0203A134->layout->wordsXPos, gUnknown_0859F2AC, 0, gUnknown_0203A134->strbuf[i]);
|
||||
y += gUnknown_0203A134->layout->var8[i].lineHeight;
|
||||
box_print(0, 1, sMailRead->layout->var8[i].xOffset + sMailRead->layout->wordsYPos, y + sMailRead->layout->wordsXPos, sUnknown_0859F2AC, 0, sMailRead->strbuf[i]);
|
||||
y += sMailRead->layout->var8[i].lineHeight;
|
||||
}
|
||||
bufptr = StringCopy(strbuf, gText_FromSpace);
|
||||
StringCopy(bufptr, gUnknown_0203A134->playerName);
|
||||
box_x = GetStringCenterAlignXOffset(1, strbuf, gUnknown_0203A134->signatureWidth) + 0x68;
|
||||
box_y = gUnknown_0203A134->layout->signatureYPos + 0x58;
|
||||
box_print(0, 1, box_x, box_y, gUnknown_0859F2AC, 0, strbuf);
|
||||
StringCopy(bufptr, sMailRead->playerName);
|
||||
box_x = GetStringCenterAlignXOffset(1, strbuf, sMailRead->signatureWidth) + 0x68;
|
||||
box_y = sMailRead->layout->signatureYPos + 0x58;
|
||||
box_print(0, 1, box_x, box_y, sUnknown_0859F2AC, 0, strbuf);
|
||||
CopyWindowToVram(0, 3);
|
||||
CopyWindowToVram(1, 3);
|
||||
}
|
||||
|
||||
void sub_8121C50(void)
|
||||
static void VBlankCB_MailRead(void)
|
||||
{
|
||||
LoadOam();
|
||||
ProcessSpriteCopyRequests();
|
||||
TransferPlttBuffer();
|
||||
}
|
||||
|
||||
void sub_8121C64(void)
|
||||
static void CB2_MailRead(void)
|
||||
{
|
||||
if (gUnknown_0203A134->animsActive != 0)
|
||||
if (sMailRead->animsActive != 0)
|
||||
{
|
||||
AnimateSprites();
|
||||
BuildOamBuffer();
|
||||
}
|
||||
gUnknown_0203A134->callback2();
|
||||
sMailRead->callback2();
|
||||
}
|
||||
|
||||
void sub_8121C98(void)
|
||||
static void CB2_WaitForPaletteExitOnKeyPress(void)
|
||||
{
|
||||
if (!UpdatePaletteFade())
|
||||
{
|
||||
gUnknown_0203A134->callback2 = sub_8121CC0;
|
||||
sMailRead->callback2 = CB2_ExitOnKeyPress;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8121CC0(void)
|
||||
static void CB2_ExitOnKeyPress(void)
|
||||
{
|
||||
if (gMain.newKeys & (A_BUTTON | B_BUTTON))
|
||||
{
|
||||
BeginNormalPaletteFade(-1, 0, 0, 16, 0);
|
||||
gUnknown_0203A134->callback2 = sub_8121D00;
|
||||
sMailRead->callback2 = CB2_ExitMailReadFreeVars;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8121D00(void)
|
||||
static void CB2_ExitMailReadFreeVars(void)
|
||||
{
|
||||
if (!UpdatePaletteFade())
|
||||
{
|
||||
SetMainCallback2(gUnknown_0203A134->callback);
|
||||
switch (gUnknown_0203A134->animsActive)
|
||||
SetMainCallback2(sMailRead->callback);
|
||||
switch (sMailRead->animsActive)
|
||||
{
|
||||
case 1:
|
||||
case 2:
|
||||
sub_80D2FF0(sub_80D2E84(gUnknown_0203A134->mail->species));
|
||||
sub_80D2EF8(&gSprites[gUnknown_0203A134->monIconSprite]);
|
||||
sub_80D2FF0(sub_80D2E84(sMailRead->mail->species));
|
||||
sub_80D2EF8(&gSprites[sMailRead->monIconSprite]);
|
||||
}
|
||||
memset(gUnknown_0203A134, 0, sizeof(*gUnknown_0203A134));
|
||||
memset(sMailRead, 0, sizeof(*sMailRead));
|
||||
ResetPaletteFade();
|
||||
UnsetBgTilemapBuffer(0);
|
||||
UnsetBgTilemapBuffer(1);
|
||||
ResetBgsAndClearDma3BusyFlags(0);
|
||||
FreeAllWindowBuffers();
|
||||
free(gUnknown_0203A134);
|
||||
gUnknown_0203A134 = NULL;
|
||||
FREE_AND_SET_NULL(sMailRead);
|
||||
}
|
||||
}
|
||||
|
||||
+203
@@ -0,0 +1,203 @@
|
||||
#include "global.h"
|
||||
#include "mail.h"
|
||||
#include "constants/items.h"
|
||||
#include "pokemon.h"
|
||||
#include "pokemon_icon.h"
|
||||
#include "constants/species.h"
|
||||
#include "text.h"
|
||||
#include "international_string_util.h"
|
||||
|
||||
void ClearMailData(void)
|
||||
{
|
||||
u8 i;
|
||||
|
||||
for (i = 0; i < MAIL_COUNT; i++)
|
||||
ClearMailStruct(&gSaveBlock1Ptr->mail[i]);
|
||||
}
|
||||
|
||||
void ClearMailStruct(struct MailStruct *mail)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < MAIL_WORDS_COUNT; i++)
|
||||
mail->words[i] = 0xFFFF;
|
||||
|
||||
for (i = 0; i < PLAYER_NAME_LENGTH; i++)
|
||||
mail->playerName[i] = EOS;
|
||||
|
||||
for (i = 0; i < 4; i++)
|
||||
mail->trainerId[i] = 0;
|
||||
|
||||
mail->species = SPECIES_BULBASAUR;
|
||||
mail->itemId = ITEM_NONE;
|
||||
}
|
||||
|
||||
bool8 MonHasMail(struct Pokemon *mon)
|
||||
{
|
||||
u16 heldItem = GetMonData(mon, MON_DATA_HELD_ITEM);
|
||||
if (ItemIsMail(heldItem) && GetMonData(mon, MON_DATA_MAIL) != 0xFF)
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
u8 GiveMailToMon(struct Pokemon *mon, u16 itemId)
|
||||
{
|
||||
u8 heldItem[2];
|
||||
u8 id, i;
|
||||
u16 species;
|
||||
u32 personality;
|
||||
|
||||
heldItem[0] = itemId;
|
||||
heldItem[1] = itemId >> 8;
|
||||
|
||||
for (id = 0; id < PARTY_SIZE; id++)
|
||||
{
|
||||
if (gSaveBlock1Ptr->mail[id].itemId == 0)
|
||||
{
|
||||
for (i = 0; i < MAIL_WORDS_COUNT; i++)
|
||||
gSaveBlock1Ptr->mail[id].words[i] = 0xFFFF;
|
||||
|
||||
for (i = 0; i < PLAYER_NAME_LENGTH - 1; i++)
|
||||
gSaveBlock1Ptr->mail[id].playerName[i] = gSaveBlock2Ptr->playerName[i];
|
||||
gSaveBlock1Ptr->mail[id].playerName[i] = EOS;
|
||||
PadNameString(gSaveBlock1Ptr->mail[id].playerName, CHAR_SPACE);
|
||||
|
||||
for (i = 0; i < 4; i++)
|
||||
gSaveBlock1Ptr->mail[id].trainerId[i] = gSaveBlock2Ptr->playerTrainerId[i];
|
||||
|
||||
species = GetBoxMonData(&mon->box, MON_DATA_SPECIES);
|
||||
personality = GetBoxMonData(&mon->box, MON_DATA_PERSONALITY);
|
||||
gSaveBlock1Ptr->mail[id].species = SpeciesToMailSpecies(species, personality);
|
||||
gSaveBlock1Ptr->mail[id].itemId = itemId;
|
||||
SetMonData(mon, MON_DATA_MAIL, &id);
|
||||
SetMonData(mon, MON_DATA_HELD_ITEM, heldItem);
|
||||
return id;
|
||||
}
|
||||
}
|
||||
|
||||
return 0xFF;
|
||||
}
|
||||
|
||||
u16 SpeciesToMailSpecies(u16 species, u32 personality)
|
||||
{
|
||||
if (species == SPECIES_UNOWN)
|
||||
{
|
||||
u32 species = GetUnownLetterByPersonality(personality) + 30000;
|
||||
return species;
|
||||
}
|
||||
|
||||
return species;
|
||||
}
|
||||
|
||||
u16 MailSpeciesToSpecies(u16 mailSpecies, u16 *buffer)
|
||||
{
|
||||
u16 result;
|
||||
|
||||
if (mailSpecies >= 30000 && mailSpecies < (30000 + UNOWN_FORM_COUNT))
|
||||
{
|
||||
result = SPECIES_UNOWN;
|
||||
*buffer = mailSpecies - 30000;
|
||||
}
|
||||
else
|
||||
{
|
||||
result = mailSpecies;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
u8 GiveMailToMon2(struct Pokemon *mon, struct MailStruct *mail)
|
||||
{
|
||||
u8 heldItem[2];
|
||||
u16 itemId = mail->itemId;
|
||||
u8 mailId = GiveMailToMon(mon, itemId);
|
||||
|
||||
if (mailId == 0xFF)
|
||||
return 0xFF;
|
||||
|
||||
gSaveBlock1Ptr->mail[mailId] = *mail;
|
||||
|
||||
SetMonData(mon, MON_DATA_MAIL, &mailId);
|
||||
|
||||
heldItem[0] = itemId;
|
||||
heldItem[1] = itemId >> 8;
|
||||
|
||||
SetMonData(mon, MON_DATA_HELD_ITEM, heldItem);
|
||||
|
||||
return mailId;
|
||||
}
|
||||
|
||||
static bool32 DummyMailFunc(void)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void TakeMailFromMon(struct Pokemon *mon)
|
||||
{
|
||||
u8 heldItem[2];
|
||||
u8 mailId;
|
||||
|
||||
if (MonHasMail(mon))
|
||||
{
|
||||
mailId = GetMonData(mon, MON_DATA_MAIL);
|
||||
gSaveBlock1Ptr->mail[mailId].itemId = ITEM_NONE;
|
||||
mailId = 0xFF;
|
||||
heldItem[0] = ITEM_NONE;
|
||||
heldItem[1] = ITEM_NONE << 8;
|
||||
SetMonData(mon, MON_DATA_MAIL, &mailId);
|
||||
SetMonData(mon, MON_DATA_HELD_ITEM, heldItem);
|
||||
}
|
||||
}
|
||||
|
||||
void ClearMailItemId(u8 mailId)
|
||||
{
|
||||
gSaveBlock1Ptr->mail[mailId].itemId = ITEM_NONE;
|
||||
}
|
||||
|
||||
u8 TakeMailFromMon2(struct Pokemon *mon)
|
||||
{
|
||||
u8 i;
|
||||
u8 newHeldItem[2];
|
||||
u8 newMailId;
|
||||
|
||||
newHeldItem[0] = ITEM_NONE;
|
||||
newHeldItem[1] = ITEM_NONE << 8;
|
||||
newMailId = 0xFF;
|
||||
|
||||
for (i = PARTY_SIZE; i < MAIL_COUNT; i++)
|
||||
{
|
||||
if (gSaveBlock1Ptr->mail[i].itemId == ITEM_NONE)
|
||||
{
|
||||
memcpy(&gSaveBlock1Ptr->mail[i], &gSaveBlock1Ptr->mail[GetMonData(mon, MON_DATA_MAIL)], sizeof(struct MailStruct));
|
||||
gSaveBlock1Ptr->mail[GetMonData(mon, MON_DATA_MAIL)].itemId = ITEM_NONE;
|
||||
SetMonData(mon, MON_DATA_MAIL, &newMailId);
|
||||
SetMonData(mon, MON_DATA_HELD_ITEM, newHeldItem);
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
||||
return 0xFF;
|
||||
}
|
||||
|
||||
bool8 ItemIsMail(u16 itemId)
|
||||
{
|
||||
switch (itemId)
|
||||
{
|
||||
case ITEM_ORANGE_MAIL:
|
||||
case ITEM_HARBOR_MAIL:
|
||||
case ITEM_GLITTER_MAIL:
|
||||
case ITEM_MECH_MAIL:
|
||||
case ITEM_WOOD_MAIL:
|
||||
case ITEM_WAVE_MAIL:
|
||||
case ITEM_BEAD_MAIL:
|
||||
case ITEM_SHADOW_MAIL:
|
||||
case ITEM_TROPIC_MAIL:
|
||||
case ITEM_DREAM_MAIL:
|
||||
case ITEM_FAB_MAIL:
|
||||
case ITEM_RETRO_MAIL:
|
||||
return TRUE;
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
+1
-2
@@ -102,7 +102,7 @@ void AgbMain()
|
||||
ClearDma3Requests();
|
||||
ResetBgs();
|
||||
SetDefaultFontsPointer();
|
||||
InitHeap(gHeap, 0x1C000);
|
||||
InitHeap(gHeap, HEAP_SIZE);
|
||||
|
||||
gSoftResetDisabled = FALSE;
|
||||
|
||||
@@ -312,7 +312,6 @@ void SetSerialCallback(IntrCallback callback)
|
||||
}
|
||||
|
||||
extern void CopyBufferedValuesToGpuRegs(void);
|
||||
extern void ProcessDma3Requests(void);
|
||||
|
||||
static void VBlankIntr(void)
|
||||
{
|
||||
|
||||
+1
-2
@@ -33,7 +33,6 @@ extern void Overworld_SetWarpDestination(s8 mapBank, s8 mapNo, s8 warpNo, s8 xPo
|
||||
extern void warp_in(void);
|
||||
extern void sub_80BB358(void);
|
||||
extern void ResetBagScrollPositions(void);
|
||||
extern void sub_813624C(void); // clears something pokeblock related
|
||||
extern void ResetPokedex(void);
|
||||
extern void sub_8084400(void);
|
||||
extern void ClearMailData(void);
|
||||
@@ -148,7 +147,7 @@ void sub_808447C(void)
|
||||
ZeroPlayerPartyMons();
|
||||
ZeroEnemyPartyMons();
|
||||
ResetBagScrollPositions();
|
||||
sub_813624C();
|
||||
ResetPokeblockScrollPositions();
|
||||
}
|
||||
|
||||
void NewGameInitData(void)
|
||||
|
||||
+56
-58
@@ -65,7 +65,8 @@ static const struct PaletteStructTemplate gDummyPaletteStructTemplate = {
|
||||
.uid = 0xFFFF,
|
||||
.pst_field_B_5 = 1
|
||||
};
|
||||
static const u8 gUnknown_0852489C[] = {
|
||||
|
||||
static const u8 sRoundedDownGrayscaleMap[] = {
|
||||
0, 0, 0, 0, 0,
|
||||
5, 5, 5, 5, 5,
|
||||
11, 11, 11, 11, 11,
|
||||
@@ -620,7 +621,7 @@ static u8 UpdateFastPaletteFade(void)
|
||||
gPlttBufferFaded[i] = r | (g << 5) | (b << 10);
|
||||
}
|
||||
break;
|
||||
case FAST_FADE_OUT_TO_WHTIE:
|
||||
case FAST_FADE_OUT_TO_WHITE:
|
||||
for (i = paletteOffsetStart; i < paletteOffsetEnd; i++)
|
||||
{
|
||||
struct PlttData *data = (struct PlttData *)&gPlttBufferFaded[i];
|
||||
@@ -701,7 +702,7 @@ static u8 UpdateFastPaletteFade(void)
|
||||
case FAST_FADE_IN_FROM_BLACK:
|
||||
CpuCopy32(gPlttBufferUnfaded, gPlttBufferFaded, PLTT_SIZE);
|
||||
break;
|
||||
case FAST_FADE_OUT_TO_WHTIE:
|
||||
case FAST_FADE_OUT_TO_WHITE:
|
||||
CpuFill32(0xFFFFFFFF, gPlttBufferFaded, PLTT_SIZE);
|
||||
break;
|
||||
case FAST_FADE_OUT_TO_BLACK:
|
||||
@@ -838,10 +839,10 @@ void BlendPalettesUnfaded(u32 selectedPalettes, u8 coeff, u16 color)
|
||||
|
||||
void TintPalette_GrayScale(u16 *palette, u16 count)
|
||||
{
|
||||
s32 r;
|
||||
s32 g;
|
||||
s32 b;
|
||||
s32 gray;
|
||||
int r;
|
||||
int g;
|
||||
int b;
|
||||
u32 gray;
|
||||
|
||||
int i;
|
||||
for (i = 0; i < count; i++)
|
||||
@@ -849,24 +850,23 @@ void TintPalette_GrayScale(u16 *palette, u16 count)
|
||||
r = *palette & 0x1F;
|
||||
g = (*palette >> 5) & 0x1F;
|
||||
b = (*palette >> 10) & 0x1F;
|
||||
|
||||
r *= 0x4C;
|
||||
r += g * 0x97;
|
||||
r += b * 0x1D;
|
||||
|
||||
|
||||
r = r * Q_8_8(0.2969);
|
||||
r += g * Q_8_8(0.5899);
|
||||
r += b * Q_8_8(0.1133);
|
||||
|
||||
gray = r >> 8;
|
||||
|
||||
|
||||
*palette++ = gray << 10 | gray << 5 | gray;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
void TintPalette_GrayScale2(u16 *palette, u16 count)
|
||||
{
|
||||
s32 r;
|
||||
s32 g;
|
||||
s32 b;
|
||||
s32 gray;
|
||||
int r;
|
||||
int g;
|
||||
int b;
|
||||
u32 gray;
|
||||
|
||||
int i;
|
||||
for (i = 0; i < count; i++)
|
||||
@@ -874,62 +874,60 @@ void TintPalette_GrayScale2(u16 *palette, u16 count)
|
||||
r = *palette & 0x1F;
|
||||
g = (*palette >> 5) & 0x1F;
|
||||
b = (*palette >> 10) & 0x1F;
|
||||
|
||||
r *= 0x4C;
|
||||
r += g * 0x97;
|
||||
r += b * 0x1D;
|
||||
|
||||
|
||||
r = r * Q_8_8(0.2969);
|
||||
r += g * Q_8_8(0.5899);
|
||||
r += b * Q_8_8(0.1133);
|
||||
|
||||
gray = r >> 8;
|
||||
|
||||
if ((u32)gray > 0x1F)
|
||||
|
||||
if (gray > 0x1F)
|
||||
gray = 0x1F;
|
||||
|
||||
gray = gUnknown_0852489C[gray];
|
||||
|
||||
|
||||
gray = sRoundedDownGrayscaleMap[gray];
|
||||
|
||||
*palette++ = gray << 10 | gray << 5 | gray;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
#ifdef NONMATCHING
|
||||
void TintPalette_SepiaTone(u16 *palette, u16 count)
|
||||
{
|
||||
s32 r;
|
||||
s32 g;
|
||||
s32 b;
|
||||
int red;
|
||||
int green;
|
||||
int blue;
|
||||
u32 gray;
|
||||
u32 sepia;
|
||||
s8 r2;
|
||||
s8 g2;
|
||||
s8 b2;
|
||||
|
||||
|
||||
int i;
|
||||
for (i = 0; i < count; i++)
|
||||
{
|
||||
r = *palette & 0x1F;
|
||||
g = (*palette >> 5) & 0x1F;
|
||||
b = (*palette >> 10) & 0x1F;
|
||||
|
||||
|
||||
r *= 0x4C;
|
||||
r += g * 0x97;
|
||||
r += b * 0x1D;
|
||||
|
||||
|
||||
gray = (s32)(r >> 8);
|
||||
|
||||
|
||||
sepia = (gray * 0x133);
|
||||
|
||||
|
||||
r2 = (u16)sepia >> 8;
|
||||
|
||||
|
||||
g2 = gray;
|
||||
|
||||
|
||||
b2 = (gray * 15);
|
||||
|
||||
|
||||
if (r2 > 0x1F)
|
||||
r2 = 0x1F;
|
||||
|
||||
|
||||
*palette++ = b2 << 10 | g2 << 5 | r2;
|
||||
}
|
||||
return;
|
||||
}
|
||||
#else
|
||||
__attribute__((naked))
|
||||
@@ -995,7 +993,7 @@ _080A2BA2:\n\
|
||||
#endif // NONMATCHING
|
||||
|
||||
#ifdef NONMATCHING
|
||||
void sub_80A2BAC(u16 *palette, u16 count, u16 a3, u16 a4, u16 a5)
|
||||
void TintPalette_CustomTone(u16 *palette, u16 count, u16 a3, u16 a4, u16 a5)
|
||||
{
|
||||
s32 r;
|
||||
s32 g;
|
||||
@@ -1011,35 +1009,35 @@ void sub_80A2BAC(u16 *palette, u16 count, u16 a3, u16 a4, u16 a5)
|
||||
r = *palette & 0x1F;
|
||||
g = (*palette >> 5) & 0x1F;
|
||||
b = (*palette >> 10) & 0x1F;
|
||||
|
||||
|
||||
r *= 0x4C;
|
||||
r += g * 0x97;
|
||||
r += b * 0x1D;
|
||||
|
||||
|
||||
gray = r >> 8;
|
||||
|
||||
|
||||
r2 = (u16)(gray * a3) >> 8;
|
||||
|
||||
|
||||
g2 = (u16)(gray * a4) >> 8;
|
||||
|
||||
|
||||
b2 = (u16)(gray * a5) >> 8;
|
||||
|
||||
|
||||
if (r2 > 0x1F)
|
||||
r2 = 0x1F;
|
||||
|
||||
|
||||
if (g2 > 0x1F)
|
||||
g2 = 0x1F;
|
||||
|
||||
|
||||
if (b2 > 0x1F)
|
||||
b2 = 0x1F;
|
||||
|
||||
|
||||
*palette++ = b2 << 10 | g2 << 5 | r2;
|
||||
}
|
||||
return;
|
||||
}
|
||||
#else
|
||||
__attribute__((naked))
|
||||
void sub_80A2BAC(u16 *palette, u16 count, u16 a3, u16 a4, u16 a5)
|
||||
void TintPalette_CustomTone(u16 *palette, u16 count, u16 a3, u16 a4, u16 a5)
|
||||
{
|
||||
asm("push {r4-r7,lr}\n\
|
||||
mov r7, r9\n\
|
||||
@@ -1153,7 +1151,7 @@ void sub_80A2C44(u32 a1, s8 a2, u8 a3, u8 a4, u16 a5, u8 a6, u8 a7)
|
||||
gTasks[taskId].func(taskId);
|
||||
}
|
||||
|
||||
u32 sub_80A2CF8(u8 var)
|
||||
bool32 sub_80A2CF8(u8 var)
|
||||
{
|
||||
int i;
|
||||
|
||||
@@ -1181,7 +1179,7 @@ void sub_80A2D54(u8 taskId)
|
||||
{
|
||||
u32 wordVar;
|
||||
s16 *data;
|
||||
u16 temp;
|
||||
s16 temp;
|
||||
|
||||
data = gTasks[taskId].data;
|
||||
wordVar = GetWordTaskArg(taskId, 5);
|
||||
@@ -1191,7 +1189,7 @@ void sub_80A2D54(u8 taskId)
|
||||
data[4] = 0;
|
||||
BlendPalettes(wordVar, data[0], data[7]);
|
||||
temp = data[1];
|
||||
if (data[0] == (s16)temp)
|
||||
if (data[0] == temp)
|
||||
{
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
@@ -1200,12 +1198,12 @@ void sub_80A2D54(u8 taskId)
|
||||
data[0] += data[2];
|
||||
if (data[2] >= 0)
|
||||
{
|
||||
if (data[0] < (s16)temp)
|
||||
if (data[0] < temp)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (data[0] > (s16)temp)
|
||||
else if (data[0] > temp)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
+4
-4
@@ -21,7 +21,7 @@ extern u8 gBankTarget;
|
||||
extern u16 gBattlePartyID[];
|
||||
extern u8 gBankSpriteIds[];
|
||||
extern u8 gHealthBoxesIds[];
|
||||
extern struct MusicPlayerInfo gMPlay_BGM;
|
||||
extern struct MusicPlayerInfo gMPlayInfo_BGM;
|
||||
|
||||
// this file's functions
|
||||
static void Task_DoPokeballSendOutAnim(u8 taskId);
|
||||
@@ -773,11 +773,11 @@ static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite)
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_LINK)
|
||||
{
|
||||
if (IsBGMPlaying())
|
||||
m4aMPlayStop(&gMPlay_BGM);
|
||||
m4aMPlayStop(&gMPlayInfo_BGM);
|
||||
}
|
||||
else
|
||||
{
|
||||
m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 128);
|
||||
m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 128);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -885,7 +885,7 @@ static void sub_80760F8(struct Sprite *sprite)
|
||||
{
|
||||
gDoingBattleAnim = FALSE;
|
||||
m4aMPlayAllStop();
|
||||
PlaySE(BGM_FANFA5);
|
||||
PlaySE(MUS_FANFA5);
|
||||
}
|
||||
else if (sprite->data[4] == 315)
|
||||
{
|
||||
|
||||
+1337
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
+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
|
||||
};
|
||||
|
||||
+1
-1
@@ -1155,7 +1155,7 @@ u8 GetMonsStateToDoubles_2(void)
|
||||
s32 aliveCount = 0;
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < 6; i++)
|
||||
for (i = 0; i < PARTY_SIZE; i++)
|
||||
{
|
||||
u32 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL);
|
||||
if (species != SPECIES_EGG && species != SPECIES_NONE
|
||||
|
||||
+51
-48
@@ -11,8 +11,7 @@
|
||||
#include "link.h"
|
||||
#include "constants/hold_effects.h"
|
||||
#include "random.h"
|
||||
#include "trainer_classes.h"
|
||||
#include "trainer_ids.h"
|
||||
#include "constants/trainers.h"
|
||||
#include "constants/songs.h"
|
||||
#include "sound.h"
|
||||
#include "m4a.h"
|
||||
@@ -22,6 +21,7 @@
|
||||
#include "constants/abilities.h"
|
||||
#include "pokemon_animation.h"
|
||||
#include "pokedex.h"
|
||||
#include "pokeblock.h"
|
||||
|
||||
extern struct BattlePokemon gBattleMons[4];
|
||||
extern struct BattleEnigmaBerry gEnigmaBerries[4];
|
||||
@@ -59,7 +59,6 @@ extern const u8 gText_PkmnsXPreventsSwitching[];
|
||||
extern const struct CompressedSpritePalette gMonPaletteTable[];
|
||||
extern const struct CompressedSpritePalette gMonShinyPaletteTable[];
|
||||
extern const u16 gHMMoves[];
|
||||
extern const s8 gPokeblockFlavorCompatibilityTable[];
|
||||
extern const u8 gMonAnimationDelayTable[];
|
||||
extern const u8 gMonFrontAnimIdsTable[];
|
||||
|
||||
@@ -692,9 +691,9 @@ void AdjustFriendship(struct Pokemon *mon, u8 event)
|
||||
if ((event != 5 || !(Random() & 1))
|
||||
&& (event != 3
|
||||
|| ((gBattleTypeFlags & BATTLE_TYPE_TRAINER)
|
||||
&& (gTrainers[gTrainerBattleOpponent_A].trainerClass == CLASS_ELITE_FOUR
|
||||
|| gTrainers[gTrainerBattleOpponent_A].trainerClass == CLASS_LEADER
|
||||
|| gTrainers[gTrainerBattleOpponent_A].trainerClass == CLASS_CHAMPION))))
|
||||
&& (gTrainers[gTrainerBattleOpponent_A].trainerClass == TRAINER_CLASS_ELITE_FOUR
|
||||
|| gTrainers[gTrainerBattleOpponent_A].trainerClass == TRAINER_CLASS_LEADER
|
||||
|| gTrainers[gTrainerBattleOpponent_A].trainerClass == TRAINER_CLASS_CHAMPION))))
|
||||
{
|
||||
s8 mod = gUnknown_08329ECE[event][friendshipLevel];
|
||||
if (mod > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP)
|
||||
@@ -1146,55 +1145,57 @@ void ClearBattleMonForms(void)
|
||||
u16 GetBattleBGM(void)
|
||||
{
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_KYOGRE_GROUDON)
|
||||
return 0x1E0;
|
||||
return MUS_BATTLE34;
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_REGI)
|
||||
return 0x1DF;
|
||||
return MUS_BATTLE36;
|
||||
if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000))
|
||||
return 0x1DC;
|
||||
return MUS_BATTLE20;
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
|
||||
{
|
||||
u8 trainerClass;
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER)
|
||||
trainerClass = GetFrontierOpponentClass(gTrainerBattleOpponent_A);
|
||||
else if (gBattleTypeFlags & BATTLE_TYPE_x4000000)
|
||||
trainerClass = CLASS_EXPERT;
|
||||
trainerClass = TRAINER_CLASS_EXPERT;
|
||||
else
|
||||
trainerClass = gTrainers[gTrainerBattleOpponent_A].trainerClass;
|
||||
|
||||
switch (trainerClass)
|
||||
{
|
||||
case CLASS_AQUA_LEADER:
|
||||
case CLASS_MAGMA_LEADER:
|
||||
return 0x1E3;
|
||||
case CLASS_TEAM_AQUA:
|
||||
case CLASS_TEAM_MAGMA:
|
||||
case CLASS_AQUA_ADMIN:
|
||||
case CLASS_MAGMA_ADMIN:
|
||||
return 0x1DB;
|
||||
case CLASS_LEADER:
|
||||
return 0x1DD;
|
||||
case CLASS_CHAMPION:
|
||||
return 0x1DE;
|
||||
case CLASS_PKMN_TRAINER_RIVAL:
|
||||
case TRAINER_CLASS_AQUA_LEADER:
|
||||
case TRAINER_CLASS_MAGMA_LEADER:
|
||||
return MUS_BATTLE30;
|
||||
case TRAINER_CLASS_TEAM_AQUA:
|
||||
case TRAINER_CLASS_TEAM_MAGMA:
|
||||
case TRAINER_CLASS_AQUA_ADMIN:
|
||||
case TRAINER_CLASS_MAGMA_ADMIN:
|
||||
return MUS_BATTLE31;
|
||||
case TRAINER_CLASS_LEADER:
|
||||
return MUS_BATTLE32;
|
||||
case TRAINER_CLASS_CHAMPION:
|
||||
return MUS_BATTLE33;
|
||||
case TRAINER_CLASS_PKMN_TRAINER_3:
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER)
|
||||
return 0x1E1;
|
||||
return MUS_BATTLE35;
|
||||
if (!StringCompare(gTrainers[gTrainerBattleOpponent_A].trainerName, gText_BattleWallyName))
|
||||
return 0x1DC;
|
||||
return 0x1E1;
|
||||
case CLASS_ELITE_FOUR:
|
||||
return 0x1E2;
|
||||
case CLASS_SALON_MAIDEN:
|
||||
case CLASS_DOME_ACE:
|
||||
case CLASS_PALACE_MAVEN:
|
||||
case CLASS_ARENA_TYCOON:
|
||||
case CLASS_FACTORY_HEAD:
|
||||
case CLASS_PIKE_QUEEN:
|
||||
case CLASS_PYRAMID_KING:
|
||||
return 0x1D7;
|
||||
return MUS_BATTLE20;
|
||||
return MUS_BATTLE35;
|
||||
case TRAINER_CLASS_ELITE_FOUR:
|
||||
return MUS_BATTLE38;
|
||||
case TRAINER_CLASS_SALON_MAIDEN:
|
||||
case TRAINER_CLASS_DOME_ACE:
|
||||
case TRAINER_CLASS_PALACE_MAVEN:
|
||||
case TRAINER_CLASS_ARENA_TYCOON:
|
||||
case TRAINER_CLASS_FACTORY_HEAD:
|
||||
case TRAINER_CLASS_PIKE_QUEEN:
|
||||
case TRAINER_CLASS_PYRAMID_KING:
|
||||
return MUS_VS_FRONT;
|
||||
default:
|
||||
return 0x1DC;
|
||||
return MUS_BATTLE20;
|
||||
}
|
||||
}
|
||||
return 0x1DA;
|
||||
return MUS_BATTLE27;
|
||||
}
|
||||
|
||||
void PlayBattleBGM(void)
|
||||
@@ -1297,21 +1298,21 @@ bool8 IsPokeSpriteNotFlipped(u16 species)
|
||||
return gBaseStats[species].noFlip;
|
||||
}
|
||||
|
||||
s8 GetMonFlavorRelation(struct Pokemon *mon, u8 a2)
|
||||
s8 GetMonFlavorRelation(struct Pokemon *mon, u8 flavor)
|
||||
{
|
||||
u8 nature = GetNature(mon);
|
||||
return gPokeblockFlavorCompatibilityTable[nature * 5 + a2];
|
||||
return gPokeblockFlavorCompatibilityTable[nature * 5 + flavor];
|
||||
}
|
||||
|
||||
s8 GetFlavorRelationByPersonality(u32 personality, u8 a2)
|
||||
s8 GetFlavorRelationByPersonality(u32 personality, u8 flavor)
|
||||
{
|
||||
u8 nature = GetNatureFromPersonality(personality);
|
||||
return gPokeblockFlavorCompatibilityTable[nature * 5 + a2];
|
||||
return gPokeblockFlavorCompatibilityTable[nature * 5 + flavor];
|
||||
}
|
||||
|
||||
bool8 IsTradedMon(struct Pokemon *mon)
|
||||
{
|
||||
u8 otName[8];
|
||||
u8 otName[OT_NAME_LENGTH + 1];
|
||||
u32 otId;
|
||||
GetMonData(mon, MON_DATA_OT_NAME, otName);
|
||||
otId = GetMonData(mon, MON_DATA_OT_ID, 0);
|
||||
@@ -1396,7 +1397,7 @@ static s32 GetWildMonTableIdInAlteringCave(u16 species)
|
||||
|
||||
void SetWildMonHeldItem(void)
|
||||
{
|
||||
if (!(gBattleTypeFlags & (BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_TRAINER | BATTLE_TYPE_PYRAMID | BATTLE_TYPE_x100000)))
|
||||
if (!(gBattleTypeFlags & (BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_TRAINER | BATTLE_TYPE_PYRAMID | BATTLE_TYPE_PIKE)))
|
||||
{
|
||||
u16 rnd = Random() % 100;
|
||||
u16 species = GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, 0);
|
||||
@@ -1462,12 +1463,14 @@ bool8 IsShinyOtIdPersonality(u32 otId, u32 personality)
|
||||
return retVal;
|
||||
}
|
||||
|
||||
const u8* GetTrainerPartnerName(void)
|
||||
const u8 *GetTrainerPartnerName(void)
|
||||
{
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER)
|
||||
{
|
||||
if (gPartnerTrainerId == STEVEN_PARTNER_ID)
|
||||
return gTrainers[TRAINER_ID_STEVEN].trainerName;
|
||||
{
|
||||
return gTrainers[TRAINER_STEVEN].trainerName;
|
||||
}
|
||||
else
|
||||
{
|
||||
GetFrontierTrainerName(gStringVar1, gPartnerTrainerId);
|
||||
@@ -1682,14 +1685,14 @@ void HandleSetPokedexFlag(u16 nationalNum, u8 caseId, u32 personality)
|
||||
}
|
||||
}
|
||||
|
||||
const u8* GetTrainerClassNameFromId(u16 trainerId)
|
||||
const u8 *GetTrainerClassNameFromId(u16 trainerId)
|
||||
{
|
||||
if (trainerId > NO_OF_TRAINERS)
|
||||
trainerId = 0;
|
||||
return gTrainerClassNames[gTrainers[trainerId].trainerClass];
|
||||
}
|
||||
|
||||
const u8* GetTrainerNameFromId(u16 trainerId)
|
||||
const u8 *GetTrainerNameFromId(u16 trainerId)
|
||||
{
|
||||
if (trainerId > NO_OF_TRAINERS)
|
||||
trainerId = 0;
|
||||
|
||||
+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;
|
||||
|
||||
@@ -41,7 +41,7 @@ struct ContestEffect
|
||||
extern struct UnkSummaryStruct* gUnknown_0203CF1C;
|
||||
extern struct BgTemplate gUnknown_0861CBB4;
|
||||
extern u8 gUnknown_0203CF20;
|
||||
extern struct MusicPlayerInfo gMPlay_BGM;
|
||||
extern struct MusicPlayerInfo gMPlayInfo_BGM;
|
||||
extern s8 gUnknown_0861CC1C[];
|
||||
extern u8 gUnknown_08329D22[];
|
||||
extern u8 gUnknown_0203CF21;
|
||||
@@ -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;
|
||||
@@ -73,7 +73,7 @@ extern void do_scheduled_bg_tilemap_copies_to_vram(void);
|
||||
extern u8 sub_81221EC();
|
||||
extern u8 sub_81221AC();
|
||||
extern void SetVBlankHBlankCallbacksToNull();
|
||||
extern void sub_8121DA0();
|
||||
extern void ResetVramOamAndBgCntRegs();
|
||||
extern void clear_scheduled_bg_copies_to_vram();
|
||||
extern void remove_some_task();
|
||||
extern void ResetBgsAndClearDma3BusyFlags(u32 leftoverFireRedLeafGreenVariable);
|
||||
@@ -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);
|
||||
@@ -193,7 +193,7 @@ void sub_81C4A88();
|
||||
void sub_81C4280();
|
||||
void sub_81C0510(u8 taskId);
|
||||
void sub_81C171C(u8 taskId);
|
||||
void sub_8121E10();
|
||||
void ResetAllBgsCoordinates();
|
||||
u8 sub_81B205C(struct Pokemon* a);
|
||||
void sub_81C1DA4(u16 a, s16 b);
|
||||
void sub_81C1EFC(u16 a, s16 b, u16 c);
|
||||
@@ -450,7 +450,7 @@ bool8 sub_81BFB10(void)
|
||||
{
|
||||
case 0:
|
||||
SetVBlankHBlankCallbacksToNull();
|
||||
sub_8121DA0();
|
||||
ResetVramOamAndBgCntRegs();
|
||||
clear_scheduled_bg_copies_to_vram();
|
||||
gMain.state++;
|
||||
break;
|
||||
@@ -578,7 +578,7 @@ void sub_81BFE24()
|
||||
SetBgTilemapBuffer(1, &gUnknown_0203CF1C->unkTilemap2);
|
||||
SetBgTilemapBuffer(2, &gUnknown_0203CF1C->unkTilemap1);
|
||||
SetBgTilemapBuffer(3, &gUnknown_0203CF1C->unkTilemap0);
|
||||
sub_8121E10();
|
||||
ResetAllBgsCoordinates();
|
||||
schedule_bg_copy_tilemap_to_vram(1);
|
||||
schedule_bg_copy_tilemap_to_vram(2);
|
||||
schedule_bg_copy_tilemap_to_vram(3);
|
||||
@@ -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;
|
||||
}
|
||||
@@ -793,7 +793,7 @@ void sub_81C0484(u8 taskId)
|
||||
ResetSpriteData();
|
||||
FreeAllSpritePalettes();
|
||||
StopCryAndClearCrySongs();
|
||||
m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100);
|
||||
m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100);
|
||||
if (gMonSpritesGfxPtr == 0)
|
||||
sub_806F47C(0);
|
||||
sub_81C0434();
|
||||
@@ -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
@@ -19,7 +19,7 @@
|
||||
| BATTLE_TYPE_WALLY_TUTORIAL | BATTLE_TYPE_ROAMER | BATTLE_TYPE_EREADER_TRAINER \
|
||||
| BATTLE_TYPE_KYOGRE_GROUDON | BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_REGI \
|
||||
| BATTLE_TYPE_RECORDED | BATTLE_TYPE_x4000000 | BATTLE_TYPE_SECRET_BASE \
|
||||
| BATTLE_TYPE_GROUDON | BATTLE_TYPE_KYORGE | BATTLE_TYPE_RAYQUAZA))
|
||||
| BATTLE_TYPE_GROUDON | BATTLE_TYPE_KYOGRE | BATTLE_TYPE_RAYQUAZA))
|
||||
|
||||
extern u32 gBattleTypeFlags;
|
||||
extern u16 gTrainerBattleOpponent_A;
|
||||
|
||||
+16
-15
@@ -21,6 +21,7 @@
|
||||
#include "m4a.h"
|
||||
#include "field_effect.h"
|
||||
#include "region_map.h"
|
||||
#include "constants/region_map_sections.h"
|
||||
|
||||
#define MAP_WIDTH 28
|
||||
#define MAP_HEIGHT 15
|
||||
@@ -239,9 +240,9 @@ static const u8 sRegionMapFrameTilemapLZ[] = INCBIN_U8("graphics/pokenav/map_fra
|
||||
|
||||
static const u16 Unknown_085A1D48[] = INCBIN_U16("graphics/pokenav/fly_target_icons.gbapal");
|
||||
|
||||
static const u8 gUnknown_085A1D68[] = INCBIN_U8("graphics/pokenav/fly_target_icons.4bpp.lz");
|
||||
static const u8 sUnknown_085A1D68[] = INCBIN_U8("graphics/pokenav/fly_target_icons.4bpp.lz");
|
||||
|
||||
static const u8 gUnknown_085A1E3C[][3] = {
|
||||
static const u8 sUnknown_085A1E3C[][3] = {
|
||||
{MAP_GROUP(LITTLEROOT_TOWN), MAP_NUM(LITTLEROOT_TOWN), 1},
|
||||
{MAP_GROUP(OLDALE_TOWN), MAP_NUM(OLDALE_TOWN), 14},
|
||||
{MAP_GROUP(DEWFORD_TOWN), MAP_NUM(DEWFORD_TOWN), 15},
|
||||
@@ -306,7 +307,7 @@ static const struct {
|
||||
} gUnknown_085A1EDC[] = {
|
||||
gUnknown_085A1ED4,
|
||||
MAPSEC_EVER_GRANDE_CITY,
|
||||
FLAG_SYS_POKEMON_LEAGUE_FLY
|
||||
FLAG_LANDMARK_POKEMON_LEAGUE
|
||||
};
|
||||
|
||||
static const struct BgTemplate gUnknown_085A1EE4[] = {
|
||||
@@ -326,8 +327,8 @@ static const struct SpritePalette gUnknown_085A1F10 = {
|
||||
Unknown_085A1D48, 2
|
||||
};
|
||||
|
||||
static const u16 gUnknown_085A1F18[][2] = {
|
||||
{FLAG_UNLOCK_BATTLE_FRONTIER, MAPSEC_BATTLE_FRONTIER},
|
||||
static const u16 sUnknown_085A1F18[][2] = {
|
||||
{FLAG_LANDMARK_BATTLE_FRONTIER, MAPSEC_BATTLE_FRONTIER},
|
||||
{-1, MAPSEC_NONE}
|
||||
};
|
||||
|
||||
@@ -1126,9 +1127,9 @@ static u8 get_flagnr_blue_points(u16 mapSecId)
|
||||
case MAPSEC_EVER_GRANDE_CITY:
|
||||
return FlagGet(FLAG_VISITED_EVER_GRANDE_CITY) ? MAPSECTYPE_CITY_CANFLY : MAPSECTYPE_CITY_CANTFLY;
|
||||
case MAPSEC_BATTLE_FRONTIER:
|
||||
return FlagGet(FLAG_UNLOCK_BATTLE_FRONTIER) ? MAPSECTYPE_BATTLE_FRONTIER : MAPSECTYPE_NONE;
|
||||
return FlagGet(FLAG_LANDMARK_BATTLE_FRONTIER) ? MAPSECTYPE_BATTLE_FRONTIER : MAPSECTYPE_NONE;
|
||||
case MAPSEC_SOUTHERN_ISLAND:
|
||||
return FlagGet(FLAG_UNLOCK_SOUTHERN_ISLAND) ? MAPSECTYPE_PLAIN : MAPSECTYPE_NONE;
|
||||
return FlagGet(FLAG_LANDMARK_SOUTHERN_ISLAND) ? MAPSECTYPE_PLAIN : MAPSECTYPE_NONE;
|
||||
default:
|
||||
return MAPSECTYPE_PLAIN;
|
||||
}
|
||||
@@ -1738,7 +1739,7 @@ static void sub_8124A70(void)
|
||||
{
|
||||
struct SpriteSheet sheet;
|
||||
|
||||
LZ77UnCompWram(gUnknown_085A1D68, gUnknown_0203A148->unk_88c);
|
||||
LZ77UnCompWram(sUnknown_085A1D68, gUnknown_0203A148->unk_88c);
|
||||
sheet.data = gUnknown_0203A148->unk_88c;
|
||||
sheet.size = 0x1c0;
|
||||
sheet.tag = 2;
|
||||
@@ -1806,11 +1807,11 @@ static void sub_8124BE4(void)
|
||||
u16 mapSecId;
|
||||
u8 spriteId;
|
||||
|
||||
for (i = 0; gUnknown_085A1F18[i][1] != MAPSEC_NONE; i++)
|
||||
for (i = 0; sUnknown_085A1F18[i][1] != MAPSEC_NONE; i++)
|
||||
{
|
||||
if (FlagGet(gUnknown_085A1F18[i][0]))
|
||||
if (FlagGet(sUnknown_085A1F18[i][0]))
|
||||
{
|
||||
mapSecId = gUnknown_085A1F18[i][1];
|
||||
mapSecId = sUnknown_085A1F18[i][1];
|
||||
sub_8124630(mapSecId, &x, &y, &width, &height);
|
||||
x = (x + MAPCURSOR_X_MIN) * 8;
|
||||
y = (y + MAPCURSOR_Y_MIN) * 8;
|
||||
@@ -1916,16 +1917,16 @@ static void sub_8124E0C(void)
|
||||
sub_8084CCC(gSaveBlock2Ptr->playerGender == MALE ? 0x0C : 0x0D);
|
||||
break;
|
||||
case MAPSEC_EVER_GRANDE_CITY:
|
||||
sub_8084CCC(FlagGet(FLAG_SYS_POKEMON_LEAGUE_FLY) && gUnknown_0203A148->regionMap.posWithinMapSec == 0 ? 0x14 : 0x0B);
|
||||
sub_8084CCC(FlagGet(FLAG_LANDMARK_POKEMON_LEAGUE) && gUnknown_0203A148->regionMap.posWithinMapSec == 0 ? 0x14 : 0x0B);
|
||||
break;
|
||||
default:
|
||||
if (gUnknown_085A1E3C[gUnknown_0203A148->regionMap.mapSecId][2] != 0)
|
||||
if (sUnknown_085A1E3C[gUnknown_0203A148->regionMap.mapSecId][2] != 0)
|
||||
{
|
||||
sub_8084CCC(gUnknown_085A1E3C[gUnknown_0203A148->regionMap.mapSecId][2]);
|
||||
sub_8084CCC(sUnknown_085A1E3C[gUnknown_0203A148->regionMap.mapSecId][2]);
|
||||
}
|
||||
else
|
||||
{
|
||||
warp1_set_2(gUnknown_085A1E3C[gUnknown_0203A148->regionMap.mapSecId][0], gUnknown_085A1E3C[gUnknown_0203A148->regionMap.mapSecId][1], -1);
|
||||
warp1_set_2(sUnknown_085A1E3C[gUnknown_0203A148->regionMap.mapSecId][0], sUnknown_085A1E3C[gUnknown_0203A148->regionMap.mapSecId][1], -1);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -35,7 +35,7 @@ extern struct SpriteTemplate gUnknown_0202499C;
|
||||
extern const union AnimCmd * const * const gMonAnimationsSpriteAnimsPtrTable[];
|
||||
|
||||
extern void dp12_8087EA4(void);
|
||||
extern void trs_config(void);
|
||||
extern void sub_8035658(void);
|
||||
extern bool8 IsDoubleBattle(void);
|
||||
extern u8 GetSubstituteSpriteDefault_Y(u8 bank);
|
||||
extern u8 GetBankSpriteDefault_Y(u8 bank);
|
||||
@@ -73,7 +73,7 @@ static void CB2_ReshowBattleScreenAfterMenu(void)
|
||||
{
|
||||
case 0:
|
||||
dp12_8087EA4();
|
||||
trs_config();
|
||||
sub_8035658();
|
||||
SetBgAttribute(1, BG_CTRL_ATTR_VISIBLE, 0);
|
||||
SetBgAttribute(2, BG_CTRL_ATTR_VISIBLE, 0);
|
||||
ShowBg(0);
|
||||
|
||||
@@ -1,17 +1,5 @@
|
||||
|
||||
// Includes
|
||||
#include "global.h"
|
||||
|
||||
// Static type declarations
|
||||
|
||||
// Static RAM declarations
|
||||
|
||||
IWRAM_DATA u32 gUnknown_03000DD4;
|
||||
IWRAM_DATA u32 gUnknown_03000DD8;
|
||||
IWRAM_DATA u32 gUnknown_03000DDC;
|
||||
|
||||
// Static ROM declarations
|
||||
|
||||
// .rodata
|
||||
|
||||
// .text
|
||||
+2
-2
@@ -5,6 +5,7 @@
|
||||
#include "main.h"
|
||||
#include "battle.h"
|
||||
#include "string_util.h"
|
||||
#include "pokeblock.h"
|
||||
|
||||
struct PokeblockFeeder
|
||||
{
|
||||
@@ -24,7 +25,6 @@ extern u8 EventScript_2A4B8A[];
|
||||
extern u8 EventScript_2A4B6F[];
|
||||
extern u8 EventScript_2A4B4C[];
|
||||
extern u8 EventScript_2A4B9B[];
|
||||
extern const u8* const gPokeblockNames[];
|
||||
|
||||
extern void sub_80EE44C(u8, u8);
|
||||
extern void IncrementGameStat(u8 index);
|
||||
@@ -105,7 +105,7 @@ void SafariZoneRetirePrompt(void)
|
||||
ScriptContext1_SetupScript(EventScript_2A4B6F);
|
||||
}
|
||||
|
||||
void sub_80FC190(void)
|
||||
void CB2_EndSafariBattle(void)
|
||||
{
|
||||
sSafariZoneFleedMons += gBattleResults.field_1F;
|
||||
if (gBattleOutcome == BATTLE_CAUGHT)
|
||||
|
||||
@@ -154,8 +154,8 @@ static const u8 sClockFrames[8][3] =
|
||||
{ 5, 1, 0 },
|
||||
};
|
||||
|
||||
static const u8 gSaveFailedClockPal[] = INCBIN_U8("graphics/misc/clock_small.gbapal");
|
||||
static const u8 gSaveFailedClockGfx[] = INCBIN_U8("graphics/misc/clock_small.4bpp.lz");
|
||||
static const u8 sSaveFailedClockPal[] = INCBIN_U8("graphics/misc/clock_small.gbapal");
|
||||
static const u8 sSaveFailedClockGfx[] = INCBIN_U8("graphics/misc/clock_small.4bpp.lz");
|
||||
|
||||
static void CB2_SaveFailedScreen(void);
|
||||
static void CB2_WipeSave(void);
|
||||
@@ -221,7 +221,7 @@ static void CB2_SaveFailedScreen(void)
|
||||
LZ77UnCompVram(gBirchHelpGfx, (void *)VRAM);
|
||||
LZ77UnCompVram(gBirchBagTilemap, (void *)(VRAM + 0x7000));
|
||||
LZ77UnCompVram(gBirchGrassTilemap, (void *)(VRAM + 0x7800));
|
||||
LZ77UnCompVram(gSaveFailedClockGfx, (void *)(VRAM + 0x10020));
|
||||
LZ77UnCompVram(sSaveFailedClockGfx, (void *)(VRAM + 0x10020));
|
||||
ResetBgsAndClearDma3BusyFlags(0);
|
||||
InitBgsFromTemplates(0, gUnknown_085EFD88, 3);
|
||||
SetBgTilemapBuffer(0, (void *)&gDecompressionBuffer[0x2000]);
|
||||
@@ -238,7 +238,7 @@ static void CB2_SaveFailedScreen(void)
|
||||
ResetTasks();
|
||||
ResetPaletteFade();
|
||||
LoadPalette(gBirchBagGrassPal, 0, 0x40);
|
||||
LoadPalette(gSaveFailedClockPal, 0x100, 0x20);
|
||||
LoadPalette(sSaveFailedClockPal, 0x100, 0x20);
|
||||
LoadPalette(gUnknown_0850FEFC, 0xE0, 0x20);
|
||||
LoadPalette(gUnknown_0860F074, 0xF0, 0x20);
|
||||
SetWindowBorderStyle(gSaveFailedWindowIds[TEXT_WIN_ID], FALSE, 0x214, 0xE);
|
||||
|
||||
+18
-18
@@ -656,7 +656,7 @@ bool8 ScrCmd_fadescreenspeed(struct ScriptContext *ctx)
|
||||
bool8 ScrCmd_fadescreenswapbuffers(struct ScriptContext *ctx)
|
||||
{
|
||||
u8 mode = ScriptReadByte(ctx);
|
||||
|
||||
|
||||
switch (mode)
|
||||
{
|
||||
case 1:
|
||||
@@ -1445,7 +1445,7 @@ bool8 ScrCmd_drawboxtext(struct ScriptContext *ctx)
|
||||
u8 top = ScriptReadByte(ctx);
|
||||
u8 multichoiceId = ScriptReadByte(ctx);
|
||||
u8 ignoreBPress = ScriptReadByte(ctx);
|
||||
|
||||
|
||||
/*if (Multichoice(left, top, multichoiceId, ignoreBPress) == TRUE)
|
||||
{
|
||||
ScriptContext1_Stop();
|
||||
@@ -1501,31 +1501,31 @@ bool8 ScrCmd_braillemessage(struct ScriptContext *ctx)
|
||||
u8 y;
|
||||
|
||||
StringExpandPlaceholders(gStringVar4, ptr + 6);
|
||||
|
||||
|
||||
width = GetStringWidth(6, gStringVar4, -1) / 8;
|
||||
|
||||
|
||||
if (width > 0x1C)
|
||||
width = 0x1C;
|
||||
|
||||
|
||||
for (i = 0, height = 4; gStringVar4[i] != 0xFF;)
|
||||
{
|
||||
if (gStringVar4[i++] == 0xFE)
|
||||
height += 3;
|
||||
}
|
||||
|
||||
|
||||
if (height > 0x12)
|
||||
height = 0x12;
|
||||
|
||||
|
||||
x = width + 2;
|
||||
temp1 = (0x1E - x) / 2;
|
||||
x = temp1 + 1;
|
||||
temp1 = ((x - temp1 - 1) * 8 + 3);
|
||||
|
||||
|
||||
y = height + 2;
|
||||
temp2 = (0x14 - y) / 2;
|
||||
y = temp2 + 2;
|
||||
temp2 = ((y - temp2 - 1) * 8);
|
||||
|
||||
|
||||
sub_8198A50(&template1, 0, x, y, width, height, 0xF, 0x1);
|
||||
template2 = template1;
|
||||
gUnknown_03000F30 = AddWindow(&template2);
|
||||
@@ -1924,7 +1924,7 @@ bool8 ScrCmd_hidemoneybox(struct ScriptContext *ctx)
|
||||
{
|
||||
/*u8 x = ScriptReadByte(ctx);
|
||||
u8 y = ScriptReadByte(ctx);*/
|
||||
|
||||
|
||||
HideMoneyBox();
|
||||
return FALSE;
|
||||
}
|
||||
@@ -1979,13 +1979,13 @@ bool8 ScrCmd_dotrainerbattle(struct ScriptContext *ctx)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 ScrCmd_ontrainerbattleend(struct ScriptContext *ctx)
|
||||
bool8 ScrCmd_gotopostbattlescript(struct ScriptContext *ctx)
|
||||
{
|
||||
ctx->scriptPtr = BattleSetup_GetScriptAddrAfterBattle();
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 ScrCmd_ontrainerbattleendgoto(struct ScriptContext *ctx)
|
||||
bool8 ScrCmd_gotobeatenscript(struct ScriptContext *ctx)
|
||||
{
|
||||
ctx->scriptPtr = BattleSetup_GetTrainerPostBattleScript();
|
||||
return FALSE;
|
||||
@@ -1995,7 +1995,7 @@ bool8 ScrCmd_checktrainerflag(struct ScriptContext *ctx)
|
||||
{
|
||||
u16 index = VarGet(ScriptReadHalfword(ctx));
|
||||
|
||||
ctx->comparisonResult = HasTrainerAlreadyBeenFought(index);
|
||||
ctx->comparisonResult = HasTrainerBeenFought(index);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -2003,7 +2003,7 @@ bool8 ScrCmd_settrainerflag(struct ScriptContext *ctx)
|
||||
{
|
||||
u16 index = VarGet(ScriptReadHalfword(ctx));
|
||||
|
||||
trainer_flag_set(index);
|
||||
SetTrainerFlag(index);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -2011,7 +2011,7 @@ bool8 ScrCmd_cleartrainerflag(struct ScriptContext *ctx)
|
||||
{
|
||||
u16 index = VarGet(ScriptReadHalfword(ctx));
|
||||
|
||||
trainer_flag_clear(index);
|
||||
ClearTrainerFlag(index);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -2089,7 +2089,7 @@ bool8 ScrCmd_getpricereduction(struct ScriptContext *ctx)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 ScrCmd_choosecontestpkmn(struct ScriptContext *ctx)
|
||||
bool8 ScrCmd_choosecontestmon(struct ScriptContext *ctx)
|
||||
{
|
||||
sub_81B9404();
|
||||
ScriptContext1_Stop();
|
||||
@@ -2332,7 +2332,7 @@ bool8 ScrCmd_mossdeepgym4(struct ScriptContext *ctx)
|
||||
|
||||
bool8 ScrCmd_cmdD8(struct ScriptContext *ctx)
|
||||
{
|
||||
gSelectedMapObject = sub_80B47BC();
|
||||
gSelectedMapObject = GetCurrentApproachingTrainerMapObjectId();
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -2374,7 +2374,7 @@ bool8 ScrCmd_checkmonobedience(struct ScriptContext *ctx)
|
||||
bool8 ScrCmd_cmdCF(struct ScriptContext *ctx)
|
||||
{
|
||||
const u8* v1 = sub_8099244();
|
||||
|
||||
|
||||
if (v1)
|
||||
{
|
||||
((u8*)gUnknown_020375C0) = ctx->scriptPtr;
|
||||
|
||||
+13
-13
@@ -1082,13 +1082,13 @@ void game_continue(u8 taskId)
|
||||
if (sub_80E9878(i))
|
||||
{
|
||||
sub_80E9780(gUnknown_0203A020->names[count], i);
|
||||
gUnknown_0203A020->items[count].unk_00 = gUnknown_0203A020->names[count];
|
||||
gUnknown_0203A020->items[count].unk_04 = i;
|
||||
gUnknown_0203A020->items[count].name = gUnknown_0203A020->names[count];
|
||||
gUnknown_0203A020->items[count].id = i;
|
||||
count ++;
|
||||
}
|
||||
}
|
||||
gUnknown_0203A020->items[count].unk_00 = gText_Cancel;
|
||||
gUnknown_0203A020->items[count].unk_04 = -2;
|
||||
gUnknown_0203A020->items[count].name = gText_Cancel;
|
||||
gUnknown_0203A020->items[count].id = -2;
|
||||
data[0] = count + 1;
|
||||
if (data[0] < 8)
|
||||
{
|
||||
@@ -1098,11 +1098,11 @@ void game_continue(u8 taskId)
|
||||
{
|
||||
data[3] = 8;
|
||||
}
|
||||
gUnknown_03006310 = gUnknown_0858D07C;
|
||||
gUnknown_03006310.unk_10 = data[6];
|
||||
gUnknown_03006310.totalItems = data[0];
|
||||
gUnknown_03006310.items = gUnknown_0203A020->items;
|
||||
gUnknown_03006310.maxShowed = data[3];
|
||||
gMultiuseListMenuTemplate = gUnknown_0858D07C;
|
||||
gMultiuseListMenuTemplate.unk_10 = data[6];
|
||||
gMultiuseListMenuTemplate.totalItems = data[0];
|
||||
gMultiuseListMenuTemplate.items = gUnknown_0203A020->items;
|
||||
gMultiuseListMenuTemplate.maxShowed = data[3];
|
||||
}
|
||||
|
||||
void sub_80E9DEC(u32 a0, bool8 flag, struct ListMenu *menu)
|
||||
@@ -1119,7 +1119,7 @@ void sub_80E9E00(u8 taskId)
|
||||
|
||||
data = gTasks[taskId].data;
|
||||
SetStandardWindowBorderStyle(data[6], 0);
|
||||
data[5] = ListMenuInit(&gUnknown_03006310, data[2], data[1]);
|
||||
data[5] = ListMenuInit(&gMultiuseListMenuTemplate, data[2], data[1]);
|
||||
sub_80E9E44(taskId);
|
||||
schedule_bg_copy_tilemap_to_vram(0);
|
||||
}
|
||||
@@ -1138,8 +1138,8 @@ void sub_80E9E90(u8 taskId)
|
||||
s32 input;
|
||||
|
||||
data = gTasks[taskId].data;
|
||||
input = ListMenuHandleInput(data[5]);
|
||||
get_coro_args_x18_x1A(data[5], &data[2], &data[1]);
|
||||
input = ListMenuHandleInputGetItemId(data[5]);
|
||||
sub_81AE860(data[5], &data[2], &data[1]);
|
||||
switch (input)
|
||||
{
|
||||
case -1:
|
||||
@@ -1283,7 +1283,7 @@ u8 sub_80EA20C(u8 secretBaseRecordId)
|
||||
return (gSaveBlock1Ptr->secretBases[secretBaseRecordId].trainerId[0] % 5) + (gSaveBlock1Ptr->secretBases[secretBaseRecordId].gender * 5);
|
||||
}
|
||||
|
||||
const u8 *sub_80EA250(void)
|
||||
const u8 *GetSecretBaseTrainerLoseText(void)
|
||||
{
|
||||
u8 param;
|
||||
|
||||
|
||||
+39
-39
@@ -29,10 +29,10 @@ IWRAM_DATA static u16 sFanfareCounter;
|
||||
bool8 gDisableMusic;
|
||||
|
||||
extern u32 gBattleTypeFlags;
|
||||
extern struct MusicPlayerInfo gMPlay_BGM;
|
||||
extern struct MusicPlayerInfo gMPlay_SE1;
|
||||
extern struct MusicPlayerInfo gMPlay_SE2;
|
||||
extern struct MusicPlayerInfo gMPlay_SE3;
|
||||
extern struct MusicPlayerInfo gMPlayInfo_BGM;
|
||||
extern struct MusicPlayerInfo gMPlayInfo_SE1;
|
||||
extern struct MusicPlayerInfo gMPlayInfo_SE2;
|
||||
extern struct MusicPlayerInfo gMPlayInfo_SE3;
|
||||
extern struct ToneData gCryTable[];
|
||||
extern struct ToneData gCryTable2[];
|
||||
extern const struct Fanfare sFanfares[];
|
||||
@@ -171,7 +171,7 @@ bool8 IsNotWaitingForBGMStop(void)
|
||||
void PlayFanfareByFanfareNum(u8 fanfareNum)
|
||||
{
|
||||
u16 songNum;
|
||||
m4aMPlayStop(&gMPlay_BGM);
|
||||
m4aMPlayStop(&gMPlayInfo_BGM);
|
||||
songNum = sFanfares[fanfareNum].songNum;
|
||||
sFanfareCounter = sFanfares[fanfareNum].duration;
|
||||
m4aSongNumStart(songNum);
|
||||
@@ -187,9 +187,9 @@ bool8 WaitFanfare(bool8 stop)
|
||||
else
|
||||
{
|
||||
if (!stop)
|
||||
m4aMPlayContinue(&gMPlay_BGM);
|
||||
m4aMPlayContinue(&gMPlayInfo_BGM);
|
||||
else
|
||||
m4aSongNumStart(SE_STOP);
|
||||
m4aSongNumStart(MUS_DUMMY);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@@ -232,7 +232,7 @@ static void Task_Fanfare(u8 taskId)
|
||||
}
|
||||
else
|
||||
{
|
||||
m4aMPlayContinue(&gMPlay_BGM);
|
||||
m4aMPlayContinue(&gMPlayInfo_BGM);
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
}
|
||||
@@ -250,46 +250,46 @@ void FadeInNewBGM(u16 songNum, u8 speed)
|
||||
if (songNum == 0xFFFF)
|
||||
songNum = 0;
|
||||
m4aSongNumStart(songNum);
|
||||
m4aMPlayImmInit(&gMPlay_BGM);
|
||||
m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0);
|
||||
m4aMPlayImmInit(&gMPlayInfo_BGM);
|
||||
m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0);
|
||||
m4aSongNumStop(songNum);
|
||||
m4aMPlayFadeIn(&gMPlay_BGM, speed);
|
||||
m4aMPlayFadeIn(&gMPlayInfo_BGM, speed);
|
||||
}
|
||||
|
||||
void FadeOutBGMTemporarily(u8 speed)
|
||||
{
|
||||
m4aMPlayFadeOutTemporarily(&gMPlay_BGM, speed);
|
||||
m4aMPlayFadeOutTemporarily(&gMPlayInfo_BGM, speed);
|
||||
}
|
||||
|
||||
bool8 IsBGMPausedOrStopped(void)
|
||||
{
|
||||
if (gMPlay_BGM.status & MUSICPLAYER_STATUS_PAUSE)
|
||||
if (gMPlayInfo_BGM.status & MUSICPLAYER_STATUS_PAUSE)
|
||||
return TRUE;
|
||||
if (!(gMPlay_BGM.status & MUSICPLAYER_STATUS_TRACK))
|
||||
if (!(gMPlayInfo_BGM.status & MUSICPLAYER_STATUS_TRACK))
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void FadeInBGM(u8 speed)
|
||||
{
|
||||
m4aMPlayFadeIn(&gMPlay_BGM, speed);
|
||||
m4aMPlayFadeIn(&gMPlayInfo_BGM, speed);
|
||||
}
|
||||
|
||||
void FadeOutBGM(u8 speed)
|
||||
{
|
||||
m4aMPlayFadeOut(&gMPlay_BGM, speed);
|
||||
m4aMPlayFadeOut(&gMPlayInfo_BGM, speed);
|
||||
}
|
||||
|
||||
bool8 IsBGMStopped(void)
|
||||
{
|
||||
if (!(gMPlay_BGM.status & MUSICPLAYER_STATUS_TRACK))
|
||||
if (!(gMPlayInfo_BGM.status & MUSICPLAYER_STATUS_TRACK))
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void PlayCry1(u16 species, s8 pan)
|
||||
{
|
||||
m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 85);
|
||||
m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 85);
|
||||
PlayCryInternal(species, pan, CRY_VOLUME, 10, 0);
|
||||
gPokemonCryBGMDuckingCounter = 2;
|
||||
RestoreBGMVolumeAfterPokemonCry();
|
||||
@@ -308,7 +308,7 @@ void PlayCry3(u16 species, s8 pan, u8 mode)
|
||||
}
|
||||
else
|
||||
{
|
||||
m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 85);
|
||||
m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 85);
|
||||
PlayCryInternal(species, pan, CRY_VOLUME, 10, mode);
|
||||
gPokemonCryBGMDuckingCounter = 2;
|
||||
RestoreBGMVolumeAfterPokemonCry();
|
||||
@@ -324,7 +324,7 @@ void PlayCry4(u16 species, s8 pan, u8 mode)
|
||||
else
|
||||
{
|
||||
if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI))
|
||||
m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 85);
|
||||
m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 85);
|
||||
PlayCryInternal(species, pan, CRY_VOLUME, 10, mode);
|
||||
}
|
||||
}
|
||||
@@ -337,7 +337,7 @@ void PlayCry6(u16 species, s8 pan, u8 mode) // not present in R/S
|
||||
}
|
||||
else
|
||||
{
|
||||
m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 85);
|
||||
m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 85);
|
||||
PlayCryInternal(species, pan, CRY_VOLUME, 10, mode);
|
||||
gPokemonCryBGMDuckingCounter = 2;
|
||||
}
|
||||
@@ -345,7 +345,7 @@ void PlayCry6(u16 species, s8 pan, u8 mode) // not present in R/S
|
||||
|
||||
void PlayCry5(u16 species, u8 mode)
|
||||
{
|
||||
m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 85);
|
||||
m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 85);
|
||||
PlayCryInternal(species, 0, CRY_VOLUME, 10, mode);
|
||||
gPokemonCryBGMDuckingCounter = 2;
|
||||
RestoreBGMVolumeAfterPokemonCry();
|
||||
@@ -529,7 +529,7 @@ static void Task_DuckBGMForPokemonCry(u8 taskId)
|
||||
|
||||
if (!IsPokemonCryPlaying(gMPlay_PokemonCry))
|
||||
{
|
||||
m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 256);
|
||||
m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 256);
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
}
|
||||
@@ -557,55 +557,55 @@ void PlaySE(u16 songNum)
|
||||
void PlaySE12WithPanning(u16 songNum, s8 pan)
|
||||
{
|
||||
m4aSongNumStart(songNum);
|
||||
m4aMPlayImmInit(&gMPlay_SE1);
|
||||
m4aMPlayImmInit(&gMPlay_SE2);
|
||||
m4aMPlayPanpotControl(&gMPlay_SE1, 0xFFFF, pan);
|
||||
m4aMPlayPanpotControl(&gMPlay_SE2, 0xFFFF, pan);
|
||||
m4aMPlayImmInit(&gMPlayInfo_SE1);
|
||||
m4aMPlayImmInit(&gMPlayInfo_SE2);
|
||||
m4aMPlayPanpotControl(&gMPlayInfo_SE1, 0xFFFF, pan);
|
||||
m4aMPlayPanpotControl(&gMPlayInfo_SE2, 0xFFFF, pan);
|
||||
}
|
||||
|
||||
void PlaySE1WithPanning(u16 songNum, s8 pan)
|
||||
{
|
||||
m4aSongNumStart(songNum);
|
||||
m4aMPlayImmInit(&gMPlay_SE1);
|
||||
m4aMPlayPanpotControl(&gMPlay_SE1, 0xFFFF, pan);
|
||||
m4aMPlayImmInit(&gMPlayInfo_SE1);
|
||||
m4aMPlayPanpotControl(&gMPlayInfo_SE1, 0xFFFF, pan);
|
||||
}
|
||||
|
||||
void PlaySE2WithPanning(u16 songNum, s8 pan)
|
||||
{
|
||||
m4aSongNumStart(songNum);
|
||||
m4aMPlayImmInit(&gMPlay_SE2);
|
||||
m4aMPlayPanpotControl(&gMPlay_SE2, 0xFFFF, pan);
|
||||
m4aMPlayImmInit(&gMPlayInfo_SE2);
|
||||
m4aMPlayPanpotControl(&gMPlayInfo_SE2, 0xFFFF, pan);
|
||||
}
|
||||
|
||||
void SE12PanpotControl(s8 pan)
|
||||
{
|
||||
m4aMPlayPanpotControl(&gMPlay_SE1, 0xFFFF, pan);
|
||||
m4aMPlayPanpotControl(&gMPlay_SE2, 0xFFFF, pan);
|
||||
m4aMPlayPanpotControl(&gMPlayInfo_SE1, 0xFFFF, pan);
|
||||
m4aMPlayPanpotControl(&gMPlayInfo_SE2, 0xFFFF, pan);
|
||||
}
|
||||
|
||||
bool8 IsSEPlaying(void)
|
||||
{
|
||||
if ((gMPlay_SE1.status & MUSICPLAYER_STATUS_PAUSE) && (gMPlay_SE2.status & MUSICPLAYER_STATUS_PAUSE))
|
||||
if ((gMPlayInfo_SE1.status & MUSICPLAYER_STATUS_PAUSE) && (gMPlayInfo_SE2.status & MUSICPLAYER_STATUS_PAUSE))
|
||||
return FALSE;
|
||||
if (!(gMPlay_SE1.status & MUSICPLAYER_STATUS_TRACK) && !(gMPlay_SE2.status & MUSICPLAYER_STATUS_TRACK))
|
||||
if (!(gMPlayInfo_SE1.status & MUSICPLAYER_STATUS_TRACK) && !(gMPlayInfo_SE2.status & MUSICPLAYER_STATUS_TRACK))
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 IsBGMPlaying(void)
|
||||
{
|
||||
if (gMPlay_BGM.status & MUSICPLAYER_STATUS_PAUSE)
|
||||
if (gMPlayInfo_BGM.status & MUSICPLAYER_STATUS_PAUSE)
|
||||
return FALSE;
|
||||
if (!(gMPlay_BGM.status & MUSICPLAYER_STATUS_TRACK))
|
||||
if (!(gMPlayInfo_BGM.status & MUSICPLAYER_STATUS_TRACK))
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 IsSpecialSEPlaying(void)
|
||||
{
|
||||
if (gMPlay_SE3.status & MUSICPLAYER_STATUS_PAUSE)
|
||||
if (gMPlayInfo_SE3.status & MUSICPLAYER_STATUS_PAUSE)
|
||||
return FALSE;
|
||||
if (!(gMPlay_SE3.status & MUSICPLAYER_STATUS_TRACK))
|
||||
if (!(gMPlayInfo_SE3.status & MUSICPLAYER_STATUS_TRACK))
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
+5
-5
@@ -240,7 +240,7 @@ static const AffineAnimCmdFunc sAffineAnimCmdFuncs[] =
|
||||
AffineAnimCmd_frame,
|
||||
};
|
||||
|
||||
static const s32 gUnknown_082EC6F4[24] =
|
||||
static const s32 sUnknown_082EC6F4[24] =
|
||||
{
|
||||
8, 8, 0x10, 0x10, 0x20, 0x20,
|
||||
0x40, 0x40, 0x10, 8, 0x20, 8,
|
||||
@@ -1214,14 +1214,14 @@ void obj_update_pos2(struct Sprite* sprite, s32 a1, s32 a2)
|
||||
u8 matrixNum = sprite->oam.matrixNum;
|
||||
if (a1 != 0x800)
|
||||
{
|
||||
var0 = gUnknown_082EC6F4[sprite->oam.size * 8 + sprite->oam.shape * 32];
|
||||
var0 = sUnknown_082EC6F4[sprite->oam.size * 8 + sprite->oam.shape * 32];
|
||||
var1 = var0 << 8;
|
||||
var2 = (var0 << 16) / gOamMatrices[matrixNum].a;
|
||||
sprite->pos2.x = sub_8007E28(var1, var2, a1);
|
||||
}
|
||||
if (a2 != 0x800)
|
||||
{
|
||||
var0 = gUnknown_082EC6F4[4 + (sprite->oam.size * 8 + sprite->oam.shape * 32)];
|
||||
var0 = sUnknown_082EC6F4[4 + (sprite->oam.size * 8 + sprite->oam.shape * 32)];
|
||||
var1 = var0 << 8;
|
||||
var2 = (var0 << 16) / gOamMatrices[matrixNum].d;
|
||||
sprite->pos2.y = sub_8007E28(var1, var2, a2);
|
||||
@@ -1247,7 +1247,7 @@ void obj_update_pos2(struct Sprite* sprite, s32 a1, s32 a2)
|
||||
mov r9, r0\n\
|
||||
cmp r6, r9\n\
|
||||
beq _08007EA2\n\
|
||||
ldr r2, =gUnknown_082EC6F4\n\
|
||||
ldr r2, =sUnknown_082EC6F4\n\
|
||||
lsrs r1, 6\n\
|
||||
lsls r1, 3\n\
|
||||
ldrb r0, [r5, 0x1]\n\
|
||||
@@ -1272,7 +1272,7 @@ void obj_update_pos2(struct Sprite* sprite, s32 a1, s32 a2)
|
||||
_08007EA2:\n\
|
||||
cmp r8, r9\n\
|
||||
beq _08007EDA\n\
|
||||
ldr r2, =gUnknown_082EC6F4\n\
|
||||
ldr r2, =sUnknown_082EC6F4\n\
|
||||
ldrb r1, [r5, 0x3]\n\
|
||||
lsrs r1, 6\n\
|
||||
lsls r1, 3\n\
|
||||
|
||||
+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)
|
||||
|
||||
@@ -265,7 +265,7 @@ static void Task_StarterChoose5(u8 taskId)
|
||||
{
|
||||
u8 spriteId;
|
||||
|
||||
switch (sub_8198C58())
|
||||
switch (ProcessMenuInputNoWrap_())
|
||||
{
|
||||
case 0: // YES
|
||||
// Return the starter choice and exit.
|
||||
|
||||
+2
-2
@@ -2418,12 +2418,12 @@ _08005ABA:\n\
|
||||
strb r0, [r6, #0x9]\n\
|
||||
b _08005A0A\n\
|
||||
_08005ABE:\n\
|
||||
ldr r0, =gMPlay_BGM\n\
|
||||
ldr r0, =gMPlayInfo_BGM\n\
|
||||
bl m4aMPlayStop\n\
|
||||
b _08005A0A\n\
|
||||
.pool\n\
|
||||
_08005ACC:\n\
|
||||
ldr r0, =gMPlay_BGM\n\
|
||||
ldr r0, =gMPlayInfo_BGM\n\
|
||||
bl m4aMPlayContinue\n\
|
||||
b _08005A0A\n\
|
||||
.pool\n\
|
||||
|
||||
+3
-2
@@ -5,6 +5,7 @@
|
||||
#include "blend_palette.h"
|
||||
#include "battle_transition.h"
|
||||
#include "task.h"
|
||||
#include "battle_transition.h"
|
||||
|
||||
// Static type declarations
|
||||
|
||||
@@ -1392,7 +1393,7 @@ static void sub_80A1818(u16 a1)
|
||||
{
|
||||
CpuCopy16(gTilesetAnims_BattleDomePals0[a1 & 0x3], gPlttBufferUnfaded + 0x80, 32);
|
||||
BlendPalette(0x80, 0x10, gPaletteFade.y, gPaletteFade.blendColor & 0x7FFF);
|
||||
if ((u8)FindTaskIdByFunc(sub_8149DFC) != 0xFF )
|
||||
if ((u8)FindTaskIdByFunc(TransitionPhase1_Task_RunFuncs) != 0xFF )
|
||||
{
|
||||
sSecondaryTilesetCB = sub_80A1670;
|
||||
sSecondaryTilesetCBBufferSize = 0x20;
|
||||
@@ -1402,7 +1403,7 @@ static void sub_80A1818(u16 a1)
|
||||
static void sub_80A1884(u16 a1)
|
||||
{
|
||||
CpuCopy16(gTilesetAnims_BattleDomePals0[a1 & 0x3], gPlttBufferUnfaded + 0x80, 32);
|
||||
if ((u8)FindTaskIdByFunc(sub_8149DFC) == 0xFF )
|
||||
if ((u8)FindTaskIdByFunc(TransitionPhase1_Task_RunFuncs) == 0xFF )
|
||||
{
|
||||
BlendPalette(0x80, 0x10, gPaletteFade.y, gPaletteFade.blendColor & 0x7FFF);
|
||||
if (!--sSecondaryTilesetCBBufferSize)
|
||||
|
||||
@@ -0,0 +1,781 @@
|
||||
#include "global.h"
|
||||
#include "trainer_see.h"
|
||||
#include "battle_setup.h"
|
||||
#include "pokemon.h"
|
||||
#include "sprite.h"
|
||||
#include "field_effect.h"
|
||||
#include "field_map_obj.h"
|
||||
#include "field_player_avatar.h"
|
||||
#include "map_obj_8097404.h"
|
||||
#include "pokenav.h"
|
||||
#include "task.h"
|
||||
#include "util.h"
|
||||
#include "script.h"
|
||||
#include "event_data.h"
|
||||
#include "script_movement.h"
|
||||
|
||||
extern bool8 InBattlePyramid(void);
|
||||
extern bool32 InTrainerHill(void);
|
||||
extern bool8 GetBattlePyramidTrainerFlag(u8 mapObjectId);
|
||||
extern bool8 GetTrainerHillTrainerFlag(u8 mapObjectId);
|
||||
extern void sub_809BE48(u16 npcId);
|
||||
|
||||
// this file's functions
|
||||
static u8 CheckTrainer(u8 mapObjectId);
|
||||
static u8 GetTrainerApproachDistance(struct MapObject *trainerObj);
|
||||
static u8 CheckPathBetweenTrainerAndPlayer(struct MapObject *trainerObj, u8 approachDistance, u8 direction);
|
||||
static void TrainerApproachPlayer(struct MapObject *trainerObj, u8 range);
|
||||
static void Task_RunTrainerSeeFuncList(u8 taskId);
|
||||
static void Task_DestroyTrainerApproachTask(u8 taskId);
|
||||
static void SetIconSpriteData(struct Sprite *sprite, u16 fldEffId, u8 spriteAnimNum);
|
||||
|
||||
static u8 GetTrainerApproachDistanceSouth(struct MapObject *trainerObj, s16 range, s16 x, s16 y);
|
||||
static u8 GetTrainerApproachDistanceNorth(struct MapObject *trainerObj, s16 range, s16 x, s16 y);
|
||||
static u8 GetTrainerApproachDistanceWest(struct MapObject *trainerObj, s16 range, s16 x, s16 y);
|
||||
static u8 GetTrainerApproachDistanceEast(struct MapObject *trainerObj, s16 range, s16 x, s16 y);
|
||||
|
||||
static bool8 sub_80B4178(u8 taskId, struct Task *task, struct MapObject *trainerObj);
|
||||
static bool8 sub_80B417C(u8 taskId, struct Task *task, struct MapObject *trainerObj);
|
||||
static bool8 sub_80B41C0(u8 taskId, struct Task *task, struct MapObject *trainerObj);
|
||||
static bool8 sub_80B4200(u8 taskId, struct Task *task, struct MapObject *trainerObj);
|
||||
static bool8 sub_80B425C(u8 taskId, struct Task *task, struct MapObject *trainerObj);
|
||||
static bool8 sub_80B4318(u8 taskId, struct Task *task, struct MapObject *trainerObj);
|
||||
static bool8 sub_80B435C(u8 taskId, struct Task *task, struct MapObject *trainerObj);
|
||||
static bool8 sub_80B4390(u8 taskId, struct Task *task, struct MapObject *trainerObj);
|
||||
static bool8 sub_80B43AC(u8 taskId, struct Task *task, struct MapObject *trainerObj);
|
||||
static bool8 sub_80B43E0(u8 taskId, struct Task *task, struct MapObject *trainerObj);
|
||||
static bool8 sub_80B4438(u8 taskId, struct Task *task, struct MapObject *trainerObj);
|
||||
static bool8 sub_80B44AC(u8 taskId, struct Task *task, struct MapObject *trainerObj);
|
||||
|
||||
static void SpriteCB_TrainerIcons(struct Sprite *sprite);
|
||||
|
||||
// IWRAM common
|
||||
u16 gUnknown_03006080;
|
||||
u8 gUnknown_03006084[4];
|
||||
struct ApproachingTrainer gApproachingTrainers[2];
|
||||
u8 gNoOfApproachingTrainers;
|
||||
u8 gUnknown_030060AC;
|
||||
|
||||
// EWRAM
|
||||
EWRAM_DATA u8 gApproachingTrainerId = 0;
|
||||
|
||||
// const rom data
|
||||
static const u8 sEmotion_ExclamationMarkGfx[] = INCBIN_U8("graphics/misc/emotion_exclamation.4bpp");
|
||||
static const u8 sEmotion_QuestionMarkGfx[] = INCBIN_U8("graphics/misc/emotion_question.4bpp");
|
||||
static const u8 sEmotion_HeartGfx[] = INCBIN_U8("graphics/misc/emotion_heart.4bpp");
|
||||
|
||||
static u8 (*const sDirectionalApproachDistanceFuncs[])(struct MapObject *trainerObj, s16 range, s16 x, s16 y) =
|
||||
{
|
||||
GetTrainerApproachDistanceSouth,
|
||||
GetTrainerApproachDistanceNorth,
|
||||
GetTrainerApproachDistanceWest,
|
||||
GetTrainerApproachDistanceEast,
|
||||
};
|
||||
|
||||
static bool8 (*const sTrainerSeeFuncList[])(u8 taskId, struct Task *task, struct MapObject *trainerObj) =
|
||||
{
|
||||
sub_80B4178,
|
||||
sub_80B417C,
|
||||
sub_80B41C0,
|
||||
sub_80B4200,
|
||||
sub_80B425C,
|
||||
sub_80B4318,
|
||||
sub_80B435C,
|
||||
sub_80B4390,
|
||||
sub_80B43AC,
|
||||
sub_80B43E0,
|
||||
sub_80B4438,
|
||||
sub_80B44AC
|
||||
};
|
||||
|
||||
static bool8 (*const sTrainerSeeFuncList2[])(u8 taskId, struct Task *task, struct MapObject *trainerObj) =
|
||||
{
|
||||
sub_80B43AC,
|
||||
sub_80B43E0,
|
||||
sub_80B4438,
|
||||
sub_80B44AC,
|
||||
};
|
||||
|
||||
static const struct OamData sOamData_Icons =
|
||||
{
|
||||
.y = 0,
|
||||
.affineMode = 0,
|
||||
.objMode = 0,
|
||||
.mosaic = 0,
|
||||
.bpp = 0,
|
||||
.shape = 0,
|
||||
.x = 0,
|
||||
.matrixNum = 0,
|
||||
.size = 1,
|
||||
.tileNum = 0,
|
||||
.priority = 1,
|
||||
.paletteNum = 0,
|
||||
.affineParam = 0,
|
||||
};
|
||||
|
||||
static const struct SpriteFrameImage sSpriteImageTable_ExclamationQuestionMark[] =
|
||||
{
|
||||
{sEmotion_ExclamationMarkGfx, 0x80},
|
||||
{sEmotion_QuestionMarkGfx, 0x80}
|
||||
};
|
||||
|
||||
static const struct SpriteFrameImage sSpriteImageTable_HeartIcon[] =
|
||||
{
|
||||
{sEmotion_HeartGfx, 0x80}
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_Icons1[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 60),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_Icons2[] =
|
||||
{
|
||||
ANIMCMD_FRAME(1, 60),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd *const sSpriteAnimTable_Icons[] =
|
||||
{
|
||||
sSpriteAnim_Icons1,
|
||||
sSpriteAnim_Icons2
|
||||
};
|
||||
|
||||
static const struct SpriteTemplate sSpriteTemplate_ExclamationQuestionMark =
|
||||
{
|
||||
.tileTag = 0xffff,
|
||||
.paletteTag = 0xffff,
|
||||
.oam = &sOamData_Icons,
|
||||
.anims = sSpriteAnimTable_Icons,
|
||||
.images = sSpriteImageTable_ExclamationQuestionMark,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = SpriteCB_TrainerIcons
|
||||
};
|
||||
|
||||
static const struct SpriteTemplate sSpriteTemplate_HeartIcon =
|
||||
{
|
||||
.tileTag = 0xffff,
|
||||
.paletteTag = 0x1004,
|
||||
.oam = &sOamData_Icons,
|
||||
.anims = sSpriteAnimTable_Icons,
|
||||
.images = sSpriteImageTable_HeartIcon,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = SpriteCB_TrainerIcons
|
||||
};
|
||||
|
||||
// code
|
||||
bool8 CheckForTrainersWantingBattle(void)
|
||||
{
|
||||
u8 i;
|
||||
|
||||
gNoOfApproachingTrainers = 0;
|
||||
gApproachingTrainerId = 0;
|
||||
|
||||
for (i = 0; i < MAP_OBJECTS_COUNT; i++)
|
||||
{
|
||||
u8 retVal;
|
||||
|
||||
if (!gMapObjects[i].active)
|
||||
continue;
|
||||
if (gMapObjects[i].trainerType != 1 && gMapObjects[i].trainerType != 3)
|
||||
continue;
|
||||
|
||||
retVal = CheckTrainer(i);
|
||||
if (retVal == 2)
|
||||
break; // two trainers have been found
|
||||
|
||||
if (retVal == 0) // no trainers
|
||||
continue;
|
||||
|
||||
if (gNoOfApproachingTrainers > 1)
|
||||
break;
|
||||
if (GetMonsStateToDoubles_2() != 0) // one trainer found and cant have a double battle
|
||||
break;
|
||||
}
|
||||
|
||||
if (gNoOfApproachingTrainers == 1)
|
||||
{
|
||||
ResetTrainerOpponentIds();
|
||||
ConfigureAndSetUpOneTrainerBattle(gApproachingTrainers[gNoOfApproachingTrainers - 1].mapObjectId,
|
||||
gApproachingTrainers[gNoOfApproachingTrainers - 1].trainerScriptPtr);
|
||||
gUnknown_030060AC = 1;
|
||||
return TRUE;
|
||||
}
|
||||
else if (gNoOfApproachingTrainers == 2)
|
||||
{
|
||||
ResetTrainerOpponentIds();
|
||||
for (i = 0; i < gNoOfApproachingTrainers; i++, gApproachingTrainerId++)
|
||||
{
|
||||
ConfigureTwoTrainersBattle(gApproachingTrainers[i].mapObjectId,
|
||||
gApproachingTrainers[i].trainerScriptPtr);
|
||||
}
|
||||
SetUpTwoTrainersBattle();
|
||||
gApproachingTrainerId = 0;
|
||||
gUnknown_030060AC = 1;
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
gUnknown_030060AC = 0;
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
static u8 CheckTrainer(u8 mapObjectId)
|
||||
{
|
||||
const u8 *scriptPtr;
|
||||
u8 ret = 1;
|
||||
u8 approachDistance;
|
||||
|
||||
if (InTrainerHill() == TRUE)
|
||||
scriptPtr = sub_81D62AC();
|
||||
else
|
||||
scriptPtr = GetFieldObjectScriptPointerByFieldObjectId(mapObjectId);
|
||||
|
||||
if (InBattlePyramid())
|
||||
{
|
||||
if (GetBattlePyramidTrainerFlag(mapObjectId))
|
||||
return 0;
|
||||
}
|
||||
else if (InTrainerHill() == TRUE)
|
||||
{
|
||||
if (GetTrainerHillTrainerFlag(mapObjectId))
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (GetTrainerFlagFromScriptPointer(scriptPtr))
|
||||
return 0;
|
||||
}
|
||||
|
||||
approachDistance = GetTrainerApproachDistance(&gMapObjects[mapObjectId]);
|
||||
|
||||
if (approachDistance != 0)
|
||||
{
|
||||
if (scriptPtr[1] == TRAINER_BATTLE_DOUBLE
|
||||
|| scriptPtr[1] == TRAINER_BATTLE_REMATCH_DOUBLE
|
||||
|| scriptPtr[1] == TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE)
|
||||
{
|
||||
if (GetMonsStateToDoubles_2() != 0)
|
||||
return 0;
|
||||
|
||||
ret = 2;
|
||||
}
|
||||
|
||||
gApproachingTrainers[gNoOfApproachingTrainers].mapObjectId = mapObjectId;
|
||||
gApproachingTrainers[gNoOfApproachingTrainers].trainerScriptPtr = scriptPtr;
|
||||
gApproachingTrainers[gNoOfApproachingTrainers].radius = approachDistance;
|
||||
TrainerApproachPlayer(&gMapObjects[mapObjectId], approachDistance - 1);
|
||||
gNoOfApproachingTrainers++;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static u8 GetTrainerApproachDistance(struct MapObject *trainerObj)
|
||||
{
|
||||
s16 x, y;
|
||||
u8 i;
|
||||
u8 approachDistance;
|
||||
|
||||
PlayerGetDestCoords(&x, &y);
|
||||
if (trainerObj->trainerType == 1) // can only see in one direction
|
||||
{
|
||||
approachDistance = sDirectionalApproachDistanceFuncs[trainerObj->mapobj_unk_18 - 1](trainerObj, trainerObj->trainerRange_berryTreeId, x, y);
|
||||
return CheckPathBetweenTrainerAndPlayer(trainerObj, approachDistance, trainerObj->mapobj_unk_18);
|
||||
}
|
||||
else // can see in all directions
|
||||
{
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
approachDistance = sDirectionalApproachDistanceFuncs[i](trainerObj, trainerObj->trainerRange_berryTreeId, x, y);
|
||||
if (CheckPathBetweenTrainerAndPlayer(trainerObj, approachDistance, i + 1)) // directions are 1-4 instead of 0-3. south north west east
|
||||
return approachDistance;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Returns how far south the player is from trainer. 0 if out of trainer's sight.
|
||||
static u8 GetTrainerApproachDistanceSouth(struct MapObject *trainerObj, s16 range, s16 x, s16 y)
|
||||
{
|
||||
if (trainerObj->coords2.x == x
|
||||
&& y > trainerObj->coords2.y
|
||||
&& y <= trainerObj->coords2.y + range)
|
||||
return (y - trainerObj->coords2.y);
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Returns how far north the player is from trainer. 0 if out of trainer's sight.
|
||||
static u8 GetTrainerApproachDistanceNorth(struct MapObject *trainerObj, s16 range, s16 x, s16 y)
|
||||
{
|
||||
if (trainerObj->coords2.x == x
|
||||
&& y < trainerObj->coords2.y
|
||||
&& y >= trainerObj->coords2.y - range)
|
||||
return (trainerObj->coords2.y - y);
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Returns how far west the player is from trainer. 0 if out of trainer's sight.
|
||||
static u8 GetTrainerApproachDistanceWest(struct MapObject *trainerObj, s16 range, s16 x, s16 y)
|
||||
{
|
||||
if (trainerObj->coords2.y == y
|
||||
&& x < trainerObj->coords2.x
|
||||
&& x >= trainerObj->coords2.x - range)
|
||||
return (trainerObj->coords2.x - x);
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Returns how far east the player is from trainer. 0 if out of trainer's sight.
|
||||
static u8 GetTrainerApproachDistanceEast(struct MapObject *trainerObj, s16 range, s16 x, s16 y)
|
||||
{
|
||||
if (trainerObj->coords2.y == y
|
||||
&& x > trainerObj->coords2.x
|
||||
&& x <= trainerObj->coords2.x + range)
|
||||
return (x - trainerObj->coords2.x);
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define COLLISION_MASK (~1)
|
||||
|
||||
static u8 CheckPathBetweenTrainerAndPlayer(struct MapObject *trainerObj, u8 approachDistance, u8 direction)
|
||||
{
|
||||
s16 x, y;
|
||||
u8 unk19_temp;
|
||||
u8 unk19b_temp;
|
||||
u8 i;
|
||||
u8 collision;
|
||||
|
||||
if (approachDistance == 0)
|
||||
return 0;
|
||||
|
||||
x = trainerObj->coords2.x;
|
||||
y = trainerObj->coords2.y;
|
||||
|
||||
MoveCoords(direction, &x, &y);
|
||||
for (i = 0; i < approachDistance - 1; i++, MoveCoords(direction, &x, &y))
|
||||
{
|
||||
collision = sub_8092C8C(trainerObj, x, y, direction);
|
||||
if (collision != 0 && (collision & COLLISION_MASK))
|
||||
return 0;
|
||||
}
|
||||
|
||||
// preserve mapobj_unk_19 before clearing.
|
||||
unk19_temp = trainerObj->range.as_nybbles.x;
|
||||
unk19b_temp = trainerObj->range.as_nybbles.y;
|
||||
trainerObj->range.as_nybbles.x = 0;
|
||||
trainerObj->range.as_nybbles.y = 0;
|
||||
|
||||
collision = npc_block_way(trainerObj, x, y, direction);
|
||||
|
||||
trainerObj->range.as_nybbles.x = unk19_temp;
|
||||
trainerObj->range.as_nybbles.y = unk19b_temp;
|
||||
if (collision == 4)
|
||||
return approachDistance;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define tFuncId data[0]
|
||||
#define tTrainerRange data[3]
|
||||
#define tOutOfAshSpriteId data[4]
|
||||
#define tTrainerMapObjectId data[7]
|
||||
|
||||
static void TrainerApproachPlayer(struct MapObject *trainerObj, u8 range)
|
||||
{
|
||||
struct Task *task;
|
||||
|
||||
gApproachingTrainers[gNoOfApproachingTrainers].taskId = CreateTask(Task_RunTrainerSeeFuncList, 0x50);
|
||||
task = &gTasks[gApproachingTrainers[gNoOfApproachingTrainers].taskId];
|
||||
task->tTrainerRange = range;
|
||||
task->tTrainerMapObjectId = gApproachingTrainers[gNoOfApproachingTrainers].mapObjectId;
|
||||
}
|
||||
|
||||
static void sub_80B40C8(TaskFunc followupFunc)
|
||||
{
|
||||
u8 taskId;
|
||||
TaskFunc taskFunc;
|
||||
|
||||
if (gApproachingTrainerId == 0)
|
||||
taskId = gApproachingTrainers[0].taskId;
|
||||
else
|
||||
taskId = gApproachingTrainers[1].taskId;
|
||||
|
||||
taskFunc = Task_RunTrainerSeeFuncList;
|
||||
SetTaskFuncWithFollowupFunc(taskId, taskFunc, followupFunc);
|
||||
gTasks[taskId].tFuncId = 1;
|
||||
taskFunc(taskId);
|
||||
}
|
||||
|
||||
static void Task_RunTrainerSeeFuncList(u8 taskId)
|
||||
{
|
||||
struct Task *task = &gTasks[taskId];
|
||||
struct MapObject *trainerObj = &gMapObjects[task->tTrainerMapObjectId];
|
||||
|
||||
if (!trainerObj->active)
|
||||
{
|
||||
SwitchTaskToFollowupFunc(taskId);
|
||||
}
|
||||
else
|
||||
{
|
||||
while (sTrainerSeeFuncList[task->tFuncId](taskId, task, trainerObj));
|
||||
}
|
||||
}
|
||||
|
||||
static bool8 sub_80B4178(u8 taskId, struct Task *task, struct MapObject *trainerObj)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 sub_80B417C(u8 taskId, struct Task *task, struct MapObject *trainerObj)
|
||||
{
|
||||
u8 direction;
|
||||
|
||||
FieldObjectGetLocalIdAndMap(trainerObj, &gFieldEffectArguments[0], &gFieldEffectArguments[1], &gFieldEffectArguments[2]);
|
||||
FieldEffectStart(FLDEFF_EXCLAMATION_MARK_ICON_1);
|
||||
direction = GetFaceDirectionAnimId(trainerObj->mapobj_unk_18);
|
||||
FieldObjectSetSpecialAnim(trainerObj, direction);
|
||||
task->tFuncId++;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static bool8 sub_80B41C0(u8 taskId, struct Task *task, struct MapObject *trainerObj)
|
||||
{
|
||||
if (FieldEffectActiveListContains(FLDEFF_EXCLAMATION_MARK_ICON_1))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
task->tFuncId++;
|
||||
if (trainerObj->animPattern == 57 || trainerObj->animPattern == 58)
|
||||
task->tFuncId = 6;
|
||||
if (trainerObj->animPattern == 63)
|
||||
task->tFuncId = 8;
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
static bool8 sub_80B4200(u8 taskId, struct Task *task, struct MapObject *trainerObj)
|
||||
{
|
||||
if (!(FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(trainerObj)) || FieldObjectClearAnimIfSpecialAnimFinished(trainerObj))
|
||||
{
|
||||
if (task->tTrainerRange)
|
||||
{
|
||||
FieldObjectSetSpecialAnim(trainerObj, GetGoSpeed0AnimId(trainerObj->mapobj_unk_18));
|
||||
task->tTrainerRange--;
|
||||
}
|
||||
else
|
||||
{
|
||||
FieldObjectSetSpecialAnim(trainerObj, 0x3E);
|
||||
task->tFuncId++;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 sub_80B425C(u8 taskId, struct Task *task, struct MapObject *trainerObj)
|
||||
{
|
||||
struct MapObject *playerObj;
|
||||
|
||||
if (FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(trainerObj) && !FieldObjectClearAnimIfSpecialAnimFinished(trainerObj))
|
||||
return FALSE;
|
||||
|
||||
npc_set_running_behaviour_etc(trainerObj, npc_running_behaviour_by_direction(trainerObj->mapobj_unk_18));
|
||||
sub_808F23C(trainerObj, npc_running_behaviour_by_direction(trainerObj->mapobj_unk_18));
|
||||
sub_808F208(trainerObj);
|
||||
|
||||
playerObj = &gMapObjects[gPlayerAvatar.mapObjectId];
|
||||
if (FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(playerObj) && !FieldObjectClearAnimIfSpecialAnimFinished(playerObj))
|
||||
return FALSE;
|
||||
|
||||
sub_808BCE8();
|
||||
FieldObjectSetSpecialAnim(&gMapObjects[gPlayerAvatar.mapObjectId], GetFaceDirectionAnimId(GetOppositeDirection(trainerObj->mapobj_unk_18)));
|
||||
task->tFuncId++;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 sub_80B4318(u8 taskId, struct Task *task, struct MapObject *trainerObj)
|
||||
{
|
||||
struct MapObject *playerObj = &gMapObjects[gPlayerAvatar.mapObjectId];
|
||||
|
||||
if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(playerObj)
|
||||
|| FieldObjectClearAnimIfSpecialAnimFinished(playerObj))
|
||||
SwitchTaskToFollowupFunc(taskId);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 sub_80B435C(u8 taskId, struct Task *task, struct MapObject *trainerObj)
|
||||
{
|
||||
if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(trainerObj)
|
||||
|| FieldObjectClearAnimIfSpecialAnimFinished(trainerObj))
|
||||
{
|
||||
FieldObjectSetSpecialAnim(trainerObj, 0x59);
|
||||
task->tFuncId++;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 sub_80B4390(u8 taskId, struct Task *task, struct MapObject *trainerObj)
|
||||
{
|
||||
if (FieldObjectClearAnimIfSpecialAnimFinished(trainerObj))
|
||||
task->tFuncId = 3;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 sub_80B43AC(u8 taskId, struct Task *task, struct MapObject *trainerObj)
|
||||
{
|
||||
if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(trainerObj)
|
||||
|| FieldObjectClearAnimIfSpecialAnimFinished(trainerObj))
|
||||
{
|
||||
FieldObjectSetSpecialAnim(trainerObj, 0x3E);
|
||||
task->tFuncId++;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 sub_80B43E0(u8 taskId, struct Task *task, struct MapObject *trainerObj)
|
||||
{
|
||||
if (FieldObjectCheckIfSpecialAnimFinishedOrInactive(trainerObj))
|
||||
{
|
||||
gFieldEffectArguments[0] = trainerObj->coords2.x;
|
||||
gFieldEffectArguments[1] = trainerObj->coords2.y;
|
||||
gFieldEffectArguments[2] = gSprites[trainerObj->spriteId].subpriority - 1;
|
||||
gFieldEffectArguments[3] = 2;
|
||||
task->tOutOfAshSpriteId = FieldEffectStart(FLDEFF_POP_OUT_OF_ASH);
|
||||
task->tFuncId++;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 sub_80B4438(u8 taskId, struct Task *task, struct MapObject *trainerObj)
|
||||
{
|
||||
struct Sprite *sprite;
|
||||
|
||||
if (gSprites[task->tOutOfAshSpriteId].animCmdIndex == 2)
|
||||
{
|
||||
trainerObj->mapobj_bit_26 = 0;
|
||||
trainerObj->mapobj_bit_2 = 1;
|
||||
|
||||
sprite = &gSprites[trainerObj->spriteId];
|
||||
sprite->oam.priority = 2;
|
||||
FieldObjectClearAnimIfSpecialAnimFinished(trainerObj);
|
||||
FieldObjectSetSpecialAnim(trainerObj, sub_80934BC(trainerObj->mapobj_unk_18));
|
||||
task->tFuncId++;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 sub_80B44AC(u8 taskId, struct Task *task, struct MapObject *trainerObj)
|
||||
{
|
||||
if (!FieldEffectActiveListContains(FLDEFF_POP_OUT_OF_ASH))
|
||||
task->tFuncId = 3;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
#undef tFuncId
|
||||
#undef tTrainerRange
|
||||
#undef tOutOfAshSpriteId
|
||||
#undef tTrainerMapObjectId
|
||||
|
||||
static void sub_80B44C8(u8 taskId)
|
||||
{
|
||||
struct Task *task = &gTasks[taskId];
|
||||
struct MapObject *mapObj;
|
||||
|
||||
// another mapObj loaded into by loadword?
|
||||
LoadWordFromTwoHalfwords(&task->data[1], (u32 *)&mapObj);
|
||||
if (!task->data[7])
|
||||
{
|
||||
FieldObjectClearAnim(mapObj);
|
||||
task->data[7]++;
|
||||
}
|
||||
sTrainerSeeFuncList2[task->data[0]](taskId, task, mapObj);
|
||||
if (task->data[0] == 3 && !FieldEffectActiveListContains(FLDEFF_POP_OUT_OF_ASH))
|
||||
{
|
||||
npc_set_running_behaviour_etc(mapObj, npc_running_behaviour_by_direction(mapObj->mapobj_unk_18));
|
||||
sub_808F23C(mapObj, npc_running_behaviour_by_direction(mapObj->mapobj_unk_18));
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
else
|
||||
{
|
||||
mapObj->mapobj_bit_7 = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80B4578(struct MapObject *var)
|
||||
{
|
||||
StoreWordInTwoHalfwords(&gTasks[CreateTask(sub_80B44C8, 0)].data[1], (u32)var);
|
||||
}
|
||||
|
||||
void EndTrainerApproach(void)
|
||||
{
|
||||
sub_80B40C8(Task_DestroyTrainerApproachTask);
|
||||
}
|
||||
|
||||
static void Task_DestroyTrainerApproachTask(u8 taskId)
|
||||
{
|
||||
DestroyTask(taskId);
|
||||
EnableBothScriptContexts();
|
||||
}
|
||||
|
||||
void sub_80B45D0(void)
|
||||
{
|
||||
if (gNoOfApproachingTrainers == 2)
|
||||
{
|
||||
if (gApproachingTrainerId == 0)
|
||||
{
|
||||
gApproachingTrainerId++;
|
||||
gSpecialVar_Result = 1;
|
||||
UnfreezeMapObjects();
|
||||
sub_80974D0(gApproachingTrainers[1].mapObjectId);
|
||||
}
|
||||
else
|
||||
{
|
||||
gApproachingTrainerId = 0;
|
||||
gSpecialVar_Result = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
gSpecialVar_Result = 0;
|
||||
}
|
||||
}
|
||||
|
||||
#define sLocalId data[0]
|
||||
#define sMapNum data[1]
|
||||
#define sMapGroup data[2]
|
||||
#define sData3 data[3]
|
||||
#define sData4 data[4]
|
||||
#define sFldEffId data[7]
|
||||
|
||||
u8 FldEff_ExclamationMarkIcon1(void)
|
||||
{
|
||||
u8 spriteId = CreateSpriteAtEnd(&sSpriteTemplate_ExclamationQuestionMark, 0, 0, 0x53);
|
||||
|
||||
if (spriteId != MAX_SPRITES)
|
||||
SetIconSpriteData(&gSprites[spriteId], FLDEFF_EXCLAMATION_MARK_ICON_1, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
u8 FldEff_ExclamationMarkIcon2(void)
|
||||
{
|
||||
u8 spriteId = CreateSpriteAtEnd(&sSpriteTemplate_ExclamationQuestionMark, 0, 0, 0x52);
|
||||
|
||||
if (spriteId != MAX_SPRITES)
|
||||
SetIconSpriteData(&gSprites[spriteId], FLDEFF_EXCLAMATION_MARK_ICON_2, 1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
u8 FldEff_HeartIcon(void)
|
||||
{
|
||||
u8 spriteId = CreateSpriteAtEnd(&sSpriteTemplate_HeartIcon, 0, 0, 0x52);
|
||||
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
struct Sprite *sprite = &gSprites[spriteId];
|
||||
|
||||
SetIconSpriteData(sprite, FLDEFF_HEART_ICON, 0);
|
||||
sprite->oam.paletteNum = 2;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void SetIconSpriteData(struct Sprite *sprite, u16 fldEffId, u8 spriteAnimNum)
|
||||
{
|
||||
sprite->oam.priority = 1;
|
||||
sprite->coordOffsetEnabled = 1;
|
||||
|
||||
sprite->sLocalId = gFieldEffectArguments[0];
|
||||
sprite->sMapNum = gFieldEffectArguments[1];
|
||||
sprite->sMapGroup = gFieldEffectArguments[2];
|
||||
sprite->sData3 = -5;
|
||||
sprite->sFldEffId = fldEffId;
|
||||
|
||||
StartSpriteAnim(sprite, spriteAnimNum);
|
||||
}
|
||||
|
||||
static void SpriteCB_TrainerIcons(struct Sprite *sprite)
|
||||
{
|
||||
u8 mapObjId;
|
||||
|
||||
if (TryGetFieldObjectIdByLocalIdAndMap(sprite->sLocalId, sprite->sMapNum, sprite->sMapGroup, &mapObjId)
|
||||
|| sprite->animEnded)
|
||||
{
|
||||
FieldEffectStop(sprite, sprite->sFldEffId);
|
||||
}
|
||||
else
|
||||
{
|
||||
struct Sprite *mapObjSprite = &gSprites[gMapObjects[mapObjId].spriteId];
|
||||
sprite->sData4 += sprite->sData3;
|
||||
sprite->pos1.x = mapObjSprite->pos1.x;
|
||||
sprite->pos1.y = mapObjSprite->pos1.y - 16;
|
||||
sprite->pos2.x = mapObjSprite->pos2.x;
|
||||
sprite->pos2.y = mapObjSprite->pos2.y + sprite->sData4;
|
||||
if (sprite->sData4)
|
||||
sprite->sData3++;
|
||||
else
|
||||
sprite->sData3 = 0;
|
||||
}
|
||||
}
|
||||
|
||||
#undef sLocalId
|
||||
#undef sMapNum
|
||||
#undef sMapGroup
|
||||
#undef sData3
|
||||
#undef sData4
|
||||
#undef sFldEffId
|
||||
|
||||
u8 GetCurrentApproachingTrainerMapObjectId(void)
|
||||
{
|
||||
if (gApproachingTrainerId == 0)
|
||||
return gApproachingTrainers[0].mapObjectId;
|
||||
else
|
||||
return gApproachingTrainers[1].mapObjectId;
|
||||
}
|
||||
|
||||
u8 GetChosenApproachingTrainerMapObjectId(u8 arrayId)
|
||||
{
|
||||
if (arrayId >= ARRAY_COUNT(gApproachingTrainers))
|
||||
return 0;
|
||||
else if (arrayId == 0)
|
||||
return gApproachingTrainers[0].mapObjectId;
|
||||
else
|
||||
return gApproachingTrainers[1].mapObjectId;
|
||||
}
|
||||
|
||||
void sub_80B4808(void)
|
||||
{
|
||||
struct MapObject *trainerObj;
|
||||
|
||||
if (gUnknown_030060AC == 1)
|
||||
{
|
||||
trainerObj = &gMapObjects[gApproachingTrainers[gUnknown_03006080].mapObjectId];
|
||||
gUnknown_03006084[0] = GetFaceDirectionAnimId(GetOppositeDirection(trainerObj->mapobj_unk_18));
|
||||
gUnknown_03006084[1] = 0xFE;
|
||||
ScriptMovement_StartObjectMovementScript(0xFF, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, gUnknown_03006084);
|
||||
}
|
||||
else
|
||||
{
|
||||
trainerObj = &gMapObjects[gPlayerAvatar.mapObjectId];
|
||||
gUnknown_03006084[0] = GetFaceDirectionAnimId(trainerObj->mapobj_unk_18);
|
||||
gUnknown_03006084[1] = 0xFE;
|
||||
ScriptMovement_StartObjectMovementScript(0xFF, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, gUnknown_03006084);
|
||||
}
|
||||
|
||||
sub_809BE48(0xFF);
|
||||
}
|
||||
@@ -1,5 +1,3 @@
|
||||
|
||||
// Includes
|
||||
#include "global.h"
|
||||
#include "rtc.h"
|
||||
#include "overworld.h"
|
||||
@@ -34,6 +32,7 @@
|
||||
#include "naming_screen.h"
|
||||
#include "malloc.h"
|
||||
#include "region_map.h"
|
||||
#include "constants/region_map_sections.h"
|
||||
#include "decoration.h"
|
||||
#include "secret_base.h"
|
||||
#include "tv.h"
|
||||
@@ -1793,7 +1792,7 @@ void EndMassOutbreak(void)
|
||||
gSaveBlock1Ptr->outbreakDaysLeft = 0;
|
||||
}
|
||||
|
||||
void sub_80ED888(u16 days)
|
||||
void UpdateTVShowsPerDay(u16 days)
|
||||
{
|
||||
|
||||
sub_80ED8B4(days);
|
||||
@@ -6504,7 +6503,7 @@ void DoTVShowTodaysRivalTrainer(void)
|
||||
break;
|
||||
case 1:
|
||||
TV_PrintIntToStringVar(0, show->rivalTrainer.badgeCount);
|
||||
if (FlagGet(CODE_FLAGS + 0x48))
|
||||
if (FlagGet(FLAG_LANDMARK_BATTLE_FRONTIER))
|
||||
{
|
||||
if (show->rivalTrainer.nSilverSymbols || show->rivalTrainer.nGoldSymbols)
|
||||
{
|
||||
@@ -6521,7 +6520,7 @@ void DoTVShowTodaysRivalTrainer(void)
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (FlagGet(CODE_FLAGS + 0x48))
|
||||
if (FlagGet(FLAG_LANDMARK_BATTLE_FRONTIER))
|
||||
{
|
||||
if (show->rivalTrainer.nSilverSymbols || show->rivalTrainer.nGoldSymbols)
|
||||
{
|
||||
|
||||
+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
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
#include "text.h"
|
||||
#include "sound.h"
|
||||
|
||||
static const u8 gUnknown_08616124[] = {1, 2, 4};
|
||||
static const u16 gFont6BrailleGlyphs[] = INCBIN_U16("data/graphics/fonts/font6.fwjpnfont");
|
||||
static const u8 sUnknown_08616124[] = {1, 2, 4};
|
||||
static const u16 sFont6BrailleGlyphs[] = INCBIN_U16("data/graphics/fonts/font6.fwjpnfont");
|
||||
|
||||
static void DecompressGlyphFont6(u16);
|
||||
|
||||
@@ -13,7 +13,7 @@ u16 Font6Func(struct TextPrinter *textPrinter)
|
||||
{
|
||||
u16 char_;
|
||||
struct TextPrinterSubStruct *sub;
|
||||
|
||||
|
||||
sub = &textPrinter->sub_union.sub;
|
||||
switch (textPrinter->state)
|
||||
{
|
||||
@@ -163,15 +163,15 @@ u16 Font6Func(struct TextPrinter *textPrinter)
|
||||
case 4:
|
||||
if (textPrinter->scrollDistance)
|
||||
{
|
||||
if (textPrinter->scrollDistance < gUnknown_08616124[gSaveBlock2Ptr->optionsTextSpeed])
|
||||
if (textPrinter->scrollDistance < sUnknown_08616124[gSaveBlock2Ptr->optionsTextSpeed])
|
||||
{
|
||||
ScrollWindow(textPrinter->subPrinter.windowId, 0, textPrinter->scrollDistance, textPrinter->subPrinter.bgColor | (textPrinter->subPrinter.bgColor << 4));
|
||||
textPrinter->scrollDistance = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
ScrollWindow(textPrinter->subPrinter.windowId, 0, gUnknown_08616124[gSaveBlock2Ptr->optionsTextSpeed], textPrinter->subPrinter.bgColor | (textPrinter->subPrinter.bgColor << 4));
|
||||
textPrinter->scrollDistance -= gUnknown_08616124[gSaveBlock2Ptr->optionsTextSpeed];
|
||||
ScrollWindow(textPrinter->subPrinter.windowId, 0, sUnknown_08616124[gSaveBlock2Ptr->optionsTextSpeed], textPrinter->subPrinter.bgColor | (textPrinter->subPrinter.bgColor << 4));
|
||||
textPrinter->scrollDistance -= sUnknown_08616124[gSaveBlock2Ptr->optionsTextSpeed];
|
||||
}
|
||||
CopyWindowToVram(textPrinter->subPrinter.windowId, 2);
|
||||
}
|
||||
@@ -204,7 +204,7 @@ static void DecompressGlyphFont6(u16 glyph)
|
||||
{
|
||||
const u16 *glyphs;
|
||||
|
||||
glyphs = gFont6BrailleGlyphs + 0x100 * (glyph / 8) + 0x10 * (glyph % 8);
|
||||
glyphs = sFont6BrailleGlyphs + 0x100 * (glyph / 8) + 0x10 * (glyph % 8);
|
||||
DecompressGlyphTile(glyphs, (u16 *)gUnknown_03002F90);
|
||||
DecompressGlyphTile(glyphs + 0x8, (u16 *)(gUnknown_03002F90 + 0x20));
|
||||
DecompressGlyphTile(glyphs + 0x80, (u16 *)(gUnknown_03002F90 + 0x40));
|
||||
|
||||
@@ -0,0 +1,230 @@
|
||||
#include "global.h"
|
||||
#include "main.h"
|
||||
#include "pokeblock.h"
|
||||
#include "malloc.h"
|
||||
#include "palette.h"
|
||||
#include "pokenav.h"
|
||||
#include "unknown_task.h"
|
||||
#include "text.h"
|
||||
#include "bg.h"
|
||||
#include "window.h"
|
||||
#include "text_window.h"
|
||||
|
||||
struct UsePokeblockSubStruct
|
||||
{
|
||||
void (*field_0)(void);
|
||||
void (*callback)(void);
|
||||
struct Pokeblock *pokeblock;
|
||||
struct Pokemon *pokemon;
|
||||
u8 stringBuffer[0x40];
|
||||
u8 field_50;
|
||||
u8 field_51;
|
||||
u8 field_52;
|
||||
u8 field_53;
|
||||
u8 field_54;
|
||||
u8 field_55;
|
||||
u8 field_56;
|
||||
u8 field_57[5];
|
||||
u8 field_5c[5];
|
||||
u8 field_61[5];
|
||||
s16 field_66[5];
|
||||
};
|
||||
|
||||
struct UsePokeblockStruct
|
||||
{
|
||||
u8 field_0[0x7C58];
|
||||
u8 field_7C58[0x378];
|
||||
struct UsePokeblockSubStruct info;
|
||||
};
|
||||
|
||||
extern u16 gKeyRepeatStartDelay;
|
||||
|
||||
// this file's functions
|
||||
void sub_816636C(void (*func)(void));
|
||||
void sub_8166380(void);
|
||||
void sub_816631C(void);
|
||||
void sub_81662C0(void);
|
||||
void sub_8166564(void);
|
||||
void sub_8166304(void);
|
||||
void sub_81668F8(void);
|
||||
void sub_8167420(void);
|
||||
void sub_8167760(void);
|
||||
u8 sub_81672E4(u8 arg0);
|
||||
bool8 sub_8168328(void);
|
||||
bool8 sub_8167930(void);
|
||||
void sub_8167608(u8 arg0);
|
||||
void sub_8167BA0(u16 arg0, u8 copyToVramMode);
|
||||
|
||||
extern const struct BgTemplate gUnknown_085DFCCC[4];
|
||||
extern const struct WindowTemplate gUnknown_085DFCDC[];
|
||||
|
||||
// ram variables
|
||||
EWRAM_DATA struct UsePokeblockSubStruct *gUnknown_0203BC90 = NULL;
|
||||
EWRAM_DATA void (*gUnknown_0203BC94)(void) = NULL;
|
||||
EWRAM_DATA struct Pokeblock *gUnknown_0203BC98 = NULL;
|
||||
EWRAM_DATA u8 gPokeblockMonId = 0;
|
||||
EWRAM_DATA s16 gPokeblockGain = 0;
|
||||
EWRAM_DATA void *gUnknown_0203BCA0 = NULL;
|
||||
EWRAM_DATA void *gUnknown_0203BCA4 = NULL;
|
||||
EWRAM_DATA void *gUnknown_0203BCA8 = NULL;
|
||||
EWRAM_DATA struct UsePokeblockStruct *gUnknown_0203BCAC = NULL;
|
||||
|
||||
// const rom data
|
||||
// todo: make it static once the file is decompiled
|
||||
|
||||
// code
|
||||
void ChooseMonToGivePokeblock(struct Pokeblock *pokeblock, void (*callback)(void))
|
||||
{
|
||||
gUnknown_0203BCAC = AllocZeroed(0x806C);
|
||||
gUnknown_0203BC90 = &gUnknown_0203BCAC->info;
|
||||
gUnknown_0203BC90->pokeblock = pokeblock;
|
||||
gUnknown_0203BC90->callback = callback;
|
||||
sub_816636C(sub_8166380);
|
||||
SetMainCallback2(sub_816631C);
|
||||
}
|
||||
|
||||
void CB2_ReturnAndChooseMonToGivePokeblock(void)
|
||||
{
|
||||
gUnknown_0203BCAC = AllocZeroed(0x806C);
|
||||
gUnknown_0203BC90 = &gUnknown_0203BCAC->info;
|
||||
gUnknown_0203BC90->pokeblock = gUnknown_0203BC98;
|
||||
gUnknown_0203BC90->callback = gUnknown_0203BC94;
|
||||
gPokeblockMonId = sub_81672E4(gPokeblockMonId);
|
||||
gUnknown_0203BC90->field_56 = gPokeblockMonId < 4 ? 0 : 1;
|
||||
sub_816636C(sub_8166380);
|
||||
SetMainCallback2(sub_81662C0);
|
||||
}
|
||||
|
||||
void sub_81662C0(void)
|
||||
{
|
||||
gUnknown_0203BC90->field_0();
|
||||
AnimateSprites();
|
||||
BuildOamBuffer();
|
||||
UpdatePaletteFade();
|
||||
if (gUnknown_0203BC90->field_0 == sub_8166564)
|
||||
{
|
||||
gUnknown_0203BC90->field_50 = 0;
|
||||
SetMainCallback2(sub_8166304);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8166304(void)
|
||||
{
|
||||
sub_81668F8();
|
||||
AnimateSprites();
|
||||
BuildOamBuffer();
|
||||
UpdatePaletteFade();
|
||||
}
|
||||
|
||||
void sub_816631C(void)
|
||||
{
|
||||
gUnknown_0203BC90->field_0();
|
||||
AnimateSprites();
|
||||
BuildOamBuffer();
|
||||
RunTextPrinters();
|
||||
UpdatePaletteFade();
|
||||
}
|
||||
|
||||
void sub_8166340(void)
|
||||
{
|
||||
LoadOam();
|
||||
ProcessSpriteCopyRequests();
|
||||
TransferPlttBuffer();
|
||||
sub_81D2108(gUnknown_0203BCAC->field_7C58);
|
||||
sub_80BA0A8();
|
||||
}
|
||||
|
||||
void sub_816636C(void (*func)(void))
|
||||
{
|
||||
gUnknown_0203BC90->field_0 = func;
|
||||
gUnknown_0203BC90->field_50 = 0;
|
||||
}
|
||||
|
||||
void sub_8166380(void)
|
||||
{
|
||||
switch (gUnknown_0203BC90->field_50)
|
||||
{
|
||||
case 0:
|
||||
gUnknown_0203BCAC->field_0[0x7B10] = 0xFF;
|
||||
sub_81D1ED4(gUnknown_0203BCAC->field_7C58);
|
||||
gUnknown_0203BC90->field_50++;
|
||||
break;
|
||||
case 1:
|
||||
ResetSpriteData();
|
||||
FreeAllSpritePalettes();
|
||||
gUnknown_0203BC90->field_50++;
|
||||
break;
|
||||
case 2:
|
||||
SetVBlankCallback(NULL);
|
||||
CpuFill32(0, (void*)(VRAM), VRAM_SIZE);
|
||||
gUnknown_0203BC90->field_50++;
|
||||
break;
|
||||
case 3:
|
||||
ResetBgsAndClearDma3BusyFlags(0);
|
||||
InitBgsFromTemplates(0, gUnknown_085DFCCC, ARRAY_COUNT(gUnknown_085DFCCC));
|
||||
InitWindows(gUnknown_085DFCDC);
|
||||
DeactivateAllTextPrinters();
|
||||
sub_809882C(0, 0x97, 0xE0);
|
||||
gUnknown_0203BC90->field_50++;
|
||||
break;
|
||||
case 4:
|
||||
gUnknown_0203BC90->field_50++;
|
||||
break;
|
||||
case 5:
|
||||
if (!sub_8168328())
|
||||
{
|
||||
gUnknown_0203BC90->field_50++;
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
gKeyRepeatStartDelay = 20;
|
||||
sub_8167420();
|
||||
gUnknown_0203BC90->field_50++;
|
||||
break;
|
||||
case 7:
|
||||
if (!sub_8167930())
|
||||
{
|
||||
gUnknown_0203BC90->field_50++;
|
||||
}
|
||||
break;
|
||||
case 8:
|
||||
sub_8167608(0);
|
||||
sub_8167760();
|
||||
gUnknown_0203BC90->field_50++;
|
||||
break;
|
||||
case 9:
|
||||
if (!sub_81D312C(&gUnknown_0203BCAC->field_0[0x7B0E]))
|
||||
{
|
||||
gUnknown_0203BC90->field_50++;
|
||||
}
|
||||
break;
|
||||
case 10:
|
||||
gUnknown_0203BC90->field_50++;
|
||||
break;
|
||||
case 11:
|
||||
sub_81D2754(gUnknown_0203BCAC->field_7C58, &gUnknown_0203BCAC->field_0[0x7C6C]);
|
||||
sub_81D20AC(gUnknown_0203BCAC->field_7C58);
|
||||
gUnknown_0203BC90->field_50++;
|
||||
break;
|
||||
case 12:
|
||||
if (!sub_81D20BC(gUnknown_0203BCAC->field_7C58))
|
||||
{
|
||||
sub_81D1F84(gUnknown_0203BCAC->field_7C58, &gUnknown_0203BCAC->field_7C58[0x14], &gUnknown_0203BCAC->field_7C58[0x14]);
|
||||
gUnknown_0203BC90->field_50++;
|
||||
}
|
||||
break;
|
||||
case 13:
|
||||
sub_81D2230(gUnknown_0203BCAC->field_7C58);
|
||||
gUnknown_0203BC90->field_50++;
|
||||
break;
|
||||
case 14:
|
||||
PutWindowTilemap(0);
|
||||
PutWindowTilemap(1);
|
||||
sub_8167BA0(0, 1);
|
||||
gUnknown_0203BC90->field_50++;
|
||||
break;
|
||||
case 15:
|
||||
sub_816636C(sub_8166564);
|
||||
break;
|
||||
}
|
||||
}
|
||||
+1057
File diff suppressed because it is too large
Load Diff
+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