summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKaz <kazbloxmc@gmail.com>2020-05-28 04:37:09 -0400
committerKaz <kazbloxmc@gmail.com>2020-05-28 04:37:09 -0400
commit4ccbc65f4bdf0bf53b9967018eb0ad653ce28446 (patch)
tree6782b18b401c6fb1ca816964c6df18b36789d5f5 /src
parent2608dd2a3383ed116c4bf32255751afd3b7f0374 (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.c254
-rw-r--r--src/battle_anim.c222
-rw-r--r--src/battle_controller_player.c219
-rw-r--r--src/use_pokeblock.c56
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)
{