summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2021-06-30 16:49:31 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2021-06-30 16:49:31 -0400
commitd7018c11494561eecd94c93b98a7980a063d7bf8 (patch)
tree9e9590ee66d6f82f015e0ffb7d3fcbc95ed63d67
parent628a4e6bf8290a8c29c0b1f9dc67797e30ccbfbf (diff)
Tidy up ewram.h; yeet some more redundant definitions
-rw-r--r--include/battle.h17
-rw-r--r--include/ewram.h139
-rw-r--r--src/battle/anim/normal.c4
-rw-r--r--src/battle_anim.c6
-rw-r--r--src/battle_controllers.c49
-rw-r--r--src/battle_script_commands.c69
-rw-r--r--src/battle_transition.c5
-rw-r--r--src/berry_blender.c16
-rw-r--r--src/debug/matsuda_debug_menu.c4
-rw-r--r--src/evolution_scene.c6
-rw-r--r--src/shop.c3
-rw-r--r--src/tv.c35
12 files changed, 185 insertions, 168 deletions
diff --git a/include/battle.h b/include/battle.h
index d9080f1fc..878e7cfc6 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -297,9 +297,24 @@ union MultiBuffers
struct MultiBattlePokemonTx multiBattleMons[3];
};
+// Used internally
+struct LinkBattleCommunicationHeader
+{
+ u8 state;
+ u8 activeBattler;
+ u8 battlerAttacker;
+ u8 battlerTarget;
+ u16 size;
+ u8 absentBattlerFlags;
+ u8 effectBattler;
+ u8 data[0];
+};
+
struct BattleStruct /* 0x2000000 */
{
- u8 filler00000[0x16000];
+ u8 filler00000[0x14000];
+ /*0x14000*/ u8 linkSend[0x1000];
+ /*0x15000*/ u8 linkRecv[0x1000];
/*0x16000*/ u8 turnEffectsTracker;
/*0x16001*/ u8 turnEffectsBattlerId;
/*0x16002*/ u8 animTurn;
diff --git a/include/ewram.h b/include/ewram.h
index ab4a1cb1e..79d813a5d 100644
--- a/include/ewram.h
+++ b/include/ewram.h
@@ -21,20 +21,78 @@ extern u8 gSharedMem[];
// battle etc.
// This overlaps with so many things it's not even funny
-// The actual data starts at 0x02016000
+// The actual data starts at 0x02014000
#define eMultiTxBuffer (*(union MultiBuffers *)gSharedMem)
#define gBattleStruct ((struct BattleStruct *) (gSharedMem + 0x0))
+// This macro ensures that any changes to the battle struct
+// definition will not horribly break things in battle.
+#define BSTRUCT_OFF(member) (offsetof(struct BattleStruct, member) + ((u8 *)gBattleStruct - gSharedMem))
+#define BCOMM(buff, member, blockOff, i) (gSharedMem[BSTRUCT_OFF(buff) + offsetof(struct LinkBattleCommunicationHeader, member) + blockOff + i])
+
+// battle_transition.c
+#define TRANSITION_STRUCT (*(struct TransitionData *) (gSharedMem + 0xC000))
+#define eTransitionMugshotDecompBuff (&gSharedMem[0xC03C])
+
+#define ewram16400 (gSharedMem + 0x16400)
+
+// gBattleResources
+#define AI_THINKING_STRUCT ((struct AI_ThinkingStruct *)(gSharedMem + 0x16800))
+#define AI_BATTLE_HISTORY ((struct BattleHistory *) (gSharedMem + 0x16A00))
+#define AI_STACK ((struct AI_Stack *) (gSharedMem + 0x16C00))
+#define eSecretBaseRecord ((struct SecretBaseRecord *)(gSharedMem + 0x17000))
+#define eBattleFlagsArr (*(struct ResourceFlags *)(gSharedMem + 0x17100))
+#define B_BATTLESCRIPTS_STACK ((struct BattleScriptsStack *) (gSharedMem + 0x17110))
+#define B_FUNCTION_STACK ((struct BattleCallbacksStack *) (gSharedMem + 0x17140))
+#define gBattleResources_statsBeforeLvlUp ((struct StatsArray *)(gSharedMem + 0x17180))
+#define gBattleSpriteInfo ((struct BattleSpriteInfo *) (gSharedMem + 0x17800))
+#define ewram17810 ((struct Struct2017810 *) (gSharedMem + 0x17810))
+#define ewram17840 (*(struct Struct2017840 *) (gSharedMem + 0x17840))
+#define ewram17850 ((struct UnknownStruct5 *)(gSharedMem + 0x17850))
+
+#define eBattleAnimPalBackup_Battle ((u16 *)(gSharedMem + 0x18000)) // also: shop.c, battle_anim.c
+
+// Contest
+#define eBattleAnimPalBackup_Contest ((u16 *)(gSharedMem + 0x14800))
+#define eUnzippedContestAudience_Gfx (&gSharedMem[0x15800]) // overlaps other contest vars
+#define eCurContestWinnerSaveIdx (gSharedMem[0x15DDE])
+#define eCurContestWinnerIsForArtist (gSharedMem[0x15DDF])
+#define eCurContestWinner ((*(struct ContestWinner*)(gSharedMem + 0x15DE0)))
+#define eContestPaintingBuffers ((*(struct ContestPaintingBuffers*)(gSharedMem + 0x15E00)))
+#define eEnableContestDebugging (gSharedMem[0x18000])
+#define eContestTempSave (*(struct ContestTempSave *)(gSharedMem + 0x18004))
+#define sContest (*(struct Contest *)(gSharedMem + 0x19204))
+#define sContestantStatus ((struct ContestantStatus *)(gSharedMem + 0x19260))
+#define eContestAppealResults (*(struct ContestAppealMoveResults *)(gSharedMem + 0x192D0))
+#define eContestAI ((struct ContestAIInfo *)(gSharedMem + 0x192E4))
+#define eContestExcitement (*(struct ContestExcitement *)(gSharedMem + 0x19328))
+#define eContestGfxState ((struct ContestGfxState *)(gSharedMem + 0x19338))
+#define gContestResources__moveAnim (*(struct ContestMoveAnim *)(gSharedMem + 0x19348))
+
+// Non-battle allocations
#define namingScreenData (*(struct NamingScreenData *)(gSharedMem + 0x0))
-#define ewramBerryPic (gSharedMem + 0x0)
-#define eMatsudaDebugVar (gSharedMem[0x0])
#define eSaveSection (struct SaveSector *)(gSharedMem + 0x0)
#define eSlotMachine ((struct SlotMachineEwramStruct *)(gSharedMem + 0x0))
#define ePokemonStorageSystem (*(struct PokemonStorageSystemData *)(gSharedMem + 0))
+
+#define ewramSavedItemsPocket ((struct ItemSlot *)(gSharedMem + 0x1E000)) // saved items pocket (for Wally battle)
+#define ewramSavedPokeballsPocket ((struct ItemSlot *)(gSharedMem + 0x1F000)) // saved Pokeballs pocket (for Wally battle)
+
+// party_menu.c
#define ePartyMenu (*(struct Unk2001000 *)(gSharedMem + 0x1000))
+#define eMoveTutorMenu (struct MoveTutorMenu *)(gSharedMem + 0x17000)
+#define ePartyMenu2 (*(struct Unk201B000 *)(gSharedMem + 0x1B000))
+#define gPartyMenu (*(struct PartyMenu *)(gSharedMem + 0x1C000))
+
+// player_pc.c, party_menu.c
+#define eMailboxInfo (*(struct MailboxStruct *)(gSharedMem + 0x1FE00))
+
+// item_menu.c
+#define ewramBerryPic (gSharedMem + 0x0)
#define ewramBerryPicTemp (gSharedMem + 0x1000)
-#define gUnknown_02007000 (*(ewramStruct_02007000 *)(gSharedMem + 0x7000))
// record_mixing.c
+#define eRecordMixTvShows ((union TVShow (*)[TV_SHOWS_COUNT])(gSharedMem + 0x7000))
+#define eRecordMixPokeNews ((struct PokeNews (*)[POKE_NEWS_COUNT])(gSharedMem + 0x7000)) // same addr as above
#define eLinkedDewfordTrendsBuffer ((struct EasyChatPair *)(gSharedMem + 0x7800))
#define eSavedDewfordTrendsBuffer ((struct EasyChatPair *)(gSharedMem + 0x7900))
#define eReceivedRecords (*(struct PlayerRecords *)(gSharedMem + 0x08000))
@@ -52,82 +110,31 @@ extern u8 gSharedMem[];
#define ePokedexCryScreen (*(struct PokedexCryScreen *)(gSharedMem + 0x1C000))
#define ePokedexCryScreen2 (*(struct PokedexCryMeterNeedle *)(gSharedMem + 0x1C800))
-#define ewram9000_hack (void *)(ewram_addr + 0x9000) // TODO: Fix this.
-#define TRANSITION_STRUCT (*(struct TransitionData *) (gSharedMem + 0xC000))
-#define ewramC03C (&gSharedMem[0xC03C])
#define ewram_2010000 (*(struct TradeEwramStruct *)(gSharedMem + 0x10000))
-#define ewram10000 (&gSharedMem[0x10000])
-#define eSlotMachineGfxBuffer (void *)(gSharedMem + 0x10000) // slot machine
-#define ewram11000 (&gSharedMem[0x11000])
-#define ewram13000 (&gSharedMem[0x13000])
-#define eSlotMachineReelTimeGfxBuffer (&gSharedMem[0x13200])
-#define EWRAM_14000 ((u8 *)(gSharedMem + 0x14000))
-#define ewram14000arr(i, data) (gSharedMem[0x14000 + i + data])
-#define ewram14004arr(i, data) (gSharedMem[0x14004 + i + data])
-#define ewram14008arr(i, data) (gSharedMem[0x14008 + data + i])
-#define EWRAM_14800 ((u16 *)(gSharedMem + 0x14800))
+#define eBerryBlenderGfxBuffer (&gSharedMem[0x10000])
+#define eSlotMachineGfxBuffer (void *)(gSharedMem + 0x10000) // slot machine
+#define eSlotMachineReelTimeGfxBuffer (&gSharedMem[0x13200])
#define sEvoInfo ((*(struct EvoInfo*)(gSharedMem + 0x14800)))
-#define EWRAM_15000 ((u8 *)(gSharedMem + 0x15000))
-#define ewram15000arr(i, data) (gSharedMem[0x15000 + data + i])
-
-// Contest
-#define eUnzippedContestAudience_Gfx (&gSharedMem[0x15800]) // overlaps other contest vars
-#define eCurContestWinnerSaveIdx (gSharedMem[0x15DDE])
-#define eCurContestWinnerIsForArtist (gSharedMem[0x15DDF])
-#define eCurContestWinner ((*(struct ContestWinner*)(gSharedMem + 0x15DE0)))
-#define eContestPaintingBuffers ((*(struct ContestPaintingBuffers*)(gSharedMem + 0x15E00)))
-#define eEnableContestDebugging (gSharedMem[0x18000])
-#define eContestTempSave (*(struct ContestTempSave *)(gSharedMem + 0x18004))
-#define sContest (*(struct Contest *)(gSharedMem + 0x19204))
-#define sContestantStatus ((struct ContestantStatus *)(gSharedMem + 0x19260))
-#define eContestAppealResults (*(struct ContestAppealMoveResults *)(gSharedMem + 0x192D0))
-#define eContestAI ((struct ContestAIInfo *)(gSharedMem + 0x192E4))
-#define eContestExcitement (*(struct ContestExcitement *)(gSharedMem + 0x19328))
-#define eContestGfxState ((struct ContestGfxState *)(gSharedMem + 0x19338))
-#define gContestResources__moveAnim (*(struct ContestMoveAnim *)(gSharedMem + 0x19348))
-
-// Battle Struct
-// For matching purposes, the struct is placed at 0x02000000 and
-// there's a ton of filler.
-// This macro ensures that any changes to the battle struct
-// definition will not horribly break things in battle.
-#define BSTRUCT_OFF(member) (offsetof(struct BattleStruct, member) + ((u8 *)gBattleStruct - gSharedMem))
-
-#define ewram16400 (gSharedMem + 0x16400)
-
-// gBattleResources
-#define AI_THINKING_STRUCT ((struct AI_ThinkingStruct *)(gSharedMem + 0x16800))
-#define AI_BATTLE_HISTORY ((struct BattleHistory *) (gSharedMem + 0x16A00))
-#define AI_STACK ((struct AI_Stack *) (gSharedMem + 0x16C00))
-#define eSecretBaseRecord ((struct SecretBaseRecord *)(gSharedMem + 0x17000))
-#define eBattleFlagsArr (*(struct ResourceFlags *)(gSharedMem + 0x17100))
-#define B_BATTLESCRIPTS_STACK ((struct BattleScriptsStack *) (gSharedMem + 0x17110))
-#define B_FUNCTION_STACK ((struct BattleCallbacksStack *) (gSharedMem + 0x17140))
-#define gBattleResources_statsBeforeLvlUp ((struct StatsArray *)(gSharedMem + 0x17180))
// roulette_gfx.c
#define ewram17000 (&gSharedMem[0x17000])
#define ewram17E00 ((u16 *)(gSharedMem + 0x17E00))
#define ewram18000 ((u16 *)(gSharedMem + 0x18000)) // also: shop.c, battle_anim.c
-#define eMoveTutorMenu (struct MoveTutorMenu *)(gSharedMem + 0x17000)
#define eCableCar1 ((struct CableCarEwramStruct1 *)(gSharedMem + 0x17000))
-#define gBattleSpriteInfo ((struct BattleSpriteInfo *) (gSharedMem + 0x17800))
-#define ewram17810 ((struct Struct2017810 *) (gSharedMem + 0x17810))
-#define ewram17840 (*(struct Struct2017840 *) (gSharedMem + 0x17840))
-#define ewram17850 ((struct UnknownStruct5 *)(gSharedMem + 0x17850))
+#define eCableCar2 ((struct CableCarEwramStruct2 *)(gSharedMem + 0x19000))
+
#define eBerryBlenderData (struct BerryBlenderData*)(&gSharedMem[0x18000])
#define eEggHatchData (struct EggHatchData*)(&gSharedMem[0x18000])
+
+// pokemon_summary_screen.c
#define pssData (*(struct PokemonSummaryScreenStruct *)(gSharedMem + 0x18000))
+#define ewram1A000 (&gSharedMem[0x1A000])
// roulette.c
#define ewram18800 ((u16 *)(gSharedMem + 0x18800))
#define eRoulette ((struct Roulette *)(gSharedMem + 0x19000))
-#define eCableCar2 ((struct CableCarEwramStruct2 *)(gSharedMem + 0x19000))
-#define ewram1A000 (&gSharedMem[0x1A000])
-#define ePartyMenu2 (*(struct Unk201B000 *)(gSharedMem + 0x1B000))
-#define gPartyMenu (*(struct PartyMenu *)(gSharedMem + 0x1C000))
#define sCreditsData (*(struct CreditsData *)(gSharedMem + 0x1C000))
// hall_of_fame.c
@@ -145,12 +152,6 @@ extern u8 gSharedMem[];
// decoration.c
#define sDecorationContext (*(struct DecoPCPointers *)(gSharedMem + 0x1f000))
-#define ewramSavedItemsPocket ((struct ItemSlot *)(gSharedMem + 0x1E000)) // saved items pocket (for Wally battle)
-#define ewramSavedPokeballsPocket ((struct ItemSlot *)(gSharedMem + 0x1F000)) // saved Pokeballs pocket (for Wally battle)
-
-// player_pc.c, party_menu.c
-#define eMailboxInfo (*(struct MailboxStruct *)(gSharedMem + 0x1FE00))
-
#define eCutGrassSpriteArray (gSharedMem + 0x1FFF0) // 8 sprite IDs
// reshow_battle_screen.c
diff --git a/src/battle/anim/normal.c b/src/battle/anim/normal.c
index 9a31fcf37..6961dcbc1 100644
--- a/src/battle/anim/normal.c
+++ b/src/battle/anim/normal.c
@@ -1816,7 +1816,7 @@ void sub_80E4028(u8 taskId)
}
offset = gBattleAnimArgs[1] * 32;
- dest = IsContest() ? &((u8 *)EWRAM_14800)[offset] : &((u8 *)ewram18000)[offset];
+ dest = IsContest() ? &((u8 *)eBattleAnimPalBackup_Contest)[offset] : &((u8 *)eBattleAnimPalBackup_Battle)[offset];
// This doesn't match when u16* is used.
memcpy(dest, &((u8 *)gPlttBufferUnfaded)[i * 32], 32);
DestroyAnimVisualTask(taskId);
@@ -1851,7 +1851,7 @@ void sub_80E40D0(u8 taskId)
dest = &((u8 *)gPlttBufferUnfaded)[i * 32];
offset = gBattleAnimArgs[1] * 32;
- src = IsContest() ? &((u8 *)EWRAM_14800)[offset] : &((u8 *)ewram18000)[offset];
+ src = IsContest() ? &((u8 *)eBattleAnimPalBackup_Contest)[offset] : &((u8 *)eBattleAnimPalBackup_Battle)[offset];
// This doesn't match when u16* is used.
memcpy(dest, src, 32);
DestroyAnimVisualTask(taskId);
diff --git a/src/battle_anim.c b/src/battle_anim.c
index 5ee83571b..15883c502 100644
--- a/src/battle_anim.c
+++ b/src/battle_anim.c
@@ -2451,9 +2451,9 @@ static void LoadMoveBg(u16 bgId)
{
void *tilemap = gBattleAnimBackgroundTable[bgId].tilemap;
- LZDecompressWram(tilemap, IsContest() ? EWRAM_14800 : ewram18000);
- sub_80763FC(sub_80789BC(), IsContest() ? EWRAM_14800 : ewram18000, 0x100, 0);
- DmaCopy32Defvars(3, IsContest() ? EWRAM_14800 : ewram18000, (void *)(VRAM + 0xD000), 0x800);
+ LZDecompressWram(tilemap, IsContest() ? eBattleAnimPalBackup_Contest : eBattleAnimPalBackup_Battle);
+ sub_80763FC(sub_80789BC(), IsContest() ? eBattleAnimPalBackup_Contest : eBattleAnimPalBackup_Battle, 0x100, 0);
+ DmaCopy32Defvars(3, IsContest() ? eBattleAnimPalBackup_Contest : eBattleAnimPalBackup_Battle, (void *)(VRAM + 0xD000), 0x800);
LZDecompressVram(gBattleAnimBackgroundTable[bgId].image, (void *)(VRAM + 0x2000));
LoadCompressedPalette(gBattleAnimBackgroundTable[bgId].palette, sub_80789BC() * 16, 32);
}
diff --git a/src/battle_controllers.c b/src/battle_controllers.c
index 02cb59cc4..9c61e74eb 100644
--- a/src/battle_controllers.c
+++ b/src/battle_controllers.c
@@ -413,7 +413,7 @@ static void CreateTasksForSendRecvLinkBuffers(void)
gTasks[sLinkReceiveTaskId].data[15] = 0;
gUnknown_020238C6 = 0;
- CpuFill16(0, EWRAM_14000, 0x2000);
+ CpuFill16(0, &gSharedMem[BSTRUCT_OFF(linkSend)], sizeof(gBattleStruct->linkSend) + sizeof(gBattleStruct->linkRecv));
}
void PrepareBufferDataTransferLink(u8 a, u16 size, u8 *data)
@@ -428,17 +428,17 @@ void PrepareBufferDataTransferLink(u8 a, u16 size, u8 *data)
gTasks[sLinkSendTaskId].data[14] = 0;
}
- ewram14000arr(0, gTasks[sLinkSendTaskId].data[14]) = a;
- ewram14000arr(1, gTasks[sLinkSendTaskId].data[14]) = gActiveBattler;
- ewram14000arr(2, gTasks[sLinkSendTaskId].data[14]) = gBattlerAttacker;
- ewram14000arr(3, gTasks[sLinkSendTaskId].data[14]) = gBattlerTarget;
- ewram14000arr(4, gTasks[sLinkSendTaskId].data[14]) = r9;
- ewram14000arr(5, gTasks[sLinkSendTaskId].data[14]) = (r9 & 0x0000FF00) >> 8;
- ewram14000arr(6, gTasks[sLinkSendTaskId].data[14]) = gAbsentBattlerFlags;
- ewram14000arr(7, gTasks[sLinkSendTaskId].data[14]) = gEffectBattler;
+ BCOMM(linkSend, state, gTasks[sLinkSendTaskId].data[14], 0) = a;
+ BCOMM(linkSend, activeBattler, gTasks[sLinkSendTaskId].data[14], 0) = gActiveBattler;
+ BCOMM(linkSend, battlerAttacker, gTasks[sLinkSendTaskId].data[14], 0) = gBattlerAttacker;
+ BCOMM(linkSend, battlerTarget, gTasks[sLinkSendTaskId].data[14], 0) = gBattlerTarget;
+ BCOMM(linkSend, size, gTasks[sLinkSendTaskId].data[14], 0) = r9;
+ BCOMM(linkSend, size, gTasks[sLinkSendTaskId].data[14], 1) = (r9 & 0x0000FF00) >> 8;
+ BCOMM(linkSend, absentBattlerFlags, gTasks[sLinkSendTaskId].data[14], 0) = gAbsentBattlerFlags;
+ BCOMM(linkSend, effectBattler, gTasks[sLinkSendTaskId].data[14], 0) = gEffectBattler;
for (i = 0; i < size; i++)
- ewram14008arr(i, gTasks[sLinkSendTaskId].data[14]) = data[i];
+ BCOMM(linkSend, data, gTasks[sLinkSendTaskId].data[14], i) = data[i];
gTasks[sLinkSendTaskId].data[14] = gTasks[sLinkSendTaskId].data[14] + r9 + 8;
}
@@ -478,8 +478,8 @@ void Task_HandleSendLinkBuffersData(u8 taskId)
gTasks[taskId].data[12] = 0;
gTasks[taskId].data[15] = 0;
}
- var = (ewram14004arr(0, gTasks[taskId].data[15]) | (ewram14004arr(1, gTasks[taskId].data[15]) << 8)) + 8;
- SendBlock(bitmask_all_link_players_but_self(), &ewram14000arr(0, gTasks[taskId].data[15]), var);
+ var = (BCOMM(linkSend, size, gTasks[taskId].data[15], 0) | (BCOMM(linkSend, size, gTasks[taskId].data[15], 1) << 8)) + 8;
+ SendBlock(bitmask_all_link_players_but_self(), &gSharedMem[BSTRUCT_OFF(linkSend) + gTasks[taskId].data[15]], var);
gTasks[taskId].data[11]++;
}
else
@@ -492,7 +492,7 @@ void Task_HandleSendLinkBuffersData(u8 taskId)
case 4:
if (IsLinkTaskFinished())
{
- var = (ewram14004arr(0, gTasks[taskId].data[15]) | (ewram14004arr(1, gTasks[taskId].data[15]) << 8));
+ var = (BCOMM(linkSend, size, gTasks[taskId].data[15], 0) | (BCOMM(linkSend, size, gTasks[taskId].data[15], 1) << 8));
gTasks[taskId].data[13] = 1;
gTasks[taskId].data[15] = gTasks[taskId].data[15] + var + 8;
gTasks[taskId].data[11] = 3;
@@ -538,7 +538,7 @@ void sub_800C35C(void)
gTasks[sLinkReceiveTaskId].data[14] = 0;
}
//_0800C402
- dest = EWRAM_15000 + gTasks[sLinkReceiveTaskId].data[14];
+ dest = &gSharedMem[BSTRUCT_OFF(linkRecv) + gTasks[sLinkReceiveTaskId].data[14]];
src = (u8 *)recvBuffer;
for (j = 0; j < r6 + 8; j++)
dest[j] = src[j];
@@ -563,28 +563,29 @@ static void Task_HandleCopyReceivedLinkBuffersData(u8 taskId)
gTasks[taskId].data[12] = 0;
gTasks[taskId].data[15] = 0;
}
- battlerId = ewram15000arr(1, gTasks[taskId].data[15]);
- blockSize = ewram15000arr(4, gTasks[taskId].data[15]) | (ewram15000arr(5, gTasks[taskId].data[15]) << 8);
- switch (ewram15000arr(0, gTasks[taskId].data[15]))
+ battlerId = BCOMM(linkRecv, activeBattler, gTasks[taskId].data[15], 0);
+ blockSize = BCOMM(linkRecv, size, gTasks[taskId].data[15], 0)
+ | (BCOMM(linkRecv, size, gTasks[taskId].data[15], 1) << 8);
+ switch (BCOMM(linkRecv, state, gTasks[taskId].data[15], 0))
{
case 0:
if (gBattleControllerExecFlags & gBitTable[battlerId])
return;
- memcpy(gBattleBufferA[battlerId], &ewram15000arr(8, gTasks[taskId].data[15]), blockSize);
+ memcpy(gBattleBufferA[battlerId], &BCOMM(linkRecv, data, gTasks[taskId].data[15], 0), blockSize);
sub_80155A4(battlerId);
if (!(gBattleTypeFlags & BATTLE_TYPE_WILD))
{
- gBattlerAttacker = ewram15000arr(2, gTasks[taskId].data[15]);
- gBattlerTarget = ewram15000arr(3, gTasks[taskId].data[15]);
- gAbsentBattlerFlags = ewram15000arr(6, gTasks[taskId].data[15]);
- gEffectBattler = ewram15000arr(7, gTasks[taskId].data[15]);
+ gBattlerAttacker = BCOMM(linkRecv, battlerAttacker, gTasks[taskId].data[15], 0);
+ gBattlerTarget = BCOMM(linkRecv, battlerTarget, gTasks[taskId].data[15], 0);
+ gAbsentBattlerFlags = BCOMM(linkRecv, absentBattlerFlags, gTasks[taskId].data[15], 0);
+ gEffectBattler = BCOMM(linkRecv, effectBattler, gTasks[taskId].data[15], 0);
}
break;
case 1:
- memcpy(gBattleBufferB[battlerId], &ewram15000arr(8, gTasks[taskId].data[15]), blockSize);
+ memcpy(gBattleBufferB[battlerId], &BCOMM(linkRecv, data, gTasks[taskId].data[15], 0), blockSize);
break;
case 2:
- r2 = ewram15000arr(8, gTasks[taskId].data[15]);
+ r2 = BCOMM(linkRecv, data, gTasks[taskId].data[15], 0);
gBattleControllerExecFlags &= ~(gBitTable[battlerId] << (r2 * 4));
break;
}
diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c
index 454daf1fc..254de3eb3 100644
--- a/src/battle_script_commands.c
+++ b/src/battle_script_commands.c
@@ -95,7 +95,14 @@ extern struct Window gWindowTemplate_Contest_MoveDescription;
extern const u8 BattleText_YesNo[];
extern u8 gPlayerPartyCount;
extern u16 gMoveToLearn; //move to learn
-extern const u8 gTrainerMoney[];
+
+struct TrainerReward
+{
+ u8 trainerClass;
+ u8 baseMoney;
+};
+
+extern const struct TrainerReward gTrainerMoney[];
extern u16 gRandomMove;
extern u8* gBattleScriptsForMoveEffects[];
extern u16 gChosenMove; //last used move in battle
@@ -8182,7 +8189,7 @@ static void atk52_switchineffects(void)
for (i = 0; i < gBattlersCount; i++)
{
- *(HP_ON_SWITCHOUT + GetBattlerSide(i)) = gBattleMons[i].hp;
+ *((u16 *)&gSharedMem[BSTRUCT_OFF(HP_OnSwitchout) + 2 * GetBattlerSide(i)]) = gBattleMons[i].hp;
}
if (T2_READ_8(gBattlescriptCurrInstr + 1) == 5)
@@ -8472,59 +8479,55 @@ static void atk5C_hitanimation(void)
gBattlescriptCurrInstr += 2;
}
-#define MONEY_UNKNOWN ((*(u8*)(ewram_addr + 0x17000 + 0x94)))
-
#ifdef NONMATCHING
static void atk5D_getmoneyreward(void)
{
- int i = 0;
- u8 r5 = 0;
+ u32 i = 0;
+ u8 lvl = 0;
u32 money_to_give;
if (gTrainerBattleOpponent == SECRET_BASE_OPPONENT)
{
- money_to_give = 2 * gBattleStruct->moneyMultiplier * MONEY_UNKNOWN;
+ money_to_give = 20 * eSecretBaseRecord->party.levels[0] * gBattleStruct->moneyMultiplier;
}
else
{
switch(gTrainers[gTrainerBattleOpponent].partyFlags)
{
case 0:
- {
- const struct TrainerMonNoItemDefaultMoves *data = gTrainers[gTrainerBattleOpponent].party.NoItemDefaultMoves;
- r5 = data[gTrainers[gTrainerBattleOpponent].partySize - 1].level;
- }
+ {
+ const struct TrainerMonNoItemDefaultMoves *data = gTrainers[gTrainerBattleOpponent].party.NoItemDefaultMoves;
+ lvl = data[gTrainers[gTrainerBattleOpponent].partySize - 1].level;
+ }
+ break;
+ case 1:
+ {
+ const struct TrainerMonNoItemCustomMoves *data = gTrainers[gTrainerBattleOpponent].party.NoItemCustomMoves;
+ lvl = data[gTrainers[gTrainerBattleOpponent].partySize - 1].level;
+ }
break;
case 2:
- {
- const struct TrainerMonItemDefaultMoves *data = gTrainers[gTrainerBattleOpponent].party.ItemDefaultMoves;
- r5 = data[gTrainers[gTrainerBattleOpponent].partySize - 1].level;
- }
+ {
+ const struct TrainerMonItemDefaultMoves *data = gTrainers[gTrainerBattleOpponent].party.ItemDefaultMoves;
+ lvl = data[gTrainers[gTrainerBattleOpponent].partySize - 1].level;
+ }
break;
- case 1:
case 3:
- {
- const struct TrainerMonItemCustomMoves *data = gTrainers[gTrainerBattleOpponent].party.ItemCustomMoves;
- r5 = data[gTrainers[gTrainerBattleOpponent].partySize - 1].level;
- }
+ {
+ const struct TrainerMonItemCustomMoves *data = gTrainers[gTrainerBattleOpponent].party.ItemCustomMoves;
+ lvl = data[gTrainers[gTrainerBattleOpponent].partySize - 1].level;
+ }
break;
}
- for (; gTrainerMoney[i * 4] != 0xFF && gTrainerMoney[i * 4 + 1] != gTrainers[gTrainerBattleOpponent].trainerClass ; i++) {}
+ for (; gTrainerMoney[i].trainerClass != 0xFF; i++) {
+ if (gTrainerMoney[i].trainerClass == gTrainers[gTrainerBattleOpponent].trainerClass)
+ break;
+ }
- money_to_give = (r5 << 2) * gBattleStruct->moneyMultiplier;
- if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
- money_to_give = 2 * gTrainerMoney[i * 4 + 1] * money_to_give;
- else
- money_to_give = 1 * gTrainerMoney[i * 4 + 1] * money_to_give;
+ money_to_give = 4 * lvl * gBattleStruct->moneyMultiplier * (gBattleTypeFlags & BATTLE_TYPE_DOUBLE ? 2 : 1) * gTrainerMoney[i].baseMoney;
}
AddMoney(&gSaveBlock1.money, money_to_give);
- gBattleTextBuff1[0] = 0xFD;
- gBattleTextBuff1[1] = 1;
- gBattleTextBuff1[2] = 4;
- gBattleTextBuff1[3] = 5;
- T2_WRITE_32(&gBattleTextBuff1[4], money_to_give);
- gBattleTextBuff1[8] = 0xFF;
-
+ PREPARE_WORD_NUMBER_BUFFER(gBattleTextBuff1, 5, money_to_give);
gBattlescriptCurrInstr += 1;
}
#else
diff --git a/src/battle_transition.c b/src/battle_transition.c
index 06979a03a..e459e63be 100644
--- a/src/battle_transition.c
+++ b/src/battle_transition.c
@@ -1732,8 +1732,9 @@ static void Mugshots_CreateOpponentPlayerSprites(struct Task* task)
task->tMugshotOpponentID = CreateTrainerSprite(sMugshotsTrainerPicIDsTable[mugshotID],
sMugshotsOpponentCoords[mugshotID][0] - 32,
sMugshotsOpponentCoords[mugshotID][1] + 42,
- 0, ewramC03C);
- task->tMugshotPlayerID = CreateTrainerSprite(gSaveBlock2.playerGender, 272, 106, 0, ewramC03C);
+ 0,
+ eTransitionMugshotDecompBuff);
+ task->tMugshotPlayerID = CreateTrainerSprite(gSaveBlock2.playerGender, 272, 106, 0, eTransitionMugshotDecompBuff);
opponentSprite = &gSprites[task->tMugshotOpponentID];
playerSprite = &gSprites[task->tMugshotPlayerID];
diff --git a/src/berry_blender.c b/src/berry_blender.c
index 504e094de..35c5a473d 100644
--- a/src/berry_blender.c
+++ b/src/berry_blender.c
@@ -802,7 +802,7 @@ static bool8 sub_804E2EC(void)
switch (gBerryBlenderData->field_1)
{
case 0:
- LZDecompressWram(gUnknown_08E6C100, ewram10000);
+ LZDecompressWram(gUnknown_08E6C100, eBerryBlenderGfxBuffer);
gBerryBlenderData->field_1++;
break;
case 1:
@@ -811,35 +811,35 @@ static bool8 sub_804E2EC(void)
gBerryBlenderData->field_1++;
break;
case 2:
- DmaCopyLarge16(3, ewram10000, (void *)(VRAM + 0x0), 0x2000, 0x1000);
+ DmaCopyLarge16(3, eBerryBlenderGfxBuffer, (void *)(VRAM + 0x0), 0x2000, 0x1000);
gBerryBlenderData->field_1++;
break;
case 3:
- LZDecompressWram(gUnknown_08E6C920, ewram10000);
+ LZDecompressWram(gUnknown_08E6C920, eBerryBlenderGfxBuffer);
gBerryBlenderData->field_1++;
break;
case 4:
- LZDecompressWram(gUnknown_08E6D354, ewram13000);
+ LZDecompressWram(gUnknown_08E6D354, eBerryBlenderGfxBuffer + 0x3000);
gBerryBlenderData->field_1++;
break;
case 5:
- DmaCopy16Defvars(3, ewram10000, (void *)(VRAM + 0xE000), 0x1000);
+ DmaCopy16Defvars(3, eBerryBlenderGfxBuffer + 0x0000, (void *)(VRAM + 0xE000), 0x1000);
gBerryBlenderData->field_1++;
break;
case 6:
- DmaCopy16Defvars(3, ewram11000, (void *)(VRAM + 0xF000), 0x1000);
+ DmaCopy16Defvars(3, eBerryBlenderGfxBuffer + 0x1000, (void *)(VRAM + 0xF000), 0x1000);
gBerryBlenderData->field_1++;
break;
case 7:
{
u16 i;
- u16* palStore = (u16*)(ewram13000);
+ u16* palStore = (u16*)(eBerryBlenderGfxBuffer + 0x3000);
for (i = 0; i < 640; i++)
{
*(palStore + i) |= 0x100;
}
- DmaCopy16Defvars(3, ewram13000, (void *)(VRAM + 0x6000), 0x500);
+ DmaCopy16Defvars(3, eBerryBlenderGfxBuffer + 0x3000, (void *)(VRAM + 0x6000), 0x500);
LoadPalette(sBlenderOuterPal, 0x80, 0x20);
gBerryBlenderData->field_1++;
}
diff --git a/src/debug/matsuda_debug_menu.c b/src/debug/matsuda_debug_menu.c
index 635c225b6..959614caa 100644
--- a/src/debug/matsuda_debug_menu.c
+++ b/src/debug/matsuda_debug_menu.c
@@ -859,7 +859,7 @@ void sub_80AACC4(void)
{
SetDebugMonForContest();
if (!(gIsLinkContest & 1))
- CalculateRound1Points(eMatsudaDebugVar);
+ CalculateRound1Points(gSharedMem[0]);
SetMainCallback2(CB2_StartContest);
}
}
@@ -868,7 +868,7 @@ void sub_80AAD08(struct Sprite *sprite, s8 var2)
{
if (var2 == 1)
{
- eMatsudaDebugVar = sprite->data[3];
+ gSharedMem[0] = sprite->data[3];
SetMainCallback2(sub_80AACC4);
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB(0, 0, 0));
}
diff --git a/src/evolution_scene.c b/src/evolution_scene.c
index f97004422..62073909b 100644
--- a/src/evolution_scene.c
+++ b/src/evolution_scene.c
@@ -269,7 +269,7 @@ void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo,
gTasks[ID].tEvoWasStopped = FALSE;
gTasks[ID].tPartyID = partyID;
- memcpy(ewram9000_hack, &gPlttBufferUnfaded[0x20], 0x60);
+ memcpy((void *)(EWRAM + 0x9000), &gPlttBufferUnfaded[0x20], 0x60);
REG_DISPCNT = DISPCNT_OBJ_ON | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_1D_MAP;
SetHBlankCallback(EvoDummyFunc);
@@ -629,7 +629,7 @@ static void Task_EvolutionScene(u8 taskID)
{
m4aMPlayAllStop();
PlayCry1(gTasks[taskID].tPostEvoSpecies, 0);
- memcpy(&gPlttBufferUnfaded[0x20], ewram9000_hack, 0x60);
+ memcpy(&gPlttBufferUnfaded[0x20], (void *)(EWRAM + 0x9000), 0x60);
BeginNormalPaletteFade(0x1C, 0, 16, 0, RGB(0, 0, 0));
gTasks[taskID].tState++;
}
@@ -995,7 +995,7 @@ static void Task_TradeEvolutionScene(u8 taskID)
if (IsSEPlaying())
{
PlayCry1(gTasks[taskID].tPostEvoSpecies, 0);
- memcpy(&gPlttBufferUnfaded[0x20], ewram9000_hack, 0x60);
+ memcpy(&gPlttBufferUnfaded[0x20], (void *)(EWRAM + 0x9000), 0x60);
BeginNormalPaletteFade(0x1, 0, 16, 0, RGB(0, 0, 0));
gTasks[taskID].tState++;
}
diff --git a/src/shop.c b/src/shop.c
index 34086958e..75d54e459 100644
--- a/src/shop.c
+++ b/src/shop.c
@@ -498,7 +498,8 @@ static void BuyMenuDrawTextboxBG_Restore(void)
for (i = 0; i < 8; i++)
for (j = 0; j < 14; j++)
- gBGTilemapBuffers[1][32 * (i + 12) + j] = ewram18000[0x180 + 32 * i + j] + 0xC3E0;
+ gBGTilemapBuffers[1][32 * (i + 12) + j] =
+ ewram18000[0x180 + 32 * i + j] + 0xC3E0;
}
static void Shop_PrintItemDesc(void)
diff --git a/src/tv.c b/src/tv.c
index 0df2e7c54..9381a592b 100644
--- a/src/tv.c
+++ b/src/tv.c
@@ -2189,12 +2189,6 @@ void sub_80BFD20(void)
RemoveObjectEventByLocalIdAndMap(5, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup);
}
-typedef union ewramStruct_02007000
-{
- TVShow tvshows[4][TV_SHOWS_COUNT];
- struct PokeNews pokeNews[4][POKE_NEWS_COUNT];
-} ewramStruct_02007000;
-
void sub_80BFE24(TVShow arg0[TV_SHOWS_COUNT], TVShow arg1[TV_SHOWS_COUNT], TVShow arg2[TV_SHOWS_COUNT], TVShow arg3[TV_SHOWS_COUNT]);
void sub_80C04A0(void);
@@ -2204,24 +2198,24 @@ void sub_80C0408(void);
void ReceiveTvShowsData(u8 * arg0, u32 arg1 , u8 arg2)
{
u8 i;
- ewramStruct_02007000 *ewramTVShows;
+ union TVShow (*tvShows)[TV_SHOWS_COUNT];
for (i = 0; i < 4; i++)
- memcpy(&gUnknown_02007000.tvshows[i], &arg0[i * arg1], TV_SHOWS_COUNT * sizeof(TVShow));
- ewramTVShows = &gUnknown_02007000;
+ memcpy(eRecordMixTvShows[i], &arg0[i * arg1], TV_SHOWS_COUNT * sizeof(TVShow));
+ tvShows = eRecordMixTvShows;
switch (arg2)
{
case 0:
- sub_80BFE24(gSaveBlock1.tvShows, ewramTVShows->tvshows[1], ewramTVShows->tvshows[2], ewramTVShows->tvshows[3]);
+ sub_80BFE24(gSaveBlock1.tvShows, tvShows[1], tvShows[2], tvShows[3]);
break;
case 1:
- sub_80BFE24(ewramTVShows->tvshows[0], gSaveBlock1.tvShows, ewramTVShows->tvshows[2], ewramTVShows->tvshows[3]);
+ sub_80BFE24(tvShows[0], gSaveBlock1.tvShows, tvShows[2], tvShows[3]);
break;
case 2:
- sub_80BFE24(ewramTVShows->tvshows[0], ewramTVShows->tvshows[1], gSaveBlock1.tvShows, ewramTVShows->tvshows[3]);
+ sub_80BFE24(tvShows[0], tvShows[1], gSaveBlock1.tvShows, tvShows[3]);
break;
case 3:
- sub_80BFE24(ewramTVShows->tvshows[0], ewramTVShows->tvshows[1], ewramTVShows->tvshows[2], gSaveBlock1.tvShows);
+ sub_80BFE24(tvShows[0], tvShows[1], tvShows[2], gSaveBlock1.tvShows);
break;
}
sub_80BF588(gSaveBlock1.tvShows);
@@ -2495,25 +2489,26 @@ void sub_80C06BC(struct PokeNews *[POKE_NEWS_COUNT], struct PokeNews *[POKE_NEWS
void ReceivePokeNewsData(void * a0, u32 a1, u8 a2)
{
- ewramStruct_02007000 *struct02007000;
+ struct PokeNews (* pokeNews)[POKE_NEWS_COUNT];
u8 i;
for (i = 0; i < 4; i++)
- memcpy(gUnknown_02007000.pokeNews[i], a0 + i * a1, 64);
- struct02007000 = &gUnknown_02007000;
+ memcpy(eRecordMixPokeNews[i], a0 + i * a1, 64);
+
+ pokeNews = eRecordMixPokeNews;
switch (a2)
{
case 0:
- sub_80C05C4(gSaveBlock1.pokeNews, struct02007000->pokeNews[1], struct02007000->pokeNews[2], struct02007000->pokeNews[3]);
+ sub_80C05C4(gSaveBlock1.pokeNews, pokeNews[1], pokeNews[2], pokeNews[3]);
break;
case 1:
- sub_80C05C4(struct02007000->pokeNews[0], gSaveBlock1.pokeNews, struct02007000->pokeNews[2], struct02007000->pokeNews[3]);
+ sub_80C05C4(pokeNews[0], gSaveBlock1.pokeNews, pokeNews[2], pokeNews[3]);
break;
case 2:
- sub_80C05C4(struct02007000->pokeNews[0], struct02007000->pokeNews[1], gSaveBlock1.pokeNews, struct02007000->pokeNews[3]);
+ sub_80C05C4(pokeNews[0], pokeNews[1], gSaveBlock1.pokeNews, pokeNews[3]);
break;
case 3:
- sub_80C05C4(struct02007000->pokeNews[0], struct02007000->pokeNews[1], struct02007000->pokeNews[2], gSaveBlock1.pokeNews);
+ sub_80C05C4(pokeNews[0], pokeNews[1], pokeNews[2], gSaveBlock1.pokeNews);
break;
}
sub_80C0750();