diff options
author | Kaz <kazbloxmc@gmail.com> | 2020-05-28 04:37:09 -0400 |
---|---|---|
committer | Kaz <kazbloxmc@gmail.com> | 2020-05-28 04:37:09 -0400 |
commit | 4ccbc65f4bdf0bf53b9967018eb0ad653ce28446 (patch) | |
tree | 6782b18b401c6fb1ca816964c6df18b36789d5f5 /src | |
parent | 2608dd2a3383ed116c4bf32255751afd3b7f0374 (diff) |
src/battle/anim/dark.c: Last function decompiled.
src/battle_anim.c: Port some function matches.
src/battle_controller_player.c: Port some function matches.
src/use_pokeblock.c: A more likely yet still farfetched permutation for
Pokeblock_BufferEnhancedStatText.
Diffstat (limited to 'src')
-rw-r--r-- | src/battle/anim/dark.c | 254 | ||||
-rw-r--r-- | src/battle_anim.c | 222 | ||||
-rw-r--r-- | src/battle_controller_player.c | 219 | ||||
-rw-r--r-- | src/use_pokeblock.c | 56 |
4 files changed, 131 insertions, 620 deletions
diff --git a/src/battle/anim/dark.c b/src/battle/anim/dark.c index d3d992bda..08aafe195 100644 --- a/src/battle/anim/dark.c +++ b/src/battle/anim/dark.c @@ -730,215 +730,55 @@ static void sub_80E0620(u8 taskId) } } -// static void sub_80E079C(struct Task *task) -// { -// int var0, var1; -// s16 var2; -// s16 i, j; - -// var2 = task->data[5] - task->data[4]; -// if (var2 != 0) -// { -// var0 = task->data[13] / var2; -// var1 = task->data[6]; - -// for (i = 0; i < task->data[4]; i++) -// { -// gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = task->data[10] - (i - 159); -// } - -// for (i = task->data[4]; i <= task->data[5]; i++) -// { -// if (i >= 0) -// { -// gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = (var1 - i) + task->data[10]; -// } - -// var1 += var0; -// } - -// for (j = i; j < task->data[7]; j++) -// { -// if (j >= 0) -// { -// gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][j] = (task->data[10] + 159) - j; -// } -// } -// } -// else -// { -// for (i = 0; i < 112; i++) -// { -// gScanlineEffectRegBuffers[0][i] = task->data[10] + 159 - i; -// gScanlineEffectRegBuffers[1][i] = task->data[10] + 159 - i; -// } -// } -// } - -NAKED static void sub_80E079C(struct Task *task) { - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r8\n\ - push {r7}\n\ - adds r6, r0, 0\n\ - ldrh r0, [r6, 0x12]\n\ - ldrh r4, [r6, 0x10]\n\ - subs r0, r4\n\ - lsls r0, 16\n\ - asrs r1, r0, 16\n\ - cmp r1, 0\n\ - beq _080E0890\n\ - movs r2, 0x22\n\ - ldrsh r0, [r6, r2]\n\ - bl __divsi3\n\ - mov r8, r0\n\ - movs r3, 0x14\n\ - ldrsh r0, [r6, r3]\n\ - lsls r5, r0, 8\n\ - lsls r0, r4, 16\n\ - movs r4, 0\n\ - cmp r0, 0\n\ - ble _080E07FC\n\ - ldr r0, _080E0888 @ =gScanlineEffectRegBuffers\n\ - mov r12, r0\n\ - ldr r7, _080E088C @ =gScanlineEffect\n\ -_080E07D0:\n\ - lsls r2, r4, 16\n\ - asrs r2, 16\n\ - lsls r3, r2, 1\n\ - ldrb r1, [r7, 0x14]\n\ - lsls r0, r1, 4\n\ - subs r0, r1\n\ - lsls r0, 7\n\ - adds r3, r0\n\ - add r3, r12\n\ - adds r1, r2, 0\n\ - subs r1, 0x9F\n\ - ldrh r0, [r6, 0x1C]\n\ - subs r0, r1\n\ - strh r0, [r3]\n\ - adds r2, 0x1\n\ - lsls r2, 16\n\ - lsrs r4, r2, 16\n\ - asrs r2, 16\n\ - movs r1, 0x10\n\ - ldrsh r0, [r6, r1]\n\ - cmp r2, r0\n\ - blt _080E07D0\n\ -_080E07FC:\n\ - ldrh r4, [r6, 0x10]\n\ - lsls r3, r4, 16\n\ - asrs r1, r3, 16\n\ - movs r2, 0x12\n\ - ldrsh r0, [r6, r2]\n\ - cmp r1, r0\n\ - bgt _080E0846\n\ - ldr r0, _080E0888 @ =gScanlineEffectRegBuffers\n\ - mov r12, r0\n\ - ldr r7, _080E088C @ =gScanlineEffect\n\ -_080E0810:\n\ - asrs r4, r3, 16\n\ - cmp r4, 0\n\ - blt _080E0832\n\ - asrs r1, r5, 8\n\ - subs r1, r4\n\ - lsls r3, r4, 1\n\ - ldrb r2, [r7, 0x14]\n\ - lsls r0, r2, 4\n\ - subs r0, r2\n\ - lsls r0, 7\n\ - adds r3, r0\n\ - add r3, r12\n\ - lsls r1, 16\n\ - asrs r1, 16\n\ - ldrh r2, [r6, 0x1C]\n\ - adds r1, r2\n\ - strh r1, [r3]\n\ -_080E0832:\n\ - add r5, r8\n\ - adds r0, r4, 0x1\n\ - lsls r0, 16\n\ - lsrs r4, r0, 16\n\ - lsls r3, r4, 16\n\ - asrs r1, r3, 16\n\ - movs r2, 0x12\n\ - ldrsh r0, [r6, r2]\n\ - cmp r1, r0\n\ - ble _080E0810\n\ -_080E0846:\n\ - movs r3, 0x1C\n\ - ldrsh r0, [r6, r3]\n\ - adds r0, 0x9F\n\ - lsls r2, r4, 16\n\ - asrs r1, r2, 16\n\ - subs r5, r0, r1\n\ - movs r3, 0x16\n\ - ldrsh r0, [r6, r3]\n\ - cmp r1, r0\n\ - bge _080E08BE\n\ - ldr r7, _080E0888 @ =gScanlineEffectRegBuffers\n\ - ldr r4, _080E088C @ =gScanlineEffect\n\ -_080E085E:\n\ - asrs r3, r2, 16\n\ - cmp r3, 0\n\ - blt _080E0876\n\ - lsls r2, r3, 1\n\ - ldrb r1, [r4, 0x14]\n\ - lsls r0, r1, 4\n\ - subs r0, r1\n\ - lsls r0, 7\n\ - adds r2, r0\n\ - adds r2, r7\n\ - strh r5, [r2]\n\ - subs r5, 0x1\n\ -_080E0876:\n\ - adds r0, r3, 0x1\n\ - lsls r2, r0, 16\n\ - asrs r1, r2, 16\n\ - movs r3, 0x16\n\ - ldrsh r0, [r6, r3]\n\ - cmp r1, r0\n\ - blt _080E085E\n\ - b _080E08BE\n\ - .align 2, 0\n\ -_080E0888: .4byte gScanlineEffectRegBuffers\n\ -_080E088C: .4byte gScanlineEffect\n\ -_080E0890:\n\ - movs r1, 0x1C\n\ - ldrsh r0, [r6, r1]\n\ - adds r5, r0, 0\n\ - adds r5, 0x9F\n\ - movs r4, 0\n\ - ldr r3, _080E08C8 @ =gScanlineEffectRegBuffers\n\ - movs r2, 0xF0\n\ - lsls r2, 3\n\ - adds r6, r3, r2\n\ -_080E08A2:\n\ - lsls r0, r4, 16\n\ - asrs r0, 16\n\ - lsls r2, r0, 1\n\ - adds r1, r2, r3\n\ - strh r5, [r1]\n\ - adds r2, r6\n\ - strh r5, [r2]\n\ - subs r5, 0x1\n\ - adds r0, 0x1\n\ - lsls r0, 16\n\ - lsrs r4, r0, 16\n\ - asrs r0, 16\n\ - cmp r0, 0x6F\n\ - ble _080E08A2\n\ -_080E08BE:\n\ - pop {r3}\n\ - mov r8, r3\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080E08C8: .4byte gScanlineEffectRegBuffers\n\ - .syntax divided\n"); + int var0, var1; + s16 var2; + s16 i; + int var4; + + var2 = task->data[5] - task->data[4]; + if (var2 != 0) + { + var0 = task->data[13] / var2; + var1 = task->data[6] << 8; + + for (i = 0; i < task->data[4]; i++) + { + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = task->data[10] - (i - 159); + } + + for (i = task->data[4]; i <= task->data[5]; i++) + { + if (i >= 0) + { + s16 var3 = (var1 >> 8) - i; + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = var3 + task->data[10]; + } + + var1 += var0; + } + + var4 = task->data[10] - (i - 159); + for (i = i; i < task->data[7]; i++) + { + if (i >= 0) + { + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = var4; + var4--; + } + } + } + else + { + var4 = task->data[10] + 159; + for (i = 0; i < 112; i++) + { + gScanlineEffectRegBuffers[0][i] = var4; + gScanlineEffectRegBuffers[1][i] = var4; + var4--; + } + } } static void sub_80E08CC(u8 priority) diff --git a/src/battle_anim.c b/src/battle_anim.c index 3be28dd77..ae4342847 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -1479,7 +1479,7 @@ void LaunchBattleAnimation(const u8 *const moveAnims[], u16 move, u8 isMoveAnim) UpdateOamPriorityInAllHealthboxes(0); for (i = 0; i < 4; i++) { - if (GetBattlerSide(i) != 0) + if (GetBattlerSide(i) != B_SIDE_PLAYER) gAnimSpeciesByBanks[i] = GetMonData(&gEnemyParty[gBattlerPartyIndexes[i]], MON_DATA_SPECIES); else gAnimSpeciesByBanks[i] = GetMonData(&gPlayerParty[gBattlerPartyIndexes[i]], MON_DATA_SPECIES); @@ -1793,7 +1793,7 @@ static void ScriptCmd_end(void) if (!continuousAnim) // may have been used for debug? { m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 256); - if (IsContest() == 0) + if (!IsContest()) { UpdateBattlerSpritePriorities(); UpdateOamPriorityInAllHealthboxes(1); @@ -1838,7 +1838,7 @@ static void ScriptCmd_monbg(void) { identity = GetBattlerPosition(bank); identity += 0xFF; - if (identity <= 1 || IsContest() != 0) + if (identity <= 1 || IsContest()) toBG_2 = 0; else toBG_2 = 1; @@ -1870,7 +1870,7 @@ static void ScriptCmd_monbg(void) { identity = GetBattlerPosition(bank); identity += 0xFF; - if (identity <= 1 || IsContest() != 0) + if (identity <= 1 || IsContest()) toBG_2 = 0; else toBG_2 = 1; @@ -1940,7 +1940,7 @@ void MoveBattlerSpriteToBG(u8 bank, u8 toBG_2) spriteId = gBattlerSpriteIds[bank]; gBattle_BG1_X = -(gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x) + 32; - if (IsContest() != 0 && IsSpeciesNotUnown(EWRAM_19348[0]) != 0) + if (IsContest() && IsSpeciesNotUnown(EWRAM_19348[0]) != 0) gBattle_BG1_X--; gBattle_BG1_Y = -(gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y) + 32; gSprites[gBattlerSpriteIds[bank]].invisible = TRUE; @@ -1951,12 +1951,12 @@ void MoveBattlerSpriteToBG(u8 bank, u8 toBG_2) LoadPalette(gPlttBufferUnfaded + 0x100 + bank * 16, s.unk8 * 16, 32); DmaCopy32Defvars(3, gPlttBufferUnfaded + 0x100 + bank * 16, (u16 *)PLTT + s.unk8 * 16, 32); - if (IsContest() != 0) + if (IsContest()) r2 = 0; else r2 = GetBattlerPosition(bank); sub_80E4EF8(0, 0, r2, s.unk8, (u32)s.unk0, (((s32)s.unk4 - VRAM) / 2048), REG_BG1CNT_BITFIELD.charBaseBlock); - if (IsContest() != 0) + if (IsContest()) sub_8076380(); } else @@ -2040,7 +2040,7 @@ void sub_8076464(u8 a) struct UnknownStruct2 s; sub_8078914(&s); - if (a == 0 || IsContest() != 0) + if (a == 0 || IsContest()) { DmaFill32Large(3, 0, s.unk0, 0x2000, 0x1000); pointlessZero = 0; // is there a stubbed out Dma macro here that left the 0 load in? @@ -2128,7 +2128,7 @@ static void sub_807672C(u8 taskId) { identity = GetBattlerPosition(gTasks[taskId].data[2]); identity += 0xFF; - if (identity <= 1 || IsContest() != 0) + if (identity <= 1 || IsContest()) to_BG2 = 0; else to_BG2 = 1; @@ -2172,7 +2172,7 @@ static void ScriptCmd_monbg_22(void) { identity = GetBattlerPosition(bank); identity += 0xFF; - if (identity <= 1 || IsContest() != 0) + if (identity <= 1 || IsContest()) r1 = 0; else r1 = 1; @@ -2185,7 +2185,7 @@ static void ScriptCmd_monbg_22(void) { identity = GetBattlerPosition(bank); identity += 0xFF; - if (identity <= 1 || IsContest() != 0) + if (identity <= 1 || IsContest()) r1 = 0; else r1 = 1; @@ -2240,7 +2240,7 @@ static void sub_80769A4(u8 taskId) bank = gTasks[taskId].data[2]; identity = GetBattlerPosition(bank); identity += 0xFF; - if (identity <= 1 || IsContest() != 0) + if (identity <= 1 || IsContest()) toBG_2 = 0; else toBG_2 = 1; @@ -2400,7 +2400,7 @@ static void ScriptCmd_fadetobgfromset(void) if (IsContest()) gTasks[taskId].tBackgroundId = bg3; - else if (GetBattlerSide(gBattleAnimTarget) == 0) + else if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) gTasks[taskId].tBackgroundId = bg2; else gTasks[taskId].tBackgroundId = bg1; @@ -2524,188 +2524,60 @@ static void ScriptCmd_changebg(void) sBattleAnimScriptPtr++; } -//Weird control flow -/* -s8 BattleAnimAdjustPanning(s8 a) +s8 BattleAnimAdjustPanning(s8 pan) { if (!IsContest() && (EWRAM_17810[gBattleAnimAttacker].unk0 & 0x10)) { - a = GetBattlerSide(gBattleAnimAttacker) ? SOUND_PAN_ATTACKER : SOUND_PAN_TARGET; + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + pan = SOUND_PAN_TARGET; + else + pan = SOUND_PAN_ATTACKER_NEG; } - //_08076FDC - else + else if (IsContest()) { - if (IsContest()) - { - if (gBattleAnimAttacker == gBattleAnimTarget && gBattleAnimAttacker == 2 - && a == SOUND_PAN_TARGET) - { - //jump to _0807707A - if (a < SOUND_PAN_ATTACKER_NEG) - a = SOUND_PAN_ATTACKER; - return a; - } - } - //_08077004 - else + if (gBattleAnimAttacker != gBattleAnimTarget || gBattleAnimAttacker != 2 || pan != SOUND_PAN_TARGET) + pan *= -1; + } + else if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) + { + if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) { - if (GetBattlerSide(gBattleAnimAttacker) == 0) - { - if (GetBattlerSide(gBattleAnimTarget) == 0) - } - //_08077042 - else - { - - } - //_0807706C + if (pan == SOUND_PAN_TARGET) + pan = SOUND_PAN_ATTACKER_NEG; + else if (pan != SOUND_PAN_ATTACKER_NEG) + pan *= -1; } } - //_0807706E -} -*/ -NAKED -s8 BattleAnimAdjustPanning(s8 a) -{ - asm(".syntax unified\n\ - push {r4,lr}\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - bl IsContest\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _08076FDC\n\ - ldr r0, _08076FD4 @ =gBattleAnimAttacker\n\ - ldrb r2, [r0]\n\ - lsls r0, r2, 1\n\ - adds r0, r2\n\ - lsls r0, 2\n\ - ldr r1, _08076FD8 @ =gSharedMem + 0x17810\n\ - adds r0, r1\n\ - ldrb r1, [r0]\n\ - movs r0, 0x10\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08076FDC\n\ - adds r0, r2, 0\n\ - bl GetBattlerSide\n\ - lsls r0, 24\n\ - movs r4, 0xC0\n\ - cmp r0, 0\n\ - beq _0807706E\n\ - movs r4, 0x3F\n\ - b _0807706E\n\ - .align 2, 0\n\ -_08076FD4: .4byte gBattleAnimAttacker\n\ -_08076FD8: .4byte gSharedMem + 0x17810\n\ -_08076FDC:\n\ - bl IsContest\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _08077004\n\ - ldr r0, _08076FFC @ =gBattleAnimAttacker\n\ - ldr r1, _08077000 @ =gBattleAnimTarget\n\ - ldrb r0, [r0]\n\ - ldrb r1, [r1]\n\ - cmp r0, r1\n\ - bne _08077068\n\ - cmp r0, 0x2\n\ - bne _08077068\n\ - cmp r4, 0x3F\n\ - beq _0807707A\n\ - b _08077068\n\ - .align 2, 0\n\ -_08076FFC: .4byte gBattleAnimAttacker\n\ -_08077000: .4byte gBattleAnimTarget\n\ -_08077004:\n\ - ldr r0, _0807702C @ =gBattleAnimAttacker\n\ - ldrb r0, [r0]\n\ - bl GetBattlerSide\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _08077042\n\ - ldr r0, _08077030 @ =gBattleAnimTarget\n\ - ldrb r0, [r0]\n\ - bl GetBattlerSide\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _0807706E\n\ - lsls r0, r4, 24\n\ - asrs r1, r0, 24\n\ - cmp r1, 0x3F\n\ - bne _08077034\n\ - movs r4, 0xC0\n\ - b _0807706E\n\ - .align 2, 0\n\ -_0807702C: .4byte gBattleAnimAttacker\n\ -_08077030: .4byte gBattleAnimTarget\n\ -_08077034:\n\ - movs r0, 0x40\n\ - negs r0, r0\n\ - cmp r1, r0\n\ - beq _0807706E\n\ - negs r0, r1\n\ - lsls r0, 24\n\ - b _0807706C\n\ -_08077042:\n\ - ldr r0, _08077064 @ =gBattleAnimTarget\n\ - ldrb r0, [r0]\n\ - bl GetBattlerSide\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x1\n\ - bne _08077068\n\ - lsls r0, r4, 24\n\ - asrs r0, 24\n\ - movs r1, 0x40\n\ - negs r1, r1\n\ - cmp r0, r1\n\ - bne _0807706E\n\ - movs r4, 0x3F\n\ - b _0807706E\n\ - .align 2, 0\n\ -_08077064: .4byte gBattleAnimTarget\n\ -_08077068:\n\ - lsls r0, r4, 24\n\ - negs r0, r0\n\ -_0807706C:\n\ - lsrs r4, r0, 24\n\ -_0807706E:\n\ - lsls r0, r4, 24\n\ - asrs r0, 24\n\ - cmp r0, 0x3F\n\ - ble _0807707A\n\ - movs r4, 0x3F\n\ - b _08077088\n\ -_0807707A:\n\ - lsls r0, r4, 24\n\ - asrs r0, 24\n\ - movs r1, 0x40\n\ - negs r1, r1\n\ - cmp r0, r1\n\ - bge _08077088\n\ - movs r4, 0xC0\n\ -_08077088:\n\ - lsls r0, r4, 24\n\ - asrs r0, 24\n\ - pop {r4}\n\ - pop {r1}\n\ - bx r1\n\ - .syntax divided\n"); + else if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_OPPONENT) + { + if (pan == SOUND_PAN_ATTACKER_NEG) + pan = SOUND_PAN_TARGET; + } + else + { + pan *= -1; + } + + if (pan > SOUND_PAN_TARGET) + pan = SOUND_PAN_TARGET; + else if (pan < SOUND_PAN_ATTACKER_NEG) + pan = SOUND_PAN_ATTACKER_NEG; + + return pan; } s8 BattleAnimAdjustPanning2(s8 pan) { if (!IsContest() && (EWRAM_17810[gBattleAnimAttacker].unk0 & 0x10)) { - if (GetBattlerSide(gBattleAnimAttacker) != 0) + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) pan = SOUND_PAN_TARGET; else pan = SOUND_PAN_ATTACKER; } else { - if (GetBattlerSide(gBattleAnimAttacker) != 0 || IsContest() != 0) + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER || IsContest()) pan = -pan; } return pan; diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index 9a48f4e16..cf816f392 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -1387,7 +1387,6 @@ void sub_802DA9C(u8 taskId) gTasks[taskId].func = sub_802DB6C; } -#ifdef NONMATCHING void sub_802DB6C(u8 taskId) { if (gTasks[taskId].data[10] < 13) @@ -1396,209 +1395,49 @@ void sub_802DB6C(u8 taskId) } else { - u8 r9 = gTasks[taskId].data[0]; - s32 r10 = gTasks[taskId].data[1]; //s16? - u8 r7 = gTasks[taskId].data[2]; - s16 r4; + u8 monId = gTasks[taskId].data[0]; + s16 gainedExp = gTasks[taskId].data[1]; + u8 battlerId = gTasks[taskId].data[2]; + s16 newExpPoints; - r4 = sub_8045C78(r7, gHealthboxSpriteIds[r7], 1, 0); - sub_8043DFC(gHealthboxSpriteIds[r7]); - if (r4 == -1) + newExpPoints = sub_8045C78(battlerId, gHealthboxSpriteIds[battlerId], 1, 0); + sub_8043DFC(gHealthboxSpriteIds[battlerId]); + if (newExpPoints == -1) { - struct Pokemon *pkmn; - u8 r4; - u32 sp4; - u16 r0; - u32 sp0; + u8 level; + s32 currExp; + u16 species; + s32 expOnNextLvl; m4aSongNumStop(SE_EXP); - pkmn = &gPlayerParty[r9]; - r4 = GetMonData(pkmn, MON_DATA_LEVEL); - sp4 = GetMonData(pkmn, MON_DATA_EXP); - r0 = GetMonData(pkmn, MON_DATA_SPECIES); - sp0 = gExperienceTables[gBaseStats[r0].growthRate][r4 + 1]; - if (sp4 + r10 >= sp0) + level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); + currExp = GetMonData(&gPlayerParty[monId], MON_DATA_EXP); + species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES); + expOnNextLvl = gExperienceTables[gBaseStats[species].growthRate][level + 1]; + + if (currExp + gainedExp >= expOnNextLvl) { - u8 r5; - u32 asdf; - - SetMonData(pkmn, MON_DATA_EXP, &sp0); - CalculateMonStats(pkmn); - //r10 -= sp0 - sp4; - asdf = sp0 - sp4; - //asdf = r10 - (sp0 - sp4); - r10 -= asdf; - r5 = gActiveBattler; - gActiveBattler = r7; - BtlController_EmitTwoReturnValues(1, 11, r10); - gActiveBattler = r5; + u8 savedActiveBattler; + + SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &expOnNextLvl); + CalculateMonStats(&gPlayerParty[monId]); + gainedExp -= expOnNextLvl - currExp; + savedActiveBattler = gActiveBattler; + gActiveBattler = battlerId; + BtlController_EmitTwoReturnValues(1, 11, gainedExp); + gActiveBattler = savedActiveBattler; gTasks[taskId].func = sub_802DCB0; } else { - //u32 asdf = sp4 + r10; - sp4 += r10; - SetMonData(pkmn, MON_DATA_EXP, &sp4); - gBattlerControllerFuncs[r7] = sub_802D90C; + currExp += gainedExp; + SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &currExp); + gBattlerControllerFuncs[battlerId] = sub_802D90C; DestroyTask(taskId); } } } } -#else -NAKED -void sub_802DB6C(u8 taskId) -{ - asm_unified("push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x8\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r8, r0\n\ - ldr r1, _0802DB98 @ =gTasks\n\ - lsls r0, 2\n\ - add r0, r8\n\ - lsls r0, 3\n\ - adds r6, r0, r1\n\ - ldrh r1, [r6, 0x1C]\n\ - movs r2, 0x1C\n\ - ldrsh r0, [r6, r2]\n\ - cmp r0, 0xC\n\ - bgt _0802DB9C\n\ - adds r0, r1, 0x1\n\ - strh r0, [r6, 0x1C]\n\ - b _0802DC98\n\ - .align 2, 0\n\ -_0802DB98: .4byte gTasks\n\ -_0802DB9C:\n\ - ldrb r0, [r6, 0x8]\n\ - mov r9, r0\n\ - ldrh r2, [r6, 0xA]\n\ - mov r10, r2\n\ - ldrb r7, [r6, 0xC]\n\ - ldr r5, _0802DC64 @ =gHealthboxSpriteIds\n\ - adds r5, r7, r5\n\ - ldrb r1, [r5]\n\ - adds r0, r7, 0\n\ - movs r2, 0x1\n\ - movs r3, 0\n\ - bl sub_8045C78\n\ - adds r4, r0, 0\n\ - lsls r4, 16\n\ - lsrs r4, 16\n\ - ldrb r0, [r5]\n\ - bl sub_8043DFC\n\ - lsls r4, 16\n\ - asrs r4, 16\n\ - movs r0, 0x1\n\ - negs r0, r0\n\ - cmp r4, r0\n\ - bne _0802DC98\n\ - movs r0, 0x21\n\ - bl m4aSongNumStop\n\ - movs r0, 0x64\n\ - mov r1, r9\n\ - muls r1, r0\n\ - ldr r0, _0802DC68 @ =gPlayerParty\n\ - adds r5, r1, r0\n\ - adds r0, r5, 0\n\ - movs r1, 0x38\n\ - bl GetMonData\n\ - adds r4, r0, 0\n\ - lsls r4, 24\n\ - lsrs r4, 24\n\ - adds r0, r5, 0\n\ - movs r1, 0x19\n\ - bl GetMonData\n\ - str r0, [sp, 0x4]\n\ - adds r0, r5, 0\n\ - movs r1, 0xB\n\ - bl GetMonData\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - ldr r3, _0802DC6C @ =gExperienceTables\n\ - adds r4, 0x1\n\ - lsls r4, 2\n\ - ldr r2, _0802DC70 @ =gBaseStats\n\ - lsls r1, r0, 3\n\ - subs r1, r0\n\ - lsls r1, 2\n\ - adds r1, r2\n\ - ldrb r1, [r1, 0x13]\n\ - movs r0, 0xCA\n\ - lsls r0, 1\n\ - muls r0, r1\n\ - adds r4, r0\n\ - adds r4, r3\n\ - ldr r1, [r4]\n\ - str r1, [sp]\n\ - mov r2, r10\n\ - lsls r0, r2, 16\n\ - asrs r4, r0, 16\n\ - ldr r0, [sp, 0x4]\n\ - adds r0, r4\n\ - cmp r0, r1\n\ - blt _0802DC7C\n\ - adds r0, r5, 0\n\ - movs r1, 0x19\n\ - mov r2, sp\n\ - bl SetMonData\n\ - adds r0, r5, 0\n\ - bl CalculateMonStats\n\ - ldr r2, [sp]\n\ - add r0, sp, 0x4\n\ - ldrh r0, [r0]\n\ - subs r2, r0\n\ - subs r2, r4, r2\n\ - ldr r4, _0802DC74 @ =gActiveBattler\n\ - ldrb r5, [r4]\n\ - strb r7, [r4]\n\ - lsls r2, 16\n\ - lsrs r2, 16\n\ - movs r0, 0x1\n\ - movs r1, 0xB\n\ - bl BtlController_EmitTwoReturnValues\n\ - strb r5, [r4]\n\ - ldr r0, _0802DC78 @ =sub_802DCB0\n\ - str r0, [r6]\n\ - b _0802DC98\n\ - .align 2, 0\n\ -_0802DC64: .4byte gHealthboxSpriteIds\n\ -_0802DC68: .4byte gPlayerParty\n\ -_0802DC6C: .4byte gExperienceTables\n\ -_0802DC70: .4byte gBaseStats\n\ -_0802DC74: .4byte gActiveBattler\n\ -_0802DC78: .4byte sub_802DCB0\n\ -_0802DC7C:\n\ - str r0, [sp, 0x4]\n\ - add r2, sp, 0x4\n\ - adds r0, r5, 0\n\ - movs r1, 0x19\n\ - bl SetMonData\n\ - ldr r1, _0802DCA8 @ =gBattlerControllerFuncs\n\ - lsls r0, r7, 2\n\ - adds r0, r1\n\ - ldr r1, _0802DCAC @ =sub_802D90C\n\ - str r1, [r0]\n\ - mov r0, r8\n\ - bl DestroyTask\n\ -_0802DC98:\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\ -_0802DCA8: .4byte gBattlerControllerFuncs\n\ -_0802DCAC: .4byte sub_802D90C\n"); -} -#endif void sub_802DCB0(u8 taskId) { diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index e13369c0b..eed092c96 100644 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -40,7 +40,7 @@ static const u8 gUnknown_0840612C[] = { 0, 4, 3, 2, 1 }; -static const u8 *const sContextStatNames[] = { +static const u8 *const sContestStatNames[] = { OtherText_Coolness, OtherText_Toughness, OtherText_Smartness, @@ -683,12 +683,15 @@ static void Pokeblock_MenuWindowTextPrint(const u8 *message) Menu_PrintText(message, 1, 17); } -#ifdef NONMATCHING -static void Pokeblock_BufferEnhancedStatText(u8 *dest, u8 statID, s16 a2) +void Pokeblock_BufferEnhancedStatText(u8 *dest, u8 statId, s16 a2) { - if (a2 != 0) + if (a2) { - StringCopy(dest, sContextStatNames[statID]); + // This is is a joke. + // For absurd commentary on why this works, see battle/anim/water.c. + if (a2 > 0) a2 = 0; + if (a2 < 0) { u8 unk = -unk; } + StringCopy(dest, sContestStatNames[statId]); StringAppend(dest, gOtherText_WasEnhanced); } else @@ -696,49 +699,6 @@ static void Pokeblock_BufferEnhancedStatText(u8 *dest, u8 statID, s16 a2) StringCopy(dest, gOtherText_NothingChanged); } } -#else -NAKED -static void Pokeblock_BufferEnhancedStatText(u8 *dest, u8 a1, s16 a2) -{ - asm_unified("\tpush {r4,lr}\n" - "\tadds r4, r0, 0\n" - "\tlsls r1, 24\n" - "\tlsrs r3, r1, 24\n" - "\tlsls r2, 16\n" - "\tlsrs r0, r2, 16\n" - "\tasrs r2, 16\n" - "\tcmp r2, 0\n" - "\tbeq _08136DFC\n" - "\tcmp r2, 0\n" - "\tble _08136DD8\n" - "\tmovs r0, 0\n" - "_08136DD8:\n" - "\tlsls r0, 16\n" - "\tldr r1, _08136DF4 @ =sContextStatNames\n" - "\tlsls r0, r3, 2\n" - "\tadds r0, r1\n" - "\tldr r1, [r0]\n" - "\tadds r0, r4, 0\n" - "\tbl StringCopy\n" - "\tldr r1, _08136DF8 @ =gOtherText_WasEnhanced\n" - "\tadds r0, r4, 0\n" - "\tbl StringAppend\n" - "\tb _08136E04\n" - "\t.align 2, 0\n" - "_08136DF4: .4byte sContextStatNames\n" - "_08136DF8: .4byte gOtherText_WasEnhanced\n" - "_08136DFC:\n" - "\tldr r1, _08136E0C @ =gOtherText_NothingChanged\n" - "\tadds r0, r4, 0\n" - "\tbl StringCopy\n" - "_08136E04:\n" - "\tpop {r4}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" - "_08136E0C: .4byte gOtherText_NothingChanged"); -} -#endif static void Pokeblock_GetMonContestStats(struct Pokemon *pokemon, u8 *data) { |