summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/battle.h117
-rw-r--r--include/constants/contest.h44
-rw-r--r--include/contest.h228
-rw-r--r--include/contest_internal.h154
-rw-r--r--include/contest_link.h14
-rw-r--r--include/contest_link_80C857C.h14
-rw-r--r--include/contest_link_util.h (renamed from include/contest_link_80C2020.h)12
-rw-r--r--include/contest_painting.h19
-rw-r--r--include/contest_painting_effects.h28
-rw-r--r--include/contest_util.h (renamed from include/script_pokemon_80C4.h)2
-rw-r--r--include/data2.h8
-rw-r--r--include/decompress.h6
-rw-r--r--include/easy_chat.h2
-rw-r--r--include/ewram.h167
-rw-r--r--include/field_effect.h2
-rw-r--r--include/global.h49
-rw-r--r--include/graphics.h8
-rw-r--r--include/image_processing_effects.h53
-rw-r--r--include/link.h2
-rw-r--r--include/menu.h4
-rw-r--r--include/party_menu.h16
-rw-r--r--include/pokedex.h10
-rw-r--r--include/pokedex_cry_screen.h14
-rw-r--r--include/pokemon.h14
-rw-r--r--include/rom_8077ABC.h2
-rw-r--r--include/text.h31
26 files changed, 602 insertions, 418 deletions
diff --git a/include/battle.h b/include/battle.h
index afebbc781..af0a9a43e 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -4,6 +4,7 @@
#include "sprite.h"
#include "constants/battle.h"
#include "battle_setup.h"
+#include "main.h"
#define GET_BATTLER_POSITION(battler) (gBattlerPositions[battler])
#define GET_BATTLER_SIDE(battler) (GetBattlerPosition(battler) & BIT_SIDE)
@@ -281,16 +282,22 @@ struct AI_Stack
u8 size;
};
+struct LinkPartnerHeader
+{
+ u8 versionSignatureLo;
+ u8 versionSignatureHi;
+ u8 vsScreenHealthFlagsLo;
+ u8 vsScreenHealthFlagsHi;
+ struct BattleEnigmaBerry battleEnigmaBerry;
+};
+
struct BattleStruct /* 0x2000000 */
{
- /*0x00000*/ u8 unk0;
- /*0x00001*/ bool8 unk1;
- /*0x00002*/ u8 unk2;
- /*0x00003*/ bool8 unk3;
- u8 filler4[0x15DDA];
- /*0x15DDE*/ u8 unk15DDE;
- /*0x15DDF*/ u8 unk15DDF;
- /*0x15DE0*/ u8 filler15DE0[0x220];
+ /*0x00000*/ union{
+ struct LinkPartnerHeader linkPartnerHeader;
+ struct MultiBattlePokemonTx multiBattleMons[3];
+ } multiBuffer;
+ u8 filler60[0x15FA0];
/*0x16000*/ u8 turnEffectsTracker;
/*0x16001*/ u8 turnEffectsBattlerId;
/*0x16002*/ u8 animTurn;
@@ -330,14 +337,14 @@ struct BattleStruct /* 0x2000000 */
/*0x16064*/ u8 unk16064[4];
/*0x16068*/ u8 monToSwitchIntoId[MAX_BATTLERS_COUNT];
/*0x1606C*/ u8 unk1606C[4][3];
- /*0x16078*/ u8 unk16078;
+ /*0x16078*/ u8 runTries;
/*0x16079*/ u8 caughtNick[11];
- /*0x16084*/ u8 unk16084;
+ /*0x16084*/ u8 battleStyle;
/*0x16085*/ u8 unk16085;
- /*0x16086*/ u8 unk16086;
- /*0x16087*/ u8 unk16087;
+ /*0x16086*/ u8 safariGoNearCounter;
+ /*0x16087*/ u8 safariPkblThrowCounter;
/*0x16088*/ u8 safariFleeRate;
- /*0x16089*/ u8 unk16089;
+ /*0x16089*/ u8 safariCatchFactor;
/*0x1608A*/ u8 unk1608A;
/*0x1608B*/ u8 unk1608B;
/*0x1608C*/ u8 ChosenMoveID[4];
@@ -366,34 +373,15 @@ struct BattleStruct /* 0x2000000 */
/*0x160A9*/ u8 unk160A9;
/*0x160AA*/ u8 unk160Aa;
/*0x160AB*/ u8 unk160Ab;
- /*0x160AC*/ u8 unk160AC;
- /*0x160AD*/ u8 unk160AD;
- /*0x160AE*/ u8 unk160AE;
- /*0x160AF*/ u8 unk160AF;
- /*0x160B0*/ u8 unk160B0;
- /*0x160B1*/ u8 unk160B1;
- /*0x160B2*/ u8 unk160B2;
- /*0x160B3*/ u8 unk160B3;
- /*0x160B4*/ u8 unk160B4;
- /*0x160B5*/ u8 unk160B5;
- /*0x160B6*/ u8 unk160B6;
- /*0x160B7*/ u8 unk160B7;
- /*0x160B8*/ u8 unk160B8;
- /*0x160B9*/ u8 unk160B9;
- /*0x160BA*/ u8 unk160Ba;
- /*0x160BB*/ u8 unk160Bb;
+ /*0x160AC*/ u16 lastTakenMove[4 * 2];
/*0x160BC*/ u16 HP_OnSwitchout[2];
/*0x160C0*/ u8 unk160C0;
/*0x160C1*/ u8 hpScale;
- /*0x160C2*/ u8 unk160C2;
- /*0x160C3*/ u8 unk160C3;
- /*0x160C4*/ u8 unk160C4;
- /*0x160C5*/ u8 unk160C5;
- /*0x160C6*/ u8 unk160C6;
- /*0x160C7*/ u8 unk160C7;
+ /*0x160C2*/ u16 unk160C2;
+ /*0x160C4*/ MainCallback unk160C4;
/*0x160C8*/ u8 AI_monToSwitchIntoId[2];
/*0x160CA*/ u8 synchroniseEffect;
- /*0x160CB*/ u8 linkPlayerIndex;
+ /*0x160CB*/ u8 multiplayerId;
/*0x160CC*/ u16 usedHeldItems[4];
/*0x160D4*/ u8 unk160D4;
/*0x160D5*/ u8 unk160D5;
@@ -413,22 +401,8 @@ struct BattleStruct /* 0x2000000 */
/*0x160E5*/ u8 unk160E5;
/*0x160E6*/ u8 unk160E6;
/*0x160E7*/ u8 atkCancellerTracker;
- /*0x160E8*/ u8 unk160E8;
- /*0x160E9*/ u8 unk160E9;
- /*0x160EA*/ u8 unk160EA;
- /*0x160EB*/ u8 unk160EB;
- /*0x160EC*/ u8 unk160EC;
- /*0x160ED*/ u8 unk160ED;
- /*0x160EE*/ u8 unk160EE;
- /*0x160EF*/ u8 unk160EF;
- /*0x160F0*/ u8 unk160F0;
- /*0x160F1*/ u8 unk160F1;
- /*0x160F2*/ u8 unk160F2;
- /*0x160F3*/ u8 unk160F3;
- /*0x160F4*/ u8 unk160F4;
- /*0x160F5*/ u8 unk160F5;
- /*0x160F6*/ u8 unk160F6;
- /*0x160F7*/ u8 unk160F7;
+ /*0x160E8*/ u16 choicedMove[4];
+ /*0x160F0*/ u16 changedItems[4];
/*0x160F8*/ u8 unk160F8;
/*0x160F9*/ u8 unk160F9;
/*0x160FA*/ u8 unk160FA;
@@ -437,26 +411,11 @@ struct BattleStruct /* 0x2000000 */
/*0x160FD*/ u8 unk160FD;
/*0x160FE*/ u8 unk160FE;
/*0x160FF*/ u8 unk160FF;
- /*0x16100*/ u8 unk16100;
- /*0x16101*/ u8 unk16101;
- /*0x16102*/ u8 unk16102;
- /*0x16103*/ u8 unk16103;
- /*0x16104*/ u8 unk16104;
- /*0x16105*/ u8 unk16105;
- /*0x16106*/ u8 unk16106;
- /*0x16107*/ u8 unk16107;
- /*0x16108*/ u8 unk16108;
- /*0x16109*/ u8 unk16109;
- /*0x1610A*/ u8 unk1610A;
- /*0x1610B*/ u8 unk1610B;
- /*0x1610C*/ u8 unk1610C;
- /*0x1610D*/ u8 unk1610D;
- /*0x1610E*/ u8 unk1610E;
- /*0x1610F*/ u8 unk1610F;
+ /*0x16100*/ u8 lastTakenMoveFrom[2 * 2 * 4];
/*0x16110*/ u8 wishPerishSongState;
/*0x16111*/ u8 wishPerishSongBattlerId;
- /*0x16112*/ u8 unk16112;
- /*0x16113*/ u8 unk16113;
+ /*0x16112*/ u8 multihitMoveEffect;
+ /*0x16113*/ u8 givenExpMons;
/*0x16114*/ u8 unk16114;
/*0x16115*/ u8 unk16115;
/*0x16116*/ u8 unk16116;
@@ -474,18 +433,18 @@ struct BattleStruct /* 0x2000000 */
/* 0x16A00 */ struct BattleHistory unk_2016A00_2;
};
-struct Struct2017100
+struct ResourceFlags
{
u32 arr[4];
};
-struct Struct2017800
+struct BattleSpriteInfo
{
u8 invisible:1;
- u8 unk0_1:1;
+ u8 lowHpSong:1;
u8 substituteSprite:1;
- u8 unk0_3:1;
- u8 unk0_4:1;
+ u8 flag_x8:1;
+ u8 hpNumbersNoBars:1;
u16 transformedSpecies;
};
@@ -529,8 +488,6 @@ struct Struct20238C8
u8 unk0_7:1;
};
-#define gBattleResources_statsBeforeLvlUp ((struct StatsArray *)(gSharedMem + 0x17180))
-
#define GET_MOVE_TYPE(move, typeArg) \
{ \
if (gBattleStruct->dynamicMoveType) \
@@ -659,7 +616,7 @@ void sub_800D6D4();
void ApplyPlayerChosenFrameToBattleMenu();
void DrawMainBattleBackground(void);
void LoadBattleTextboxAndBackground();
-void sub_800DE30(u8);
+void InitLinkBattleVsScreen(u8);
void DrawBattleEntryBackground();
// src/battle_2.o
@@ -667,7 +624,7 @@ void CB2_InitBattle(void);
void CB2_InitBattleInternal(void);
void CB2_HandleStartBattle(void);
void sub_800F104(void);
-void sub_800F298(void);
+void CB2_HandleStartMultiBattle(void);
void BattleMainCB2(void);
void sub_800F838(struct Sprite *);
u8 CreateNPCTrainerParty(struct Pokemon *, u16);
@@ -688,7 +645,7 @@ void objc_dp11b_pingpong(struct Sprite *);
void nullsub_41(void);
void sub_8010800(void);
void BattleMainCB1(void);
-void sub_8010874(void);
+void BattleStartClearSetData(void);
void bc_8012FAC(void);
void sub_8011384(void);
void bc_801333C(void);
diff --git a/include/constants/contest.h b/include/constants/contest.h
new file mode 100644
index 000000000..e960809cc
--- /dev/null
+++ b/include/constants/contest.h
@@ -0,0 +1,44 @@
+#ifndef POKERUBY_CONSTANTS_CONTEST_H
+#define POKERUBY_CONSTANTS_CONTEST_H
+
+
+#define CONTEST_AI_CHECK_BAD_MOVE (1 << 0)
+#define CONTEST_AI_CHECK_COMBO (1 << 1)
+#define CONTEST_AI_CHECK_BORING (1 << 2)
+#define CONTEST_AI_CHECK_EXCITEMENT (1 << 3)
+#define CONTEST_AI_CHECK_ORDER (1 << 4)
+#define CONTEST_AI_CHECK_GOOD_MOVE (1 << 5)
+#define CONTEST_AI_ERRATIC (1 << 6)
+#define CONTEST_AI_DUMMY_1 (1 << 7)
+#define CONTEST_AI_DUMMY_2 (1 << 8)
+#define CONTEST_AI_DUMMY_3 (1 << 9)
+#define CONTEST_AI_DUMMY_4 (1 << 10)
+#define CONTEST_AI_DUMMY_5 (1 << 11)
+#define CONTEST_AI_DUMMY_6 (1 << 12)
+#define CONTEST_AI_DUMMY_7 (1 << 13)
+#define CONTEST_AI_DUMMY_8 (1 << 14)
+#define CONTEST_AI_DUMMY_9 (1 << 15)
+#define CONTEST_AI_DUMMY_10 (1 << 16)
+#define CONTEST_AI_DUMMY_11 (1 << 17)
+#define CONTEST_AI_DUMMY_12 (1 << 18)
+#define CONTEST_AI_DUMMY_13 (1 << 19)
+#define CONTEST_AI_DUMMY_14 (1 << 20)
+#define CONTEST_AI_DUMMY_15 (1 << 21)
+#define CONTEST_AI_DUMMY_16 (1 << 22)
+#define CONTEST_AI_DUMMY_17 (1 << 23)
+#define CONTEST_AI_DUMMY_18 (1 << 24)
+#define CONTEST_AI_DUMMY_19 (1 << 25)
+#define CONTEST_AI_DUMMY_20 (1 << 26)
+#define CONTEST_AI_DUMMY_21 (1 << 27)
+#define CONTEST_AI_DUMMY_22 (1 << 28)
+#define CONTEST_AI_DUMMY_23 (1 << 29)
+#define CONTEST_AI_DUMMY_24 (1 << 30)
+#define CONTEST_AI_DUMMY_25 (1 << 31)
+
+// The below scripts are used by every AI contest opponent
+// It includes every non-dummy script
+#define CONTEST_AI_COMMON (CONTEST_AI_CHECK_BAD_MOVE | CONTEST_AI_CHECK_COMBO | CONTEST_AI_CHECK_BORING | \
+ CONTEST_AI_CHECK_EXCITEMENT | CONTEST_AI_CHECK_ORDER | CONTEST_AI_CHECK_GOOD_MOVE | CONTEST_AI_ERRATIC | \
+ CONTEST_AI_DUMMY_1 | CONTEST_AI_DUMMY_2 | CONTEST_AI_DUMMY_3 | CONTEST_AI_DUMMY_4 | CONTEST_AI_DUMMY_5)
+
+#endif //POKERUBY_CONSTANTS_CONTEST_H
diff --git a/include/contest.h b/include/contest.h
index bf2613fe3..ff1492e81 100644
--- a/include/contest.h
+++ b/include/contest.h
@@ -13,6 +13,38 @@ enum
enum
{
+ CONTEST_WINNER_ARTIST,
+ CONTEST_WINNER_NORMAL,
+ CONTEST_WINNER_SUPER,
+ CONTEST_WINNER_HYPER_1,
+ CONTEST_WINNER_HYPER_2,
+ CONTEST_WINNER_HYPER_3,
+ CONTEST_WINNER_MASTER_1,
+ CONTEST_WINNER_MASTER_2,
+ CONTEST_WINNER_MASTER_3,
+ NUM_CONTEST_HALL_WINNERS = CONTEST_WINNER_MASTER_3,
+ MUSEUM_CONTEST_WINNERS_START = CONTEST_WINNER_MASTER_3,
+ CONTEST_WINNER_MUSEUM_COOL,
+ CONTEST_WINNER_MUSEUM_BEAUTY,
+ CONTEST_WINNER_MUSEUM_CUTE,
+ CONTEST_WINNER_MUSEUM_SMART,
+ CONTEST_WINNER_MUSEUM_TOUGH,
+};
+
+enum
+{
+ CONTEST_RANK_NORMAL,
+ CONTEST_RANK_SUPER,
+ CONTEST_RANK_HYPER,
+ CONTEST_RANK_MASTER,
+ CONTEST_RANK_LINK
+};
+
+#define CONTEST_SAVE_FOR_MUSEUM ((u8)-1)
+#define CONTEST_SAVE_FOR_ARTIST ((u8)-2)
+
+enum
+{
CONTEST_EFFECT_HIGHLY_APPEALING,
CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES,
@@ -263,130 +295,127 @@ void CB2_StartContest(void);
void Contest_CreatePlayerMon(u8);
void Contest_InitAllPokemon(u8, u8);
u8 CanMonParticipateInContest(struct Pokemon *party);
-u16 InitContestMonConditionI(u8, u8);
-void InitContestMonConditions(u8);
+u16 CalculateContestantRound1Points(u8, u8);
+void CalculateRound1Points(u8);
u8 IsSpeciesNotUnown(u16);
-void sub_80AF668(void);
-void sub_80B0F28(u8);
+void CalculateFinalScores(void);
+void SortContestants(u8);
bool8 Contest_SaveWinner(u8);
-u8 sub_80B2C4C(u8, u8);
+u8 GetContestWinnerSaveIdx(u8, u8);
void Contest_ResetWinners(void);
s8 Contest_GetMoveExcitement(u16);
// Contest Shared EWRAM
-struct Shared18000
+struct ContestTempSave
{
- /*0x18000*/ u8 unk18000;
- /*0x18001*/ u8 filler18001[3];
- /*0x18004*/ u16 unk18004[16][16];
- /*0x18204*/ u16 unk18204[0x200];
- /*0x18604*/ u16 unk18604[0x200];
- /*0x18A04*/ u8 unk18A04[0x800];
+ /*0x18004*/ u16 cachedWindowPalettes[16][16];
+ /*0x18204*/ u16 cachedPlttBufferUnfaded[0x200];
+ /*0x18604*/ u16 cachedPlttBufferFaded[0x200];
+ /*0x18A04*/ u8 savedJunk[0x800];
};
struct Contest
{
/*0x19204*/ u8 playerMoveChoice;
- /*0x19205*/ u8 turnNumber;
+ /*0x19205*/ u8 appealNumber;
/*0x19206*/ u8 unk19206[4]; // seems to only be used by an unref function
- /*0x1920A*/ u16 unk1920A_0:1; // Task active flags?
- u16 unk1920A_1:1;
- u16 unk1920A_2:1;
- u16 unk1920A_3:1;
- u16 unk1920A_4:1;
- u16 unk1920A_5:1;
- u16 unk1920A_6:1;
- u16 unk1920A_7:1;
- /*0x1920B*/ u16 unk1920B_0:1;
- u16 unk1920B_1:1;
- u16 unk1920B_2:1;
+ /*0x1920A*/ bool16 unk1920A_0:1; // Task active flags?
+ bool16 unk1920A_1:1;
+ bool16 unk1920A_2:1;
+ bool16 unk1920A_3:1;
+ bool16 waitForJudgeSpeechBubble:1;
+ bool16 isShowingApplauseMeter:1;
+ bool16 applauseMeterIsMoving:1;
+ bool16 animatingAudience:1;
+ /*0x1920B*/ bool16 waitForAudienceBlend:1;
+ bool16 sliderHeartsAnimating:1;
+ bool16 waitForLink:1;
/*0x1920C*/ u8 mainTaskId;
/*0x1920D*/ u8 unk1920D[4];
- /*0x19211*/ u8 unk19211;
- /*0x19212*/ u8 unk19212;
+ /*0x19211*/ u8 judgeAttentionTaskId;
+ /*0x19212*/ u8 blendTaskId;
/*0x19213*/ u8 filler19213;
- /*0x19214*/ u8 unk19214;
- /*0x19215*/ u8 unk19215;
- /*0x19216*/ u8 unk19216; // sprite ID
+ /*0x19214*/ u8 turnNumber;
+ /*0x19215*/ u8 currentContestant;
+ /*0x19216*/ u8 judgeSpeechBubbleSpriteId;
/*0x19217*/ s8 applauseLevel;
- /*0x19218*/ u8 unk19218[4];
- /*0x1921C*/ u32 unk1921C; // saved RNG value?
- u16 unk19220[5][4]; // move history?
- u8 unk19248[5][4]; // excitement history
+ /*0x19218*/ u8 prevTurnOrder[4];
+ /*0x1921C*/ u32 unusedRng; // saved RNG value?
+ u16 moveHistory[5][4]; // move history?
+ u8 excitementHistory[5][4]; // excitement history
u8 applauseMeterSpriteId; // sprite ID
- /*0x1925D*/ u8 unk1925D;
- /*0x1925E*/ u8 unk1925E;
+ /*0x1925D*/ u8 contestSetupState;
+ /*0x1925E*/ u8 moveAnimTurnCount;
};
struct ContestantStatus
{
- /*0x00*/ s16 appeal1; // move appeal?
- /*0x02*/ s16 appeal2; // final appeal after end of turn, maybe?
- /*0x04*/ s16 unk4;
+ /*0x00*/ s16 baseAppeal;
+ /*0x02*/ s16 appeal;
+ /*0x04*/ s16 pointTotal;
/*0x06*/ u16 currMove;
/*0x08*/ u16 prevMove;
/*0x0A*/ u8 moveCategory;
- /*0x0B*/ u8 unkB_0:2;
- u8 unkB_2:2;
+ /*0x0B*/ u8 ranking:2;
+ u8 unkB_2:2; // unused
u8 moveRepeatCount:3;
- u8 noMoreTurns:1; // used a one-time move?
- /*0x0C*/ u8 nervous:1;
+ bool8 noMoreTurns:1; // used a one-time move?
+ /*0x0C*/ bool8 nervous:1;
u8 numTurnsSkipped:2;
/*0x0D*/ s8 condition;
/*0x0E*/ u8 jam;
/*0x0F*/ u8 jamReduction;
// Flags set by move effect
- /*0x10*/ u8 resistant:1;
- u8 immune:1;
- u8 moreEasilyStartled:1;
- u8 usedRepeatableMove:1;
+ /*0x10*/ bool8 resistant:1;
+ bool8 immune:1;
+ bool8 moreEasilyStartled:1;
+ bool8 usedRepeatableMove:1;
u8 conditionMod:2; // 1: just raised condition; 2: appeal greatly improved by condition
u8 turnOrderMod:2; // 1: defined; 2: random
/*0x11*/ u8 turnOrderModAction:2; // 1: made first; 2: made last; 3: made random
- u8 turnSkipped:1;
- u8 exploded:1;
- u8 overrideCategoryExcitementMod:1;
- u8 appealTripleCondition:1;
+ bool8 turnSkipped:1;
+ bool8 exploded:1;
+ bool8 overrideCategoryExcitementMod:1;
+ bool8 appealTripleCondition:1;
/*0x12*/ u8 jamSafetyCount;
/*0x13*/ u8 effectStringId; // status action?
/*0x14*/ u8 effectStringId2;
- /*0x15*/ u8 disappointedRepeat:1;
- u8 unk15_1:1;
- u8 unk15_2:1;
- u8 unk15_3:1;
- u8 hasJudgesAttention:1;
- u8 judgesAttentionWasRemoved:1;
- u8 unk15_6:1;
- /*0x16*/ u8 unk16;
- /*0x17*/ u8 unk17;
- /*0x18*/ u8 unk18;
+ /*0x15*/ bool8 repeatedMove:1;
+ bool8 unk15_1:1; // unused
+ bool8 repeatedPrevMove:1;
+ bool8 completedComboFlag:1;
+ bool8 hasJudgesAttention:1;
+ bool8 judgesAttentionWasRemoved:1;
+ bool8 usedComboMove:1;
+ /*0x16*/ u8 completedCombo;
+ /*0x17*/ u8 comboAppealBonus;
+ /*0x18*/ u8 repeatJam;
/*0x19*/ u8 nextTurnOrder; // turn position
/*0x1A*/ u8 attentionLevel; // How much the Pokemon "stood out"
- /*0x1B*/ u8 unk1B;
+ /*0x1B*/ u8 contestantAnimTarget;
};
-// possibly the same as UnknownContestStruct3?
-struct UnknownContestStruct4
+struct ContestGfxState
{
- u8 unk0; // sprite ID
- u8 unk1; // sprite ID
- u8 unk2_0:1;
- u8 unk2_1:1;
- u8 unk2_2:1;
+ u8 sliderHeartSpriteId;
+ u8 nextTurnSpriteId;
+ bool8 sliderUpdating:1;
+ bool8 boxBlinking:1;
+ bool8 updatingAppealHearts:1;
};
-struct UnknownContestStruct5
+struct ContestExcitement
{
- s8 bits_0; // current move excitement?
- u8 excitementFrozen:1;
+ s8 moveExcitement;
+ bool8 excitementFrozen:1;
u8 excitementFreezer:3;
- s8 unk2;
+ s8 excitementAppealBonus;
};
-struct UnknownContestStruct7
+struct ContestAppealMoveResults
{
u8 turnOrder[4];
s16 jam;
@@ -396,49 +425,36 @@ struct UnknownContestStruct7
u8 contestant;
};
-struct UnknownContestStruct8
+struct ContestMoveAnim
{
- u16 unk0;
- u16 unk2;
- u8 unk4_0:1;
- u8 unk5;
- u32 unk8;
- u32 unkC;
+ u16 species;
+ u16 targetSpecies;
+ bool8 hasTargetAnim :1;
+ u8 contestant;
+ u32 personality;
+ u32 otId;
u32 unk10;
};
-struct UnknownContestStruct6
+struct ContestFinalStandings
{
- s32 unk0;
- s32 unk4;
- s32 unk8;
- s32 unkC;
+ s32 totalPoints;
+ s32 round1Points;
+ s32 random;
+ s32 contestant;
};
-// TODO: Please move these to ewram.h once the defines are settled down and figured out completely.
-#define shared15800 (gSharedMem + 0x15800)
-#define shared15DE0 (*(struct ContestWinner *)(gSharedMem + 0x15DE0))
-#define shared16800 (gSharedMem + 0x16800)
-#define shared18000 (*(struct Shared18000 *)(gSharedMem + 0x18000))
-#define shared18004 ((u16 *)(gSharedMem + 0x18004))
-#define sContest (*(struct Contest *)(gSharedMem + 0x19204))
-#define sContestantStatus ((struct ContestantStatus *)(gSharedMem + 0x19260))
-#define shared192E4 (gSharedMem + 0x192E4)
-#define shared19328 (*(struct UnknownContestStruct5 *)(gSharedMem + 0x19328))
-#define shared19338 ((struct UnknownContestStruct4 *)(gSharedMem + 0x19338))
-#define shared19348 (*(struct UnknownContestStruct8 *)(gSharedMem + 0x19348))
-
extern u8 gContestPlayerMonIndex;
extern u8 gIsLinkContest;
extern u32 gContestRngValue;
-extern u8 gUnknown_02038696[4];
-extern s16 gContestMonConditions[4];
-extern s16 gUnknown_02038678[4];
-extern s16 gUnknown_02038680[4];
-extern s16 gUnknown_02038688[4];
+extern u8 gContestantTurnOrder[4];
+extern s16 gContestMonRound1Points[4];
+extern s16 gContestMonTotalPoints[4];
+extern s16 gContestMonAppealPointTotals[4];
+extern s16 gContestMonRound2Points[4];
extern u8 gContestFinalStandings[4];
-extern u8 gUnknown_02038696[4];
-extern u8 gUnknown_0203869B;
+extern u8 gContestantTurnOrder[4];
+extern u8 gContestLinkLeaderIndex;
extern u16 gSpecialVar_ContestRank;
extern u16 gSpecialVar_ContestCategory;
extern u8 gContestMonPartyIndex;
@@ -447,7 +463,7 @@ void SetContestantEffectStringID(u8 a, u8 b);
void SetContestantEffectStringID2(u8 a, u8 b);
void MakeContestantNervous(u8 p);
bool8 Contest_IsMonsTurnDisabled(u8 a);
-bool8 sub_80B214C(u8 a);
+bool8 IsContestantAllowedToCombo(u8 contestant);
void SetStartledString(u8 a, u8 b);
#endif // GUARD_CONTEST_H
diff --git a/include/contest_internal.h b/include/contest_internal.h
new file mode 100644
index 000000000..1c9e875ea
--- /dev/null
+++ b/include/contest_internal.h
@@ -0,0 +1,154 @@
+#ifndef GUARD_CONTEST_INTERNAL_H
+#define GUARD_CONTEST_INTERNAL_H
+
+void InitContestResources(void);
+void Task_StartContestWaitFade(u8 taskId);
+void Task_TryStartLinkContest(u8 taskId);
+void Task_CommunicateMonIdxs(u8 taskId);
+void Task_EndCommunicateMonIdxs(u8 taskId);
+void Task_ReadyStartLinkContest(u8 taskId);
+u8 SetupContestGraphics(u8 *a);
+void Task_WaitToRaiseCurtainAtStart(u8 taskId);
+void Task_RaiseCurtainAtStart(u8 taskId);
+void ContestMainCallback2(void);
+void ContestVBlankCallback(void);
+void Task_DisplayAppealNumberText(u8 taskId);
+void sub_80ABC3C(u8);
+void Task_TryShowMoveSelectScreen(u8 taskId);
+void Task_ShowMoveSelectScreen(u8 taskId);
+void Task_HandleMoveSelectInput(u8 taskId);
+void DrawMoveSelectArrow(s8 a);
+void EraseMoveSelectArrow(s8 a); // nullsub
+void Task_SelectedMove(u8 taskId);
+void Task_EndCommunicateMoveSelections(u8 taskId);
+void Task_HideMoveSelectScreen(u8 taskId);
+void Task_HideApplauseMeterForAppealStart(u8 taskId);
+void Task_WaitHideApplauseMeterForAppealStart(u8 taskId);
+void Task_AppealSetup(u8 taskId);
+void Task_DoAppeals(u8 taskId);
+void Task_EndWaitForLink(u8 taskId);
+void SpriteCB_MonSlideIn(struct Sprite *sprite);
+void SpriteCB_MonSlideOut(struct Sprite *sprite);
+void Task_FinishRoundOfAppeals(u8 taskId);
+void Task_ReadyUpdateHeartSliders(u8 taskId);
+void Task_UpdateHeartSliders(u8 taskId);
+void Task_WaitForHeartSliders(u8 taskId);
+void sub_80ADB04(u8 taskId);
+void Task_WaitBeforePrintRoundResult(u8 taskId);
+void Task_PrintRoundResultText(u8 taskId);
+void Task_WaitPrintRoundResultText(u8 taskId);
+void Task_ReUpdateHeartSliders(u8 taskId);
+void Task_WaitForHeartSlidersAgain(u8 taskId);
+void Task_DropCurtainAtRoundEnd(u8 taskId);
+void Task_TryStartNextRoundOfAppeals(u8 taskId);
+void Task_StartNewRoundOfAppeals(u8 taskId);
+void Task_EndAppeals(u8 taskId);
+void Task_WaitForOutOfTimeMsg(u8 taskId);
+void Task_DropCurtainAtAppealsEnd(u8 taskId);
+void Task_TryCommunicateFinalStandings(u8 taskId);
+void Task_CommunicateFinalStandings(u8 taskId);
+void Task_EndCommunicateFinalStandings(u8 taskId);
+void Task_ContestReturnToField(u8 taskId);
+void FieldCB_ContestReturnToField(void);
+void InsertStringDigit(u8 *, s32);
+bool8 IsPlayerLinkLeader(void);
+void __copy_tilemap(void *);
+void PrintContestantTrainerName(u8 contestant);
+void PrintContestantTrainerNameWithColor(u8 contestant, u8 color);
+void PrintContestantMonName(u8 contestant);
+void PrintContestantMonNameWithColor(u8 contestant, u8 color);
+u8 CreateJudgeSprite(void);
+u8 CreateJudgeSpeechBubbleSprite(void);
+u8 CreateContestantSprite(u16, u32, u32);
+void SwapMoveDescAndContestTilemaps(void);
+void PrintContestMoveDescription(u16);
+void Contest_ClearMoveDescriptionBox(void);
+bool8 UpdateConditionStars(u8, u8);
+bool8 DrawStatusSymbol(u8);
+void DrawStatusSymbols(void);
+void ContestClearGeneralTextWindow(void);
+u16 GetChosenMove(u8);
+void GetAllChosenMoves(void);
+void sub_80AF2A0(u8);
+void RankContestants(void);
+void SetAttentionLevels(void);
+s16 GetContestantRound2Points(u8 a);
+void DetermineFinalStandings(void);
+bool8 DidContestantPlaceHigher(s32 a, s32 b, struct ContestFinalStandings *c);
+void ContestPrintLinkStandby(void);
+void Task_unused_80AF94C(u8 taskId);
+void FillContestantWindowBgs(void);
+u16 GetAppealHeartTileOffset(u8 a);
+s8 GetNumHeartsFromAppealPoints(s16 a);
+u8 UpdateAppealHearts(s16 startAppeal, s16 appealDelta, u8 contestant);
+void Task_UpdateAppealHearts(u8 taskId);
+void CreateSliderHeartSprites(void);
+void UpdateHeartSliders(void);
+bool8 SlidersDoneUpdating(void);
+void sub_80AFF60(struct Sprite *);
+void SetBottomSliderHeartsInvisibility(bool8);
+void CreateNextTurnSprites(void);
+void CreateApplauseMeterSprite(void);
+void nullsub_18(s8);
+void sub_80B0238(struct Sprite *);
+void sub_80B0280(struct Sprite *);
+void sub_80B02A8(struct Sprite *);
+void sub_80B02F4(struct Sprite *);
+void CreateJudgeAttentionEyeTask(void);
+void sub_80B03A8(u8);
+void sub_80B03D8(u8);
+void sub_80B0458(u8);
+void CreateUnusedBlendTask(void);
+void InitUnusedBlendTaskData(u8 contestant);
+void UpdateBlendTaskContestantData(u8 contestant);
+void nullsub_19(int);
+void Task_UnusedBlend(u8 taskId);
+void Task_UnusedBrokenBlend(u8 taskId);
+void StartStopFlashJudgeAttentionEye(u8);
+u8 CreateContestantBoxBlinkSprites(u8);
+void BlinkContestantBox(u8, bool8);
+void SpriteCB_BlinkContestantBox(struct Sprite *);
+void SpriteCB_EndBlinkContestantBox(struct Sprite *);
+void Unused_EndBlinkingState(u8 a, int unused);
+void ContestDebugTogglePointTotal(void);
+void ContestDebugDoPrint(void);
+void DrawContestantWindows(void);
+void CalculateAppealMoveImpact(u8 contestant);
+void PrintAppealMoveResultText(u8, u8);
+void ApplyNextTurnOrder(void);
+void DoJudgeSpeechBubble(u8);
+void UpdateApplauseMeter(void);
+u8 StartApplauseOverflowAnimation(void);
+void Task_ApplauseOverflowAnimation(u8);
+void SlideApplauseMeterIn(void);
+void Task_SlideApplauseMeterIn(u8);
+void SlideApplauseMeterOut(void);
+void Task_SlideApplauseMeterOut(u8);
+void ShowAndUpdateApplauseMeter(s8);
+void Task_ShowAndUpdateApplauseMeter(u8);
+void AnimateAudience(void);
+void Task_AnimateAudience(u8);
+void BlendAudienceBackground(s8 excitementDir, s8 blendDir);
+void Task_BlendAudienceBackground(u8 taskId);
+void ShowHideNextTurnGfx(bool8 a);
+const u8 *GetTurnOrderNumberGfx(u8);
+void DrawUnnervedSymbols(void);
+void SetBgForCurtainDrop(void);
+void UpdateContestantBoxOrder(void);
+void Task_StartDropCurtainAtRoundEnd(u8 taskId);
+void Task_UpdateCurtainDropAtRoundEnd(u8 taskId);
+void Task_ResetForNextRound(u8 taskId);
+void Task_WaitRaiseCurtainAtRoundEnd(u8 taskId);
+void Task_StartRaiseCurtainAtRoundEnd(u8 taskId);
+void AnimateSliderHearts(u8 animId);
+void Task_WaitForSliderHeartAnim(u8 taskId);
+u16 SanitizeMove(u16 move);
+u16 SanitizeSpecies(u16 species);
+void SetMoveSpecificAnimData(u8 contestant);
+void ClearMoveAnimData(u8 contestant);
+void SetMoveAnimAttackerData(u8 contestant);
+void CreateInvisibleBattleTargetSprite(void);
+void SetBattleTargetSpritePosition(void);
+void SelectContestMoveBankTarget(u16);
+
+#endif //GUARD_CONTEST_INTERNAL_H
diff --git a/include/contest_link.h b/include/contest_link.h
new file mode 100644
index 000000000..3bd5fa2bb
--- /dev/null
+++ b/include/contest_link.h
@@ -0,0 +1,14 @@
+#ifndef GUARD_CONTEST_LINK_H
+#define GUARD_CONTEST_LINK_H
+
+void sub_80C8734(u8 taskId);
+void Task_LinkContest_CommunicateRng(u8 taskId);
+void Task_LinkContest_CommunicateMonIdxs(u8 taskId);
+void Task_LinkContest_CommunicateLeaderIds(u8 taskId);
+void Task_LinkContest_CommunicateRound1Points(u8 taskId);
+void Task_LinkContest_CommunicateTurnOrder(u8 taskId);
+u8 GetStringLanguage(const u8 *string);
+void Task_LinkContest_Init(u8 taskId);
+void Task_LinkContest_CommunicateCategory(u8 taskId);
+
+#endif // GUARD_CONTEST_LINK_H
diff --git a/include/contest_link_80C857C.h b/include/contest_link_80C857C.h
deleted file mode 100644
index 15f41fe7f..000000000
--- a/include/contest_link_80C857C.h
+++ /dev/null
@@ -1,14 +0,0 @@
-#ifndef GUARD_CONTEST_LINK_80C857C_H
-#define GUARD_CONTEST_LINK_80C857C_H
-
-void sub_80C8734(u8);
-void sub_80C88AC(u8);
-void sub_80C89DC(u8);
-void sub_80C8E1C(u8);
-void sub_80C8EBC(u8);
-void sub_80C8F34(u8);
-u8 GetStringLanguage(const u8 *string);
-void sub_80C8604(u8 taskId);
-void sub_80C8938(u8 taskId);
-
-#endif // GUARD_CONTEST_LINK_80C857C_H
diff --git a/include/contest_link_80C2020.h b/include/contest_link_util.h
index 5b1390ce1..8c527f971 100644
--- a/include/contest_link_80C2020.h
+++ b/include/contest_link_util.h
@@ -1,15 +1,15 @@
-#ifndef GUARD_CONTEST_LINK_80C2020_H
-#define GUARD_CONTEST_LINK_80C2020_H
+#ifndef GUARD_CONTEST_LINK_UTIL_H
+#define GUARD_CONTEST_LINK_UTIL_H
void sub_80C2358(void);
void Contest_GetTrainerNameI_StringVar1(void);
void Contest_GetNicknameI_StringVar1(void);
void sub_80C48C8(void);
-void sub_80C48F4(void);
+void Contest_GetSpeciesNameI_StringVar1(void);
void sub_80C4940(void);
-void sub_80C4980(u8);
-u8 sub_80C4B34(u8 *);
+void ContestLinkTransfer(u8 category);
+u8 LinkContest_GetLeaderIndex(u8 *a0);
void Contest_CopyAndConvertTrainerName_Intl(u8 *, const u8 *);
void Contest_CopyAndConvertNicknameI_Intl(u8 *, u8);
-#endif // GUARD_CONTEST_LINK_80C2020_H
+#endif // GUARD_CONTEST_LINK_UTIL_H
diff --git a/include/contest_painting.h b/include/contest_painting.h
index 81535ec8b..fda6e963a 100644
--- a/include/contest_painting.h
+++ b/include/contest_painting.h
@@ -32,21 +32,10 @@ enum
CONTESTRESULT_TOUGH = 6,
};
-struct Unk2015E00
+struct ContestPaintingBuffers
{
- u16 unk2015e00[128][32];
- u16 unk2017e00[0];
-};
-
-struct ContestEntry
-{
- /*0x00*/ u32 personality;
- /*0x04*/ u32 otId;
- /*0x08*/ u16 species;
- /*0x0A*/ u8 contestType;
- /*0x0B*/ u8 pokemon_name[POKEMON_NAME_LENGTH];
- /*0x15*/ u8 pad15;
- /*0x16*/ u8 trainer_name[OT_NAME_LENGTH];
+ u16 pixels[0x1000];
+ u16 palette[0x100];
};
struct LabelPair
@@ -55,7 +44,7 @@ struct LabelPair
const u8 *suffix;
};
-void sub_8106630(u32);
+void SetContestWinnerForPainting(u32 contestWinnerId);
void CB2_ContestPainting(void);
#endif
diff --git a/include/contest_painting_effects.h b/include/contest_painting_effects.h
deleted file mode 100644
index 8b99ba692..000000000
--- a/include/contest_painting_effects.h
+++ /dev/null
@@ -1,28 +0,0 @@
-#ifndef GUARD_CUTE_SKETCH_H
-#define GUARD_CUTE_SKETCH_H
-
-struct Unk03005E20
-{
- u8 var_0;
- u8 pad1[3];
- u16 (*var_4)[][32];
- u16 *var_8;
- u8 pad0C[4];
- u16 (*var_10)[][32];
- u16 var_14;
- u16 var_16;
- u8 var_18;
- u8 var_19;
- u8 var_1A;
- u8 var_1B;
- u8 var_1C;
- u8 var_1D;
- u8 var_1E;
- u8 var_1F;
-};
-
-void sub_80FC7A0(struct Unk03005E20 *);
-void sub_80FD8CC(struct Unk03005E20 *);
-void sub_80FDA18(struct Unk03005E20 *);
-
-#endif // GUARD_CUTE_SKETCH_H
diff --git a/include/script_pokemon_80C4.h b/include/contest_util.h
index fab07994e..a22bd9548 100644
--- a/include/script_pokemon_80C4.h
+++ b/include/contest_util.h
@@ -6,7 +6,7 @@ void sub_80C5580(void);
void SetBattleTowerPlayerParty(void);
void ReducePlayerPartyToThree(void);
-u8 sub_80C4D50(void);
+u8 CountPlayerMuseumPaintings(void);
void ShowContestWinner(void);
void ScrSpecial_HealPlayerParty();
u8 ScriptGiveMon(u16, u8, u16, u32, u32, u8);
diff --git a/include/data2.h b/include/data2.h
index ed23a10ce..c5c8a42fb 100644
--- a/include/data2.h
+++ b/include/data2.h
@@ -21,9 +21,9 @@ extern const struct SpriteFrameImage gSpriteImageTable_81E7A30[];
extern const struct SpriteFrameImage gSpriteImageTable_81E7A50[];
extern const struct SpriteFrameImage gSpriteImageTable_81E7A70[];
extern const union AffineAnimCmd *const gSpriteAffineAnimTable_81E7B70[];
-extern const union AffineAnimCmd *const gSpriteAffineAnimTable_81E7BEC[];
+extern const union AffineAnimCmd *const gAffineAnims_BattleSpriteOpponentSide[];
-extern const union AffineAnimCmd *const gSpriteAffineAnimTable_81E7C18[];
+extern const union AffineAnimCmd *const gAffineAnims_BattleSpriteContest[];
extern const union AnimCmd *const gSpriteAnimTable_81E7C64[];
extern const struct MonCoords gMonFrontPicCoords[];
extern const struct MonCoords gMonBackPicCoords[];
@@ -48,8 +48,8 @@ extern const u8 gUnknown_081F96C8[];
extern const struct CompressedSpriteSheet gUnknown_081FAEA4;
extern const struct CompressedSpritePalette gUnknown_081FAEAC;
extern const struct SpriteTemplate gSpriteTemplate_81FAF0C;
-extern u8 *const gUnknown_081FAF4C[];
-//extern u8 (*const gUnknown_081FAF4C[])[0x800];
+extern u8 *const gMonSpriteGfx_Sprite_ptr[];
+//extern u8 (*const gMonSpriteGfx_Sprite_ptr[])[0x800];
extern const struct BattleMove gBattleMoves[];
// data/graphics/trainers/front_pic_coords.inc
diff --git a/include/decompress.h b/include/decompress.h
index a97dd78f1..5bf992217 100644
--- a/include/decompress.h
+++ b/include/decompress.h
@@ -10,8 +10,10 @@ void LoadCompressedObjectPicOverrideBuffer(const struct CompressedSpriteSheet *s
void LoadCompressedObjectPalette(const struct CompressedSpritePalette *src);
void LoadCompressedObjectPaletteOverrideBuffer(const struct CompressedSpritePalette *src, void *buffer);
void DecompressPicFromTable_2(const struct CompressedSpriteSheet *a, u8 coords, u8 y_offset, void *d, void *dest, s32 species);
-void HandleLoadSpecialPokePic(const struct CompressedSpriteSheet *spriteSheet, u32 coords, u32 y_offset, u32 d, void *dest, s32 species, u32 pid);
-void LoadSpecialPokePic(const struct CompressedSpriteSheet *spriteSheet, u32 coords, u32 y_offset, u32 d, void *dest, s32 species, u32 pid, u32 frontOrBack);
+void HandleLoadSpecialPokePic(const struct CompressedSpriteSheet *src, u32 coords, u32 y_offset,
+ void *decompBuf, void *dest, s32 species, u32 pid);
+void LoadSpecialPokePic(const struct CompressedSpriteSheet *src, u32 b, u32 c,
+ void *decompBuffer, void *dest, s32 species, u32 pid, u32 frontOrBack);
void Unused_LZDecompressWramIndirect(const void **src, void *dest);
#endif // GUARD_DECOMPRESS_H
diff --git a/include/easy_chat.h b/include/easy_chat.h
index 729bc0b62..468902e4c 100644
--- a/include/easy_chat.h
+++ b/include/easy_chat.h
@@ -18,7 +18,7 @@ struct Shared1000
u16 *unk4;
u8 unk8;
u8 unk9;
- u8 unkA; // length of unkC array
+ u8 unkA; // length of contestant array
u8 unkB; // reporter talked to (Gabby or Ty)
u16 unkC[9];
void (*unk20)(void);
diff --git a/include/ewram.h b/include/ewram.h
index da544f5c2..e7fb25d71 100644
--- a/include/ewram.h
+++ b/include/ewram.h
@@ -2,12 +2,14 @@
#define GUARD_EWRAM_H
extern u8 gSharedMem[];
-#define ewram_addr 0x02000000 // used in gSharedMem addr hacks
+#define ewram_addr EWRAM // used in gSharedMem addr hacks
// Note: we have duplicate ewram labels because its clear some memory
// regions overlap others but have different definitions. Until some
// dupes can be determined to be the same, they will be deliberate
// seperated.
+#define gDecompressionBuffer (gSharedMem + 0x1E000)
+
#define eDroughtPaletteData (*(struct WeatherPaletteData *)gSharedMem)
#define gBattleStruct ((struct BattleStruct *) (gSharedMem + 0x0))
#define ewram0_2 (*(struct Struct2000000 *)(gSharedMem + 0x0))
@@ -17,16 +19,13 @@ extern u8 gSharedMem[];
#define ewram0_5 (*(struct UnkStruct *)(gSharedMem + 0x0))
#define eMatsudaDebugVar (gSharedMem[0x0])
#define eBrendanSprite (gSharedMem + 0x0)
-#define ewram0_6 (u32)(&gSharedMem[0])
#define ewram0_7 (&gSharedMem[0])
#define eSaveSection (struct SaveSector *)(gSharedMem + 0x0)
#define ewram0arr ((u8 (*)[32])gSharedMem)
#define eVoidSharedArr (void *)(ewram_addr + 0x0)
-#define eVoidSharedArr2 (u32)(ewram_addr) // ew(ram)
#define eSlotMachine ((struct SlotMachineEwramStruct *)(gSharedMem + 0x0))
#define ewram0_9(i) (u8 *)(ewram_addr + (i * 0x20))
#define ePokemonStorageSystem (*(struct PokemonStorageSystemData *)(gSharedMem + 0))
-#define ewram4 (*(struct UnknownStruct8 *)(gSharedMem + 0x4))
#define ewram520 ((struct UnknownStruct7 *)(gSharedMem + 0x00520))
#define ewram520_2 (u8 *)(ewram_addr + 0x520)
#define eMaySprite (gSharedMem + 0x800)
@@ -41,42 +40,29 @@ extern u8 gSharedMem[];
#define ARRAY_2007800 ((struct EasyChatPair *)(gSharedMem + 0x7800))
#define ARRAY_2007900 ((struct EasyChatPair *)(gSharedMem + 0x7900))
#define ewram_2008000 (*(struct PlayerRecords *)(gSharedMem + 0x08000))
-#define ewram8000 (&gSharedMem[0x8000])
-#define ePokedexPalAddr1 (void *)(gSharedMem + 0x8000)
-#define ewram8800 (&gSharedMem[0x8800])
-#define ewram9000 (&gSharedMem[0x9000])
+
+// pokedex.c
+#define ePokedexGraphicsBuffer ((void *)&gSharedMem[0x8000])
+#define ePokedexView1 (struct PokedexView *)(gSharedMem + 0x18000)
+#define ePokedexView2 (struct PokedexView *)(gSharedMem + 0x18800)
+#define ePokedexView3 (struct PokedexView *)(gSharedMem + 0x19000)
+#define ePokedexView4 (struct PokedexView *)(gSharedMem + 0x19800)
+
+// pokedex_cry_screen.c
+#define sCryWaveformWindowTiledata (&gSharedMem[0])
+#define ePokedexCryScreen (*(struct PokedexCryScreen *)(gSharedMem + 0x1C000))
+#define ePokedexCryScreen2 (*(struct PokedexCryMeterNeedle *)(gSharedMem + 0x1C800))
+
#define ewram9000_hack (void *)(ewram_addr + 0x9000) // TODO: Fix this.
-#define ewram9800 (&gSharedMem[0x9800])
-#define ewramA000 (&gSharedMem[0xA000])
-#define ewramA800 (&gSharedMem[0xA800])
-#define ewramB000 (&gSharedMem[0xB000])
-#define ewramB800 (&gSharedMem[0xB800])
#define TRANSITION_STRUCT (*(struct TransitionData *) (gSharedMem + 0xC000))
-#define ewramC000 (&gSharedMem[0xC000])
-#define ePokedexPalAddr2 (void *)(gSharedMem + 0xC000)
#define ewramC03C (&gSharedMem[0xC03C])
-#define ewramC800 (&gSharedMem[0xC800])
-#define ewramD000 (&gSharedMem[0xD000])
-#define ewramD800 (&gSharedMem[0xD800])
-#define ewramE000 (&gSharedMem[0xE000])
-#define ewramE800 (&gSharedMem[0xE800])
-#define ewramF000 (&gSharedMem[0xF000])
-#define ewramF800 (&gSharedMem[0xF800])
#define ewram_2010000 (*(struct TradeEwramStruct *)(gSharedMem + 0x10000))
#define ewram10000 (&gSharedMem[0x10000])
#define eSlotMachineGfxBuffer (void *)(gSharedMem + 0x10000) // slot machine
-#define ePokedexPalAddr3 (void *)(gSharedMem + 0x10000)
-#define ewram10800 (&gSharedMem[0x10800])
#define ewram11000 (&gSharedMem[0x11000])
-#define ewram11800 (&gSharedMem[0x11800])
-#define ewram12000 (&gSharedMem[0x12000])
-#define ewram12800 (&gSharedMem[0x12800])
#define ewram13000 (&gSharedMem[0x13000])
#define eSlotMachineReelTimeGfxBuffer (&gSharedMem[0x13200])
-#define ewram13800 (&gSharedMem[0x13800])
#define EWRAM_14000 ((u8 *)(gSharedMem + 0x14000))
-#define ewram14000 (&gSharedMem[0x14000])
-#define ePokedexPalAddr4 (void *)(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])
@@ -84,77 +70,56 @@ extern u8 gSharedMem[];
#define EWRAM_14800 ((u16 *)(gSharedMem + 0x14800))
#define sEvoInfo ((*(struct EvoInfo*)(gSharedMem + 0x14800)))
#define EWRAM_15000 ((u8 *)(gSharedMem + 0x15000))
-#define ewram15000 (&gSharedMem[0x15000])
#define ewram15000arr(i, data) (gSharedMem[0x15000 + data + i])
-#define ewram15800 (&gSharedMem[0x15800])
-#define ewram15DDE (gSharedMem[0x15DDE])
-#define ewram15DDF (gSharedMem[0x15DDF])
-#define ewram15DE0 ((*(struct ContestEntry*)(gSharedMem + 0x15DE0)))
-#define ewram15E00 ((*(struct Unk2015E00*)(gSharedMem + 0x15E00)))
-#define ewram16000 (gSharedMem[0x16000])
-#define ewram16000_2 (&gSharedMem[0x16000])
-#define ewram16001 (gSharedMem[0x16001])
-#define ewram16002 (gSharedMem[0x16002])
+
+// 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.
#define ewram16003 (gSharedMem[0x16003])
#define ewram16004arr(i, battler) (gSharedMem[0x16004 + i + battler * 2])
-#define ewram1600C (gSharedMem[0x1600C])
-#define ewram1600E (gSharedMem[0x1600E])
#define ewram16010arr(battler) (gSharedMem[0x16010 + battler])
-#define ewram1601B (gSharedMem[0x1601B])
#define eDynamicMoveType (gSharedMem[0x1601C])
#define eFocusPunchBattler (gSharedMem[0x1601D])
#define eDmgMultiplier (gSharedMem[0x1601F])
#define ewram16020 ((u8 *)(gSharedMem + 0x16020))
#define ewram16020arr(i) (gSharedMem[0x16020 + i])
-#define ewram16054 (gSharedMem[0x16054])
-#define ewram16056 (gSharedMem[0x16056])
#define ewram16058 (gSharedMem[0x16058])
-#define ewram16059 (gSharedMem[0x16059])
#define ewram16060(battler) (gSharedMem[0x16060 + battler])
#define BATTLE_PARTY_ID(battler) (gSharedMem[0x16064 + battler])
-#define ewram16064 (&gSharedMem[0x16064])
#define ewram16064arr(battler) (gSharedMem[0x16064 + battler])
#define ewram16068arr(i) (gSharedMem[0x16068 + i])
#define UNK_201606C_ARRAY (gSharedMem + 0x1606C) // lazy define but whatever.
#define ewram1606Carr(i, a) (gSharedMem[0x1606C + i + a * 3])
-#define ewram16078 (gSharedMem[0x16078])
-#define ewram16084 (gSharedMem[0x16084])
-#define ewram16086 (gSharedMem[0x16086])
-#define ewram16087 (gSharedMem[0x16087])
#define ewram16088 (gSharedMem[0x16088])
-#define ewram16088_2 (*(u8 *)(gSharedMem + 0x16088))
#define ewram16089 (gSharedMem[0x16089])
-#define ewram16089_2 (*(u8 *)(gSharedMem + 0x16089))
-
-// src/battle/anim/battle_intro.c
-#define ewram1608A gSharedMem[0x1608A]
-#define ewram1608B gSharedMem[0x1608B]
#define ewram1608Carr(battler) (gSharedMem[0x1608C + battler])
#define ewram16094arr(battler) (gSharedMem[0x16094 + battler])
#define EWRAM_1609D (gSharedMem[0x1609D])
-#define ewram1609e(flank) (gSharedMem[0x1609E + (flank)])
-#define ewram160A1 (gSharedMem[0x160A1])
-#define ewram160A4 (gSharedMem[0x160A4])
-#define ewram160A5 (gSharedMem[0x160A5])
-#define ewram160A6 (gSharedMem[0x160A6])
#define ewram160A8 (gSharedMem[0x160A8])
#define ewram160A9 (gSharedMem[0x160A9])
#define ewram160AA (gSharedMem[0x160AA])
#define ewram160AB (gSharedMem[0x160AB])
-#define ewram160AC ((u8 *)(gSharedMem + 0x160AC))
-#define ewram160ACarr(i) (gSharedMem[0x160AC + i])
-#define ewram160ACarr2(i, battler) (gSharedMem[0x160AC + i + battler * 2])
-#define ewram160BC ((u16 *)(gSharedMem + 0x160BC)) // hp
-#define ewram160BCarr(battler) (gSharedMem[0x160BC + battler * 2])
-#define ewram160C0 (gSharedMem[0x160C0])
-#define ewram160C2_Flags ((u16 *)(gSharedMem + 0x160C2))
-#define ewram160C4_Callback ((MainCallback *)(gSharedMem + 0x160C4))
-#define ewram160C8 (gSharedMem[0x160C8])
+#define eLastTakenMove_flat(i) (gSharedMem[0x160AC + i])
+#define eLastTakenMove_2d(i, battler) (gSharedMem[0x160AC + i + battler * 2])
+#define eHpOnSwitchout(battler) (gSharedMem[0x160BC + battler * 2])
#define ewram160C8arr(battler) (gSharedMem[0x160C8 + (battler / 2)])
-#define ewram160C9 (gSharedMem[0x160C9])
-#define ewram160CB (gSharedMem[0x160CB])
-#define ewram160CC ((u8 *)(gSharedMem + 0x160CC))
#define ewram160CCarr(i) (gSharedMem[0x160CC + i])
#define USED_HELD_ITEM(battler) ((((u16*)(&gSharedMem[0x160CC + battler * 2]))))
#define USED_HELD_ITEMS(battler) (*(u16 *)&gSharedMem[0x160CC + 2 * (battler)])
@@ -163,8 +128,6 @@ extern u8 gSharedMem[];
#define ewram160DA(battler) (gSharedMem[0x160DA + (battler >> 1)])
#define ewram160DD (gSharedMem[0x160DD])
#define ewram160E0(i) (gSharedMem[0x160E0 + i])
-#define ewram160E6 (gSharedMem[0x160E6])
-#define ewram160E7 (gSharedMem[0x160E7])
#define CHOICED_MOVE(battler) (((u16*)(&gSharedMem[0x160E8 + battler * 2])))
#define ewram160E8 ((u8 *)(gSharedMem + 0x160E8))
#define ewram160E8arr(i) (gSharedMem[0x160E8 + i])
@@ -172,7 +135,6 @@ extern u8 gSharedMem[];
#define ewram160F0 ((u8 *)(gSharedMem + 0x160F0))
#define ewram160F0arr(i) (gSharedMem[0x160F0 + i])
#define ewram160F8 (gSharedMem[0x160F8])
-#define ewram160F9 (gSharedMem[0x160F9])
#define eStatHp (gSharedMem[0x160FA])
#define ewram160FB (gSharedMem[0x160FB])
#define ewram16100 ((u8 *)(gSharedMem + 0x16100))
@@ -180,81 +142,70 @@ extern u8 gSharedMem[];
#define ewram16100arr2(i, battler) (gSharedMem[0x16100 + i + battler * 4])
#define ewram16108 ((u8 *)(gSharedMem + 0x16108))
#define ewram16108arr(i) (gSharedMem[0x16108 + i])
-#define ewram16110 (gSharedMem[0x16110])
-#define ewram16111 (gSharedMem[0x16111])
-#define eMultihitMoveEffect (gSharedMem[0x16112])
-#define ewram16113 (gSharedMem[0x16113])
#define ewram16400 (gSharedMem + 0x16400)
+#define AI_ARRAY_160CC(i) (gSharedMem[0x160CC + i * 2])
+#define ewram16800 (&gSharedMem[0x16800])
+
+// 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 AI_ARRAY_160CC(i) (gSharedMem[0x160CC + i * 2])
-#define ewram16800 (&gSharedMem[0x16800])
-#define ewram17000 (&gSharedMem[0x17000])
-#define eMoveTutorMenu (struct MoveTutorMenu *)(gSharedMem + 0x17000)
#define eSecretBaseRecord ((struct SecretBaseRecord *)(gSharedMem + 0x17000))
-#define eCableCar1 ((struct CableCarEwramStruct1 *)(gSharedMem + 0x17000))
-#define ewram17002 (&gSharedMem[0x17002])
-#define eFlashFireArr (*(struct Struct2017100 *)(gSharedMem + 0x17100))
+#define eBattleFlagsArr (*(struct ResourceFlags *)(gSharedMem + 0x17100))
#define B_BATTLESCRIPTS_STACK ((struct BattleScriptsStack *) (gSharedMem + 0x17110))
-#define ewram17130 (gSharedMem[0x17130])
#define B_FUNCTION_STACK ((struct BattleCallbacksStack *) (gSharedMem + 0x17140))
-#define ewram17160 (gSharedMem[0x17160])
-#define ewram17800 ((struct Struct2017800 *) (gSharedMem + 0x17800))
-#define ewram17800_2 (&gSharedMem[0x17800])
+#define gBattleResources_statsBeforeLvlUp ((struct StatsArray *)(gSharedMem + 0x17180))
+
+// roulette_gfx.c
+#define ewram17000 (&gSharedMem[0x17000])
+#define ewram17E00 ((u16 *)(gSharedMem + 0x17E00))
+#define ewram18000 ((u16 *)(gSharedMem + 0x18000))
+
+#define eMoveTutorMenu (struct MoveTutorMenu *)(gSharedMem + 0x17000)
+#define eCableCar1 ((struct CableCarEwramStruct1 *)(gSharedMem + 0x17000))
+#define gBattleSpriteInfo ((struct BattleSpriteInfo *) (gSharedMem + 0x17800))
#define EWRAM_17800 ((struct UnknownStruct1 *)(gSharedMem + 0x17800))
#define eTransformStatuses ((struct TransformStatus *)(gSharedMem + 0x17800))
#define ewram17810 ((struct Struct2017810 *) (gSharedMem + 0x17810))
#define EWRAM_17810 ((struct UnknownStruct3 *)(gSharedMem + 0x17810))
#define ewram17840 (*(struct Struct2017840 *) (gSharedMem + 0x17840))
#define ewram17850 ((struct UnknownStruct5 *)(gSharedMem + 0x17850))
-#define ewram17E00 ((u16 *)(gSharedMem + 0x17E00))
#define ewram_2018000 (*(struct PlayerRecords *)(gSharedMem + 0x18000))
#define EWRAM_18000 ((u16 *)(gSharedMem + 0x18000))
-#define ewram18000 ((u16 *)(gSharedMem + 0x18000))
#define ewram18000_2 (&gSharedMem[0x18000])
#define ewram18000_3 *(struct Pokemon **)(gSharedMem + 0x18000)
#define eBerryBlenderData (struct BerryBlenderData*)(&gSharedMem[0x18000])
#define eEggHatchData (struct EggHatchData*)(&gSharedMem[0x18000])
-#define ePokedexView1 (struct PokedexView *)(gSharedMem + 0x18000)
#define UNK_2018000_STRUCT (*(struct UnknownStruct2018000 *)(gSharedMem + 0x18000))
#define pssData (*(struct PokemonSummaryScreenStruct *)(gSharedMem + 0x18000))
#define ewram18300 ((u16 *)(gSharedMem + 0x18300))
#define ewram18800 (&gSharedMem[0x18800])
-#define ePokedexView2 (struct PokedexView *)(gSharedMem + 0x18800)
#define ewram189a0 ((u16 *)(gSharedMem + 0x189A0))
#define ewram18a20 ((u16 *)(gSharedMem + 0x18A20))
#define ewram18a32 ((u16 *)(gSharedMem + 0x18A32))
#define ewram18a80 ((u16 *)(gSharedMem + 0x18a80))
-#define ewram19000 (&gSharedMem[0x19000])
#define eCableCar2 ((struct CableCarEwramStruct2 *)(gSharedMem + 0x19000))
-#define ePokedexView3 (struct PokedexView *)(gSharedMem + 0x19000)
#define eRoulette ((struct Roulette *)(gSharedMem + 0x19000))
-#define shared192D0 (*(struct UnknownContestStruct7 *)(gSharedMem + 0x192D0))
-#define eContestAI ((struct ContestAIInfo *)(gSharedMem + 0x192E4))
#define EWRAM_19348 ((u16 *)(gSharedMem + 0x19348))
#define eWRAM_19348Struct ((struct EWRAM_19348_Struct *)(gSharedMem + 0x19348))
-#define ewram19800 (&gSharedMem[0x19800])
-#define ePokedexView4 (struct PokedexView *)(gSharedMem + 0x19800)
#define ewram1A000 (&gSharedMem[0x1A000])
-#define ewram1A800 (&gSharedMem[0x1A800])
#define ewram1B000 (*(struct Unk201B000 *)(gSharedMem + 0x1B000))
#define ewram1B000_alt (*(struct Struct201B000 *)(gSharedMem + 0x1B000))
#define EWRAM_1B000 ewram1B000_alt // FIXME
#define EWRAM_1B000_2 (*(struct Struct201B000 *)(gSharedMem + 0x1B000))
-#define ewram1B000_2 (&gSharedMem[0x1B000])
-#define ewram1B800 (&gSharedMem[0x1B800])
#define EWRAM_1C000 (*(struct Struct201C000 *)(gSharedMem + 0x1C000))
#define ewram1C000 (*(struct Unk201C000 *)(gSharedMem + 0x1C000))
#define ewram1c000 (*(struct Unk201C000 *)(gSharedMem + 0x1C000)) // FIXME, names too similar
-#define eHallOfFameMons1 (struct HallofFameMons*)(&gSharedMem[0x1C000])
+
+// hall_of_fame.c
+#define eHofGfxPtr (gSharedMem + 0x8000)
+#define eHofMonPtr (struct HallofFameMons*)(&gSharedMem[0x1C000])
#define eHOFPCScreenEffect (*(struct PCScreenEffectStruct *)(gSharedMem + 0x1c000))
+
#define ewram1D000 ((struct Pokemon *)(gSharedMem + 0x1D000))
#define ewram1D000_2 ((u16 *)(gSharedMem + 0x1D000))
#define ewram1D400 ((u16 *)(gSharedMem + 0x1D400))
#define ewramSavedItemsPocket ((struct ItemSlot *)(gSharedMem + 0x1E000)) // saved items pocket (for Wally battle)
-#define ewram1E000(i) (gSharedMem[0x1E000 + i])
-#define eHallOfFameMons2 (struct HallofFameMons*)(&gSharedMem[0x1E000])
#define eHallOfFame (struct HallOfFame *)(gSharedMem + 0x1E000)
#define HALL_OF_FAME_SHEET_0 ((u8 *)(gSharedMem + 0x1E000))
#define ewram1E000_2 (const u8 *)(gSharedMem + 0x1E000)
diff --git a/include/field_effect.h b/include/field_effect.h
index 6bf98d4f7..f961e3a3f 100644
--- a/include/field_effect.h
+++ b/include/field_effect.h
@@ -9,7 +9,7 @@ extern const struct SpritePalette gUnknown_0839F114;
extern const struct CompressedSpriteSheet gTrainerFrontPicTable[2];
extern const struct SpriteTemplate gSpriteTemplate_839F128;
extern const struct OamData gOamData_839F0F4;
-extern struct SpriteTemplate gUnknown_02024E8C;
+extern struct SpriteTemplate gCreatingSpriteTemplate;
extern u8 gLastFieldPokeMenuOpened;
diff --git a/include/global.h b/include/global.h
index e5114c396..7b7ffdaaf 100644
--- a/include/global.h
+++ b/include/global.h
@@ -36,6 +36,12 @@
#define KANA(txt) _(txt)
#endif
+#define SWAP(x,y,t) {\
+ t = x; \
+ x = y; \
+ y = t; \
+}
+
// Prevent cross-jump optimization.
#define BLOCK_CROSS_JUMP asm("");
@@ -89,6 +95,18 @@ enum
(ptr)[3] = ((value) >> 24) & 0xFF;\
})
+// Converts a number to Q8.8 fixed-point format
+#define Q_8_8(n) ((s16)((n) * 256))
+
+// Converts a number from Q8.8 fixed-point format to integer
+#define Q_8_8_TO_INT(n) ((s16)((n) >> 8))
+
+// Converts a number to Q4.12 fixed-point format
+#define Q_4_12(n) ((s16)((n) * 4096))
+
+// Converts a number from Q4.12 fixed-point format to integer
+#define Q_4_12_TO_INT(n) ((s16)((n) >> 12))
+
// Credits to Made (dolphin emoji)
#define S16TOPOSFLOAT(val) \
({ \
@@ -115,26 +133,31 @@ struct UCoords16
u16 y;
};
+struct SecretBaseParty
+{
+ /*0x1A3C*/ u32 personality[PARTY_SIZE];
+ /*0x1A54*/ u16 moves[PARTY_SIZE * 4];
+ /*0x1A84*/ u16 species[PARTY_SIZE];
+ /*0x1A90*/ u16 heldItems[PARTY_SIZE];
+ /*0x1A9C*/ u8 levels[PARTY_SIZE];
+ /*0x1AA2*/ u8 EVs[PARTY_SIZE];
+};
+
struct SecretBaseRecord
{
/*0x1A08*/ u8 secretBaseId;
- /*0x1A09*/ u8 sbr_field_1_0:4;
+ /*0x1A09*/ u8 toRegister:4;
/*0x1A09*/ u8 gender:1;
- /*0x1A09*/ u8 sbr_field_1_5:1;
- /*0x1A09*/ u8 sbr_field_1_6:2;
+ /*0x1A09*/ u8 battledOwnerToday:1;
+ /*0x1A09*/ u8 registryStatus:2;
/*0x1A0A*/ u8 playerName[OT_NAME_LENGTH];
/*0x1A11*/ u8 trainerId[4]; // byte 0 is used for determining trainer class
- /*0x1A16*/ u16 sbr_field_e;
- /*0x1A18*/ u8 sbr_field_10;
- /*0x1A19*/ u8 sbr_field_11;
+ /*0x1A16*/ u16 numSecretBasesReceived;
+ /*0x1A18*/ u8 numTimesEntered;
+ /*0x1A19*/ u8 unused;
/*0x1A1A*/ u8 decorations[DECOR_MAX_SECRET_BASE];
/*0x1A2A*/ u8 decorationPos[DECOR_MAX_SECRET_BASE];
- /*0x1A3C*/ u32 partyPersonality[PARTY_SIZE];
- /*0x1A54*/ u16 partyMoves[PARTY_SIZE * 4];
- /*0x1A84*/ u16 partySpecies[PARTY_SIZE];
- /*0x1A90*/ u16 partyHeldItems[PARTY_SIZE];
- /*0x1A9C*/ u8 partyLevels[PARTY_SIZE];
- /*0x1AA2*/ u8 partyEVs[PARTY_SIZE];
+ /*0x1A3C*/ struct SecretBaseParty party;
};
#include "constants/game_stat.h"
@@ -735,7 +758,7 @@ struct Time
struct Pokedex
{
/*0x00*/ u8 order;
- /*0x01*/ u8 unknown1;
+ /*0x01*/ u8 mode;
/*0x02*/ u8 nationalMagic; // must equal 0xDA in order to have National mode
/*0x03*/ u8 unknown2;
/*0x04*/ u32 unownPersonality; // set when you first see Unown
diff --git a/include/graphics.h b/include/graphics.h
index 66ef9a028..a6ccc520f 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -35,14 +35,16 @@ extern const u8 gInterfaceGfx_PremierBall[];
extern const u8 gInterfacePal_PremierBall[];
extern const u8 gUnknown_08D030D0[];
-extern const u8 gUnknown_08D17144[];
-extern const u8 gUnknown_08D1725C[];
-extern const u8 gUnknown_08D17424[];
+extern const u8 gContestPalette[];
+extern const u8 gContestGfx[];
+extern const u8 gContestBgmap[];
extern const u8 gUnknown_08D17C3C[];
extern const u8 gContestMiscGfx[];
extern const u8 gContestAudienceGfx[];
extern const u8 gContestJudgeSymbolsGfx[];
extern const u8 gContest3Pal[];
+extern const u8 gContestNumbers_UnusedGfx[];
+extern const u8 gContestNumbers_UnusedPal[];
extern const u8 gTiles_8D1975C[];
extern const u8 gUnknown_08D1977C[];
extern const u8 gUnknown_08D1A250[];
diff --git a/include/image_processing_effects.h b/include/image_processing_effects.h
new file mode 100644
index 000000000..47153023b
--- /dev/null
+++ b/include/image_processing_effects.h
@@ -0,0 +1,53 @@
+#ifndef GUARD_IMAGE_PROCESSING_EFFECTS_H
+#define GUARD_IMAGE_PROCESSING_EFFECTS_H
+
+enum
+{
+ IMAGE_EFFECT_POINTILLISM = 2,
+ IMAGE_EFFECT_GRAYSCALE_LIGHT = 6,
+ IMAGE_EFFECT_BLUR = 8,
+ IMAGE_EFFECT_OUTLINE_COLORED = 9,
+ IMAGE_EFFECT_INVERT_BLACK_WHITE = 10,
+ IMAGE_EFFECT_THICK_BLACK_WHITE = 11,
+ IMAGE_EFFECT_SHIMMER = 13,
+ IMAGE_EFFECT_OUTLINE = 30,
+ IMAGE_EFFECT_INVERT = 31,
+ IMAGE_EFFECT_BLUR_RIGHT = 32,
+ IMAGE_EFFECT_BLUR_DOWN = 33,
+ IMAGE_EFFECT_CHARCOAL = 36,
+};
+
+enum
+{
+ QUANTIZE_EFFECT_STANDARD,
+ QUANTIZE_EFFECT_STANDARD_LIMITED_COLORS,
+ QUANTIZE_EFFECT_PRIMARY_COLORS,
+ QUANTIZE_EFFECT_GRAYSCALE,
+ QUANTIZE_EFFECT_GRAYSCALE_SMALL,
+ QUANTIZE_EFFECT_BLACK_WHITE,
+};
+
+struct ImageProcessingContext
+{
+ u8 effect;
+ void *canvasPixels;
+ u16 *canvasPalette;
+ u8 fillerC[0x4];
+ void *dest;
+ u16 quantizeEffect;
+ u16 bgType;
+ u8 paletteStart;
+ u8 columnStart;
+ u8 rowStart;
+ u8 columnEnd;
+ u8 rowEnd;
+ u8 canvasWidth;
+ u8 canvasHeight;
+ u8 personality;
+};
+
+void ApplyImageProcessingEffects(struct ImageProcessingContext *);
+void ConvertImageProcessingToGBA(struct ImageProcessingContext *);
+void ApplyImageProcessingQuantization(struct ImageProcessingContext *);
+
+#endif // GUARD_IMAGE_PROCESSING_EFFECTS_H
diff --git a/include/link.h b/include/link.h
index 6c9c25202..a4540b346 100644
--- a/include/link.h
+++ b/include/link.h
@@ -185,7 +185,7 @@ void sub_800826C(void);
void sub_80082EC(void);
u8 GetLinkPlayerCount_2(void);
bool8 IsLinkMaster(void);
-void sub_800832C(void);
+void SetCloseLinkCallback(void);
void sub_8008480(void);
void sub_80084A4(void);
void CB2_LinkError(void);
diff --git a/include/menu.h b/include/menu.h
index a6ff6050e..9b132bda2 100644
--- a/include/menu.h
+++ b/include/menu.h
@@ -69,7 +69,9 @@ u8 sub_8072A18(const u8 *, u8, u16, u8, u32);
u8 unref_sub_8072A5C(u8 *, u8 *, u8, u16, u8, u32);
int sub_8072AB0(const u8 *, u8, u16, u8, u8, u32);
void MenuPrint_RightAligned(const u8 *, u8, u8);
-void sub_8072B80(const u8 *, u8, u8, const u8 *);
+
+// Prints src aligned to right edge of widthRefStr in window defined by left and top
+void MenuPrint_AlignedToRightOfReferenceString(const u8 *src, u8 left, u8 top, const u8 *widthRefStr);
void MenuPrint_Centered(const u8 *, u8, u8, u16);
u8 *AlignInt1InMenuWindow(u8 *, s32, u8, u8);
u8 *AlignInt2InMenuWindow(u8 *, s32, u8, u8);
diff --git a/include/party_menu.h b/include/party_menu.h
index 172435b2d..98ac0ddde 100644
--- a/include/party_menu.h
+++ b/include/party_menu.h
@@ -97,20 +97,6 @@ struct Unk2001000
u16 array[53561];
};
-struct UnknownPokemonStruct2
-{
- /*0x00*/ u16 species;
- /*0x02*/ u16 heldItem;
- /*0x04*/ u8 nickname[11];
- /*0x0F*/ u8 level;
- /*0x10*/ u16 hp;
- /*0x12*/ u16 maxhp;
- /*0x14*/ u32 status;
- /*0x18*/ u32 personality;
- /*0x1C*/ u8 gender;
- /*0x1D*/ u8 language;
-};
-
void CB2_PartyMenuMain(void);
void ChangeBattleTowerPartyMenuSelection(u8 taskId, s8 directionPressed);
void SetPartyMenuSettings(u8 menuType, u8 battleTypeFlags, TaskFunc menuHandlerFunc, u8 textId);
@@ -151,7 +137,7 @@ void SetHeldItemIconVisibility(u8 a, u8 monIndex);
void PartyMenuDoPrintMonNickname(u8 monIndex, int b, const u8 *nameBuffer);
void PrintPartyMenuMonNickname(u8 monIndex, u8 b, struct Pokemon *pokemon);
void PrintPartyMenuMonNicknames(void);
-void CreateMonIcon_LinkMultiBattle(u8 taskId, u8 monIndex, u8 menuType, struct UnknownPokemonStruct2 *pokemon);
+void CreateMonIcon_LinkMultiBattle(u8 taskId, u8 monIndex, u8 menuType, struct MultiBattlePokemonTx *pokemon);
u8 *GetMonNickname(struct Pokemon *pokemon, u8 *stringBuffer);
void PartyMenuPutStatusTilemap(u8 monIndex, u8 b, u8 status);
void PartyMenuDoPrintLevel(u8 monIndex, u8 b, u8 level);
diff --git a/include/pokedex.h b/include/pokedex.h
index 1d3d9b388..7592d6ba9 100644
--- a/include/pokedex.h
+++ b/include/pokedex.h
@@ -7,7 +7,7 @@
#define NATIONAL_DEX_COUNT 386
void ResetPokedex(void);
-void sub_808C0A0(void);
+void ResetPokedexScrollPositions(void);
void CB2_InitPokedex(void);
u8 sub_809070C(u16 dexNum, u32 b, u32 c);
const u8 *GetPokemonCategory(u16);
@@ -28,7 +28,7 @@ u16 GetHoennPokedexCount(u8);
bool8 CompletedHoennPokedex(void);
bool16 CompletedNationalPokedex(void);
-extern bool8 gUnknown_03005CE8;
+extern bool8 gUnusedPokedexU8;
struct PokedexEntry
{
@@ -46,9 +46,9 @@ struct PokedexEntry
extern const struct PokedexEntry gPokedexEntries[];
-u16 sub_8091A4C(u16 gender, s16 x, s16 y, u16 paletteNum);
-u16 sub_80918EC(u16 num, s16 x, s16 y, u16 paletteNum);
+u16 CreateSizeScreenTrainerPic(u16 gender, s16 x, s16 y, u16 paletteNum);
+u16 CreateMonSpriteFromNationalDexNumber(u16 num, s16 x, s16 y, u16 paletteNum);
-void sub_8091738(u16, u16, u16);
+void PrintFootprint(u16 num, u16 b, u16 c);
#endif // GUARD_POKEDEX_H
diff --git a/include/pokedex_cry_screen.h b/include/pokedex_cry_screen.h
index ee586a092..d2134eb51 100644
--- a/include/pokedex_cry_screen.h
+++ b/include/pokedex_cry_screen.h
@@ -1,19 +1,19 @@
#ifndef GUARD_POKEDEX_CRY_SCREEN_H
#define GUARD_POKEDEX_CRY_SCREEN_H
-struct CryRelatedStruct
+struct CryScreenWindow
{
- u16 unk0;
- u8 unk2;
+ u16 charBase;
+ u8 screenBase;
u8 paletteNo;
u8 xPos;
u8 yPos;
};
-u8 ShowPokedexCryScreen(struct CryRelatedStruct *, u8);
-u8 sub_8119E3C(struct CryRelatedStruct *, u8);
-void sub_8119F88(u8 a);
-void sub_811A050(u16 species);
+bool8 ShowPokedexCryScreen(struct CryScreenWindow * cry, u8 arg1);
+bool8 LoadCryWaveformWindow(struct CryScreenWindow * cry, u8 bgId);
+void UpdateCryWaveformWindow(u8 bgId);
+void CryScreenPlayButton(u16 species);
void DestroyCryMeterNeedleSprite();
#endif // GUARD_POKEDEX_CRY_SCREEN_H
diff --git a/include/pokemon.h b/include/pokemon.h
index d2ab1335c..57da75e16 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -193,6 +193,20 @@ struct UnknownPokemonStruct
/*0x2B*/u8 friendship;
};
+struct MultiBattlePokemonTx
+{
+ /*0x00*/ u16 species;
+ /*0x02*/ u16 heldItem;
+ /*0x04*/ u8 nickname[11];
+ /*0x0F*/ u8 level;
+ /*0x10*/ u16 hp;
+ /*0x12*/ u16 maxhp;
+ /*0x14*/ u32 status;
+ /*0x18*/ u32 personality;
+ /*0x1C*/ u8 gender;
+ /*0x1D*/ u8 language;
+};
+
#define BATTLE_STATS_NO 8
struct BattlePokemon
diff --git a/include/rom_8077ABC.h b/include/rom_8077ABC.h
index 4f49885bf..e17d836de 100644
--- a/include/rom_8077ABC.h
+++ b/include/rom_8077ABC.h
@@ -17,7 +17,7 @@ struct TransformStatus
};
u8 GetBattlerSpriteCoord(u8, u8);
-u8 sub_8077E44(u8 slot, u16 species, u8 a3);
+u8 GetBattlerSpriteFinal_Y(u8 slot, u16 species, u8 a3);
u8 GetAnimBattlerSpriteId(u8 bank);
void StoreSpriteCallbackInData(struct Sprite *sprite, void(*callback)(struct Sprite *));
void sub_8078314(struct Sprite *sprite);
diff --git a/include/text.h b/include/text.h
index 8b5df9280..dba242fe3 100644
--- a/include/text.h
+++ b/include/text.h
@@ -75,7 +75,6 @@
#define CHAR_NEWLINE 0xFE
#define EOS 0xFF // end of string
-#define EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW 4
#define TEXT_COLOR_TRANSPARENT 0x00
#define TEXT_COLOR_DARK_GREY 0x01
#define TEXT_COLOR_RED 0x02
@@ -93,8 +92,28 @@
#define TEXT_COLOR_LIGHT_BLUE 0x0E
#define TEXT_COLOR_WHITE2 0x0F
-#define EXT_CTRL_CODE_CLEAR 17
-
+#define EXT_CTRL_CODE_COLOR 0x01
+#define EXT_CTRL_CODE_HIGHLIGHT 0x02
+#define EXT_CTRL_CODE_SHADOW 0x03
+#define EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW 0x04
+#define EXT_CTRL_CODE_PALETTE 0x05
+#define EXT_CTRL_CODE_SIZE 0x06
+#define EXT_CTRL_CODE_RESET_SIZE 0x07
+#define EXT_CTRL_CODE_PAUSE 0x08
+#define EXT_CTRL_CODE_PAUSE_UNTIL_PRESS 0x09
+#define EXT_CTRL_CODE_WAIT_SE 0x0A
+#define EXT_CTRL_CODE_PLAY_BGM 0x0B
+#define EXT_CTRL_CODE_ESCAPE 0x0C
+#define EXT_CTRL_CODE_SHIFT_TEXT 0x0D // nop
+#define EXT_CTRL_CODE_SHIFT_DOWN 0x0E
+#define EXT_CTRL_CODE_FILL_WINDOW 0x0F
+#define EXT_CTRL_CODE_PLAY_SE 0x10
+#define EXT_CTRL_CODE_CLEAR 0x11
+#define EXT_CTRL_CODE_SKIP 0x12
+#define EXT_CTRL_CODE_CLEAR_TO 0x13
+#define EXT_CTRL_CODE_MIN_LETTER_SPACING 0x14
+#define EXT_CTRL_CODE_JPN 0x15
+#define EXT_CTRL_CODE_ENG 0x16
struct WindowTemplate
{
@@ -206,7 +225,7 @@ extern const struct WindowTemplate gWindowTemplate_81E70F0;
extern const struct WindowTemplate gWindowTemplate_81E710C;
extern const struct WindowTemplate gWindowTemplate_81E7128;
extern const struct WindowTemplate gWindowTemplate_81E7144;
-extern const struct WindowTemplate gWindowTemplate_81E7160;
+extern const struct WindowTemplate gWindowTemplate_ContestPainting;
extern const struct WindowTemplate gWindowTemplate_81E717C;
extern const struct WindowTemplate gWindowTemplate_81E7198;
extern const struct WindowTemplate gWindowTemplate_81E71B4;
@@ -236,7 +255,7 @@ void Text_InitWindowWithTemplate(struct Window *win, const struct WindowTemplate
void Text_InitWindow(struct Window *win, const u8 *text, u16 tileDataStartOffset, u8 left, u8 top);
void Text_InitWindow8002E4C(struct Window *win, const u8 *text, u16 tileDataStartOffset, u8 left, u16 top, u32 a6);
void Text_SetWindowText(struct Window *win, const u8 *text);
-void Text_InitWindow8002EB0(struct Window *win, const u8 *text, u16 tileDataStartOffset, u8 left, u8 top);
+void Contest_StartTextPrinter(struct Window *win, const u8 *text, u16 tileDataStartOffset, u8 left, u8 top);
u8 Text_PrintWindow8002F44(struct Window *win);
u8 Text_PrintWindowSimple(struct Window *win);
u8 Text_InitWindowAndPrintText(struct Window *win, const u8 *text, u16 tileDataStartOffset, u8 left, u8 top);
@@ -248,7 +267,7 @@ u8 *sub_8003558(u8 *dest, const u8 *src, u8 alignAmount, u8 alignType);
u8 Text_UpdateWindow(struct Window *win);
u8 Text_UpdateWindowInBattle(struct Window *win);
u8 Text_UpdateWindowAutoscroll(struct Window *win);
-u8 Text_UpdateWindowInContest(struct Window *win);
+u8 Contest_RunTextPrinter(struct Window *win);
u32 Text_UpdateWindowOverrideLineLength(struct Window *win, u8 lineLength);
void Text_ClearWindow(struct Window *win);
u16 Text_GetWindowTilemapEntry(struct Window *win, u8 x, u8 y);