diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/battle/battle_setup.c | 2 | ||||
-rw-r--r-- | src/debug/matsuda_debug_menu.c | 229 | ||||
-rw-r--r-- | src/engine/mystery_event_script.c | 2 | ||||
-rw-r--r-- | src/engine/record_mixing.c | 10 | ||||
-rw-r--r-- | src/field/battle_tower.c | 20 | ||||
-rw-r--r-- | src/field/event_data.c | 2 | ||||
-rw-r--r-- | src/field/field_special_scene.c | 12 | ||||
-rw-r--r-- | src/field/field_specials.c | 90 | ||||
-rw-r--r-- | src/field/field_tasks.c | 20 | ||||
-rw-r--r-- | src/field/fldeff_secret_base_pc.c | 2 | ||||
-rw-r--r-- | src/field/item_use.c | 2 | ||||
-rw-r--r-- | src/field/lottery_corner.c | 16 | ||||
-rw-r--r-- | src/field/map_name_popup.c | 2 | ||||
-rw-r--r-- | src/field/mauville_man.c | 3 | ||||
-rw-r--r-- | src/field/overworld.c | 2 | ||||
-rw-r--r-- | src/field/player_pc.c | 4 | ||||
-rw-r--r-- | src/field/secret_base.c | 30 | ||||
-rw-r--r-- | src/field/tv.c | 18 | ||||
-rw-r--r-- | src/pokemon/pokemon_summary_screen.c | 253 | ||||
-rw-r--r-- | src/pokenav_before.c | 677 | ||||
-rw-r--r-- | src/scene/credits.c | 2 | ||||
-rw-r--r-- | src/script_pokemon_util_80C4BF0.c | 289 | ||||
-rw-r--r-- | src/script_pokemon_util_80F99CC.c | 144 |
23 files changed, 331 insertions, 1500 deletions
diff --git a/src/battle/battle_setup.c b/src/battle/battle_setup.c index f71aad090..2f94dd407 100644 --- a/src/battle/battle_setup.c +++ b/src/battle/battle_setup.c @@ -858,7 +858,7 @@ static void CB2_GiveStarter(void) { u16 starterPoke; - *GetVarPointer(0x4023) = gSpecialVar_Result; + *GetVarPointer(VAR_STARTER_MON) = gSpecialVar_Result; starterPoke = GetStarterPokemon(gSpecialVar_Result); ScriptGiveMon(starterPoke, 5, 0, 0, 0, 0); ResetTasks(); diff --git a/src/debug/matsuda_debug_menu.c b/src/debug/matsuda_debug_menu.c index 728562b81..d797e8850 100644 --- a/src/debug/matsuda_debug_menu.c +++ b/src/debug/matsuda_debug_menu.c @@ -18,9 +18,9 @@ #include "ewram.h" extern u8 gUnknown_0203856C; -extern u16 gUnknown_02038670[]; -extern u16 gUnknown_02038678[]; -extern u16 gUnknown_02038680[]; +extern s16 gUnknown_02038670[]; +extern s16 gUnknown_02038678[]; +extern s16 gUnknown_02038680[]; extern u8 gContestFinalStandings[]; extern u8 gUnknown_02038694; extern u8 gIsLinkContest; @@ -922,211 +922,40 @@ void sub_80AAD44(struct Sprite *sprite, s8 var2) } } -//Do this later -/* void sub_80AAD84(u8 *string, u8 b, u8 c, u8 d) { - u32 r5; - u16 r7; - u8 r7_2; - //u32 sp44; - //u32 sp48; - u32 sp58; + u16 len; + u8 r7; + s32 i; + u8 sp0[32]; + u8 sp20[32]; + u8 str2[2]; - gMain.state = 0; + DmaClear32(3, (void *)(VRAM + 0x18000 - (d + 1) * 256), 0x100); - r5 = d + 1; - //Could also be DmaClear32 - DmaFill32(3, 0, (u8 *)VRAM + 0x18000 - r5 * 256, 0x100); + len = StringLength(string); + if (len > 8) + len = 8; - r7 = StringLength(string); - if (r7 > 8) - r7 = 8; - sp58 = d * 2; + for (i = 0; i < len; i++) + { + str2[0] = string[i]; + str2[1] = EOS; + sub_80034D4(sp0, str2); + DmaCopy32Defvars(3, sp20, (void *)(VRAM + 0x18000 - (d + 1) * 256 + i * 32), sizeof(sp0)); + } - //More stuff + r7 = 124 - d * 2; - r7_2 = 0x7C - sp58; + gMain.oamBuffer[r7] = gUnknown_083C9400; + gMain.oamBuffer[r7].tileNum = 1024 - (d + 1) * 8; + gMain.oamBuffer[r7].x = b; + gMain.oamBuffer[r7].y = c; -} -*/ - -__attribute__((naked)) -void sub_80AAD84(u8 *string, u8 b, u8 c, u8 d) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x64\n\ - mov r9, r0\n\ - lsls r1, 24\n\ - lsrs r1, 24\n\ - str r1, [sp, 0x48]\n\ - lsls r2, 24\n\ - lsrs r2, 24\n\ - str r2, [sp, 0x4C]\n\ - lsls r3, 24\n\ - lsrs r3, 24\n\ - mov r10, r3\n\ - mov r5, r10\n\ - adds r5, 0x1\n\ - lsls r1, r5, 8\n\ - ldr r0, _080AAEC4 @ =0x06018000\n\ - subs r1, r0, r1\n\ - movs r0, 0\n\ - str r0, [sp, 0x44]\n\ - ldr r4, _080AAEC8 @ =0x040000d4\n\ - add r0, sp, 0x44\n\ - str r0, [r4]\n\ - str r1, [r4, 0x4]\n\ - ldr r0, _080AAECC @ =0x85000040\n\ - str r0, [r4, 0x8]\n\ - ldr r0, [r4, 0x8]\n\ - mov r0, r9\n\ - bl StringLength\n\ - lsls r0, 16\n\ - lsrs r7, r0, 16\n\ - cmp r7, 0x8\n\ - bls _080AADD0\n\ - movs r7, 0x8\n\ -_080AADD0:\n\ - movs r6, 0\n\ - mov r8, r5\n\ - mov r1, r10\n\ - lsls r1, 1\n\ - str r1, [sp, 0x58]\n\ - ldr r2, [sp, 0x48]\n\ - adds r2, 0x20\n\ - str r2, [sp, 0x5C]\n\ - cmp r6, r7\n\ - bge _080AAE1E\n\ - add r5, sp, 0x40\n\ - add r0, sp, 0x20\n\ - mov r10, r0\n\ - ldr r2, _080AAEC4 @ =0x06018000\n\ -_080AADEC:\n\ - mov r1, r9\n\ - adds r0, r1, r6\n\ - ldrb r0, [r0]\n\ - strb r0, [r5]\n\ - movs r0, 0xFF\n\ - strb r0, [r5, 0x1]\n\ - mov r0, sp\n\ - adds r1, r5, 0\n\ - str r2, [sp, 0x60]\n\ - bl sub_80034D4\n\ - mov r1, r8\n\ - lsls r0, r1, 8\n\ - ldr r2, [sp, 0x60]\n\ - subs r0, r2, r0\n\ - mov r1, r10\n\ - str r1, [r4]\n\ - str r0, [r4, 0x4]\n\ - ldr r0, _080AAED0 @ =0x84000008\n\ - str r0, [r4, 0x8]\n\ - ldr r0, [r4, 0x8]\n\ - adds r2, 0x20\n\ - adds r6, 0x1\n\ - cmp r6, r7\n\ - blt _080AADEC\n\ -_080AAE1E:\n\ - movs r1, 0x7C\n\ - ldr r2, [sp, 0x58]\n\ - subs r1, r2\n\ - lsls r1, 24\n\ - lsrs r7, r1, 24\n\ - ldr r0, _080AAED4 @ =gMain\n\ - mov r9, r0\n\ - lsls r3, r7, 3\n\ - add r3, r9\n\ - ldr r0, _080AAED8 @ =gUnknown_083C9400\n\ - ldr r1, [r0]\n\ - ldr r2, [r0, 0x4]\n\ - str r1, [sp, 0x50]\n\ - str r2, [sp, 0x54]\n\ - str r1, [r3, 0x3C]\n\ - str r2, [r3, 0x40]\n\ - mov r2, r8\n\ - lsls r0, r2, 3\n\ - movs r1, 0x80\n\ - lsls r1, 3\n\ - adds r2, r1, 0\n\ - subs r2, r0\n\ - adds r6, r3, 0\n\ - adds r6, 0x40\n\ - ldr r0, _080AAEDC @ =0x000003ff\n\ - mov r8, r0\n\ - mov r1, r8\n\ - ands r2, r1\n\ - ldrh r5, [r6]\n\ - ldr r4, _080AAEE0 @ =0xfffffc00\n\ - adds r0, r4, 0\n\ - ands r0, r5\n\ - orrs r0, r2\n\ - strh r0, [r6]\n\ - ldrh r5, [r3, 0x3E]\n\ - ldr r2, _080AAEE4 @ =0xfffffe00\n\ - adds r0, r2, 0\n\ - ands r0, r5\n\ - ldr r1, [sp, 0x48]\n\ - orrs r0, r1\n\ - strh r0, [r3, 0x3E]\n\ - adds r3, 0x3C\n\ - add r0, sp, 0x4C\n\ - ldrb r0, [r0]\n\ - strb r0, [r3]\n\ - adds r1, r7, 0x1\n\ - lsls r1, 3\n\ - mov r0, r9\n\ - adds r7, r1, r0\n\ - ldr r0, [sp, 0x50]\n\ - ldr r1, [sp, 0x54]\n\ - str r0, [r7, 0x3C]\n\ - str r1, [r7, 0x40]\n\ - ldrh r0, [r6]\n\ - lsls r0, 22\n\ - lsrs r0, 22\n\ - adds r0, 0x4\n\ - adds r5, r7, 0\n\ - adds r5, 0x40\n\ - mov r1, r8\n\ - ands r0, r1\n\ - ldrh r3, [r5]\n\ - ands r4, r3\n\ - orrs r4, r0\n\ - strh r4, [r5]\n\ - ldrh r0, [r7, 0x3E]\n\ - ands r2, r0\n\ - ldr r0, [sp, 0x5C]\n\ - orrs r2, r0\n\ - strh r2, [r7, 0x3E]\n\ - adds r1, r7, 0\n\ - adds r1, 0x3C\n\ - add r2, sp, 0x4C\n\ - ldrb r2, [r2]\n\ - strb r2, [r1]\n\ - add sp, 0x64\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080AAEC4: .4byte 0x06018000\n\ -_080AAEC8: .4byte 0x040000d4\n\ -_080AAECC: .4byte 0x85000040\n\ -_080AAED0: .4byte 0x84000008\n\ -_080AAED4: .4byte gMain\n\ -_080AAED8: .4byte gUnknown_083C9400\n\ -_080AAEDC: .4byte 0x000003ff\n\ -_080AAEE0: .4byte 0xfffffc00\n\ -_080AAEE4: .4byte 0xfffffe00\n\ - .syntax divided\n"); + gMain.oamBuffer[r7 + 1] = gUnknown_083C9400; + gMain.oamBuffer[r7 + 1].tileNum = gMain.oamBuffer[r7].tileNum + 4; + gMain.oamBuffer[r7 + 1].x = b + 32; + gMain.oamBuffer[r7 + 1].y = c; } void unref_sub_80AAEE8(s32 a, u8 b, u8 c, u8 d) diff --git a/src/engine/mystery_event_script.c b/src/engine/mystery_event_script.c index f8909c4eb..6fcad66ac 100644 --- a/src/engine/mystery_event_script.c +++ b/src/engine/mystery_event_script.c @@ -307,7 +307,7 @@ bool8 MEScrCmd_setenigmaberry(struct ScriptContext *ctx) ctx->data[2] = 2; if (IsEnigmaBerryValid() == TRUE) - VarSet(0x402D, 1); + VarSet(VAR_ENIGMA_BERRY_AVAILABLE, 1); else ctx->data[2] = 1; diff --git a/src/engine/record_mixing.c b/src/engine/record_mixing.c index 6cb1e54b2..997a257f5 100644 --- a/src/engine/record_mixing.c +++ b/src/engine/record_mixing.c @@ -119,7 +119,7 @@ void Task_RecordMixing_Main(u8 taskId) { case 0: // init sub_8007270(gSpecialVar_0x8005); - VarSet(VAR_0x4000, 1); + VarSet(VAR_TEMP_0, 1); gUnknown_03000718 = 0; RecordMixing_PrepareExchangePacket(); CreateRecordMixingSprite(); @@ -1016,26 +1016,26 @@ void sub_80B9F3C(u16 *a, u8 b) { if (!CheckBagHasItem(*a, 1) && !CheckPCHasItem(*a, 1) && AddBagItem(*a, 1)) { - VarSet(VAR_0x4001, *a); + VarSet(VAR_TEMP_1, *a); StringCopy(gStringVar1, gLinkPlayers[0].name); if (*a == ITEM_EON_TICKET) FlagSet(FLAG_SYS_HAS_EON_TICKET); } else { - VarSet(VAR_0x4001, ITEM_NONE); + VarSet(VAR_TEMP_1, ITEM_NONE); } } else { if (AddBagItem(*a, 1) == TRUE) { - VarSet(VAR_0x4001, *a); + VarSet(VAR_TEMP_1, *a); StringCopy(gStringVar1, gLinkPlayers[0].name); } else { - VarSet(VAR_0x4001, ITEM_NONE); + VarSet(VAR_TEMP_1, ITEM_NONE); } } } diff --git a/src/field/battle_tower.c b/src/field/battle_tower.c index 6b6064c16..12337631f 100644 --- a/src/field/battle_tower.c +++ b/src/field/battle_tower.c @@ -294,24 +294,24 @@ void sub_8134548(void) ResetBattleTowerStreak(levelType); if (!var1) { - VarSet(VAR_0x4000, 5); + VarSet(VAR_TEMP_0, 5); } break; case 1: ResetBattleTowerStreak(levelType); - VarSet(VAR_0x4000, 1); + VarSet(VAR_TEMP_0, 1); var1++; break; case 4: - VarSet(VAR_0x4000, 2); + VarSet(VAR_TEMP_0, 2); var1++; break; case 5: - VarSet(VAR_0x4000, 3); + VarSet(VAR_TEMP_0, 3); var1++; break; case 2: - VarSet(VAR_0x4000, 4); + VarSet(VAR_TEMP_0, 4); var1++; break; case 3: @@ -323,7 +323,7 @@ void sub_8134548(void) if ((gSaveBlock2.battleTower.var_4AE[0] == 3 || gSaveBlock2.battleTower.var_4AE[0] == 6) && (gSaveBlock2.battleTower.var_4AE[1] == 3 || gSaveBlock2.battleTower.var_4AE[1] == 6)) { - VarSet(VAR_0x4000, 5); + VarSet(VAR_TEMP_0, 5); } ValidateBattleTowerRecordChecksums(); @@ -801,7 +801,7 @@ void SetBattleTowerTrainerGfxId(u8 trainerIndex) if (i != 30) { u8 trainerObjectGfxId = sMaleTrainerGfxIds[i]; - VarSet(0x4010, trainerObjectGfxId); + VarSet(VAR_OBJ_GFX_ID_0, trainerObjectGfxId); return; } @@ -809,11 +809,11 @@ void SetBattleTowerTrainerGfxId(u8 trainerIndex) if (i != 20) { u8 trainerObjectGfxId = sFemaleTrainerGfxIds[i]; - VarSet(0x4010, trainerObjectGfxId); + VarSet(VAR_OBJ_GFX_ID_0, trainerObjectGfxId); return; } - VarSet(0x4010, MAP_OBJ_GFX_BOY_1); + VarSet(VAR_OBJ_GFX_ID_0, MAP_OBJ_GFX_BOY_1); } void SetEReaderTrainerGfxId(void) @@ -1976,7 +1976,7 @@ void sub_8135BA0(void) gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = gSpecialVar_0x8004; } - VarSet(VAR_0x4000, 0); + VarSet(VAR_TEMP_0, 0); gSaveBlock2.battleTower.unk_554 = 1; TrySavingData(EREADER_SAVE); } diff --git a/src/field/event_data.c b/src/field/event_data.c index 587da8138..86045df15 100644 --- a/src/field/event_data.c +++ b/src/field/event_data.c @@ -138,7 +138,7 @@ bool8 VarSet(u16 id, u16 value) u8 VarGetFieldObjectGraphicsId(u8 id) { - return VarGet(0x4010 + id); + return VarGet(VAR_OBJ_GFX_ID_0 + id); } u8 *GetFlagPointer(u16 id) diff --git a/src/field/field_special_scene.c b/src/field/field_special_scene.c index 0b7fe336e..67b652a57 100644 --- a/src/field/field_special_scene.c +++ b/src/field/field_special_scene.c @@ -291,7 +291,7 @@ bool8 sub_80C7754(void) void Task_HandlePorthole(u8 taskId) { s16 *data = gTasks[taskId].data; - u16 *var = GetVarPointer(VAR_PORTHOLE); + u16 *var = GetVarPointer(VAR_PORTHOLE_STATE); struct WarpData *location = &gSaveBlock1.location; switch (data[0]) @@ -337,8 +337,8 @@ void Task_HandlePorthole(u8 taskId) } break; case EXIT_PORTHOLE: // exit porthole. - FlagClear(0x4001); - FlagClear(0x4000); + FlagClear(FLAG_SPECIAL_FLAG_1); + FlagClear(FLAG_SPECIAL_FLAG_0); copy_saved_warp2_bank_and_enter_x_to_warp1(0); sp13E_warp_to_last_warp(); DestroyTask(taskId); @@ -352,7 +352,7 @@ void sub_80C78A0(void) gSprites[spriteId].coordOffsetEnabled = FALSE; - if (VarGet(0x40B4) == 2) + if (VarGet(VAR_PORTHOLE_STATE) == 2) { StartSpriteAnim(&gSprites[spriteId], FieldObjectDirectionToImageAnimId(4)); } @@ -374,8 +374,8 @@ void sub_80C791C(void) void sub_80C7958(void) { FlagSet(FLAG_SYS_CRUISE_MODE); - FlagSet(0x4001); - FlagSet(0x4000); + FlagSet(FLAG_SPECIAL_FLAG_1); + FlagSet(FLAG_SPECIAL_FLAG_0); saved_warp2_set(0, gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum, -1); sub_80C7754(); sub_8080F9C(); diff --git a/src/field/field_specials.c b/src/field/field_specials.c index e09f5d547..8cb1ba487 100644 --- a/src/field/field_specials.c +++ b/src/field/field_specials.c @@ -99,13 +99,13 @@ u16 GetPlayerAvatarBike(void) return 0; } -static void DetermineCyclingRoadResults(u32 arg0, u8 arg1) +static void DetermineCyclingRoadResults(u32 numFrames, u8 numBikeCollisions) { u8 result; - if (arg1 <= 99) + if (numBikeCollisions <= 99) { - ConvertIntToDecimalStringN(gStringVar1, arg1, STR_CONV_MODE_LEFT_ALIGN, 2); + ConvertIntToDecimalStringN(gStringVar1, numBikeCollisions, STR_CONV_MODE_LEFT_ALIGN, 2); StringAppend(gStringVar1, gOtherText_Times); } else @@ -113,11 +113,11 @@ static void DetermineCyclingRoadResults(u32 arg0, u8 arg1) StringCopy(gStringVar1, gOtherText_99Times); } - if (arg0 < 3600) + if (numFrames < 3600) { - ConvertIntToDecimalStringN(gStringVar2, arg0 / 60, STR_CONV_MODE_RIGHT_ALIGN, 2); + ConvertIntToDecimalStringN(gStringVar2, numFrames / 60, STR_CONV_MODE_RIGHT_ALIGN, 2); gStringVar2[2] = CHAR_DECIMAL_SEPARATOR; - ConvertIntToDecimalStringN(&gStringVar2[3], ((arg0 % 60) * 100) / 60, STR_CONV_MODE_LEADING_ZEROS, 2); + ConvertIntToDecimalStringN(&gStringVar2[3], ((numFrames % 60) * 100) / 60, STR_CONV_MODE_LEADING_ZEROS, 2); StringAppend(gStringVar2, gOtherText_Seconds); } else @@ -126,44 +126,44 @@ static void DetermineCyclingRoadResults(u32 arg0, u8 arg1) } result = 0; - if (arg1 == 0) + if (numBikeCollisions == 0) { result = 5; } - else if (arg1 < 4) + else if (numBikeCollisions < 4) { result = 4; } - else if (arg1 < 10) + else if (numBikeCollisions < 10) { result = 3; } - else if (arg1 < 20) + else if (numBikeCollisions < 20) { result = 2; } - else if (arg1 < 100) + else if (numBikeCollisions < 100) { result = 1; } - if (arg0 / 60 <= 10) + if (numFrames / 60 <= 10) { result += 5; } - else if (arg0 / 60 <= 15) + else if (numFrames / 60 <= 15) { result += 4; } - else if (arg0 / 60 <= 20) + else if (numFrames / 60 <= 20) { result += 3; } - else if (arg0 / 60 <= 40) + else if (numFrames / 60 <= 40) { result += 2; } - else if (arg0 / 60 < 60) + else if (numFrames / 60 < 60) { result += 1; } @@ -173,36 +173,36 @@ static void DetermineCyclingRoadResults(u32 arg0, u8 arg1) } void FinishCyclingRoadChallenge(void) { - const u32 time = gMain.vblankCounter1 - gBikeCyclingTimer; + const u32 numFrames = gMain.vblankCounter1 - gBikeCyclingTimer; - DetermineCyclingRoadResults(time, gBikeCollisions); - RecordCyclingRoadResults(time, gBikeCollisions); + DetermineCyclingRoadResults(numFrames, gBikeCollisions); + RecordCyclingRoadResults(numFrames, gBikeCollisions); } -static void RecordCyclingRoadResults(u32 arg0, u8 arg1) { - u16 high = VarGet(0x4028); - u16 low = VarGet(0x4029); - u32 record = high + (low << 16); +static void RecordCyclingRoadResults(u32 numFrames, u8 numBikeCollisions) { + u16 low = VarGet(VAR_CYCLING_ROAD_RECORD_TIME_L); + u16 high = VarGet(VAR_CYCLING_ROAD_RECORD_TIME_H); + u32 framesRecord = low + (high << 16); - if (record > arg0 || record == 0) + if (framesRecord > numFrames || framesRecord == 0) { - VarSet(0x4028, arg0); - VarSet(0x4029, arg0 >> 16); - VarSet(0x4027, arg1); + VarSet(VAR_CYCLING_ROAD_RECORD_TIME_L, numFrames); + VarSet(VAR_CYCLING_ROAD_RECORD_TIME_H, numFrames >> 16); + VarSet(VAR_CYCLING_ROAD_RECORD_COLLISIONS, numBikeCollisions); } } u16 GetRecordedCyclingRoadResults(void) { - u16 high = VarGet(0x4028); - u16 low = VarGet(0x4029); - u32 record = high + (low << 16); + u16 low = VarGet(VAR_CYCLING_ROAD_RECORD_TIME_L); + u16 high = VarGet(VAR_CYCLING_ROAD_RECORD_TIME_H); + u32 framesRecord = low + (high << 16); - if (record == 0) + if (framesRecord == 0) { return FALSE; } - DetermineCyclingRoadResults(record, VarGet(0x4027)); + DetermineCyclingRoadResults(framesRecord, VarGet(VAR_CYCLING_ROAD_RECORD_COLLISIONS)); return TRUE; } @@ -212,9 +212,9 @@ void UpdateCyclingRoadState(void) { return; } - if (VarGet(0x40a9) == 2 || VarGet(0x40a9) == 3) + if (VarGet(VAR_CYCLING_CHALLENGE_STATE) == 2 || VarGet(VAR_CYCLING_CHALLENGE_STATE) == 3) { - VarSet(0x40a9, 0); + VarSet(VAR_CYCLING_CHALLENGE_STATE, 0); Overworld_SetSavedMusic(SE_STOP); } } @@ -242,7 +242,7 @@ bool32 CountSSTidalStep(u16 delta) u8 GetSSTidalLocation(s8 *mapGroup, s8 *mapNum, s16 *x, s16 *y) { u16 *varCruiseStepCount = GetVarPointer(VAR_CRUISE_STEP_COUNT); - switch (*GetVarPointer(VAR_PORTHOLE)) + switch (*GetVarPointer(VAR_PORTHOLE_STATE)) { case 1: case 8: @@ -1880,12 +1880,12 @@ u8 sub_810F5BC(void) { if (FlagGet(FLAG_HIDE_RUSTURF_TUNNEL_ROCK_1)) { - VarSet(VAR_0x409a, 4); + VarSet(VAR_RUSTURF_TUNNEL_STATE, 4); return TRUE; } else if (FlagGet(FLAG_HIDE_RUSTURF_TUNNEL_ROCK_2)) { - VarSet(VAR_0x409a, 5); + VarSet(VAR_RUSTURF_TUNNEL_STATE, 5); return TRUE; } } @@ -1914,7 +1914,7 @@ void PutZigzagoonInPlayerParty(void) bool8 IsStarterInParty(void) { u8 i; - u16 starter = GetStarterPokemon(VarGet(VAR_FIRST_POKE)); + u16 starter = GetStarterPokemon(VarGet(VAR_STARTER_MON)); u8 partyCount = CalculatePlayerPartyCount(); for (i = 0; i < partyCount; i++) { @@ -2042,8 +2042,8 @@ void sub_810F8FC(void) u16 sub_810F908(void) { - u16 var40c2 = VarGet(VAR_0x40C2); - if (gLocalTime.days - var40c2 >= 7) + u16 tmReceivedDay = VarGet(VAR_PACIFIDLOG_TM_RECEIVED_DAY); + if (gLocalTime.days - tmReceivedDay >= 7) { return 0; } @@ -2051,12 +2051,12 @@ u16 sub_810F908(void) { return 8; } - return 7 - (gLocalTime.days - var40c2); + return 7 - (gLocalTime.days - tmReceivedDay); } u16 sub_810F950(void) { - VarSet(VAR_0x40C2, gLocalTime.days); + VarSet(VAR_PACIFIDLOG_TM_RECEIVED_DAY, gLocalTime.days); return gLocalTime.days; } @@ -2141,13 +2141,13 @@ void sub_810FAA0(void) FlagClear(0x316); FlagClear(0x317); FlagClear(0x318); - VarSet(VAR_0x4095, 1); + VarSet(VAR_LILYCOVE_FAN_CLUB_STATE, 1); } } u8 sub_810FB10(u8 a0) { - if (VarGet(VAR_0x4095) == 2) + if (VarGet(VAR_LILYCOVE_FAN_CLUB_STATE) == 2) { if ((gSaveBlock1.vars[0x41] & 0x7f) + gUnknown_083F8404[a0] >= 20) { @@ -2350,7 +2350,7 @@ void sub_810FE1C(void *linkRecords, u8 a, u8 b) void sub_810FEFC(void) { - if (VarGet(VAR_0x4095) == 2) + if (VarGet(VAR_LILYCOVE_FAN_CLUB_STATE) == 2) { sub_810FA74(); if (gBattleOutcome == 1) diff --git a/src/field/field_tasks.c b/src/field/field_tasks.c index 108ba64ba..393c7d75a 100644 --- a/src/field/field_tasks.c +++ b/src/field/field_tasks.c @@ -554,20 +554,20 @@ const u16 gUnknown_083763E4[] = { 0, 0, 0, - VAR_0x4001, - VAR_0x4002, - VAR_0x4003, - VAR_0x4004, + VAR_TEMP_1, + VAR_TEMP_2, + VAR_TEMP_3, + VAR_TEMP_4, 0, 0, - VAR_0x4005, - VAR_0x4006, - VAR_0x4007, + VAR_TEMP_5, + VAR_TEMP_6, + VAR_TEMP_7, 0, 0, - VAR_0x4008, - VAR_0x4009, - VAR_0x400A, + VAR_TEMP_8, + VAR_TEMP_9, + VAR_TEMP_A, 0, 0, 0, diff --git a/src/field/fldeff_secret_base_pc.c b/src/field/fldeff_secret_base_pc.c index 8d71a4fb9..394c4bc56 100644 --- a/src/field/fldeff_secret_base_pc.c +++ b/src/field/fldeff_secret_base_pc.c @@ -60,7 +60,7 @@ void DoSecretBasePCTurnOffEffect(void) GetXYCoordsOneStepInFrontOfPlayer(&x, &y); PlaySE(SE_PC_OFF); - if (!VarGet(VAR_0x4054)) + if (!VarGet(VAR_CURRENT_SECRET_BASE)) MapGridSetMetatileIdAt(x, y, 3616); else MapGridSetMetatileIdAt(x, y, 3617); diff --git a/src/field/item_use.c b/src/field/item_use.c index 37cd8ba78..cf5f05eb9 100644 --- a/src/field/item_use.c +++ b/src/field/item_use.c @@ -921,7 +921,7 @@ static void PrepareItemUseMessage(void) void ItemUseOutOfBattle_Repel(u8 var) { - if (VarGet(VAR_REPEL_STEP_COUNT) == FALSE) + if (VarGet(VAR_REPEL_STEP_COUNT) == 0) { VarSet(VAR_REPEL_STEP_COUNT, ItemId_GetHoldEffectParam(gSpecialVar_ItemId)); PrepareItemUseMessage(); diff --git a/src/field/lottery_corner.c b/src/field/lottery_corner.c index 83febc56e..03de26054 100644 --- a/src/field/lottery_corner.c +++ b/src/field/lottery_corner.c @@ -30,7 +30,7 @@ void ResetLotteryCorner(void) u16 rand = Random(); SetLotteryNumber((Random() << 16) | rand); - VarSet(VAR_POKELOT_PRIZE, 0); + VarSet(VAR_LOTTERY_PRIZE, 0); } void SetRandomLotteryNumber(u16 i) @@ -152,19 +152,19 @@ static u8 GetMatchingDigits(u16 winNumber, u16 otId) // lottery numbers go from 0 to 99999, not 65535 (0xFFFF). interestingly enough, the function that calls GetLotteryNumber shifts to u16, so it cant be anything above 65535 anyway. void SetLotteryNumber(u32 lotteryNum) { - u16 lowNum = lotteryNum >> 16; - u16 highNum = lotteryNum; + u16 high = lotteryNum >> 16; + u16 low = lotteryNum; - VarSet(VAR_POKELOT_RND1, highNum); - VarSet(VAR_POKELOT_RND2, lowNum); + VarSet(VAR_LOTTERY_RND_L, low); + VarSet(VAR_LOTTERY_RND_H, high); } u32 GetLotteryNumber(void) { - u16 highNum = VarGet(VAR_POKELOT_RND1); - u16 lowNum = VarGet(VAR_POKELOT_RND2); + u16 low = VarGet(VAR_LOTTERY_RND_L); + u16 high = VarGet(VAR_LOTTERY_RND_H); - return (lowNum << 16) | highNum; + return (high << 16) | low; } // interestingly, this may have been the original lottery number set function, but GF tried to change it to 32-bit later but didnt finish changing all calls as one GetLotteryNumber still shifts to u16. diff --git a/src/field/map_name_popup.c b/src/field/map_name_popup.c index 01105d0db..2e2dfc72e 100644 --- a/src/field/map_name_popup.c +++ b/src/field/map_name_popup.c @@ -19,7 +19,7 @@ bool8 unref_sub_80A2F44(void) void ShowMapNamePopup(void) { - if (FlagGet(0x4000) != TRUE) + if (FlagGet(FLAG_SPECIAL_FLAG_0) != TRUE) { if (!FuncIsActiveTask(Task_MapNamePopup)) { diff --git a/src/field/mauville_man.c b/src/field/mauville_man.c index 30f6f5233..4db513f65 100644 --- a/src/field/mauville_man.c +++ b/src/field/mauville_man.c @@ -10,6 +10,7 @@ #include "overworld.h" #include "random.h" #include "script.h" +#include "constants/map_objects.h" #include "constants/songs.h" #include "sound.h" #include "string_util.h" @@ -974,7 +975,7 @@ static void Task_BardSong(u8 taskId) void sub_80F83D0(void) { - VarSet(0x4010, 0x45 + GetCurrentMauvilleOldMan()); + VarSet(VAR_OBJ_GFX_ID_0, MAP_OBJ_GFX_BARD + GetCurrentMauvilleOldMan()); } struct Story diff --git a/src/field/overworld.c b/src/field/overworld.c index 0a1a3d008..d0e40eac3 100644 --- a/src/field/overworld.c +++ b/src/field/overworld.c @@ -816,7 +816,7 @@ static bool16 ShouldLegendaryMusicPlayAtLocation(struct WarpData *warp) static bool16 IsInfiltratedWeatherInstitute(struct WarpData *warp) { - if (VarGet(VAR_WEATHER_INSTITUTE_CLEARED)) + if (VarGet(VAR_WEATHER_INSTITUTE_STATE)) return FALSE; if (warp->mapGroup != MAP_GROUP(ROUTE119_WEATHER_INSTITUTE_1F)) return FALSE; diff --git a/src/field/player_pc.c b/src/field/player_pc.c index 6482ceee9..4fef09386 100644 --- a/src/field/player_pc.c +++ b/src/field/player_pc.c @@ -196,8 +196,8 @@ void NewGameInitPCItems(void) u8 i; // because Game Freak don't know how to use a struct or a 2d array - for(i = 0, ClearItemSlots(gSaveBlock1.pcItems, ARRAY_COUNT(gSaveBlock1.pcItems)); NEW_GAME_PC_ITEMS(i, ITEM_ID) && NEW_GAME_PC_ITEMS(i, QUANTITY) && - AddPCItem(NEW_GAME_PC_ITEMS(i, ITEM_ID), NEW_GAME_PC_ITEMS(i, QUANTITY)) == TRUE; i++) + for(i = 0, ClearItemSlots(gSaveBlock1.pcItems, ARRAY_COUNT(gSaveBlock1.pcItems)); NEW_GAME_PC_ITEMS(i, PC_ITEM_ID) && NEW_GAME_PC_ITEMS(i, PC_QUANTITY) && + AddPCItem(NEW_GAME_PC_ITEMS(i, PC_ITEM_ID), NEW_GAME_PC_ITEMS(i, PC_QUANTITY)) == TRUE; i++) ; } diff --git a/src/field/secret_base.c b/src/field/secret_base.c index 7589ab1e3..400074604 100644 --- a/src/field/secret_base.c +++ b/src/field/secret_base.c @@ -180,7 +180,7 @@ void sub_80BB5E4(void) if (gUnknown_020387DC != gSaveBlock1.secretBases[i].secretBaseId) continue; gSpecialVar_Result = 1; - VarSet(VAR_0x4054, i); + VarSet(VAR_CURRENT_SECRET_BASE, i); break; } } @@ -284,7 +284,7 @@ void sub_80BB8CC(void) for (idx=0; idx<4; idx++) { gSaveBlock1.secretBases[0].trainerId[idx] = gSaveBlock2.playerTrainerId[idx]; } - VarSet(VAR_0x4054, 0); + VarSet(VAR_CURRENT_SECRET_BASE, 0); nameLength = sub_80BB8A8(gSaveBlock2.playerName); memset(gSaveBlock1.secretBases[0].playerName, 0xFF, OT_NAME_LENGTH); StringCopyN(gSaveBlock1.secretBases[0].playerName, gSaveBlock2.playerName, nameLength); @@ -333,7 +333,7 @@ void sub_80BBA48(u8 taskid) } break; case 2: - curbaseid = VarGet(VAR_0x4054); + curbaseid = VarGet(VAR_CURRENT_SECRET_BASE); if (gSaveBlock1.secretBases[curbaseid].sbr_field_10 < 0xff) gSaveBlock1.secretBases[curbaseid].sbr_field_10++; sub_80BBA14(); @@ -412,7 +412,7 @@ void sub_80BBCCC(u8 flagIn) u16 curBaseId; u16 x, y; if (CurrentMapIsSecretBase()) { - curBaseId = VarGet(VAR_0x4054); + curBaseId = VarGet(VAR_CURRENT_SECRET_BASE); for (x=0; x<16; x++) { if (gSaveBlock1.secretBases[curBaseId].decorations[x] > 0 && gSaveBlock1.secretBases[curBaseId].decorations[x] <= 0x78 && gDecorations[gSaveBlock1.secretBases[curBaseId].decorations[x]].permission != DECORPERM_SOLID_MAT) { sub_80FF394((gSaveBlock1.secretBases[curBaseId].decorationPos[x] >> 4) + 7, (gSaveBlock1.secretBases[curBaseId].decorationPos[x] & 0xF) + 7, gSaveBlock1.secretBases[curBaseId].decorations[x]); @@ -437,7 +437,7 @@ void sub_80BBDD0(void) u8 metatile; u8 permission; u8 ndecor; - u16 curBase = VarGet(VAR_0x4054); + u16 curBase = VarGet(VAR_CURRENT_SECRET_BASE); if (!CurrentMapIsSecretBase()) { roomdecor = gSaveBlock1.playerRoomDecor; roomdecorpos = gSaveBlock1.playerRoomDecorPos; @@ -478,8 +478,8 @@ void sub_80BBDD0(void) void sub_80BBFA4(void) { - int curBase = VarGet(VAR_0x4054); - VarSet(VAR_0x401F, gUnknown_083D13EC[sub_80BCCA4(curBase)]); + int curBase = VarGet(VAR_CURRENT_SECRET_BASE); + VarSet(VAR_OBJ_GFX_ID_F, gUnknown_083D13EC[sub_80BCCA4(curBase)]); } void sub_80BBFD8(struct MapPosition *position, struct MapEvents *events) @@ -571,12 +571,12 @@ u8 *sub_80BC190(u8 *dest, u8 arg1) { // 80bc190 } u8 *GetSecretBaseMapName(u8 *dest) { - gUnknown_020387DC = gSaveBlock1.secretBases[VarGet(VAR_0x4054)].secretBaseId; - return sub_80BC190(dest, VarGet(VAR_0x4054)); + gUnknown_020387DC = gSaveBlock1.secretBases[VarGet(VAR_CURRENT_SECRET_BASE)].secretBaseId; + return sub_80BC190(dest, VarGet(VAR_CURRENT_SECRET_BASE)); } void sub_80BC224(void) { - u8 *var0 = gSaveBlock1.secretBases[(u8)VarGet(VAR_0x4054)].playerName; + u8 *var0 = gSaveBlock1.secretBases[(u8)VarGet(VAR_CURRENT_SECRET_BASE)].playerName; u8 *var1 = gStringVar1; u8 var2 = sub_80BB8A8(var0); u8 *var3 = StringCopyN(var1, var0, var2); @@ -1173,7 +1173,7 @@ void sub_80BCBF8(u8 taskId) void sub_80BCC54(u8 taskId) { - u16 curBaseIndex = VarGet(VAR_0x4054); + u16 curBaseIndex = VarGet(VAR_CURRENT_SECRET_BASE); BuyMenuFreeMemory(); DestroyVerticalScrollIndicator(0); @@ -1199,7 +1199,7 @@ u8 sub_80BCCA4(u8 secretBaseIndex) const u8 *sub_80BCCE8(void) { - u8 param = sub_80BCCA4(VarGet(VAR_0x4054)); + u8 param = sub_80BCCA4(VarGet(VAR_CURRENT_SECRET_BASE)); if (param == 0) return UnknownString_81A1BB2; if (param == 1) return UnknownString_81A1F67; if (param == 2) return UnknownString_81A2254; @@ -1229,7 +1229,7 @@ void unref_sub_80BCD7C(u8 secretBaseIndex) void sub_80BCE1C(void) { - u16 curBaseIndex = VarGet(VAR_0x4054); + u16 curBaseIndex = VarGet(VAR_CURRENT_SECRET_BASE); sub_810FB10(1); CreateSecretBaseEnemyParty(&gSaveBlock1.secretBases[curBaseIndex]); @@ -1237,12 +1237,12 @@ void sub_80BCE1C(void) void sub_80BCE4C() { - gSaveBlock1.secretBases[VarGet(VAR_0x4054)].sbr_field_1_5 = gSpecialVar_Result; + gSaveBlock1.secretBases[VarGet(VAR_CURRENT_SECRET_BASE)].sbr_field_1_5 = gSpecialVar_Result; } void sub_80BCE90() { - u16 curBaseIndex = VarGet(VAR_0x4054); + u16 curBaseIndex = VarGet(VAR_CURRENT_SECRET_BASE); if (!FlagGet(FLAG_DAILY_UNKNOWN_8C2)) { diff --git a/src/field/tv.c b/src/field/tv.c index 1d5bf929c..c38da1f4c 100644 --- a/src/field/tv.c +++ b/src/field/tv.c @@ -2149,7 +2149,7 @@ void GetMomOrDadStringForTVMessage(void) if (gSaveBlock1.location.mapNum == MAP_NUM(LITTLEROOT_TOWN_BRENDANS_HOUSE_1F)) { StringCopy(gStringVar1, gOtherText_Mom); - VarSet(VAR_0x4003, 1); + VarSet(VAR_TEMP_3, 1); } } else @@ -2157,21 +2157,21 @@ void GetMomOrDadStringForTVMessage(void) if (gSaveBlock1.location.mapNum == MAP_NUM(LITTLEROOT_TOWN_MAYS_HOUSE_1F)) { StringCopy(gStringVar1, gOtherText_Mom); - VarSet(VAR_0x4003, 1); + VarSet(VAR_TEMP_3, 1); } } } - if (VarGet(VAR_0x4003) == 1) + if (VarGet(VAR_TEMP_3) == 1) { StringCopy(gStringVar1, gOtherText_Mom); } - else if (VarGet(VAR_0x4003) == 2) + else if (VarGet(VAR_TEMP_3) == 2) { StringCopy(gStringVar1, gOtherText_Dad); } - else if (VarGet(VAR_0x4003) > 2) + else if (VarGet(VAR_TEMP_3) > 2) { - if (VarGet(VAR_0x4003) % 2 == 0) + if (VarGet(VAR_TEMP_3) % 2 == 0) StringCopy(gStringVar1, gOtherText_Mom); else StringCopy(gStringVar1, gOtherText_Dad); @@ -2181,19 +2181,19 @@ void GetMomOrDadStringForTVMessage(void) if (Random() % 2 != 0) { StringCopy(gStringVar1, gOtherText_Mom); - VarSet(VAR_0x4003, 1); + VarSet(VAR_TEMP_3, 1); } else { StringCopy(gStringVar1, gOtherText_Dad); - VarSet(VAR_0x4003, 2); + VarSet(VAR_TEMP_3, 2); } } } void sub_80BFD20(void) { - VarSet(VAR_0x40BC, 0); + VarSet(VAR_BRAVO_TRAINER_BATTLE_TOWER_ON, 0); RemoveFieldObjectByLocalIdAndMap(5, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); } diff --git a/src/pokemon/pokemon_summary_screen.c b/src/pokemon/pokemon_summary_screen.c index 4de5f5345..cd3793cb5 100644 --- a/src/pokemon/pokemon_summary_screen.c +++ b/src/pokemon/pokemon_summary_screen.c @@ -1167,13 +1167,13 @@ static void sub_809E5C4(void) struct Pokemon *pkmn = &party[pssData.monIndex]; u8 moveIndex1 = pssData.selectedMoveIndex; u8 moveIndex2 = pssData.switchMoveIndex; - + u16 move1 = GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex1); u16 move2 = GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex2); u8 move1pp = GetMonData(pkmn, MON_DATA_PP1 + moveIndex1); u8 move2pp = GetMonData(pkmn, MON_DATA_PP1 + moveIndex2); u8 ppBonuses = GetMonData(pkmn, MON_DATA_PP_BONUSES); - + // Calculate PP bonuses u8 r9 = gUnknown_08208238[moveIndex1]; u8 r2 = (ppBonuses & r9) >> (moveIndex1 * 2); @@ -1182,7 +1182,7 @@ static void sub_809E5C4(void) ppBonuses &= ~r9; ppBonuses &= ~r3; ppBonuses |= (r2 << (moveIndex2 * 2)) + (r1 << (moveIndex1 * 2)); - + // Swap the moves SetMonData(pkmn, MON_DATA_MOVE1 + moveIndex1, &move2); SetMonData(pkmn, MON_DATA_MOVE1 + moveIndex2, &move1); @@ -1197,13 +1197,13 @@ static void sub_809E6D8(void) struct BoxPokemon *pkmn = &boxMons[pssData.monIndex]; u8 moveIndex1 = pssData.selectedMoveIndex; u8 moveIndex2 = pssData.switchMoveIndex; - + u16 move1 = GetBoxMonData(pkmn, MON_DATA_MOVE1 + moveIndex1); u16 move2 = GetBoxMonData(pkmn, MON_DATA_MOVE1 + moveIndex2); u8 move1pp = GetBoxMonData(pkmn, MON_DATA_PP1 + moveIndex1); u8 move2pp = GetBoxMonData(pkmn, MON_DATA_PP1 + moveIndex2); u8 ppBonuses = GetBoxMonData(pkmn, MON_DATA_PP_BONUSES); - + // Calculate PP bonuses u8 r9 = gUnknown_08208238[moveIndex1]; u8 r2 = (ppBonuses & r9) >> (moveIndex1 * 2); @@ -1212,7 +1212,7 @@ static void sub_809E6D8(void) ppBonuses &= ~r9; ppBonuses &= ~r3; ppBonuses |= (r2 << (moveIndex2 * 2)) + (r1 << (moveIndex1 * 2)); - + // Swap the moves SetBoxMonData(pkmn, MON_DATA_MOVE1 + moveIndex1, &move2); SetBoxMonData(pkmn, MON_DATA_MOVE1 + moveIndex2, &move1); @@ -2078,7 +2078,7 @@ s8 sub_809F344(u8 partyIndex) { while (1) { - partyIndex++; + partyIndex++; if (partyIndex == PARTY_SIZE) { return -1; @@ -2100,7 +2100,7 @@ s8 sub_809F388(u8 partyIndex) return -1; } - partyIndex--; + partyIndex--; if (sub_809F310(&gPlayerParty[sDoubleBattlePartyOrder[partyIndex]]) == TRUE) { return sDoubleBattlePartyOrder[partyIndex]; @@ -2332,7 +2332,7 @@ static bool8 sub_809F7D0(u8 taskId) u16 move; sub_809F678(&mon); - move = GetMonMove(&mon, pssData.selectedMoveIndex); + move = GetMonMove(&mon, pssData.selectedMoveIndex); if (IsHMMove(move) == TRUE && pssData.mode != PSS_MODE_UNKNOWN) { return FALSE; @@ -2341,17 +2341,13 @@ static bool8 sub_809F7D0(u8 taskId) return TRUE; } -#ifdef NONMATCHING // The two "pssData.selectedMoveIndex = taskData[15];" lines have small register differences. void sub_809F814(u8 taskId) { - u16 var1; - s16 *taskData = gTasks[taskId].data; - var1 = taskData[14]; if (taskData[14] < 4) { - taskData[14] = var1 + 1; + taskData[14]++; } else if (gMain.newKeys & DPAD_UP) { @@ -2359,7 +2355,7 @@ void sub_809F814(u8 taskId) taskData[0] = 4; taskData[13] = 1; pssData.selectedMoveIndex = taskData[15]; - sub_809E8F0(taskId, -1); + sub_809E8F0(taskId, -1, &pssData.selectedMoveIndex); } else if (gMain.newKeys & DPAD_DOWN) { @@ -2367,7 +2363,7 @@ void sub_809F814(u8 taskId) taskData[0] = 4; taskData[13] = 1; pssData.selectedMoveIndex = taskData[15]; - sub_809E8F0(taskId, 1); + sub_809E8F0(taskId, 1, &pssData.selectedMoveIndex); } else if ((gMain.newKeys & DPAD_LEFT) || sub_80F9284() == 1) { @@ -2410,229 +2406,6 @@ void sub_809F814(u8 taskId) } } -#else -__attribute__((naked)) -void sub_809F814(u8 taskId) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r8\n\ - push {r7}\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - lsls r0, r5, 2\n\ - adds r0, r5\n\ - lsls r6, r0, 3\n\ - ldr r0, _0809F83C @ =gTasks + 0x8\n\ - mov r8, r0\n\ - adds r4, r6, r0\n\ - ldrh r1, [r4, 0x1C]\n\ - movs r2, 0x1C\n\ - ldrsh r0, [r4, r2]\n\ - cmp r0, 0x3\n\ - bgt _0809F840\n\ - adds r0, r1, 0x1\n\ - strh r0, [r4, 0x1C]\n\ - b _0809F9C0\n\ - .align 2, 0\n\ -_0809F83C: .4byte gTasks + 0x8\n\ -_0809F840:\n\ - ldr r7, _0809F874 @ =gMain\n\ - ldrh r1, [r7, 0x2E]\n\ - movs r0, 0x40\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0809F880\n\ - mov r0, r8\n\ - subs r0, 0x8\n\ - adds r0, r6, r0\n\ - ldr r1, _0809F878 @ =sub_809E260\n\ - str r1, [r0]\n\ - movs r0, 0x4\n\ - strh r0, [r4]\n\ - movs r0, 0x1\n\ - strh r0, [r4, 0x1A]\n\ - ldr r2, _0809F87C @ =gSharedMem + 0x18000\n\ - ldrh r0, [r4, 0x1E]\n\ - adds r2, 0x79\n\ - strb r0, [r2]\n\ - movs r1, 0x1\n\ - negs r1, r1\n\ - adds r0, r5, 0\n\ - bl sub_809E8F0\n\ - b _0809F9C0\n\ - .align 2, 0\n\ -_0809F874: .4byte gMain\n\ -_0809F878: .4byte sub_809E260\n\ -_0809F87C: .4byte gSharedMem + 0x18000\n\ -_0809F880:\n\ - movs r0, 0x80\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0809F8B4\n\ - mov r0, r8\n\ - subs r0, 0x8\n\ - adds r0, r6, r0\n\ - ldr r1, _0809F8AC @ =sub_809E260\n\ - str r1, [r0]\n\ - movs r0, 0x4\n\ - strh r0, [r4]\n\ - movs r0, 0x1\n\ - strh r0, [r4, 0x1A]\n\ - ldr r2, _0809F8B0 @ =gSharedMem + 0x18000\n\ - ldrh r0, [r4, 0x1E]\n\ - adds r2, 0x79\n\ - strb r0, [r2]\n\ - adds r0, r5, 0\n\ - movs r1, 0x1\n\ - bl sub_809E8F0\n\ - b _0809F9C0\n\ - .align 2, 0\n\ -_0809F8AC: .4byte sub_809E260\n\ -_0809F8B0: .4byte gSharedMem + 0x18000\n\ -_0809F8B4:\n\ - movs r0, 0x20\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0809F8C8\n\ - bl sub_80F9284\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x1\n\ - bne _0809F918\n\ -_0809F8C8:\n\ - ldr r1, _0809F90C @ =gSharedMem + 0x18000\n\ - ldrb r0, [r1, 0xB]\n\ - cmp r0, 0x2\n\ - beq _0809F9C0\n\ - cmp r0, 0x3\n\ - bne _0809F8F4\n\ - adds r0, r1, 0\n\ - adds r0, 0x79\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x4\n\ - bne _0809F8E8\n\ - adds r0, r1, 0\n\ - adds r0, 0x7C\n\ - ldrh r0, [r0]\n\ - cmp r0, 0\n\ - beq _0809F8F4\n\ -_0809F8E8:\n\ - movs r0, 0\n\ - movs r1, 0xE\n\ - movs r2, 0x9\n\ - movs r3, 0x12\n\ - bl MenuZeroFillWindowRect\n\ -_0809F8F4:\n\ - ldr r1, _0809F910 @ =gTasks\n\ - lsls r0, r5, 2\n\ - adds r0, r5\n\ - lsls r0, 3\n\ - adds r0, r1\n\ - ldr r1, _0809F914 @ =sub_809E260\n\ - str r1, [r0]\n\ - movs r1, 0x1\n\ - negs r1, r1\n\ - adds r0, r5, 0\n\ - b _0809F972\n\ - .align 2, 0\n\ -_0809F90C: .4byte gSharedMem + 0x18000\n\ -_0809F910: .4byte gTasks\n\ -_0809F914: .4byte sub_809E260\n\ -_0809F918:\n\ - ldrh r1, [r7, 0x2E]\n\ - movs r0, 0x10\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0809F92E\n\ - bl sub_80F9284\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x2\n\ - bne _0809F994\n\ -_0809F92E:\n\ - ldr r1, _0809F988 @ =gSharedMem + 0x18000\n\ - adds r2, r1, 0\n\ - adds r2, 0x76\n\ - ldrb r0, [r1, 0xB]\n\ - ldrb r2, [r2]\n\ - cmp r0, r2\n\ - beq _0809F9C0\n\ - cmp r0, 0x2\n\ - bne _0809F960\n\ - adds r0, r1, 0\n\ - adds r0, 0x79\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x4\n\ - bne _0809F954\n\ - adds r0, r1, 0\n\ - adds r0, 0x7C\n\ - ldrh r0, [r0]\n\ - cmp r0, 0\n\ - beq _0809F960\n\ -_0809F954:\n\ - movs r0, 0\n\ - movs r1, 0xE\n\ - movs r2, 0x9\n\ - movs r3, 0x12\n\ - bl MenuZeroFillWindowRect\n\ -_0809F960:\n\ - ldr r1, _0809F98C @ =gTasks\n\ - lsls r0, r5, 2\n\ - adds r0, r5\n\ - lsls r0, 3\n\ - adds r0, r1\n\ - ldr r1, _0809F990 @ =sub_809E260\n\ - str r1, [r0]\n\ - adds r0, r5, 0\n\ - movs r1, 0x1\n\ -_0809F972:\n\ - bl SummaryScreenHandleLeftRightInput\n\ - ldrb r1, [r4, 0x1E]\n\ - movs r0, 0x1\n\ - bl sub_80A1488\n\ - ldrb r1, [r4, 0x1E]\n\ - movs r0, 0x1\n\ - bl sub_80A1654\n\ - b _0809F9C0\n\ - .align 2, 0\n\ -_0809F988: .4byte gSharedMem + 0x18000\n\ -_0809F98C: .4byte gTasks\n\ -_0809F990: .4byte sub_809E260\n\ -_0809F994:\n\ - ldrh r1, [r7, 0x2E]\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0809F9A6\n\ - movs r0, 0x2\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0809F9C0\n\ -_0809F9A6:\n\ - ldrb r1, [r4, 0x1E]\n\ - movs r0, 0x2\n\ - bl sub_80A1488\n\ - ldrb r1, [r4, 0x1E]\n\ - movs r0, 0x2\n\ - bl sub_80A1654\n\ - mov r0, r8\n\ - subs r0, 0x8\n\ - adds r0, r6, r0\n\ - ldr r1, _0809F9CC @ =sub_809E260\n\ - str r1, [r0]\n\ -_0809F9C0:\n\ - pop {r3}\n\ - mov r8, r3\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_0809F9CC: .4byte sub_809E260\n\ - .syntax divided\n"); -} -#endif // NONMATCHING - static void sub_809F9D0(u8 taskId, u8 b) { s16 *taskData = gTasks[taskId].data; @@ -3012,7 +2785,7 @@ static void sub_80A015C(struct Pokemon *mon) sub_80A1FF8(gMoveNames[move], 13, 15, (2 * i) + 4); GetStringCenterAlignXOffset(1, 24, (2 * i) + 4); - + ppBonuses = GetMonData(mon, MON_DATA_PP_BONUSES); maxPP = CalculatePPWithBonus(move, ppBonuses, i); diff --git a/src/pokenav_before.c b/src/pokenav_before.c index 6e83c6f97..7693cba7d 100644 --- a/src/pokenav_before.c +++ b/src/pokenav_before.c @@ -308,7 +308,7 @@ void sub_80EBA5C() { gMain.state++; SetMainCallback2(&sub_80EBBE8); break; - } + } break; case 1: SetVBlankCallback(NULL); @@ -331,7 +331,7 @@ void sub_80EBA5C() { case 7: sub_80F1A90(); gMain.state++; - case 8: + case 8: if (sub_80F1AC4()) return; break; case 9: @@ -535,7 +535,7 @@ void sub_80EBDD8() { sub_80EBDBC(&sub_80EC268); } return; - + } } @@ -584,7 +584,7 @@ void sub_80EC00C() { ewram0_10.var304++; return; case 9: - sub_80F2598(); + sub_80F2598(); ewram0_10.var304++; break; case 10: @@ -3479,8 +3479,6 @@ void sub_80EF840(void) } } -// The only non-matching part is the gSaveBlock2.regionMapZoom access. -#ifdef NONMATCHING bool8 sub_80EF874(void) { switch (gUnknown_083DFEC4->unkD160) @@ -3504,7 +3502,7 @@ bool8 sub_80EF874(void) MenuZeroFillScreen(); break; case 5: - sub_80FA904(&gUnknown_083DFEC4->regionMap, gSaveBlock2.regionMapZoom); + sub_80FA904(&gUnknown_083DFEC4->regionMap, gSaveBlock2.regionMapZoom ? TRUE : FALSE); break; case 6: if (sub_80FA940()) @@ -3552,501 +3550,75 @@ bool8 sub_80EF874(void) gUnknown_083DFEC4->unkD160++; return TRUE; } -#else -asm(".include \"constants/gba_constants.inc\"\n"); -__attribute__((naked)) -bool8 sub_80EF874(void) -{ - asm(".syntax unified\n\ - push {lr}\n\ - ldr r0, _080EF890 @ =gUnknown_083DFEC4\n\ - ldr r0, [r0]\n\ - ldr r1, _080EF894 @ =0x0000d160\n\ - adds r0, r1\n\ - ldrh r0, [r0]\n\ - cmp r0, 0xB\n\ - bls _080EF886\n\ - b _080EF9D8\n\ -_080EF886:\n\ - lsls r0, 2\n\ - ldr r1, _080EF898 @ =_080EF89C\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ - .align 2, 0\n\ -_080EF890: .4byte gUnknown_083DFEC4\n\ -_080EF894: .4byte 0x0000d160\n\ -_080EF898: .4byte _080EF89C\n\ - .align 2, 0\n\ -_080EF89C:\n\ - .4byte _080EF8CC\n\ - .4byte _080EF8D2\n\ - .4byte _080EF8E0\n\ - .4byte _080EF8EC\n\ - .4byte _080EF8F6\n\ - .4byte _080EF8FC\n\ - .4byte _080EF920\n\ - .4byte _080EF92C\n\ - .4byte _080EF940\n\ - .4byte _080EF954\n\ - .4byte _080EF960\n\ - .4byte _080EF972\n\ -_080EF8CC:\n\ - bl sub_80EEDE8\n\ - b _080EF9DC\n\ -_080EF8D2:\n\ - ldr r0, _080EF8DC @ =gWindowConfig_81E7224\n\ - bl SetUpWindowConfig\n\ - b _080EF9DC\n\ - .align 2, 0\n\ -_080EF8DC: .4byte gWindowConfig_81E7224\n\ -_080EF8E0:\n\ - ldr r0, _080EF8E8 @ =gWindowConfig_81E7224\n\ - bl MultistepInitMenuWindowBegin\n\ - b _080EF9DC\n\ - .align 2, 0\n\ -_080EF8E8: .4byte gWindowConfig_81E7224\n\ -_080EF8EC:\n\ - bl MultistepInitMenuWindowContinue\n\ - cmp r0, 0\n\ - bne _080EF9DC\n\ - b _080EF9EA\n\ -_080EF8F6:\n\ - bl MenuZeroFillScreen\n\ - b _080EF9DC\n\ -_080EF8FC:\n\ - ldr r0, _080EF914 @ =gUnknown_083DFEC4\n\ - ldr r0, [r0]\n\ - ldr r2, _080EF918 @ =0x00006e18\n\ - adds r0, r2\n\ - ldr r1, _080EF91C @ =gSaveBlock2\n\ - ldrb r1, [r1, 0x15]\n\ - lsrs r1, 3\n\ - movs r2, 0x1\n\ - ands r1, r2\n\ - bl sub_80FA904\n\ - b _080EF9DC\n\ - .align 2, 0\n\ -_080EF914: .4byte gUnknown_083DFEC4\n\ -_080EF918: .4byte 0x00006e18\n\ -_080EF91C: .4byte gSaveBlock2\n\ -_080EF920:\n\ - bl sub_80FA940\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _080EF9DC\n\ - b _080EF9EA\n\ -_080EF92C:\n\ - ldr r0, _080EF938 @ =gPokenavHoennMapSquares_Gfx\n\ - ldr r1, _080EF93C @ =0x06005000\n\ - bl LZ77UnCompVram\n\ - b _080EF9DC\n\ - .align 2, 0\n\ -_080EF938: .4byte gPokenavHoennMapSquares_Gfx\n\ -_080EF93C: .4byte 0x06005000\n\ -_080EF940:\n\ - ldr r0, _080EF950 @ =gPokenavHoennMapSquares_Pal\n\ - movs r1, 0x30\n\ - movs r2, 0x20\n\ - bl LoadPalette\n\ - bl sub_80EFC3C\n\ - b _080EF9DC\n\ - .align 2, 0\n\ -_080EF950: .4byte gPokenavHoennMapSquares_Pal\n\ -_080EF954:\n\ - bl sub_80EFC64\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _080EF9DC\n\ - b _080EF9EA\n\ -_080EF960:\n\ - movs r0, 0xD\n\ - movs r1, 0x3\n\ - movs r2, 0x1D\n\ - movs r3, 0x11\n\ - bl MenuDrawTextWindow\n\ - bl sub_80EF9F8\n\ - b _080EF9DC\n\ -_080EF972:\n\ - ldr r0, _080EF990 @ =gUnknown_083DFEC4\n\ - ldr r1, [r0]\n\ - ldr r2, _080EF994 @ =0x00006e90\n\ - adds r0, r1, r2\n\ - ldrb r0, [r0]\n\ - cmp r0, 0\n\ - bne _080EF9A0\n\ - ldr r2, _080EF998 @ =0x00007698\n\ - adds r0, r1, r2\n\ - movs r1, 0xA0\n\ - strh r1, [r0]\n\ - ldr r0, _080EF99C @ =REG_BG0VOFS\n\ - strh r1, [r0]\n\ - b _080EF9B0\n\ - .align 2, 0\n\ -_080EF990: .4byte gUnknown_083DFEC4\n\ -_080EF994: .4byte 0x00006e90\n\ -_080EF998: .4byte 0x00007698\n\ -_080EF99C: .4byte REG_BG0VOFS\n\ -_080EF9A0:\n\ - ldr r0, _080EF9C8 @ =0x00007698\n\ - adds r1, r0\n\ - movs r2, 0\n\ - movs r0, 0x80\n\ - lsls r0, 1\n\ - strh r0, [r1]\n\ - ldr r0, _080EF9CC @ =REG_BG0VOFS\n\ - strh r2, [r0]\n\ -_080EF9B0:\n\ - ldr r2, _080EF9D0 @ =REG_BG0CNT\n\ - ldrh r0, [r2]\n\ - strh r0, [r2]\n\ - ldrh r0, [r2]\n\ - movs r1, 0x1\n\ - orrs r0, r1\n\ - strh r0, [r2]\n\ - ldr r1, _080EF9D4 @ =REG_BLDCNT\n\ - movs r0, 0\n\ - strh r0, [r1]\n\ - b _080EF9DC\n\ - .align 2, 0\n\ -_080EF9C8: .4byte 0x00007698\n\ -_080EF9CC: .4byte REG_BG0VOFS\n\ -_080EF9D0: .4byte REG_BG0CNT\n\ -_080EF9D4: .4byte REG_BLDCNT\n\ -_080EF9D8:\n\ - movs r0, 0\n\ - b _080EF9EC\n\ -_080EF9DC:\n\ - ldr r0, _080EF9F0 @ =gUnknown_083DFEC4\n\ - ldr r1, [r0]\n\ - ldr r2, _080EF9F4 @ =0x0000d160\n\ - adds r1, r2\n\ - ldrh r0, [r1]\n\ - adds r0, 0x1\n\ - strh r0, [r1]\n\ -_080EF9EA:\n\ - movs r0, 0x1\n\ -_080EF9EC:\n\ - pop {r1}\n\ - bx r1\n\ - .align 2, 0\n\ -_080EF9F0: .4byte gUnknown_083DFEC4\n\ -_080EF9F4: .4byte 0x0000d160\n\ - .syntax divided\n"); -} -#endif // NONMATCHING +asm(".include \"constants/gba_constants.inc\"\n"); -#ifdef NONMATCHING void sub_80EF9F8(void) { - s32 zero; - u16 i; - u8 *mapSectionName; - u32 offset; + bool8 someBool = FALSE; + u16 top = 4; u16 mapSectionId; u8 b; - u8 **pointer; - u16 var1 = 4; - switch (gUnknown_083DFEC4->regionMap.unk16) { + case 0: + break; case 1: case 4: - sub_8072A18(gUnknown_083DFEC4->regionMap.mapSectionName, 0x70, var1 * 8, 0x78, 1); - var1 += 2; - + sub_8072A18(gUnknown_083DFEC4->regionMap.mapSectionName, 0x70, top * 8, 0x78, 1); + top += 2; if (gLinkOpen == TRUE) { sub_80F1A80(); + someBool = TRUE; } else { - i = 0; - while (i < 4 && (mapSectionName = GetLandmarkName(gUnknown_083DFEC4->regionMap.mapSectionId, gUnknown_083DFEC4->regionMap.everGrandeCityArea, i)) != NULL) - { - sub_8072A18(mapSectionName, 0x70, var1 * 8, 0x78, 1); - var1 += 2; - i++; - } - - // This check is always true, but somehow the compiler still performed it. - asm("mov %0, #0\n":"=r"(zero)); // zero = 0 - if (!zero && var1 < 16) - { - MenuFillWindowRectWithBlankTile(14, var1, 28, 15); - } + u16 i; + + for (i = 0; i < 4; i++) + { + const u8 *secName = GetLandmarkName( + gUnknown_083DFEC4->regionMap.mapSectionId, + gUnknown_083DFEC4->regionMap.everGrandeCityArea, + i); + + if (secName == NULL) + break; + sub_8072A18(secName, 0x70, top * 8, 0x78, 1); + top += 2; + } } break; case 2: - sub_8072A18(gUnknown_083DFEC4->regionMap.mapSectionName, 0x70, var1 * 8, 0x78, 1); - var1 += 2; - + sub_8072A18(gUnknown_083DFEC4->regionMap.mapSectionName, 0x70, top * 8, 0x78, 1); + top += 2; mapSectionId = gUnknown_083DFEC4->regionMap.mapSectionId; - b = gUnknown_083DFEC4->regionMap.everGrandeCityArea; - offset = (b << 2) + (mapSectionId << 3); - pointer = (u8 **)((u8 *)&gUnknown_083DFEC4->unkCDCC + offset); - if (*pointer != NULL) - { - MenuFillWindowRectWithBlankTile(14, var1, 15, 15); - MenuFillWindowRectWithBlankTile(26, var1, 28, 15); - - sub_8095C8C((void *)VRAM + 0xF800, 16, 6, *pointer, 0, 0, 10, 10, 10); - - var1 += 11; - } - - // This check is always true, but somehow the compiler still performed it. - asm("mov %0, #0\n":"=r"(zero)); // zero = 0 - if (!zero && var1 < 16) + b = gUnknown_083DFEC4->regionMap.everGrandeCityArea; + if (gUnknown_083DFEC4->unkCDCC[mapSectionId][b] != NULL) { - MenuFillWindowRectWithBlankTile(14, var1, 28, 15); + MenuFillWindowRectWithBlankTile(14, top, 15, 15); + MenuFillWindowRectWithBlankTile(26, top, 28, 15); + sub_8095C8C((void *)(VRAM + 0xF800), 16, 6, gUnknown_083DFEC4->unkCDCC[mapSectionId][b], 0, 0, 10, 10, 10); + top += 11; } break; case 3: - sub_8072A18(gUnknown_083DFEC4->regionMap.mapSectionName, 0x70, var1 * 8, 0x78, 1); - var1 += 2; - - // This check is always true, but somehow the compiler still performed it. - asm("mov %0, #0\n":"=r"(zero)); // zero = 0 - if (!zero && var1 < 16) - { - MenuFillWindowRectWithBlankTile(14, var1, 28, 15); - } - break; - case 0: - default: - // This check is always true, but somehow the compiler still performed it. - asm("mov %0, #0\n":"=r"(zero)); // zero = 0 - if (!zero && var1 < 16) - { - MenuFillWindowRectWithBlankTile(14, var1, 28, 15); - } + sub_8072A18(gUnknown_083DFEC4->regionMap.mapSectionName, 0x70, top * 8, 0x78, 1); + top += 2; break; } + // Epic fail by the compiler at optimizing this. + if (!someBool && top < 16) + MenuFillWindowRectWithBlankTile(14, top, 28, 15); + if (gUnknown_083DFEC4->regionMap.unk16 == 2) - { sub_80EFD74(); - } else - { sub_80EFDA0(); - } -} -#else -__attribute__((naked)) -void sub_80EF9F8(void) -{ - asm(".syntax unified\n\ - push {r4-r6,lr}\n\ - sub sp, 0x14\n\ - movs r5, 0x4\n\ - ldr r0, _080EFA18 @ =gUnknown_083DFEC4\n\ - ldr r0, [r0]\n\ - ldr r1, _080EFA1C @ =0x00006e2e\n\ - adds r0, r1\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x4\n\ - bls _080EFA0E\n\ - b _080EFB6A\n\ -_080EFA0E:\n\ - lsls r0, 2\n\ - ldr r1, _080EFA20 @ =_080EFA24\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ - .align 2, 0\n\ -_080EFA18: .4byte gUnknown_083DFEC4\n\ -_080EFA1C: .4byte 0x00006e2e\n\ -_080EFA20: .4byte _080EFA24\n\ - .align 2, 0\n\ -_080EFA24:\n\ - .4byte _080EFB6A\n\ - .4byte _080EFA38\n\ - .4byte _080EFAC0\n\ - .4byte _080EFB4C\n\ - .4byte _080EFA38\n\ -_080EFA38:\n\ - ldr r0, _080EFA64 @ =gUnknown_083DFEC4\n\ - ldr r0, [r0]\n\ - ldr r2, _080EFA68 @ =0x00006e18\n\ - adds r0, r2\n\ - lsls r2, r5, 19\n\ - lsrs r2, 16\n\ - movs r1, 0x1\n\ - str r1, [sp]\n\ - movs r1, 0x70\n\ - movs r3, 0x78\n\ - bl sub_8072A18\n\ - adds r0, r5, 0x2\n\ - lsls r0, 16\n\ - lsrs r5, r0, 16\n\ - ldr r0, _080EFA6C @ =gLinkOpen\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x1\n\ - bne _080EFA70\n\ - bl sub_80F1A80\n\ - b _080EFB82\n\ - .align 2, 0\n\ -_080EFA64: .4byte gUnknown_083DFEC4\n\ -_080EFA68: .4byte 0x00006e18\n\ -_080EFA6C: .4byte gLinkOpen\n\ -_080EFA70:\n\ - movs r4, 0\n\ - b _080EFA92\n\ -_080EFA74:\n\ - lsls r2, r5, 19\n\ - lsrs r2, 16\n\ - movs r0, 0x1\n\ - str r0, [sp]\n\ - adds r0, r1, 0\n\ - movs r1, 0x70\n\ - movs r3, 0x78\n\ - bl sub_8072A18\n\ - adds r0, r5, 0x2\n\ - lsls r0, 16\n\ - lsrs r5, r0, 16\n\ - adds r0, r4, 0x1\n\ - lsls r0, 16\n\ - lsrs r4, r0, 16\n\ -_080EFA92:\n\ - cmp r4, 0x3\n\ - bhi _080EFB6A\n\ - ldr r0, _080EFAB8 @ =gUnknown_083DFEC4\n\ - ldr r1, [r0]\n\ - ldr r2, _080EFABC @ =0x00006e2c\n\ - adds r0, r1, r2\n\ - ldrb r0, [r0]\n\ - adds r2, 0x3\n\ - adds r1, r2\n\ - ldrb r1, [r1]\n\ - lsls r2, r4, 24\n\ - lsrs r2, 24\n\ - bl GetLandmarkName\n\ - adds r1, r0, 0\n\ - cmp r1, 0\n\ - bne _080EFA74\n\ - b _080EFB6A\n\ - .align 2, 0\n\ -_080EFAB8: .4byte gUnknown_083DFEC4\n\ -_080EFABC: .4byte 0x00006e2c\n\ -_080EFAC0:\n\ - ldr r0, _080EFB38 @ =gUnknown_083DFEC4\n\ - ldr r4, [r0]\n\ - ldr r1, _080EFB3C @ =0x00006e18\n\ - adds r0, r4, r1\n\ - lsls r2, r5, 19\n\ - lsrs r2, 16\n\ - movs r1, 0x1\n\ - str r1, [sp]\n\ - movs r1, 0x70\n\ - movs r3, 0x78\n\ - bl sub_8072A18\n\ - adds r0, r5, 0x2\n\ - lsls r0, 16\n\ - lsrs r5, r0, 16\n\ - ldr r2, _080EFB40 @ =0x00006e2c\n\ - adds r0, r4, r2\n\ - ldrh r1, [r0]\n\ - adds r2, 0x3\n\ - adds r0, r4, r2\n\ - ldrb r0, [r0]\n\ - lsls r0, 2\n\ - lsls r1, 3\n\ - adds r0, r1\n\ - ldr r1, _080EFB44 @ =0x0000cdcc\n\ - adds r4, r1\n\ - adds r6, r4, r0\n\ - ldr r0, [r6]\n\ - cmp r0, 0\n\ - beq _080EFB6A\n\ - lsls r4, r5, 24\n\ - lsrs r4, 24\n\ - movs r0, 0xE\n\ - adds r1, r4, 0\n\ - movs r2, 0xF\n\ - movs r3, 0xF\n\ - bl MenuFillWindowRectWithBlankTile\n\ - movs r0, 0x1A\n\ - adds r1, r4, 0\n\ - movs r2, 0x1C\n\ - movs r3, 0xF\n\ - bl MenuFillWindowRectWithBlankTile\n\ - ldr r0, _080EFB48 @ =0x0600f800\n\ - ldr r3, [r6]\n\ - movs r1, 0\n\ - str r1, [sp]\n\ - str r1, [sp, 0x4]\n\ - movs r1, 0xA\n\ - str r1, [sp, 0x8]\n\ - str r1, [sp, 0xC]\n\ - str r1, [sp, 0x10]\n\ - movs r1, 0x10\n\ - movs r2, 0x6\n\ - bl sub_8095C8C\n\ - adds r0, r5, 0\n\ - adds r0, 0xB\n\ - b _080EFB66\n\ - .align 2, 0\n\ -_080EFB38: .4byte gUnknown_083DFEC4\n\ -_080EFB3C: .4byte 0x00006e18\n\ -_080EFB40: .4byte 0x00006e2c\n\ -_080EFB44: .4byte 0x0000cdcc\n\ -_080EFB48: .4byte 0x0600f800\n\ -_080EFB4C:\n\ - ldr r0, _080EFB98 @ =gUnknown_083DFEC4\n\ - ldr r0, [r0]\n\ - ldr r2, _080EFB9C @ =0x00006e18\n\ - adds r0, r2\n\ - lsls r2, r5, 19\n\ - lsrs r2, 16\n\ - movs r1, 0x1\n\ - str r1, [sp]\n\ - movs r1, 0x70\n\ - movs r3, 0x78\n\ - bl sub_8072A18\n\ - adds r0, r5, 0x2\n\ -_080EFB66:\n\ - lsls r0, 16\n\ - lsrs r5, r0, 16\n\ -_080EFB6A:\n\ - movs r0, 0\n\ - cmp r0, 0\n\ - bne _080EFB82\n\ - cmp r5, 0xF\n\ - bhi _080EFB82\n\ - lsls r1, r5, 24\n\ - lsrs r1, 24\n\ - movs r0, 0xE\n\ - movs r2, 0x1C\n\ - movs r3, 0xF\n\ - bl MenuFillWindowRectWithBlankTile\n\ -_080EFB82:\n\ - ldr r0, _080EFB98 @ =gUnknown_083DFEC4\n\ - ldr r0, [r0]\n\ - ldr r1, _080EFBA0 @ =0x00006e2e\n\ - adds r0, r1\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x2\n\ - bne _080EFBA4\n\ - bl sub_80EFD74\n\ - b _080EFBA8\n\ - .align 2, 0\n\ -_080EFB98: .4byte gUnknown_083DFEC4\n\ -_080EFB9C: .4byte 0x00006e18\n\ -_080EFBA0: .4byte 0x00006e2e\n\ -_080EFBA4:\n\ - bl sub_80EFDA0\n\ -_080EFBA8:\n\ - add sp, 0x14\n\ - pop {r4-r6}\n\ - pop {r0}\n\ - bx r0\n\ - .syntax divided\n"); } -#endif // NONMATCHING void sub_80EFBB0(void) { @@ -4103,152 +3675,37 @@ void sub_80EFC3C(void) sub_80EFD3C(); } -#ifdef NONMATCHING // "var1 = gUnknown_083DFEC4->unkBC9A;" is the only thing that doesnt' match. bool8 sub_80EFC64(void) { u16 i; - u16 var1; + u8 var1; u16 var2; - if (gUnknown_083DFEC4->unkBC9A < 16) - { - var1 = gUnknown_083DFEC4->unkBC9A; - var2 = gUnknown_083DFEC4->unkBC9B; - for (i = 0; i < 2; i++) - { - if (gPokenavCityMaps[var1][i] != 0) - { - LZ77UnCompVram(gPokenavCityMaps[var1][i], gUnknown_083DFEC4->unkBC9C[var2]); - gUnknown_083DFEC4->unkCDCC[var1][i] = gUnknown_083DFEC4->unkBC9C[var2]; - var2++; - } - else - { - gUnknown_083DFEC4->unkCDCC[var1][i] = NULL; - } - } - - gUnknown_083DFEC4->unkBC9A++; - if (gUnknown_083DFEC4->unkBC9A < 16) - { - gUnknown_083DFEC4->unkBC9B = var2; - return TRUE; - } - } - - return FALSE; -} -#else -__attribute__((naked)) -bool8 sub_80EFC64(void) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r9\n\ - mov r6, r8\n\ - push {r6,r7}\n\ - sub sp, 0x8\n\ - ldr r4, _080EFCD0 @ =gUnknown_083DFEC4\n\ - ldr r2, [r4]\n\ - ldr r0, _080EFCD4 @ =0x0000bc9a\n\ - adds r1, r2, r0\n\ - ldrb r0, [r1]\n\ - cmp r0, 0xF\n\ - bhi _080EFD2C\n\ - ldrb r1, [r1]\n\ - mov r8, r1\n\ - ldr r1, _080EFCD8 @ =0x0000bc9b\n\ - adds r0, r2, r1\n\ - ldrb r7, [r0]\n\ - movs r2, 0\n\ - ldr r0, _080EFCDC @ =gPokenavCityMaps\n\ - mov r9, r0\n\ - adds r3, r4, 0\n\ -_080EFC8E:\n\ - lsls r0, r2, 2\n\ - mov r4, r8\n\ - lsls r1, r4, 3\n\ - adds r6, r0, r1\n\ - mov r1, r9\n\ - adds r0, r6, r1\n\ - ldr r1, [r0]\n\ - cmp r1, 0\n\ - beq _080EFCE8\n\ - movs r0, 0xC8\n\ - adds r5, r7, 0\n\ - muls r5, r0\n\ - ldr r4, _080EFCE0 @ =0x0000bc9c\n\ - adds r5, r4\n\ - ldr r4, [r3]\n\ - adds r5, r4, r5\n\ - adds r0, r1, 0\n\ - adds r1, r5, 0\n\ - str r2, [sp]\n\ - str r3, [sp, 0x4]\n\ - bl LZ77UnCompVram\n\ - ldr r0, _080EFCE4 @ =0x0000cdcc\n\ - adds r4, r0\n\ - adds r4, r6\n\ - str r5, [r4]\n\ - adds r0, r7, 0x1\n\ - lsls r0, 16\n\ - lsrs r7, r0, 16\n\ - ldr r2, [sp]\n\ - ldr r3, [sp, 0x4]\n\ - b _080EFCF2\n\ - .align 2, 0\n\ -_080EFCD0: .4byte gUnknown_083DFEC4\n\ -_080EFCD4: .4byte 0x0000bc9a\n\ -_080EFCD8: .4byte 0x0000bc9b\n\ -_080EFCDC: .4byte gPokenavCityMaps\n\ -_080EFCE0: .4byte 0x0000bc9c\n\ -_080EFCE4: .4byte 0x0000cdcc\n\ -_080EFCE8:\n\ - ldr r0, [r3]\n\ - ldr r4, _080EFD1C @ =0x0000cdcc\n\ - adds r0, r4\n\ - adds r0, r6\n\ - str r1, [r0]\n\ -_080EFCF2:\n\ - adds r0, r2, 0x1\n\ - lsls r0, 16\n\ - lsrs r2, r0, 16\n\ - cmp r2, 0x1\n\ - bls _080EFC8E\n\ - ldr r0, _080EFD20 @ =gUnknown_083DFEC4\n\ - ldr r2, [r0]\n\ - ldr r0, _080EFD24 @ =0x0000bc9a\n\ - adds r1, r2, r0\n\ - ldrb r0, [r1]\n\ - adds r0, 0x1\n\ - strb r0, [r1]\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0xF\n\ - bhi _080EFD2C\n\ - ldr r1, _080EFD28 @ =0x0000bc9b\n\ - adds r0, r2, r1\n\ - strb r7, [r0]\n\ - movs r0, 0x1\n\ - b _080EFD2E\n\ - .align 2, 0\n\ -_080EFD1C: .4byte 0x0000cdcc\n\ -_080EFD20: .4byte gUnknown_083DFEC4\n\ -_080EFD24: .4byte 0x0000bc9a\n\ -_080EFD28: .4byte 0x0000bc9b\n\ -_080EFD2C:\n\ - movs r0, 0\n\ -_080EFD2E:\n\ - add sp, 0x8\n\ - pop {r3,r4}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - pop {r4-r7}\n\ - pop {r1}\n\ - bx r1\n\ - .syntax divided\n"); + if (gUnknown_083DFEC4->unkBC9A >= 16) + return FALSE; + + var1 = gUnknown_083DFEC4->unkBC9A; + var2 = gUnknown_083DFEC4->unkBC9B; + for (i = 0; i < 2; i++) + { + if (gPokenavCityMaps[var1][i] != 0) + { + LZ77UnCompVram(gPokenavCityMaps[var1][i], gUnknown_083DFEC4->unkBC9C[var2]); + gUnknown_083DFEC4->unkCDCC[var1][i] = gUnknown_083DFEC4->unkBC9C[var2]; + var2++; + } + else + { + gUnknown_083DFEC4->unkCDCC[var1][i] = NULL; + } + } + + if (++gUnknown_083DFEC4->unkBC9A >= 16) + return FALSE; + + gUnknown_083DFEC4->unkBC9B = var2; + return TRUE; } -#endif // NONMATCHING void sub_80EFD3C(void) { @@ -4335,7 +3792,7 @@ void sub_80EFE7C(void) case 2: sub_80EFDE4(1); gUnknown_083DFEC4->unk769D = 1; - break; + break; } } diff --git a/src/scene/credits.c b/src/scene/credits.c index 40dc5488f..17c1bf263 100644 --- a/src/scene/credits.c +++ b/src/scene/credits.c @@ -1606,7 +1606,7 @@ void spritecb_814580C(struct Sprite *sprite) static void sub_81458DC(void) { struct Unk201C000 *unk201C000 = &ewram1c000; - u16 starter = SpeciesToNationalPokedexNum(GetStarterPokemon(VarGet(VAR_FIRST_POKE))); + u16 starter = SpeciesToNationalPokedexNum(GetStarterPokemon(VarGet(VAR_STARTER_MON))); u16 seenTypesCount; u16 page; u16 dexNum; diff --git a/src/script_pokemon_util_80C4BF0.c b/src/script_pokemon_util_80C4BF0.c index 164d71cb5..fc94b1b01 100644 --- a/src/script_pokemon_util_80C4BF0.c +++ b/src/script_pokemon_util_80C4BF0.c @@ -24,6 +24,9 @@ #include "task.h" #include "ewram.h" +extern void sub_80C4674(); +extern void sub_80C4698(u8 *, u8); + #define CONTEST_ENTRY_PIC_LEFT 10 #define CONTEST_ENTRY_PIC_TOP 3 @@ -47,7 +50,8 @@ extern u32 gUnknown_03005D28; extern u8 gUnknown_02038694; extern u8 gUnknown_0203856C; extern u8 gContestFinalStandings[]; -extern u16 gUnknown_02038678[]; +extern s16 gUnknown_02038670[]; +extern s16 gUnknown_02038678[]; void sub_80C4BF0(void) { @@ -128,7 +132,7 @@ void sub_80C4CF8(void) { if(!gContestFinalStandings[gContestPlayerMonIndex] && gSpecialVar_ContestRank == 3 - && (s16)gUnknown_02038678[gContestPlayerMonIndex] >= 800) + && gUnknown_02038678[gContestPlayerMonIndex] >= 800) { gSpecialVar_0x8004 = 1; } @@ -150,209 +154,78 @@ u8 sub_80C4D50(void) return retVar; } -// nope. too hard -__attribute__((naked)) void sub_80C4D80(void) { - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x8\n\ - ldr r0, _080C4EA0 @ =gUnknown_02038670\n\ - mov r12, r0\n\ - ldr r1, _080C4EA4 @ =gSpecialVar_0x8006\n\ - mov r8, r1\n\ - ldr r2, _080C4EA8 @ =gStringVar1\n\ - mov r9, r2\n\ - mov r2, r12\n\ - mov r1, sp\n\ - movs r6, 0x3\n\ -_080C4D9E:\n\ - ldrh r0, [r2]\n\ - strh r0, [r1]\n\ - adds r2, 0x2\n\ - adds r1, 0x2\n\ - subs r6, 0x1\n\ - cmp r6, 0\n\ - bge _080C4D9E\n\ - movs r6, 0\n\ -_080C4DAE:\n\ - movs r1, 0x3\n\ - cmp r1, r6\n\ - ble _080C4DD8\n\ -_080C4DB4:\n\ - subs r4, r1, 0x1\n\ - lsls r0, r4, 1\n\ - mov r5, sp\n\ - adds r3, r5, r0\n\ - lsls r0, r1, 1\n\ - adds r2, r5, r0\n\ - ldrh r5, [r3]\n\ - movs r7, 0\n\ - ldrsh r1, [r3, r7]\n\ - movs r7, 0\n\ - ldrsh r0, [r2, r7]\n\ - cmp r1, r0\n\ - bge _080C4DD2\n\ - strh r5, [r2]\n\ - strh r0, [r3]\n\ -_080C4DD2:\n\ - adds r1, r4, 0\n\ - cmp r1, r6\n\ - bgt _080C4DB4\n\ -_080C4DD8:\n\ - adds r6, 0x1\n\ - cmp r6, 0x2\n\ - ble _080C4DAE\n\ - mov r2, r8\n\ - ldrh r0, [r2]\n\ - lsls r0, 1\n\ - add r0, sp\n\ - ldrh r0, [r0]\n\ - movs r2, 0\n\ - movs r7, 0\n\ - movs r6, 0\n\ - lsls r0, 16\n\ - asrs r4, r0, 16\n\ - adds r3, r0, 0\n\ - mov r1, sp\n\ -_080C4DF6:\n\ - movs r5, 0\n\ - ldrsh r0, [r1, r5]\n\ - cmp r0, r4\n\ - bne _080C4E12\n\ - lsls r0, r2, 24\n\ - movs r2, 0x80\n\ - lsls r2, 17\n\ - adds r0, r2\n\ - lsrs r2, r0, 24\n\ - mov r5, r8\n\ - ldrh r5, [r5]\n\ - cmp r6, r5\n\ - bne _080C4E12\n\ - adds r7, r2, 0\n\ -_080C4E12:\n\ - adds r1, 0x2\n\ - adds r6, 0x1\n\ - cmp r6, 0x3\n\ - ble _080C4DF6\n\ - movs r6, 0\n\ - mov r0, sp\n\ - movs r1, 0\n\ - ldrsh r0, [r0, r1]\n\ - asrs r1, r3, 16\n\ - lsls r2, 24\n\ - mov r10, r2\n\ - cmp r0, r1\n\ - beq _080C4E40\n\ - adds r2, r1, 0\n\ - mov r1, sp\n\ -_080C4E30:\n\ - adds r1, 0x2\n\ - adds r6, 0x1\n\ - cmp r6, 0x3\n\ - bgt _080C4E40\n\ - movs r4, 0\n\ - ldrsh r0, [r1, r4]\n\ - cmp r0, r2\n\ - bne _080C4E30\n\ -_080C4E40:\n\ - lsls r0, r6, 24\n\ - lsrs r4, r0, 24\n\ - adds r2, r7, 0\n\ - movs r6, 0\n\ - asrs r5, r3, 16\n\ - mov r8, r5\n\ - mov r1, r12\n\ - movs r5, 0\n\ - ldrsh r0, [r1, r5]\n\ - cmp r8, r0\n\ - bne _080C4E60\n\ - cmp r7, 0x1\n\ - beq _080C4E78\n\ -_080C4E5A:\n\ - subs r0, r2, 0x1\n\ - lsls r0, 24\n\ - lsrs r2, r0, 24\n\ -_080C4E60:\n\ - adds r6, 0x1\n\ - cmp r6, 0x3\n\ - bgt _080C4E78\n\ - lsls r0, r6, 1\n\ - add r0, r12\n\ - asrs r1, r3, 16\n\ - movs r5, 0\n\ - ldrsh r0, [r0, r5]\n\ - cmp r1, r0\n\ - bne _080C4E60\n\ - cmp r2, 0x1\n\ - bne _080C4E5A\n\ -_080C4E78:\n\ - lsls r1, r6, 24\n\ - lsrs r1, 24\n\ - mov r0, r9\n\ - bl sub_80C4698\n\ - ldr r0, _080C4EAC @ =gIsLinkContest\n\ - ldrb r1, [r0]\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080C4EB8\n\ - ldr r0, _080C4EB0 @ =gStringVar2\n\ - lsls r1, r6, 3\n\ - subs r1, r6\n\ - lsls r1, 2\n\ - ldr r2, _080C4EB4 @ =gLinkPlayers + 0x8\n\ - adds r1, r2\n\ - bl sub_80C4674\n\ - b _080C4EC4\n\ - .align 2, 0\n\ -_080C4EA0: .4byte gUnknown_02038670\n\ -_080C4EA4: .4byte gSpecialVar_0x8006\n\ -_080C4EA8: .4byte gStringVar1\n\ -_080C4EAC: .4byte gIsLinkContest\n\ -_080C4EB0: .4byte gStringVar2\n\ -_080C4EB4: .4byte gLinkPlayers + 0x8\n\ -_080C4EB8:\n\ - ldr r0, _080C4ED8 @ =gStringVar2\n\ - lsls r1, r6, 6\n\ - ldr r2, _080C4EDC @ =gUnknown_0203857D\n\ - adds r1, r2\n\ - bl sub_80C4674\n\ -_080C4EC4:\n\ - mov r1, r10\n\ - asrs r0, r1, 24\n\ - cmp r0, 0x1\n\ - beq _080C4ED0\n\ - cmp r7, r0\n\ - bne _080C4EE4\n\ -_080C4ED0:\n\ - ldr r0, _080C4EE0 @ =gSpecialVar_0x8006\n\ - strh r4, [r0]\n\ - b _080C4EEA\n\ - .align 2, 0\n\ -_080C4ED8: .4byte gStringVar2\n\ -_080C4EDC: .4byte gUnknown_0203857D\n\ -_080C4EE0: .4byte gSpecialVar_0x8006\n\ -_080C4EE4:\n\ - ldr r1, _080C4EFC @ =gSpecialVar_0x8006\n\ - adds r0, r4, 0x4\n\ - strh r0, [r1]\n\ -_080C4EEA:\n\ - add sp, 0x8\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080C4EFC: .4byte gSpecialVar_0x8006\n\ - .syntax divided"); + s16 sp0[4]; + s32 i; + s32 j; + s16 r4; + u8 r2; + u8 r7; + s8 r10; + u8 r4_; + + for (i = 0; i < 4; i++) + sp0[i] = gUnknown_02038670[i]; + + for (i = 0; i < 3; i++) + { + for (j = 3; j > i; j--) + { + if (sp0[j - 1] < sp0[j]) + { + s32 temp = sp0[j]; + + sp0[j] = sp0[j - 1]; + sp0[j - 1] = temp; + } + } + } + + r4 = sp0[gSpecialVar_0x8006]; + r10 = 0; + r7 = 0; + + for (i = 0; i < 4; i++) + { + if (sp0[i] == r4) + { + r10++; + if (i == gSpecialVar_0x8006) + r7 = r10; + } + } + + for (i = 0; i < 4; i++) + { + if (sp0[i] == r4) + break; + } + + r4_ = i; + r2 = r7; + + for (i = 0; i < 4; i++) + { + if (r4 == gUnknown_02038670[i]) + { + if (r2 == 1) + break; + r2--; + } + } + + sub_80C4698(gStringVar1, i); + + if (gIsLinkContest & 1) + sub_80C4674(gStringVar2, gLinkPlayers[i].name); + else + sub_80C4674(gStringVar2, gContestMons[i].trainerName); + + if (r10 == 1 || r7 == r10) + gSpecialVar_0x8006 = r4_; + else + gSpecialVar_0x8006 = r4_ + 4; } void ShowContestWinnerCleanup(void) @@ -376,10 +249,10 @@ void ShowContestWinner(void) void sub_80C4F70(void) { - VarSet(0x4010, gContestMons[0].trainerGfxId); - VarSet(0x4011, gContestMons[1].trainerGfxId); - VarSet(0x4012, gContestMons[2].trainerGfxId); - VarSet(0x4013, gContestMons[3].trainerGfxId); + VarSet(VAR_OBJ_GFX_ID_0, gContestMons[0].trainerGfxId); + VarSet(VAR_OBJ_GFX_ID_1, gContestMons[1].trainerGfxId); + VarSet(VAR_OBJ_GFX_ID_2, gContestMons[2].trainerGfxId); + VarSet(VAR_OBJ_GFX_ID_3, gContestMons[3].trainerGfxId); } bool8 GiveMonArtistRibbon(void) @@ -389,7 +262,7 @@ bool8 GiveMonArtistRibbon(void) if(ribbon == FALSE && gContestFinalStandings[gContestPlayerMonIndex] == 0 && gSpecialVar_ContestRank == 3 - && (s16)gUnknown_02038678[gContestPlayerMonIndex] >= 800) + && gUnknown_02038678[gContestPlayerMonIndex] >= 800) { ribbon = TRUE; SetMonData(&gPlayerParty[gUnknown_02038694], MON_DATA_ARTIST_RIBBON, &ribbon); diff --git a/src/script_pokemon_util_80F99CC.c b/src/script_pokemon_util_80F99CC.c index 33e7620f7..b58363d31 100644 --- a/src/script_pokemon_util_80F99CC.c +++ b/src/script_pokemon_util_80F99CC.c @@ -19,6 +19,8 @@ #include "text.h" #include "ewram.h" +extern const u8 gUnknown_08208238[]; + extern u8 gPlayerPartyCount; extern u16 gSpecialVar_0x8004; extern u16 gSpecialVar_0x8005; @@ -297,130 +299,26 @@ void ScrSpecial_GetPokemonNicknameAndMoveName(void) StringCopy(gStringVar2, gMoveNames[data]); } -// no. hard -__attribute__((naked)) -void sub_80F9FDC(struct Pokemon *party, u8 var, u8 var2) +void sub_80F9FDC(struct Pokemon *pkmn, u8 moveIndex1, u8 moveIndex2) { - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x20\n\ - mov r8, r0\n\ - adds r5, r1, 0\n\ - adds r4, r2, 0\n\ - lsls r5, 24\n\ - lsrs r5, 24\n\ - lsls r4, 24\n\ - lsrs r4, 24\n\ - adds r0, r5, 0\n\ - adds r0, 0xD\n\ - str r0, [sp, 0x8]\n\ - mov r0, r8\n\ - ldr r1, [sp, 0x8]\n\ - bl GetMonData\n\ - mov r1, sp\n\ - adds r1, 0x2\n\ - str r1, [sp, 0x14]\n\ - strh r0, [r1]\n\ - adds r3, r4, 0\n\ - adds r3, 0xD\n\ - str r3, [sp, 0xC]\n\ - mov r0, r8\n\ - adds r1, r3, 0\n\ - bl GetMonData\n\ - mov r1, sp\n\ - strh r0, [r1]\n\ - adds r7, r5, 0\n\ - adds r7, 0x11\n\ - str r7, [sp, 0x10]\n\ - mov r0, r8\n\ - adds r1, r7, 0\n\ - bl GetMonData\n\ - mov r1, sp\n\ - adds r1, 0x5\n\ - str r1, [sp, 0x18]\n\ - strb r0, [r1]\n\ - adds r3, r4, 0\n\ - adds r3, 0x11\n\ - str r3, [sp, 0x1C]\n\ - mov r0, r8\n\ - adds r1, r3, 0\n\ - bl GetMonData\n\ - add r7, sp, 0x4\n\ - mov r10, r7\n\ - strb r0, [r7]\n\ - mov r0, r8\n\ - movs r1, 0x15\n\ - bl GetMonData\n\ - mov r6, sp\n\ - adds r6, 0x6\n\ - strb r0, [r6]\n\ - ldr r1, _080FA0D8 @ =gUnknown_08208238\n\ - adds r0, r5, r1\n\ - ldrb r0, [r0]\n\ - mov r9, r0\n\ - ldrb r0, [r6]\n\ - adds r2, r0, 0\n\ - mov r3, r9\n\ - ands r2, r3\n\ - lsls r5, 1\n\ - asrs r2, r5\n\ - lsls r2, 24\n\ - lsrs r2, 24\n\ - adds r1, r4, r1\n\ - ldrb r3, [r1]\n\ - adds r1, r0, 0\n\ - ands r1, r3\n\ - lsls r4, 1\n\ - asrs r1, r4\n\ - lsls r1, 24\n\ - lsrs r1, 24\n\ - mov r7, r9\n\ - bics r0, r7\n\ - strb r0, [r6]\n\ - ldrb r0, [r6]\n\ - bics r0, r3\n\ - strb r0, [r6]\n\ - lsls r2, r4\n\ - lsls r1, r5\n\ - adds r2, r1\n\ - ldrb r0, [r6]\n\ - orrs r0, r2\n\ - strb r0, [r6]\n\ - mov r0, r8\n\ - ldr r1, [sp, 0x8]\n\ - mov r2, sp\n\ - bl SetMonData\n\ - mov r0, r8\n\ - ldr r1, [sp, 0xC]\n\ - ldr r2, [sp, 0x14]\n\ - bl SetMonData\n\ - mov r0, r8\n\ - ldr r1, [sp, 0x10]\n\ - mov r2, r10\n\ - bl SetMonData\n\ - mov r0, r8\n\ - ldr r1, [sp, 0x1C]\n\ - ldr r2, [sp, 0x18]\n\ - bl SetMonData\n\ - mov r0, r8\n\ - movs r1, 0x15\n\ - adds r2, r6, 0\n\ - bl SetMonData\n\ - add sp, 0x20\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080FA0D8: .4byte gUnknown_08208238\n\ - .syntax divided"); + u16 move1 = GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex1); + u16 move2 = GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex2); + u8 pp1 = GetMonData(pkmn, MON_DATA_PP1 + moveIndex1); + u8 pp2 = GetMonData(pkmn, MON_DATA_PP1 + moveIndex2); + u8 bonuses = GetMonData(pkmn, MON_DATA_PP_BONUSES); + + u8 r2 = (bonuses & gUnknown_08208238[moveIndex1]) >> (moveIndex1 * 2); + u8 r1 = (bonuses & gUnknown_08208238[moveIndex2]) >> (moveIndex2 * 2); + + bonuses &= ~gUnknown_08208238[moveIndex1]; + bonuses &= ~gUnknown_08208238[moveIndex2]; + bonuses |= (r2 << (moveIndex2 * 2)) + (r1 << (moveIndex1 * 2)); + + SetMonData(pkmn, MON_DATA_MOVE1 + moveIndex1, &move2); + SetMonData(pkmn, MON_DATA_MOVE1 + moveIndex2, &move1); + SetMonData(pkmn, MON_DATA_PP1 + moveIndex1, &pp2); + SetMonData(pkmn, MON_DATA_PP1 + moveIndex2, &pp1); + SetMonData(pkmn, MON_DATA_PP_BONUSES, &bonuses); } void sub_80FA0DC(void) |