diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/battle.h | 117 | ||||
-rw-r--r-- | include/constants/contest.h | 44 | ||||
-rw-r--r-- | include/contest.h | 228 | ||||
-rw-r--r-- | include/contest_internal.h | 154 | ||||
-rw-r--r-- | include/contest_link.h | 14 | ||||
-rw-r--r-- | include/contest_link_80C857C.h | 14 | ||||
-rw-r--r-- | include/contest_link_util.h (renamed from include/contest_link_80C2020.h) | 12 | ||||
-rw-r--r-- | include/contest_painting.h | 19 | ||||
-rw-r--r-- | include/contest_painting_effects.h | 28 | ||||
-rw-r--r-- | include/contest_util.h (renamed from include/script_pokemon_80C4.h) | 2 | ||||
-rw-r--r-- | include/data2.h | 8 | ||||
-rw-r--r-- | include/decompress.h | 6 | ||||
-rw-r--r-- | include/easy_chat.h | 2 | ||||
-rw-r--r-- | include/ewram.h | 167 | ||||
-rw-r--r-- | include/field_effect.h | 2 | ||||
-rw-r--r-- | include/global.h | 49 | ||||
-rw-r--r-- | include/graphics.h | 8 | ||||
-rw-r--r-- | include/image_processing_effects.h | 53 | ||||
-rw-r--r-- | include/link.h | 2 | ||||
-rw-r--r-- | include/menu.h | 4 | ||||
-rw-r--r-- | include/party_menu.h | 16 | ||||
-rw-r--r-- | include/pokedex.h | 10 | ||||
-rw-r--r-- | include/pokedex_cry_screen.h | 14 | ||||
-rw-r--r-- | include/pokemon.h | 14 | ||||
-rw-r--r-- | include/rom_8077ABC.h | 2 | ||||
-rw-r--r-- | include/text.h | 31 |
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); |