summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGriffinR <griffin.g.richards@gmail.com>2020-08-19 01:04:35 -0400
committerGitHub <noreply@github.com>2020-08-19 01:04:35 -0400
commit5d6e7a31da8f018c1a69e9e57eca0657ec19c283 (patch)
tree3ce548fbada787a8d2dc686ef6612f06e2b9fc3a /src
parent9effc97f69d46af00e45420661a775c5977049c8 (diff)
parent3d96e954c845659f5184e99856ddf61ce1375b2f (diff)
Merge pull request #788 from kazblox/master
Fix NONMATCHINGs and actual English Debug support
Diffstat (limited to 'src')
-rw-r--r--src/battle/anim/dark.c254
-rw-r--r--src/battle/anim/flying.c208
-rw-r--r--src/battle/anim/ice.c939
-rw-r--r--src/battle/anim/psychic.c135
-rw-r--r--src/battle/anim/water.c1043
-rw-r--r--src/battle_ai_script_commands.c303
-rw-r--r--src/battle_ai_switch_items.c275
-rw-r--r--src/battle_anim.c222
-rwxr-xr-xsrc/battle_anim_special.c80
-rw-r--r--src/battle_controller_player.c219
-rw-r--r--src/battle_main.c97
-rw-r--r--src/battle_script_commands.c968
-rw-r--r--src/berry_blender.c2
-rw-r--r--src/contest_painting.c192
-rw-r--r--src/data/graphics.c8
-rw-r--r--src/debug/mori_debug_menu.c6
-rw-r--r--src/debug/nakamura_debug_menu.c21
-rw-r--r--src/debug/nohara_debug_menu.c257
-rw-r--r--src/debug/start_menu_debug.c144
-rw-r--r--src/debug/taya_debug_window.c221
-rw-r--r--src/debug/tomomichi_debug_menu.c57
-rw-r--r--src/debug/watanabe_debug_menu.c19
-rw-r--r--src/decoration.c659
-rw-r--r--src/field_player_avatar.c12
-rw-r--r--src/field_tasks.c126
-rw-r--r--src/fieldmap.c2
-rw-r--r--src/libs/agb_flash_mx.c2
-rw-r--r--src/main.c11
-rw-r--r--src/mauville_man.c14
-rw-r--r--src/money.c27
-rw-r--r--src/pokemon_1.c3
-rw-r--r--src/pokemon_storage_system_4.c1366
-rw-r--r--src/pokemon_summary_screen.c939
-rw-r--r--src/roulette.c45
-rw-r--r--src/roulette_gfx.c365
-rw-r--r--src/save.c4
-rw-r--r--src/save_failed_screen.c4
-rw-r--r--src/secret_base.c6
-rw-r--r--src/slot_machine.c4
-rw-r--r--src/text.c9
-rw-r--r--src/trade.c199
-rw-r--r--src/trainer_card.c386
-rw-r--r--src/use_pokeblock.c60
-rw-r--r--src/util.c286
44 files changed, 1903 insertions, 8296 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/flying.c b/src/battle/anim/flying.c
index 407c9a08f..64991d161 100644
--- a/src/battle/anim/flying.c
+++ b/src/battle/anim/flying.c
@@ -2330,195 +2330,59 @@ void sub_80DB330(struct Sprite *sprite)
}
}
-#ifdef NONMATCHING
void sub_80DB374(struct Sprite *sprite)
{
- // NONMATCHING - Functionally equivalent - slight register swap at end
-
u32 matrixNum;
- int t1, t3;
- s16 t2;
+ int t1, t2;
switch (sprite->data[0])
{
+ case 0:
+ if (!gBattleAnimArgs[0])
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1);
+ }
+ else
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 1);
+ }
- case 0:
- if (!gBattleAnimArgs[0])
- {
- sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
- sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1);
- }
- else
- {
- sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
- sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 1);
- }
-
- sprite->data[1] = 512;
+ sprite->data[1] = 512;
- sub_8078FDC(sprite, 0, 256, sprite->data[1], 0);
- ++sprite->data[0];
- break;
- case 1:
- if (sprite->data[2] <= 11)
- {
- sprite->data[1] -= 40;
- }
- else
- {
- sprite->data[1] += 40;
- }
+ sub_8078FDC(sprite, 0, 256, sprite->data[1], 0);
+ sprite->data[0]++;
+ break;
+ case 1:
+ if (sprite->data[2] <= 11)
+ sprite->data[1] -= 40;
+ else
+ sprite->data[1] += 40;
- ++sprite->data[2];
+ sprite->data[2]++;
- sub_8078FDC(sprite, 0, 256, sprite->data[1], 0);
+ sub_8078FDC(sprite, 0, 256, sprite->data[1], 0);
- matrixNum = sprite->oam.matrixNum;
+ matrixNum = sprite->oam.matrixNum;
- t1 = 15616;
- t2 = gOamMatrices[matrixNum].d;
- t3 = t1 / t2 + 1;
+ t1 = 15616;
+ t2 = t1 / gOamMatrices[matrixNum].d + 1;
- if (t3 > 128)
- {
- t3 = 128;
- }
+ if (t2 > 128)
+ t2 = 128;
- /* NONMATCHING
- * compiles to:
- * asr r0, r0, #0x1
- strh r0, [r5, #0x26]
- * needed:
- * asrs r1, r0, 1
- * strh r1, [r5, 0x26] */
- sprite->pos2.y = (64 - t3) / 2;
+ t2 = (64 - t2) / 2;
+ sprite->pos2.y = t2;
- if (sprite->data[2] == 24)
- {
- sub_8079098(sprite);
- DestroyAnimSprite(sprite);
- }
+ if (sprite->data[2] == 24)
+ {
+ sub_8079098(sprite);
+ DestroyAnimSprite(sprite);
+ }
+ break;
}
}
-#else
-NAKED
-void sub_80DB374(struct Sprite *sprite)
-{
- asm_unified("push {r4,r5,lr}\n\
- sub sp, 0x4\n\
- adds r5, r0, 0\n\
- movs r1, 0x2E\n\
- ldrsh r0, [r5, r1]\n\
- cmp r0, 0\n\
- beq _080DB388\n\
- cmp r0, 0x1\n\
- beq _080DB3E0\n\
- b _080DB44C\n\
-_080DB388:\n\
- ldr r0, _080DB398 @ =gBattleAnimArgs\n\
- movs r2, 0\n\
- ldrsh r0, [r0, r2]\n\
- cmp r0, 0\n\
- bne _080DB3A0\n\
- ldr r4, _080DB39C @ =gBattleAnimAttacker\n\
- b _080DB3A2\n\
- .align 2, 0\n\
-_080DB398: .4byte gBattleAnimArgs\n\
-_080DB39C: .4byte gBattleAnimAttacker\n\
-_080DB3A0:\n\
- ldr r4, _080DB3DC @ =gBattleAnimTarget\n\
-_080DB3A2:\n\
- ldrb r0, [r4]\n\
- movs r1, 0\n\
- bl GetBattlerSpriteCoord\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- strh r0, [r5, 0x20]\n\
- ldrb r0, [r4]\n\
- movs r1, 0x1\n\
- bl GetBattlerSpriteCoord\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- strh r0, [r5, 0x22]\n\
- movs r0, 0\n\
- movs r3, 0x80\n\
- lsls r3, 2\n\
- strh r3, [r5, 0x30]\n\
- movs r2, 0x80\n\
- lsls r2, 1\n\
- str r0, [sp]\n\
- adds r0, r5, 0\n\
- movs r1, 0\n\
- bl sub_8078FDC\n\
- ldrh r0, [r5, 0x2E]\n\
- adds r0, 0x1\n\
- strh r0, [r5, 0x2E]\n\
- b _080DB44C\n\
- .align 2, 0\n\
-_080DB3DC: .4byte gBattleAnimTarget\n\
-_080DB3E0:\n\
- movs r1, 0x32\n\
- ldrsh r0, [r5, r1]\n\
- cmp r0, 0xB\n\
- bgt _080DB3EE\n\
- ldrh r0, [r5, 0x30]\n\
- subs r0, 0x28\n\
- b _080DB3F2\n\
-_080DB3EE:\n\
- ldrh r0, [r5, 0x30]\n\
- adds r0, 0x28\n\
-_080DB3F2:\n\
- strh r0, [r5, 0x30]\n\
- ldrh r0, [r5, 0x32]\n\
- adds r0, 0x1\n\
- movs r1, 0\n\
- strh r0, [r5, 0x32]\n\
- movs r2, 0x80\n\
- lsls r2, 1\n\
- movs r0, 0x30\n\
- ldrsh r3, [r5, r0]\n\
- str r1, [sp]\n\
- adds r0, r5, 0\n\
- bl sub_8078FDC\n\
- ldrb r1, [r5, 0x3]\n\
- lsls r1, 26\n\
- lsrs r1, 27\n\
- movs r0, 0xF4\n\
- lsls r0, 6\n\
- ldr r2, _080DB454 @ =gOamMatrices\n\
- lsls r1, 3\n\
- adds r1, r2\n\
- movs r2, 0x6\n\
- ldrsh r1, [r1, r2]\n\
- bl __divsi3\n\
- adds r1, r0, 0x1\n\
- cmp r1, 0x80\n\
- ble _080DB42C\n\
- movs r1, 0x80\n\
-_080DB42C:\n\
- movs r0, 0x40\n\
- subs r0, r1\n\
- lsrs r1, r0, 31\n\
- adds r0, r1\n\
- asrs r1, r0, 1\n\
- strh r1, [r5, 0x26]\n\
- movs r1, 0x32\n\
- ldrsh r0, [r5, r1]\n\
- cmp r0, 0x18\n\
- bne _080DB44C\n\
- adds r0, r5, 0\n\
- bl sub_8079098\n\
- adds r0, r5, 0\n\
- bl DestroyAnimSprite\n\
-_080DB44C:\n\
- add sp, 0x4\n\
- pop {r4,r5}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080DB454: .4byte gOamMatrices\n");
-}
-#endif
void sub_80DB458(struct Sprite *sprite)
{
diff --git a/src/battle/anim/ice.c b/src/battle/anim/ice.c
index e41057d72..438c61f9f 100644
--- a/src/battle/anim/ice.c
+++ b/src/battle/anim/ice.c
@@ -26,6 +26,7 @@ extern struct INCBIN_U8 gBattleAnimFogTilemap;
extern struct INCBIN_U8 gWeatherFog1Tiles;
static void sub_80D7704(struct Sprite *sprite);
+static void sub_80D7888(struct Sprite *sprite);
static void AnimIcePunchSwirlingParticle(struct Sprite *sprite);
static void AnimIceBeamParticle(struct Sprite *sprite);
static void AnimIceEffectParticle(struct Sprite *sprite);
@@ -53,7 +54,15 @@ static void AnimIceBallParticle(struct Sprite *sprite);
static void AnimTask_Haze2(u8 taskId);
static void AnimTask_OverlayFogTiles(u8 taskId);
static void AnimTask_Hail2(u8 taskId);
-bool8 sub_80D8BA8(u8 a1, u8 a2, u8 a3, u8 a4);
+bool8 sub_80D8BA8(u8 hailStructId, u8 affineAnimNum, u8 taskId, u8 c);
+
+struct HailStruct
+{
+ s32 x:10;
+ s32 y:10;
+ s32 bPosition:8;
+ s32 unk3:4;
+};
const union AnimCmd gSpriteAnim_83D9B58[] =
{
@@ -374,18 +383,18 @@ const struct SpriteTemplate gPoisonGasCloudSpriteTemplate =
.callback = InitPoisonGasCloudAnim,
};
-const u8 gUnknown_083D9DC4[][4] =
-{
- {0x64, 0xE0, 0x01, 0x20},
- {0x55, 0xE0, 0x01, 0x00},
- {0xF2, 0xE0, 0x11, 0x10},
- {0x42, 0xE0, 0x21, 0x10},
- {0xB6, 0xE0, 0x31, 0x00},
- {0x3C, 0xE0, 0x01, 0x20},
- {0xD6, 0xE0, 0x11, 0x00},
- {0x71, 0xE0, 0x01, 0x10},
- {0xD2, 0xE0, 0x31, 0x10},
- {0x26, 0xE0, 0x21, 0x00},
+const struct HailStruct gUnknown_083D9DC4[] =
+{
+ {.x = 100, .y = 120, .bPosition = B_POSITION_PLAYER_LEFT, .unk3 = 2},
+ {.x = 85, .y = 120, .bPosition = B_POSITION_PLAYER_LEFT, .unk3 = 0},
+ {.x = 242, .y = 120, .bPosition = B_POSITION_OPPONENT_LEFT, .unk3 = 1},
+ {.x = 66, .y = 120, .bPosition = B_POSITION_PLAYER_RIGHT, .unk3 = 1},
+ {.x = 182, .y = 120, .bPosition = B_POSITION_OPPONENT_RIGHT, .unk3 = 0},
+ {.x = 60, .y = 120, .bPosition = B_POSITION_PLAYER_LEFT, .unk3 = 2},
+ {.x = 214, .y = 120, .bPosition = B_POSITION_OPPONENT_LEFT, .unk3 = 0},
+ {.x = 113, .y = 120, .bPosition = B_POSITION_PLAYER_LEFT, .unk3 = 1},
+ {.x = 210, .y = 120, .bPosition = B_POSITION_OPPONENT_RIGHT, .unk3 = 1},
+ {.x = 38, .y = 120, .bPosition = B_POSITION_PLAYER_RIGHT, .unk3 = 0},
};
const union AffineAnimCmd gSpriteAffineAnim_83D9DEC[] =
@@ -528,266 +537,46 @@ const struct SpriteTemplate gIceBallParticleSpriteTemplate =
.callback = InitIceBallParticle,
};
-// unknown - potentially used in weather ball
-// TODO: decompile function and name it
-/*
-// NOT EQUIVALENT
static void sub_80D7704(struct Sprite *sprite)
{
- //
- //u16 battler1, battler2, battler3, battler4; //
- u16 r9, r8, r3, r6;
- //s16 r4, r10;
+ s16 targetX, targetY, attackerX, attackerY;
sprite->oam.tileNum += 7;
-
- //u8 battler1, battler2, battler3, battler4;
-
- //battler1 = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
- //battler2 = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
- //battler3 = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
- //battler4 = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
-
- //sprite->oam.tileNum += 7;
-
- //sprite->data[0] = gBattleAnimArgs[4];
-
- //sprite->data[1] = battler3 + gBattleAnimArgs[0]; //???
- //sprite->data[2] = battler1 + gBattleAnimArgs[2];
- //sprite->data[3] = battler4 + gBattleAnimArgs[1];
- //sprite->data[4] = battler2 + gBattleAnimArgs[3];
-
- r9 = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
- r8 = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
- r3 = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
- r6 = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
-
+ targetX = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ targetY = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
+ attackerX = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ attackerY = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[1] = gBattleAnimArgs[0] + attackerX;
+ sprite->data[2] = gBattleAnimArgs[2] + targetX;
+ sprite->data[3] = gBattleAnimArgs[1] + attackerY;
+ sprite->data[4] = gBattleAnimArgs[3] + targetY;
+ sub_8078314(sprite);
- sprite->data[1] = r3 + gBattleAnimArgs[0]; //???
- sprite->data[2] = r9 + gBattleAnimArgs[2];
- sprite->data[3] = r6 + gBattleAnimArgs[1];
- sprite->data[4] = r8 + gBattleAnimArgs[3];
-
- //sprite->data[0] = gBattleAnimArgs;
+ for (;(targetX >= -32 && targetX <= 272) && (targetY >= -32 && targetY <= 192);
+ targetX += sprite->data[1], targetY += sprite->data[2])
+ ;
+ sprite->data[1] = -sprite->data[1];
+ sprite->data[2] = -sprite->data[2];
+ for (;(attackerX >= -32 && attackerX <= 272) && (attackerY >= -32 && attackerY <= 192);
+ attackerX += sprite->data[1], attackerY += sprite->data[2])
+ ;
+ sprite->pos1.x = attackerX;
+ sprite->pos1.y = attackerY;
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[1] = attackerX;
+ sprite->data[2] = targetX;
+ sprite->data[3] = attackerY;
+ sprite->data[4] = targetY;
sub_8078314(sprite);
-
- if ((u32)(r9 + 32) <= 304 || (u32)(r8 + 32) <= 224) // cmp 1
- {
- r4 = sprite->data[1];
- r10 = 304;
-
- // _080D77AA
- for (int i = 0; i < 3; i++)
- {
- //
- if (((u32)((s16)r9 + r4) + (0x80 << 14)) >> 16 > 304
- || ((u32)((s16)r8 + r4) + (0x80 << 14)) >> 16 > 0xE0)
- {
- break;
- }
- }
- }
- // _080D77DE
-}
-*/
-
-NAKED static void sub_80D7704(struct Sprite *sprite)
-{
- asm_unified("\tpush {r4-r7,lr}\n"
- "\tmov r7, r10\n"
- "\tmov r6, r9\n"
- "\tmov r5, r8\n"
- "\tpush {r5-r7}\n"
- "\tsub sp, 0x4\n"
- "\tadds r5, r0, 0\n"
- "\tldrh r2, [r5, 0x4]\n"
- "\tlsls r1, r2, 22\n"
- "\tlsrs r1, 22\n"
- "\tadds r1, 0x7\n"
- "\tldr r3, _080D780C @ =0x000003ff\n"
- "\tadds r0, r3, 0\n"
- "\tands r1, r0\n"
- "\tldr r0, _080D7810 @ =0xfffffc00\n"
- "\tands r0, r2\n"
- "\torrs r0, r1\n"
- "\tstrh r0, [r5, 0x4]\n"
- "\tldr r4, _080D7814 @ =gBattleAnimTarget\n"
- "\tldrb r0, [r4]\n"
- "\tmovs r1, 0x2\n"
- "\tbl GetBattlerSpriteCoord\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tmov r9, r0\n"
- "\tldrb r0, [r4]\n"
- "\tmovs r1, 0x3\n"
- "\tbl GetBattlerSpriteCoord\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tmov r8, r0\n"
- "\tldr r4, _080D7818 @ =gBattleAnimAttacker\n"
- "\tldrb r0, [r4]\n"
- "\tmovs r1, 0x2\n"
- "\tbl GetBattlerSpriteCoord\n"
- "\tlsls r0, 24\n"
- "\tlsrs r3, r0, 24\n"
- "\tldrb r0, [r4]\n"
- "\tmovs r1, 0x3\n"
- "\tstr r3, [sp]\n"
- "\tbl GetBattlerSpriteCoord\n"
- "\tlsls r0, 24\n"
- "\tlsrs r6, r0, 24\n"
- "\tldr r1, _080D781C @ =gBattleAnimArgs\n"
- "\tldrh r0, [r1, 0x8]\n"
- "\tstrh r0, [r5, 0x2E]\n"
- "\tldrh r0, [r1]\n"
- "\tldr r3, [sp]\n"
- "\tadds r0, r3\n"
- "\tstrh r0, [r5, 0x30]\n"
- "\t ldrh r0, [r1, 0x4]\n"
- "\t mov r4, r9\n"
- "\t adds r0, r4, r0\n"
- "\tstrh r0, [r5, 0x32]\n"
- "\tldrh r0, [r1, 0x2]\n"
- "\tadds r0, r6\n"
- "\tstrh r0, [r5, 0x34]\n"
- "\tldrh r0, [r1, 0x6]\n"
- "\tmov r7, r8\n"
- "\tadds r0, r7, r0\n"
- "\tstrh r0, [r5, 0x36]\n"
- "\tadds r0, r5, 0\n"
- "\tbl sub_8078314\n"
- "\tadds r4, 0x20\n"
- "\tmovs r0, 0x98\n"
- "\tlsls r0, 1\n"
- "\tmov r12, r0\n"
- "\tldr r3, [sp]\n"
- "\tcmp r4, r12\n"
- "\tbhi _080D77DE\n"
- "\tadds r0, r7, 0\n"
- "\tadds r0, 0x20\n"
- "\tldrh r1, [r5, 0x30]\n"
- "\tldrh r2, [r5, 0x32]\n"
- "\tcmp r0, 0xE0\n"
- "\tbhi _080D77DE\n"
- "\tadds r4, r1, 0\n"
- "\tmov r10, r12\n"
- "_080D77AA:\n"
- "\tmov r7, r9\n"
- "\tlsls r1, r7, 16\n"
- "\tasrs r1, 16\n"
- "\tadds r1, r4\n"
- "\tlsls r1, 16\n"
- "\tmov r7, r8\n"
- "\tlsls r0, r7, 16\n"
- "\tasrs r0, 16\n"
- "\tadds r0, r2\n"
- "\tlsls r0, 16\n"
- "\tlsrs r0, 16\n"
- "\tmov r8, r0\n"
- "\tlsrs r0, r1, 16\n"
- "\tmov r9, r0\n"
- "\tmovs r7, 0x80\n"
- "\tlsls r7, 14\n"
- "\tadds r1, r7\n"
- "\tlsrs r1, 16\n"
- "\tcmp r1, r10\n"
- "\tbhi _080D77DE\n"
- "\tmov r1, r8\n"
- "\tlsls r0, r1, 16\n"
- "\tadds r0, r7\n"
- "\tlsrs r0, 16\n"
- "\tcmp r0, 0xE0\n"
- "\tbls _080D77AA\n"
- "_080D77DE:\n"
- "\tldrh r0, [r5, 0x30]\n"
- "\tnegs r7, r0\n"
- "\tstrh r7, [r5, 0x30]\n"
- "\tldrh r0, [r5, 0x32]\n"
- "\tnegs r4, r0\n"
- "\tstrh r4, [r5, 0x32]\n"
- "\tlsls r0, r3, 16\n"
- "\tmovs r1, 0x80\n"
- "\tlsls r1, 14\n"
- "\tadds r0, r1\n"
- "\tlsrs r0, 16\n"
- "\tmovs r2, 0x98\n"
- "\tlsls r2, 1\n"
- "\tmov r12, r2\n"
- "\tldr r1, _080D781C @ =gBattleAnimArgs\n"
- "\tmov r10, r1\n"
- "\tcmp r0, r12\n"
- "\tbhi _080D784A\n"
- "\tlsls r1, r6, 16\n"
- "\tmovs r2, 0x80\n"
- "\tlsls r2, 14\n"
- "\tadds r0, r1, r2\n"
- "\tb _080D7842\n"
- "\t.align 2, 0\n"
- "_080D780C: .4byte 0x000003ff\n"
- "_080D7810: .4byte 0xfffffc00\n"
- "_080D7814: .4byte gBattleAnimTarget\n"
- "_080D7818: .4byte gBattleAnimAttacker\n"
- "_080D781C: .4byte gBattleAnimArgs\n"
- "_080D7820:\n"
- "\tlsls r1, r3, 16\n"
- "\tasrs r1, 16\n"
- "\tadds r1, r7\n"
- "\tlsls r1, 16\n"
- "\tasrs r0, r2, 16\n"
- "\tadds r0, r4\n"
- "\tlsls r0, 16\n"
- "\tlsrs r6, r0, 16\n"
- "\tlsrs r3, r1, 16\n"
- "\tmovs r0, 0x80\n"
- "\tlsls r0, 14\n"
- "\tadds r1, r0\n"
- "\tlsrs r1, 16\n"
- "\tcmp r1, r12\n"
- "\tbhi _080D784A\n"
- "\tlsls r1, r6, 16\n"
- "\tadds r0, r1, r0\n"
- "_080D7842:\n"
- "\tlsrs r0, 16\n"
- "\tadds r2, r1, 0\n"
- "\tcmp r0, 0xE0\n"
- "\tbls _080D7820\n"
- "_080D784A:\n"
- "\tstrh r3, [r5, 0x20]\n"
- "\tstrh r6, [r5, 0x22]\n"
- "\tmov r1, r10\n"
- "\tldrh r0, [r1, 0x8]\n"
- "\tstrh r0, [r5, 0x2E]\n"
- "\tstrh r3, [r5, 0x30]\n"
- "\tmov r2, r9\n"
- "\tstrh r2, [r5, 0x32]\n"
- "\tstrh r6, [r5, 0x34]\n"
- "\tmov r3, r8\n"
- "\tstrh r3, [r5, 0x36]\n"
- "\tadds r0, r5, 0\n"
- "\tbl sub_8078314\n"
- "\tmov r7, r10\n"
- "\tldrh r0, [r7, 0xA]\n"
- "\tstrh r0, [r5, 0x34]\n"
- "\tldrh r0, [r7, 0xC]\n"
- "\tstrh r0, [r5, 0x36]\n"
- "\tldr r0, _080D7884 @ =sub_80D7888\n"
- "\tstr r0, [r5, 0x1C]\n"
- "\tadd sp, 0x4\n"
- "\tpop {r3-r5}\n"
- "\tmov r8, r3\n"
- "\tmov r9, r4\n"
- "\tmov r10, r5\n"
- "\tpop {r4-r7}\n"
- "\tpop {r0}\n"
- "\tbx r0\n"
- "\t.align 2, 0\n"
- "_080D7884: .4byte sub_80D7888");
+ sprite->data[3] = gBattleAnimArgs[5];
+ sprite->data[4] = gBattleAnimArgs[6];
+ sprite->callback = sub_80D7888;
}
-void sub_80D7888(struct Sprite *sprite)
+static void sub_80D7888(struct Sprite *sprite)
{
if (sprite->data[0] != 0)
{
@@ -1460,13 +1249,9 @@ static void InitPoisonGasCloudAnim(struct Sprite *sprite)
}
// Animates the gas clouds towards the target mon in Poison Gas.
-// functionally correct, but there appears to be an unused local variable causing
-// switch case 1 to not match
-#ifdef NONMATCHING
static void sub_80D8874(struct Sprite *sprite)
{
int value;
- register s16 value2 asm("r5");
switch (sprite->data[7] & 0xFF)
{
@@ -1481,19 +1266,20 @@ static void sub_80D8874(struct Sprite *sprite)
if (sprite->data[0] <= 0)
{
- value2 = 80;
- sprite->data[0] = value2;
- sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
+ sprite->data[0] = 80;
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
sprite->data[1] = sprite->pos1.x;
sprite->data[2] = sprite->pos1.x;
sprite->pos1.y += sprite->pos2.y;
sprite->data[3] = sprite->pos1.y;
sprite->data[4] = sprite->pos1.y + 29;
sprite->data[7]++;
- if (gMain.inBattle && gBattlerPositions[gBattleAnimTarget] & 1)
+ if (!gMain.inBattle)
+ sprite->data[5] = 80;
+ else if (gBattlerPositions[gBattleAnimTarget] & 1)
sprite->data[5] = 204;
else
- sprite->data[5] = value2;
+ sprite->data[5] = 80;
sprite->pos2.y = 0;
value = gSineTable[sprite->data[5]];
@@ -1530,12 +1316,13 @@ static void sub_80D8874(struct Sprite *sprite)
if (sprite->data[0] <= 0)
{
- asm("mov r2, #0"); // unused local variable?
sprite->data[0] = 0x300;
sprite->data[1] = sprite->pos1.x += sprite->pos2.x;
sprite->data[3] = sprite->pos1.y += sprite->pos2.y;
sprite->data[4] = sprite->pos1.y + 4;
- if (gMain.inBattle && gBattlerPositions[gBattleAnimTarget] & 1)
+ if (!gMain.inBattle)
+ sprite->data[2] = -0x10;
+ else if (gBattlerPositions[gBattleAnimTarget] & 1)
sprite->data[2] = 0x100;
else
sprite->data[2] = -0x10;
@@ -1560,321 +1347,6 @@ static void sub_80D8874(struct Sprite *sprite)
break;
}
}
-#else
-NAKED static void sub_80D8874(struct Sprite *sprite)
-{
- asm_unified("\tpush {r4-r6,lr}\n"
- "\tadds r4, r0, 0\n"
- "\tldrh r0, [r4, 0x3C]\n"
- "\tmovs r5, 0xFF\n"
- "\tmovs r1, 0xFF\n"
- "\tands r1, r0\n"
- "\tcmp r1, 0x1\n"
- "\tbeq _080D8968\n"
- "\tcmp r1, 0x1\n"
- "\tbgt _080D888E\n"
- "\tcmp r1, 0\n"
- "\tbeq _080D8896\n"
- "\tb _080D8AD0\n"
- "_080D888E:\n"
- "\tcmp r1, 0x2\n"
- "\tbne _080D8894\n"
- "\tb _080D8A94\n"
- "_080D8894:\n"
- "\tb _080D8AD0\n"
- "_080D8896:\n"
- "\tadds r0, r4, 0\n"
- "\tbl TranslateAnimLinear\n"
- "\tldr r1, _080D88C0 @ =gSineTable\n"
- "\tmovs r2, 0x38\n"
- "\tldrsh r0, [r4, r2]\n"
- "\tlsls r0, 1\n"
- "\tadds r0, r1\n"
- "\tmovs r1, 0\n"
- "\tldrsh r0, [r0, r1]\n"
- "\tasrs r0, 4\n"
- "\tldrh r2, [r4, 0x24]\n"
- "\tadds r0, r2\n"
- "\tstrh r0, [r4, 0x24]\n"
- "\tmovs r1, 0x3A\n"
- "\tldrsh r0, [r4, r1]\n"
- "\tcmp r0, 0\n"
- "\tbeq _080D88C4\n"
- "\tldrh r0, [r4, 0x38]\n"
- "\tsubs r0, 0x8\n"
- "\tb _080D88C8\n"
- "\t.align 2, 0\n"
- "_080D88C0: .4byte gSineTable\n"
- "_080D88C4:\n"
- "\tldrh r0, [r4, 0x38]\n"
- "\tadds r0, 0x8\n"
- "_080D88C8:\n"
- "\tands r0, r5\n"
- "\tstrh r0, [r4, 0x38]\n"
- "\tmovs r2, 0x2E\n"
- "\tldrsh r0, [r4, r2]\n"
- "\tcmp r0, 0\n"
- "\tble _080D88D6\n"
- "\tb _080D8AD0\n"
- "_080D88D6:\n"
- "\tmovs r5, 0x50\n"
- "\tstrh r5, [r4, 0x2E]\n"
- "\tldr r6, _080D8928 @ =gBattleAnimTarget\n"
- "\tldrb r0, [r6]\n"
- "\tmovs r1, 0\n"
- "\tbl GetBattlerSpriteCoord\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tstrh r0, [r4, 0x20]\n"
- "\tstrh r0, [r4, 0x30]\n"
- "\tstrh r0, [r4, 0x32]\n"
- "\tldrh r0, [r4, 0x26]\n"
- "\tldrh r1, [r4, 0x22]\n"
- "\tadds r0, r1\n"
- "\tstrh r0, [r4, 0x22]\n"
- "\tstrh r0, [r4, 0x34]\n"
- "\tadds r0, 0x1D\n"
- "\tstrh r0, [r4, 0x36]\n"
- "\tldrh r0, [r4, 0x3C]\n"
- "\tadds r0, 0x1\n"
- "\tstrh r0, [r4, 0x3C]\n"
- "\tldr r0, _080D892C @ =gMain\n"
- "\tldr r2, _080D8930 @ =0x0000043d\n"
- "\tadds r0, r2\n"
- "\tldrb r1, [r0]\n"
- "\tmovs r0, 0x2\n"
- "\tands r0, r1\n"
- "\tcmp r0, 0\n"
- "\tbeq _080D8938\n"
- "\tldr r1, _080D8934 @ =gBattlerPositions\n"
- "\tldrb r0, [r6]\n"
- "\tadds r0, r1\n"
- "\tldrb r1, [r0]\n"
- "\tmovs r0, 0x1\n"
- "\tands r0, r1\n"
- "\tcmp r0, 0\n"
- "\tbeq _080D8938\n"
- "\tmovs r0, 0xCC\n"
- "\tstrh r0, [r4, 0x38]\n"
- "\tb _080D893A\n"
- "\t.align 2, 0\n"
- "_080D8928: .4byte gBattleAnimTarget\n"
- "_080D892C: .4byte gMain\n"
- "_080D8930: .4byte 0x0000043d\n"
- "_080D8934: .4byte gBattlerPositions\n"
- "_080D8938:\n"
- "\tstrh r5, [r4, 0x38]\n"
- "_080D893A:\n"
- "\tmovs r0, 0\n"
- "\tstrh r0, [r4, 0x26]\n"
- "\tldr r1, _080D8964 @ =gSineTable\n"
- "\tmovs r2, 0x38\n"
- "\tldrsh r0, [r4, r2]\n"
- "\tlsls r0, 1\n"
- "\tadds r0, r1\n"
- "\tmovs r1, 0\n"
- "\tldrsh r0, [r0, r1]\n"
- "\tasrs r0, 3\n"
- "\tstrh r0, [r4, 0x24]\n"
- "\tldrh r0, [r4, 0x38]\n"
- "\tadds r0, 0x2\n"
- "\tmovs r1, 0xFF\n"
- "\tands r0, r1\n"
- "\tstrh r0, [r4, 0x38]\n"
- "\tadds r0, r4, 0\n"
- "\tbl InitAnimLinearTranslation\n"
- "\tb _080D8AD0\n"
- "\t.align 2, 0\n"
- "_080D8964: .4byte gSineTable\n"
- "_080D8968:\n"
- "\tadds r0, r4, 0\n"
- "\tbl TranslateAnimLinear\n"
- "\tldr r1, _080D89C8 @ =gSineTable\n"
- "\tmovs r2, 0x38\n"
- "\tldrsh r0, [r4, r2]\n"
- "\tlsls r0, 1\n"
- "\tadds r0, r1\n"
- "\tmovs r2, 0\n"
- "\tldrsh r0, [r0, r2]\n"
- "\tasrs r0, 3\n"
- "\tldrh r2, [r4, 0x24]\n"
- "\tadds r0, r2\n"
- "\tstrh r0, [r4, 0x24]\n"
- "\tmovs r2, 0x38\n"
- "\tldrsh r0, [r4, r2]\n"
- "\tadds r0, 0x40\n"
- "\tlsls r0, 1\n"
- "\tadds r0, r1\n"
- "\tmovs r2, 0\n"
- "\tldrsh r1, [r0, r2]\n"
- "\tlsls r0, r1, 1\n"
- "\tadds r0, r1\n"
- "\tnegs r0, r0\n"
- "\tasrs r0, 8\n"
- "\tldrh r1, [r4, 0x26]\n"
- "\tadds r0, r1\n"
- "\tstrh r0, [r4, 0x26]\n"
- "\tldr r0, _080D89CC @ =gMain\n"
- "\tldr r2, _080D89D0 @ =0x0000043d\n"
- "\tadds r0, r2\n"
- "\tldrb r1, [r0]\n"
- "\tmovs r0, 0x2\n"
- "\tands r0, r1\n"
- "\tcmp r0, 0\n"
- "\tbeq _080D89F2\n"
- "\tldrh r1, [r4, 0x38]\n"
- "\tadds r0, r1, 0\n"
- "\tsubs r0, 0x40\n"
- "\tlsls r0, 16\n"
- "\tlsrs r0, 16\n"
- "\tadds r3, r1, 0\n"
- "\tcmp r0, 0x7F\n"
- "\tbhi _080D89D4\n"
- "\tldrh r1, [r4, 0x3C]\n"
- "\tlsls r1, 16\n"
- "\tasrs r1, 24\n"
- "\tb _080D89DC\n"
- "\t.align 2, 0\n"
- "_080D89C8: .4byte gSineTable\n"
- "_080D89CC: .4byte gMain\n"
- "_080D89D0: .4byte 0x0000043d\n"
- "_080D89D4:\n"
- "\tldrh r1, [r4, 0x3C]\n"
- "\tlsls r1, 16\n"
- "\tasrs r1, 24\n"
- "\tadds r1, 0x1\n"
- "_080D89DC:\n"
- "\tmovs r0, 0x3\n"
- "\tands r1, r0\n"
- "\tlsls r1, 2\n"
- "\tldrb r2, [r4, 0x5]\n"
- "\tmovs r0, 0xD\n"
- "\tnegs r0, r0\n"
- "\tands r0, r2\n"
- "\torrs r0, r1\n"
- "\tstrb r0, [r4, 0x5]\n"
- "\tadds r0, r3, 0x4\n"
- "\tb _080D8A12\n"
- "_080D89F2:\n"
- "\tldrh r0, [r4, 0x38]\n"
- "\tsubs r0, 0x40\n"
- "\tlsls r0, 16\n"
- "\tlsrs r0, 16\n"
- "\tcmp r0, 0x7F\n"
- "\tbhi _080D8A06\n"
- "\tadds r1, r4, 0\n"
- "\tadds r1, 0x43\n"
- "\tmovs r0, 0x80\n"
- "\tb _080D8A0C\n"
- "_080D8A06:\n"
- "\tadds r1, r4, 0\n"
- "\tadds r1, 0x43\n"
- "\tmovs r0, 0x8C\n"
- "_080D8A0C:\n"
- "\tstrb r0, [r1]\n"
- "\tldrh r0, [r4, 0x38]\n"
- "\tsubs r0, 0x4\n"
- "_080D8A12:\n"
- "\tmovs r1, 0xFF\n"
- "\tands r0, r1\n"
- "\tstrh r0, [r4, 0x38]\n"
- "\tmovs r1, 0x2E\n"
- "\tldrsh r0, [r4, r1]\n"
- "\tcmp r0, 0\n"
- "\tbgt _080D8AD0\n"
- "\tmovs r2, 0\n"
- "\tmovs r0, 0xC0\n"
- "\tlsls r0, 2\n"
- "\tstrh r0, [r4, 0x2E]\n"
- "\tldrh r0, [r4, 0x24]\n"
- "\tldrh r1, [r4, 0x20]\n"
- "\tadds r0, r1\n"
- "\tstrh r0, [r4, 0x20]\n"
- "\tstrh r0, [r4, 0x30]\n"
- "\tldrh r0, [r4, 0x26]\n"
- "\tldrh r1, [r4, 0x22]\n"
- "\tadds r0, r1\n"
- "\tstrh r0, [r4, 0x22]\n"
- "\tstrh r0, [r4, 0x34]\n"
- "\tadds r0, 0x4\n"
- "\tstrh r0, [r4, 0x36]\n"
- "\tldr r0, _080D8A68 @ =gMain\n"
- "\tldr r1, _080D8A6C @ =0x0000043d\n"
- "\tadds r0, r1\n"
- "\tldrb r1, [r0]\n"
- "\tmovs r0, 0x2\n"
- "\tands r0, r1\n"
- "\tcmp r0, 0\n"
- "\tbeq _080D8A78\n"
- "\tldr r1, _080D8A70 @ =gBattlerPositions\n"
- "\tldr r0, _080D8A74 @ =gBattleAnimTarget\n"
- "\tldrb r0, [r0]\n"
- "\tadds r0, r1\n"
- "\tldrb r1, [r0]\n"
- "\tmovs r0, 0x1\n"
- "\tands r0, r1\n"
- "\tcmp r0, 0\n"
- "\tbeq _080D8A78\n"
- "\tmovs r0, 0x80\n"
- "\tlsls r0, 1\n"
- "\tb _080D8A7A\n"
- "\t.align 2, 0\n"
- "_080D8A68: .4byte gMain\n"
- "_080D8A6C: .4byte 0x0000043d\n"
- "_080D8A70: .4byte gBattlerPositions\n"
- "_080D8A74: .4byte gBattleAnimTarget\n"
- "_080D8A78:\n"
- "\tldr r0, _080D8A90 @ =0x0000fff0\n"
- "_080D8A7A:\n"
- "\tstrh r0, [r4, 0x32]\n"
- "\tldrh r0, [r4, 0x3C]\n"
- "\tadds r0, 0x1\n"
- "\tmovs r1, 0\n"
- "\tstrh r0, [r4, 0x3C]\n"
- "\tstrh r1, [r4, 0x26]\n"
- "\tstrh r1, [r4, 0x24]\n"
- "\tadds r0, r4, 0\n"
- "\tbl sub_8078BD4\n"
- "\tb _080D8AD0\n"
- "\t.align 2, 0\n"
- "_080D8A90: .4byte 0x0000fff0\n"
- "_080D8A94:\n"
- "\tadds r0, r4, 0\n"
- "\tbl TranslateAnimLinear\n"
- "\tlsls r0, 24\n"
- "\tcmp r0, 0\n"
- "\tbeq _080D8AD0\n"
- "\tldrb r0, [r4, 0x1]\n"
- "\tlsls r0, 30\n"
- "\tlsrs r0, 30\n"
- "\tmovs r1, 0x1\n"
- "\tands r0, r1\n"
- "\tcmp r0, 0\n"
- "\tbeq _080D8AC2\n"
- "\tldrb r0, [r4, 0x3]\n"
- "\tlsls r0, 26\n"
- "\tlsrs r0, 27\n"
- "\tbl FreeOamMatrix\n"
- "\tldrb r1, [r4, 0x1]\n"
- "\tmovs r0, 0x4\n"
- "\tnegs r0, r0\n"
- "\tands r0, r1\n"
- "\tstrb r0, [r4, 0x1]\n"
- "_080D8AC2:\n"
- "\tadds r0, r4, 0\n"
- "\tbl DestroySprite\n"
- "\tldr r1, _080D8AD8 @ =gAnimVisualTaskCount\n"
- "\tldrb r0, [r1]\n"
- "\tsubs r0, 0x1\n"
- "\tstrb r0, [r1]\n"
- "_080D8AD0:\n"
- "\tpop {r4-r6}\n"
- "\tpop {r0}\n"
- "\tbx r0\n"
- "\t.align 2, 0\n"
- "_080D8AD8: .4byte gAnimVisualTaskCount");
-}
-#endif // NONMATCHING
// Creates Hail.
void AnimTask_Hail1(u8 taskId)
@@ -1929,266 +1401,63 @@ static void AnimTask_Hail2(u8 taskId)
}
}
-
-/*
-// Something to do with Hail.
-// possibly equivalent, possibly not
-bool8 sub_80D8BA8(u8 a1, u8 a2, u8 a3, u8 a4)//(u8 spriteId, u8 taskId, u8 a3)//(u8 taskId)
+bool8 sub_80D8BA8(u8 hailStructId, u8 affineAnimNum, u8 taskId, u8 c)
{
- //
- //struct Task *task = &gTasks[a2];
- //u16 i, j;
- //task->data[3]++;
- //u8 r5bank = ;
-
- //const struct SpriteTemplate *spriteTemplate;
- u8 spriteId;
+ u8 id;
+ s16 battlerX, battlerY;
+ s16 spriteX;
+ bool8 possibleBool = FALSE;
+ s8 unk = gUnknown_083D9DC4[hailStructId].unk3;
- s16 r6, r7;
-
- u32 tempA, tempB; // u32? s16? u16? u8? int?
-
- //u8 r6, r7;
-
- tempA = a3 + 0;
- tempB = 0;
-
- // is that gunknown a tempvar?
-
- if (gUnknown_083D9DC4[a1][3] != 2
- || IsAnimBankSpriteVisible(GetBattlerAtPosition(gUnknown_083D9DC4[a1][2])))
+ if (unk != 2)
{
- //return TRUE;
- tempB = 1;
-
- r7 = GetBattlerSpriteCoord(GetBattlerAtPosition(gUnknown_083D9DC4[a1][2]), 2);
- r6 = GetBattlerSpriteCoord(GetBattlerAtPosition(gUnknown_083D9DC4[a1][2]), 3);
-
- switch (gUnknown_083D9DC4[a1][3])
+ id = GetBattlerAtPosition(gUnknown_083D9DC4[hailStructId].bPosition);
+ if (IsAnimBankSpriteVisible(id))
{
- case 0:
- //
- r7 -= GetBattlerSpriteCoordAttr(GetBattlerAtPosition(gUnknown_083D9DC4[a1][2]), 1) / 6;
- r6 -= GetBattlerSpriteCoordAttr(GetBattlerAtPosition(gUnknown_083D9DC4[a1][2]), 0) / 6;
- break;
- case 1:
- //
- r7 += GetBattlerSpriteCoordAttr(GetBattlerAtPosition(gUnknown_083D9DC4[a1][2]), 1) / 6;
- r6 += GetBattlerSpriteCoordAttr(GetBattlerAtPosition(gUnknown_083D9DC4[a1][2]), 0) / 6;
+ possibleBool = TRUE;
+ battlerX = GetBattlerSpriteCoord(id, BATTLER_COORD_X_2);
+ battlerY = GetBattlerSpriteCoord(id, BATTLER_COORD_Y_PIC_OFFSET);
+ switch (unk)
+ {
+ case 0:
+ battlerX -= GetBattlerSpriteCoordAttr(id, BATTLER_COORD_ATTR_WIDTH) / 6;
+ battlerY -= GetBattlerSpriteCoordAttr(id, BATTLER_COORD_ATTR_HEIGHT) / 6;
+ break;
+ case 1:
+ battlerX += GetBattlerSpriteCoordAttr(id, BATTLER_COORD_ATTR_WIDTH) / 6;
+ battlerY += GetBattlerSpriteCoordAttr(id, BATTLER_COORD_ATTR_HEIGHT) / 6;
+ break;
+ }
+ }
+ else
+ {
+ battlerX = (gUnknown_083D9DC4[hailStructId].x);
+ battlerY = (gUnknown_083D9DC4[hailStructId].y);
}
}
-
else
{
- // _94
- r7 = gUnknown_083D9DC4[a1][0];
- r6 = gUnknown_083D9DC4[a1][1];
+ battlerX = (gUnknown_083D9DC4[hailStructId].x);
+ battlerY = (gUnknown_083D9DC4[hailStructId].y);
}
-
- spriteId = CreateSprite(&HailSpriteTemplate, r7 - r6, -0x8, 0x12);
-
- if (spriteId != 0x40)
+ spriteX = battlerX - ((battlerY + 8) / 2);
+ id = CreateSprite(&gHailSpriteTemplate, spriteX, -8, 18);
+ if (id == MAX_SPRITES)
{
- //
- StartSpriteAffineAnim(&gSprites[spriteId], a2);
-
- gSprites[spriteId].data[0] = tempB;
- gSprites[spriteId].data[3] = r7;
- gSprites[spriteId].data[4] = r6;
-
- gSprites[spriteId].data[5] = a2;
- gSprites[spriteId].data[6] = tempA;
- gSprites[spriteId].data[7] = a4;
-
+ return FALSE;
+ }
+ else
+ {
+ StartSpriteAffineAnim(&gSprites[id], affineAnimNum);
+ gSprites[id].data[0] = possibleBool;
+ gSprites[id].data[3] = battlerX;
+ gSprites[id].data[4] = battlerY;
+ gSprites[id].data[5] = affineAnimNum;
+ gSprites[id].data[6] = taskId;
+ gSprites[id].data[7] = c;
return TRUE;
}
-
- return FALSE;
-
-}
-//*/
-
-//*
-NAKED bool8 sub_80D8BA8(u8 a1, u8 a2, u8 a3, u8 a4)
-{
- asm_unified("\tpush {r4-r7,lr}\n"
- "\tmov r7, r10\n"
- "\tmov r6, r9\n"
- "\tmov r5, r8\n"
- "\tpush {r5-r7}\n"
- "\tsub sp, 0x8\n"
- "\tlsls r0, 24\n"
- "\tlsls r1, 24\n"
- "\tlsrs r1, 24\n"
- "\tmov r9, r1\n"
- "\tlsls r2, 24\n"
- "\tlsrs r2, 24\n"
- "\tstr r2, [sp]\n"
- "\tlsls r3, 24\n"
- "\tlsrs r3, 24\n"
- "\tmov r10, r3\n"
- "\tmovs r1, 0\n"
- "\tstr r1, [sp, 0x4]\n"
- "\tldr r1, _080D8C20 @ =gUnknown_083D9DC4\n"
- "\tlsrs r0, 22\n"
- "\tadds r4, r0, r1\n"
- "\tldrb r0, [r4, 0x3]\n"
- "\tlsls r0, 24\n"
- "\tasrs r0, 28\n"
- "\tmov r8, r0\n"
- "\tcmp r0, 0x2\n"
- "\tbeq _080D8C94\n"
- "\tldrh r0, [r4, 0x2]\n"
- "\tlsls r0, 20\n"
- "\tlsrs r0, 24\n"
- "\tbl GetBattlerAtPosition\n"
- "\tlsls r0, 24\n"
- "\tlsrs r5, r0, 24\n"
- "\tadds r0, r5, 0\n"
- "\tbl IsAnimBankSpriteVisible\n"
- "\tlsls r0, 24\n"
- "\tcmp r0, 0\n"
- "\tbeq _080D8C94\n"
- "\tmovs r0, 0x1\n"
- "\tstr r0, [sp, 0x4]\n"
- "\tadds r0, r5, 0\n"
- "\tmovs r1, 0x2\n"
- "\tbl GetBattlerSpriteCoord\n"
- "\tlsls r0, 24\n"
- "\tlsrs r7, r0, 24\n"
- "\tadds r0, r5, 0\n"
- "\tmovs r1, 0x3\n"
- "\tbl GetBattlerSpriteCoord\n"
- "\tlsls r0, 24\n"
- "\tlsrs r6, r0, 24\n"
- "\tmov r1, r8\n"
- "\tcmp r1, 0\n"
- "\tbeq _080D8C24\n"
- "\tcmp r1, 0x1\n"
- "\tbeq _080D8C5A\n"
- "\tb _080D8CA6\n"
- "\t.align 2, 0\n"
- "_080D8C20: .4byte gUnknown_083D9DC4\n"
- "_080D8C24:\n"
- "\tadds r0, r5, 0\n"
- "\tmovs r1, 0x1\n"
- "\tbl GetBattlerSpriteCoordAttr\n"
- "\tlsls r0, 16\n"
- "\tasrs r0, 16\n"
- "\tmovs r1, 0x6\n"
- "\tbl __divsi3\n"
- "\tlsls r1, r7, 16\n"
- "\tasrs r1, 16\n"
- "\tsubs r1, r0\n"
- "\tlsls r1, 16\n"
- "\tlsrs r7, r1, 16\n"
- "\tadds r0, r5, 0\n"
- "\tmovs r1, 0\n"
- "\tbl GetBattlerSpriteCoordAttr\n"
- "\tlsls r0, 16\n"
- "\tasrs r0, 16\n"
- "\tmovs r1, 0x6\n"
- "\tbl __divsi3\n"
- "\tlsls r1, r6, 16\n"
- "\tasrs r1, 16\n"
- "\tsubs r1, r0\n"
- "\tb _080D8C8E\n"
- "_080D8C5A:\n"
- "\tadds r0, r5, 0\n"
- "\tmovs r1, 0x1\n"
- "\tbl GetBattlerSpriteCoordAttr\n"
- "\tlsls r0, 16\n"
- "\tasrs r0, 16\n"
- "\tmovs r1, 0x6\n"
- "\tbl __divsi3\n"
- "\tlsls r1, r7, 16\n"
- "\tasrs r1, 16\n"
- "\tadds r1, r0\n"
- "\tlsls r1, 16\n"
- "\tlsrs r7, r1, 16\n"
- "\tadds r0, r5, 0\n"
- "\tmovs r1, 0\n"
- "\tbl GetBattlerSpriteCoordAttr\n"
- "\tlsls r0, 16\n"
- "\tasrs r0, 16\n"
- "\tmovs r1, 0x6\n"
- "\tbl __divsi3\n"
- "\tlsls r1, r6, 16\n"
- "\tasrs r1, 16\n"
- "\tadds r1, r0\n"
- "_080D8C8E:\n"
- "\tlsls r1, 16\n"
- "\tlsrs r6, r1, 16\n"
- "\tb _080D8CA6\n"
- "_080D8C94:\n"
- "\tldrh r0, [r4]\n"
- "\tlsls r0, 22\n"
- "\tasrs r0, 6\n"
- "\tlsrs r7, r0, 16\n"
- "\tldr r0, [r4]\n"
- "\tlsls r0, 12\n"
- "\tasrs r0, 22\n"
- "\tlsls r0, 16\n"
- "\tlsrs r6, r0, 16\n"
- "_080D8CA6:\n"
- "\tlsls r0, r6, 16\n"
- "\tasrs r0, 16\n"
- "\tadds r0, 0x8\n"
- "\tlsrs r1, r0, 31\n"
- "\tadds r0, r1\n"
- "\tasrs r0, 1\n"
- "\tlsls r1, r7, 16\n"
- "\tasrs r1, 16\n"
- "\tsubs r1, r0\n"
- "\tldr r0, _080D8D00 @ =HailSpriteTemplate\n"
- "\tlsls r1, 16\n"
- "\tasrs r1, 16\n"
- "\tmovs r2, 0x8\n"
- "\tnegs r2, r2\n"
- "\tmovs r3, 0x12\n"
- "\tbl CreateSprite\n"
- "\tlsls r0, 24\n"
- "\tlsrs r5, r0, 24\n"
- "\tcmp r5, 0x40\n"
- "\tbeq _080D8D08\n"
- "\tlsls r4, r5, 4\n"
- "\tadds r4, r5\n"
- "\tlsls r4, 2\n"
- "\tldr r0, _080D8D04 @ =gSprites\n"
- "\tadds r4, r0\n"
- "\tadds r0, r4, 0\n"
- "\tmov r1, r9\n"
- "\tbl StartSpriteAffineAnim\n"
- "\tmov r0, sp\n"
- "\tldrh r0, [r0, 0x4]\n"
- "\tstrh r0, [r4, 0x2E]\n"
- "\tstrh r7, [r4, 0x34]\n"
- "\tstrh r6, [r4, 0x36]\n"
- "\tmov r1, r9\n"
- "\tstrh r1, [r4, 0x38]\n"
- "\tmov r0, sp\n"
- "\tldrh r0, [r0]\n"
- "\tstrh r0, [r4, 0x3A]\n"
- "\tmov r1, r10\n"
- "\tstrh r1, [r4, 0x3C]\n"
- "\tmovs r0, 0x1\n"
- "\tb _080D8D0A\n"
- "\t.align 2, 0\n"
- "_080D8D00: .4byte gHailSpriteTemplate\n"
- "_080D8D04: .4byte gSprites\n"
- "_080D8D08:\n"
- "\tmovs r0, 0\n"
- "_080D8D0A:\n"
- "\tadd sp, 0x8\n"
- "\tpop {r3-r5}\n"
- "\tmov r8, r3\n"
- "\tmov r9, r4\n"
- "\tmov r10, r5\n"
- "\tpop {r4-r7}\n"
- "\tpop {r1}\n"
- "\tbx r1");
}
-//*/
static void AnimHailBegin(struct Sprite *sprite)
{
diff --git a/src/battle/anim/psychic.c b/src/battle/anim/psychic.c
index 84a7741e1..c76e522f4 100644
--- a/src/battle/anim/psychic.c
+++ b/src/battle/anim/psychic.c
@@ -1042,17 +1042,14 @@ static void sub_80DC3F4(u8 taskId)
}
}
-#ifdef NONMATCHING
void sub_80DC4F4(u8 taskId)
{
s16 spriteId;
- u8 matrixNum;
- register u8 matrixNum2 asm("r6");
+ s16 matrixNum;
struct Task *task = &gTasks[taskId];
matrixNum = AllocOamMatrix();
- matrixNum2 = matrixNum;
- if (matrixNum2 == 0xFF)
+ if (matrixNum == 0xFF)
{
DestroyAnimVisualTask(taskId);
return;
@@ -1068,7 +1065,7 @@ void sub_80DC4F4(u8 taskId)
gSprites[spriteId].callback = SpriteCallbackDummy;
gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_DOUBLE;
- gSprites[spriteId].oam.matrixNum = matrixNum2;
+ gSprites[spriteId].oam.matrixNum = matrixNum;
gSprites[spriteId].affineAnimPaused = 1;
gSprites[spriteId].subpriority++;
obj_id_set_rotscale(spriteId, 256, 256, 0);
@@ -1079,132 +1076,6 @@ void sub_80DC4F4(u8 taskId)
task->data[15] = spriteId;
task->func = sub_80DC5F4;
}
-#else
-NAKED
-void sub_80DC4F4(u8 taskId)
-{
- 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\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
- mov r8, r4\n\
- lsls r0, r4, 2\n\
- adds r0, r4\n\
- lsls r0, 3\n\
- ldr r1, _080DC528 @ =gTasks\n\
- adds r7, r0, r1\n\
- bl AllocOamMatrix\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- mov r10, r5\n\
- adds r6, r5, 0\n\
- cmp r6, 0xFF\n\
- bne _080DC52C\n\
- adds r0, r4, 0\n\
- bl DestroyAnimVisualTask\n\
- b _080DC5D6\n\
- .align 2, 0\n\
-_080DC528: .4byte gTasks\n\
-_080DC52C:\n\
- ldr r1, _080DC550 @ =gBattleAnimArgs\n\
- ldrb r0, [r1]\n\
- bl duplicate_obj_of_side_rel2move_in_transparent_mode\n\
- lsls r0, 16\n\
- lsrs r1, r0, 16\n\
- mov r9, r1\n\
- asrs r0, 16\n\
- cmp r0, 0\n\
- bge _080DC554\n\
- adds r0, r5, 0\n\
- bl FreeOamMatrix\n\
- mov r0, r8\n\
- bl DestroyAnimVisualTask\n\
- b _080DC5D6\n\
- .align 2, 0\n\
-_080DC550: .4byte gBattleAnimArgs\n\
-_080DC554:\n\
- ldr r2, _080DC5E4 @ =gSprites\n\
- lsls r4, r0, 4\n\
- adds r4, r0\n\
- lsls r4, 2\n\
- adds r0, r2, 0\n\
- adds r0, 0x1C\n\
- adds r0, r4, r0\n\
- ldr r1, _080DC5E8 @ =SpriteCallbackDummy\n\
- str r1, [r0]\n\
- adds r4, r2\n\
- ldrb r0, [r4, 0x1]\n\
- movs r1, 0x3\n\
- orrs r0, r1\n\
- strb r0, [r4, 0x1]\n\
- movs r0, 0x1F\n\
- ands r6, r0\n\
- lsls r2, r6, 1\n\
- ldrb r1, [r4, 0x3]\n\
- movs r0, 0x3F\n\
- negs r0, r0\n\
- ands r0, r1\n\
- orrs r0, r2\n\
- strb r0, [r4, 0x3]\n\
- adds r2, r4, 0\n\
- adds r2, 0x2C\n\
- ldrb r0, [r2]\n\
- movs r1, 0x80\n\
- orrs r0, r1\n\
- strb r0, [r2]\n\
- adds r1, r4, 0\n\
- adds r1, 0x43\n\
- ldrb r0, [r1]\n\
- adds r0, 0x1\n\
- strb r0, [r1]\n\
- mov r1, r9\n\
- lsls r0, r1, 24\n\
- lsrs r0, 24\n\
- movs r2, 0x80\n\
- lsls r2, 1\n\
- adds r1, r2, 0\n\
- movs r3, 0\n\
- bl obj_id_set_rotscale\n\
- ldrb r3, [r4, 0x1]\n\
- lsrs r1, r3, 6\n\
- ldrb r2, [r4, 0x3]\n\
- lsrs r2, 6\n\
- lsls r3, 30\n\
- lsrs r3, 30\n\
- adds r0, r4, 0\n\
- bl CalcCenterToCornerVec\n\
- ldr r1, _080DC5EC @ =gBattleAnimArgs\n\
- ldrb r0, [r1]\n\
- bl GetAnimBattlerSpriteId\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- strh r0, [r7, 0x22]\n\
- mov r0, r10\n\
- strh r0, [r7, 0x24]\n\
- mov r1, r9\n\
- strh r1, [r7, 0x26]\n\
- ldr r0, _080DC5F0 @ =sub_80DC5F4\n\
- str r0, [r7]\n\
-_080DC5D6:\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\
-_080DC5E4: .4byte gSprites\n\
-_080DC5E8: .4byte SpriteCallbackDummy\n\
-_080DC5EC: .4byte gBattleAnimArgs\n\
-_080DC5F0: .4byte sub_80DC5F4\n\
- .syntax divided\n");
-}
-#endif // NONMATCHING
void sub_80DC5F4(u8 taskId)
{
diff --git a/src/battle/anim/water.c b/src/battle/anim/water.c
index 98e50f17f..135ed43cb 100644
--- a/src/battle/anim/water.c
+++ b/src/battle/anim/water.c
@@ -1,5 +1,7 @@
#include "global.h"
#include "battle.h"
+#include "decompress.h"
+#include "graphics.h"
#include "battle_anim.h"
#include "random.h"
#include "rom_8077ABC.h"
@@ -25,6 +27,7 @@ void sub_8078F40(u8);
void sub_8079A64(u8);
void sub_80D37FC(struct Sprite *sprite);
void sub_80D3838(struct Sprite *sprite);
+void sub_80D3B60(u8 taskId);
void sub_80D3D68(u8 taskId);
void sub_80D4044(struct Sprite *sprite);
void sub_80D40A8(struct Sprite *);
@@ -44,7 +47,7 @@ void sub_80D4BF0(struct Sprite *sprite);
void sub_80D4C18(struct Sprite *);
void sub_80D4CEC(struct Sprite *);
void sub_80D4C64(struct Sprite *sprite);
-void sub_80D4D64(struct Sprite*, int, int);
+void sub_80D4D64(struct Sprite*, s32, s32);
void sub_80E1864(u8);
static void sub_80D3874(struct Sprite *sprite);
@@ -260,329 +263,104 @@ static void sub_80D3874(struct Sprite *sprite)
}
}
-NAKED
void AnimTask_CreateSurfWave(u8 taskId)
{
- asm(".syntax unified\n\
- .equ REG_BLDCNT, 0x4000050\n\
- .equ REG_BG1CNT, 0x400000A\n\
- .equ REG_BG1HOFS, 0x4000014\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- sub sp, 0x14\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r10, r0\n\
- ldr r1, _080D398C @ =REG_BLDCNT\n\
- ldr r2, _080D3990 @ =0x00003f42\n\
- adds r0, r2, 0\n\
- strh r0, [r1]\n\
- adds r1, 0x2\n\
- movs r3, 0x80\n\
- lsls r3, 5\n\
- adds r0, r3, 0\n\
- strh r0, [r1]\n\
- ldr r2, _080D3994 @ =REG_BG1CNT\n\
- ldrb r1, [r2]\n\
- movs r0, 0x4\n\
- negs r0, r0\n\
- ands r0, r1\n\
- movs r1, 0x1\n\
- orrs r0, r1\n\
- strb r0, [r2]\n\
- ldrb r1, [r2, 0x1]\n\
- movs r0, 0x3F\n\
- ands r0, r1\n\
- movs r1, 0x40\n\
- orrs r0, r1\n\
- strb r0, [r2, 0x1]\n\
- mov r0, sp\n\
- bl sub_8078914\n\
- ldr r2, [sp]\n\
- movs r3, 0x80\n\
- lsls r3, 6\n\
- add r6, sp, 0x10\n\
- add r0, sp, 0xC\n\
- mov r12, r0\n\
- movs r5, 0\n\
- ldr r1, _080D3998 @ =0x040000d4\n\
- movs r4, 0x80\n\
- lsls r4, 5\n\
- mov r8, r6\n\
- ldr r7, _080D399C @ =0x85000400\n\
- movs r0, 0x85\n\
- lsls r0, 24\n\
- mov r9, r0\n\
-_080D3920:\n\
- str r5, [sp, 0x10]\n\
- mov r0, r8\n\
- str r0, [r1]\n\
- str r2, [r1, 0x4]\n\
- str r7, [r1, 0x8]\n\
- ldr r0, [r1, 0x8]\n\
- adds r2, r4\n\
- subs r3, r4\n\
- cmp r3, r4\n\
- bhi _080D3920\n\
- str r5, [sp, 0x10]\n\
- str r6, [r1]\n\
- str r2, [r1, 0x4]\n\
- lsrs r0, r3, 2\n\
- mov r2, r9\n\
- orrs r0, r2\n\
- str r0, [r1, 0x8]\n\
- ldr r0, [r1, 0x8]\n\
- movs r0, 0\n\
- mov r3, r12\n\
- strb r0, [r3]\n\
- strb r0, [r3]\n\
- ldr r1, [sp, 0x4]\n\
- movs r0, 0\n\
- str r0, [sp, 0x10]\n\
- ldr r0, _080D3998 @ =0x040000d4\n\
- str r6, [r0]\n\
- str r1, [r0, 0x4]\n\
- ldr r1, _080D399C @ =0x85000400\n\
- str r1, [r0, 0x8]\n\
- ldr r0, [r0, 0x8]\n\
- bl IsContest\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- bne _080D39B8\n\
- ldr r2, _080D3994 @ =REG_BG1CNT\n\
- ldrb r1, [r2]\n\
- movs r0, 0xD\n\
- negs r0, r0\n\
- ands r0, r1\n\
- movs r1, 0x4\n\
- orrs r0, r1\n\
- strb r0, [r2]\n\
- ldr r0, _080D39A0 @ =gBattleAnimAttacker\n\
- ldrb r0, [r0]\n\
- bl GetBattlerSide\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, 0x1\n\
- bne _080D39A8\n\
- ldr r0, _080D39A4 @ =gUnknown_08E70968\n\
- b _080D39AA\n\
- .align 2, 0\n\
-_080D398C: .4byte REG_BLDCNT\n\
-_080D3990: .4byte 0x00003f42\n\
-_080D3994: .4byte REG_BG1CNT\n\
-_080D3998: .4byte 0x040000d4\n\
-_080D399C: .4byte 0x85000400\n\
-_080D39A0: .4byte gBattleAnimAttacker\n\
-_080D39A4: .4byte gUnknown_08E70968\n\
-_080D39A8:\n\
- ldr r0, _080D39B4 @ =gUnknown_08E70C38\n\
-_080D39AA:\n\
- ldr r1, [sp, 0x4]\n\
- bl LZDecompressVram\n\
- b _080D39CE\n\
- .align 2, 0\n\
-_080D39B4: .4byte gUnknown_08E70C38\n\
-_080D39B8:\n\
- ldr r0, _080D39F0 @ =gUnknown_08E70F0C\n\
- ldr r1, [sp, 0x4]\n\
- bl LZDecompressVram\n\
- mov r0, sp\n\
- ldrb r0, [r0, 0x8]\n\
- ldr r1, [sp, 0x4]\n\
- movs r2, 0\n\
- movs r3, 0x1\n\
- bl sub_80763FC\n\
-_080D39CE:\n\
- ldr r0, _080D39F4 @ =gBattleAnimBackgroundImage_Surf\n\
- ldr r1, [sp]\n\
- bl LZDecompressVram\n\
- ldr r0, _080D39F8 @ =gBattleAnimArgs\n\
- movs r1, 0\n\
- ldrsh r0, [r0, r1]\n\
- cmp r0, 0\n\
- bne _080D3A00\n\
- ldr r0, _080D39FC @ =gBattleAnimBackgroundPalette_Surf\n\
- mov r1, sp\n\
- ldrb r1, [r1, 0x8]\n\
- lsls r1, 4\n\
- movs r2, 0x20\n\
- bl LoadCompressedPalette\n\
- b _080D3A0E\n\
- .align 2, 0\n\
-_080D39F0: .4byte gUnknown_08E70F0C\n\
-_080D39F4: .4byte gBattleAnimBackgroundImage_Surf\n\
-_080D39F8: .4byte gBattleAnimArgs\n\
-_080D39FC: .4byte gBattleAnimBackgroundPalette_Surf\n\
-_080D3A00:\n\
- ldr r0, _080D3A78 @ =gBattleAnimBackgroundImageMuddyWater_Pal\n\
- mov r1, sp\n\
- ldrb r1, [r1, 0x8]\n\
- lsls r1, 4\n\
- movs r2, 0x20\n\
- bl LoadCompressedPalette\n\
-_080D3A0E:\n\
- ldr r0, _080D3A7C @ =sub_80D3D68\n\
- ldr r4, _080D3A80 @ =gTasks\n\
- mov r2, r10\n\
- lsls r5, r2, 2\n\
- adds r1, r5, r2\n\
- lsls r1, 3\n\
- adds r6, r1, r4\n\
- ldrb r1, [r6, 0x7]\n\
- adds r1, 0x1\n\
- lsls r1, 24\n\
- lsrs r1, 24\n\
- bl CreateTask\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r8, r0\n\
- movs r3, 0\n\
- mov r9, r3\n\
- mov r0, r8\n\
- strh r0, [r6, 0x26]\n\
- mov r1, r8\n\
- lsls r0, r1, 2\n\
- add r0, r8\n\
- lsls r0, 3\n\
- adds r7, r0, r4\n\
- mov r2, r9\n\
- strh r2, [r7, 0x8]\n\
- movs r0, 0x80\n\
- lsls r0, 5\n\
- strh r0, [r7, 0xA]\n\
- strh r0, [r7, 0xC]\n\
- bl IsContest\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
- cmp r4, 0\n\
- beq _080D3A94\n\
- ldr r3, _080D3A84 @ =0x0000ffb0\n\
- adds r0, r3, 0\n\
- ldr r1, _080D3A88 @ =gBattle_BG1_X\n\
- strh r0, [r1]\n\
- ldr r2, _080D3A8C @ =0x0000ffd0\n\
- adds r0, r2, 0\n\
- ldr r3, _080D3A90 @ =gBattle_BG1_Y\n\
- strh r0, [r3]\n\
- movs r0, 0x2\n\
- strh r0, [r6, 0x8]\n\
- movs r0, 0x1\n\
- strh r0, [r6, 0xA]\n\
- mov r0, r9\n\
- strh r0, [r7, 0xE]\n\
- b _080D3AEE\n\
- .align 2, 0\n\
-_080D3A78: .4byte gBattleAnimBackgroundImageMuddyWater_Pal\n\
-_080D3A7C: .4byte sub_80D3D68\n\
-_080D3A80: .4byte gTasks\n\
-_080D3A84: .4byte 0x0000ffb0\n\
-_080D3A88: .4byte gBattle_BG1_X\n\
-_080D3A8C: .4byte 0x0000ffd0\n\
-_080D3A90: .4byte gBattle_BG1_Y\n\
-_080D3A94:\n\
- ldr r0, _080D3AC4 @ =gBattleAnimAttacker\n\
- ldrb r0, [r0]\n\
- bl GetBattlerSide\n\
- lsls r0, 24\n\
- lsrs r1, r0, 24\n\
- cmp r1, 0x1\n\
- bne _080D3AD8\n\
- ldr r2, _080D3AC8 @ =0x0000ff20\n\
- adds r0, r2, 0\n\
- ldr r3, _080D3ACC @ =gBattle_BG1_X\n\
- strh r0, [r3]\n\
- movs r2, 0x80\n\
- lsls r2, 1\n\
- adds r0, r2, 0\n\
- ldr r3, _080D3AD0 @ =gBattle_BG1_Y\n\
- strh r0, [r3]\n\
- movs r0, 0x2\n\
- strh r0, [r6, 0x8]\n\
- ldr r0, _080D3AD4 @ =0x0000ffff\n\
- strh r0, [r6, 0xA]\n\
- strh r1, [r7, 0xE]\n\
- b _080D3AEE\n\
- .align 2, 0\n\
-_080D3AC4: .4byte gBattleAnimAttacker\n\
-_080D3AC8: .4byte 0x0000ff20\n\
-_080D3ACC: .4byte gBattle_BG1_X\n\
-_080D3AD0: .4byte gBattle_BG1_Y\n\
-_080D3AD4: .4byte 0x0000ffff\n\
-_080D3AD8:\n\
- ldr r0, _080D3B1C @ =gBattle_BG1_X\n\
- strh r4, [r0]\n\
- ldr r1, _080D3B20 @ =0x0000ffd0\n\
- adds r0, r1, 0\n\
- ldr r2, _080D3B24 @ =gBattle_BG1_Y\n\
- strh r0, [r2]\n\
- ldr r0, _080D3B28 @ =0x0000fffe\n\
- strh r0, [r6, 0x8]\n\
- movs r0, 0x1\n\
- strh r0, [r6, 0xA]\n\
- strh r4, [r7, 0xE]\n\
-_080D3AEE:\n\
- ldr r1, _080D3B2C @ =REG_BG1HOFS\n\
- ldr r3, _080D3B1C @ =gBattle_BG1_X\n\
- ldrh r0, [r3]\n\
- strh r0, [r1]\n\
- adds r1, 0x2\n\
- ldr r2, _080D3B24 @ =gBattle_BG1_Y\n\
- ldrh r0, [r2]\n\
- strh r0, [r1]\n\
- ldr r1, _080D3B30 @ =gTasks\n\
- mov r3, r8\n\
- lsls r0, r3, 2\n\
- add r0, r8\n\
- lsls r0, 3\n\
- adds r2, r0, r1\n\
- movs r3, 0xE\n\
- ldrsh r0, [r2, r3]\n\
- cmp r0, 0\n\
- bne _080D3B34\n\
- movs r0, 0x30\n\
- strh r0, [r2, 0x10]\n\
- movs r0, 0x70\n\
- b _080D3B38\n\
- .align 2, 0\n\
-_080D3B1C: .4byte gBattle_BG1_X\n\
-_080D3B20: .4byte 0x0000ffd0\n\
-_080D3B24: .4byte gBattle_BG1_Y\n\
-_080D3B28: .4byte 0x0000fffe\n\
-_080D3B2C: .4byte REG_BG1HOFS\n\
-_080D3B30: .4byte gTasks\n\
-_080D3B34:\n\
- movs r0, 0\n\
- strh r0, [r2, 0x10]\n\
-_080D3B38:\n\
- strh r0, [r2, 0x12]\n\
- mov r2, r10\n\
- adds r0, r5, r2\n\
- lsls r0, 3\n\
- adds r0, r1\n\
- movs r1, 0x1\n\
- strh r1, [r0, 0x14]\n\
- ldr r1, _080D3B5C @ =sub_80D3B60\n\
- str r1, [r0]\n\
- add sp, 0x14\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\
-_080D3B5C: .4byte sub_80D3B60\n\
- .syntax divided\n");
+ struct Struct_sub_8078914 subStruct;
+ u8 taskId2;
+ u16 *BGptrX = &gBattle_BG1_X;
+ u16 *BGptrY = &gBattle_BG1_Y;
+ vu8 cpuDelay; // explanation below
+
+ REG_BLDCNT = BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL;
+ REG_BLDALPHA = 0x1000;
+ REG_BG1CNT_BITFIELD.priority = 1;
+ REG_BG1CNT_BITFIELD.screenSize = 1;
+ sub_8078914(&subStruct);
+
+ // This is gone in FireRed and Emerald.
+ Dma3FillLarge32_(0, subStruct.field_0, 0x2000); // !
+ /*
+ Many games use wasteful NOPs; some of which are
+ even moreso than regular ones. This is so that
+ hardware operations can finish.
+
+ This is just an example. Also, this is apparently
+ not a macro, as making it a macro results in a
+ NONMATCHING.
+ */
+ cpuDelay = 0; // stall the CPU
+ cpuDelay = 0; // stall the CPU
+ Dma3FillLarge32_(0, subStruct.field_4, 0x1000); // !
+
+ if (!IsContest())
+ {
+ REG_BG1CNT_BITFIELD.charBaseBlock = 1;
+ if (GetBattlerSide(gBattleAnimAttacker) == 1)
+ LZDecompressVram(&gUnknown_08E70968, subStruct.field_4);
+ else
+ LZDecompressVram(&gUnknown_08E70C38, subStruct.field_4);
+ }
+ else
+ {
+ LZDecompressVram(&gUnknown_08E70F0C, subStruct.field_4);
+ sub_80763FC(subStruct.field_8, (u16 *)subStruct.field_4, 0, 1);
+ }
+ LZDecompressVram(&gBattleAnimBackgroundImage_Surf, subStruct.field_0);
+ if (gBattleAnimArgs[0] == 0)
+ LoadCompressedPalette(&gBattleAnimBackgroundPalette_Surf, 16 * subStruct.field_8, 32);
+ else
+ LoadCompressedPalette(&gBattleAnimBackgroundImageMuddyWater_Pal, 16 * subStruct.field_8, 32);
+ taskId2 = CreateTask(sub_80D3D68, gTasks[taskId].priority + 1);
+ gTasks[taskId].data[15] = taskId2;
+ gTasks[taskId2].data[0] = 0;
+ gTasks[taskId2].data[1] = 0x1000;
+ gTasks[taskId2].data[2] = 0x1000;
+ if (IsContest())
+ {
+ *BGptrX = -80;
+ *BGptrY = -48;
+ gTasks[taskId].data[0] = 2;
+ gTasks[taskId].data[1] = 1;
+ gTasks[taskId2].data[3] = 0;
+ }
+ else if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
+ {
+ *BGptrX = -224;
+ *BGptrY = 256;
+ gTasks[taskId].data[0] = 2;
+ gTasks[taskId].data[1] = -1;
+ gTasks[taskId2].data[3] = 1;
+ }
+ else
+ {
+ *BGptrX = 0;
+ *BGptrY = -48;
+ gTasks[taskId].data[0] = -2;
+ gTasks[taskId].data[1] = 1;
+ gTasks[taskId2].data[3] = 0;
+ }
+ REG_BG1HOFS = *BGptrX;
+ REG_BG1VOFS = *BGptrY;
+ if(gTasks[taskId2].data[3] == 0)
+ {
+ gTasks[taskId2].data[4] = 48;
+ gTasks[taskId2].data[5] = 112;
+ }
+ else
+ {
+ gTasks[taskId2].data[4] = 0;
+ gTasks[taskId2].data[5] = 0;
+ }
+ gTasks[taskId].data[6] = 1;
+ gTasks[taskId].func = sub_80D3B60;
}
#ifdef NONMATCHING
void sub_80D3B60(u8 taskId)
{
struct Struct_sub_8078914 unk;
+
+ vu8 cpuDelay; // yet again
u8 i;
u16 rgbBuffer;
u16 *BGptrX = &gBattle_BG1_X;
@@ -609,6 +387,7 @@ void sub_80D3B60(u8 taskId)
}
if (++gTasks[taskId].data[6] > 1)
{
+ // there is some weird math going on here
gTasks[taskId].data[6] = 0;
unkUse = ++gTasks[taskId].data[3];
if (unkUse <= 13)
@@ -624,8 +403,20 @@ void sub_80D3B60(u8 taskId)
}
if (!(gTasks[gTasks[taskId].data[15]].data[1] & 0x1F))
{
- gTasks[taskId].data[0] = gTasks[gTasks[taskId].data[15]].data[1] & 0x1F;
- gTasks[taskId].func = sub_80D3D68;
+ Dma3FillLarge32_(0, unk.field_0, 0x2000); // !
+ cpuDelay = 0; // stall the CPU
+ cpuDelay = 0; // stall the CPU
+ Dma3FillLarge32_(0, unk.field_4, 0x1000); // !
+ if (!IsContest)
+ REG_BG1CNT_BITFIELD.charBaseBlock = 1;
+ *BGptrX = 0;
+ *BGptrY = 0;
+
+ REG_BLDCNT = 0;
+ REG_BLDALPHA = 0;
+
+ gTasks[gTasks[taskId].data[15]].data[15] = 0xffff;
+ DestroyAnimVisualTask(taskId);
}
}
#else
@@ -882,44 +673,35 @@ _080D3D32:\n\
}
#endif
-#ifdef NONMATCHING
void sub_80D3D68(u8 taskId)
{
s16 i;
struct ScanlineEffectParams params;
struct Task *task = &gTasks[taskId];
- // u16 *scanlineBuffer;
switch (task->data[0])
{
case 0:
for (i = 0; i < task->data[4]; i++)
{
- /* scanlineBuffer = &gScanlineEffectRegBuffers[0][i];
- *(u16 *)(&gScanlineEffect) = task->data[2];
- *scanlineBuffer = task->data[2] & -1; */
- gScanlineEffectRegBuffers[1][i] = task->data[2];
- gScanlineEffectRegBuffers[0][i] = (u16)((int)(task->data[2] & 0xFFFF));
+ /* variable initialization isn't literal to ASM */
+ gScanlineEffectRegBuffers[0][i] = gScanlineEffectRegBuffers[1][i] = task->data[2];
}
for (i = task->data[4]; i < task->data[5]; i++)
{
- gScanlineEffectRegBuffers[1][i] = task->data[1];
- gScanlineEffectRegBuffers[0][i] = (u16)((int)(task->data[1] & 0xFFFF));
+ gScanlineEffectRegBuffers[0][i] = gScanlineEffectRegBuffers[1][i] = task->data[1];
}
for (i = task->data[5]; i < 160; i++)
{
- gScanlineEffectRegBuffers[1][i] = task->data[2];
- gScanlineEffectRegBuffers[0][i] = (u16)((int)(task->data[2] & 0xFFFF));
+ gScanlineEffectRegBuffers[0][i] = gScanlineEffectRegBuffers[1][i] = task->data[2];
}
if (task->data[4] == 0)
{
- gScanlineEffectRegBuffers[1][i] = task->data[1];
- gScanlineEffectRegBuffers[0][i] = task->data[1];
+ gScanlineEffectRegBuffers[0][i] = gScanlineEffectRegBuffers[1][i] = task->data[1];
}
else
{
- gScanlineEffectRegBuffers[1][i] = task->data[2];
- gScanlineEffectRegBuffers[0][i] = task->data[2];
+ gScanlineEffectRegBuffers[0][i] = gScanlineEffectRegBuffers[1][i] = task->data[2];
}
params.dmaDest = (vu16 *)REG_ADDR_BLDALPHA;
params.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT;
@@ -975,391 +757,6 @@ void sub_80D3D68(u8 taskId)
break;
}
}
-#else
-NAKED
-void sub_80D3D68(u8 taskId)
-{
- asm_unified("push {r4-r7,lr}\n\
- sub sp, 0xC\n\
- lsls r0, 24\n\
- lsrs r7, r0, 24\n\
- lsls r0, r7, 2\n\
- adds r0, r7\n\
- lsls r0, 3\n\
- ldr r1, =gTasks\n\
- adds r4, r0, r1\n\
- movs r1, 0x8\n\
- ldrsh r0, [r4, r1]\n\
- cmp r0, 0x1\n\
- bne _080D3D84\n\
- b _080D3EBC\n\
-_080D3D84:\n\
- cmp r0, 0x1\n\
- bgt _080D3D94\n\
- cmp r0, 0\n\
- beq _080D3D9C\n\
- b _080D4032\n\
- .align 2, 0\n\
- .pool\n\
-_080D3D94:\n\
- cmp r0, 0x2\n\
- bne _080D3D9A\n\
- b _080D3F88\n\
-_080D3D9A:\n\
- b _080D4032\n\
-_080D3D9C:\n\
- movs r3, 0\n\
- movs r2, 0x10\n\
- ldrsh r0, [r4, r2]\n\
- ldr r1, =gScanlineEffectRegBuffers\n\
- mov r12, r1\n\
- cmp r3, r0\n\
- bge _080D3DDA\n\
- mov r7, r12\n\
- movs r5, 0xF0\n\
- lsls r5, 3\n\
- add r5, r12\n\
- ldr r6, =0x0000ffff\n\
-_080D3DB4:\n\
- lsls r2, r3, 16\n\
- asrs r2, 16\n\
- lsls r1, r2, 1\n\
- adds r3, r1, r7\n\
- adds r1, r5\n\
- ldrh r0, [r4, 0xC]\n\
- strh r0, [r1]\n\
- ldrh r1, [r4, 0xC]\n\
- adds r0, r6, 0\n\
- ands r0, r1\n\
- strh r0, [r3]\n\
- adds r2, 0x1\n\
- lsls r2, 16\n\
- lsrs r3, r2, 16\n\
- asrs r2, 16\n\
- movs r1, 0x10\n\
- ldrsh r0, [r4, r1]\n\
- cmp r2, r0\n\
- blt _080D3DB4\n\
-_080D3DDA:\n\
- ldrh r3, [r4, 0x10]\n\
- lsls r2, r3, 16\n\
- asrs r1, r2, 16\n\
- movs r3, 0x12\n\
- ldrsh r0, [r4, r3]\n\
- cmp r1, r0\n\
- bge _080D3E14\n\
- ldr r5, =gScanlineEffectRegBuffers\n\
- movs r0, 0xF0\n\
- lsls r0, 3\n\
- adds r6, r5, r0\n\
- ldr r7, =0x0000ffff\n\
-_080D3DF2:\n\
- asrs r2, 16\n\
- lsls r1, r2, 1\n\
- adds r3, r1, r5\n\
- adds r1, r6\n\
- ldrh r0, [r4, 0xA]\n\
- strh r0, [r1]\n\
- ldrh r1, [r4, 0xA]\n\
- adds r0, r7, 0\n\
- ands r0, r1\n\
- strh r0, [r3]\n\
- adds r2, 0x1\n\
- lsls r2, 16\n\
- asrs r1, r2, 16\n\
- movs r3, 0x12\n\
- ldrsh r0, [r4, r3]\n\
- cmp r1, r0\n\
- blt _080D3DF2\n\
-_080D3E14:\n\
- ldrh r3, [r4, 0x12]\n\
- lsls r2, r3, 16\n\
- asrs r0, r2, 16\n\
- cmp r0, 0x9F\n\
- bgt _080D3E4A\n\
- ldr r5, =gScanlineEffectRegBuffers\n\
- movs r0, 0xF0\n\
- lsls r0, 3\n\
- adds r6, r5, r0\n\
- ldr r7, =0x0000ffff\n\
-_080D3E28:\n\
- asrs r2, 16\n\
- lsls r1, r2, 1\n\
- adds r3, r1, r5\n\
- adds r1, r6\n\
- ldrh r0, [r4, 0xC]\n\
- strh r0, [r1]\n\
- ldrh r1, [r4, 0xC]\n\
- adds r0, r7, 0\n\
- ands r0, r1\n\
- strh r0, [r3]\n\
- adds r2, 0x1\n\
- lsls r2, 16\n\
- lsrs r3, r2, 16\n\
- lsls r2, r3, 16\n\
- asrs r0, r2, 16\n\
- cmp r0, 0x9F\n\
- ble _080D3E28\n\
-_080D3E4A:\n\
- movs r1, 0x10\n\
- ldrsh r0, [r4, r1]\n\
- cmp r0, 0\n\
- bne _080D3E74\n\
- lsls r0, r3, 16\n\
- asrs r0, 15\n\
- mov r3, r12\n\
- adds r2, r0, r3\n\
- movs r1, 0xF0\n\
- lsls r1, 3\n\
- add r1, r12\n\
- adds r0, r1\n\
- ldrh r1, [r4, 0xA]\n\
- strh r1, [r0]\n\
- ldrh r0, [r4, 0xA]\n\
- b _080D3E8A\n\
- .align 2, 0\n\
- .pool\n\
-_080D3E74:\n\
- lsls r0, r3, 16\n\
- asrs r0, 15\n\
- mov r1, r12\n\
- adds r2, r0, r1\n\
- movs r1, 0xF0\n\
- lsls r1, 3\n\
- add r1, r12\n\
- adds r0, r1\n\
- ldrh r1, [r4, 0xC]\n\
- strh r1, [r0]\n\
- ldrh r0, [r4, 0xC]\n\
-_080D3E8A:\n\
- strh r0, [r2]\n\
- ldr r0, =0x04000052\n\
- str r0, [sp]\n\
- ldr r0, =0xa2600001\n\
- str r0, [sp, 0x4]\n\
- mov r1, sp\n\
- movs r2, 0\n\
- movs r0, 0x1\n\
- strb r0, [r1, 0x8]\n\
- mov r0, sp\n\
- strb r2, [r0, 0x9]\n\
- ldr r0, [sp]\n\
- ldr r1, [sp, 0x4]\n\
- ldr r2, [sp, 0x8]\n\
- bl ScanlineEffect_SetParams\n\
- ldrh r0, [r4, 0x8]\n\
- adds r0, 0x1\n\
- strh r0, [r4, 0x8]\n\
- b _080D4032\n\
- .align 2, 0\n\
- .pool\n\
-_080D3EBC:\n\
- movs r2, 0xE\n\
- ldrsh r1, [r4, r2]\n\
- cmp r1, 0\n\
- bne _080D3ED4\n\
- ldrh r0, [r4, 0x10]\n\
- subs r0, 0x1\n\
- strh r0, [r4, 0x10]\n\
- lsls r0, 16\n\
- cmp r0, 0\n\
- bgt _080D3EE8\n\
- strh r1, [r4, 0x10]\n\
- b _080D3EE2\n\
-_080D3ED4:\n\
- ldrh r0, [r4, 0x12]\n\
- adds r0, 0x1\n\
- strh r0, [r4, 0x12]\n\
- lsls r0, 16\n\
- asrs r0, 16\n\
- cmp r0, 0x6F\n\
- ble _080D3EE8\n\
-_080D3EE2:\n\
- ldrh r0, [r4, 0x8]\n\
- adds r0, 0x1\n\
- strh r0, [r4, 0x8]\n\
-_080D3EE8:\n\
- movs r3, 0\n\
- movs r1, 0x10\n\
- ldrsh r0, [r4, r1]\n\
- cmp r3, r0\n\
- bge _080D3F1C\n\
- ldr r6, =gScanlineEffectRegBuffers\n\
- ldr r5, =gScanlineEffect\n\
-_080D3EF6:\n\
- lsls r1, r3, 16\n\
- asrs r1, 16\n\
- lsls r3, r1, 1\n\
- ldrb r2, [r5, 0x14]\n\
- lsls r0, r2, 4\n\
- subs r0, r2\n\
- lsls r0, 7\n\
- adds r3, r0\n\
- adds r3, r6\n\
- ldrh r0, [r4, 0xC]\n\
- strh r0, [r3]\n\
- adds r1, 0x1\n\
- lsls r1, 16\n\
- lsrs r3, r1, 16\n\
- asrs r1, 16\n\
- movs r2, 0x10\n\
- ldrsh r0, [r4, r2]\n\
- cmp r1, r0\n\
- blt _080D3EF6\n\
-_080D3F1C:\n\
- ldrh r3, [r4, 0x10]\n\
- lsls r2, r3, 16\n\
- asrs r1, r2, 16\n\
- movs r3, 0x12\n\
- ldrsh r0, [r4, r3]\n\
- cmp r1, r0\n\
- bge _080D3F50\n\
- ldr r6, =gScanlineEffectRegBuffers\n\
- ldr r5, =gScanlineEffect\n\
-_080D3F2E:\n\
- asrs r3, r2, 16\n\
- lsls r2, r3, 1\n\
- ldrb r1, [r5, 0x14]\n\
- lsls r0, r1, 4\n\
- subs r0, r1\n\
- lsls r0, 7\n\
- adds r2, r0\n\
- adds r2, r6\n\
- ldrh r0, [r4, 0xA]\n\
- strh r0, [r2]\n\
- adds r3, 0x1\n\
- lsls r2, r3, 16\n\
- asrs r1, r2, 16\n\
- movs r3, 0x12\n\
- ldrsh r0, [r4, r3]\n\
- cmp r1, r0\n\
- blt _080D3F2E\n\
-_080D3F50:\n\
- ldrh r3, [r4, 0x12]\n\
- lsls r1, r3, 16\n\
- asrs r0, r1, 16\n\
- cmp r0, 0x9F\n\
- bgt _080D4032\n\
- ldr r6, =gScanlineEffectRegBuffers\n\
- ldr r5, =gScanlineEffect\n\
-_080D3F5E:\n\
- asrs r3, r1, 16\n\
- lsls r2, r3, 1\n\
- ldrb r1, [r5, 0x14]\n\
- lsls r0, r1, 4\n\
- subs r0, r1\n\
- lsls r0, 7\n\
- adds r2, r0\n\
- adds r2, r6\n\
- ldrh r0, [r4, 0xC]\n\
- strh r0, [r2]\n\
- adds r3, 0x1\n\
- lsls r1, r3, 16\n\
- asrs r0, r1, 16\n\
- cmp r0, 0x9F\n\
- ble _080D3F5E\n\
- b _080D4032\n\
- .align 2, 0\n\
- .pool\n\
-_080D3F88:\n\
- movs r3, 0\n\
- movs r1, 0x10\n\
- ldrsh r0, [r4, r1]\n\
- cmp r3, r0\n\
- bge _080D3FBC\n\
- ldr r6, =gScanlineEffectRegBuffers\n\
- ldr r5, =gScanlineEffect\n\
-_080D3F96:\n\
- lsls r1, r3, 16\n\
- asrs r1, 16\n\
- lsls r3, r1, 1\n\
- ldrb r2, [r5, 0x14]\n\
- lsls r0, r2, 4\n\
- subs r0, r2\n\
- lsls r0, 7\n\
- adds r3, r0\n\
- adds r3, r6\n\
- ldrh r0, [r4, 0xC]\n\
- strh r0, [r3]\n\
- adds r1, 0x1\n\
- lsls r1, 16\n\
- lsrs r3, r1, 16\n\
- asrs r1, 16\n\
- movs r2, 0x10\n\
- ldrsh r0, [r4, r2]\n\
- cmp r1, r0\n\
- blt _080D3F96\n\
-_080D3FBC:\n\
- ldrh r3, [r4, 0x10]\n\
- lsls r2, r3, 16\n\
- asrs r1, r2, 16\n\
- movs r3, 0x12\n\
- ldrsh r0, [r4, r3]\n\
- cmp r1, r0\n\
- bge _080D3FF0\n\
- ldr r6, =gScanlineEffectRegBuffers\n\
- ldr r5, =gScanlineEffect\n\
-_080D3FCE:\n\
- asrs r3, r2, 16\n\
- lsls r2, r3, 1\n\
- ldrb r1, [r5, 0x14]\n\
- lsls r0, r1, 4\n\
- subs r0, r1\n\
- lsls r0, 7\n\
- adds r2, r0\n\
- adds r2, r6\n\
- ldrh r0, [r4, 0xA]\n\
- strh r0, [r2]\n\
- adds r3, 0x1\n\
- lsls r2, r3, 16\n\
- asrs r1, r2, 16\n\
- movs r3, 0x12\n\
- ldrsh r0, [r4, r3]\n\
- cmp r1, r0\n\
- blt _080D3FCE\n\
-_080D3FF0:\n\
- ldrh r3, [r4, 0x12]\n\
- lsls r1, r3, 16\n\
- asrs r0, r1, 16\n\
- cmp r0, 0x9F\n\
- bgt _080D401C\n\
- ldr r6, =gScanlineEffectRegBuffers\n\
- ldr r5, =gScanlineEffect\n\
-_080D3FFE:\n\
- asrs r3, r1, 16\n\
- lsls r2, r3, 1\n\
- ldrb r1, [r5, 0x14]\n\
- lsls r0, r1, 4\n\
- subs r0, r1\n\
- lsls r0, 7\n\
- adds r2, r0\n\
- adds r2, r6\n\
- ldrh r0, [r4, 0xC]\n\
- strh r0, [r2]\n\
- adds r3, 0x1\n\
- lsls r1, r3, 16\n\
- asrs r0, r1, 16\n\
- cmp r0, 0x9F\n\
- ble _080D3FFE\n\
-_080D401C:\n\
- movs r0, 0x26\n\
- ldrsh r1, [r4, r0]\n\
- movs r0, 0x1\n\
- negs r0, r0\n\
- cmp r1, r0\n\
- bne _080D4032\n\
- bl ScanlineEffect_Stop\n\
- adds r0, r7, 0\n\
- bl DestroyTask\n\
-_080D4032:\n\
- add sp, 0xC\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
- .pool\n");
-}
-#endif
void sub_80D4044(struct Sprite *sprite)
{
@@ -1892,17 +1289,32 @@ void sub_80D4CEC(struct Sprite *sprite)
sprite->data[0]++;
}
-#ifdef NONMATCHING
-void sub_80D4D64(struct Sprite *sprite, int xDiff, int yDiff)
+void sub_80D4D64(struct Sprite *sprite, s32 xDiff, s32 yDiff)
{
- s16 something = sprite->data[0] / 2;
- s16 combinedX = sprite->pos1.x + sprite->pos2.x;
- s16 combinedY = sprite->pos1.y + sprite->pos2.y;
- s16 randomSomethingY = yDiff + (Random() % 10) - 5;
- s16 randomSomethingX = -xDiff + (Random() % 10) - 5;
s16 i;
u8 spriteId;
+ s16 combinedX;
+ s16 combinedY;
+ s16 something;
+ s16 randomSomethingX;
+ s16 randomSomethingY;
+
+ something = sprite->data[0] / 2;
+ // regalloc acts strange here...
+ combinedX = sprite->pos1.x + sprite->pos2.x;
+ combinedY = sprite->pos1.y + sprite->pos2.y;
+
+ // ...then goes back to normal right here.
+ // Nothing but this appears to reproduce the behavior.
+ if (xDiff) // yDiff works too, but not sprite.
+ {
+ u8 unk = -unk; // this can be any sort of negation
+ }
+
+ randomSomethingY = yDiff + (Random() % 10) - 5;
+ randomSomethingX = -xDiff + (Random() % 10) - 5;
+
for (i = 0; i <= 0; i++)
{
spriteId = CreateSprite(&gSpriteTemplate_83D9420, combinedX, combinedY + something, 130);
@@ -1926,184 +1338,3 @@ void sub_80D4D64(struct Sprite *sprite, int xDiff, int yDiff)
gSprites[spriteId].data[2] = randomSomethingX;
}
}
-#else
-NAKED
-void sub_80D4D64(struct Sprite *sprite, int xDiff, int yDiff)
-{
- 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, 0x18\n\
- adds r4, r1, 0\n\
- adds r5, r2, 0\n\
- movs r2, 0x2E\n\
- ldrsh r1, [r0, r2]\n\
- lsrs r2, r1, 31\n\
- adds r1, r2\n\
- lsls r1, 15\n\
- lsrs r1, 16\n\
- str r1, [sp]\n\
- ldrh r1, [r0, 0x24]\n\
- ldrh r3, [r0, 0x20]\n\
- adds r1, r3\n\
- lsls r1, 16\n\
- lsrs r1, 16\n\
- mov r8, r1\n\
- ldrh r1, [r0, 0x26]\n\
- ldrh r0, [r0, 0x22]\n\
- adds r1, r0\n\
- lsls r1, 16\n\
- lsrs r1, 16\n\
- mov r10, r1\n\
- bl Random\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- movs r1, 0xA\n\
- bl __umodsi3\n\
- adds r0, r5, r0\n\
- subs r0, 0x5\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- mov r9, r0\n\
- bl Random\n\
- negs r4, r4\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- movs r1, 0xA\n\
- bl __umodsi3\n\
- adds r4, r0\n\
- subs r4, 0x5\n\
- lsls r4, 16\n\
- lsrs r7, r4, 16\n\
- movs r6, 0\n\
- mov r0, r8\n\
- lsls r0, 16\n\
- mov r8, r0\n\
- mov r1, r10\n\
- lsls r1, 16\n\
- str r1, [sp, 0xC]\n\
- ldr r2, [sp]\n\
- lsls r2, 16\n\
- str r2, [sp, 0x10]\n\
- asrs r1, 16\n\
- lsls r0, r7, 16\n\
- asrs r5, r0, 16\n\
- str r0, [sp, 0x14]\n\
- negs r3, r5\n\
- str r3, [sp, 0x4]\n\
- asrs r0, r2, 16\n\
- adds r1, r0\n\
- lsls r1, 16\n\
- mov r10, r1\n\
-_080D4DF2:\n\
- ldr r0, =gSpriteTemplate_83D9420\n\
- mov r2, r8\n\
- asrs r1, r2, 16\n\
- mov r3, r10\n\
- asrs r2, r3, 16\n\
- movs r3, 0x82\n\
- bl CreateSprite\n\
- lsls r0, 24\n\
- lsrs r2, r0, 24\n\
- ldr r1, =gSprites\n\
- lsls r0, r2, 4\n\
- adds r0, r2\n\
- lsls r0, 2\n\
- adds r4, r0, r1\n\
- movs r0, 0x14\n\
- strh r0, [r4, 0x2E]\n\
- mov r0, r9\n\
- strh r0, [r4, 0x30]\n\
- ldr r0, =gBattleAnimAttacker\n\
- ldrb r0, [r0]\n\
- bl GetBattlerSubpriority\n\
- subs r0, 0x1\n\
- adds r1, r4, 0\n\
- adds r1, 0x43\n\
- strb r0, [r1]\n\
- cmp r5, 0\n\
- bge _080D4E40\n\
- mov r1, sp\n\
- ldrh r1, [r1, 0x4]\n\
- strh r1, [r4, 0x32]\n\
- b _080D4E42\n\
- .align 2, 0\n\
- .pool\n\
-_080D4E40:\n\
- strh r7, [r4, 0x32]\n\
-_080D4E42:\n\
- lsls r0, r6, 16\n\
- movs r2, 0x80\n\
- lsls r2, 9\n\
- adds r0, r2\n\
- lsrs r6, r0, 16\n\
- cmp r0, 0\n\
- ble _080D4DF2\n\
- movs r6, 0\n\
- ldr r3, [sp, 0xC]\n\
- asrs r1, r3, 16\n\
- ldr r0, [sp, 0x14]\n\
- asrs r5, r0, 16\n\
- negs r2, r5\n\
- str r2, [sp, 0x8]\n\
- ldr r3, [sp, 0x10]\n\
- asrs r0, r3, 16\n\
- subs r1, r0\n\
- lsls r1, 16\n\
- mov r10, r1\n\
-_080D4E68:\n\
- ldr r0, =gSpriteTemplate_83D9420\n\
- mov r2, r8\n\
- asrs r1, r2, 16\n\
- mov r3, r10\n\
- asrs r2, r3, 16\n\
- movs r3, 0x82\n\
- bl CreateSprite\n\
- lsls r0, 24\n\
- lsrs r2, r0, 24\n\
- ldr r1, =gSprites\n\
- lsls r0, r2, 4\n\
- adds r0, r2\n\
- lsls r0, 2\n\
- adds r4, r0, r1\n\
- movs r0, 0x14\n\
- strh r0, [r4, 0x2E]\n\
- mov r0, r9\n\
- strh r0, [r4, 0x30]\n\
- ldr r0, =gBattleAnimAttacker\n\
- ldrb r0, [r0]\n\
- bl GetBattlerSubpriority\n\
- subs r0, 0x1\n\
- adds r1, r4, 0\n\
- adds r1, 0x43\n\
- strb r0, [r1]\n\
- cmp r5, 0\n\
- ble _080D4EB8\n\
- mov r1, sp\n\
- ldrh r1, [r1, 0x8]\n\
- strh r1, [r4, 0x32]\n\
- b _080D4EBA\n\
- .align 2, 0\n\
- .pool\n\
-_080D4EB8:\n\
- strh r7, [r4, 0x32]\n\
-_080D4EBA:\n\
- lsls r0, r6, 16\n\
- movs r2, 0x80\n\
- lsls r2, 9\n\
- adds r0, r2\n\
- lsrs r6, r0, 16\n\
- cmp r0, 0\n\
- ble _080D4E68\n\
- add sp, 0x18\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");
-}
-#endif
diff --git a/src/battle_ai_script_commands.c b/src/battle_ai_script_commands.c
index 405776db6..956cc2f6e 100644
--- a/src/battle_ai_script_commands.c
+++ b/src/battle_ai_script_commands.c
@@ -246,10 +246,7 @@ static const BattleAICmdFunc sBattleAICmdTable[] =
BattleAICmd_if_not_taunted, // 0x5D
};
-#ifdef NONMATCHING
-static
-#endif
-const u16 sDiscouragedPowerfulMoveEffects[] =
+static const u16 sDiscouragedPowerfulMoveEffects[] =
{
EFFECT_EXPLOSION,
EFFECT_DREAM_EATER,
@@ -337,7 +334,7 @@ void BattleAI_SetupAIData(void)
AI_THINKING_STRUCT->aiFlags = 0x20000000;
else if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE)
AI_THINKING_STRUCT->aiFlags = 0x80000000;
-#ifdef GERMAN
+#if GERMAN || (ENGLISH && DEBUG && REVISION == 0)
else if (gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER) || gTrainerBattleOpponent == SECRET_BASE_OPPONENT)
AI_THINKING_STRUCT->aiFlags = 7;
#endif
@@ -945,18 +942,19 @@ static void BattleAICmd_get_move_power(void)
gAIScriptPtr += 1;
}
-#ifdef NONMATCHING
static void BattleAICmd_is_most_powerful_move(void)
{
- int i, j;
- s32 damages[MAX_MON_MOVES];
+ s32 i, checkedMove;
+ s32 moveDmgs[MAX_MON_MOVES];
for (i = 0; sDiscouragedPowerfulMoveEffects[i] != 0xFFFF; i++)
+ {
if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].effect == sDiscouragedPowerfulMoveEffects[i])
break;
+ }
if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].power > 1
- && sDiscouragedPowerfulMoveEffects[i] == 0xFFFF)
+ && sDiscouragedPowerfulMoveEffects[i] == 0xFFFF)
{
gDynamicBasePower = 0;
eDynamicMoveType = 0;
@@ -964,294 +962,49 @@ static void BattleAICmd_is_most_powerful_move(void)
gMoveResultFlags = 0;
gCritMultiplier = 1;
- for (i = 0; i < MAX_MON_MOVES; i++)
+ for (checkedMove = 0; checkedMove < MAX_MON_MOVES; checkedMove++)
{
- for (j = 0; sDiscouragedPowerfulMoveEffects[j] != 0xFFFF; j++)
- { // _08108276
- if (gBattleMoves[gBattleMons[gBattlerAttacker].moves[i]].effect == sDiscouragedPowerfulMoveEffects[j])
+ for (i = 0; sDiscouragedPowerfulMoveEffects[i] != 0xFFFF; i++)
+ {
+ if (gBattleMoves[gBattleMons[gBattlerAttacker].moves[checkedMove]].effect == sDiscouragedPowerfulMoveEffects[i])
break;
}
- // _081082BA
- if (gBattleMons[gBattlerAttacker].moves[i]
- && sDiscouragedPowerfulMoveEffects[j] == 0xFFFF
- && gBattleMoves[gBattleMons[gBattlerAttacker].moves[i]].power > 1)
+ if (gBattleMons[gBattlerAttacker].moves[checkedMove] != MOVE_NONE
+ && sDiscouragedPowerfulMoveEffects[i] == 0xFFFF
+ && gBattleMoves[gBattleMons[gBattlerAttacker].moves[checkedMove]].power > 1)
{
- gCurrentMove = gBattleMons[gBattlerAttacker].moves[i];
+ gCurrentMove = gBattleMons[gBattlerAttacker].moves[checkedMove];
AI_CalcDmg(gBattlerAttacker, gBattlerTarget);
TypeCalc(gCurrentMove, gBattlerAttacker, gBattlerTarget);
- damages[i] = (gBattleMoveDamage * AI_THINKING_STRUCT->simulatedRNG[i]) / 100;
-
- if (damages[i] == 0) // moves always do at least 1 damage.
- damages[i] = 1;
+ moveDmgs[checkedMove] = gBattleMoveDamage * AI_THINKING_STRUCT->simulatedRNG[checkedMove] / 100;
+ if (moveDmgs[checkedMove] == 0)
+ moveDmgs[checkedMove] = 1;
}
else
{
- damages[i] = 0;
+ moveDmgs[checkedMove] = 0;
}
}
- for (i = 0; i < MAX_MON_MOVES; i++)
- if (damages[i] > damages[AI_THINKING_STRUCT->movesetIndex])
+ for (checkedMove = 0; checkedMove < MAX_MON_MOVES; checkedMove++)
+ {
+ if (moveDmgs[checkedMove] > moveDmgs[AI_THINKING_STRUCT->movesetIndex])
break;
+ }
- if (i == MAX_MON_MOVES)
- AI_THINKING_STRUCT->funcResult = 2;
+ if (checkedMove == MAX_MON_MOVES)
+ AI_THINKING_STRUCT->funcResult = 2; // Is the most powerful.
else
- AI_THINKING_STRUCT->funcResult = 1;
+ AI_THINKING_STRUCT->funcResult = 1; // Not the most powerful.
}
else
{
- AI_THINKING_STRUCT->funcResult = 0;
+ AI_THINKING_STRUCT->funcResult = 0; // Highly discouraged in terms of power.
}
- gAIScriptPtr += 1;
+ gAIScriptPtr++;
}
-#else
-NAKED
-static void BattleAICmd_is_most_powerful_move(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, 0x14\n\
- movs r3, 0\n\
- ldr r0, _08108328 @ =sDiscouragedPowerfulMoveEffects\n\
- ldrh r1, [r0]\n\
- ldr r4, _0810832C @ =0x0000ffff\n\
- ldr r6, _08108330 @ =gBattleMoves\n\
- ldr r5, _08108334 @ =gSharedMem + 0x16800\n\
- cmp r1, r4\n\
- beq _0810822E\n\
- ldrh r1, [r5, 0x2]\n\
- lsls r0, r1, 1\n\
- adds r0, r1\n\
- lsls r0, 2\n\
- adds r0, r6\n\
- ldrb r2, [r0]\n\
- ldr r1, _08108328 @ =sDiscouragedPowerfulMoveEffects\n\
-_0810821E:\n\
- ldrh r0, [r1]\n\
- cmp r2, r0\n\
- beq _0810822E\n\
- adds r1, 0x2\n\
- adds r3, 0x1\n\
- ldrh r0, [r1]\n\
- cmp r0, r4\n\
- bne _0810821E\n\
-_0810822E:\n\
- ldrh r0, [r5, 0x2]\n\
- lsls r1, r0, 1\n\
- adds r1, r0\n\
- lsls r1, 2\n\
- adds r1, r6\n\
- ldrb r0, [r1, 0x1]\n\
- cmp r0, 0x1\n\
- bhi _08108240\n\
- b _081083B2\n\
-_08108240:\n\
- lsls r0, r3, 1\n\
- ldr r1, _08108328 @ =sDiscouragedPowerfulMoveEffects\n\
- adds r0, r1\n\
- ldrh r3, [r0]\n\
- ldr r0, _0810832C @ =0x0000ffff\n\
- cmp r3, r0\n\
- beq _08108250\n\
- b _081083B2\n\
-_08108250:\n\
- ldr r0, _08108338 @ =gDynamicBasePower\n\
- movs r1, 0\n\
- strh r1, [r0]\n\
- ldr r2, _0810833C @ =0xfffff81c\n\
- adds r0, r5, r2\n\
- strb r1, [r0]\n\
- adds r2, 0x3\n\
- adds r0, r5, r2\n\
- movs r2, 0x1\n\
- strb r2, [r0]\n\
- ldr r0, _08108340 @ =gMoveResultFlags\n\
- strb r1, [r0]\n\
- ldr r0, _08108344 @ =gCritMultiplier\n\
- strb r2, [r0]\n\
- movs r6, 0\n\
- mov r9, r3\n\
- ldr r0, _08108328 @ =sDiscouragedPowerfulMoveEffects\n\
- ldrh r0, [r0]\n\
- str r0, [sp, 0x10]\n\
-_08108276:\n\
- movs r3, 0\n\
- ldr r5, _08108348 @ =gBattleMons\n\
- lsls r4, r6, 1\n\
- ldr r7, _0810834C @ =gBattlerAttacker\n\
- lsls r1, r6, 2\n\
- mov r8, r1\n\
- adds r2, r6, 0x1\n\
- mov r10, r2\n\
- ldr r0, [sp, 0x10]\n\
- cmp r0, r9\n\
- beq _081082BA\n\
- ldr r2, _08108330 @ =gBattleMoves\n\
- ldrb r1, [r7]\n\
- movs r0, 0x58\n\
- muls r0, r1\n\
- adds r0, r4, r0\n\
- adds r1, r5, 0\n\
- adds r1, 0xC\n\
- adds r0, r1\n\
- ldrh r1, [r0]\n\
- lsls r0, r1, 1\n\
- adds r0, r1\n\
- lsls r0, 2\n\
- adds r0, r2\n\
- ldrb r2, [r0]\n\
- ldr r1, _08108328 @ =sDiscouragedPowerfulMoveEffects\n\
-_081082AA:\n\
- ldrh r0, [r1]\n\
- cmp r2, r0\n\
- beq _081082BA\n\
- adds r1, 0x2\n\
- adds r3, 0x1\n\
- ldrh r0, [r1]\n\
- cmp r0, r9\n\
- bne _081082AA\n\
-_081082BA:\n\
- ldrb r1, [r7]\n\
- movs r0, 0x58\n\
- muls r0, r1\n\
- adds r0, r4, r0\n\
- adds r1, r5, 0\n\
- adds r1, 0xC\n\
- adds r1, r0, r1\n\
- ldrh r0, [r1]\n\
- cmp r0, 0\n\
- beq _0810835C\n\
- lsls r0, r3, 1\n\
- ldr r2, _08108328 @ =sDiscouragedPowerfulMoveEffects\n\
- adds r0, r2\n\
- ldrh r0, [r0]\n\
- cmp r0, r9\n\
- bne _0810835C\n\
- ldr r0, _08108330 @ =gBattleMoves\n\
- ldrh r2, [r1]\n\
- lsls r1, r2, 1\n\
- adds r1, r2\n\
- lsls r1, 2\n\
- adds r1, r0\n\
- ldrb r0, [r1, 0x1]\n\
- cmp r0, 0x1\n\
- bls _0810835C\n\
- ldr r5, _08108350 @ =gCurrentMove\n\
- strh r2, [r5]\n\
- ldrb r0, [r7]\n\
- ldr r4, _08108354 @ =gBattlerTarget\n\
- ldrb r1, [r4]\n\
- bl AI_CalcDmg\n\
- ldrh r0, [r5]\n\
- ldrb r1, [r7]\n\
- ldrb r2, [r4]\n\
- bl TypeCalc\n\
- mov r4, sp\n\
- add r4, r8\n\
- ldr r2, _08108358 @ =gBattleMoveDamage\n\
- ldr r0, _08108334 @ =gSharedMem + 0x16800\n\
- adds r0, 0x18\n\
- adds r0, r6, r0\n\
- ldrb r1, [r0]\n\
- ldr r0, [r2]\n\
- muls r0, r1\n\
- movs r1, 0x64\n\
- bl __divsi3\n\
- str r0, [r4]\n\
- cmp r0, 0\n\
- bne _08108364\n\
- movs r0, 0x1\n\
- str r0, [r4]\n\
- b _08108364\n\
- .align 2, 0\n\
-_08108328: .4byte sDiscouragedPowerfulMoveEffects\n\
-_0810832C: .4byte 0x0000ffff\n\
-_08108330: .4byte gBattleMoves\n\
-_08108334: .4byte gSharedMem + 0x16800\n\
-_08108338: .4byte gDynamicBasePower\n\
-_0810833C: .4byte 0xfffff81c\n\
-_08108340: .4byte gMoveResultFlags\n\
-_08108344: .4byte gCritMultiplier\n\
-_08108348: .4byte gBattleMons\n\
-_0810834C: .4byte gBattlerAttacker\n\
-_08108350: .4byte gCurrentMove\n\
-_08108354: .4byte gBattlerTarget\n\
-_08108358: .4byte gBattleMoveDamage\n\
-_0810835C:\n\
- mov r1, sp\n\
- add r1, r8\n\
- movs r0, 0\n\
- str r0, [r1]\n\
-_08108364:\n\
- mov r6, r10\n\
- cmp r6, 0x3\n\
- ble _08108276\n\
- movs r6, 0\n\
- ldr r1, _081083A4 @ =gSharedMem + 0x16800\n\
- ldrb r0, [r1, 0x1]\n\
- lsls r0, 2\n\
- add r0, sp\n\
- ldr r2, [sp]\n\
- ldr r0, [r0]\n\
- adds r5, r1, 0\n\
- ldr r4, _081083A8 @ =gAIScriptPtr\n\
- cmp r2, r0\n\
- bgt _0810839A\n\
- adds r3, r5, 0\n\
- mov r2, sp\n\
-_08108384:\n\
- adds r2, 0x4\n\
- adds r6, 0x1\n\
- cmp r6, 0x3\n\
- bgt _0810839A\n\
- ldrb r0, [r3, 0x1]\n\
- lsls r0, 2\n\
- add r0, sp\n\
- ldr r1, [r2]\n\
- ldr r0, [r0]\n\
- cmp r1, r0\n\
- ble _08108384\n\
-_0810839A:\n\
- cmp r6, 0x4\n\
- bne _081083AC\n\
- movs r0, 0x2\n\
- str r0, [r5, 0x8]\n\
- b _081083B8\n\
- .align 2, 0\n\
-_081083A4: .4byte gSharedMem + 0x16800\n\
-_081083A8: .4byte gAIScriptPtr\n\
-_081083AC:\n\
- movs r0, 0x1\n\
- str r0, [r5, 0x8]\n\
- b _081083B8\n\
-_081083B2:\n\
- movs r0, 0\n\
- str r0, [r5, 0x8]\n\
- ldr r4, _081083D0 @ =gAIScriptPtr\n\
-_081083B8:\n\
- ldr r0, [r4]\n\
- adds r0, 0x1\n\
- str r0, [r4]\n\
- add sp, 0x14\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\
-_081083D0: .4byte gAIScriptPtr\n\
- .syntax divided\n");
-}
-#endif // NONMATCHING
static void BattleAICmd_get_move(void)
{
diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c
index b4b2841e0..f83334be3 100644
--- a/src/battle_ai_switch_items.c
+++ b/src/battle_ai_switch_items.c
@@ -47,263 +47,60 @@ static bool8 ShouldSwitchIfPerishSong(void)
return FALSE;
}
-#ifdef NONMATCHING
static bool8 ShouldSwitchIfWonderGuard(void)
{
u8 opposingBattler;
u8 moveFlags;
s32 i, j;
+ u16 move;
- if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
- return FALSE;
-
- if (gBattleMons[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)].ability != ABILITY_WONDER_GUARD)
+ if(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
return FALSE;
- // check if pokemon has a super effective move
- opposingBattler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
- for (i = 0; i < 4; i++)
+ if (gBattleMons[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)].ability == ABILITY_WONDER_GUARD)
{
- u16 move = gBattleMons[gActiveBattler].moves[i];
- if (move == MOVE_NONE)
- continue;
-
- moveFlags = AI_TypeCalc(move, gBattleMons[opposingBattler].species, gBattleMons[opposingBattler].ability);
- if (moveFlags & MOVE_RESULT_SUPER_EFFECTIVE)
- return FALSE;
- }
-
- // find a pokemon in the party that has a super effective move
- for (i = 0; i < 6; i++)
- {
- if (GetMonData(&gEnemyParty[i], MON_DATA_HP) == 0
- || GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == SPECIES_NONE
- || GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == SPECIES_EGG
- || i == gBattlerPartyIndexes[gActiveBattler])
- continue;
-
- GetMonData(&gEnemyParty[i], MON_DATA_SPECIES); // unused return value
- GetMonData(&gEnemyParty[i], MON_DATA_ALT_ABILITY); // unused return value
-
- opposingBattler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
- for (j = 0; j < 4; j++)
+ // Check if Pokemon has a super effective move.
+ for (opposingBattler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT), i = 0; i < MAX_MON_MOVES; ++i)
{
- u16 move = GetMonData(&gEnemyParty[i], MON_DATA_MOVE1 + j);
+ move = gBattleMons[gActiveBattler].moves[i];
if (move == MOVE_NONE)
continue;
-
moveFlags = AI_TypeCalc(move, gBattleMons[opposingBattler].species, gBattleMons[opposingBattler].ability);
- if (moveFlags & MOVE_RESULT_SUPER_EFFECTIVE && (Random() % 3) < 2)
+ if (moveFlags & MOVE_RESULT_SUPER_EFFECTIVE)
+ return FALSE;
+ }
+ // Find a Pokemon in the party that has a super effective move.
+ for (i = 0; i < PARTY_SIZE; ++i)
+ {
+ if (GetMonData(&gEnemyParty[i], MON_DATA_HP) == 0)
+ continue;
+ if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == SPECIES_NONE)
+ continue;
+ if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == SPECIES_EGG)
+ continue;
+ if (i == gBattlerPartyIndexes[gActiveBattler])
+ continue;
+ GetMonData(&gEnemyParty[i], MON_DATA_SPECIES); // Unused return value.
+ GetMonData(&gEnemyParty[i], MON_DATA_ALT_ABILITY); // Unused return value.
+
+ for (opposingBattler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT), j = 0; j < MAX_MON_MOVES; ++j)
{
- // we found a mon
- ewram160C8arr(GetBattlerPosition(gActiveBattler)) = i; // gBattleStruct->AI_monToSwitchIntoId[GetBattlerPosition(gActiveBattler)] = i;
- BtlController_EmitTwoReturnValues(1, B_ACTION_SWITCH, 0);
- return TRUE;
+ move = GetMonData(&gEnemyParty[i], MON_DATA_MOVE1 + j);
+ if (move == MOVE_NONE)
+ continue;
+ moveFlags = AI_TypeCalc(move, gBattleMons[opposingBattler].species, gBattleMons[opposingBattler].ability);
+ if (moveFlags & MOVE_RESULT_SUPER_EFFECTIVE && Random() % 3 < 2)
+ {
+ // We found a mon.
+ ewram160C8arr(GetBattlerPosition(gActiveBattler)) = i; // gBattleStruct->AI_monToSwitchIntoId[GetBattlerPosition(gActiveBattler)] = i;
+ BtlController_EmitTwoReturnValues(1, B_ACTION_SWITCH, 0);
+ return TRUE;
+ }
}
}
}
-
- return FALSE; // at this point there is not a single pokemon in the party that has a super effective move against a pokemon with wonder guard
-}
-#else
-NAKED
-static bool8 ShouldSwitchIfWonderGuard(void)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r9\n\
- mov r6, r8\n\
- push {r6,r7}\n\
- ldr r0, _0803606C @ =gBattleTypeFlags\n\
- ldrh r1, [r0]\n\
- movs r0, 0x1\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080360A0\n\
- b _080361C8\n\
- .align 2, 0\n\
-_0803606C: .4byte gBattleTypeFlags\n\
-_08036070:\n\
- ldr r0, _08036094 @ =gActiveBattler\n\
- ldrb r0, [r0]\n\
- bl GetBattlerPosition\n\
- ldr r1, _08036098 @ =gSharedMem\n\
- lsls r0, 24\n\
- lsrs r0, 25\n\
- ldr r2, _0803609C @ =0x000160c8\n\
- adds r0, r2\n\
- adds r0, r1\n\
- strb r6, [r0]\n\
- movs r0, 0x1\n\
- movs r1, 0x2\n\
- movs r2, 0\n\
- bl BtlController_EmitTwoReturnValues\n\
- movs r0, 0x1\n\
- b _080361CA\n\
- .align 2, 0\n\
-_08036094: .4byte gActiveBattler\n\
-_08036098: .4byte gSharedMem\n\
-_0803609C: .4byte 0x000160c8\n\
-_080360A0:\n\
- ldr r4, _080361D8 @ =gBattleMons\n\
- movs r0, 0\n\
- bl GetBattlerAtPosition\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- movs r1, 0x58\n\
- muls r0, r1\n\
- adds r0, r4\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- cmp r0, 0x19\n\
- beq _080360BC\n\
- b _080361C8\n\
-_080360BC:\n\
- movs r0, 0\n\
- bl GetBattlerAtPosition\n\
- lsls r0, 24\n\
- lsrs r2, r0, 24\n\
- movs r6, 0\n\
- adds r7, r4, 0\n\
- movs r5, 0x58\n\
- adds r0, r2, 0\n\
- muls r0, r5\n\
- adds r4, r0, r7\n\
- movs r3, 0x20\n\
- adds r3, r4\n\
- mov r8, r3\n\
-_080360D8:\n\
- lsls r1, r6, 1\n\
- ldr r0, _080361DC @ =gActiveBattler\n\
- ldrb r0, [r0]\n\
- muls r0, r5\n\
- adds r1, r0\n\
- adds r0, r7, 0\n\
- adds r0, 0xC\n\
- adds r1, r0\n\
- ldrh r0, [r1]\n\
- cmp r0, 0\n\
- beq _08036104\n\
- ldrh r1, [r4]\n\
- mov r3, r8\n\
- ldrb r2, [r3]\n\
- bl AI_TypeCalc\n\
- lsls r0, 24\n\
- lsrs r1, r0, 24\n\
- movs r0, 0x2\n\
- ands r1, r0\n\
- cmp r1, 0\n\
- bne _080361C8\n\
-_08036104:\n\
- adds r6, 0x1\n\
- cmp r6, 0x3\n\
- ble _080360D8\n\
- movs r6, 0\n\
- ldr r0, _080361E0 @ =gEnemyParty\n\
- mov r9, r0\n\
-_08036110:\n\
- movs r0, 0x64\n\
- adds r5, r6, 0\n\
- muls r5, r0\n\
- mov r2, r9\n\
- adds r4, r5, r2\n\
- adds r0, r4, 0\n\
- movs r1, 0x39\n\
- bl GetMonData\n\
- cmp r0, 0\n\
- beq _080361C2\n\
- adds r0, r4, 0\n\
- movs r1, 0x41\n\
- bl GetMonData\n\
- cmp r0, 0\n\
- beq _080361C2\n\
- adds r0, r4, 0\n\
- movs r1, 0x41\n\
- bl GetMonData\n\
- movs r1, 0xCE\n\
- lsls r1, 1\n\
- cmp r0, r1\n\
- beq _080361C2\n\
- ldr r1, _080361E4 @ =gBattlerPartyIndexes\n\
- ldr r0, _080361DC @ =gActiveBattler\n\
- ldrb r0, [r0]\n\
- lsls r0, 1\n\
- adds r0, r1\n\
- ldrh r0, [r0]\n\
- cmp r6, r0\n\
- beq _080361C2\n\
- adds r0, r4, 0\n\
- movs r1, 0xB\n\
- bl GetMonData\n\
- adds r0, r4, 0\n\
- movs r1, 0x2E\n\
- bl GetMonData\n\
- movs r0, 0\n\
- bl GetBattlerAtPosition\n\
- lsls r0, 24\n\
- lsrs r2, r0, 24\n\
- movs r4, 0\n\
- mov r8, r5\n\
- ldr r1, _080361D8 @ =gBattleMons\n\
- movs r0, 0x58\n\
- muls r0, r2\n\
- adds r5, r0, r1\n\
- adds r7, r5, 0\n\
- adds r7, 0x20\n\
-_0803617C:\n\
- adds r1, r4, 0\n\
- adds r1, 0xD\n\
- mov r0, r8\n\
- add r0, r9\n\
- bl GetMonData\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- cmp r0, 0\n\
- beq _080361BC\n\
- ldrh r1, [r5]\n\
- ldrb r2, [r7]\n\
- bl AI_TypeCalc\n\
- lsls r0, 24\n\
- lsrs r1, r0, 24\n\
- movs r0, 0x2\n\
- ands r1, r0\n\
- cmp r1, 0\n\
- beq _080361BC\n\
- bl Random\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- movs r1, 0x3\n\
- bl __umodsi3\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- cmp r0, 0x1\n\
- bhi _080361BC\n\
- b _08036070\n\
-_080361BC:\n\
- adds r4, 0x1\n\
- cmp r4, 0x3\n\
- ble _0803617C\n\
-_080361C2:\n\
- adds r6, 0x1\n\
- cmp r6, 0x5\n\
- ble _08036110\n\
-_080361C8:\n\
- movs r0, 0\n\
-_080361CA:\n\
- pop {r3,r4}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- pop {r4-r7}\n\
- pop {r1}\n\
- bx r1\n\
- .align 2, 0\n\
-_080361D8: .4byte gBattleMons\n\
-_080361DC: .4byte gActiveBattler\n\
-_080361E0: .4byte gEnemyParty\n\
-_080361E4: .4byte gBattlerPartyIndexes\n\
- .syntax divided\n");
+ return FALSE; // There is not a single Pokemon in the party that has a super effective move against a mon with Wonder Guard.
}
-#endif // NONMATCHING
static bool8 FindMonThatAbsorbsOpponentsMove(void)
{
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_anim_special.c b/src/battle_anim_special.c
index 86dde8d30..3c2a60077 100755
--- a/src/battle_anim_special.c
+++ b/src/battle_anim_special.c
@@ -1272,18 +1272,14 @@ static void sub_81407B8(struct Sprite *sprite)
sprite->callback = sub_81407F4;
}
-#ifdef NONMATCHING
-// there is some weird typing going on with var0 and var1.
static void sub_81407F4(struct Sprite *sprite)
{
- s16 var0, var1;
-
- var0 = sprite->data[0] + 0x800;
- var1 = sprite->data[1] + 0x680;
+ s16 var0 = sprite->data[0] + 0x800;
+ s16 var1 = sprite->data[1] + 0x680;
sprite->pos2.x -= var1 >> 8;
sprite->pos2.y += var0 >> 8;
- sprite->data[0] = var0 & 0xFF;
- sprite->data[1] = var1 & 0xFF;
+ sprite->data[0] = (sprite->data[0] + 0x800) & 0xFF;
+ sprite->data[1] = (sprite->data[1] + 0x680) & 0xFF;
if (sprite->pos1.y + sprite->pos2.y > 160
|| sprite->pos1.x + sprite->pos2.x < -8)
@@ -1294,74 +1290,6 @@ static void sub_81407F4(struct Sprite *sprite)
UpdateOamPriorityInAllHealthboxes(1);
}
}
-#else
-NAKED
-static void sub_81407F4(struct Sprite *sprite)
-{
- asm(".syntax unified\n\
- push {r4,lr}\n\
- adds r4, r0, 0\n\
- movs r0, 0x80\n\
- lsls r0, 4\n\
- adds r2, r0, 0\n\
- ldrh r1, [r4, 0x2E]\n\
- adds r2, r1\n\
- movs r0, 0xD0\n\
- lsls r0, 3\n\
- adds r3, r0, 0\n\
- ldrh r1, [r4, 0x30]\n\
- adds r3, r1\n\
- lsls r1, r3, 16\n\
- asrs r1, 24\n\
- ldrh r0, [r4, 0x24]\n\
- subs r0, r1\n\
- strh r0, [r4, 0x24]\n\
- lsls r0, r2, 16\n\
- asrs r0, 24\n\
- ldrh r1, [r4, 0x26]\n\
- adds r0, r1\n\
- strh r0, [r4, 0x26]\n\
- movs r0, 0xFF\n\
- ands r2, r0\n\
- strh r2, [r4, 0x2E]\n\
- ands r3, r0\n\
- strh r3, [r4, 0x30]\n\
- movs r2, 0x22\n\
- ldrsh r0, [r4, r2]\n\
- movs r2, 0x26\n\
- ldrsh r1, [r4, r2]\n\
- adds r0, r1\n\
- cmp r0, 0xA0\n\
- bgt _0814084A\n\
- movs r1, 0x20\n\
- ldrsh r0, [r4, r1]\n\
- movs r2, 0x24\n\
- ldrsh r1, [r4, r2]\n\
- adds r0, r1\n\
- movs r1, 0x8\n\
- negs r1, r1\n\
- cmp r0, r1\n\
- bge _0814085E\n\
-_0814084A:\n\
- movs r0, 0\n\
- strh r0, [r4, 0x2E]\n\
- ldr r0, _08140864 @ =sub_81405C8\n\
- str r0, [r4, 0x1C]\n\
- ldr r1, _08140868 @ =gDoingBattleAnim\n\
- movs r0, 0\n\
- strb r0, [r1]\n\
- movs r0, 0x1\n\
- bl UpdateOamPriorityInAllHealthboxes\n\
-_0814085E:\n\
- pop {r4}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_08140864: .4byte sub_81405C8\n\
-_08140868: .4byte gDoingBattleAnim\n\
- .syntax divided\n");
-}
-#endif // NONMATCHING
u8 AnimateBallOpenParticles(u8 x, u8 y, u8 priority, u8 subpriority, u8 ballIndex)
{
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/battle_main.c b/src/battle_main.c
index 66140133c..061d1f102 100644
--- a/src/battle_main.c
+++ b/src/battle_main.c
@@ -1382,7 +1382,7 @@ void debug_sub_8011EA0(u8);
void debug_sub_8012294(void);
void debug_sub_80123D8(u8);
void debug_sub_8012540(void);
-void debug_nullsub_3(void);
+void debug_ShowCurrentAnimAudioOptions(void);
void debug_sub_80125A0(void);
void debug_sub_80125E4(void);
void debug_sub_8012628(void);
@@ -1482,7 +1482,7 @@ void debug_sub_80108B8(void)
debug_sub_8012294();
debug_sub_80123D8(gUnknown_Debug_030043A4 * 5);
debug_sub_8012540();
- debug_nullsub_3();
+ debug_ShowCurrentAnimAudioOptions();
gUnknown_Debug_030043A8 = 0;
debug_sub_80125A0();
if (gUnknown_Debug_2023A76[0][0x22] == 8)
@@ -1616,7 +1616,7 @@ void debug_sub_8010CAC(void)
gSaveBlock2.optionsBattleSceneOff = (r5 & 1);
gSaveBlock2.optionsSound = (r5 & 2) >> 1;
SetPokemonCryStereo(gSaveBlock2.optionsSound);
- debug_nullsub_3();
+ debug_ShowCurrentAnimAudioOptions();
}
}
if (gMain.newKeysRaw == START_BUTTON)
@@ -1694,7 +1694,7 @@ void debug_sub_8010CAC(void)
debug_sub_8011E5C();
debug_sub_8011E74();
debug_sub_8012540();
- debug_nullsub_3();
+ debug_ShowCurrentAnimAudioOptions();
debug_sub_80123D8(gUnknown_Debug_030043A4 * 5);
break;
case 32:
@@ -1702,7 +1702,7 @@ void debug_sub_8010CAC(void)
debug_sub_8011E5C();
debug_sub_8011E74();
debug_sub_8012540();
- debug_nullsub_3();
+ debug_ShowCurrentAnimAudioOptions();
debug_sub_80123D8(gUnknown_Debug_030043A4 * 5);
break;
case 33:
@@ -1755,7 +1755,7 @@ void debug_sub_8010CAC(void)
debug_sub_8011E5C();
debug_sub_8011E74();
debug_sub_8012540();
- debug_nullsub_3();
+ debug_ShowCurrentAnimAudioOptions();
debug_sub_80123D8(gUnknown_Debug_030043A4 * 5);
break;
case 32:
@@ -1763,7 +1763,7 @@ void debug_sub_8010CAC(void)
debug_sub_8011E5C();
debug_sub_8011E74();
debug_sub_8012540();
- debug_nullsub_3();
+ debug_ShowCurrentAnimAudioOptions();
debug_sub_80123D8(gUnknown_Debug_030043A4 * 5);
break;
case 33:
@@ -2218,7 +2218,12 @@ void debug_sub_8011EA0(u8 a)
case 15:
case 20:
case 25:
+// TODO: check other revisions
+#if (ENGLISH && REVISION == 0)
+ debug_sub_8010A7C(0, 8);
+#else
debug_sub_8010A7C(0, 20);
+#endif
Text_InitWindow(
&gUnknown_Debug_03004370,
gBattleTextBuff1,
@@ -2227,6 +2232,8 @@ void debug_sub_8011EA0(u8 a)
gUnknown_Debug_821F424[a][2]);
Text_PrintWindow8002F44(&gUnknown_Debug_03004370);
ConvertIntToDecimalStringN(gBattleTextBuff1, gUnknown_Debug_2023A76[gUnknown_Debug_03004360][a], 2, 3);
+// TODO: check other revisions
+#if !(ENGLISH && REVISION == 0)
Text_InitWindow(
&gUnknown_Debug_03004370,
gBattleTextBuff1,
@@ -2235,6 +2242,7 @@ void debug_sub_8011EA0(u8 a)
0);
Text_PrintWindow8002F44(&gUnknown_Debug_03004370);
gBattleTextBuff1[0] = EOS;
+#endif
StringAppend(gBattleTextBuff1, gSpeciesNames[gUnknown_Debug_2023A76[gUnknown_Debug_03004360][a]]);
Text_InitWindow(
&gUnknown_Debug_03004370,
@@ -2266,7 +2274,12 @@ void debug_sub_8011EA0(u8 a)
case 17:
case 22:
case 27:
+// TODO: check other revisions
+#if (ENGLISH && REVISION == 0)
+ debug_sub_8010A7C(0, 11);
+#else
debug_sub_8010A7C(0, 24);
+#endif
Text_InitWindow(
&gUnknown_Debug_03004370,
gBattleTextBuff1,
@@ -2275,6 +2288,8 @@ void debug_sub_8011EA0(u8 a)
gUnknown_Debug_821F424[a][2]);
Text_PrintWindow8002F44(&gUnknown_Debug_03004370);
ConvertIntToDecimalStringN(gBattleTextBuff1, gUnknown_Debug_2023A76[gUnknown_Debug_03004360][a], 2, 3);
+// TODO: check other revisions
+#if !(ENGLISH && REVISION == 0)
Text_InitWindow(
&gUnknown_Debug_03004370,
gBattleTextBuff1,
@@ -2283,6 +2298,7 @@ void debug_sub_8011EA0(u8 a)
0);
Text_PrintWindow8002F44(&gUnknown_Debug_03004370);
gBattleTextBuff1[0] = EOS;
+#endif
if (gUnknown_Debug_2023A76[gUnknown_Debug_03004360][a] != 0)
StringAppend(gBattleTextBuff1, ItemId_GetName(gUnknown_Debug_2023A76[gUnknown_Debug_03004360][a]));
else
@@ -2301,7 +2317,12 @@ void debug_sub_8011EA0(u8 a)
case 19:
case 24:
case 29:
+// TODO: check other revisions
+#if (ENGLISH && REVISION == 0)
+ debug_sub_8010A7C(0, 2);
+#else
debug_sub_8010A7C(0, 4);
+#endif
Text_InitWindow(
&gUnknown_Debug_03004370,
gBattleTextBuff1,
@@ -2374,7 +2395,12 @@ void debug_sub_8012294(void)
if (r5 < 30)
{
+// TODO: check other revisions
+#if (ENGLISH && REVISION == 0)
+ debug_sub_8010A7C(0, 10);
+#else
debug_sub_8010A7C(0, 24);
+#endif
Text_InitWindow(
&gUnknown_Debug_03004370,
gBattleTextBuff1,
@@ -2383,6 +2409,8 @@ void debug_sub_8012294(void)
gUnknown_Debug_821F564[gUnknown_Debug_030043A8][2]);
Text_PrintWindow8002F44(&gUnknown_Debug_03004370);
ConvertIntToDecimalStringN(gBattleTextBuff1, gUnknown_Debug_2023B02[gUnknown_Debug_03004360][r5 / 5][gUnknown_Debug_030043A8], 2, 3);
+// TODO: check other revisions
+#if !(ENGLISH && REVISION == 0)
Text_InitWindow(
&gUnknown_Debug_03004370,
gBattleTextBuff1,
@@ -2391,6 +2419,7 @@ void debug_sub_8012294(void)
0);
Text_PrintWindow8002F44(&gUnknown_Debug_03004370);
gBattleTextBuff1[0] = EOS;
+#endif
StringAppend(gBattleTextBuff1, gMoveNames[gUnknown_Debug_2023B02[gUnknown_Debug_03004360][r5 / 5][gUnknown_Debug_030043A8]]);
Text_InitWindow(
&gUnknown_Debug_03004370,
@@ -2408,7 +2437,12 @@ void debug_sub_80123D8(u8 a)
{
if (a < 30)
{
+// TODO: check other revisions
+#if (ENGLISH && REVISION == 0)
+ debug_sub_8010A7C(0, 7);
+#else
debug_sub_8010A7C(0, 18);
+#endif
Text_InitWindow(
&gUnknown_Debug_03004370,
gBattleTextBuff1,
@@ -2424,7 +2458,12 @@ void debug_sub_80123D8(u8 a)
gUnknown_Debug_821F58C[1],
gUnknown_Debug_821F58C[2]);
Text_PrintWindow8002F44(&gUnknown_Debug_03004370);
+// TODO: check other revisions
+#if (ENGLISH && REVISION == 0)
+ debug_sub_8010A7C(0, 7);
+#else
debug_sub_8010A7C(0, 18);
+#endif
Text_InitWindow(
&gUnknown_Debug_03004370,
gBattleTextBuff1,
@@ -2473,8 +2512,50 @@ void debug_sub_8012540(void)
Text_PrintWindow8002F44(&gUnknown_Debug_03004370);
}
-void debug_nullsub_3(void)
+// TODO: check other revisions
+#if (ENGLISH && REVISION == 0)
+extern const u8 Str_821F64D[];
+extern const u8 Str_821F652[];
+extern const u8 Str_821F655[];
+extern const u8 Str_821F65A[];
+#endif
+
+void debug_ShowCurrentAnimAudioOptions(void)
{
+// TODO: check other revisions
+#if (ENGLISH && REVISION == 0)
+ if (gSaveBlock2.optionsBattleSceneOff)
+ Text_InitWindow(
+ &gUnknown_Debug_03004370,
+ Str_821F652,
+ 418,
+ gUnknown_Debug_03004360 * 32 + 21,
+ 0);
+ else
+ Text_InitWindow(
+ &gUnknown_Debug_03004370,
+ Str_821F64D,
+ 418,
+ gUnknown_Debug_03004360 * 32 + 21,
+ 0);
+ Text_PrintWindow8002F44(&gUnknown_Debug_03004370);
+
+ if (gSaveBlock2.optionsSound)
+ Text_InitWindow(
+ &gUnknown_Debug_03004370,
+ Str_821F65A,
+ 422,
+ gUnknown_Debug_03004360 * 32 + 24,
+ 0);
+ else
+ Text_InitWindow(
+ &gUnknown_Debug_03004370,
+ Str_821F655,
+ 422,
+ gUnknown_Debug_03004360 * 32 + 24,
+ 0);
+ Text_PrintWindow8002F44(&gUnknown_Debug_03004370);
+#endif
}
extern const u32 gUnknown_Debug_821F680[][0x23];
diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c
index 32887efc1..db2e1af12 100644
--- a/src/battle_script_commands.c
+++ b/src/battle_script_commands.c
@@ -5342,7 +5342,7 @@ static void atk23_getexp(void)
u16 calculatedExp;
s32 viaSentIn;
- for (viaSentIn = 0, i = 0; i < 6; i++)
+ for (viaSentIn = 0, i = 0; i < PARTY_SIZE; i++)
{
if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) == SPECIES_NONE || GetMonData(&gPlayerParty[i], MON_DATA_HP) == 0)
continue;
@@ -5572,288 +5572,68 @@ static void atk23_getexp(void)
}
}
-#ifdef NONMATCHING
static void atk24(void)
{
u16 HP_count = 0;
- int i;
- if (gBattleControllerExecFlags) {return;}
-
- for (i = 0; i < 6; i++)
- {
- if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) && !GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG))
- HP_count += GetMonData(&gPlayerParty[i], MON_DATA_HP);
- }
-
- if (HP_count == 0)
- gBattleOutcome |= B_OUTCOME_LOST;
-
- for (HP_count = 0, i = 0; i < 6; i++)
- {
- if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES) && !GetMonData(&gEnemyParty[i], MON_DATA_IS_EGG))
- HP_count += GetMonData(&gEnemyParty[i], MON_DATA_HP);
- }
-
- if (!HP_count)
- gBattleOutcome |= B_OUTCOME_WON;
+ s32 i;
+ s32 found1;
+ s32 found2;
- if (!gBattleOutcome && (gBattleTypeFlags & BATTLE_TYPE_LINK))
+ if (gBattleControllerExecFlags == 0)
{
- register int found1 asm("r2");
- register int found2 asm("r4");
-
- //I can't for the love of god decompile that part
-
- for (found1 = 0, i = 0; i < gBattlersCount; i += 2)
+ for (i = 0; i < PARTY_SIZE; i++)
{
- if ((gHitMarker & HITMARKER_UNK(i)) && !gSpecialStatuses[i].flag40)
- found1++;
+ if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) && !GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG))
+ HP_count += GetMonData(&gPlayerParty[i], MON_DATA_HP);
}
- for (found2 = 0, i = 1; i < gBattlersCount; i += 2)
+ if (HP_count == 0)
+ gBattleOutcome |= B_OUTCOME_LOST;
+
+ for (HP_count = 0, i = 0; i < PARTY_SIZE; i++)
{
- if ((gHitMarker & HITMARKER_UNK(i)) && !gSpecialStatuses[i].flag40)
- found2++;
+ if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES) && !GetMonData(&gEnemyParty[i], MON_DATA_IS_EGG))
+ HP_count += GetMonData(&gEnemyParty[i], MON_DATA_HP);
}
- if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ if (HP_count == 0)
+ gBattleOutcome |= B_OUTCOME_WON;
+
+ if (!gBattleOutcome && (gBattleTypeFlags & BATTLE_TYPE_LINK))
{
- if (found2 + found1 > 1)
- gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ for (found1 = 0, i = 0; i < gBattlersCount; i += 2)
+ {
+ if ((gHitMarker & HITMARKER_UNK(i)) && !gSpecialStatuses[i].flag40)
+ found1++;
+ }
+
+ for (found2 = 0, i = 1; i < gBattlersCount; i += 2)
+ {
+ if ((gHitMarker & HITMARKER_UNK(i)) && !gSpecialStatuses[i].flag40)
+ found2++;
+ }
+
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ {
+ if (found2 + found1 > 1)
+ gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ else
+ gBattlescriptCurrInstr += 5;
+ }
else
- gBattlescriptCurrInstr += 5;
+ {
+ if (found2 != 0 && found1 != 0)
+ gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ else
+ gBattlescriptCurrInstr += 5;
+ }
}
else
{
- if (found2 != 0 && found1 != 0)
- gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1);
- else
- gBattlescriptCurrInstr += 5;
+ gBattlescriptCurrInstr += 5;
}
}
- else
- gBattlescriptCurrInstr += 5;
-
}
-#else
-NAKED
-static void atk24(void)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r8\n\
- push {r7}\n\
- movs r6, 0\n\
- ldr r0, _08020AF0 @ =gBattleControllerExecFlags\n\
- ldr r0, [r0]\n\
- cmp r0, 0\n\
- beq _080209C6\n\
- b _08020B46\n\
-_080209C6:\n\
- movs r5, 0\n\
-_080209C8:\n\
- movs r0, 0x64\n\
- adds r1, r5, 0\n\
- muls r1, r0\n\
- ldr r0, _08020AF4 @ =gPlayerParty\n\
- adds r4, r1, r0\n\
- adds r0, r4, 0\n\
- movs r1, 0xB\n\
- bl GetMonData\n\
- cmp r0, 0\n\
- beq _080209F8\n\
- adds r0, r4, 0\n\
- movs r1, 0x2D\n\
- bl GetMonData\n\
- cmp r0, 0\n\
- bne _080209F8\n\
- adds r0, r4, 0\n\
- movs r1, 0x39\n\
- bl GetMonData\n\
- adds r0, r6, r0\n\
- lsls r0, 16\n\
- lsrs r6, r0, 16\n\
-_080209F8:\n\
- adds r5, 0x1\n\
- cmp r5, 0x5\n\
- ble _080209C8\n\
- cmp r6, 0\n\
- bne _08020A0C\n\
- ldr r0, _08020AF8 @ =gBattleOutcome\n\
- ldrb r1, [r0]\n\
- movs r2, 0x2\n\
- orrs r1, r2\n\
- strb r1, [r0]\n\
-_08020A0C:\n\
- movs r6, 0\n\
- movs r5, 0\n\
-_08020A10:\n\
- movs r0, 0x64\n\
- adds r1, r5, 0\n\
- muls r1, r0\n\
- ldr r0, _08020AFC @ =gEnemyParty\n\
- adds r4, r1, r0\n\
- adds r0, r4, 0\n\
- movs r1, 0xB\n\
- bl GetMonData\n\
- cmp r0, 0\n\
- beq _08020A40\n\
- adds r0, r4, 0\n\
- movs r1, 0x2D\n\
- bl GetMonData\n\
- cmp r0, 0\n\
- bne _08020A40\n\
- adds r0, r4, 0\n\
- movs r1, 0x39\n\
- bl GetMonData\n\
- adds r0, r6, r0\n\
- lsls r0, 16\n\
- lsrs r6, r0, 16\n\
-_08020A40:\n\
- adds r5, 0x1\n\
- cmp r5, 0x5\n\
- ble _08020A10\n\
- ldr r2, _08020AF8 @ =gBattleOutcome\n\
- cmp r6, 0\n\
- bne _08020A54\n\
- ldrb r0, [r2]\n\
- movs r1, 0x1\n\
- orrs r0, r1\n\
- strb r0, [r2]\n\
-_08020A54:\n\
- ldrb r0, [r2]\n\
- cmp r0, 0\n\
- bne _08020B3E\n\
- ldr r2, _08020B00 @ =gBattleTypeFlags\n\
- ldrh r1, [r2]\n\
- movs r0, 0x2\n\
- ands r0, r1\n\
- mov r8, r2\n\
- cmp r0, 0\n\
- beq _08020B3E\n\
- movs r2, 0\n\
- movs r5, 0\n\
- ldr r0, _08020B04 @ =gBattlersCount\n\
- ldrb r3, [r0]\n\
- mov r12, r0\n\
- ldr r7, _08020B08 @ =gBattlescriptCurrInstr\n\
- cmp r2, r3\n\
- bge _08020AA0\n\
- ldr r0, _08020B0C @ =gHitMarker\n\
- movs r1, 0x80\n\
- lsls r1, 21\n\
- ldr r6, [r0]\n\
- adds r4, r3, 0\n\
- ldr r3, _08020B10 @ =gSpecialStatuses\n\
-_08020A84:\n\
- adds r0, r1, 0\n\
- lsls r0, r5\n\
- ands r0, r6\n\
- cmp r0, 0\n\
- beq _08020A98\n\
- ldrb r0, [r3]\n\
- lsls r0, 25\n\
- cmp r0, 0\n\
- blt _08020A98\n\
- adds r2, 0x1\n\
-_08020A98:\n\
- adds r3, 0x28\n\
- adds r5, 0x2\n\
- cmp r5, r4\n\
- blt _08020A84\n\
-_08020AA0:\n\
- movs r4, 0\n\
- movs r5, 0x1\n\
- mov r0, r12\n\
- ldrb r3, [r0]\n\
- cmp r5, r3\n\
- bge _08020ADA\n\
- ldr r0, _08020B0C @ =gHitMarker\n\
- movs r1, 0x80\n\
- lsls r1, 21\n\
- mov r12, r1\n\
- ldr r1, [r0]\n\
- ldr r0, _08020B10 @ =gSpecialStatuses\n\
- adds r6, r3, 0\n\
- adds r3, r0, 0\n\
- adds r3, 0x14\n\
-_08020ABE:\n\
- mov r0, r12\n\
- lsls r0, r5\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _08020AD2\n\
- ldrb r0, [r3]\n\
- lsls r0, 25\n\
- cmp r0, 0\n\
- blt _08020AD2\n\
- adds r4, 0x1\n\
-_08020AD2:\n\
- adds r3, 0x28\n\
- adds r5, 0x2\n\
- cmp r5, r6\n\
- blt _08020ABE\n\
-_08020ADA:\n\
- mov r0, r8\n\
- ldrh r1, [r0]\n\
- movs r0, 0x40\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _08020B14\n\
- adds r0, r4, r2\n\
- cmp r0, 0x1\n\
- bgt _08020B1C\n\
- b _08020B36\n\
- .align 2, 0\n\
-_08020AF0: .4byte gBattleControllerExecFlags\n\
-_08020AF4: .4byte gPlayerParty\n\
-_08020AF8: .4byte gBattleOutcome\n\
-_08020AFC: .4byte gEnemyParty\n\
-_08020B00: .4byte gBattleTypeFlags\n\
-_08020B04: .4byte gBattlersCount\n\
-_08020B08: .4byte gBattlescriptCurrInstr\n\
-_08020B0C: .4byte gHitMarker\n\
-_08020B10: .4byte gSpecialStatuses\n\
-_08020B14:\n\
- cmp r4, 0\n\
- beq _08020B36\n\
- cmp r2, 0\n\
- beq _08020B36\n\
-_08020B1C:\n\
- ldr r2, [r7]\n\
- ldrb r1, [r2, 0x1]\n\
- ldrb r0, [r2, 0x2]\n\
- lsls r0, 8\n\
- adds r1, r0\n\
- ldrb r0, [r2, 0x3]\n\
- lsls r0, 16\n\
- adds r1, r0\n\
- ldrb r0, [r2, 0x4]\n\
- lsls r0, 24\n\
- adds r1, r0\n\
- str r1, [r7]\n\
- b _08020B46\n\
-_08020B36:\n\
- ldr r0, [r7]\n\
- adds r0, 0x5\n\
- str r0, [r7]\n\
- b _08020B46\n\
-_08020B3E:\n\
- ldr r1, _08020B50 @ =gBattlescriptCurrInstr\n\
- ldr r0, [r1]\n\
- adds r0, 0x5\n\
- str r0, [r1]\n\
-_08020B46:\n\
- pop {r3}\n\
- mov r8, r3\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_08020B50: .4byte gBattlescriptCurrInstr\n\
- .syntax divided\n");
-}
-#endif // NONMATCHING
static void MoveValuesCleanUp(void)
{
@@ -7213,7 +6993,7 @@ static void atk4F_jumpifcantswitch(void)
to_cmp = r7;
party = gPlayerParty;
}
- for (val = 0; val < 6; val++)
+ for (val = 0; val < PARTY_SIZE; val++)
{
if (GetMonData(&party[val], MON_DATA_HP) != 0
&& GetMonData(&party[val], MON_DATA_SPECIES) != SPECIES_NONE
@@ -9083,7 +8863,7 @@ static void atk61_drawpartystatussummary(void)
else
party = gEnemyParty;
- for (i = 0; i < 6; i++)
+ for (i = 0; i < PARTY_SIZE; i++)
{
if (GetMonData(&party[i], MON_DATA_SPECIES2) == 0 || GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_EGG)
{
@@ -10569,7 +10349,7 @@ static void atk8F_forcerandomswitch(void)
else
{
valid = 0;
- for (i = 0; i < 6; i++)
+ for (i = 0; i < PARTY_SIZE; i++)
{
if (GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE
&& !GetMonData(&party[i], MON_DATA_IS_EGG)
@@ -11607,107 +11387,34 @@ static void atk9E_metronome(void)
.word gBattlerTarget");
}
#else
-#ifdef NONMATCHING
static void atk9E_metronome(void)
{
- // sMovesForbiddenToCopy
- int i;
- do
+ while (1)
{
- while ((gCurrentMove = (Random() & 0x1FF) + 1) > 0x162);
- for (i = 0; sMovesForbiddenToCopy[i] != gCurrentMove && sMovesForbiddenToCopy[i] != 0xFFFF; i++);
- } while (sMovesForbiddenToCopy[i] != 0xFFFF);
+ s32 i;
- gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED);
- gBattlescriptCurrInstr = gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect];
- gBattlerTarget = GetMoveTarget(gCurrentMove, 0);
-}
-
-#else
-NAKED
-static void atk9E_metronome(void)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r8\n\
- push {r7}\n\
- ldr r7, _08027938 @ =gCurrentMove\n\
- movs r6, 0xB1\n\
- lsls r6, 1\n\
- ldr r5, _0802793C @ =sMovesForbiddenToCopy\n\
- ldr r0, _08027940 @ =gBattlescriptCurrInstr\n\
- mov r8, r0\n\
-_080278CA:\n\
- bl Random\n\
- ldr r2, _08027944 @ =0x000001ff\n\
- adds r1, r2, 0\n\
- ands r0, r1\n\
- adds r0, 0x1\n\
- strh r0, [r7]\n\
- cmp r0, r6\n\
- bhi _080278CA\n\
- movs r0, 0x3\n\
-_080278DE:\n\
- subs r0, 0x1\n\
- cmp r0, 0\n\
- bge _080278DE\n\
- ldr r4, _08027938 @ =gCurrentMove\n\
- ldrh r2, [r4]\n\
- ldr r3, _08027948 @ =0x0000ffff\n\
- subs r0, r5, 0x2\n\
-_080278EC:\n\
- adds r0, 0x2\n\
- ldrh r1, [r0]\n\
- cmp r1, r2\n\
- beq _080278F8\n\
- cmp r1, r3\n\
- bne _080278EC\n\
-_080278F8:\n\
- ldr r0, _08027948 @ =0x0000ffff\n\
- cmp r1, r0\n\
- bne _080278CA\n\
- ldr r2, _0802794C @ =gHitMarker\n\
- ldr r0, [r2]\n\
- ldr r1, _08027950 @ =0xfffffbff\n\
- ands r0, r1\n\
- str r0, [r2]\n\
- ldr r3, _08027954 @ =gBattleScriptsForMoveEffects\n\
- ldr r2, _08027958 @ =gBattleMoves\n\
- ldrh r1, [r4]\n\
- lsls r0, r1, 1\n\
- adds r0, r1\n\
- lsls r0, 2\n\
- adds r0, r2\n\
- ldrb r0, [r0]\n\
- lsls r0, 2\n\
- adds r0, r3\n\
- ldr r0, [r0]\n\
- mov r1, r8\n\
- str r0, [r1]\n\
- ldrh r0, [r4]\n\
- movs r1, 0\n\
- bl GetMoveTarget\n\
- ldr r1, _0802795C @ =gBattlerTarget\n\
- strb r0, [r1]\n\
- pop {r3}\n\
- mov r8, r3\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_08027938: .4byte gCurrentMove\n\
-_0802793C: .4byte sMovesForbiddenToCopy\n\
-_08027940: .4byte gBattlescriptCurrInstr\n\
-_08027944: .4byte 0x000001ff\n\
-_08027948: .4byte 0x0000ffff\n\
-_0802794C: .4byte gHitMarker\n\
-_08027950: .4byte 0xfffffbff\n\
-_08027954: .4byte gBattleScriptsForMoveEffects\n\
-_08027958: .4byte gBattleMoves\n\
-_0802795C: .4byte gBattlerTarget\n\
- .syntax divided");
+ gCurrentMove = (Random() & 0x1FF) + 1;
+ if (gCurrentMove >= 355)
+ continue;
+ for (i = 0; i < MAX_MON_MOVES; ++i); // redundant
+ i = -1;
+ while (1)
+ {
+ ++i;
+ if (sMovesForbiddenToCopy[i] == gCurrentMove)
+ break;
+ if (sMovesForbiddenToCopy[i] == METRONOME_FORBIDDEN_END)
+ break;
+ }
+ if (sMovesForbiddenToCopy[i] == METRONOME_FORBIDDEN_END)
+ {
+ gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED);
+ gBattlescriptCurrInstr = gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect];
+ gBattlerTarget = GetMoveTarget(gCurrentMove, 0);
+ return;
+ }
+ }
}
-#endif // NONMATCHING
#endif
static void atk9F_dmgtolevel(void)
@@ -12379,7 +12086,7 @@ static void atkAE_healpartystatus(void)
}
}
- for (i = 0; i < 6; i++)
+ for (i = 0; i < PARTY_SIZE; i++)
{
u16 species = GetMonData(&party[i], MON_DATA_SPECIES2);
u8 abilityBit = GetMonData(&party[i], MON_DATA_ALT_ABILITY);
@@ -12852,27 +12559,31 @@ static void atkC3_trysetfutureattack(void)
}
}
-#ifdef NONMATCHING
static void atkC4_trydobeatup(void)
{
- register struct Pokemon* party asm("r7");
- if (GetBattlerSide(gBattlerAttacker) == 0)
+ struct Pokemon *party;
+
+ if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
party = gPlayerParty;
else
party = gEnemyParty;
-
if (gBattleMons[gBattlerTarget].hp == 0)
+ {
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
else
{
- while (gBattleCommunication[0] < 6)
+ u8 beforeLoop = gBattleCommunication[0];
+
+ for (;gBattleCommunication[0] < PARTY_SIZE; ++gBattleCommunication[0])
{
- if (GetMonData(&party[gBattleCommunication[0]], MON_DATA_HP) && GetMonData(&party[gBattleCommunication[0]], MON_DATA_SPECIES2)
- && GetMonData(&party[gBattleCommunication[0]], MON_DATA_SPECIES2) != SPECIES_EGG && !GetMonData(&party[gBattleCommunication[0]], MON_DATA_STATUS))
- break;
- gBattleCommunication[0]++;
+ if (GetMonData(&party[gBattleCommunication[0]], MON_DATA_HP)
+ && GetMonData(&party[gBattleCommunication[0]], MON_DATA_SPECIES2)
+ && GetMonData(&party[gBattleCommunication[0]], MON_DATA_SPECIES2) != SPECIES_EGG
+ && !GetMonData(&party[gBattleCommunication[0]], MON_DATA_STATUS))
+ break;
}
- if (gBattleCommunication[0] < 6)
+ if (gBattleCommunication[0] < PARTY_SIZE)
{
gBattleTextBuff1[0] = 0xFD;
gBattleTextBuff1[1] = 4;
@@ -12888,269 +12599,14 @@ static void atkC4_trydobeatup(void)
gBattleMoveDamage = (gBattleMoveDamage / 50) + 2;
if (gProtectStructs[gBattlerAttacker].helpingHand)
gBattleMoveDamage = gBattleMoveDamage * 15 / 10;
-
- gBattleCommunication[0]++;
+ ++gBattleCommunication[0];
}
- else if (gBattleCommunication[0] != 0)
+ else if (beforeLoop != 0)
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
else
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 5);
}
}
-#else
-NAKED
-static void atkC4_trydobeatup(void)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r9\n\
- mov r6, r8\n\
- push {r6,r7}\n\
- ldr r0, _08029A8C @ =gBattlerAttacker\n\
- ldrb r0, [r0]\n\
- bl GetBattlerSide\n\
- lsls r0, 24\n\
- ldr r7, _08029A90 @ =gEnemyParty\n\
- cmp r0, 0\n\
- bne _08029A62\n\
- ldr r7, _08029A94 @ =gPlayerParty\n\
-_08029A62:\n\
- ldr r2, _08029A98 @ =gBattleMons\n\
- ldr r0, _08029A9C @ =gBattlerTarget\n\
- ldrb r1, [r0]\n\
- movs r0, 0x58\n\
- muls r0, r1\n\
- adds r0, r2\n\
- ldrh r0, [r0, 0x28]\n\
- cmp r0, 0\n\
- bne _08029AA4\n\
- ldr r3, _08029AA0 @ =gBattlescriptCurrInstr\n\
- ldr r2, [r3]\n\
- ldrb r1, [r2, 0x1]\n\
- ldrb r0, [r2, 0x2]\n\
- lsls r0, 8\n\
- orrs r1, r0\n\
- ldrb r0, [r2, 0x3]\n\
- lsls r0, 16\n\
- orrs r1, r0\n\
- ldrb r0, [r2, 0x4]\n\
- b _08029C40\n\
- .align 2, 0\n\
-_08029A8C: .4byte gBattlerAttacker\n\
-_08029A90: .4byte gEnemyParty\n\
-_08029A94: .4byte gPlayerParty\n\
-_08029A98: .4byte gBattleMons\n\
-_08029A9C: .4byte gBattlerTarget\n\
-_08029AA0: .4byte gBattlescriptCurrInstr\n\
-_08029AA4:\n\
- ldr r6, _08029BE0 @ =gBattleCommunication\n\
- ldrb r0, [r6]\n\
- mov r8, r0\n\
- cmp r0, 0x5\n\
- bls _08029AB0\n\
- b _08029C0C\n\
-_08029AB0:\n\
- adds r4, r6, 0\n\
- movs r5, 0x64\n\
-_08029AB4:\n\
- ldrb r0, [r4]\n\
- muls r0, r5\n\
- adds r0, r7, r0\n\
- movs r1, 0x39\n\
- bl GetMonData\n\
- cmp r0, 0\n\
- beq _08029AF8\n\
- ldrb r0, [r6]\n\
- muls r0, r5\n\
- adds r0, r7, r0\n\
- movs r1, 0x41\n\
- bl GetMonData\n\
- cmp r0, 0\n\
- beq _08029AF8\n\
- ldrb r0, [r4]\n\
- muls r0, r5\n\
- adds r0, r7, r0\n\
- movs r1, 0x41\n\
- bl GetMonData\n\
- movs r1, 0xCE\n\
- lsls r1, 1\n\
- cmp r0, r1\n\
- beq _08029AF8\n\
- ldrb r0, [r4]\n\
- muls r0, r5\n\
- adds r0, r7, r0\n\
- movs r1, 0x37\n\
- bl GetMonData\n\
- cmp r0, 0\n\
- beq _08029B08\n\
-_08029AF8:\n\
- ldrb r0, [r4]\n\
- adds r0, 0x1\n\
- strb r0, [r4]\n\
- adds r6, r4, 0\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, 0x5\n\
- bls _08029AB4\n\
-_08029B08:\n\
- ldr r1, _08029BE0 @ =gBattleCommunication\n\
- mov r9, r1\n\
- ldrb r2, [r1]\n\
- cmp r2, 0x5\n\
- bhi _08029C0C\n\
- ldr r1, _08029BE4 @ =gBattleTextBuff1\n\
- movs r0, 0xFD\n\
- strb r0, [r1]\n\
- movs r0, 0x4\n\
- strb r0, [r1, 0x1]\n\
- ldr r6, _08029BE8 @ =gBattlerAttacker\n\
- ldrb r0, [r6]\n\
- strb r0, [r1, 0x2]\n\
- strb r2, [r1, 0x3]\n\
- movs r0, 0xFF\n\
- strb r0, [r1, 0x4]\n\
- ldr r1, _08029BEC @ =gBattlescriptCurrInstr\n\
- ldr r0, [r1]\n\
- adds r0, 0x9\n\
- str r0, [r1]\n\
- ldr r2, _08029BF0 @ =gBattleMoveDamage\n\
- mov r8, r2\n\
- ldr r5, _08029BF4 @ =gBaseStats\n\
- mov r1, r9\n\
- ldrb r0, [r1]\n\
- movs r4, 0x64\n\
- muls r0, r4\n\
- adds r0, r7, r0\n\
- movs r1, 0xB\n\
- bl GetMonData\n\
- lsls r1, r0, 3\n\
- subs r1, r0\n\
- lsls r1, 2\n\
- adds r1, r5\n\
- ldrb r3, [r1, 0x1]\n\
- mov r2, r8\n\
- str r3, [r2]\n\
- ldr r2, _08029BF8 @ =gBattleMoves\n\
- ldr r0, _08029BFC @ =gCurrentMove\n\
- ldrh r1, [r0]\n\
- lsls r0, r1, 1\n\
- adds r0, r1\n\
- lsls r0, 2\n\
- adds r0, r2\n\
- ldrb r0, [r0, 0x1]\n\
- muls r0, r3\n\
- mov r1, r8\n\
- str r0, [r1]\n\
- mov r2, r9\n\
- ldrb r0, [r2]\n\
- muls r0, r4\n\
- adds r0, r7, r0\n\
- movs r1, 0x38\n\
- bl GetMonData\n\
- lsls r0, 1\n\
- movs r1, 0x5\n\
- bl __udivsi3\n\
- adds r0, 0x2\n\
- mov r2, r8\n\
- ldr r1, [r2]\n\
- muls r0, r1\n\
- str r0, [r2]\n\
- ldr r3, _08029C00 @ =gBattleMons\n\
- ldr r1, _08029C04 @ =gBattlerTarget\n\
- ldrb r2, [r1]\n\
- movs r1, 0x58\n\
- muls r1, r2\n\
- adds r1, r3\n\
- ldrh r2, [r1]\n\
- lsls r1, r2, 3\n\
- subs r1, r2\n\
- lsls r1, 2\n\
- adds r1, r5\n\
- ldrb r1, [r1, 0x2]\n\
- bl __divsi3\n\
- mov r1, r8\n\
- str r0, [r1]\n\
- movs r1, 0x32\n\
- bl __divsi3\n\
- adds r2, r0, 0x2\n\
- mov r0, r8\n\
- str r2, [r0]\n\
- ldr r1, _08029C08 @ =gProtectStructs\n\
- ldrb r0, [r6]\n\
- lsls r0, 4\n\
- adds r0, r1\n\
- ldrb r0, [r0]\n\
- lsls r0, 28\n\
- cmp r0, 0\n\
- bge _08029BD4\n\
- lsls r0, r2, 4\n\
- subs r0, r2\n\
- movs r1, 0xA\n\
- bl __divsi3\n\
- mov r1, r8\n\
- str r0, [r1]\n\
-_08029BD4:\n\
- mov r2, r9\n\
- ldrb r0, [r2]\n\
- adds r0, 0x1\n\
- strb r0, [r2]\n\
- b _08029C46\n\
- .align 2, 0\n\
-_08029BE0: .4byte gBattleCommunication\n\
-_08029BE4: .4byte gBattleTextBuff1\n\
-_08029BE8: .4byte gBattlerAttacker\n\
-_08029BEC: .4byte gBattlescriptCurrInstr\n\
-_08029BF0: .4byte gBattleMoveDamage\n\
-_08029BF4: .4byte gBaseStats\n\
-_08029BF8: .4byte gBattleMoves\n\
-_08029BFC: .4byte gCurrentMove\n\
-_08029C00: .4byte gBattleMons\n\
-_08029C04: .4byte gBattlerTarget\n\
-_08029C08: .4byte gProtectStructs\n\
-_08029C0C:\n\
- mov r0, r8\n\
- cmp r0, 0\n\
- beq _08029C2C\n\
- ldr r3, _08029C28 @ =gBattlescriptCurrInstr\n\
- ldr r2, [r3]\n\
- ldrb r1, [r2, 0x1]\n\
- ldrb r0, [r2, 0x2]\n\
- lsls r0, 8\n\
- orrs r1, r0\n\
- ldrb r0, [r2, 0x3]\n\
- lsls r0, 16\n\
- orrs r1, r0\n\
- ldrb r0, [r2, 0x4]\n\
- b _08029C40\n\
- .align 2, 0\n\
-_08029C28: .4byte gBattlescriptCurrInstr\n\
-_08029C2C:\n\
- ldr r3, _08029C54 @ =gBattlescriptCurrInstr\n\
- ldr r2, [r3]\n\
- ldrb r1, [r2, 0x5]\n\
- ldrb r0, [r2, 0x6]\n\
- lsls r0, 8\n\
- orrs r1, r0\n\
- ldrb r0, [r2, 0x7]\n\
- lsls r0, 16\n\
- orrs r1, r0\n\
- ldrb r0, [r2, 0x8]\n\
-_08029C40:\n\
- lsls r0, 24\n\
- orrs r1, r0\n\
- str r1, [r3]\n\
-_08029C46:\n\
- pop {r3,r4}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_08029C54: .4byte gBattlescriptCurrInstr\n\
- .syntax divided");
-}
-#endif // NONMATCHING
static void atkC5_setsemiinvulnerablebit(void)
{
@@ -13565,248 +13021,50 @@ static void atkDD_weightdamagecalculation(void)
gBattlescriptCurrInstr++;
}
-#ifdef NONMATCHING
static void atkDE_assistattackselect(void)
{
- u32 chooseable_moves_no = 0;
- struct Pokemon* party;
- int i, j;
- u16* chooseable_moves;
- if (GetBattlerPosition(gBattlerAttacker) & 1)
+ s32 chooseableMovesNo = 0;
+ struct Pokemon *party;
+ s32 monId, moveId;
+ u16 *movesArray = (u16 *)&gBattleStruct->assistMove;
+
+ if (GET_BATTLER_SIDE(gBattlerAttacker) != B_SIDE_PLAYER)
party = gEnemyParty;
else
party = gPlayerParty;
-
- for (i = 0; i < 6; i++)
+ for (monId = 0; monId < PARTY_SIZE; ++monId)
{
- if (i == gBattlerPartyIndexes[gBattlerAttacker])
- break;
- if (!GetMonData(&party[i], MON_DATA_SPECIES2) || GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_EGG)
- break;
- chooseable_moves = &gBattleStruct->assistMove[chooseable_moves_no];
- for (j = 0; j < 4; j++)
+ if (monId == gBattlerPartyIndexes[gBattlerAttacker]
+ || GetMonData(&party[monId], MON_DATA_SPECIES2) == SPECIES_NONE
+ || GetMonData(&party[monId], MON_DATA_SPECIES2) == SPECIES_EGG)
+ continue;
+ for (moveId = 0; moveId < MAX_MON_MOVES; ++moveId)
{
- int k;
- u16 move = GetMonData(&party[i], MON_DATA_MOVE1 + i);
+ s32 i = 0;
+ u16 move = GetMonData(&party[monId], MON_DATA_MOVE1 + moveId);
+
if (IsMoveUnchoosable(move))
- break;
- //sMovesForbiddenToCopy[k]
- for (k = 0; ;k++)
- {
- if (sMovesForbiddenToCopy[k] == 0xFFFF)
- {
- if (move)
- {
- *chooseable_moves = move;
- chooseable_moves++;
- chooseable_moves_no++;
- }
- break;
- }
- if (sMovesForbiddenToCopy[k] == move)
- break;
- }
+ continue;
+ for (; sMovesForbiddenToCopy[i] != ASSIST_FORBIDDEN_END && move != sMovesForbiddenToCopy[i]; ++i);
+ if (sMovesForbiddenToCopy[i] != ASSIST_FORBIDDEN_END || move == MOVE_NONE)
+ continue;
+ movesArray[chooseableMovesNo] = move;
+ ++chooseableMovesNo;
}
}
- if (chooseable_moves_no)
+ if (chooseableMovesNo)
{
gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED);
- gRandomMove = gBattleStruct->assistMove[Random() % chooseable_moves_no];
+ gRandomMove = movesArray[((Random() & 0xFF) * chooseableMovesNo) >> 8];
gBattlerTarget = GetMoveTarget(gRandomMove, 0);
gBattlescriptCurrInstr += 5;
}
else
+ {
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
}
-#else
-NAKED
-static void atkDE_assistattackselect(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\
- movs r0, 0\n\
- mov r10, r0\n\
- ldr r0, _0802AB9C @ =gBattlerAttacker\n\
- ldrb r0, [r0]\n\
- bl GetBattlerPosition\n\
- movs r1, 0x1\n\
- ands r1, r0\n\
- ldr r0, _0802ABA0 @ =gPlayerParty\n\
- str r0, [sp]\n\
- cmp r1, 0\n\
- beq _0802AAAC\n\
- ldr r1, _0802ABA4 @ =gEnemyParty\n\
- str r1, [sp]\n\
-_0802AAAC:\n\
- movs r2, 0\n\
-_0802AAAE:\n\
- ldr r1, _0802ABA8 @ =gBattlerPartyIndexes\n\
- ldr r0, _0802AB9C @ =gBattlerAttacker\n\
- ldrb r0, [r0]\n\
- lsls r0, 1\n\
- adds r0, r1\n\
- adds r1, r2, 0x1\n\
- str r1, [sp, 0x4]\n\
- ldrh r0, [r0]\n\
- cmp r2, r0\n\
- beq _0802AB54\n\
- movs r0, 0x64\n\
- adds r6, r2, 0\n\
- muls r6, r0\n\
- ldr r0, [sp]\n\
- adds r4, r0, r6\n\
- adds r0, r4, 0\n\
- movs r1, 0x41\n\
- bl GetMonData\n\
- cmp r0, 0\n\
- beq _0802AB54\n\
- adds r0, r4, 0\n\
- movs r1, 0x41\n\
- bl GetMonData\n\
- movs r1, 0xCE\n\
- lsls r1, 1\n\
- cmp r0, r1\n\
- beq _0802AB54\n\
- movs r5, 0\n\
- ldr r1, _0802ABAC @ =0x0000ffff\n\
- mov r8, r1\n\
- mov r9, r6\n\
- mov r1, r10\n\
- lsls r0, r1, 1\n\
- ldr r1, _0802ABB0 @ =gSharedMem + 0x16024\n\
- adds r6, r0, r1\n\
-_0802AAF8:\n\
- movs r7, 0\n\
- adds r1, r5, 0\n\
- adds r1, 0xD\n\
- ldr r0, [sp]\n\
- add r0, r9\n\
- bl GetMonData\n\
- lsls r0, 16\n\
- lsrs r4, r0, 16\n\
- adds r0, r4, 0\n\
- bl IsMoveUnchoosable\n\
- lsls r0, 24\n\
- adds r1, r5, 0x1\n\
- cmp r0, 0\n\
- bne _0802AB4E\n\
- ldr r0, _0802ABB4 @ =sMovesForbiddenToCopy\n\
- ldrh r2, [r0]\n\
- adds r3, r0, 0\n\
- cmp r2, r8\n\
- beq _0802AB42\n\
- cmp r4, r2\n\
- beq _0802AB38\n\
- ldr r5, _0802ABAC @ =0x0000ffff\n\
- adds r2, r3, 0\n\
-_0802AB2A:\n\
- adds r2, 0x2\n\
- adds r7, 0x1\n\
- ldrh r0, [r2]\n\
- cmp r0, r5\n\
- beq _0802AB42\n\
- cmp r4, r0\n\
- bne _0802AB2A\n\
-_0802AB38:\n\
- lsls r0, r7, 1\n\
- adds r0, r3\n\
- ldrh r0, [r0]\n\
- cmp r0, r8\n\
- bne _0802AB4E\n\
-_0802AB42:\n\
- cmp r4, 0\n\
- beq _0802AB4E\n\
- strh r4, [r6]\n\
- adds r6, 0x2\n\
- movs r0, 0x1\n\
- add r10, r0\n\
-_0802AB4E:\n\
- adds r5, r1, 0\n\
- cmp r5, 0x3\n\
- ble _0802AAF8\n\
-_0802AB54:\n\
- ldr r2, [sp, 0x4]\n\
- cmp r2, 0x5\n\
- ble _0802AAAE\n\
- mov r1, r10\n\
- cmp r1, 0\n\
- beq _0802ABCC\n\
- ldr r2, _0802ABB8 @ =gHitMarker\n\
- ldr r0, [r2]\n\
- ldr r1, _0802ABBC @ =0xfffffbff\n\
- ands r0, r1\n\
- str r0, [r2]\n\
- ldr r4, _0802ABC0 @ =gRandomMove\n\
- bl Random\n\
- movs r1, 0xFF\n\
- ands r1, r0\n\
- mov r0, r10\n\
- muls r0, r1\n\
- asrs r0, 8\n\
- lsls r0, 1\n\
- ldr r1, _0802ABB0 @ =gSharedMem + 0x16024\n\
- adds r0, r1\n\
- ldrh r0, [r0]\n\
- strh r0, [r4]\n\
- ldrh r0, [r4]\n\
- movs r1, 0\n\
- bl GetMoveTarget\n\
- ldr r1, _0802ABC4 @ =gBattlerTarget\n\
- strb r0, [r1]\n\
- ldr r1, _0802ABC8 @ =gBattlescriptCurrInstr\n\
- ldr r0, [r1]\n\
- adds r0, 0x5\n\
- str r0, [r1]\n\
- b _0802ABE6\n\
- .align 2, 0\n\
-_0802AB9C: .4byte gBattlerAttacker\n\
-_0802ABA0: .4byte gPlayerParty\n\
-_0802ABA4: .4byte gEnemyParty\n\
-_0802ABA8: .4byte gBattlerPartyIndexes\n\
-_0802ABAC: .4byte 0x0000ffff\n\
-_0802ABB0: .4byte gSharedMem + 0x16024\n\
-_0802ABB4: .4byte sMovesForbiddenToCopy\n\
-_0802ABB8: .4byte gHitMarker\n\
-_0802ABBC: .4byte 0xfffffbff\n\
-_0802ABC0: .4byte gRandomMove\n\
-_0802ABC4: .4byte gBattlerTarget\n\
-_0802ABC8: .4byte gBattlescriptCurrInstr\n\
-_0802ABCC:\n\
- ldr r3, _0802ABF8 @ =gBattlescriptCurrInstr\n\
- ldr r2, [r3]\n\
- ldrb r1, [r2, 0x1]\n\
- ldrb r0, [r2, 0x2]\n\
- lsls r0, 8\n\
- orrs r1, r0\n\
- ldrb r0, [r2, 0x3]\n\
- lsls r0, 16\n\
- orrs r1, r0\n\
- ldrb r0, [r2, 0x4]\n\
- lsls r0, 24\n\
- orrs r1, r0\n\
- str r1, [r3]\n\
-_0802ABE6:\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\
-_0802ABF8: .4byte gBattlescriptCurrInstr\n\
- .syntax divided");
-}
-
-#endif // NONMATCHING
-
static void atkDF_trysetmagiccoat(void)
{
gBattlerTarget = gBattlerAttacker;
@@ -13918,7 +13176,7 @@ static void atkE4_getsecretpowereffect(void)
static void atkE5_pickup(void)
{
int i;
- for (i = 0; i < 6; i++)
+ for (i = 0; i < PARTY_SIZE; i++)
{
u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2);
u16 held_item = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM);
diff --git a/src/berry_blender.c b/src/berry_blender.c
index 52669a316..c86b707b3 100644
--- a/src/berry_blender.c
+++ b/src/berry_blender.c
@@ -3277,7 +3277,7 @@ void debug_sub_80524BC(void)
}
// Partially fixes the clipping on longer names.
-#if DEBUG_TRANSLATE && DEBUG
+#if DEBUG_FIX
# define BLENDER_DEBUG_BERRY_LEN 12
#else
# define BLENDER_DEBUG_BERRY_LEN 6
diff --git a/src/contest_painting.c b/src/contest_painting.c
index e3cc6cdae..af5eddf76 100644
--- a/src/contest_painting.c
+++ b/src/contest_painting.c
@@ -101,40 +101,18 @@ static void ContestPaintingPrintCaption(u8 arg0, u8 arg1);
static void ContestPaintingInitBG(void);
static void ContestPaintingInitVars(u8 arg0);
static void VBlankCB_ContestPainting(void);
-void sub_8106B90(); //should be static
+static void sub_8106B90(u8 *a, u16 *b, u16 *c);
static void sub_8107090(u8 arg0, u8 arg1);
-NAKED
-void sub_8106630(u32 arg0)
+void sub_8106630(u32 contestWinnerId)
{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- ldr r2, _0810665C @ =gSharedMem + 0x15DE0\n\
- subs r4, r2, 0x2\n\
- subs r5, r2, 0x1\n\
- ldr r3, _08106660 @ =gSaveBlock1\n\
- subs r0, 0x1\n\
- lsls r1, r0, 5\n\
- adds r1, r3\n\
- ldr r3, _08106664 @ =0x00002dfc\n\
- adds r1, r3\n\
- ldm r1!, {r3,r6,r7}\n\
- stm r2!, {r3,r6,r7}\n\
- ldm r1!, {r3,r6,r7}\n\
- stm r2!, {r3,r6,r7}\n\
- ldm r1!, {r6,r7}\n\
- stm r2!, {r6,r7}\n\
- strb r0, [r4]\n\
- movs r0, 0\n\
- strb r0, [r5]\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_0810665C: .4byte gSharedMem + 0x15DE0\n\
-_08106660: .4byte gSaveBlock1\n\
-_08106664: .4byte 0x00002dfc\n\
- .syntax divided\n");
+ // probably fakematching
+ struct ContestWinner *ptr1 = (struct ContestWinner*)&ewram15DE0; // TODO: resolve messy struct duplicates
+ u8 *ptr2 = (u8*)&ewram15DDE;
+ u8 *ptr3 = (u8*)&ewram15DDF;
+ *ptr1 = gSaveBlock1.contestWinners[contestWinnerId - 1];
+ *ptr2 = contestWinnerId - 1;
+ *ptr3 = 0;
}
void CB2_ContestPainting(void)
@@ -346,7 +324,7 @@ static void sub_8106AC4(u16 species, u8 arg1)
species,
(u32)gUnknown_03005E8C->personality
);
- sub_8106B90(gUnknown_081FAF4C[1], gUnknown_03005E90, gUnknown_03005E10);
+ sub_8106B90((u8*)gUnknown_081FAF4C[1], (u16*)gUnknown_03005E90, (u16*)gUnknown_03005E10);
}
else
{
@@ -359,18 +337,26 @@ static void sub_8106AC4(u16 species, u8 arg1)
species,
(u32)gUnknown_03005E8C->personality
);
- sub_8106B90(gUnknown_081FAF4C[0], gUnknown_03005E90, gUnknown_03005E10);
+ sub_8106B90((u8*)gUnknown_081FAF4C[0], (u16*)gUnknown_03005E90, (u16*)gUnknown_03005E10);
}
}
-#ifdef NONMATCHING
-void sub_8106B90(u8 a[][8][8][4], u16 b[], u16 c[][8][8][8])
+
+static void sub_8106B90(u8 *a, u16 *b, u16 *c)
{
u16 i;
u16 j;
u16 k;
u16 l;
+ /*
+ Raw arithmetics are required to match this function.
+ At least it's the first known way to match it. The extreme
+ sensitivity of this match and Game Freak proving to not have
+ been a fan of C's advanced array features, preferring to
+ calculate dimensions manually (as seen in other functions),
+ tell that it may have been this way in the original code.
+ */
for (i = 0; i < 8; i++)
{
for (j = 0; j < 8; j++)
@@ -379,128 +365,38 @@ void sub_8106B90(u8 a[][8][8][4], u16 b[], u16 c[][8][8][8])
{
for (l = 0; l < 8; l++)
{
- //u8 *arr = a[i][j][k];
- //u8 r1 = arr[l / 2];
- u8 r1 = a[i][j][k][l / 2];
+ /*
+ Parenthesis/group hack absolutely required to match regalloc. Remove any
+ unneeded parentheses and the function gets thrown off. See the comments
+ in CopyWallpaperTilemap for documentation on a similar behavior.
+ */
+ u8 temp = ((u8*)a + ((((i << 3) + j) << 5) + (k << 2) + (l >> 1)))[0];
+ /*
+ The shifts have to be there to match r0 and r2's order in one instruction:
+ add r5, r2, r0
+ This also makes agbcc's expression order parsing even more super sensitive
+ and obscene when it comes to parentheses affecting regalloc regardless if
+ unnecessary, requiring j must be placed in the front to match, or else
+ regalloc breaks again and does this a few instructions above:
+ add r0, r3, r7 <- regswap
+ */
if (l & 1)
- r1 /= 16;
+ temp /= 16;
else
- r1 %= 16;
- //_08106BEA
- if (r1 == 0)
- c[i][k][j][l] = 0x8000;
+ temp %= 16;
+
+ // Same order as above needs to be written here, or else this happens:
+ // add r0, r7, r1 <- regswap
+ if (temp == 0)
+ ((u16*)c + (((i << 3) + k) << 6) + ((j << 3)+l))[0] = 0x8000;
else
- c[i][k][j][l] = b[r1];
+ ((u16*)c + (((i << 3) + k) << 6) + ((j << 3)+l))[0] = b[temp];
}
}
}
}
}
-#else
-NAKED
-void sub_8106B90()
-{
- 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, 0xC\n\
- mov r10, r0\n\
- mov r9, r1\n\
- str r2, [sp]\n\
- movs r0, 0\n\
-_08106BA4:\n\
- movs r3, 0\n\
- adds r1, r0, 0x1\n\
- str r1, [sp, 0x4]\n\
- lsls r0, 3\n\
- str r0, [sp, 0x8]\n\
-_08106BAE:\n\
- movs r1, 0\n\
- adds r2, r3, 0x1\n\
- mov r8, r2\n\
- ldr r7, [sp, 0x8]\n\
- adds r0, r7, r3\n\
- lsls r0, 5\n\
- mov r12, r0\n\
- lsls r4, r3, 3\n\
-_08106BBE:\n\
- movs r3, 0\n\
- lsls r0, r1, 2\n\
- adds r6, r1, 0x1\n\
- mov r2, r12\n\
- adds r5, r2, r0\n\
- ldr r7, [sp, 0x8]\n\
- adds r0, r7, r1\n\
- lsls r0, 7\n\
- ldr r1, [sp]\n\
- adds r2, r0, r1\n\
-_08106BD2:\n\
- lsrs r0, r3, 1\n\
- adds r0, r5, r0\n\
- add r0, r10\n\
- ldrb r1, [r0]\n\
- movs r0, 0x1\n\
- ands r0, r3\n\
- cmp r0, 0\n\
- beq _08106BE6\n\
- lsrs r1, 4\n\
- b _08106BEA\n\
-_08106BE6:\n\
- movs r0, 0xF\n\
- ands r1, r0\n\
-_08106BEA:\n\
- cmp r1, 0\n\
- bne _08106BFC\n\
- adds r0, r4, r3\n\
- lsls r0, 1\n\
- adds r0, r2\n\
- movs r7, 0x80\n\
- lsls r7, 8\n\
- adds r1, r7, 0\n\
- b _08106C08\n\
-_08106BFC:\n\
- adds r0, r4, r3\n\
- lsls r0, 1\n\
- adds r0, r2\n\
- lsls r1, 1\n\
- add r1, r9\n\
- ldrh r1, [r1]\n\
-_08106C08:\n\
- strh r1, [r0]\n\
- adds r0, r3, 0x1\n\
- lsls r0, 16\n\
- lsrs r3, r0, 16\n\
- cmp r3, 0x7\n\
- bls _08106BD2\n\
- lsls r0, r6, 16\n\
- lsrs r1, r0, 16\n\
- cmp r1, 0x7\n\
- bls _08106BBE\n\
- mov r1, r8\n\
- lsls r0, r1, 16\n\
- lsrs r3, r0, 16\n\
- cmp r3, 0x7\n\
- bls _08106BAE\n\
- ldr r2, [sp, 0x4]\n\
- lsls r0, r2, 16\n\
- lsrs r0, 16\n\
- cmp r0, 0x7\n\
- bls _08106BA4\n\
- add sp, 0xC\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\
- .syntax divided\n");
-}
-#endif
static void sub_8106C40(u8 arg0, u8 arg1)
{
diff --git a/src/data/graphics.c b/src/data/graphics.c
index 9cb0a83d6..0e98195cd 100644
--- a/src/data/graphics.c
+++ b/src/data/graphics.c
@@ -10,10 +10,10 @@ const u8 gMonBackPic_CircledQuestionMark[] = INCBIN_U8("graphics/pokemon/circled
const u16 gMonPalette_CircledQuestionMark[] = INCBIN_U16("graphics/pokemon/circled_question_mark/normal.gbapal.lz");
const u16 gMonShinyPalette_CircledQuestionMark[] = INCBIN_U16("graphics/pokemon/circled_question_mark/shiny.gbapal.lz");
-// The test menu debug battle tileset. This uses the old Crystal charmap and
-// rendering method (it uses tiles instead of text).
-// Oddly, the English version is in Japanese and the German version is in English.
-#if DEBUG_TRANSLATE || GERMAN
+// The test menu debug battle tileset. This uses the old Crystal
+// charmap and rendering method (it uses tiles instead of text).
+// The non-English releases use translated graphics.
+#if DEBUG_FIX || !ENGLISH
const u8 gDebugBattleCharmap_Gfx_lz[] = INCBIN_U8("graphics/debug/debug_battle_charmap_en.4bpp.lz");
const u8 gDebugBattleCharmap_Tilemap_lz[] = INCBIN_U8("graphics/debug/debug_battle_charmap_en.bin.lz");
const u8 gDebugBattleCharmap_Pal_lz[] = INCBIN_U8("graphics/debug/debug_battle_charmap_en.gbapal.lz");
diff --git a/src/debug/mori_debug_menu.c b/src/debug/mori_debug_menu.c
index dfa2487a5..d5cae8352 100644
--- a/src/debug/mori_debug_menu.c
+++ b/src/debug/mori_debug_menu.c
@@ -42,10 +42,10 @@ const u8 Text_39B28B[] = _("10000 steps");
const u8 Text_39B297[] = _("MOVE TUTOR");
const u8 Text_39B2A2[] = _("Breed an egg");
const u8 Text_39B2AF[] = _("Long name");
-#ifdef GERMAN
-const u8 Text_39B2B9[] = _("Delete {POKEBLOCK}");
+#if (ENGLISH && !DEBUG_FIX)
+const u8 Text_39B2B9[] = _("ポロックけす");
#else
-const u8 Text_39B2B9[] = DTR("ポロックけす", "Delete {POKEBLOCK}");
+const u8 Text_39B2B9[] = _("Delete {POKEBLOCK}");
#endif
const struct MenuAction gMoriDebugMenuActions[] =
diff --git a/src/debug/nakamura_debug_menu.c b/src/debug/nakamura_debug_menu.c
index 32ac57dc2..e8f40f08e 100644
--- a/src/debug/nakamura_debug_menu.c
+++ b/src/debug/nakamura_debug_menu.c
@@ -100,7 +100,9 @@ static bool8 TopMenu_HandleJoypad(void)
if (gMain.newKeys & A_BUTTON)
{
MenuFunc func = sNakamuraTopMenuActions[Menu_GetCursorPos()].func;
+#if !(ENGLISH && REVISION == 0)
Menu_DestroyCursor();
+#endif
return func();
}
@@ -739,6 +741,17 @@ static bool8 GiveAllDecorations(void)
// FISHING POINTS (Feebas)
// =======================================================
+#if (ENGLISH && REVISION == 0)
+static const u8 Str_843E58D[] = _(
+ "つりばしょ R119\n"
+ " Y1\n"
+ " Y2\n"
+ " Y3\n"
+ "エンカウントばしょ\n"
+ "\n"
+ "\n"
+ "じぶんのまえ");
+#else
static const u8 Str_843E58D[] = _(
"Fishing location R119\n"
" Y1\n"
@@ -748,6 +761,7 @@ static const u8 Str_843E58D[] = _(
"\n"
"\n"
"front of you");
+#endif
static u16 FishingPoints_CountFishingTilesInMapThird(u8 a0)
{
@@ -974,7 +988,13 @@ static void NakaGenderTest_AdjustLevel(u8 i, s8 dirn)
if (sNakaGenderTestData[i].level < 1)
sNakaGenderTestData[i].level = 100;
SetMonData(gPlayerParty + i, MON_DATA_EXP, gExperienceTables[gBaseStats[sNakaGenderTestData[i].species].growthRate] + sNakaGenderTestData[i].level);
+// TODO: check other revisions
+#if (ENGLISH && REVISION == 0)
+ CalculateMonStats(gPlayerParty + i);
+#else
+ // Same function, but without the Shedninja specific code.
Nakamura_NakaGenderTest_RecalcStats(gPlayerParty + i);
+#endif
}
}
@@ -1266,6 +1286,7 @@ static u8 SetPokeblock_CalcColor(u8 * dest, struct Pokeblock * pokeblock)
}
}
if (pkblk[firstNonzeroFlavor] >= pkblk[lastNonzeroFlavor])
+ // Suspiciously looks like a temp could've been here.
lastNonzeroFlavor = firstNonzeroFlavor;
if (lastNonzeroFlavor == 0)
diff --git a/src/debug/nohara_debug_menu.c b/src/debug/nohara_debug_menu.c
index 53501a52b..80527ad42 100644
--- a/src/debug/nohara_debug_menu.c
+++ b/src/debug/nohara_debug_menu.c
@@ -104,8 +104,13 @@ bool8 debug_sub_808F414(void)
}
}
+#if (ENGLISH && REVISION == 0)
+const u8 gUnknown_Debug_083C4980[] = _("ひみつがたを すぐみれるように ひだりキーで\n"
+ "データタイプを へんこうしますか? きりかえ");
+#else
const u8 gUnknown_Debug_083C4980[] = _("Want to change data type{CLEAR_TO 143}Press Left\n"
"to see secret type now?{CLEAR_TO 143}to switch");
+#endif
const u8 gUnknown_Debug_083C49CA[] = _("Choose the TV data you wish to\n"
"create to check a transmission。");
@@ -470,6 +475,11 @@ void debug_sub_808FA88(u8 a0, u8 a1)
u8 leadMonIndex = GetLeadMonIndex();
u8 channel;
+// This is garbage.
+#define GF_ACCESS(x) ((struct x*)(&(gSaveBlock1.tvShows[a0])))
+#define TERU_ACCESS(x) show->x
+#define DECLARE_TERU_POINTER TVShow * show = gSaveBlock1.tvShows + a0
+
gSaveBlock1.tvShows[a0].common.kind = a1;
gSaveBlock1.tvShows[a0].common.active = TRUE;
for (i = 0; i < 0x22; i++)
@@ -480,34 +490,135 @@ void debug_sub_808FA88(u8 a0, u8 a1)
{
case 2:
case 4:
- sub_80BE160(gSaveBlock1.tvShows + a0);
+ sub_80BE160(&gSaveBlock1.tvShows[a0]);
break;
case 3:
- sub_80BE138(gSaveBlock1.tvShows + a0);
+ sub_80BE138(&gSaveBlock1.tvShows[a0]);
break;
}
+#if (ENGLISH && REVISION == 0)
switch (a1)
{
case TVSHOW_FAN_CLUB_LETTER:
case TVSHOW_RECENT_HAPPENINGS:
{
- TVShow * show = gSaveBlock1.tvShows + a0;
+ GF_ACCESS(TVShowFanClubLetter)->species = SPECIES_BULBASAUR;
+ StringCopy(GF_ACCESS(TVShowFanClubLetter)->playerName, gSaveBlock2.playerName);
+ GF_ACCESS(TVShowFanClubLetter)->language = GAME_LANGUAGE;
+ break;
+ }
+ case TVSHOW_PKMN_FAN_CLUB_OPINIONS:
+ {
+ GF_ACCESS(TVShowFanclubOpinions)->var02 = 1;
+ StringCopy(GF_ACCESS(TVShowFanclubOpinions)->playerName, gSaveBlock2.playerName);
+ GetMonData(&gPlayerParty[leadMonIndex], MON_DATA_NICKNAME, GF_ACCESS(TVShowFanclubOpinions)->var10);
+ GF_ACCESS(TVShowFanclubOpinions)->language = GAME_LANGUAGE;
+ GF_ACCESS(TVShowFanclubOpinions)->var0E = GetMonData(&gPlayerParty[leadMonIndex], MON_DATA_LANGUAGE);
+ break;
+ }
+ case TVSHOW_UNKN_SHOWTYPE_04:
+ {
+ break;
+ }
+ case TVSHOW_NAME_RATER_SHOW:
+ {
+ GF_ACCESS(TVShowNameRaterShow)->species = GetMonData(&gPlayerParty[leadMonIndex], MON_DATA_SPECIES);
+ GF_ACCESS(TVShowNameRaterShow)->var1C = 1;
+ StringCopy(GF_ACCESS(TVShowNameRaterShow)->trainerName, gSaveBlock2.playerName);
+ GetMonData(&gPlayerParty[leadMonIndex], MON_DATA_NICKNAME, GF_ACCESS(TVShowNameRaterShow)->pokemonName);
+ GF_ACCESS(TVShowNameRaterShow)->language = GAME_LANGUAGE;
+ GF_ACCESS(TVShowNameRaterShow)->pokemonNameLanguage = GetMonData(&gPlayerParty[leadMonIndex], MON_DATA_LANGUAGE);
+ break;
+ }
+ case TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE:
+ {
+ GF_ACCESS(TVShowBravoTrainerPokemonProfiles)->species = SPECIES_BULBASAUR;
+ StringCopy(GF_ACCESS(TVShowBravoTrainerPokemonProfiles)->playerName, gSaveBlock2.playerName);
+ GetMonData(&gPlayerParty[leadMonIndex], MON_DATA_NICKNAME, GF_ACCESS(TVShowBravoTrainerPokemonProfiles)->pokemonNickname);
+ GF_ACCESS(TVShowBravoTrainerPokemonProfiles)->language = GAME_LANGUAGE;
+ GF_ACCESS(TVShowBravoTrainerPokemonProfiles)->var1f = GetMonData(&gPlayerParty[leadMonIndex], MON_DATA_LANGUAGE);
+ break;
+ }
+ case TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE:
+ {
+ GF_ACCESS(TVShowBravoTrainerBattleTowerSpotlight)->species = SPECIES_BULBASAUR;
+ GF_ACCESS(TVShowBravoTrainerBattleTowerSpotlight)->defeatedSpecies = SPECIES_BULBASAUR;
+ StringCopy(GF_ACCESS(TVShowBravoTrainerBattleTowerSpotlight)->trainerName, gSaveBlock2.playerName);
+ StringCopy(GF_ACCESS(TVShowBravoTrainerBattleTowerSpotlight)->enemyTrainerName, gSaveBlock2.playerName);
+ GF_ACCESS(TVShowBravoTrainerBattleTowerSpotlight)->language = GAME_LANGUAGE;
+ break;
+ }
+ case TVSHOW_MASS_OUTBREAK:
+ {
+ GF_ACCESS(TVShowMassOutbreak)->species = SPECIES_BULBASAUR;
+ GF_ACCESS(TVShowMassOutbreak)->daysLeft = 1;
+ break;
+ }
+ case TVSHOW_POKEMON_TODAY_CAUGHT:
+ {
+ GF_ACCESS(TVShowPokemonToday)->species = SPECIES_BULBASAUR;
+ StringCopy(GF_ACCESS(TVShowPokemonToday)->playerName, gSaveBlock2.playerName);
+ GetMonData(&gPlayerParty[leadMonIndex], MON_DATA_NICKNAME, GF_ACCESS(TVShowPokemonToday)->nickname);
+ GF_ACCESS(TVShowPokemonToday)->language = GAME_LANGUAGE;
+ GF_ACCESS(TVShowPokemonToday)->language2 = GetMonData(&gPlayerParty[leadMonIndex], MON_DATA_LANGUAGE);
+ break;
+ }
+ case TVSHOW_SMART_SHOPPER:
+ {
+ StringCopy(GF_ACCESS(TVShowSmartShopper)->playerName, gSaveBlock2.playerName);
+ GF_ACCESS(TVShowSmartShopper)->language = GAME_LANGUAGE;
+ break;
+ }
+ case TVSHOW_POKEMON_TODAY_FAILED:
+ {
+ GF_ACCESS(TVShowPokemonTodayFailed)->species = SPECIES_BULBASAUR;
+ GF_ACCESS(TVShowPokemonTodayFailed)->species2 = SPECIES_BULBASAUR;
+ StringCopy(GF_ACCESS(TVShowPokemonTodayFailed)->playerName, gSaveBlock2.playerName);
+ GF_ACCESS(TVShowPokemonTodayFailed)->language = GAME_LANGUAGE;
+ break;
+ }
+ case TVSHOW_FISHING_ADVICE:
+ {
+ GF_ACCESS(TVShowPokemonAngler)->var04 = SPECIES_BULBASAUR;
+ StringCopy(GF_ACCESS(TVShowPokemonAngler)->playerName, gSaveBlock2.playerName);
+ GF_ACCESS(TVShowPokemonAngler)->language = GAME_LANGUAGE;
+ break;
+ }
+ case TVSHOW_WORLD_OF_MASTERS:
+ {
+ GF_ACCESS(TVShowWorldOfMasters)->var04 = SPECIES_BULBASAUR;
+ GF_ACCESS(TVShowWorldOfMasters)->var08 = SPECIES_BULBASAUR;
+ StringCopy(GF_ACCESS(TVShowWorldOfMasters)->playerName, gSaveBlock2.playerName);
+ GF_ACCESS(TVShowWorldOfMasters)->language = GAME_LANGUAGE;
+ break;
+ }
+ }
+#else
+// Murakawa must have really hated working with GF code. He devised his own, less complicated
+// access method after US rev0. Also, this iteration of the code has his self inserts: TERUKUN,
+// TERU, and TERUDA. Who all love Wigglytuff.
+ switch (a1)
+ {
+ case TVSHOW_FAN_CLUB_LETTER:
+ case TVSHOW_RECENT_HAPPENINGS:
+ {
+ DECLARE_TERU_POINTER;
- show->fanclubLetter.species = SPECIES_BULBASAUR;
- StringCopy(gSaveBlock1.tvShows[a0].fanclubLetter.playerName, gSaveBlock2.playerName);
- show->fanclubLetter.language = GAME_LANGUAGE;
+ GF_ACCESS(TVShowFanClubLetter)->species = SPECIES_BULBASAUR; // Yet he didn't change Game Freak's lines.
+ StringCopy(GF_ACCESS(TVShowFanClubLetter)->playerName, gSaveBlock2.playerName);
+ TERU_ACCESS(fanclubLetter).language = GAME_LANGUAGE;
break;
}
case TVSHOW_PKMN_FAN_CLUB_OPINIONS:
{
- TVShow * show = gSaveBlock1.tvShows + a0;
+ DECLARE_TERU_POINTER;
- show->fanclubOpinions.var02 = 1;
- StringCopy(gSaveBlock1.tvShows[a0].fanclubOpinions.playerName, gSaveBlock2.playerName);
- GetMonData(gPlayerParty + leadMonIndex, MON_DATA_NICKNAME, gSaveBlock1.tvShows[a0].fanclubOpinions.var10);
- show->fanclubOpinions.language = GAME_LANGUAGE;
- show->fanclubOpinions.var0E = GetMonData(gPlayerParty + leadMonIndex, MON_DATA_LANGUAGE);
+ GF_ACCESS(TVShowFanclubOpinions)->var02 = 1;
+ StringCopy(GF_ACCESS(TVShowFanclubOpinions)->playerName, gSaveBlock2.playerName);
+ GetMonData(&gPlayerParty[leadMonIndex], MON_DATA_NICKNAME, GF_ACCESS(TVShowFanclubOpinions)->var10);
+ TERU_ACCESS(fanclubOpinions).language = GAME_LANGUAGE;
+ TERU_ACCESS(fanclubOpinions).var0E = GetMonData(&gPlayerParty[leadMonIndex], MON_DATA_LANGUAGE);
break;
}
case TVSHOW_UNKN_SHOWTYPE_04:
@@ -516,120 +627,118 @@ void debug_sub_808FA88(u8 a0, u8 a1)
}
case TVSHOW_NAME_RATER_SHOW:
{
- u16 species = GetMonData(gPlayerParty + leadMonIndex, MON_DATA_SPECIES);
- TVShow * show = gSaveBlock1.tvShows + a0;
+ u16 species = GetMonData(&gPlayerParty[leadMonIndex], MON_DATA_SPECIES);
+ DECLARE_TERU_POINTER;
- show->nameRaterShow.species = species;
- show->nameRaterShow.var1C = 1;
- StringCopy(gSaveBlock1.tvShows[a0].nameRaterShow.trainerName, gSaveBlock2.playerName);
- GetMonData(gPlayerParty + leadMonIndex, MON_DATA_NICKNAME, gSaveBlock1.tvShows[a0].nameRaterShow.pokemonName);
- show->nameRaterShow.language = GAME_LANGUAGE;
- show->nameRaterShow.pokemonNameLanguage = GetMonData(gPlayerParty + leadMonIndex, MON_DATA_LANGUAGE);
+ GF_ACCESS(TVShowNameRaterShow)->species = species;
+ GF_ACCESS(TVShowNameRaterShow)->var1C = 1;
+ StringCopy(GF_ACCESS(TVShowNameRaterShow)->trainerName, gSaveBlock2.playerName);
+ GetMonData(&gPlayerParty[leadMonIndex], MON_DATA_NICKNAME, GF_ACCESS(TVShowNameRaterShow)->pokemonName);
+ TERU_ACCESS(nameRaterShow).language = GAME_LANGUAGE;
+ TERU_ACCESS(nameRaterShow).pokemonNameLanguage = GetMonData(&gPlayerParty[leadMonIndex], MON_DATA_LANGUAGE);
break;
}
case TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE:
{
- TVShow * show = gSaveBlock1.tvShows + a0;
+ DECLARE_TERU_POINTER;
- show->bravoTrainer.species = SPECIES_BULBASAUR;
- StringCopy(gSaveBlock1.tvShows[a0].bravoTrainer.playerName, gSaveBlock2.playerName);
- GetMonData(gPlayerParty + leadMonIndex, MON_DATA_NICKNAME, gSaveBlock1.tvShows[a0].bravoTrainer.pokemonNickname);
- show->bravoTrainer.language = GAME_LANGUAGE;
- show->bravoTrainer.var1f = GetMonData(gPlayerParty + leadMonIndex, MON_DATA_LANGUAGE);
+ GF_ACCESS(TVShowBravoTrainerPokemonProfiles)->species = SPECIES_BULBASAUR;
+ StringCopy(GF_ACCESS(TVShowBravoTrainerPokemonProfiles)->playerName, gSaveBlock2.playerName);
+ GetMonData(&gPlayerParty[leadMonIndex], MON_DATA_NICKNAME, GF_ACCESS(TVShowBravoTrainerPokemonProfiles)->pokemonNickname);
+ TERU_ACCESS(bravoTrainer).language = GAME_LANGUAGE;
+ TERU_ACCESS(bravoTrainer).var1f = GetMonData(&gPlayerParty[leadMonIndex], MON_DATA_LANGUAGE);
break;
}
case TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE:
{
- TVShow * show = gSaveBlock1.tvShows + a0;
+ DECLARE_TERU_POINTER;
- show->bravoTrainerTower.species = SPECIES_BULBASAUR;
- show->bravoTrainerTower.defeatedSpecies = SPECIES_BULBASAUR;
- StringCopy(gSaveBlock1.tvShows[a0].bravoTrainerTower.trainerName, gSaveBlock2.playerName);
- StringCopy(gSaveBlock1.tvShows[a0].bravoTrainerTower.enemyTrainerName, gSaveBlock2.playerName);
- show->bravoTrainerTower.language = GAME_LANGUAGE;
+ GF_ACCESS(TVShowBravoTrainerBattleTowerSpotlight)->species = SPECIES_BULBASAUR;
+ GF_ACCESS(TVShowBravoTrainerBattleTowerSpotlight)->defeatedSpecies = SPECIES_BULBASAUR;
+ StringCopy(GF_ACCESS(TVShowBravoTrainerBattleTowerSpotlight)->trainerName, gSaveBlock2.playerName);
+ StringCopy(GF_ACCESS(TVShowBravoTrainerBattleTowerSpotlight)->enemyTrainerName, gSaveBlock2.playerName);
+ TERU_ACCESS(bravoTrainerTower).language = GAME_LANGUAGE;
break;
}
case TVSHOW_MASS_OUTBREAK:
{
- TVShow * show = gSaveBlock1.tvShows + a0;
-
- show->massOutbreak.species = SPECIES_BULBASAUR;
- show->massOutbreak.daysLeft = 1;
+ GF_ACCESS(TVShowMassOutbreak)->species = SPECIES_BULBASAUR;
+ GF_ACCESS(TVShowMassOutbreak)->daysLeft = 1;
break;
}
case TVSHOW_POKEMON_TODAY_CAUGHT:
{
- TVShow * show = gSaveBlock1.tvShows + a0;
+ DECLARE_TERU_POINTER;
u8 gUnknown_Debug_083C4C64[] = _("TERUKUN");
u8 gUnknown_Debug_083C4C6C[] = _("TERUTERUDA");
- show->pokemonToday.var12 = 255;
- StringCopy(show->pokemonToday.playerName, gUnknown_Debug_083C4C64);
- StringCopy(show->pokemonToday.nickname, gUnknown_Debug_083C4C6C);
- show->pokemonToday.ball = ITEM_PREMIER_BALL;
- show->pokemonToday.species = SPECIES_WIGGLYTUFF;
- show->pokemonToday.language = GAME_LANGUAGE;
- show->pokemonToday.language2 = GAME_LANGUAGE;
+ TERU_ACCESS(pokemonToday).var12 = 255;
+ StringCopy(TERU_ACCESS(pokemonToday).playerName, gUnknown_Debug_083C4C64);
+ StringCopy(TERU_ACCESS(pokemonToday).nickname, gUnknown_Debug_083C4C6C);
+ TERU_ACCESS(pokemonToday).ball = ITEM_PREMIER_BALL;
+ TERU_ACCESS(pokemonToday).species = SPECIES_WIGGLYTUFF;
+ TERU_ACCESS(pokemonToday).language = GAME_LANGUAGE;
+ TERU_ACCESS(pokemonToday).language2 = GAME_LANGUAGE;
break;
}
case TVSHOW_SMART_SHOPPER:
{
- TVShow * show = gSaveBlock1.tvShows + a0;
+ DECLARE_TERU_POINTER;
u8 gUnknown_Debug_083C4C64[] = _("TERUKUN");
int ii;
for (ii = 0; ii < 3; ii++)
- show->smartshopperShow.itemAmounts[ii] = 254;
- show->smartshopperShow.priceReduced = TRUE;
- show->smartshopperShow.shopLocation = 40;
+ TERU_ACCESS(smartshopperShow).itemAmounts[ii] = 254;
+ TERU_ACCESS(smartshopperShow).priceReduced = TRUE;
+ TERU_ACCESS(smartshopperShow).shopLocation = 40;
for (ii = 0; ii < 3; ii++)
- show->smartshopperShow.itemIds[ii] = ITEM_ENERGY_POWDER;
- StringCopy(show->smartshopperShow.playerName, gUnknown_Debug_083C4C64);
- show->smartshopperShow.language = GAME_LANGUAGE;
+ TERU_ACCESS(smartshopperShow).itemIds[ii] = ITEM_ENERGY_POWDER;
+ StringCopy(TERU_ACCESS(smartshopperShow).playerName, gUnknown_Debug_083C4C64);
+ TERU_ACCESS(smartshopperShow).language = GAME_LANGUAGE;
break;
}
case TVSHOW_POKEMON_TODAY_FAILED:
{
- TVShow * show = gSaveBlock1.tvShows + a0;
+ DECLARE_TERU_POINTER;
u8 gUnknown_Debug_083C4C64[] = _("TERUKUN");
- show->pokemonTodayFailed.species = SPECIES_WIGGLYTUFF;
- show->pokemonTodayFailed.species2 = SPECIES_WIGGLYTUFF;
- show->pokemonTodayFailed.var12 = 3;
- show->pokemonTodayFailed.var10 = 0xff;
- show->pokemonTodayFailed.var11 = 1;
- StringCopy(show->pokemonTodayFailed.playerName, gUnknown_Debug_083C4C64);
- show->pokemonTodayFailed.language = GAME_LANGUAGE;
+ TERU_ACCESS(pokemonTodayFailed).species = SPECIES_WIGGLYTUFF;
+ TERU_ACCESS(pokemonTodayFailed).species2 = SPECIES_WIGGLYTUFF;
+ TERU_ACCESS(pokemonTodayFailed).var12 = 3;
+ TERU_ACCESS(pokemonTodayFailed).var10 = 0xff;
+ TERU_ACCESS(pokemonTodayFailed).var11 = 1;
+ StringCopy(TERU_ACCESS(pokemonTodayFailed).playerName, gUnknown_Debug_083C4C64);
+ TERU_ACCESS(pokemonTodayFailed).language = GAME_LANGUAGE;
break;
}
case TVSHOW_FISHING_ADVICE:
{
- TVShow * show = gSaveBlock1.tvShows + a0;
+ DECLARE_TERU_POINTER;
u8 gUnknown_Debug_083C4C64[] = _("TERUKUN");
- show->pokemonAngler.var02 = 0xff;
- show->pokemonAngler.var03 = 0;
- show->pokemonAngler.var04 = 40;
- StringCopy(show->pokemonAngler.playerName, gUnknown_Debug_083C4C64);
- show->pokemonAngler.language = GAME_LANGUAGE;
+ TERU_ACCESS(pokemonAngler).var02 = 0xff;
+ TERU_ACCESS(pokemonAngler).var03 = 0;
+ TERU_ACCESS(pokemonAngler).var04 = 40;
+ StringCopy(TERU_ACCESS(pokemonAngler).playerName, gUnknown_Debug_083C4C64);
+ TERU_ACCESS(pokemonAngler).language = GAME_LANGUAGE;
break;
}
case TVSHOW_WORLD_OF_MASTERS:
{
- TVShow * show = gSaveBlock1.tvShows + a0;
+ DECLARE_TERU_POINTER;
u8 gUnknown_Debug_083C4C64[] = _("TERUKUN");
- show->worldOfMasters.var02 = 0xffff;
- show->worldOfMasters.var06 = 0xffff;
- show->worldOfMasters.var04 = 40;
- show->worldOfMasters.var08 = 40;
- show->worldOfMasters.var0a = 3;
- StringCopy(show->worldOfMasters.playerName, gUnknown_Debug_083C4C64);
- show->worldOfMasters.language = GAME_LANGUAGE;
+ TERU_ACCESS(worldOfMasters).var02 = 0xffff;
+ TERU_ACCESS(worldOfMasters).var06 = 0xffff;
+ TERU_ACCESS(worldOfMasters).var04 = 40;
+ TERU_ACCESS(worldOfMasters).var08 = 40;
+ TERU_ACCESS(worldOfMasters).var0a = 3;
+ StringCopy(TERU_ACCESS(worldOfMasters).playerName, gUnknown_Debug_083C4C64);
+ TERU_ACCESS(worldOfMasters).language = GAME_LANGUAGE;
break;
}
-
}
+#endif
}
bool8 debug_sub_808FEBC(void)
diff --git a/src/debug/start_menu_debug.c b/src/debug/start_menu_debug.c
index 940f21ac7..ef83fc3f0 100644
--- a/src/debug/start_menu_debug.c
+++ b/src/debug/start_menu_debug.c
@@ -51,7 +51,8 @@ extern void Debug_SetUpFieldMove_Cut(void);
extern void Debug_SetUpFieldMove_SecretPower(void);
void debug_sub_8076BB4(u8);
-void debug_sub_8077CF4(u8 x, u8 y);
+void DebugMenu_DisplayBuildDate(u8 x, u8 y);
+void DebugMenu_DisplayContinuousDate(u8 x, u8 y);
u8 DebugMenu_807706C(void);
u8 DebugMenu_807709C(void);
void DebugMenu_807719C(void);
@@ -133,7 +134,9 @@ u8 DebugMenu_EndSequenceDemo(void);
u8 DebugMenu_RandomNumberTest(void);
u8 DebugMenu_MeTooBackupMan(void);
u8 DebugMenu_OpenMurakawa(void);
+#if !(ENGLISH && REVISION == 0)
u8 DebugMenu_OpenKiwa(void);
+#endif
u8 DebugMenu_8076CBC(void);
u8 DebugMenu_8076CC0(void);
u8 DebugMenu_8076CD4(void);
@@ -204,7 +207,9 @@ const u8 Str_839B972[] = _("End sequence demo");
const u8 Str_839B984[] = _("Random number test");
const u8 Str_839B997[] = _("Me-too BackupMan");
const u8 Str_839B9A8[] = _("MURAKAWA");
+#if !(ENGLISH && REVISION == 0)
const u8 Str_839B9B1[] = _("KINA(FONT)");
+#endif
const struct MenuAction gDebug0x839B9BC[] =
{
@@ -260,18 +265,34 @@ const struct MenuAction gDebug0x839B9BC[] =
{ Str_839B984, DebugMenu_RandomNumberTest },
{ Str_839B997, DebugMenu_MeTooBackupMan },
{ Str_839B9A8, DebugMenu_OpenMurakawa },
+#if !(ENGLISH && REVISION == 0)
{ Str_839B9B1, DebugMenu_OpenKiwa },
+#endif
};
+#if (ENGLISH && REVISION == 0)
+const u8 gUnknown_Debug_839BB64[] =
+{
+ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x00, 0x0b, 0x0c, 0x0d, 0x0e, 0x1f, 0x12, 0x13, 0x00, 0x08, 0x09, 0x0a, 0x1e, 0x10, 0x24, 0x0f, 0x00, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x00,
+ 0x1c, 0x1d, 0x14, 0x20, 0x21, 0x22, 0x23, 0x00, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x00, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x00, 0x11, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+#else
const u8 gUnknown_Debug_839BB64[] =
{
0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x00, 0x0b, 0x0c, 0x0d, 0x0e, 0x1f, 0x12, 0x13, 0x00, 0x08, 0x09, 0x0a, 0x1e, 0x10, 0x24, 0x0f, 0x00, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x00,
0x1c, 0x1d, 0x14, 0x20, 0x21, 0x22, 0x23, 0x00, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x00, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x00, 0x11, 0x33, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00,
};
+#endif
-const u8 gUnknown_Debug_0839BBA4[] = _("Debugging Version");
-const u8 gUnknown_Debug_0839BBB6[] = _("{VERSION} Version");
-const u8 gUnknown_Debug_0839BBC1[] = _("Normal RTC compatible");
+#if ENGLISH
+const u8 gDebugCreatedString[] = _("Created");
+const u8 gDebugContinuousString[] = _("Continuous play\n"
+ "available from");
+#else
+const u8 gDebugRomString[] = _("Debugging Version");
+#endif
+const u8 gDebugVersionString[] = _("{VERSION} Version");
+const u8 gDebugRTCString[] = _("Normal RTC compatible");
const u8 gTestMenu_TestMenuHeaderText[] = DTR("か の じっけん", "TEST MENU"); // 科の実験 (Test section)
const u8 gTestMenu_Test2Text[] = DTR("じっけん2", "Test2");
@@ -345,6 +366,7 @@ extern const u8 Str_839BD4C[];
static u8 gUnknown_030006B8;
+#ifndef ENGLISH
struct DebugBuildDateInfo {
s32 max;
s32 digitMultiplier;
@@ -353,6 +375,7 @@ struct DebugBuildDateInfo {
};
static const struct DebugBuildDateInfo *gDebugBuildDate;
+#endif
static u8 gUnknown_030006C0;
static u8 gUnknown_030006C1;
static const u8 * gUnknown_030006C4;
@@ -382,10 +405,17 @@ void debug_sub_8076B4C(void)
// Initializes test menu
void debug_sub_8076B68(void)
{
- Menu_PrintText(gUnknown_Debug_0839BBB6, 1, 1);
- Menu_PrintText(gUnknown_Debug_0839BBC1, 1, 3);
- Menu_PrintText(gUnknown_Debug_0839BBA4, 1, 9);
- debug_sub_8077CF4(4, 11);
+ Menu_PrintText(gDebugVersionString, 1, 1);
+ Menu_PrintText(gDebugRTCString, 1, 3);
+#if ENGLISH
+ Menu_PrintText(gDebugCreatedString, 1, 7);
+ DebugMenu_DisplayBuildDate(3, 9);
+ Menu_PrintText(gDebugContinuousString, 1, 12);
+ DebugMenu_DisplayContinuousDate(3, 16);
+#else
+ Menu_PrintText(gDebugRomString, 1, 9);
+ DebugMenu_DisplayBuildDate(4, 11);
+#endif
debug_sub_8076AC8(0);
CreateTask(debug_sub_8076BB4, 1);
}
@@ -699,6 +729,9 @@ void DebugMenu_8077048(void)
u8 DebugMenu_807706C(void)
{
+#if (ENGLISH && REVISION == 0)
+ gUnknown_Debug_Murakawa2 = 1;
+#endif
InitMenuWindow(&gMenuTextWindowTemplate);
DebugMenu_8077004();
DebugMenu_807719C();
@@ -710,6 +743,8 @@ u8 DebugMenu_807706C(void)
u8 DebugMenu_807709C(void)
{
+ u8 actionRet;
+
if (gMain.newKeys & DPAD_UP)
{
PlaySE(SE_SELECT);
@@ -743,11 +778,21 @@ u8 DebugMenu_807709C(void)
if (gMain.newKeys & A_BUTTON)
{
PlaySE(SE_SELECT);
- return gDebug0x839B9BC[gUnknown_030006C4[gUnknown_030006C0]].func();
+ actionRet = gDebug0x839B9BC[gUnknown_030006C4[gUnknown_030006C0]].func();
+// TODO: see if this is in rev1+
+#if (ENGLISH && REVISION == 0)
+ if (actionRet == 1)
+ gUnknown_Debug_Murakawa2 = 0;
+#endif
+ return actionRet;
}
if (gMain.newKeys & (B_BUTTON | START_BUTTON))
{
CloseMenu();
+// TODO: see if this is in rev1+
+#if (ENGLISH && REVISION == 0)
+ gUnknown_Debug_Murakawa2 = 0;
+#endif
return TRUE;
}
return FALSE;
@@ -1389,15 +1434,47 @@ u8 DebugMenu_8077C14(void)
const u8 Str_839BFDC[] = DTR(" じかん ふん びょう", " HOURS MINUTES SECONDS");
+#if ENGLISH
+const u8 ContinousDateTime[] = "2002 08 01 20:25";
+#else
static const struct DebugBuildDateInfo gDebugBuildDateInfo[] = {
{ 99, 10, 2, 23 },
{ 99, 10, 2, 26 }
};
+#endif
// Parses the version code in a highly inefficient and unsafe way.
-void DebugMenu_ConvertBuildDate(const char *buildDateStr, u8 *out)
+void DebugMenu_ConvertBuildDate(const u8 *buildDateStr, u8 *out)
{
- int i;
+ s32 i;
+#if ENGLISH
+ u16 year;
+ u16 month;
+ u16 day;
+ u16 hour;
+ u16 minutes;
+
+ for (year = 0, i = 0; i < 2; i++)
+ {
+ year *= 10;
+ year += (buildDateStr[i+2] - '0');
+ }
+
+ month = (buildDateStr[5] - '0') * 10 + (buildDateStr[6] - '0');
+ day = (buildDateStr[8] - '0') * 10 + (buildDateStr[9] - '0');
+ hour = (buildDateStr[11] - '0') * 10 + (buildDateStr[12] - '0');
+ minutes = (buildDateStr[14] - '0') * 10 + (buildDateStr[15] - '0');
+
+ out = ConvertIntToDecimalStringN(out, year, STR_CONV_MODE_LEADING_ZEROS, 2);
+ *out++ = CHAR_SLASH;
+ out = ConvertIntToDecimalStringN(out, month, STR_CONV_MODE_LEADING_ZEROS, 2);
+ *out++ = CHAR_SLASH;
+ out = ConvertIntToDecimalStringN(out, day, STR_CONV_MODE_LEADING_ZEROS, 2);
+ *out++ = CHAR_SPACE;
+ out = ConvertIntToDecimalStringN(out, hour, STR_CONV_MODE_LEADING_ZEROS, 2);
+ *out++ = CHAR_COLON;
+ out = ConvertIntToDecimalStringN(out, minutes, STR_CONV_MODE_LEADING_ZEROS, 2);
+#else
// Prevents register allocation swap
// Intended: r7 = out, r6 = gDebugBuildDate->numDigits
// Observed: r6 = out, r7 = gDebugBuildDate->numDigits
@@ -1408,8 +1485,8 @@ void DebugMenu_ConvertBuildDate(const char *buildDateStr, u8 *out)
*out++ = CHAR_SPACE;
for (i = 0; i < 2; i++, gDebugBuildDate++)
{
- int j;
- int mul;
+ s32 j;
+ s32 mul;
u32 date = 0;
for (mul = gDebugBuildDate->digitMultiplier, j = 0; j < gDebugBuildDate->numDigits; j++, mul /= 10)
date += (buildDateStr[gDebugBuildDate->offset + j] - '0') * mul;
@@ -1421,14 +1498,23 @@ void DebugMenu_ConvertBuildDate(const char *buildDateStr, u8 *out)
if (out[0] > 0xf6) // prevent special characters
out[0] = 0xf6;
out[1] = EOS;
+#endif
}
-void debug_sub_8077CF4(u8 x, u8 y)
+void DebugMenu_DisplayBuildDate(u8 x, u8 y)
{
DebugMenu_ConvertBuildDate(BuildDateTime, gStringVar4);
Menu_PrintText(gStringVar4, x, y);
}
+#if ENGLISH
+void DebugMenu_DisplayContinuousDate(u8 x, u8 y)
+{
+ DebugMenu_ConvertBuildDate(ContinousDateTime, gStringVar4);
+ Menu_PrintText(gStringVar4, x, y);
+}
+#endif
+
void DebugMenu_8077D24(const struct MenuAction *menuAction, u8 width, u8 itemCount)
{
Menu_EraseScreen();
@@ -2591,14 +2677,22 @@ u8 DebugMenu_PTime(void)
return TRUE;
}
+#if (ENGLISH && REVISION == 0)
+const u8 gDebug0x839C60C[] = _("switch DISP mode");
+#else
const u8 gDebug0x839C60C[] = _("Set FLASH ERR");
+#endif
void DebugMenu_8079058(u8 taskId)
{
switch (gTasks[taskId].data[0])
{
case 0:
+#if (ENGLISH && REVISION == 0)
+ gUnknown_Debug_Murakawa2 = 1;
+#else
gUnknown_Debug_03004BD0 = 0;
+#endif
Menu_DisplayDialogueFrame();
gTasks[taskId].data[0]++;
break;
@@ -2619,6 +2713,9 @@ void DebugMenu_8079058(u8 taskId)
gUnknown_Debug_03004BD0 = 0;
break;
}
+#if (ENGLISH && REVISION == 0)
+ gUnknown_Debug_Murakawa2 = 0;
+#endif
Menu_EraseScreen();
ScriptContext2_Disable();
DestroyTask(taskId);
@@ -2634,13 +2731,17 @@ u8 DebugMenu_OpenMurakawa(void)
return TRUE;
}
-const u8 Str_839C61A[] = _("abcde; abcde: ABCDE; ABCDE:\p"
- "Tableaux des verbes du 2{SUPER_E} groupe.\p"
- "La1{SUPER_RE} chose à apprendre c'est de lire.\p"
- "Tableaux des verbes du 1{SUPER_ER} groupe.\p"
- "“あいうえおかきくけコさしすせそたちつてとな”\n"
- "<にぬネのはひふへほマみむめもやゆよらりるれろわャッ>\p"
- "をんゃゅょアイウエオカキクケサシスルレロワ,");
+#if !(ENGLISH && REVISION == 0)
+const u8 Str_839C61A[] = _(
+#if GERMAN
+ "abcde; abcde: ABCDE; ABCDE:\p"
+#endif
+ "Tableaux des verbes du 2{SUPER_E} groupe.\p"
+ "La1{SUPER_RE} chose à apprendre c'est de lire.\p"
+ "Tableaux des verbes du 1{SUPER_ER} groupe.\p"
+ "“あいうえおかきくけコさしすせそたちつてとな”\n"
+ "<にぬネのはひふへほマみむめもやゆよらりるれろわャッ>\p"
+ "をんゃゅょアイウエオカキクケサシスルレロワ,");
void DebugMenu_8079110(u8 taskId)
{
@@ -2672,5 +2773,6 @@ u8 DebugMenu_OpenKiwa(void)
ScriptContext2_Enable();
// return TRUE;
}
+#endif
#endif
diff --git a/src/debug/taya_debug_window.c b/src/debug/taya_debug_window.c
index 0b3afa28d..b76e5f794 100644
--- a/src/debug/taya_debug_window.c
+++ b/src/debug/taya_debug_window.c
@@ -439,37 +439,37 @@ void debug_sub_8090C44(void)
Menu_PrintText(eTayaLuckyNumber.charbuf, 1, 3);
}
-#ifdef NONMATCHING
-// mayday mayday
bool8 debug_sub_8090C88(void)
{
bool8 r8 = TRUE;
- if (gMain.newKeys & DPAD_LEFT && eTayaLuckyNumber.digit != 0)
- {
- eTayaLuckyNumber.digit--;
- }
- else if (gMain.newKeys & DPAD_RIGHT && eTayaLuckyNumber.digit < 4)
- {
- eTayaLuckyNumber.digit++;
- }
- else
+ do
{
+ if (gMain.newKeys & DPAD_LEFT && eTayaLuckyNumber.digit != 0)
+ {
+ eTayaLuckyNumber.digit--;
+ break;
+ }
+ if (gMain.newKeys & DPAD_RIGHT && eTayaLuckyNumber.digit < 4)
+ {
+ eTayaLuckyNumber.digit++;
+ break;
+ }
if (gMain.newAndRepeatedKeys & DPAD_UP)
{
u8 r4;
eTayaLuckyNumber.tempLuckyId = eTayaLuckyNumber.curLuckyId;
- eTayaLuckyNumber.charbuf0 = 10000;
+ eTayaLuckyNumber.digitDeltaMagnitude = 10000;
for (r4 = 0; r4 < eTayaLuckyNumber.digit; r4++)
- eTayaLuckyNumber.charbuf0 /= 10;
- eTayaLuckyNumber.tempLuckyId += eTayaLuckyNumber.charbuf0;
+ eTayaLuckyNumber.digitDeltaMagnitude /= 10;
+ eTayaLuckyNumber.tempLuckyId += eTayaLuckyNumber.digitDeltaMagnitude;
if (eTayaLuckyNumber.tempLuckyId > 0xFFFF)
eTayaLuckyNumber.tempLuckyId = 0xFFFF;
if (eTayaLuckyNumber.curLuckyId != eTayaLuckyNumber.tempLuckyId)
{
eTayaLuckyNumber.curLuckyId = eTayaLuckyNumber.tempLuckyId;
- goto check;
+ break;
}
}
if (gMain.newAndRepeatedKeys & DPAD_DOWN)
@@ -477,16 +477,16 @@ bool8 debug_sub_8090C88(void)
u8 r4;
eTayaLuckyNumber.tempLuckyId = eTayaLuckyNumber.curLuckyId;
- eTayaLuckyNumber.charbuf0 = 10000;
+ eTayaLuckyNumber.digitDeltaMagnitude = 10000;
for (r4 = 0; r4 < eTayaLuckyNumber.digit; r4++)
- eTayaLuckyNumber.charbuf0 /= 10;
- eTayaLuckyNumber.tempLuckyId -= eTayaLuckyNumber.charbuf0;
+ eTayaLuckyNumber.digitDeltaMagnitude /= 10;
+ eTayaLuckyNumber.tempLuckyId -= eTayaLuckyNumber.digitDeltaMagnitude;
if (eTayaLuckyNumber.tempLuckyId < 0)
eTayaLuckyNumber.tempLuckyId = 0;
if (eTayaLuckyNumber.curLuckyId != eTayaLuckyNumber.tempLuckyId)
{
eTayaLuckyNumber.curLuckyId = eTayaLuckyNumber.tempLuckyId;
- goto check;
+ break;
}
}
if (gMain.newKeys & B_BUTTON)
@@ -501,193 +501,12 @@ bool8 debug_sub_8090C88(void)
return TRUE;
}
r8 = FALSE;
- }
+ } while (0);
-check:
if (r8)
debug_sub_8090C44();
return FALSE;
}
-#else
-NAKED bool8 debug_sub_8090C88(void)
-{
- asm("\tpush\t{r4, r5, r6, r7, lr}\n"
- "\tmov\tr7, r8\n"
- "\tpush\t{r7}\n"
- "\tadd\tsp, sp, #0xfffffffc\n"
- "\tmov\tr0, #0x1\n"
- "\tmov\tr8, r0\n"
- "\tldr\tr2, ._59 @ gMain\n"
- "\tldrh\tr1, [r2, #0x2e]\n"
- "\tmov\tr0, #0x20\n"
- "\tand\tr0, r0, r1\n"
- "\tadd\tr3, r2, #0\n"
- "\tcmp\tr0, #0\n"
- "\tbeq\t._57\t@cond_branch\n"
- "\tldr\tr1, ._59 + 4 @ gSharedMem\n"
- "\tldrb\tr0, [r1]\n"
- "\tcmp\tr0, #0\n"
- "\tbeq\t._57\t@cond_branch\n"
- "\tsub\tr0, r0, #0x1\n"
- "\tstrb\tr0, [r1]\n"
- "\tb\t._62\n"
- "._60:\n"
- "\t.align\t2, 0\n"
- "._59:\n"
- "\t.word\tgMain\n"
- "\t.word\tgSharedMem\n"
- "._67:\n"
- "\tadd\tr0, r0, #0x1\n"
- "\tstrb\tr0, [r1]\n"
- "\tb\t._62\n"
- "._77:\n"
- "\tstrh\tr1, [r7, #0x8]\n"
- "\tb\t._62\n"
- "._79:\n"
- "\tldr\tr0, ._64 @ gSharedMem\n"
- "\tldrh\tr0, [r0, #0x8]\n"
- "\tbl\tSetLotteryNumber16_Unused\n"
- "._78:\n"
- "\tbl\tCloseMenu\n"
- "\tmov\tr0, #0x1\n"
- "\tb\t._63\n"
- "._65:\n"
- "\t.align\t2, 0\n"
- "._64:\n"
- "\t.word\tgSharedMem\n"
- "._57:\n"
- "\tldrh\tr1, [r3, #0x2e]\n"
- "\tmov\tr0, #0x10\n"
- "\tand\tr0, r0, r1\n"
- "\tcmp\tr0, #0\n"
- "\tbeq\t._66\t@cond_branch\n"
- "\tldr\tr1, ._81 @ gSharedMem\n"
- "\tldrb\tr0, [r1]\n"
- "\tcmp\tr0, #0x3\n"
- "\tbls\t._67\t@cond_branch\n"
- "._66:\n"
- "\tldrh\tr1, [r3, #0x30]\n"
- "\tmov\tr0, #0x40\n"
- "\tand\tr0, r0, r1\n"
- "\tcmp\tr0, #0\n"
- "\tbeq\t._68\t@cond_branch\n"
- "\tldr\tr0, ._81 @ gSharedMem\n"
- "\tldrh\tr1, [r0, #0x8]\n"
- "\tstr\tr1, [r0, #0xc]\n"
- "\tldr\tr1, ._81 + 4 @ 0x2710\n"
- "\tstrh\tr1, [r0, #0x10]\n"
- "\tmov\tr4, #0x0\n"
- "\tldrb\tr1, [r0]\n"
- "\tadd\tr7, r0, #0\n"
- "\tcmp\tr4, r1\n"
- "\tbcs\t._69\t@cond_branch\n"
- "\tadd\tr5, r7, #0\n"
- "\tadd\tr6, r1, #0\n"
- "._70:\n"
- "\tldrh\tr0, [r5, #0x10]\n"
- "\tmov\tr1, #0xa\n"
- "\tstr\tr3, [sp]\n"
- "\tbl\t__udivsi3\n"
- "\tstrh\tr0, [r5, #0x10]\n"
- "\tadd\tr0, r4, #1\n"
- "\tlsl\tr0, r0, #0x18\n"
- "\tlsr\tr4, r0, #0x18\n"
- "\tldr\tr3, [sp]\n"
- "\tcmp\tr4, r6\n"
- "\tbcc\t._70\t@cond_branch\n"
- "._69:\n"
- "\tldrh\tr1, [r7, #0x10]\n"
- "\tldr\tr0, [r7, #0xc]\n"
- "\tadd\tr0, r0, r1\n"
- "\tstr\tr0, [r7, #0xc]\n"
- "\tldr\tr1, ._81 + 8 @ 0xffff\n"
- "\tcmp\tr0, r1\n"
- "\tble\t._71\t@cond_branch\n"
- "\tstr\tr1, [r7, #0xc]\n"
- "._71:\n"
- "\tldrh\tr0, [r7, #0x8]\n"
- "\tldr\tr1, [r7, #0xc]\n"
- "\tcmp\tr0, r1\n"
- "\tbne\t._77\t@cond_branch\n"
- "._68:\n"
- "\tldrh\tr1, [r3, #0x30]\n"
- "\tmov\tr0, #0x80\n"
- "\tand\tr0, r0, r1\n"
- "\tcmp\tr0, #0\n"
- "\tbeq\t._73\t@cond_branch\n"
- "\tldr\tr0, ._81 @ gSharedMem\n"
- "\tldrh\tr1, [r0, #0x8]\n"
- "\tstr\tr1, [r0, #0xc]\n"
- "\tldr\tr1, ._81 + 4 @ 0x2710\n"
- "\tstrh\tr1, [r0, #0x10]\n"
- "\tmov\tr4, #0x0\n"
- "\tldrb\tr1, [r0]\n"
- "\tadd\tr7, r0, #0\n"
- "\tcmp\tr4, r1\n"
- "\tbcs\t._74\t@cond_branch\n"
- "\tadd\tr5, r7, #0\n"
- "\tadd\tr6, r1, #0\n"
- "._75:\n"
- "\tldrh\tr0, [r5, #0x10]\n"
- "\tmov\tr1, #0xa\n"
- "\tstr\tr3, [sp]\n"
- "\tbl\t__udivsi3\n"
- "\tstrh\tr0, [r5, #0x10]\n"
- "\tadd\tr0, r4, #1\n"
- "\tlsl\tr0, r0, #0x18\n"
- "\tlsr\tr4, r0, #0x18\n"
- "\tldr\tr3, [sp]\n"
- "\tcmp\tr4, r6\n"
- "\tbcc\t._75\t@cond_branch\n"
- "._74:\n"
- "\tadd\tr2, r7, #0\n"
- "\tldrh\tr1, [r2, #0x10]\n"
- "\tldr\tr0, [r2, #0xc]\n"
- "\tsub\tr0, r0, r1\n"
- "\tstr\tr0, [r2, #0xc]\n"
- "\tcmp\tr0, #0\n"
- "\tbge\t._76\t@cond_branch\n"
- "\tmov\tr0, #0x0\n"
- "\tstr\tr0, [r2, #0xc]\n"
- "._76:\n"
- "\tldrh\tr0, [r2, #0x8]\n"
- "\tldr\tr1, [r2, #0xc]\n"
- "\tcmp\tr0, r1\n"
- "\tbne\t._77\t@cond_branch\n"
- "._73:\n"
- "\tldrh\tr2, [r3, #0x2e]\n"
- "\tmov\tr0, #0x2\n"
- "\tand\tr0, r0, r2\n"
- "\tcmp\tr0, #0\n"
- "\tbne\t._78\t@cond_branch\n"
- "\tmov\tr0, #0x1\n"
- "\tand\tr0, r0, r2\n"
- "\tcmp\tr0, #0\n"
- "\tbne\t._79\t@cond_branch\n"
- "\tmov\tr0, #0x0\n"
- "\tmov\tr8, r0\n"
- "._62:\n"
- "\tmov\tr0, r8\n"
- "\tcmp\tr0, #0\n"
- "\tbeq\t._80\t@cond_branch\n"
- "\tbl\tdebug_sub_8090C44\n"
- "._80:\n"
- "\tmov\tr0, #0x0\n"
- "._63:\n"
- "\tadd\tsp, sp, #0x4\n"
- "\tpop\t{r3}\n"
- "\tmov\tr8, r3\n"
- "\tpop\t{r4, r5, r6, r7}\n"
- "\tpop\t{r1}\n"
- "\tbx\tr1\n"
- "._82:\n"
- "\t.align\t2, 0\n"
- "._81:\n"
- "\t.word\tgSharedMem\n"
- "\t.word\t0x2710\n"
- "\t.word\t0xffff");
-}
-#endif // NONMATCHING
bool8 TayaDebugMenu_PKMNLottery(void)
{
diff --git a/src/debug/tomomichi_debug_menu.c b/src/debug/tomomichi_debug_menu.c
index 5d30cf2c6..64da15dc7 100644
--- a/src/debug/tomomichi_debug_menu.c
+++ b/src/debug/tomomichi_debug_menu.c
@@ -245,12 +245,21 @@ static const struct MenuAction sMenuActions_TopMenu[] = {
{sString_ControlWORK, ControlWorks},
};
+#if (ENGLISH && REVISION == 0)
+static const u8 sString_ContestMenuTitle[] = _("コンテスト");
+
+static const u8 sString_Contest_PokemonNo[] = _("ポケモンナンバー");
+static const u8 sString_Contest_Personality[] = _("こせいらんすう");
+static const u8 sString_Contest_Type[] = _("コンテストしゅるい");
+static const u8 sString_Contest_PokeArt[] = _("ひょうじ");
+#else
static const u8 sString_ContestMenuTitle[] = _("Contest");
static const u8 sString_Contest_PokemonNo[] = _("Pokémon No.");
static const u8 sString_Contest_Personality[] = _("ID rnd. digit");
static const u8 sString_Contest_Type[] = _("Contest Type");
static const u8 sString_Contest_PokeArt[] = _("Poké Art");
+#endif
static const struct MenuAction sMenuActions_ContestPicTest[] = {
{sString_Contest_PokemonNo, DummyMenuAction},
@@ -259,12 +268,21 @@ static const struct MenuAction sMenuActions_ContestPicTest[] = {
{sString_Contest_PokeArt, ContestGraphics_Show}
};
+#if (ENGLISH && REVISION == 0)
+static const u8 sString_Contest_ArtMuseumTitle[] = _("びじゅつかん");
+
+static const u8 sString_Contest_ArtMuseum_PokemonNo[] = _("ポケモンナンバー");
+static const u8 sString_Contest_ArtMuseum_Personality[] = _("こせいらんすう");
+static const u8 sString_Contest_ArtMuseum_Type[] = _("タイトルしゅるい");
+static const u8 sString_Contest_ArtMuseum_PokeArt[] = _("ひょうじ");
+#else
static const u8 sString_Contest_ArtMuseumTitle[] = _("Art Mus.");
static const u8 sString_Contest_ArtMuseum_PokemonNo[] = _("Pokémon No.");
static const u8 sString_Contest_ArtMuseum_Personality[] = _("ID rnd. digit");
static const u8 sString_Contest_ArtMuseum_Type[] = _("Title Type");
static const u8 sString_Contest_ArtMuseum_PokeArt[] = _("Poké Art");
+#endif
static const struct MenuAction sMenuActions_ArtMuseumPicTest[] = {
{sString_Contest_ArtMuseum_PokemonNo, DummyMenuAction},
@@ -273,12 +291,21 @@ static const struct MenuAction sMenuActions_ArtMuseumPicTest[] = {
{sString_Contest_ArtMuseum_PokeArt, MuseumGraphics_Show}
};
+#if (ENGLISH && REVISION == 0)
+static const u8 sString_Contest_PreviewTitle[] = _("プレビュー");
+
+static const u8 sString_Contest_Preview_PokemonNo[] = _("ポケモンナンバー");
+static const u8 sString_Contest_Preview_Personality[] = _("こせいらんすう");
+static const u8 sString_Contest_Preview_Type[] = _("しゅるい");
+static const u8 sString_Contest_Preview_PokeArt[] = _("ひょうじ");
+#else
static const u8 sString_Contest_PreviewTitle[] = _("Preview");
static const u8 sString_Contest_Preview_PokemonNo[] = _("Pokémon No.");
static const u8 sString_Contest_Preview_Personality[] = _("ID rnd. digit");
static const u8 sString_Contest_Preview_Type[] = _("Type");
static const u8 sString_Contest_Preview_PokeArt[] = _("Poké Art");
+#endif
static const struct MenuAction sMenuActions_PreviewPicTest[] = {
{sString_Contest_Preview_PokemonNo, DummyMenuAction},
@@ -287,10 +314,19 @@ static const struct MenuAction sMenuActions_PreviewPicTest[] = {
{sString_Contest_Preview_PokeArt, PreviewGraphics_Show}
};
+#if (ENGLISH && REVISION == 0)
+static const u8 sString_TrickRelated[] = _("カラクリかんれん");
+#else
static const u8 sString_TrickRelated[] = _("Trick related");
+#endif
static const u8 sString_TrickRelated_Level[] = _("Level");
+
+#if (ENGLISH && REVISION == 0)
+static const u8 sString_TrickRelated_TrickMaster[] = _("MASTER");
+#else
static const u8 sString_TrickRelated_TrickMaster[] = _("Trick Master");
+#endif
static const struct MenuAction sMenuActions_TrickRelated[] = {
{sString_TrickRelated_Level, TrickRelated_Level_InitSubmenu},
@@ -1841,6 +1877,17 @@ static const u16 gUnknown_Debug_083C478E[][9] = {
{VAR_TEMP_9, VAR_TEMP_A, VAR_TEMP_B, VAR_TEMP_C, VAR_TEMP_D, VAR_TEMP_E, VAR_TEMP_F}
};
+#if (ENGLISH && REVISION == 0)
+static const u8 gUnknown_Debug_083C47B2[] = _("レベル");
+static const u8 gUnknown_Debug_083C47B8[] = _("シーン1");
+static const u8 gUnknown_Debug_083C47BF[] = _("シーン2");
+static const u8 gUnknown_Debug_083C47C6[] = _("シーン3");
+static const u8 gUnknown_Debug_083C47CD[] = _("シーン4");
+static const u8 gUnknown_Debug_083C47D4[] = _("シーン5");
+static const u8 gUnknown_Debug_083C47DB[] = _("シーン6");
+static const u8 gUnknown_Debug_083C47E2[] = _("シーン7");
+static const u8 gUnknown_Debug_083C47E9[] = _("シーン8");
+#else
static const u8 gUnknown_Debug_083C47B2[] = _("Level");
static const u8 gUnknown_Debug_083C47B8[] = _("Scene1");
static const u8 gUnknown_Debug_083C47BF[] = _("Scene2");
@@ -1850,6 +1897,7 @@ static const u8 gUnknown_Debug_083C47D4[] = _("Scene5");
static const u8 gUnknown_Debug_083C47DB[] = _("Scene6");
static const u8 gUnknown_Debug_083C47E2[] = _("Scene7");
static const u8 gUnknown_Debug_083C47E9[] = _("Scene8");
+#endif
static const struct MenuAction gUnknown_Debug_083C47F0[] = {
{gUnknown_Debug_083C47B8, DummyMenuAction},
@@ -1862,7 +1910,11 @@ static const struct MenuAction gUnknown_Debug_083C47F0[] = {
{gUnknown_Debug_083C47E9, DummyMenuAction}
};
+#if (ENGLISH && REVISION == 0)
+static const u8 gUnknown_Debug_083C4830[] = _("カラクリだいおう");
+#else
static const u8 gUnknown_Debug_083C4830[] = _("Trick Master");
+#endif
static const u8 gUnknown_Debug_083C483D[] = _("Hidden MASTER");
static const u8 gUnknown_Debug_083C484B[] = _("Inside the HOUSE");
@@ -1878,8 +1930,13 @@ static const struct MenuAction gUnknown_Debug_083C4888[] = {
{gUnknown_Debug_083C4876, DummyMenuAction}
};
+#if (ENGLISH && REVISION == 0)
+static const u8 sDummyNickname[] = _("ポケモンめい");
+static const u8 sDummyTrainerName[] = _("ブリーダーめい");
+#else
static const u8 sDummyNickname[] = _("PMNICKNAME");
static const u8 sDummyTrainerName[] = _("BREEDER");
+#endif
bool8 InitTomomichiDebugWindow(void)
{
diff --git a/src/debug/watanabe_debug_menu.c b/src/debug/watanabe_debug_menu.c
index c055781fb..205d4d5e3 100644
--- a/src/debug/watanabe_debug_menu.c
+++ b/src/debug/watanabe_debug_menu.c
@@ -1812,6 +1812,15 @@ const struct WatanabeDebugMenuItem gUnknown_Debug_083F8698[] = {
{gUnknown_Debug_083F868F, {.type3 = 0x6}}
};
+#if (ENGLISH && REVISION == 0)
+const u8 gUnknown_Debug_083F86C8[] = _("ふつう");
+const u8 gUnknown_Debug_083F86CC[] = _("ねむり");
+const u8 gUnknown_Debug_083F86D0[] = _("どく");
+const u8 gUnknown_Debug_083F86D4[] = _("やけど");
+const u8 gUnknown_Debug_083F86D8[] = _("こおり");
+const u8 gUnknown_Debug_083F86DC[] = _("まひ");
+const u8 gUnknown_Debug_083F86E0[] = _("どくどく");
+#else
const u8 gUnknown_Debug_083F86C8[] = _("ーーー");
const u8 gUnknown_Debug_083F86CC[] = _("SLP");
const u8 gUnknown_Debug_083F86D0[] = _("PSN");
@@ -1819,6 +1828,7 @@ const u8 gUnknown_Debug_083F86D4[] = _("BRN");
const u8 gUnknown_Debug_083F86D8[] = _("FRZ");
const u8 gUnknown_Debug_083F86DC[] = _("PAR");
const u8 gUnknown_Debug_083F86E0[] = _("PSN2");
+#endif
const struct WatanabeDebugMenuItem gUnknown_Debug_083F86E8[] = {
{gUnknown_Debug_083F86C8, {.type3 = 0x0}},
@@ -1830,8 +1840,13 @@ const struct WatanabeDebugMenuItem gUnknown_Debug_083F86E8[] = {
{gUnknown_Debug_083F86E0, {.type3 = 0x80}}
};
+#if (ENGLISH && REVISION == 0)
+const u8 gUnknown_Debug_083F8720[] = _("ポケモンを てもちに くわえました");
+const u8 gUnknown_Debug_083F872A[] = _("ポケモンを ボックスに くわえました");
+#else
const u8 gUnknown_Debug_083F8720[] = _("PKMN{RIGHT_ARROW}LIST");
const u8 gUnknown_Debug_083F872A[] = _("PKMN{RIGHT_ARROW}BOX");
+#endif
void InitCreatePokemon(void)
{
u8 sp04[] = _("Create POKéMON LR:Shift START:Add");
@@ -2196,7 +2211,11 @@ void debug_80C5FFC(void)
{
u32 ivs;
u8 sp10[] = DTR("たまご", "EGG");
+#if (ENGLISH && REVISION == 0)
+ u8 sp14[] = _("デバッグポケ1");
+#else
u8 sp14[] = _("DebugーG");
+#endif
u8 one;
u16 ff;
diff --git a/src/decoration.c b/src/decoration.c
index 4dd7e0f12..1c6c4e18d 100644
--- a/src/decoration.c
+++ b/src/decoration.c
@@ -2403,8 +2403,6 @@ bool8 sub_80FFBDC(u16 metatileBehavior, const struct Decoration *decoration)
return FALSE;
}
-// When behaviorBy is set, it is masked by 0xf000. This is the step that fails to match when built.
-#ifdef NONMATCHING
bool8 sub_80FFC24(u8 taskId, const struct Decoration *decoration)
{
u8 i;
@@ -2536,540 +2534,6 @@ bool8 sub_80FFC24(u8 taskId, const struct Decoration *decoration)
}
return TRUE;
}
-#else
-NAKED
-bool8 sub_80FFC24(u8 taskId, const struct Decoration *decoration)
-{
- asm(".syntax unified\n"
- "\tpush {r4-r7,lr}\n"
- "\tmov r7, r10\n"
- "\tmov r6, r9\n"
- "\tmov r5, r8\n"
- "\tpush {r5-r7}\n"
- "\tsub sp, 0x24\n"
- "\tstr r1, [sp]\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tmov r10, r0\n"
- "\tldr r1, _080FFC60 @ =gTasks\n"
- "\tlsls r0, 2\n"
- "\tadd r0, r10\n"
- "\tlsls r0, 3\n"
- "\tadds r0, r1\n"
- "\tldrb r2, [r0, 0x14]\n"
- "\tstr r2, [sp, 0x4]\n"
- "\tldrb r0, [r0, 0x12]\n"
- "\tstr r0, [sp, 0x8]\n"
- "\tldr r3, [sp]\n"
- "\tldrb r0, [r3, 0x11]\n"
- "\tadds r2, r1, 0\n"
- "\tcmp r0, 0x4\n"
- "\tbls _080FFC56\n"
- "\tb _08100024\n"
- "_080FFC56:\n"
- "\tlsls r0, 2\n"
- "\tldr r1, _080FFC64 @ =_080FFC68\n"
- "\tadds r0, r1\n"
- "\tldr r0, [r0]\n"
- "\tmov pc, r0\n"
- "\t.align 2, 0\n"
- "_080FFC60: .4byte gTasks\n"
- "_080FFC64: .4byte _080FFC68\n"
- "\t.align 2, 0\n"
- "_080FFC68:\n"
- "\t.4byte _080FFC7C\n"
- "\t.4byte _080FFC7C\n"
- "\t.4byte _080FFD68\n"
- "\t.4byte _080FFF1C\n"
- "\t.4byte _080FFFA0\n"
- "_080FFC7C:\n"
- "\tmovs r6, 0\n"
- "\tldr r0, [sp, 0x4]\n"
- "\tcmp r6, r0\n"
- "\tbcc _080FFC86\n"
- "\tb _08100024\n"
- "_080FFC86:\n"
- "\tmov r1, r10\n"
- "\tlsls r1, 2\n"
- "\tstr r1, [sp, 0x1C]\n"
- "_080FFC8C:\n"
- "\tmov r2, r10\n"
- "\tlsls r0, r2, 2\n"
- "\tadd r0, r10\n"
- "\tlsls r0, 3\n"
- "\tldr r3, _080FFD64 @ =gTasks\n"
- "\tadds r0, r3\n"
- "\tldrh r0, [r0, 0xA]\n"
- "\tsubs r0, r6\n"
- "\tlsls r0, 16\n"
- "\tlsrs r0, 16\n"
- "\tmov r9, r0\n"
- "\tmovs r7, 0\n"
- "\tadds r6, 0x1\n"
- "\tstr r6, [sp, 0x14]\n"
- "\tldr r0, [sp, 0x8]\n"
- "\tcmp r7, r0\n"
- "\tbcs _080FFD56\n"
- "\tmov r1, r9\n"
- "\tlsls r1, 16\n"
- "\tstr r1, [sp, 0xC]\n"
- "\tasrs r1, 16\n"
- "\tmov r9, r1\n"
- "_080FFCB8:\n"
- "\tldr r0, [sp, 0x1C]\n"
- "\tadd r0, r10\n"
- "\tlsls r0, 3\n"
- "\tldr r2, _080FFD64 @ =gTasks\n"
- "\tadds r0, r2\n"
- "\tldrh r0, [r0, 0x8]\n"
- "\tadds r0, r7\n"
- "\tlsls r0, 16\n"
- "\tmov r8, r0\n"
- "\tasrs r6, r0, 16\n"
- "\tadds r0, r6, 0\n"
- "\tmov r1, r9\n"
- "\tbl MapGridGetMetatileBehaviorAt\n"
- "\tlsls r0, 24\n"
- "\tlsrs r4, r0, 24\n"
- "\tldr r3, [sp, 0x4]\n"
- "\tldr r1, [sp, 0x14]\n"
- "\tsubs r0, r3, r1\n"
- "\tldr r2, [sp, 0x8]\n"
- "\tadds r1, r0, 0\n"
- "\tmuls r1, r2\n"
- "\tadds r1, r7\n"
- "\tldr r3, [sp]\n"
- "\tldr r0, [r3, 0x1C]\n"
- "\tlsls r1, 1\n"
- "\tadds r1, r0\n"
- "\tmovs r2, 0x80\n"
- "\tlsls r2, 2\n"
- "\tadds r0, r2, 0\n"
- "\tldrh r1, [r1]\n"
- "\tadds r0, r1\n"
- "\tlsls r0, 16\n"
- "\tlsrs r0, 16\n"
- "\tbl GetBehaviorByMetatileId\n"
- "\tmovs r3, 0xF0\n"
- "\tlsls r3, 8\n"
- "\tadds r1, r3, 0\n"
- "\tadds r5, r1, 0\n"
- "\tands r5, r0\n"
- "\tadds r0, r4, 0\n"
- "\tldr r1, [sp]\n"
- "\tbl sub_80FFBDC\n"
- "\tlsls r0, 24\n"
- "\tcmp r0, 0\n"
- "\tbne _080FFD1A\n"
- "\tb _080FFFF4\n"
- "_080FFD1A:\n"
- "\tmov r0, r10\n"
- "\tadds r1, r6, 0\n"
- "\tmov r2, r9\n"
- "\tadds r3, r5, 0\n"
- "\tbl sub_80FFB94\n"
- "\tlsls r0, 24\n"
- "\tcmp r0, 0\n"
- "\tbne _080FFD2E\n"
- "\tb _080FFFF4\n"
- "_080FFD2E:\n"
- "\tmov r1, r8\n"
- "\tlsrs r0, r1, 16\n"
- "\tldr r2, [sp, 0xC]\n"
- "\tlsrs r1, r2, 16\n"
- "\tmovs r2, 0\n"
- "\tbl GetObjectEventIdByXYZ\n"
- "\tlsls r0, 24\n"
- "\tlsrs r4, r0, 24\n"
- "\tcmp r4, 0\n"
- "\tbeq _080FFD4A\n"
- "\tcmp r4, 0x10\n"
- "\tbeq _080FFD4A\n"
- "\tb _080FFFF4\n"
- "_080FFD4A:\n"
- "\tadds r0, r7, 0x1\n"
- "\tlsls r0, 24\n"
- "\tlsrs r7, r0, 24\n"
- "\tldr r3, [sp, 0x8]\n"
- "\tcmp r7, r3\n"
- "\tbcc _080FFCB8\n"
- "_080FFD56:\n"
- "\tldr r1, [sp, 0x14]\n"
- "\tlsls r0, r1, 24\n"
- "\tlsrs r6, r0, 24\n"
- "\tldr r2, [sp, 0x4]\n"
- "\tcmp r6, r2\n"
- "\tbcc _080FFC8C\n"
- "\tb _08100024\n"
- "\t.align 2, 0\n"
- "_080FFD64: .4byte gTasks\n"
- "_080FFD68:\n"
- "\tmovs r6, 0\n"
- "\tmov r3, r10\n"
- "\tlsls r3, 2\n"
- "\tstr r3, [sp, 0x1C]\n"
- "\tldr r0, [sp, 0x4]\n"
- "\tsubs r0, 0x1\n"
- "\tstr r0, [sp, 0x18]\n"
- "\tcmp r6, r0\n"
- "\tbge _080FFE54\n"
- "\tadds r0, r3, 0\n"
- "\tadd r0, r10\n"
- "\tlsls r0, 3\n"
- "\tstr r0, [sp, 0x10]\n"
- "_080FFD82:\n"
- "\tldr r1, [sp, 0x10]\n"
- "\tadds r0, r1, r2\n"
- "\tldrh r0, [r0, 0xA]\n"
- "\tsubs r0, r6\n"
- "\tlsls r0, 16\n"
- "\tlsrs r0, 16\n"
- "\tmov r9, r0\n"
- "\tmovs r7, 0\n"
- "\tadds r6, 0x1\n"
- "\tstr r6, [sp, 0x14]\n"
- "\tldr r3, [sp, 0x8]\n"
- "\tcmp r7, r3\n"
- "\tbcs _080FFE48\n"
- "\tlsls r0, 16\n"
- "\tstr r0, [sp, 0x20]\n"
- "_080FFDA0:\n"
- "\tldr r1, [sp, 0x10]\n"
- "\tadds r0, r1, r2\n"
- "\tldrh r0, [r0, 0x8]\n"
- "\tadds r0, r7\n"
- "\tlsls r0, 16\n"
- "\tmov r8, r0\n"
- "\tasrs r6, r0, 16\n"
- "\tmov r2, r9\n"
- "\tlsls r1, r2, 16\n"
- "\tadds r0, r6, 0\n"
- "\tasrs r1, 16\n"
- "\tbl MapGridGetMetatileBehaviorAt\n"
- "\tlsls r0, 24\n"
- "\tlsrs r4, r0, 24\n"
- "\tldr r3, [sp, 0x4]\n"
- "\tldr r1, [sp, 0x14]\n"
- "\tsubs r0, r3, r1\n"
- "\tldr r2, [sp, 0x8]\n"
- "\tadds r1, r0, 0\n"
- "\tmuls r1, r2\n"
- "\tadds r1, r7\n"
- "\tldr r3, [sp]\n"
- "\tldr r0, [r3, 0x1C]\n"
- "\tlsls r1, 1\n"
- "\tadds r1, r0\n"
- "\tmovs r2, 0x80\n"
- "\tlsls r2, 2\n"
- "\tadds r0, r2, 0\n"
- "\tldrh r1, [r1]\n"
- "\tadds r0, r1\n"
- "\tlsls r0, 16\n"
- "\tlsrs r0, 16\n"
- "\tbl GetBehaviorByMetatileId\n"
- "\tmovs r3, 0xF0\n"
- "\tlsls r3, 8\n"
- "\tadds r1, r3, 0\n"
- "\tadds r5, r1, 0\n"
- "\tands r5, r0\n"
- "\tadds r0, r4, 0\n"
- "\tbl MetatileBehavior_IsNormal\n"
- "\tlsls r0, 24\n"
- "\tcmp r0, 0\n"
- "\tbne _080FFE0C\n"
- "\tadds r0, r4, 0\n"
- "\tadds r1, r5, 0\n"
- "\tbl sub_80FFB6C\n"
- "\tlsls r0, 24\n"
- "\tcmp r0, 0\n"
- "\tbne _080FFE0C\n"
- "\tb _080FFFF4\n"
- "_080FFE0C:\n"
- "\tmov r0, r10\n"
- "\tadds r1, r6, 0\n"
- "\tldr r3, [sp, 0x20]\n"
- "\tasrs r2, r3, 16\n"
- "\tadds r3, r5, 0\n"
- "\tbl sub_80FFB94\n"
- "\tlsls r0, 24\n"
- "\tcmp r0, 0\n"
- "\tbne _080FFE22\n"
- "\tb _080FFFF4\n"
- "_080FFE22:\n"
- "\tmov r1, r8\n"
- "\tlsrs r0, r1, 16\n"
- "\tldr r2, [sp, 0x20]\n"
- "\tlsrs r1, r2, 16\n"
- "\tmovs r2, 0\n"
- "\tbl GetObjectEventIdByXYZ\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tcmp r0, 0x10\n"
- "\tbeq _080FFE3A\n"
- "\tb _080FFFF4\n"
- "_080FFE3A:\n"
- "\tadds r0, r7, 0x1\n"
- "\tlsls r0, 24\n"
- "\tlsrs r7, r0, 24\n"
- "\tldr r2, _080FFF18 @ =gTasks\n"
- "\tldr r3, [sp, 0x8]\n"
- "\tcmp r7, r3\n"
- "\tbcc _080FFDA0\n"
- "_080FFE48:\n"
- "\tldr r1, [sp, 0x14]\n"
- "\tlsls r0, r1, 24\n"
- "\tlsrs r6, r0, 24\n"
- "\tldr r3, [sp, 0x18]\n"
- "\tcmp r6, r3\n"
- "\tblt _080FFD82\n"
- "_080FFE54:\n"
- "\tldr r0, [sp, 0x1C]\n"
- "\tadd r0, r10\n"
- "\tlsls r0, 3\n"
- "\tadds r0, r2\n"
- "\tldrh r0, [r0, 0xA]\n"
- "\tldr r1, [sp, 0x4]\n"
- "\tsubs r0, r1\n"
- "\tadds r0, 0x1\n"
- "\tlsls r0, 16\n"
- "\tlsrs r0, 16\n"
- "\tmov r9, r0\n"
- "\tmovs r7, 0\n"
- "\tldr r3, [sp, 0x8]\n"
- "\tcmp r7, r3\n"
- "\tbcc _080FFE74\n"
- "\tb _08100024\n"
- "_080FFE74:\n"
- "\tlsls r0, 16\n"
- "\tstr r0, [sp, 0x20]\n"
- "_080FFE78:\n"
- "\tldr r0, [sp, 0x1C]\n"
- "\tadd r0, r10\n"
- "\tlsls r0, 3\n"
- "\tldr r1, _080FFF18 @ =gTasks\n"
- "\tadds r0, r1\n"
- "\tldrh r0, [r0, 0x8]\n"
- "\tadds r0, r7\n"
- "\tlsls r0, 16\n"
- "\tmov r8, r0\n"
- "\tasrs r6, r0, 16\n"
- "\tmov r2, r9\n"
- "\tlsls r1, r2, 16\n"
- "\tadds r0, r6, 0\n"
- "\tasrs r1, 16\n"
- "\tbl MapGridGetMetatileBehaviorAt\n"
- "\tlsls r0, 24\n"
- "\tlsrs r4, r0, 24\n"
- "\tldr r3, [sp]\n"
- "\tldr r0, [r3, 0x1C]\n"
- "\tlsls r1, r7, 1\n"
- "\tadds r1, r0\n"
- "\tmovs r2, 0x80\n"
- "\tlsls r2, 2\n"
- "\tadds r0, r2, 0\n"
- "\tldrh r1, [r1]\n"
- "\tadds r0, r1\n"
- "\tlsls r0, 16\n"
- "\tlsrs r0, 16\n"
- "\tbl GetBehaviorByMetatileId\n"
- "\tmovs r3, 0xF0\n"
- "\tlsls r3, 8\n"
- "\tadds r1, r3, 0\n"
- "\tadds r5, r1, 0\n"
- "\tands r5, r0\n"
- "\tadds r0, r4, 0\n"
- "\tbl MetatileBehavior_IsNormal\n"
- "\tlsls r0, 24\n"
- "\tcmp r0, 0\n"
- "\tbne _080FFEDA\n"
- "\tadds r0, r4, 0\n"
- "\tbl MetatileBehavior_IsSecretBaseNorthWall\n"
- "\tlsls r0, 24\n"
- "\tcmp r0, 0\n"
- "\tbne _080FFEDA\n"
- "\tb _080FFFF4\n"
- "_080FFEDA:\n"
- "\tmov r0, r10\n"
- "\tadds r1, r6, 0\n"
- "\tldr r3, [sp, 0x20]\n"
- "\tasrs r2, r3, 16\n"
- "\tadds r3, r5, 0\n"
- "\tbl sub_80FFB94\n"
- "\tlsls r0, 24\n"
- "\tcmp r0, 0\n"
- "\tbne _080FFEF0\n"
- "\tb _080FFFF4\n"
- "_080FFEF0:\n"
- "\tmov r1, r8\n"
- "\tlsrs r0, r1, 16\n"
- "\tldr r2, [sp, 0x20]\n"
- "\tlsrs r1, r2, 16\n"
- "\tmovs r2, 0\n"
- "\tbl GetObjectEventIdByXYZ\n"
- "\tlsls r0, 24\n"
- "\tlsrs r4, r0, 24\n"
- "\tcmp r4, 0\n"
- "\tbeq _080FFF0A\n"
- "\tcmp r4, 0x10\n"
- "\tbne _080FFFF4\n"
- "_080FFF0A:\n"
- "\tadds r0, r7, 0x1\n"
- "\tlsls r0, 24\n"
- "\tlsrs r7, r0, 24\n"
- "\tldr r3, [sp, 0x8]\n"
- "\tcmp r7, r3\n"
- "\tbcc _080FFE78\n"
- "\tb _08100024\n"
- "\t.align 2, 0\n"
- "_080FFF18: .4byte gTasks\n"
- "_080FFF1C:\n"
- "\tmovs r6, 0\n"
- "\tldr r0, [sp, 0x4]\n"
- "\tcmp r6, r0\n"
- "\tbcc _080FFF26\n"
- "\tb _08100024\n"
- "_080FFF26:\n"
- "\tmov r1, r10\n"
- "\tlsls r0, r1, 2\n"
- "\tadd r0, r10\n"
- "\tlsls r1, r0, 3\n"
- "\tldr r2, _080FFF9C @ =gTasks\n"
- "\tadds r0, r1, r2\n"
- "\tldrh r0, [r0, 0xA]\n"
- "\tsubs r0, r6\n"
- "\tlsls r0, 16\n"
- "\tlsrs r0, 16\n"
- "\tmov r9, r0\n"
- "\tmovs r7, 0\n"
- "\tldr r3, [sp, 0x8]\n"
- "\tcmp r7, r3\n"
- "\tbcs _080FFF8C\n"
- "\tadds r0, r2, 0\n"
- "\tadds r1, r0\n"
- "\tmov r8, r1\n"
- "\tmov r1, r9\n"
- "\tlsls r0, r1, 16\n"
- "\tasrs r5, r0, 16\n"
- "_080FFF50:\n"
- "\tmov r2, r8\n"
- "\tldrh r0, [r2, 0x8]\n"
- "\tadds r0, r7\n"
- "\tlsls r0, 16\n"
- "\tasrs r4, r0, 16\n"
- "\tadds r0, r4, 0\n"
- "\tadds r1, r5, 0\n"
- "\tbl MapGridGetMetatileBehaviorAt\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tbl MetatileBehavior_IsSecretBaseNorthWall\n"
- "\tlsls r0, 24\n"
- "\tcmp r0, 0\n"
- "\tbeq _080FFFF4\n"
- "\tadds r0, r4, 0\n"
- "\tadds r1, r5, 0x1\n"
- "\tbl MapGridGetMetatileIdAt\n"
- "\tmovs r1, 0xA3\n"
- "\tlsls r1, 2\n"
- "\tcmp r0, r1\n"
- "\tbeq _080FFFF4\n"
- "\tadds r0, r7, 0x1\n"
- "\tlsls r0, 24\n"
- "\tlsrs r7, r0, 24\n"
- "\tldr r3, [sp, 0x8]\n"
- "\tcmp r7, r3\n"
- "\tbcc _080FFF50\n"
- "_080FFF8C:\n"
- "\tadds r0, r6, 0x1\n"
- "\tlsls r0, 24\n"
- "\tlsrs r6, r0, 24\n"
- "\tldr r0, [sp, 0x4]\n"
- "\tcmp r6, r0\n"
- "\tbcc _080FFF26\n"
- "\tb _08100024\n"
- "\t.align 2, 0\n"
- "_080FFF9C: .4byte gTasks\n"
- "_080FFFA0:\n"
- "\tmov r3, r10\n"
- "\tlsls r1, r3, 2\n"
- "\tadds r0, r1, r3\n"
- "\tlsls r0, 3\n"
- "\tadds r0, r2\n"
- "\tldrh r0, [r0, 0xA]\n"
- "\tmov r9, r0\n"
- "\tmovs r7, 0\n"
- "\tstr r1, [sp, 0x1C]\n"
- "\tldr r0, [sp, 0x8]\n"
- "\tcmp r7, r0\n"
- "\tbcs _08100024\n"
- "\tadds r6, r2, 0\n"
- "\tmov r1, r9\n"
- "\tlsls r1, 16\n"
- "\tstr r1, [sp, 0x20]\n"
- "_080FFFC0:\n"
- "\tldr r0, [sp, 0x1C]\n"
- "\tadd r0, r10\n"
- "\tlsls r0, 3\n"
- "\tadds r0, r6\n"
- "\tldrh r0, [r0, 0x8]\n"
- "\tadds r0, r7\n"
- "\tlsls r0, 16\n"
- "\tlsrs r5, r0, 16\n"
- "\tasrs r0, 16\n"
- "\tmov r2, r9\n"
- "\tlsls r1, r2, 16\n"
- "\tasrs r1, 16\n"
- "\tbl MapGridGetMetatileBehaviorAt\n"
- "\tlsls r0, 24\n"
- "\tlsrs r4, r0, 24\n"
- "\tldr r3, [sp]\n"
- "\tldrb r0, [r3, 0x12]\n"
- "\tcmp r0, 0x5\n"
- "\tbne _080FFFF8\n"
- "_080FFFE8:\n"
- "\tadds r0, r4, 0\n"
- "\tbl MetatileBehavior_IsLargeMatCenter\n"
- "\tlsls r0, 24\n"
- "\tcmp r0, 0\n"
- "\tbne _08100004\n"
- "_080FFFF4:\n"
- "\tmovs r0, 0\n"
- "\tb _08100026\n"
- "_080FFFF8:\n"
- "\tadds r0, r4, 0\n"
- "\tbl MetatileBehavior_IsSecretBaseLargeMatEdge\n"
- "\tlsls r0, 24\n"
- "\tcmp r0, 0\n"
- "\tbeq _080FFFE8\n"
- "_08100004:\n"
- "\tadds r0, r5, 0\n"
- "\tldr r2, [sp, 0x20]\n"
- "\tlsrs r1, r2, 16\n"
- "\tmovs r2, 0\n"
- "\tbl GetObjectEventIdByXYZ\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tcmp r0, 0x10\n"
- "\tbne _080FFFF4\n"
- "\tadds r0, r7, 0x1\n"
- "\tlsls r0, 24\n"
- "\tlsrs r7, r0, 24\n"
- "\tldr r3, [sp, 0x8]\n"
- "\tcmp r7, r3\n"
- "\tbcc _080FFFC0\n"
- "_08100024:\n"
- "\tmovs r0, 0x1\n"
- "_08100026:\n"
- "\tadd sp, 0x24\n"
- "\tpop {r3-r5}\n"
- "\tmov r8, r3\n"
- "\tmov r9, r4\n"
- "\tmov r10, r5\n"
- "\tpop {r4-r7}\n"
- "\tpop {r1}\n"
- "\tbx r1\n"
- ".syntax divided\n");
-}
-#endif
void sub_8100038(u8 taskId)
{
@@ -3967,131 +3431,42 @@ void sub_81013B8(u8 a0, u8 a1, u8 a2, u8 a3)
}
}
-#ifdef NONMATCHING
void sub_8101460(u8 taskId)
{
u8 i;
u8 xOff;
u8 yOff;
+ u8 var1;
+ u32 var2;
+
gUnknown_02039234 = 0;
if (sub_8101340(taskId) != TRUE)
{
- for (i=0; i<ewram_1f000.size; i++)
+ for (i = 0; i < ewram_1f000.size; i++)
{
- if (ewram_1f000.items[i] == 0) // This is using the wrong register!
- {
- continue;
- }
- sub_8101118(ewram_1f000.items[i], gUnknown_020391B4);
- if (sub_8101200(taskId, i, gUnknown_020391B4) == TRUE)
+ var1 = ewram_1f000.items[i];
+ if (var1 != 0)
{
- gUnknown_020391B4[0].decorId = i;
- gUnknown_02039234++;
- break;
+ sub_8101118(var1, gUnknown_020391B4);
+ if (sub_8101200(taskId, i, gUnknown_020391B4) == TRUE)
+ {
+ gUnknown_020391B4[0].decorId = i;
+ gUnknown_02039234++;
+ break;
+ }
}
}
if (gUnknown_02039234 != 0)
{
xOff = ewram_1f000.pos[gUnknown_020391B4[0].decorId] >> 4;
yOff = ewram_1f000.pos[gUnknown_020391B4[0].decorId] & 0xf;
- sub_81013B8(xOff, yOff - gUnknown_020391B4[0].height + 1, xOff + gUnknown_020391B4[0].width - 1, yOff);
+ var1 = yOff - gUnknown_020391B4[0].height + 1;
+ var2 = gUnknown_020391B4[0].width + xOff - 1;
+
+ sub_81013B8(xOff, var1, var2, yOff);
}
}
}
-#else
-NAKED
-void sub_8101460(u8 taskId)
-{
- asm(".syntax unified\n"
- "\tpush {r4-r7,lr}\n"
- "\tlsls r0, 24\n"
- "\tlsrs r6, r0, 24\n"
- "\tldr r4, _081014B8 @ =gUnknown_02039234\n"
- "\tmovs r0, 0\n"
- "\tstrb r0, [r4]\n"
- "\tadds r0, r6, 0\n"
- "\tbl sub_8101340\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tcmp r0, 0x1\n"
- "\tbeq _08101504\n"
- "\tmovs r5, 0\n"
- "\tldr r0, _081014BC @ =ewram_1f000\n"
- "\tldrb r1, [r0, 0x8]\n"
- "\tcmp r5, r1\n"
- "\tbcs _081014D2\n"
- "\tadds r7, r4, 0\n"
- "_08101486:\n"
- "\tldr r0, [r0]\n"
- "\tadds r0, r5\n"
- "\tldrb r1, [r0] @ compiler incorrectly uses r0 for this and the next instruction\n"
- "\tcmp r1, 0\n"
- "\tbeq _081014C4\n"
- "\tldr r4, _081014C0 @ =gUnknown_020391B4\n"
- "\tadds r0, r1, 0\n"
- "\tadds r1, r4, 0\n"
- "\tbl sub_8101118\n"
- "\tadds r0, r6, 0\n"
- "\tadds r1, r5, 0\n"
- "\tadds r2, r4, 0\n"
- "\tbl sub_8101200\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tcmp r0, 0x1\n"
- "\tbne _081014C4\n"
- "\tstrb r5, [r4]\n"
- "\tldrb r0, [r7]\n"
- "\tadds r0, 0x1\n"
- "\tstrb r0, [r7]\n"
- "\tb _081014D2\n"
- "\t.align 2, 0\n"
- "_081014B8: .4byte gUnknown_02039234\n"
- "_081014BC: .4byte 0x201f000\n"
- "_081014C0: .4byte gUnknown_020391B4\n"
- "_081014C4:\n"
- "\tadds r0, r5, 0x1\n"
- "\tlsls r0, 24\n"
- "\tlsrs r5, r0, 24\n"
- "\tldr r0, _0810150C @ =ewram_1f000\n"
- "\tldrb r1, [r0, 0x8]\n"
- "\tcmp r5, r1\n"
- "\tbcc _08101486\n"
- "_081014D2:\n"
- "\tldr r0, _08101510 @ =gUnknown_02039234\n"
- "\tldrb r0, [r0]\n"
- "\tcmp r0, 0\n"
- "\tbeq _08101504\n"
- "\tldr r0, _0810150C @ =ewram_1f000\n"
- "\tldr r2, _08101514 @ =gUnknown_020391B4\n"
- "\tldrb r1, [r2]\n"
- "\tldr r0, [r0, 0x4]\n"
- "\tadds r0, r1\n"
- "\tldrb r1, [r0]\n"
- "\tlsrs r0, r1, 4\n"
- "\tmovs r3, 0xF\n"
- "\tands r3, r1\n"
- "\tldrb r1, [r2, 0x2]\n"
- "\tsubs r1, r3, r1\n"
- "\tadds r1, 0x1\n"
- "\tlsls r1, 24\n"
- "\tlsrs r1, 24\n"
- "\tldrb r2, [r2, 0x1]\n"
- "\tadds r2, r0\n"
- "\tsubs r2, 0x1\n"
- "\tlsls r2, 24\n"
- "\tlsrs r2, 24\n"
- "\tbl sub_81013B8\n"
- "_08101504:\n"
- "\tpop {r4-r7}\n"
- "\tpop {r0}\n"
- "\tbx r0\n"
- "\t.align 2, 0\n"
- "_0810150C: .4byte 0x201f000\n"
- "_08101510: .4byte gUnknown_02039234\n"
- "_08101514: .4byte gUnknown_020391B4\n"
- ".syntax divided\n");
-}
-#endif
void sub_8101518(u8 taskId)
{
diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c
index cd6e67c8c..cb0bf760f 100644
--- a/src/field_player_avatar.c
+++ b/src/field_player_avatar.c
@@ -681,24 +681,16 @@ void SetPlayerAvatarTransitionFlags(u16 a)
static void DoPlayerAvatarTransition(void)
{
u8 i;
- u32 flags = gPlayerAvatar.unk1;
+ u8 flags = gPlayerAvatar.unk1;
if (flags != 0)
{
- for (i = 0; i < 8; i++, flags >>= 1)
+ for (i = 0; i < ARRAY_COUNT(gUnknown_0830FC14); i++, flags >>= 1)
{
-#ifdef NONMATCHING
if (flags & 1)
{
gUnknown_0830FC14[i](&gObjectEvents[gPlayerAvatar.objectEventId]);
}
-#else
- if (flags & 1)
- {
- register void (*const *funcs)(struct ObjectEvent *) asm("r0") = gUnknown_0830FC14;
- funcs[i](&gObjectEvents[gPlayerAvatar.objectEventId]);
- }
-#endif
}
gPlayerAvatar.unk1 = 0;
}
diff --git a/src/field_tasks.c b/src/field_tasks.c
index a56de5746..abc4e1505 100644
--- a/src/field_tasks.c
+++ b/src/field_tasks.c
@@ -147,46 +147,46 @@ void ResetFieldTasksArgs(void)
}
}
-const struct MetatileOffset gUnknown_08376384[][2] = {
- {{ 0, 0, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Vertical0)}, { 0, 1, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Vertical1)}},
- {{ 0, -1, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Vertical0)}, { 0, 0, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Vertical1)}},
- {{ 0, 0, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Horizontal0)}, { 1, 0, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Horizontal1)}},
- {{ -1, 0, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Horizontal0)}, { 0, 0, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Horizontal1)}}
+const struct MetatileOffset gUnknown_08376384[] = {
+ { 0, 0, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Vertical0)}, {0, 1, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Vertical1)},
+ { 0, -1, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Vertical0)}, {0, 0, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Vertical1)},
+ { 0, 0, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Horizontal0)}, {1, 0, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Horizontal1)},
+ {-1, 0, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Horizontal0)}, {0, 0, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Horizontal1)}
};
-const struct MetatileOffset gUnknown_083763A4[][2] = {
- {{ 0, 0, METATILE_ID(Pacifidlog, SubmergedLogs_Vertical0)}, { 0, 1, METATILE_ID(Pacifidlog, SubmergedLogs_Vertical1)}},
- {{ 0, -1, METATILE_ID(Pacifidlog, SubmergedLogs_Vertical0)}, { 0, 0, METATILE_ID(Pacifidlog, SubmergedLogs_Vertical1)}},
- {{ 0, 0, METATILE_ID(Pacifidlog, SubmergedLogs_Horizontal0)}, { 1, 0, METATILE_ID(Pacifidlog, SubmergedLogs_Horizontal1)}},
- {{ -1, 0, METATILE_ID(Pacifidlog, SubmergedLogs_Horizontal0)}, { 0, 0, METATILE_ID(Pacifidlog, SubmergedLogs_Horizontal1)}}
+const struct MetatileOffset gUnknown_083763A4[] = {
+ { 0, 0, METATILE_ID(Pacifidlog, SubmergedLogs_Vertical0)}, {0, 1, METATILE_ID(Pacifidlog, SubmergedLogs_Vertical1)},
+ { 0, -1, METATILE_ID(Pacifidlog, SubmergedLogs_Vertical0)}, {0, 0, METATILE_ID(Pacifidlog, SubmergedLogs_Vertical1)},
+ { 0, 0, METATILE_ID(Pacifidlog, SubmergedLogs_Horizontal0)}, {1, 0, METATILE_ID(Pacifidlog, SubmergedLogs_Horizontal1)},
+ {-1, 0, METATILE_ID(Pacifidlog, SubmergedLogs_Horizontal0)}, {0, 0, METATILE_ID(Pacifidlog, SubmergedLogs_Horizontal1)}
};
-const struct MetatileOffset gUnknown_083763C4[][2] = {
- {{ 0, 0, METATILE_ID(Pacifidlog, FloatingLogs_Vertical0)}, { 0, 1, METATILE_ID(Pacifidlog, FloatingLogs_Vertical1)}},
- {{ 0, -1, METATILE_ID(Pacifidlog, FloatingLogs_Vertical0)}, { 0, 0, METATILE_ID(Pacifidlog, FloatingLogs_Vertical1)}},
- {{ 0, 0, METATILE_ID(Pacifidlog, FloatingLogs_Horizontal0)}, { 1, 0, METATILE_ID(Pacifidlog, FloatingLogs_Horizontal1)}},
- {{ -1, 0, METATILE_ID(Pacifidlog, FloatingLogs_Horizontal0)}, { 0, 0, METATILE_ID(Pacifidlog, FloatingLogs_Horizontal1)}}
+const struct MetatileOffset gUnknown_083763C4[] = {
+ { 0, 0, METATILE_ID(Pacifidlog, FloatingLogs_Vertical0)}, {0, 1, METATILE_ID(Pacifidlog, FloatingLogs_Vertical1)},
+ { 0, -1, METATILE_ID(Pacifidlog, FloatingLogs_Vertical0)}, {0, 0, METATILE_ID(Pacifidlog, FloatingLogs_Vertical1)},
+ { 0, 0, METATILE_ID(Pacifidlog, FloatingLogs_Horizontal0)}, {1, 0, METATILE_ID(Pacifidlog, FloatingLogs_Horizontal1)},
+ {-1, 0, METATILE_ID(Pacifidlog, FloatingLogs_Horizontal0)}, {0, 0, METATILE_ID(Pacifidlog, FloatingLogs_Horizontal1)}
};
void DummyPerStepCallback(u8 taskId) {}
-const struct MetatileOffset *sub_80695E0(const struct MetatileOffset a0[][2], s8 a1)
+const struct MetatileOffset *sub_80695E0(const struct MetatileOffset *a0, u16 a1)
{
if (MetatileBehavior_IsPacifidlogVerticalLog1(a1))
{
- return a0[0];
+ return &a0[0 * 2];
}
else if (MetatileBehavior_IsPacifidlogVerticalLog2(a1))
{
- return a0[1];
+ return &a0[1 * 2];
}
else if (MetatileBehavior_IsPacifidlogHorizontalLog1(a1))
{
- return a0[2];
+ return &a0[2 * 2];
}
else if (MetatileBehavior_IsPacifidlogHorizontalLog2(a1))
{
- return a0[3];
+ return &a0[3 * 2];
}
else
{
@@ -194,95 +194,23 @@ const struct MetatileOffset *sub_80695E0(const struct MetatileOffset a0[][2], s8
}
}
-#ifdef NONMATCHING
-void sub_8069638(const struct MetatileOffset offsets[][2], s16 x, s16 y, bool32 flag)
+void sub_8069638(const struct MetatileOffset *offsets, s16 x, s16 y, bool32 flag)
{
- const struct MetatileOffset *offsetData = sub_80695E0(offsets, MapGridGetMetatileBehaviorAt(x, y));
- const struct MetatileOffset *offsetdata2 = offsetData;
- if (offsetData != NULL)
+ offsets = sub_80695E0(offsets, MapGridGetMetatileBehaviorAt(x, y));
+ if (offsets)
{
- MapGridSetMetatileIdAt(x + offsetData[0].x, y + offsetData[0].y, offsetData[0].tileId);
+ MapGridSetMetatileIdAt(x + offsets[0].x, y + offsets[0].y, offsets[0].tileId);
if (flag)
{
- CurrentMapDrawMetatileAt(x + offsetData[0].x, y + offsetData[0].y);
+ CurrentMapDrawMetatileAt(x + offsets[0].x, y + offsets[0].y);
}
- MapGridSetMetatileIdAt(x + offsetdata2[1].x, y + offsetdata2[1].y, offsetdata2[1].tileId);
+ MapGridSetMetatileIdAt(x + offsets[1].x, y + offsets[1].y, offsets[1].tileId);
if (flag)
{
- CurrentMapDrawMetatileAt(x + offsetdata2[1].x, y + offsetdata2[1].y);
+ CurrentMapDrawMetatileAt(x + offsets[1].x, y + offsets[1].y);
}
}
}
-#else
-NAKED
-void sub_8069638(const struct MetatileOffset offsets[][2], s16 x, s16 y, bool32 flag)
-{
- asm_unified("\tpush {r4-r7,lr}\n"
- "\tmov r7, r8\n"
- "\tpush {r7}\n"
- "\tadds r5, r0, 0\n"
- "\tmov r8, r3\n"
- "\tlsls r1, 16\n"
- "\tasrs r6, r1, 16\n"
- "\tlsls r2, 16\n"
- "\tasrs r7, r2, 16\n"
- "\tadds r0, r6, 0\n"
- "\tadds r1, r7, 0\n"
- "\tbl MapGridGetMetatileBehaviorAt\n"
- "\tadds r1, r0, 0\n"
- "\tlsls r1, 16\n"
- "\tlsrs r1, 16\n"
- "\tadds r0, r5, 0\n"
- "\tbl sub_80695E0\n"
- "\tadds r4, r0, 0\n"
- "\tadds r5, r4, 0\n"
- "\tcmp r4, 0\n"
- "\tbeq _080696B6\n"
- "\tmovs r0, 0\n"
- "\tldrsb r0, [r4, r0]\n"
- "\tadds r0, r6, r0\n"
- "\tmovs r1, 0x1\n"
- "\tldrsb r1, [r4, r1]\n"
- "\tadds r1, r7, r1\n"
- "\tldrh r2, [r4, 0x2]\n"
- "\tbl MapGridSetMetatileIdAt\n"
- "\tmov r0, r8\n"
- "\tcmp r0, 0\n"
- "\tbeq _0806968E\n"
- "\tmovs r0, 0\n"
- "\tldrsb r0, [r4, r0]\n"
- "\tadds r0, r6, r0\n"
- "\tmovs r1, 0x1\n"
- "\tldrsb r1, [r4, r1]\n"
- "\tadds r1, r7, r1\n"
- "\tbl CurrentMapDrawMetatileAt\n"
- "_0806968E:\n"
- "\tmovs r0, 0x4\n"
- "\tldrsb r0, [r5, r0]\n"
- "\tadds r0, r6, r0\n"
- "\tmovs r1, 0x5\n"
- "\tldrsb r1, [r5, r1]\n"
- "\tadds r1, r7, r1\n"
- "\tldrh r2, [r5, 0x6]\n"
- "\tbl MapGridSetMetatileIdAt\n"
- "\tmov r0, r8\n"
- "\tcmp r0, 0\n"
- "\tbeq _080696B6\n"
- "\tmovs r0, 0x4\n"
- "\tldrsb r0, [r5, r0]\n"
- "\tadds r0, r6, r0\n"
- "\tmovs r1, 0x5\n"
- "\tldrsb r1, [r5, r1]\n"
- "\tadds r1, r7, r1\n"
- "\tbl CurrentMapDrawMetatileAt\n"
- "_080696B6:\n"
- "\tpop {r3}\n"
- "\tmov r8, r3\n"
- "\tpop {r4-r7}\n"
- "\tpop {r0}\n"
- "\tbx r0");
-}
-#endif
void sub_80696C0(s16 x, s16 y, bool32 flag)
{
diff --git a/src/fieldmap.c b/src/fieldmap.c
index 6ba284810..8be4b217c 100644
--- a/src/fieldmap.c
+++ b/src/fieldmap.c
@@ -460,7 +460,7 @@ void MapGridSetMetatileEntryAt(int x, int y, u16 metatile)
}
}
-u32 GetBehaviorByMetatileId(u16 metatile)
+u16 GetBehaviorByMetatileId(u16 metatile)
{
u16 *attributes;
if (metatile < NUM_METATILES_IN_PRIMARY)
diff --git a/src/libs/agb_flash_mx.c b/src/libs/agb_flash_mx.c
index b4f710f36..5e2b0bce1 100644
--- a/src/libs/agb_flash_mx.c
+++ b/src/libs/agb_flash_mx.c
@@ -26,7 +26,7 @@ const struct FlashSetupInfo MX29L010 =
0 // appears to be unused
},
{ 3, 1 }, // wait state setup data
-#if defined(GERMAN) && defined(SAPPHIRE)
+#if (GERMAN && SAPPHIRE && !DEBUG) // OK, why !DEBUG?
{ { 0xBF, 0xD4 } } // ID
#else
{ { 0xC2, 0x09 } } // ID
diff --git a/src/main.c b/src/main.c
index 433143b38..d8779b90c 100644
--- a/src/main.c
+++ b/src/main.c
@@ -27,12 +27,11 @@ static void IntrDummy(void);
const u8 gGameVersion = GAME_VERSION;
const u8 gGameLanguage = GAME_LANGUAGE;
-// The debug menu expects this exact format. With the English build string, it
-// will overflow on the title debug menu, outputting '9999ィ'.
-#if defined(GERMAN) || DEBUG
-const char BuildDateTime[] = "$Name: debug-Euro-2003-05-09-A $";
-#elif defined(ENGLISH)
-const char BuildDateTime[] = "2002 10 15 20:34";
+// International versions of the debug menu use a different format.
+#if defined(ENGLISH)
+const u8 BuildDateTime[] = "2002 10 15 20:34";
+#elif defined(GERMAN)
+const u8 BuildDateTime[] = "$Name: debug-Euro-2003-05-09-A $";
#endif
const IntrFunc gIntrTableTemplate[] =
diff --git a/src/mauville_man.c b/src/mauville_man.c
index 6fa00b19e..96de37c79 100644
--- a/src/mauville_man.c
+++ b/src/mauville_man.c
@@ -707,9 +707,6 @@ static void Task_BardSong(u8 taskId)
struct MauvilleManBard *bard = &gSaveBlock1.mauvilleMan.bard;
u8 *str = gStringVar4 + task->tCharIndex;
u16 wordLen = 0;
- // Can't get it to match without hacking
- u32 temp;
- register s16 zero asm("r1");
while (*str != CHAR_SPACE
&& *str != CHAR_NEWLINE
@@ -723,17 +720,20 @@ static void Task_BardSong(u8 taskId)
gUnknown_020388BC = MACRO1(bard->songLyrics[task->tCurrWord]);
else
gUnknown_020388BC = MACRO1(bard->temporaryLyrics[task->tCurrWord]);
- temp = gUnknown_03005DA0.var04 / wordLen;
- zero = 0;
- gUnknown_03005DA0.var04 = temp;
+ gUnknown_03005DA0.var04 /= wordLen;
if (gUnknown_03005DA0.var04 <= 0)
gUnknown_03005DA0.var04 = 1;
task->tCurrWord++;
if (task->data[2] == 0)
+ {
task->tState = 3;
+ task->data[1] = 0;
+ }
else
+ {
task->tState = 5;
- task->data[1] = zero;
+ task->data[1] = 0;
+ }
}
break;
case 5:
diff --git a/src/money.c b/src/money.c
index 53800f854..bf93f6dd1 100644
--- a/src/money.c
+++ b/src/money.c
@@ -176,8 +176,32 @@ void sub_80B7AEC(u32 arg0, u8 right, u8 top)
#endif
}
+#ifdef NONMATCHING
+void Draw10000Sprite(u8 var1, u8 var2, s32 var3)
+{
+ // 2D/3D array manipulation off the wazoo.
+ // Converting to 2D/3D array casts makes it match less!
+ u16 i;
+
+ CpuFastSet(
+ (void*)&gDecoration10000_Gfx[var3 * 0x100],
+ (void*)(VRAM + 0x8000 + (var2 * 0x3c0) + ((var1 + 1) * 0x20)),
+ 32);
+ CpuFastSet(
+ (void*)&gDecoration10000_Gfx[var3 * 0x100 + 0x80],
+ (void*)(VRAM + 0x8000 + ((var2 + 1) * 0x3c0) + ((var1 + 1) * 0x20)),
+ 32);
+
+ for (i = 0; i < 4; i++)
+ {
+ u32 base = var2 * 0x20 + var1 + i;
+ ((u16 *)(VRAM + 0xF800))[base] = var2 * 0x1e + 1 + var1 + (u16)-4096;
+ ((u16 *)(VRAM + 0xF840))[base] = (var2 + 1) * 0x1e + 1 + var1 + (u16)-4096;
+ };
+}
+#else
NAKED
-void Draw10000Sprite(u8 var1, u8 var2, int var3)
+void Draw10000Sprite(u8 var1, u8 var2, s32 var3)
{
asm(".syntax unified\n\
push {r4-r7,lr}\n\
@@ -269,6 +293,7 @@ _080B7BE4: .4byte 0x0600f800\n\
_080B7BE8: .4byte 0x0600f840\n\
.syntax divided\n");
}
+#endif
void UpdateMoneyWindow(u32 amount, u8 x, u8 y)
{
diff --git a/src/pokemon_1.c b/src/pokemon_1.c
index 1883c8754..aeeb6080d 100644
--- a/src/pokemon_1.c
+++ b/src/pokemon_1.c
@@ -1764,6 +1764,8 @@ void CalculateMonStats(struct Pokemon *mon)
}
#if DEBUG
+// TODO: check other revisions
+#if !(ENGLISH && REVISION == 0)
void Nakamura_NakaGenderTest_RecalcStats(struct Pokemon *mon)
{
s32 currentHP = GetMonData(mon, MON_DATA_HP, NULL);
@@ -1809,6 +1811,7 @@ void Nakamura_NakaGenderTest_RecalcStats(struct Pokemon *mon)
SetMonData(mon, MON_DATA_HP, &currentHP);
}
#endif
+#endif
void ExpandBoxMon(const struct BoxPokemon *src, struct Pokemon *dest)
{
diff --git a/src/pokemon_storage_system_4.c b/src/pokemon_storage_system_4.c
index db35d60ea..6a1b78192 100644
--- a/src/pokemon_storage_system_4.c
+++ b/src/pokemon_storage_system_4.c
@@ -46,8 +46,8 @@ EWRAM_DATA struct UnkStruct_2000020 *gUnknown_020384EC = NULL;
void sub_809900C(u8 boxId, s8 a1);
s8 sub_8099D90(u8 boxId);
void sub_8099EB0(u8 boxId, s8 a1);
-void sub_8099F58(u16 *vdest, const u16 *src, s8 a2, u8 a3);
-void sub_809A14C(u16 *vdest);
+void CopyWallpaperTilemap(u16 *buffer, const u16 *tilemap, s8 direction, u8 offset);
+void ClearLowestWallpaperTiles(u16 *buffer);
void sub_809A23C(u8 boxId);
void sub_809A3D0(u8 boxId, s8 a1);
void sub_809A598(void);
@@ -444,448 +444,169 @@ void sub_8099EB0(u8 boxId, s8 a1)
if (a1)
{
gPokemonStorageSystemPtr->unk_08ba = gPokemonStorageSystemPtr->unk_08ba ? FALSE : TRUE;
- sub_809A14C(BG_SCREEN_ADDR(26));
+ ClearLowestWallpaperTiles(BG_SCREEN_ADDR(26));
}
wallpaperTable = gWallpaperTable +gPokemonStorage.wallpaper[boxId];
LoadPalette(wallpaperTable->palettes, gPokemonStorageSystemPtr->unk_08ba * 0x30 + 0x40, 0x60);
LZ77UnCompWram(wallpaperTable->tileMap, gPokemonStorageSystemPtr->unk_0d62);
- sub_8099F58(BG_SCREEN_ADDR(26), gPokemonStorageSystemPtr->unk_0d62, a1, gPokemonStorageSystemPtr->unk_08ba);
+ CopyWallpaperTilemap(BG_SCREEN_ADDR(26), gPokemonStorageSystemPtr->unk_0d62, a1, gPokemonStorageSystemPtr->unk_08ba);
LZ77UnCompVram(wallpaperTable->tiles, BG_CHAR_ADDR(2) + (gPokemonStorageSystemPtr->unk_08ba << 13));
}
-#ifdef NONMATCHING
-void sub_8099F58(u16 *vdest, const u16 *src, s8 a2, u8 a3)
+/*
+ Copies the wallpaper rectangle tilemap to a buffer,
+ depending on the wallpaper type.
+
+ - buffer : Where to copy the wallpaper to.
+ - tilemap : The wallpaper tilemap to copy.
+ - direction : The direction of the wallpaper.
+ - offset : The offset of the wallpaper tilemap.
+
+ Also depends on stored BG2 X variable in PSS.
+*/
+void CopyWallpaperTilemap(u16 *buffer, const u16 *tilemap, s8 direction, u8 offset)
{
- s16 r6;
- s16 r3;
- u16 sp0 = a3 << 8;
- u16 sp4 = (a3 * 3 + 4) << 12;
- u16 *r4;
- u16 *r7;
- u16 i;
- u16 j;
- s16 sp8 = ((gPokemonStorageSystemPtr->unk_08b4 >> 3) + 10 + a2 * 24) & 0x3f;
- if (sp8 < 13)
+ u16 *dest; // For either all of the wallpaper tilemap, or the first half of it.
+ u16 *dest2; // The second half of wallpaper tilemap; used in case of two halves.
+ u16 *fillDest; // For blanking; used when direction is set.
+
+ u16 x, y; // Temps for copying the tilemap.
+
+ // Temps for copying the tile and palette metadata of the wallpaper.
+ u16 tileMeta;
+ u16 tileOffset = offset * 256;
+ u16 paletteMeta;
+ u16 paletteOffset = (offset * 3 + 4) << 12;
+
+ s16 rectWidth; // The width of the wallpaper, or it's first half.
+ s16 rectWidth2; // Used in case of two halves.
+ s16 rectX = ((gPokemonStorageSystemPtr->unk_08b4 / 8 + 10) + (direction * 24)) & 0x3F;
+
+ s16 fillX; // For blanking; used when direction is set.
+
+ /*
+ Bull**** agbcc behavior discovered here
+ while attempting to match this function:
+ x + (y + z) is NOT the same as x + y + z.
+ Even though it SHOULDN'T make a difference.
+
+ Rather, it's the same as x + z + y. That's
+ old codegen for you.
+ */
+ if (rectX < 13)
{
- r6 = 20;
- r3 = 0;
- r4 = vdest + sp8 + 0x40;
- r7 = NULL;
+ // Copy the wallpaper in full.
+ rectWidth = 20;
+ rectWidth2 = 0;
+ dest = buffer + (rectX + 64);
+ dest2 = NULL;
}
- else if (sp8 < 32)
+ else if (rectX < 32)
{
- r6 = 32 - sp8;
- r3 = 20 - r6;
- r4 = vdest + sp8 + 0x40;
- r7 = vdest + 0x440;
+ // Split copying the wallpaper into two operations.
+ rectWidth = 32 - rectX;
+ rectWidth2 = 20 - rectWidth;
+ dest = buffer + (rectX + 64);
+ dest2 = buffer + 0x440;
}
- else if (sp8 < 45)
+ else if (rectX < 45)
{
- r6 = 20;
- r3 = 0;
- r4 = vdest + sp8 + 0x420;
- r7 = NULL;
+ // Copy the wallpaper in full.
+ rectWidth = 20;
+ rectWidth2 = 0;
+ dest = buffer + (rectX + 0x420);
+ dest2 = NULL;
}
else
{
- r6 = 64 - sp8;
- r3 = 20 - r6;
- r4 = vdest + sp8 + 0x420;
- r7 = vdest + 0x40;
+ // Split copying the wallpaper into two operations.
+ rectWidth = 64 - rectX;
+ rectWidth2 = 20 - rectWidth;
+ dest = buffer + (rectX + 0x420);
+ dest2 = buffer + 0x40;
}
- for (i = 0; i < 18; i++)
+
+ for (y = 0; y < 18; y++)
{
- for (j = 0; j < r6; j++)
+ for(x = 0; x < rectWidth; x++)
{
- u16 tile = ((*src & 0xfff) + sp0) | ((*src & 0xf000) + sp4);
- r4[j] = tile;
- src++;
+ // Get the tile and palette metadata for each
+ // 2 bytes, and copy over into the buffer.
+ tileMeta = (*tilemap & 0xfff) + tileOffset;
+ paletteMeta = (*tilemap & 0xf000) + paletteOffset;
+ dest[x] = paletteMeta | tileMeta;
+ tilemap++;
}
- for (j = 0; j < r3; j++)
+ for(x = 0; x < rectWidth2; x++)
{
- u16 tile = ((*src & 0xfff) + sp0) | ((*src & 0xf000) + sp4);
- r7[j] = tile;
- src++;
+ // Repeat the same process again in case we need
+ // to copy halves.
+ tileMeta = (*tilemap & 0xfff) + tileOffset;
+ paletteMeta = (*tilemap & 0xf000) + paletteOffset;
+ dest2[x] = paletteMeta | tileMeta;
+ tilemap++;
}
- r4 += 0x20;
- r7 += 0x20;
+ dest += 0x20;
+ dest2 += 0x20;
}
- if (a2)
+
+ if (direction != 0)
{
- s16 r4_2;
- u16 *r2;
- if (a2 > 0)
- r4_2 = (sp8 + 20) & 0x3f;
+ fillX = (direction > 0 ? rectX + 20 : rectX - 4) & 0x3F;
+
+ if(fillX < 32)
+ fillDest = buffer + (fillX + 0x40);
else
- r4_2 = (sp8 - 4) & 0x3f;
- r2 = r4_2 < 0x20 ? vdest + r4_2 + 0x40 : vdest + r4_2 + 0x420;
- for (i = 0; i < 4; i++)
+ fillDest = buffer + (fillX + 0x420);
+
+ for(x = 0; x < 4; x++)
{
- for (j = 0; j < 18; j++)
+ for(y = 0; y < 18; y++)
{
- *r2 = 0;
- r2 += 0x20;
+ *fillDest = 0; // Blank the buffer.
+ fillDest += 0x20;
}
- r4_2++;
- r4_2 &= 0x3f;
- r2 = r4_2 < 0x20 ? vdest + r4_2 + 0x40 : vdest + r4_2 + 0x420;
+ // Needs to be one statement, or else it won't match.
+ // fillX = ++fillX & 0x3F; matches, but to have consistency
+ // with ClearLowestWallpaperTiles, which requires var + 1
+ // instead for a similar operation, we'll use that.
+ fillX = (fillX + 1) & 0x3F;
+
+ if (fillX < 32)
+ fillDest = buffer + (fillX + 0x40);
+ else
+ fillDest = buffer + (fillX + 0x420);
}
}
}
-#else
-NAKED void sub_8099F58(u16 *vdest, const u16 *src, s8 a2, u8 a3)
-{
- asm_unified("\tpush {r4-r7,lr}\n"
- "\tmov r7, r10\n"
- "\tmov r6, r9\n"
- "\tmov r5, r8\n"
- "\tpush {r5-r7}\n"
- "\tsub sp, 0x20\n"
- "\tmov r9, r0\n"
- "\tadds r5, r1, 0\n"
- "\tlsls r2, 24\n"
- "\tlsls r3, 24\n"
- "\tlsrs r3, 24\n"
- "\tlsls r0, r3, 8\n"
- "\tstr r0, [sp]\n"
- "\tlsls r0, r3, 1\n"
- "\tadds r0, r3\n"
- "\tadds r0, 0x4\n"
- "\tlsls r0, 28\n"
- "\tlsrs r0, 16\n"
- "\tstr r0, [sp, 0x4]\n"
- "\tldr r0, _08099FB8 @ =gPokemonStorageSystemPtr\n"
- "\tldr r0, [r0]\n"
- "\tldr r1, _08099FBC @ =0x000008b4\n"
- "\tadds r0, r1\n"
- "\tldrh r1, [r0]\n"
- "\tlsrs r1, 3\n"
- "\tadds r1, 0xA\n"
- "\tlsrs r0, r2, 24\n"
- "\tmov r8, r0\n"
- "\tasrs r2, 24\n"
- "\tlsls r0, r2, 1\n"
- "\tadds r0, r2\n"
- "\tlsls r0, 3\n"
- "\tadds r1, r0\n"
- "\tmovs r0, 0x3F\n"
- "\tands r1, r0\n"
- "\tstr r1, [sp, 0x8]\n"
- "\tadds r2, r1, 0\n"
- "\tcmp r2, 0xC\n"
- "\tbgt _08099FC0\n"
- "\tmovs r6, 0x14\n"
- "\tmovs r3, 0\n"
- "\tlsls r0, r2, 1\n"
- "\tadds r0, 0x80\n"
- "\tmov r1, r9\n"
- "\tadds r4, r1, r0\n"
- "\tmovs r7, 0\n"
- "\tb _0809A020\n"
- "\t.align 2, 0\n"
- "_08099FB8: .4byte gPokemonStorageSystemPtr\n"
- "_08099FBC: .4byte 0x000008b4\n"
- "_08099FC0:\n"
- "\tcmp r2, 0x1F\n"
- "\tbgt _08099FE6\n"
- "\tmovs r0, 0x20\n"
- "\tsubs r0, r2\n"
- "\tlsls r0, 16\n"
- "\tmovs r1, 0x14\n"
- "\tlsrs r6, r0, 16\n"
- "\tasrs r0, 16\n"
- "\tsubs r1, r0\n"
- "\tlsls r1, 16\n"
- "\tlsrs r3, r1, 16\n"
- "\tlsls r0, r2, 1\n"
- "\tadds r0, 0x80\n"
- "\tmov r2, r9\n"
- "\tadds r4, r2, r0\n"
- "\tmovs r7, 0x88\n"
- "\tlsls r7, 4\n"
- "\tadd r7, r9\n"
- "\tb _0809A020\n"
- "_08099FE6:\n"
- "\tcmp r2, 0x2C\n"
- "\tbgt _08099FFE\n"
- "\tmovs r6, 0x14\n"
- "\tmovs r3, 0\n"
- "\tlsls r0, r2, 1\n"
- "\tmovs r1, 0x84\n"
- "\tlsls r1, 4\n"
- "\tadds r0, r1\n"
- "\tmov r2, r9\n"
- "\tadds r4, r2, r0\n"
- "\tmovs r7, 0\n"
- "\tb _0809A020\n"
- "_08099FFE:\n"
- "\tmovs r0, 0x40\n"
- "\tsubs r0, r2\n"
- "\tlsls r0, 16\n"
- "\tmovs r1, 0x14\n"
- "\tlsrs r6, r0, 16\n"
- "\tasrs r0, 16\n"
- "\tsubs r1, r0\n"
- "\tlsls r1, 16\n"
- "\tlsrs r3, r1, 16\n"
- "\tlsls r0, r2, 1\n"
- "\tmovs r1, 0x84\n"
- "\tlsls r1, 4\n"
- "\tadds r0, r1\n"
- "\tmov r2, r9\n"
- "\tadds r4, r2, r0\n"
- "\tmov r7, r9\n"
- "\tadds r7, 0x80\n"
- "_0809A020:\n"
- "\tmovs r1, 0\n"
- "\tmov r0, r8\n"
- "\tlsls r0, 24\n"
- "\tstr r0, [sp, 0x14]\n"
- "\tlsls r0, r6, 16\n"
- "\tasrs r0, 16\n"
- "\tmov r8, r0\n"
- "\tlsls r3, 16\n"
- "\tstr r3, [sp, 0xC]\n"
- "\tasrs r2, r3, 16\n"
- "\tstr r2, [sp, 0x10]\n"
- "_0809A036:\n"
- "\tmovs r3, 0\n"
- "\tadds r0, r4, 0\n"
- "\tadds r0, 0x40\n"
- "\tstr r0, [sp, 0x18]\n"
- "\tadds r2, r7, 0\n"
- "\tadds r2, 0x40\n"
- "\tstr r2, [sp, 0x1C]\n"
- "\tadds r1, 0x1\n"
- "\tmov r10, r1\n"
- "\tcmp r3, r8\n"
- "\tbge _0809A07A\n"
- "\tldr r0, _0809A0D4 @ =0x00000fff\n"
- "\tmov r12, r0\n"
- "\tmovs r6, 0xF0\n"
- "\tlsls r6, 8\n"
- "_0809A054:\n"
- "\tldrh r2, [r5]\n"
- "\tmov r0, r12\n"
- "\tands r0, r2\n"
- "\tldr r1, [sp]\n"
- "\tadds r0, r1, r0\n"
- "\tadds r1, r6, 0\n"
- "\tands r1, r2\n"
- "\tldr r2, [sp, 0x4]\n"
- "\tadds r1, r2, r1\n"
- "\torrs r1, r0\n"
- "\tlsls r0, r3, 1\n"
- "\tadds r0, r4\n"
- "\tstrh r1, [r0]\n"
- "\tadds r5, 0x2\n"
- "\tadds r0, r3, 0x1\n"
- "\tlsls r0, 16\n"
- "\tlsrs r3, r0, 16\n"
- "\tcmp r3, r8\n"
- "\tblt _0809A054\n"
- "_0809A07A:\n"
- "\tmovs r3, 0\n"
- "\tldr r0, [sp, 0x10]\n"
- "\tcmp r3, r0\n"
- "\tbge _0809A0B4\n"
- "\tldr r1, _0809A0D4 @ =0x00000fff\n"
- "\tmov r12, r1\n"
- "\tmovs r6, 0xF0\n"
- "\tlsls r6, 8\n"
- "\tldr r2, [sp, 0xC]\n"
- "\tasrs r4, r2, 16\n"
- "_0809A08E:\n"
- "\tldrh r2, [r5]\n"
- "\tmov r0, r12\n"
- "\tands r0, r2\n"
- "\tldr r1, [sp]\n"
- "\tadds r0, r1, r0\n"
- "\tadds r1, r6, 0\n"
- "\tands r1, r2\n"
- "\tldr r2, [sp, 0x4]\n"
- "\tadds r1, r2, r1\n"
- "\torrs r1, r0\n"
- "\tlsls r0, r3, 1\n"
- "\tadds r0, r7\n"
- "\tstrh r1, [r0]\n"
- "\tadds r5, 0x2\n"
- "\tadds r0, r3, 0x1\n"
- "\tlsls r0, 16\n"
- "\tlsrs r3, r0, 16\n"
- "\tcmp r3, r4\n"
- "\tblt _0809A08E\n"
- "_0809A0B4:\n"
- "\tldr r4, [sp, 0x18]\n"
- "\tldr r7, [sp, 0x1C]\n"
- "\tmov r1, r10\n"
- "\tlsls r0, r1, 16\n"
- "\tlsrs r1, r0, 16\n"
- "\tcmp r1, 0x11\n"
- "\tbls _0809A036\n"
- "\tldr r0, [sp, 0x14]\n"
- "\tasrs r2, r0, 24\n"
- "\tcmp r2, 0\n"
- "\tbeq _0809A13A\n"
- "\tcmp r2, 0\n"
- "\tble _0809A0D8\n"
- "\tldr r1, [sp, 0x8]\n"
- "\tadds r1, 0x14\n"
- "\tb _0809A0DC\n"
- "\t.align 2, 0\n"
- "_0809A0D4: .4byte 0x00000fff\n"
- "_0809A0D8:\n"
- "\tldr r1, [sp, 0x8]\n"
- "\tsubs r1, 0x4\n"
- "_0809A0DC:\n"
- "\tmovs r0, 0x3F\n"
- "\tands r1, r0\n"
- "\tadds r4, r1, 0\n"
- "\tadds r0, r4, 0\n"
- "\tcmp r0, 0x1F\n"
- "\tbgt _0809A0EE\n"
- "\tlsls r0, 1\n"
- "\tadds r0, 0x80\n"
- "\tb _0809A0F6\n"
- "_0809A0EE:\n"
- "\tlsls r0, 1\n"
- "\tmovs r2, 0x84\n"
- "\tlsls r2, 4\n"
- "\tadds r0, r2\n"
- "_0809A0F6:\n"
- "\tmov r1, r9\n"
- "\tadds r2, r1, r0\n"
- "\tmovs r3, 0\n"
- "\tmovs r6, 0\n"
- "_0809A0FE:\n"
- "\tmovs r1, 0\n"
- "\tadds r5, r3, 0x1\n"
- "\tlsls r3, r4, 16\n"
- "_0809A104:\n"
- "\tstrh r6, [r2]\n"
- "\tadds r2, 0x40\n"
- "\tadds r0, r1, 0x1\n"
- "\tlsls r0, 16\n"
- "\tlsrs r1, r0, 16\n"
- "\tcmp r1, 0x11\n"
- "\tbls _0809A104\n"
- "\tasrs r0, r3, 16\n"
- "\tadds r4, r0, 0x1\n"
- "\tmovs r0, 0x3F\n"
- "\tands r4, r0\n"
- "\tadds r0, r4, 0\n"
- "\tcmp r0, 0x1F\n"
- "\tbgt _0809A126\n"
- "\tlsls r0, 1\n"
- "\tadds r0, 0x80\n"
- "\tb _0809A12E\n"
- "_0809A126:\n"
- "\tlsls r0, 1\n"
- "\tmovs r2, 0x84\n"
- "\tlsls r2, 4\n"
- "\tadds r0, r2\n"
- "_0809A12E:\n"
- "\tmov r1, r9\n"
- "\tadds r2, r1, r0\n"
- "\tlsls r0, r5, 16\n"
- "\tlsrs r3, r0, 16\n"
- "\tcmp r3, 0x3\n"
- "\tbls _0809A0FE\n"
- "_0809A13A:\n"
- "\tadd sp, 0x20\n"
- "\tpop {r3-r5}\n"
- "\tmov r8, r3\n"
- "\tmov r9, r4\n"
- "\tmov r10, r5\n"
- "\tpop {r4-r7}\n"
- "\tpop {r0}\n"
- "\tbx r0");
-}
-#endif
-#ifdef NONMATCHING
-void sub_809A14C(u16 *vdest)
+/*
+ Clears the lowest line of a wallpaper buffer.
+ Depends on stored BG2 X variable in PSS.
+
+ - buffer : Wallpaper buffer.
+*/
+void ClearLowestWallpaperTiles(u16 *buffer)
{
- u16 *r2;
- u16 i;
- int r3 = ((gPokemonStorageSystemPtr->unk_08b4 >> 3) + 30) & 0x3f;
- r2 = vdest + (r3 < 0x20 ? r3 + 0x260 : r3 + 0x640);
- for (i = 0; i < 0x2b; i++)
- {
- *r2++ = 0;
- r3++;
- r3 &= 0x3f;
- if (r3 == 0)
- r2 -= 0x420;
- if (r3 == 0x20)
- r2 += 0x3e0;
- }
-}
-#else
-NAKED void sub_809A14C(u16 *vdest)
-{
- asm_unified("\tpush {r4-r6,lr}\n"
- "\tadds r2, r0, 0\n"
- "\tldr r0, _0809A174 @ =gPokemonStorageSystemPtr\n"
- "\tldr r0, [r0]\n"
- "\tldr r1, _0809A178 @ =0x000008b4\n"
- "\tadds r0, r1\n"
- "\tldrh r0, [r0]\n"
- "\tlsrs r0, 3\n"
- "\tadds r3, r0, 0\n"
- "\tadds r3, 0x1E\n"
- "\tmovs r0, 0x3F\n"
- "\tands r3, r0\n"
- "\tadds r0, r3, 0\n"
- "\tcmp r0, 0x1F\n"
- "\tbgt _0809A17C\n"
- "\tlsls r0, 1\n"
- "\tmovs r6, 0x98\n"
- "\tlsls r6, 3\n"
- "\tadds r0, r6\n"
- "\tb _0809A184\n"
- "\t.align 2, 0\n"
- "_0809A174: .4byte gPokemonStorageSystemPtr\n"
- "_0809A178: .4byte 0x000008b4\n"
- "_0809A17C:\n"
- "\tlsls r0, 1\n"
- "\tmovs r1, 0xC8\n"
- "\tlsls r1, 4\n"
- "\tadds r0, r1\n"
- "_0809A184:\n"
- "\tadds r2, r0\n"
- "\tmovs r0, 0\n"
- "\tmovs r5, 0\n"
- "\tmovs r4, 0x3F\n"
- "_0809A18C:\n"
- "\tstrh r5, [r2]\n"
- "\tadds r2, 0x2\n"
- "\tadds r3, 0x1\n"
- "\tands r3, r4\n"
- "\tadds r1, r3, 0\n"
- "\tcmp r1, 0\n"
- "\tbne _0809A19E\n"
- "\tldr r6, _0809A1B8 @ =0xfffff7c0\n"
- "\tadds r2, r6\n"
- "_0809A19E:\n"
- "\tcmp r1, 0x20\n"
- "\tbne _0809A1A8\n"
- "\tmovs r1, 0xF8\n"
- "\tlsls r1, 3\n"
- "\tadds r2, r1\n"
- "_0809A1A8:\n"
- "\tadds r0, 0x1\n"
- "\tlsls r0, 16\n"
- "\tlsrs r0, 16\n"
- "\tcmp r0, 0x2B\n"
- "\tbls _0809A18C\n"
- "\tpop {r4-r6}\n"
- "\tpop {r0}\n"
- "\tbx r0\n"
- "\t.align 2, 0\n"
- "_0809A1B8: .4byte 0xfffff7c0");
+ u16 x;
+ s16 rectX = ((gPokemonStorageSystemPtr->unk_08b4 / 8) + 30) & 0x3F;
+
+ if (rectX < 32)
+ buffer += rectX + 0x260;
+ else
+ buffer += rectX + 0x640;
+
+ for (x = 0; x < 44; x++)
+ {
+ *buffer++ = 0;
+ // Needs to be one statement in order to match.
+ rectX = (rectX + 1) & 0x3F;
+ if (rectX == 0)
+ buffer -= 0x420;
+ if (rectX == 32)
+ buffer += 0x3e0;
+ }
}
-#endif
void sub_809A1BC(const u8 *a0, const u8 *text)
{
@@ -2234,73 +1955,79 @@ u8 sub_809C464(void)
return r9;
}
-#ifdef NONMATCHING
u8 sub_809C664(void)
{
- s8 r10 = sBoxCursorArea;
- s8 r4 = sBoxCursorPosition;
- u8 r8;
- u8 r9;
+ u8 retVal;
+ bool8 gotoBox;
+ s8 cursorArea;
+ s8 cursorPosition;
do
{
+ cursorArea = sBoxCursorArea;
+ cursorPosition = sBoxCursorPosition;
gPokemonStorageSystemPtr->unk_11df = 0;
gPokemonStorageSystemPtr->unk_11de = 0;
gPokemonStorageSystemPtr->unk_11e3 = 0;
- r9 = FALSE;
- r8 = 0;
+ gotoBox = FALSE;
+ retVal = 0;
+
if (JOY_REPT(DPAD_UP))
{
- r4--;
- if (r4 < 0)
- r4 = 6;
- if (r4 != sBoxCursorPosition)
- r8 = 1;
+ if (--cursorPosition < 0)
+ cursorPosition = 6;
+ if (cursorPosition != sBoxCursorPosition)
+ retVal = 1;
break;
}
+
if (JOY_REPT(DPAD_DOWN))
{
- r4++;
- if (r4 > 6)
- r4 = 0;
- if (r4 != sBoxCursorPosition)
- r8 = 1;
+ if (++cursorPosition > 6)
+ cursorPosition = 0;
+ if (cursorPosition != sBoxCursorPosition)
+ retVal = 1;
break;
}
- if ((JOY_REPT(DPAD_LEFT)) && sBoxCursorPosition != 0)
+
+ if (JOY_REPT(DPAD_LEFT) && sBoxCursorPosition != 0)
{
- r8 = 1;
+ retVal = 1;
gPokemonStorageSystemPtr->unk_11e2 = sBoxCursorPosition;
- r4 = 0;
+ cursorPosition = 0;
break;
}
+
if (JOY_REPT(DPAD_RIGHT))
{
if (sBoxCursorPosition == 0)
{
- r8 = 1;
- r4 = gPokemonStorageSystemPtr->unk_11e2;
+ retVal = 1;
+ cursorPosition = gPokemonStorageSystemPtr->unk_11e2;
}
else
{
- r8 = 6;
- r10 = 0;
- r4 = 0;
+ retVal = 6;
+ cursorArea = 0;
+ cursorPosition = 0;
}
break;
}
+
if (JOY_NEW(A_BUTTON))
{
if (sBoxCursorPosition == 6)
{
if (gPokemonStorageSystemPtr->unk_0005 == 1)
return 4;
- r9 = TRUE;
+
+ gotoBox = TRUE;
}
else if (sub_809CAB0())
{
- if (gUnknown_020384E9 == 0)
+ if (!gUnknown_020384E9)
return 8;
+
switch (sub_809CE4C(0))
{
case 1:
@@ -2316,575 +2043,187 @@ u8 sub_809C664(void)
}
}
}
+
if (JOY_NEW(B_BUTTON))
{
if (gPokemonStorageSystemPtr->unk_0005 == 1)
return 16;
- r9 = TRUE;
+
+ gotoBox = TRUE;
}
- if (r9)
+
+ if (gotoBox)
{
- r8 = 6;
- r10 = 0;
- r4 = 0;
+ retVal = 6;
+ cursorArea = 0;
+ cursorPosition = 0;
break;
}
+
if (JOY_NEW(SELECT_BUTTON))
{
sub_809CD88();
return 0;
}
} while (0);
- if (r8)
- sub_809AF18(r10, r4);
- return r8;
-}
-#else
-NAKED u8 sub_809C664(void)
-{
- asm_unified("\tpush {r4-r7,lr}\n"
- "\tmov r7, r10\n"
- "\tmov r6, r9\n"
- "\tmov r5, r8\n"
- "\tpush {r5-r7}\n"
- "\tldr r0, _0809C6D8 @ =sBoxCursorArea\n"
- "\tldrb r0, [r0]\n"
- "\tmov r10, r0\n"
- "\tldr r7, _0809C6DC @ =sBoxCursorPosition\n"
- "\tldrb r4, [r7]\n"
- "\tldr r2, _0809C6E0 @ =gPokemonStorageSystemPtr\n"
- "\tldr r5, [r2]\n"
- "\tldr r1, _0809C6E4 @ =0x000011df\n"
- "\tadds r0, r5, r1\n"
- "\tmovs r1, 0\n"
- "\tstrb r1, [r0]\n"
- "\tldr r3, _0809C6E8 @ =0x000011de\n"
- "\tadds r0, r5, r3\n"
- "\tstrb r1, [r0]\n"
- "\tadds r3, 0x5\n"
- "\tadds r0, r5, r3\n"
- "\tstrb r1, [r0]\n"
- "\tmov r9, r1\n"
- "\tmov r8, r1\n"
- "\tldr r1, _0809C6EC @ =gMain\n"
- "\tldrh r3, [r1, 0x30]\n"
- "\tmovs r0, 0x40\n"
- "\tands r0, r3\n"
- "\tadds r6, r7, 0\n"
- "\tmov r12, r2\n"
- "\tadds r2, r1, 0\n"
- "\tcmp r0, 0\n"
- "\tbeq _0809C6A8\n"
- "\tb _0809C81C\n"
- "_0809C6A8:\n"
- "\tmovs r0, 0x80\n"
- "\tands r0, r3\n"
- "\tcmp r0, 0\n"
- "\tbeq _0809C6F0\n"
- "\tlsls r0, r4, 24\n"
- "\tmovs r1, 0x80\n"
- "\tlsls r1, 17\n"
- "\tadds r0, r1\n"
- "\tlsrs r4, r0, 24\n"
- "\tasrs r0, 24\n"
- "\tcmp r0, 0x6\n"
- "\tble _0809C6C2\n"
- "\tmovs r4, 0\n"
- "_0809C6C2:\n"
- "\tlsls r0, r4, 24\n"
- "\tasrs r0, 24\n"
- "\tmovs r1, 0\n"
- "\tldrsb r1, [r6, r1]\n"
- "\tcmp r0, r1\n"
- "\tbne _0809C6D0\n"
- "\tb _0809C83C\n"
- "_0809C6D0:\n"
- "\tmovs r2, 0x1\n"
- "\tmov r8, r2\n"
- "\tb _0809C842\n"
- "\t.align 2, 0\n"
- "_0809C6D8: .4byte sBoxCursorArea\n"
- "_0809C6DC: .4byte sBoxCursorPosition\n"
- "_0809C6E0: .4byte gPokemonStorageSystemPtr\n"
- "_0809C6E4: .4byte 0x000011df\n"
- "_0809C6E8: .4byte 0x000011de\n"
- "_0809C6EC: .4byte gMain\n"
- "_0809C6F0:\n"
- "\tmovs r0, 0x20\n"
- "\tands r0, r3\n"
- "\tcmp r0, 0\n"
- "\tbeq _0809C714\n"
- "\tldrb r1, [r6]\n"
- "\tmovs r0, 0\n"
- "\tldrsb r0, [r6, r0]\n"
- "\tcmp r0, 0\n"
- "\tbeq _0809C714\n"
- "\tmovs r3, 0x1\n"
- "\tmov r8, r3\n"
- "\tldr r2, _0809C710 @ =0x000011e2\n"
- "\tadds r0, r5, r2\n"
- "\tstrb r1, [r0]\n"
- "\tmovs r4, 0\n"
- "\tb _0809C83C\n"
- "\t.align 2, 0\n"
- "_0809C710: .4byte 0x000011e2\n"
- "_0809C714:\n"
- "\tldrh r1, [r2, 0x30]\n"
- "\tmovs r0, 0x10\n"
- "\tands r0, r1\n"
- "\tcmp r0, 0\n"
- "\tbeq _0809C748\n"
- "\tmovs r0, 0\n"
- "\tldrsb r0, [r6, r0]\n"
- "\tcmp r0, 0\n"
- "\tbne _0809C73C\n"
- "\tmovs r3, 0x1\n"
- "\tmov r8, r3\n"
- "\tmov r1, r12\n"
- "\tldr r0, [r1]\n"
- "\tldr r2, _0809C738 @ =0x000011e2\n"
- "\tadds r0, r2\n"
- "\tldrb r4, [r0]\n"
- "\tb _0809C83C\n"
- "\t.align 2, 0\n"
- "_0809C738: .4byte 0x000011e2\n"
- "_0809C73C:\n"
- "\tmovs r3, 0x6\n"
- "\tmov r8, r3\n"
- "\tmovs r0, 0\n"
- "\tmov r10, r0\n"
- "\tmovs r4, 0\n"
- "\tb _0809C83C\n"
- "_0809C748:\n"
- "\tldrh r1, [r2, 0x2E]\n"
- "\tmovs r0, 0x1\n"
- "\tands r0, r1\n"
- "\tcmp r0, 0\n"
- "\tbeq _0809C7D0\n"
- "\tmovs r0, 0\n"
- "\tldrsb r0, [r6, r0]\n"
- "\tcmp r0, 0x6\n"
- "\tbne _0809C76E\n"
- "\tmov r1, r12\n"
- "\tldr r0, [r1]\n"
- "\tldrb r0, [r0, 0x5]\n"
- "\tcmp r0, 0x1\n"
- "\tbne _0809C768\n"
- "\tmovs r0, 0x4\n"
- "\tb _0809C84C\n"
- "_0809C768:\n"
- "\tmovs r2, 0x1\n"
- "\tmov r9, r2\n"
- "\tb _0809C7D0\n"
- "_0809C76E:\n"
- "\tbl sub_809CAB0\n"
- "\tlsls r0, 24\n"
- "\tcmp r0, 0\n"
- "\tbeq _0809C7D0\n"
- "\tldr r0, _0809C784 @ =gUnknown_020384E9\n"
- "\tldrb r0, [r0]\n"
- "\tcmp r0, 0\n"
- "\tbne _0809C788\n"
- "\tmovs r0, 0x8\n"
- "\tb _0809C84C\n"
- "\t.align 2, 0\n"
- "_0809C784: .4byte gUnknown_020384E9\n"
- "_0809C788:\n"
- "\tmovs r0, 0\n"
- "\tbl sub_809CE4C\n"
- "\tsubs r0, 0x1\n"
- "\tlsls r0, 24\n"
- "\tasrs r0, 24\n"
- "\tcmp r0, 0x4\n"
- "\tbhi _0809C7D0\n"
- "\tlsls r0, 2\n"
- "\tldr r1, _0809C7A4 @ =_0809C7A8\n"
- "\tadds r0, r1\n"
- "\tldr r0, [r0]\n"
- "\tmov pc, r0\n"
- "\t.align 2, 0\n"
- "_0809C7A4: .4byte _0809C7A8\n"
- "\t.align 2, 0\n"
- "_0809C7A8:\n"
- "\t.4byte _0809C7BC\n"
- "\t.4byte _0809C7C0\n"
- "\t.4byte _0809C7C4\n"
- "\t.4byte _0809C7C8\n"
- "\t.4byte _0809C7CC\n"
- "_0809C7BC:\n"
- "\tmovs r0, 0xB\n"
- "\tb _0809C84C\n"
- "_0809C7C0:\n"
- "\tmovs r0, 0xC\n"
- "\tb _0809C84C\n"
- "_0809C7C4:\n"
- "\tmovs r0, 0xD\n"
- "\tb _0809C84C\n"
- "_0809C7C8:\n"
- "\tmovs r0, 0xE\n"
- "\tb _0809C84C\n"
- "_0809C7CC:\n"
- "\tmovs r0, 0xF\n"
- "\tb _0809C84C\n"
- "_0809C7D0:\n"
- "\tldr r2, _0809C7EC @ =gMain\n"
- "\tldrh r1, [r2, 0x2E]\n"
- "\tmovs r0, 0x2\n"
- "\tands r0, r1\n"
- "\tcmp r0, 0\n"
- "\tbeq _0809C7F8\n"
- "\tldr r0, _0809C7F0 @ =gPokemonStorageSystemPtr\n"
- "\tldr r0, [r0]\n"
- "\tldrb r0, [r0, 0x5]\n"
- "\tcmp r0, 0x1\n"
- "\tbne _0809C7F4\n"
- "\tmovs r0, 0x10\n"
- "\tb _0809C84C\n"
- "\t.align 2, 0\n"
- "_0809C7EC: .4byte gMain\n"
- "_0809C7F0: .4byte gPokemonStorageSystemPtr\n"
- "_0809C7F4:\n"
- "\tmovs r3, 0x1\n"
- "\tmov r9, r3\n"
- "_0809C7F8:\n"
- "\tmov r0, r9\n"
- "\tcmp r0, 0\n"
- "\tbeq _0809C80A\n"
- "\tmovs r1, 0x6\n"
- "\tmov r8, r1\n"
- "\tmovs r2, 0\n"
- "\tmov r10, r2\n"
- "\tmovs r4, 0\n"
- "\tb _0809C83C\n"
- "_0809C80A:\n"
- "\tldrh r1, [r2, 0x2E]\n"
- "\tmovs r0, 0x4\n"
- "\tands r0, r1\n"
- "\tcmp r0, 0\n"
- "\tbeq _0809C83C\n"
- "\tbl sub_809CD88\n"
- "\tmovs r0, 0\n"
- "\tb _0809C84C\n"
- "_0809C81C:\n"
- "\tlsls r0, r4, 24\n"
- "\tmovs r3, 0xFF\n"
- "\tlsls r3, 24\n"
- "\tadds r0, r3\n"
- "\tlsrs r4, r0, 24\n"
- "\tcmp r0, 0\n"
- "\tbge _0809C82C\n"
- "\tmovs r4, 0x6\n"
- "_0809C82C:\n"
- "\tlsls r0, r4, 24\n"
- "\tasrs r0, 24\n"
- "\tmovs r1, 0\n"
- "\tldrsb r1, [r7, r1]\n"
- "\tcmp r0, r1\n"
- "\tbeq _0809C83C\n"
- "\tmovs r0, 0x1\n"
- "\tmov r8, r0\n"
- "_0809C83C:\n"
- "\tmov r1, r8\n"
- "\tcmp r1, 0\n"
- "\tbeq _0809C84A\n"
- "_0809C842:\n"
- "\tmov r0, r10\n"
- "\tadds r1, r4, 0\n"
- "\tbl sub_809AF18\n"
- "_0809C84A:\n"
- "\tmov r0, r8\n"
- "_0809C84C:\n"
- "\tpop {r3-r5}\n"
- "\tmov r8, r3\n"
- "\tmov r9, r4\n"
- "\tmov r10, r5\n"
- "\tpop {r4-r7}\n"
- "\tpop {r1}\n"
- "\tbx r1");
+
+ if (retVal != 0)
+ {
+ sub_809AF18(cursorArea, cursorPosition);
+ }
+
+ return retVal;
}
-#endif
u8 sub_809C85C(void)
{
u8 retVal;
- s8 var0;
- register s8 var1 asm("r5"); // FAKEMATCHING: r5 and r6 become swapped without this register hack
-
- gPokemonStorageSystemPtr->unk_11df = 0;
- gPokemonStorageSystemPtr->unk_11de = 0;
- gPokemonStorageSystemPtr->unk_11e3 = 0;
+ s8 cursorArea;
+ s8 cursorPosition;
- if (!(gMain.newAndRepeatedKeys & DPAD_UP))
+ do
{
- if (gMain.newAndRepeatedKeys & DPAD_DOWN)
+ gPokemonStorageSystemPtr->unk_11df = 0;
+ gPokemonStorageSystemPtr->unk_11de = 0;
+ gPokemonStorageSystemPtr->unk_11e3 = 0;
+
+ if (JOY_REPT(DPAD_UP))
{
retVal = 1;
- var0 = 0;
- var1 = 2;
+ cursorArea = 3;
+ cursorPosition = 0;
+ gPokemonStorageSystemPtr->unk_11e3 = 1;
+ break;
}
- else
+ else if (JOY_REPT(DPAD_DOWN))
{
- if (gMain.heldKeys & DPAD_LEFT)
+ retVal = 1;
+ cursorArea = 0;
+ cursorPosition = 2;
+ break;
+ }
+
+ if (gMain.heldKeys & DPAD_LEFT)
+ return 10;
+ if (gMain.heldKeys & DPAD_RIGHT)
+ return 9;
+
+ if (gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR)
+ {
+ if (gMain.heldKeys & L_BUTTON)
return 10;
- if (gMain.heldKeys & DPAD_RIGHT)
+ if (gMain.heldKeys & R_BUTTON)
return 9;
- if (gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR)
- {
- if (gMain.heldKeys & L_BUTTON)
- return 10;
- if (gMain.heldKeys & R_BUTTON)
- return 9;
- }
-
- if (gMain.newKeys & A_BUTTON)
- {
- sub_809A860(0);
- sub_809CA8C();
- return 7;
- }
+ }
- if (gMain.newKeys & B_BUTTON)
- return 16;
+ if (JOY_NEW(A_BUTTON))
+ {
+ sub_809A860(FALSE);
+ sub_809CA8C();
+ return 7;
+ }
- if (gMain.newKeys & SELECT_BUTTON)
- {
- sub_809CD88();
- return 0;
- }
+ if (JOY_NEW(B_BUTTON))
+ return 16;
- retVal = 0;
+ if (JOY_NEW(SELECT_BUTTON))
+ {
+ sub_809CD88();
+ return 0;
}
- }
- else
- {
- retVal = 1;
- var0 = 3;
- var1 = 0;
- gPokemonStorageSystemPtr->unk_11e3 = 1;
- }
- if (retVal)
+ retVal = 0;
+ } while (0);
+
+ if (retVal != 0)
{
- if (var0 != 2)
- sub_809A860(0);
- sub_809AF18(var0, var1);
- return retVal;
+ if (cursorArea != 2)
+ sub_809A860(FALSE);
+ sub_809AF18(cursorArea, cursorPosition);
}
return retVal;
}
-#ifdef NONMATCHING
u8 sub_809C944(void)
{
- u8 r6;
- s8 var0 = sBoxCursorArea;
- s8 var1 = sBoxCursorPosition;
-
- gPokemonStorageSystemPtr->unk_11df = 0;
- gPokemonStorageSystemPtr->unk_11de = 0;
- gPokemonStorageSystemPtr->unk_11e3 = 0;
+ u8 retVal;
+ s8 cursorArea;
+ s8 cursorPosition;
- if (!(gMain.newAndRepeatedKeys & DPAD_UP))
+ do
{
- if (gMain.newAndRepeatedKeys & (DPAD_DOWN | START_BUTTON))
+ cursorArea = sBoxCursorArea;
+ cursorPosition = sBoxCursorPosition;
+ gPokemonStorageSystemPtr->unk_11df = 0;
+ gPokemonStorageSystemPtr->unk_11de = 0;
+ gPokemonStorageSystemPtr->unk_11e3 = 0;
+
+ if (JOY_REPT(DPAD_UP))
{
- r6 = 1;
- var0 = 2;
- var1 = 0;
+ retVal = 1;
+ cursorArea = 0;
+ gPokemonStorageSystemPtr->unk_11de = -1;
+ if (sBoxCursorPosition == 0)
+ cursorPosition = 24;
+ else
+ cursorPosition = 29;
+ gPokemonStorageSystemPtr->unk_11e3 = 1;
+ break;
+ }
+
+ if (JOY_REPT(DPAD_DOWN | START_BUTTON))
+ {
+ retVal = 1;
+ cursorArea = 2;
+ cursorPosition = 0;
gPokemonStorageSystemPtr->unk_11e3 = 1;
+ break;
}
- else if (gMain.newAndRepeatedKeys & DPAD_LEFT)
+
+ if (JOY_REPT(DPAD_LEFT))
{
- r6 = 1;
- var1 -= 1;
- if (var1 < 0)
+ retVal = 1;
+ if (--cursorPosition < 0)
{
gPokemonStorageSystemPtr->unk_11df = -1;
- var1 = 1;
+ cursorPosition = 1;
}
+ break;
}
- else if (gMain.newAndRepeatedKeys & DPAD_RIGHT)
+
+ if (JOY_REPT(DPAD_RIGHT))
{
- r6 = 1;
- var1 += 1;
- if (var1 > 1)
+ retVal = 1;
+ if (++cursorPosition > 1)
{
gPokemonStorageSystemPtr->unk_11df = 1;
- var1 = 0;
+ cursorPosition = 0;
}
+ break;
}
- else if (gMain.newKeys & A_BUTTON)
- {
- return var1 == 0 ? 5 : 4;
- }
- else if (gMain.newKeys & B_BUTTON)
- {
+
+ if (JOY_NEW(A_BUTTON))
+ return (cursorPosition == 0) ? 5 : 4;
+ if (JOY_NEW(B_BUTTON))
return 16;
- }
- else if (gMain.newKeys & SELECT_BUTTON)
+
+ if (JOY_NEW(SELECT_BUTTON))
{
sub_809CD88();
return 0;
}
- else
- {
- r6 = 0;
- }
- }
- else
- {
- r6 = 1;
- var0 = 0;
- gPokemonStorageSystemPtr->unk_11de = -1;
- var1 = !sBoxCursorPosition ? 24 : 29;
- gPokemonStorageSystemPtr->unk_11e3 = 1;
- }
- if (r6)
+ retVal = 0;
+ } while (0);
+
+ if (retVal != 0)
{
- sub_809AF18(var0, var1);
+ sub_809AF18(cursorArea, cursorPosition);
}
- return r6;
+ return retVal;
}
-#else
-NAKED
-u8 sub_809C944(void)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- ldr r0, _0809C988 @ =sBoxCursorArea\n\
- ldrb r0, [r0]\n\
- mov r12, r0\n\
- ldr r7, _0809C98C @ =sBoxCursorPosition\n\
- ldrb r3, [r7]\n\
- ldr r0, _0809C990 @ =gPokemonStorageSystemPtr\n\
- ldr r1, [r0]\n\
- ldr r0, _0809C994 @ =0x000011df\n\
- adds r5, r1, r0\n\
- movs r0, 0\n\
- strb r0, [r5]\n\
- ldr r2, _0809C998 @ =0x000011de\n\
- adds r4, r1, r2\n\
- strb r0, [r4]\n\
- adds r2, 0x5\n\
- adds r1, r2\n\
- strb r0, [r1]\n\
- ldr r6, _0809C99C @ =gMain\n\
- ldrh r2, [r6, 0x30]\n\
- movs r0, 0x40\n\
- ands r0, r2\n\
- cmp r0, 0\n\
- bne _0809CA14\n\
- movs r0, 0x88\n\
- ands r0, r2\n\
- cmp r0, 0\n\
- beq _0809C9A0\n\
- movs r6, 0x1\n\
- movs r0, 0x2\n\
- mov r12, r0\n\
- movs r3, 0\n\
- b _0809CA2A\n\
- .align 2, 0\n\
-_0809C988: .4byte sBoxCursorArea\n\
-_0809C98C: .4byte sBoxCursorPosition\n\
-_0809C990: .4byte gPokemonStorageSystemPtr\n\
-_0809C994: .4byte 0x000011df\n\
-_0809C998: .4byte 0x000011de\n\
-_0809C99C: .4byte gMain\n\
-_0809C9A0:\n\
- movs r0, 0x20\n\
- ands r0, r2\n\
- cmp r0, 0\n\
- beq _0809C9C0\n\
- movs r6, 0x1\n\
- lsls r0, r3, 24\n\
- movs r1, 0xFF\n\
- lsls r1, 24\n\
- adds r0, r1\n\
- lsrs r3, r0, 24\n\
- cmp r0, 0\n\
- bge _0809CA2C\n\
- movs r0, 0xFF\n\
- strb r0, [r5]\n\
- movs r3, 0x1\n\
- b _0809CA2C\n\
-_0809C9C0:\n\
- movs r0, 0x10\n\
- ands r0, r2\n\
- cmp r0, 0\n\
- beq _0809C9E0\n\
- movs r6, 0x1\n\
- lsls r0, r3, 24\n\
- movs r2, 0x80\n\
- lsls r2, 17\n\
- adds r0, r2\n\
- lsrs r3, r0, 24\n\
- asrs r0, 24\n\
- cmp r0, 0x1\n\
- ble _0809CA2C\n\
- strb r6, [r5]\n\
- movs r3, 0\n\
- b _0809CA2C\n\
-_0809C9E0:\n\
- ldrh r1, [r6, 0x2E]\n\
- movs r0, 0x1\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0809C9F4\n\
- movs r0, 0x4\n\
- cmp r3, 0\n\
- bne _0809CA3A\n\
- movs r0, 0x5\n\
- b _0809CA3A\n\
-_0809C9F4:\n\
- movs r0, 0x2\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0809CA00\n\
- movs r0, 0x10\n\
- b _0809CA3A\n\
-_0809CA00:\n\
- movs r0, 0x4\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0809CA10\n\
- bl sub_809CD88\n\
- movs r0, 0\n\
- b _0809CA3A\n\
-_0809CA10:\n\
- movs r6, 0\n\
- b _0809CA38\n\
-_0809CA14:\n\
- movs r6, 0x1\n\
- movs r0, 0\n\
- mov r12, r0\n\
- movs r0, 0xFF\n\
- strb r0, [r4]\n\
- movs r0, 0\n\
- ldrsb r0, [r7, r0]\n\
- movs r3, 0x1D\n\
- cmp r0, 0\n\
- bne _0809CA2A\n\
- movs r3, 0x18\n\
-_0809CA2A:\n\
- strb r6, [r1]\n\
-_0809CA2C:\n\
- cmp r6, 0\n\
- beq _0809CA38\n\
- mov r0, r12\n\
- adds r1, r3, 0\n\
- bl sub_809AF18\n\
-_0809CA38:\n\
- adds r0, r6, 0\n\
-_0809CA3A:\n\
- pop {r4-r7}\n\
- pop {r1}\n\
- bx r1\n\
- .syntax divided\n");
-}
-#endif // NONMATCHING
u8 sub_809CA40(void)
{
@@ -3113,44 +2452,46 @@ void sub_809CE84(void)
gPokemonStorageSystemPtr->unk_11b9);
}
-#ifdef NONMATCHING // r4 and r5 are swapped throughout the entire function.
s16 sub_809CF30(void)
{
int textId = -2;
- if (!(gMain.newKeys & A_BUTTON))
+ do
{
- if (gMain.newKeys & B_BUTTON)
+ if (!(JOY_NEW(A_BUTTON)))
{
- PlaySE(SE_SELECT);
- textId++;
- }
+ if (JOY_NEW(B_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ textId++;
+ }
- if (gMain.newKeys & DPAD_UP)
- {
- PlaySE(SE_SELECT);
- Menu_MoveCursor(-1);
+ if (JOY_NEW(DPAD_UP))
+ {
+ PlaySE(SE_SELECT);
+ Menu_MoveCursor(-1);
+ }
+ else if (JOY_NEW(DPAD_DOWN))
+ {
+ PlaySE(SE_SELECT);
+ Menu_MoveCursor(1);
+ }
}
- else if (gMain.newKeys & DPAD_DOWN)
+ else
{
- PlaySE(SE_SELECT);
- Menu_MoveCursor(1);
+ textId = Menu_GetCursorPos();
}
- }
- else
- {
- textId = Menu_GetCursorPos();
- }
- if (textId != -2)
- {
- Menu_DestroyCursor();
- Menu_EraseWindowRect(
- gPokemonStorageSystemPtr->unk_11ba,
- gPokemonStorageSystemPtr->unk_11bc,
- 29,
- 15);
- }
+ if (textId != -2)
+ {
+ Menu_DestroyCursor();
+ Menu_EraseWindowRect(
+ gPokemonStorageSystemPtr->unk_11ba,
+ gPokemonStorageSystemPtr->unk_11bc,
+ 29,
+ 15);
+ }
+ } while (0);
if (textId >= 0)
{
@@ -3159,95 +2500,6 @@ s16 sub_809CF30(void)
return textId;
}
-#else
-NAKED
-s16 sub_809CF30(void)
-{
- asm(".syntax unified\n\
- push {r4,r5,lr}\n\
- movs r5, 0x2\n\
- negs r5, r5\n\
- ldr r4, _0809CF6C @ =gMain\n\
- ldrh r1, [r4, 0x2E]\n\
- movs r0, 0x1\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _0809CF86\n\
- movs r0, 0x2\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0809CF52\n\
- movs r0, 0x5\n\
- bl PlaySE\n\
- adds r5, 0x1\n\
-_0809CF52:\n\
- ldrh r1, [r4, 0x2E]\n\
- movs r0, 0x40\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0809CF70\n\
- movs r0, 0x5\n\
- bl PlaySE\n\
- movs r0, 0x1\n\
- negs r0, r0\n\
- bl Menu_MoveCursor\n\
- b _0809CF8E\n\
- .align 2, 0\n\
-_0809CF6C: .4byte gMain\n\
-_0809CF70:\n\
- movs r0, 0x80\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0809CF8E\n\
- movs r0, 0x5\n\
- bl PlaySE\n\
- movs r0, 0x1\n\
- bl Menu_MoveCursor\n\
- b _0809CF8E\n\
-_0809CF86:\n\
- bl Menu_GetCursorPos\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
-_0809CF8E:\n\
- movs r0, 0x2\n\
- negs r0, r0\n\
- cmp r5, r0\n\
- beq _0809CFB2\n\
- bl Menu_DestroyCursor\n\
- ldr r0, _0809CFD0 @ =gPokemonStorageSystemPtr\n\
- ldr r1, [r0]\n\
- ldr r2, _0809CFD4 @ =0x000011ba\n\
- adds r0, r1, r2\n\
- ldrb r0, [r0]\n\
- adds r2, 0x2\n\
- adds r1, r2\n\
- ldrb r1, [r1]\n\
- movs r2, 0x1D\n\
- movs r3, 0xF\n\
- bl Menu_EraseWindowRect\n\
-_0809CFB2:\n\
- cmp r5, 0\n\
- blt _0809CFC4\n\
- ldr r0, _0809CFD0 @ =gPokemonStorageSystemPtr\n\
- ldr r0, [r0]\n\
- lsls r1, r5, 3\n\
- ldr r2, _0809CFD8 @ =0x00001184\n\
- adds r0, r2\n\
- adds r0, r1\n\
- ldr r5, [r0]\n\
-_0809CFC4:\n\
- lsls r0, r5, 16\n\
- asrs r0, 16\n\
- pop {r4,r5}\n\
- pop {r1}\n\
- bx r1\n\
- .align 2, 0\n\
-_0809CFD0: .4byte gPokemonStorageSystemPtr\n\
-_0809CFD4: .4byte 0x000011ba\n\
-_0809CFD8: .4byte 0x00001184\n\
- .syntax divided\n");
-}
-#endif // NONMATCHING
void sub_809CFDC(struct UnkStruct_2000020 *arg0, struct UnkStruct_2000028 *arg1, u8 arg2)
{
diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c
index 1079ec20b..ef4ee6c9e 100644
--- a/src/pokemon_summary_screen.c
+++ b/src/pokemon_summary_screen.c
@@ -97,12 +97,13 @@ static void DrawPokerusSurvivorDot(struct Pokemon *);
static void sub_80A12D0(s8);
static void sub_809FAC8(struct Pokemon *);
static void SummaryScreenHandleLeftRightInput(u8, s8);
-static void sub_809E8F0();
+static void sub_809E8F0(u8 taskId, s8 direction, u8 *moveIndexPtr);
static void sub_80A1654(s8, u8);
static void sub_80A1488(s8, u8);
static void SummaryScreen_PrintPokemonInfo(struct Pokemon *);
static void SummaryScreen_PrintPokemonSkills(struct Pokemon *);
static void sub_80A1918(u8, u8);
+static void sub_80A1C30(u8 a);
static void SummaryScreen_DrawTypeIcon(u8, u8, u8, u8);
static u16 GetMonMove(struct Pokemon *, u8);
static void sub_80A04CC(u16);
@@ -1208,184 +1209,57 @@ static void sub_809E83C(u8 taskId, s8 b)
sub_80A2078(taskId);
}
-NAKED
-static void sub_809E8F0(/*u8 taskId, s8 direction, u8 *c*/)
+static void sub_809E8F0(u8 taskId, s8 direction, u8 *moveIndexPtr)
{
- 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\
- adds r4, r1, 0\n\
- mov r9, r2\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r8, r0\n\
- lsls r4, 24\n\
- lsrs r4, 24\n\
- movs r0, 0x1\n\
- str r0, [sp]\n\
- movs r0, 0x5\n\
- bl PlaySE\n\
- mov r1, r9\n\
- ldrb r6, [r1]\n\
- ldr r1, _0809E944 @ =gTasks\n\
- mov r2, r8\n\
- lsls r0, r2, 2\n\
- add r0, r8\n\
- lsls r0, 3\n\
- adds r0, r1\n\
- ldrb r0, [r0, 0x8]\n\
- movs r2, 0\n\
- lsls r4, 24\n\
- asrs r4, 24\n\
- mov r10, r4\n\
- lsls r7, r0, 24\n\
-_0809E930:\n\
- lsls r0, r6, 24\n\
- asrs r0, 24\n\
- add r0, r10\n\
- lsls r0, 24\n\
- lsrs r6, r0, 24\n\
- asrs r1, r0, 24\n\
- cmp r0, r7\n\
- ble _0809E948\n\
- movs r6, 0\n\
- b _0809E94E\n\
- .align 2, 0\n\
-_0809E944: .4byte gTasks\n\
-_0809E948:\n\
- cmp r1, 0\n\
- bge _0809E94E\n\
- lsrs r6, r7, 24\n\
-_0809E94E:\n\
- lsls r4, r6, 24\n\
- lsrs r1, r4, 24\n\
- ldr r0, _0809EA10 @ =gSharedMem + 0x18010\n\
- str r2, [sp, 0x4]\n\
- bl GetMonMove\n\
- lsls r0, 16\n\
- adds r5, r4, 0\n\
- ldr r2, [sp, 0x4]\n\
- cmp r0, 0\n\
- bne _0809E97A\n\
- asrs r0, r5, 24\n\
- cmp r0, 0x4\n\
- beq _0809E97A\n\
- lsls r0, r2, 24\n\
- movs r3, 0x80\n\
- lsls r3, 17\n\
- adds r0, r3\n\
- lsrs r2, r0, 24\n\
- asrs r0, 24\n\
- cmp r0, 0x3\n\
- ble _0809E930\n\
-_0809E97A:\n\
- mov r1, r9\n\
- ldrb r0, [r1]\n\
- cmp r0, 0x4\n\
- bne _0809E996\n\
- asrs r0, r5, 24\n\
- cmp r0, 0x4\n\
- beq _0809E996\n\
- ldr r0, _0809EA14 @ =gSharedMem + 0x18000\n\
- adds r0, 0x7C\n\
- ldrh r0, [r0]\n\
- mov r2, r8\n\
- lsls r7, r2, 2\n\
- cmp r0, 0\n\
- beq _0809E9AC\n\
-_0809E996:\n\
- ldr r2, _0809EA18 @ =gTasks\n\
- mov r3, r8\n\
- lsls r1, r3, 2\n\
- adds r0, r1, r3\n\
- lsls r0, 3\n\
- adds r0, r2\n\
- movs r2, 0x22\n\
- ldrsh r0, [r0, r2]\n\
- adds r7, r1, 0\n\
- cmp r0, 0x1\n\
- bne _0809E9D0\n\
-_0809E9AC:\n\
- lsrs r4, r5, 24\n\
- movs r0, 0x2\n\
- adds r1, r4, 0\n\
- bl sub_80A1488\n\
- movs r0, 0x2\n\
- adds r1, r4, 0\n\
- bl sub_80A1654\n\
- ldr r1, _0809EA18 @ =gTasks\n\
- mov r3, r8\n\
- adds r0, r7, r3\n\
- lsls r0, 3\n\
- adds r0, r1\n\
- movs r1, 0\n\
- strh r1, [r0, 0x22]\n\
- movs r0, 0\n\
- str r0, [sp]\n\
-_0809E9D0:\n\
- mov r1, r9\n\
- ldrb r0, [r1]\n\
- cmp r0, 0x4\n\
- beq _0809E9FE\n\
- asrs r0, r5, 24\n\
- cmp r0, 0x4\n\
- bne _0809E9FE\n\
- ldr r0, _0809EA14 @ =gSharedMem + 0x18000\n\
- adds r0, 0x7C\n\
- ldrh r0, [r0]\n\
- cmp r0, 0\n\
- bne _0809E9FE\n\
- movs r4, 0x2\n\
- negs r4, r4\n\
- lsrs r5, 24\n\
- adds r0, r4, 0\n\
- adds r1, r5, 0\n\
- bl sub_80A1488\n\
- adds r0, r4, 0\n\
- adds r1, r5, 0\n\
- bl sub_80A1654\n\
-_0809E9FE:\n\
- mov r2, r9\n\
- strb r6, [r2]\n\
- ldr r0, _0809EA1C @ =gSharedMem + 0x18079\n\
- cmp r9, r0\n\
- bne _0809EA20\n\
- movs r0, 0\n\
- bl sub_80A1C30\n\
- b _0809EA26\n\
- .align 2, 0\n\
-_0809EA10: .4byte gSharedMem + 0x18010\n\
-_0809EA14: .4byte gSharedMem + 0x18000\n\
-_0809EA18: .4byte gTasks\n\
-_0809EA1C: .4byte gSharedMem + 0x18079\n\
-_0809EA20:\n\
- movs r0, 0x1\n\
- bl sub_80A1C30\n\
-_0809EA26:\n\
- ldr r3, [sp]\n\
- cmp r3, 0\n\
- beq _0809EA34\n\
- ldr r0, _0809EA4C @ =gSharedMem + 0x18010\n\
- mov r1, r9\n\
- bl sub_80A0428\n\
-_0809EA34:\n\
- mov r0, r8\n\
- bl sub_80A2078\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\
-_0809EA4C: .4byte gSharedMem + 0x18010\n\
- .syntax divided\n");
+ s8 i;
+ s8 newMoveIndex;
+ s8 var;
+ bool8 bln;
+
+ bln = TRUE;
+ PlaySE(SE_SELECT);
+ newMoveIndex = *moveIndexPtr;
+ var = (s8)gTasks[taskId].data[0];
+ for (i = 0; i < MAX_MON_MOVES; i++)
+ {
+ newMoveIndex += direction;
+ if (newMoveIndex > var)
+ newMoveIndex = 0;
+ else if (newMoveIndex < 0)
+ newMoveIndex = var;
+
+ if (GetMonMove(&pssData.loadedMon, newMoveIndex) != 0 || newMoveIndex == MAX_MON_MOVES)
+ break;
+ }
+
+ if ((*moveIndexPtr == MAX_MON_MOVES
+ && newMoveIndex != MAX_MON_MOVES
+ && pssData.moveToLearn == 0)
+ || gTasks[taskId].data[13] == 1)
+ {
+ sub_80A1488(2, newMoveIndex);
+ sub_80A1654(2, newMoveIndex);
+ gTasks[taskId].data[13] = 0;
+ bln = FALSE;
+ }
+ if (*moveIndexPtr != MAX_MON_MOVES
+ && newMoveIndex == MAX_MON_MOVES
+ && pssData.moveToLearn == 0)
+ {
+ sub_80A1488(-2, newMoveIndex);
+ sub_80A1654(-2, newMoveIndex);
+ }
+
+ *moveIndexPtr = newMoveIndex;
+ // Get rid of the 'flicker' effect(while idle) when scrolling.
+ if (moveIndexPtr == &pssData.selectedMoveIndex)
+ sub_80A1C30(0);
+ else
+ sub_80A1C30(1);
+
+ if (bln)
+ sub_80A0428(&pssData.loadedMon, moveIndexPtr);
+ sub_80A2078(taskId);
}
static void SummaryScreenHandleAButton(u8 taskId)
@@ -1702,35 +1576,38 @@ static void SummaryScreenHandleLeftRightInput(u8 taskId, s8 direction)
}
}
-// direction should be implicitly casted to a u8 during the var1 assign but it is not in this code
-#ifdef NONMATCHING
void SummaryScreenHandleUpDownInput(u8 taskId, s8 direction)
{
s8 var3;
- u8 var1 = direction;
if (pssData.usingPC == TRUE)
{
if (pssData.page != PSS_PAGE_INFO)
{
- var1 = (direction == 1) ? 0 : 1;
+ if (direction == 1)
+ direction = 0;
+ else
+ direction = 1;
}
else
{
- var1 = (direction == 1) ? 2 : 3;
+ if (direction == 1)
+ direction = 2;
+ else
+ direction = 3;
}
- var3 = StorageSystemGetNextMonIndex(pssData.monList.boxMons, pssData.monIndex, pssData.maxMonIndex, var1);
+ var3 = StorageSystemGetNextMonIndex(pssData.monList.boxMons, pssData.monIndex, pssData.maxMonIndex, direction);
}
else
{
if (sub_80F9344() == TRUE && IsLinkDoubleBattle() == TRUE)
{
- var3 = sub_809F3CC(var1);
+ var3 = sub_809F3CC(direction);
}
else
{
- var3 = sub_809F284(var1);
+ var3 = sub_809F284(direction);
}
}
@@ -1747,113 +1624,7 @@ void SummaryScreenHandleUpDownInput(u8 taskId, s8 direction)
gTasks[taskId].func = sub_809F43C;
}
}
-#else
-NAKED
-void SummaryScreenHandleUpDownInput(u8 taskId, s8 direction)
-{
- asm(".syntax unified\n\
- push {r4-r6,lr}\n\
- lsls r0, 24\n\
- lsrs r6, r0, 24\n\
- lsls r1, 24\n\
- lsrs r4, r1, 24\n\
- ldr r0, _0809F1E4 @ =gSharedMem + 0x18000\n\
- ldrb r1, [r0, 0xE]\n\
- adds r2, r0, 0\n\
- cmp r1, 0x1\n\
- bne _0809F202\n\
- ldrb r0, [r2, 0xB]\n\
- cmp r0, 0\n\
- beq _0809F1E8\n\
- lsls r1, r4, 24\n\
- asrs r1, 24\n\
- movs r4, 0x1\n\
- eors r1, r4\n\
- negs r0, r1\n\
- orrs r0, r1\n\
- lsrs r4, r0, 31\n\
- b _0809F1F4\n\
- .align 2, 0\n\
-_0809F1E4: .4byte gSharedMem + 0x18000\n\
-_0809F1E8:\n\
- lsls r0, r4, 24\n\
- asrs r0, 24\n\
- movs r4, 0x3\n\
- cmp r0, 0x1\n\
- bne _0809F1F4\n\
- movs r4, 0x2\n\
-_0809F1F4:\n\
- ldr r0, [r2]\n\
- ldrb r1, [r2, 0x9]\n\
- ldrb r2, [r2, 0xA]\n\
- adds r3, r4, 0\n\
- bl StorageSystemGetNextMonIndex\n\
- b _0809F22C\n\
-_0809F202:\n\
- bl sub_80F9344\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, 0x1\n\
- bne _0809F224\n\
- bl IsLinkDoubleBattle\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, 0x1\n\
- bne _0809F224\n\
- lsls r0, r4, 24\n\
- asrs r0, 24\n\
- bl sub_809F3CC\n\
- b _0809F22C\n\
-_0809F224:\n\
- lsls r0, r4, 24\n\
- asrs r0, 24\n\
- bl sub_809F284\n\
-_0809F22C:\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
- lsls r0, r4, 24\n\
- asrs r0, 24\n\
- movs r1, 0x1\n\
- negs r1, r1\n\
- cmp r0, r1\n\
- beq _0809F270\n\
- movs r0, 0x5\n\
- bl PlaySE\n\
- ldr r5, _0809F278 @ =gSharedMem + 0x18010\n\
- adds r0, r5, 0\n\
- bl GetMonStatusAndPokerus\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- beq _0809F258\n\
- movs r0, 0x2\n\
- negs r0, r0\n\
- bl sub_80A12D0\n\
-_0809F258:\n\
- adds r0, r5, 0\n\
- subs r0, 0x10\n\
- strb r4, [r0, 0x9]\n\
- ldr r1, _0809F27C @ =gTasks\n\
- lsls r0, r6, 2\n\
- adds r0, r6\n\
- lsls r0, 3\n\
- adds r0, r1\n\
- ldr r1, [r0]\n\
- str r1, [r5, 0x74]\n\
- ldr r1, _0809F280 @ =sub_809F43C\n\
- str r1, [r0]\n\
-_0809F270:\n\
- pop {r4-r6}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_0809F278: .4byte gSharedMem + 0x18010\n\
-_0809F27C: .4byte gTasks\n\
-_0809F280: .4byte sub_809F43C\n\
- .syntax divided\n");
-}
-#endif // NONMATCHING
-#ifdef NONMATCHING
s8 sub_809F284(s8 a)
{
struct Pokemon *mons = pssData.monList.partyMons;
@@ -1867,100 +1638,17 @@ s8 sub_809F284(s8 a)
return -1;
return pssData.monIndex + a;
}
- else
+
+ // unlike Emerald, the do while needs to be inversed in order to match
+ while (1)
{
- do
- {
- r6 += a;
- if (pssData.monIndex + r6 < 0 || pssData.monIndex + r6 > pssData.maxMonIndex)
- return -1;
- } while (GetMonData(&mons[pssData.monIndex + r6], MON_DATA_IS_EGG) != 0);
- return pssData.monIndex + r6;
+ r6 += a;
+ if (pssData.monIndex + r6 < 0 || pssData.monIndex + r6 > pssData.maxMonIndex)
+ return -1;
+ if (GetMonData(&mons[pssData.monIndex + r6], MON_DATA_IS_EGG) == 0)
+ return pssData.monIndex + r6;
}
}
-#else
-NAKED
-s8 sub_809F284(s8 a)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- lsls r0, 24\n\
- lsrs r3, r0, 24\n\
- ldr r0, _0809F2C0 @ =gSharedMem + 0x18000\n\
- ldr r7, [r0]\n\
- movs r6, 0\n\
- ldrb r1, [r0, 0xB]\n\
- adds r4, r0, 0\n\
- cmp r1, 0\n\
- bne _0809F2C4\n\
- lsls r0, r3, 24\n\
- asrs r2, r0, 24\n\
- movs r1, 0x1\n\
- negs r1, r1\n\
- adds r5, r0, 0\n\
- cmp r2, r1\n\
- bne _0809F2AC\n\
- ldrb r0, [r4, 0x9]\n\
- cmp r0, 0\n\
- beq _0809F2E4\n\
-_0809F2AC:\n\
- asrs r0, r5, 24\n\
- cmp r0, 0x1\n\
- bne _0809F2BA\n\
- ldrb r0, [r4, 0x9]\n\
- ldrb r1, [r4, 0xA]\n\
- cmp r0, r1\n\
- bcs _0809F2E4\n\
-_0809F2BA:\n\
- ldrb r0, [r4, 0x9]\n\
- adds r0, r3\n\
- b _0809F304\n\
- .align 2, 0\n\
-_0809F2C0: .4byte gSharedMem + 0x18000\n\
-_0809F2C4:\n\
- lsls r5, r3, 24\n\
-_0809F2C6:\n\
- lsls r0, r6, 24\n\
- asrs r0, 24\n\
- asrs r1, r5, 24\n\
- adds r0, r1\n\
- lsls r0, 24\n\
- ldr r4, _0809F2EC @ =gSharedMem + 0x18000\n\
- lsrs r6, r0, 24\n\
- asrs r0, 24\n\
- ldrb r2, [r4, 0x9]\n\
- adds r1, r0, r2\n\
- cmp r1, 0\n\
- blt _0809F2E4\n\
- ldrb r0, [r4, 0xA]\n\
- cmp r1, r0\n\
- ble _0809F2F0\n\
-_0809F2E4:\n\
- movs r0, 0x1\n\
- negs r0, r0\n\
- b _0809F308\n\
- .align 2, 0\n\
-_0809F2EC: .4byte gSharedMem + 0x18000\n\
-_0809F2F0:\n\
- movs r0, 0x64\n\
- muls r0, r1\n\
- adds r0, r7, r0\n\
- movs r1, 0x2D\n\
- bl GetMonData\n\
- cmp r0, 0\n\
- bne _0809F2C6\n\
- ldrb r0, [r4, 0x9]\n\
- adds r0, r6\n\
-_0809F304:\n\
- lsls r0, 24\n\
- asrs r0, 24\n\
-_0809F308:\n\
- pop {r4-r7}\n\
- pop {r1}\n\
- bx r1\n\
- .syntax divided\n");
-}
-#endif // NONMATCHING
bool8 sub_809F310(struct Pokemon *mon)
{
@@ -2740,175 +2428,51 @@ static void sub_80A04CC(u16 move)
}
}
-#ifdef NONMATCHING // The two vramAddr lines are non-matching.
void sub_80A057C(u16 move)
{
- u8 appeal;
- u8 jam;
u8 i;
- u16 *vramAddr = (u16 *)(VRAM + 0x6800);
+ u8 effectValue;
+ u16 *tilemap = (u16 *)(VRAM + 0x6800);
+ u16 tile;
- if (move == 0xFFFF) return;
-
- appeal = gContestEffects[gContestMoves[move].effect].appeal;
- if (appeal != 0xFF)
- appeal = appeal / 10;
-
- for (i = 0; i < 8; i++)
+ // The function didn't change much between Ruby and Emerald, but unlike
+ // Emerald, shifts are oddly an absolute requirement to match.
+ if (move != 0xFFFF)
{
- u16 tile = 0x1039;
- int and = 3;
- int offset = 0x3CC / 2;
- if (appeal != 0xFF && i < appeal)
- tile = 0x103A;
+ effectValue = gContestEffects[gContestMoves[move].effect].appeal;
+ if (effectValue != 0xFF)
+ effectValue /= 10;
- *(&vramAddr[((i >> 2) << 5) + (i & and)] + offset) = tile;
- }
-
- if (move == 0xFFFF) return;
+ for (i = 0; i < 8; i++)
+ {
+ if (effectValue != 0xFF && i < effectValue)
+ tile = 0x103A;
+ else
+ tile = 0x1039;
- jam = gContestEffects[gContestMoves[move].effect].jam;
- if (jam != 0xFF)
- {
- jam = jam / 10;
+ // The offset number has to go first, or else, r1 gets swapped with r0.
+ tilemap[0x1E6 + ((i >> 2) << 5) + (i & 3)] = tile;
+ }
}
- for (i = 0; i < 8; i++)
+ if (move != 0xFFFF)
{
- u16 tile = 0x103D;
- int and = 3;
- int offset = 0x226;
- if (jam != 0xFF && i < jam)
+ effectValue = gContestEffects[gContestMoves[move].effect].jam;
+ if (effectValue != 0xFF)
+ effectValue /= 10;
+
+ for (i = 0; i < 8; i++)
{
- tile = 0x103C;
- }
+ if (effectValue != 0xFF && i < effectValue)
+ tile = 0x103C;
+ else
+ tile = 0x103D;
- *(&vramAddr[((i >> 2) << 5) + (i & and)] + offset) = tile;
+ // match order above
+ tilemap[0x226 + ((i >> 2) << 5) + (i & 3)] = tile;
+ }
}
}
-#else
-NAKED
-void sub_80A057C(u16 move)
-{
- 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\
- lsls r0, 16\n\
- lsrs r5, r0, 16\n\
- ldr r0, _080A0648 @ =0x06006800\n\
- mov r8, r0\n\
- ldr r0, _080A064C @ =0x0000ffff\n\
- cmp r5, r0\n\
- beq _080A063A\n\
- ldr r1, _080A0650 @ =gContestEffects\n\
- ldr r2, _080A0654 @ =gContestMoves\n\
- lsls r3, r5, 3\n\
- adds r0, r3, r2\n\
- ldrb r0, [r0]\n\
- lsls r0, 2\n\
- adds r0, r1\n\
- ldrb r4, [r0, 0x1]\n\
- mov r10, r2\n\
- mov r9, r3\n\
- cmp r4, 0xFF\n\
- beq _080A05B8\n\
- adds r0, r4, 0\n\
- movs r1, 0xA\n\
- bl __udivsi3\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
-_080A05B8:\n\
- movs r2, 0\n\
- movs r7, 0x3\n\
- movs r6, 0xF3\n\
- lsls r6, 2\n\
-_080A05C0:\n\
- ldr r3, _080A0658 @ =0x00001039\n\
- cmp r4, 0xFF\n\
- beq _080A05CC\n\
- cmp r2, r4\n\
- bcs _080A05CC\n\
- adds r3, 0x1\n\
-_080A05CC:\n\
- lsrs r0, r2, 2\n\
- lsls r0, 5\n\
- adds r1, r2, 0\n\
- ands r1, r7\n\
- adds r1, r0\n" // start of nonmatching
- "lsls r1, 1\n\
- add r1, r8\n\
- adds r1, r6\n\
- strh r3, [r1]\n\
- adds r0, r2, 0x1\n\
- lsls r0, 24\n\
- lsrs r2, r0, 24\n\
- cmp r2, 0x7\n\
- bls _080A05C0\n\
- ldr r0, _080A064C @ =0x0000ffff\n\
- cmp r5, r0\n\
- beq _080A063A\n\
- mov r0, r9\n\
- add r0, r10\n\
- ldrb r0, [r0]\n\
- lsls r0, 2\n\
- ldr r1, _080A0650 @ =gContestEffects\n\
- adds r0, r1\n\
- ldrb r4, [r0, 0x2]\n\
- cmp r4, 0xFF\n\
- beq _080A060C\n\
- adds r0, r4, 0\n\
- movs r1, 0xA\n\
- bl __udivsi3\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
-_080A060C:\n\
- movs r2, 0\n\
- movs r6, 0x3\n\
- ldr r5, _080A065C @ =0x0000044c\n\
-_080A0612:\n\
- ldr r3, _080A0660 @ =0x0000103d\n\
- cmp r4, 0xFF\n\
- beq _080A061E\n\
- cmp r2, r4\n\
- bcs _080A061E\n\
- subs r3, 0x1\n\
-_080A061E:\n\
- lsrs r0, r2, 2\n\
- lsls r0, 5\n\
- adds r1, r2, 0\n\
- ands r1, r6\n\
- adds r1, r0\n\
- lsls r1, 1\n\
- add r1, r8\n\
- adds r1, r5\n\
- strh r3, [r1]\n\
- adds r0, r2, 0x1\n\
- lsls r0, 24\n\
- lsrs r2, r0, 24\n\
- cmp r2, 0x7\n\
- bls _080A0612\n\
-_080A063A:\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\
-_080A0648: .4byte 0x06006800\n\
-_080A064C: .4byte 0x0000ffff\n\
-_080A0650: .4byte gContestEffects\n\
-_080A0654: .4byte gContestMoves\n\
-_080A0658: .4byte 0x00001039\n\
-_080A065C: .4byte 0x0000044c\n\
-_080A0660: .4byte 0x0000103d\n\
- .syntax divided\n");
-}
-#endif // NONMATCHING
bool8 PokemonSummaryScreen_CheckOT(struct Pokemon *mon)
{
@@ -3340,60 +2904,57 @@ static void DrawPokerusSurvivorDot(struct Pokemon *mon)
}
// Draws the 4 small navigation circles at the top of the pokemon summary screen.
-// complex nonmatching
-#ifdef NONMATCHING
void DrawSummaryScreenNavigationDots(void)
{
u16 arr[8];
- u8 i = 0;
- struct PokemonSummaryScreenStruct *SS = &pssData;
- u16 var1 = 0x4040;
- u16 var2 = 0x404A;
+ u8 i;
+
+ // Shifting 1 bit instead of multiplying by 2 is required to match.
for (i = 0; i < 4; i++)
{
- if (i < SS->firstPage)
+ if (i < pssData.firstPage)
{
- arr[i * 2] = var1;
- arr[(i * 2) + 1] = var1 + 1;
+ arr[i << 1] = 0x4040;
+ arr[(i << 1) + 1] = 0x4040;
}
- else if (i > SS->lastPage)
+ else if (i > pssData.lastPage)
{
- arr[i * 2] = var2;
- arr[(i * 2) + 1] = var2 + 1;
+ arr[i << 1] = 0x404A;
+ arr[(i << 1) + 1] = 0x404A;
}
else
{
- if (i < SS->page)
+ if (i < pssData.page)
{
- arr[i * 2] = 0x4046;
- arr[(i * 2) + 1] = 0x4046 + 1;
+ arr[i << 1] = 0x4046;
+ arr[(i << 1) + 1] = 0x4046 + 1;
}
- if (i == SS->page)
+ if (i == pssData.page)
{
- if (i != SS->lastPage)
+ if (i != pssData.lastPage)
{
- arr[i * 2] = 0x4041;
- arr[(i * 2) + 1] = 0x4041 + 1;
+ arr[i << 1] = 0x4041;
+ arr[(i << 1) + 1] = 0x4041 + 1;
}
else
{
- arr[i * 2] = 0x404B;
- arr[(i * 2) + 1] = 0x404B + 1;
+ arr[i << 1] = 0x404B;
+ arr[(i << 1) + 1] = 0x404B + 1;
}
}
- if (i > SS->page)
+ if (i > pssData.page)
{
- if (i != SS->lastPage)
+ if (i != pssData.lastPage)
{
- arr[i * 2] = 0x4043;
- arr[(i * 2) + 1] = 0x4043 + 1;
+ arr[i << 1] = 0x4043;
+ arr[(i << 1) + 1] = 0x4043 + 1;
}
else
{
- arr[i * 2] = 0x4048;
- arr[(i * 2) + 1] = 0x4048 + 1;
+ arr[i << 1] = 0x4048;
+ arr[(i << 1) + 1] = 0x4048 + 1;
}
}
}
@@ -3408,189 +2969,6 @@ void DrawSummaryScreenNavigationDots(void)
DmaCopy16Defvars(3, arr, (void *)(VRAM + 0xE056), 16);
}
-#else
-NAKED
-void DrawSummaryScreenNavigationDots(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, 0x10\n\
- movs r3, 0\n\
- ldr r6, _080A0F24 @ =gSharedMem + 0x18000\n\
- adds r5, r6, 0\n\
- ldr r1, _080A0F28 @ =0x00004040\n\
- mov r8, r1\n\
- ldr r2, _080A0F2C @ =0x0000404a\n\
- mov r10, r2\n\
-_080A0F02:\n\
- adds r0, r5, 0\n\
- adds r0, 0x75\n\
- ldrb r0, [r0]\n\
- cmp r3, r0\n\
- bcs _080A0F30\n\
- lsls r1, r3, 1\n\
- lsls r0, r3, 2\n\
- add r0, sp\n\
- mov r4, r8\n\
- strh r4, [r0]\n\
- adds r1, 0x1\n\
- lsls r1, 1\n\
- mov r7, sp\n\
- adds r0, r7, r1\n\
- strh r4, [r0]\n\
- b _080A0FE2\n\
- .align 2, 0\n\
-_080A0F24: .4byte gSharedMem + 0x18000\n\
-_080A0F28: .4byte 0x00004040\n\
-_080A0F2C: .4byte 0x0000404a\n\
-_080A0F30:\n\
- movs r0, 0x76\n\
- adds r0, r6\n\
- mov r12, r0\n\
- ldrb r1, [r0]\n\
- cmp r3, r1\n\
- bls _080A0F52\n\
- lsls r1, r3, 1\n\
- lsls r0, r3, 2\n\
- add r0, sp\n\
- mov r2, r10\n\
- strh r2, [r0]\n\
- adds r1, 0x1\n\
- lsls r1, 1\n\
- mov r4, sp\n\
- adds r0, r4, r1\n\
- strh r2, [r0]\n\
- b _080A0FE2\n\
-_080A0F52:\n\
- ldrb r4, [r5, 0xB]\n\
- cmp r3, r4\n\
- bcs _080A0F6E\n\
- lsls r1, r3, 1\n\
- lsls r0, r3, 2\n\
- mov r7, sp\n\
- adds r2, r7, r0\n\
- ldr r0, _080A0F88 @ =0x00004046\n\
- strh r0, [r2]\n\
- adds r1, 0x1\n\
- lsls r1, 1\n\
- add r1, sp\n\
- adds r0, 0x1\n\
- strh r0, [r1]\n\
-_080A0F6E:\n\
- cmp r3, r4\n\
- bne _080A0FA6\n\
- mov r0, r12\n\
- ldrb r0, [r0]\n\
- cmp r3, r0\n\
- beq _080A0F90\n\
- lsls r1, r3, 1\n\
- lsls r0, r3, 2\n\
- mov r4, sp\n\
- adds r2, r4, r0\n\
- ldr r0, _080A0F8C @ =0x00004041\n\
- b _080A0F9A\n\
- .align 2, 0\n\
-_080A0F88: .4byte 0x00004046\n\
-_080A0F8C: .4byte 0x00004041\n\
-_080A0F90:\n\
- lsls r1, r3, 1\n\
- lsls r0, r3, 2\n\
- mov r7, sp\n\
- adds r2, r7, r0\n\
- ldr r0, _080A0FC4 @ =0x0000404b\n\
-_080A0F9A:\n\
- strh r0, [r2]\n\
- adds r1, 0x1\n\
- lsls r1, 1\n\
- add r1, sp\n\
- adds r0, 0x1\n\
- strh r0, [r1]\n\
-_080A0FA6:\n\
- ldrb r0, [r5, 0xB]\n\
- cmp r3, r0\n\
- bls _080A0FE2\n\
- adds r0, r6, 0\n\
- adds r0, 0x76\n\
- ldrb r0, [r0]\n\
- cmp r3, r0\n\
- beq _080A0FCC\n\
- lsls r1, r3, 1\n\
- lsls r0, r3, 2\n\
- mov r4, sp\n\
- adds r2, r4, r0\n\
- ldr r0, _080A0FC8 @ =0x00004043\n\
- b _080A0FD6\n\
- .align 2, 0\n\
-_080A0FC4: .4byte 0x0000404b\n\
-_080A0FC8: .4byte 0x00004043\n\
-_080A0FCC:\n\
- lsls r1, r3, 1\n\
- lsls r0, r3, 2\n\
- mov r7, sp\n\
- adds r2, r7, r0\n\
- ldr r0, _080A1034 @ =0x00004048\n\
-_080A0FD6:\n\
- strh r0, [r2]\n\
- adds r1, 0x1\n\
- lsls r1, 1\n\
- add r1, sp\n\
- adds r0, 0x1\n\
- strh r0, [r1]\n\
-_080A0FE2:\n\
- adds r0, r3, 0x1\n\
- lsls r0, 24\n\
- lsrs r3, r0, 24\n\
- cmp r3, 0x3\n\
- bls _080A0F02\n\
- ldr r1, _080A1038 @ =0x0600e016\n\
- ldr r0, _080A103C @ =0x040000d4\n\
- mov r2, sp\n\
- str r2, [r0]\n\
- str r1, [r0, 0x4]\n\
- ldr r1, _080A1040 @ =0x80000008\n\
- str r1, [r0, 0x8]\n\
- ldr r0, [r0, 0x8]\n\
- movs r3, 0\n\
-_080A0FFE:\n\
- lsls r0, r3, 1\n\
- mov r4, sp\n\
- adds r1, r4, r0\n\
- ldrh r0, [r1]\n\
- adds r0, 0x10\n\
- strh r0, [r1]\n\
- adds r0, r3, 0x1\n\
- lsls r0, 24\n\
- lsrs r3, r0, 24\n\
- cmp r3, 0x7\n\
- bls _080A0FFE\n\
- ldr r1, _080A1044 @ =0x0600e056\n\
- ldr r0, _080A103C @ =0x040000d4\n\
- str r4, [r0]\n\
- str r1, [r0, 0x4]\n\
- ldr r1, _080A1040 @ =0x80000008\n\
- str r1, [r0, 0x8]\n\
- ldr r0, [r0, 0x8]\n\
- add sp, 0x10\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\
-_080A1034: .4byte 0x00004048\n\
-_080A1038: .4byte 0x0600e016\n\
-_080A103C: .4byte 0x040000d4\n\
-_080A1040: .4byte 0x80000008\n\
-_080A1044: .4byte 0x0600e056\n\
- .syntax divided\n");
-}
-#endif // NONMATCHING
NAKED
void sub_80A1048(u8 taskId)
@@ -4758,7 +4136,7 @@ static void sub_80A1BC0(struct Sprite *sprite)
#define shared1A009 ((u8 *)(gSharedMem + 0x1A009))
-void sub_80A1C30(u8 a)
+static void sub_80A1C30(u8 a)
{
u8 r3;
@@ -4805,7 +4183,6 @@ u8 GetMonStatusAndPokerus(struct Pokemon *mon)
return statusAilment;
}
-#ifdef NONMATCHING
void sub_80A1D18(void)
{
struct Pokemon mon;
@@ -4818,9 +4195,6 @@ void sub_80A1D18(void)
if (statusAndPkrs)
{
statusAndPkrs2 = statusAndPkrs - 1;
-
- if (ewram1A000[29] == 0xFF)
- ewram1A000[29] = CreateSprite(&sSpriteTemplate_StatusCondition, 64, 152, 0);
}
else
{
@@ -4828,65 +4202,10 @@ void sub_80A1D18(void)
return;
}
+ if (ewram1A000[29] == 0xFF)
+ ewram1A000[29] = CreateSprite(&sSpriteTemplate_StatusCondition, 64, 152, 0);
StartSpriteAnim(&gSprites[ewram1A000[29]], statusAndPkrs2);
}
-#else
-NAKED
-void sub_80A1D18(void)
-{
- asm(".syntax unified\n\
- push {r4,r5,lr}\n\
- sub sp, 0x64\n\
- mov r0, sp\n\
- bl SummaryScreen_GetPokemon\n\
- mov r0, sp\n\
- bl GetMonStatusAndPokerus\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, 0\n\
- beq _080A1D58\n\
- subs r0, 0x1\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- ldr r4, _080A1D50 @ =gSharedMem + 0x1A01D\n\
- ldrb r0, [r4]\n\
- cmp r0, 0xFF\n\
- bne _080A1D60\n\
- ldr r0, _080A1D54 @ =sSpriteTemplate_StatusCondition\n\
- movs r1, 0x40\n\
- movs r2, 0x98\n\
- movs r3, 0\n\
- bl CreateSprite\n\
- strb r0, [r4]\n\
- b _080A1D60\n\
- .align 2, 0\n\
-_080A1D50: .4byte gSharedMem + 0x1A01D\n\
-_080A1D54: .4byte sSpriteTemplate_StatusCondition\n\
-_080A1D58:\n\
- movs r0, 0x1D\n\
- bl sub_80A18E4\n\
- b _080A1D74\n\
-_080A1D60:\n\
- ldr r0, _080A1D7C @ =gSharedMem + 0x1A01D\n\
- ldrb r1, [r0]\n\
- lsls r0, r1, 4\n\
- adds r0, r1\n\
- lsls r0, 2\n\
- ldr r1, _080A1D80 @ =gSprites\n\
- adds r0, r1\n\
- adds r1, r5, 0\n\
- bl StartSpriteAnim\n\
-_080A1D74:\n\
- add sp, 0x64\n\
- pop {r4,r5}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080A1D7C: .4byte gSharedMem + 0x1A01D\n\
-_080A1D80: .4byte gSprites\n\
- .syntax divided\n");
-}
-#endif // NONMATCHING
static void sub_80A1D84(struct Pokemon *mon)
{
diff --git a/src/roulette.c b/src/roulette.c
index c4f6067a1..40acd41c8 100644
--- a/src/roulette.c
+++ b/src/roulette.c
@@ -1661,16 +1661,31 @@ void Task_Roulette_0(u8 taskid)
#if DEBUG
+#if (ENGLISH && REVISION == 0)
+ static const u8 gUnknown_Debug_0842510D[] = _("コインの かず STARTで きめて\nAーp1 Bーm1 R:Lー×10");
+#else
+ static const u8 gUnknown_Debug_0842510D[] = _("Set COIN and Press START\nAーp1 Bーm1 R:Lー×10");
+#endif
+
void debug_sub_812CDE4(u8 taskId)
{
+#if (ENGLISH && REVISION == 0)
+ u8 coinText[] = {0xFD, 0x02, 0xFF};
+#endif
+
if (gMain.newKeys & A_BUTTON)
{
gTasks[taskId].data[13]++;
if (gTasks[taskId].data[13] == 10000)
gTasks[taskId].data[13] = 0;
ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[13], 1, 4);
+#if (ENGLISH && REVISION == 0)
+ StringExpandPlaceholders(gStringVar4, coinText);
+ Menu_PrintText(gStringVar4, 2, 1);
+#else
StringExpandPlaceholders(gStringVar4, gOtherText_Coins);
MenuPrint_RightAligned(gStringVar4, 9, 1);
+#endif
}
else if (gMain.newKeys & B_BUTTON)
{
@@ -1678,8 +1693,13 @@ void debug_sub_812CDE4(u8 taskId)
if (gTasks[taskId].data[13] == -1)
gTasks[taskId].data[13] = 9999;
ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[13], 1, 4);
+#if (ENGLISH && REVISION == 0)
+ StringExpandPlaceholders(gStringVar4, coinText);
+ Menu_PrintText(gStringVar4, 2, 1);
+#else
StringExpandPlaceholders(gStringVar4, gOtherText_Coins);
MenuPrint_RightAligned(gStringVar4, 9, 1);
+#endif
}
else if (gMain.newKeys & R_BUTTON)
{
@@ -1687,8 +1707,13 @@ void debug_sub_812CDE4(u8 taskId)
if (gTasks[taskId].data[13] > 9999)
gTasks[taskId].data[13] -= 9999;
ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[13], 1, 4);
+#if (ENGLISH && REVISION == 0)
+ StringExpandPlaceholders(gStringVar4, coinText);
+ Menu_PrintText(gStringVar4, 2, 1);
+#else
StringExpandPlaceholders(gStringVar4, gOtherText_Coins);
MenuPrint_RightAligned(gStringVar4, 9, 1);
+#endif
}
else if (gMain.newKeys & L_BUTTON)
{
@@ -1696,16 +1721,26 @@ void debug_sub_812CDE4(u8 taskId)
if (gTasks[taskId].data[13] < 0)
gTasks[taskId].data[13] += 9999;
ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[13], 1, 4);
+#if (ENGLISH && REVISION == 0)
+ StringExpandPlaceholders(gStringVar4, coinText);
+ Menu_PrintText(gStringVar4, 2, 1);
+#else
StringExpandPlaceholders(gStringVar4, gOtherText_Coins);
MenuPrint_RightAligned(gStringVar4, 9, 1);
+#endif
}
else if (gMain.newKeys & START_BUTTON)
{
gSaveBlock1.coins = gTasks[taskId].data[13];
gTasks[taskId].func = Task_Roulette_0;
ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[13], 1, 4);
+#if (ENGLISH && REVISION == 0)
+ StringExpandPlaceholders(gStringVar4, coinText);
+ Menu_PrintText(gStringVar4, 2, 1);
+#else
StringExpandPlaceholders(gStringVar4, gOtherText_Coins);
MenuPrint_RightAligned(gStringVar4, 9, 1);
+#endif
unk_2039560 = 0;
}
else if (gMain.newKeys & SELECT_BUTTON)
@@ -1713,22 +1748,30 @@ void debug_sub_812CDE4(u8 taskId)
gSaveBlock1.coins = gTasks[taskId].data[13];
gTasks[taskId].func = Task_Roulette_0;
ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[13], 1, 4);
+#if (ENGLISH && REVISION == 0)
+ StringExpandPlaceholders(gStringVar4, coinText);
+ Menu_PrintText(gStringVar4, 2, 1);
+#else
StringExpandPlaceholders(gStringVar4, gOtherText_Coins);
MenuPrint_RightAligned(gStringVar4, 9, 1);
+#endif
unk_2039560 = 1;
}
}
void debug_sub_812CFE8(u8 taskId)
{
- static const u8 gUnknown_Debug_0842510D[] = _("Set COIN and Press START\nAーp1 Bーm1 R:Lー×10");
gTasks[taskId].data[13] = gSaveBlock1.coins;
if (Random() & 1)
gSpecialVar_0x8004 |= 128;
ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[13], 1, 4);
StringExpandPlaceholders(gStringVar4, gOtherText_Coins);
Menu_DrawStdWindowFrame(0, 0, 9, 3);
+#if (ENGLISH && REVISION == 0)
+ Menu_PrintText(gStringVar4, 2, 1);
+#else
MenuPrint_RightAligned(gStringVar4, 9, 1);
+#endif
Menu_DrawStdWindowFrame(0, 14, 29, 19);
Menu_PrintText(gUnknown_Debug_0842510D, 1, 15);
gTasks[taskId].func = debug_sub_812CDE4;
diff --git a/src/roulette_gfx.c b/src/roulette_gfx.c
index 83e5fb149..46188123b 100644
--- a/src/roulette_gfx.c
+++ b/src/roulette_gfx.c
@@ -1626,32 +1626,33 @@ void sub_81193D4(struct Sprite *sprite)
eRoulette->var38 = sprite;
}
-#ifdef NONMATCHING
void sub_811952C(struct Sprite *sprite)
{
- u8 i;
u8 z;
u16 o;
- u8 h = 0; // r10 (sp+12)
- u8 j = 5; // r9 (r9)
- u8 p = 0; // sp+12 (sp+16)
- u8 s[10] = {}; // sp+0 (sp+0)
- u16 t = Random(); // sp+16 (r10)
+ u8 h = 0;
+ u8 j = 5;
+ u8 p = 0;
+ u8 i = 0;
+ u8 val;
+ u8 s[10] = {};
+ u16 rand = Random();
- eRoulette->var7D = 1;
+ eRoulette->var7D = 1;
eRoulette->var03_5 = TRUE;
eRoulette->var03_6 = FALSE;
- eRoulette->var7E = 255;
- eRoulette->var88 = sprite->data[3];
- eRoulette->var98 = 0.0f;
- eRoulette->var8C = gUnknown_083F8DF4[eRoulette->var04_0].var1C;
- o = (eRoulette->var04_0 * 30 + 33) + (1 - eRoulette->var03_0) * 15;
+ eRoulette->var7E = 0xFF;
+ eRoulette->var88 = sprite->data[3];
+ eRoulette->var98 = 0.0f;
+ eRoulette->var8C = gUnknown_083F8DF4[eRoulette->var04_0].var1C;
+
+ o = (eRoulette->var04_0 * 30 + 33) + (0x1 - eRoulette->var03_0) * 15;
for (i = 0; i < 4; i++)
{
if (o < sprite->data[3] && sprite->data[3] <= o + 90)
{
- sprite->data[0] = i << 1;
- eRoulette->var03_0 = i & 1;
+ sprite->data[0] = i / 2;
+ eRoulette->var03_0 = i % 2;
break;
}
if (i == 3)
@@ -1662,358 +1663,52 @@ void sub_811952C(struct Sprite *sprite)
}
o += 90;
}
+
if (eRoulette->var03_0)
{
if (sprite->data[0])
- {
PlayCry1(SPECIES_TAILLOW, -63);
- }
else
- {
PlayCry1(SPECIES_TAILLOW, 63);
- }
}
else
{
PlayCry1(SPECIES_SHROOMISH, -63);
}
- i = 2;
+
+ val = 2;
z = (eRoulette->var7F + 2) % 12;
+
if (eRoulette->var03_0 == 1 && eRoulette->var04_0 == 1)
j += 6;
else
- j += i;
- for (; i < j; i++)
+ j += val;
+
+ for (i = val; i < j; i++)
{
if (!(eRoulette->var08 & gUnknown_083F8D90[z].var04))
{
s[h++] = i;
- if (!p && (gUnknown_083F8D90[z].var04 & gUnknown_083F8C00[eRoulette->var1B[eRoulette->var1A_0]].var00))
- {
+ if (p == 0 && (gUnknown_083F8D90[z].var04 & gUnknown_083F8C00[eRoulette->var1B[eRoulette->var1A_0]].var0C))
p = i;
- }
}
- z = (z + 1) % 12;
+ z = (z + 1) % 0xC;
}
+
if ((eRoulette->var03_0 + 1) & eRoulette->var02)
{
- if (p && (t & 0xFF) < 192)
- {
+ if (p && (rand & 0xFF) < 0xc0)
sprite->data[7] = p;
- }
else
- {
- sprite->data[7] = s[t % h];
- }
+ sprite->data[7] = s[rand % h];
}
else
{
- sprite->data[7] = s[t % h];
+ sprite->data[7] = s[rand % h];
}
+
sprite->callback = sub_8118CEC;
}
-#else
-NAKED
-void sub_811952C(struct Sprite *sprite)
-{
- asm_unified("push {r4-r7,lr}\n"
- "\tmov r7, r10\n"
- "\tmov r6, r9\n"
- "\tmov r5, r8\n"
- "\tpush {r5-r7}\n"
- "\tsub sp, 20\n"
- "\tmov r8, r0\n"
- "\tmovs r0, 0\n"
- "\tmov r10, r0\n"
- "\tmovs r1, 5\n"
- "\tmov r9, r1\n"
- "\tmovs r2, 0\n"
- "\tstr r2, [sp, 12]\n"
- "\tmov r0, sp\n"
- "\tmovs r1, 0\n"
- "\tmovs r2, 10\n"
- "\tbl memset\n"
- "\tbl Random\n"
- "\tlsls r0, 16\n"
- "\tlsrs r0, 16\n"
- "\tstr r0, [sp, 16]\n"
- "\tldr r7, _08119610 @ =gSharedMem + 0x19000\n"
- "\tadds r0, r7, 0\n"
- "\tadds r0, 125\n"
- "\tmovs r6, 1\n"
- "\tstrb r6, [r0]\n"
- "\tldrb r4, [r7, 3]\n"
- "\tmovs r0, 32\n"
- "\torrs r4, r0\n"
- "\tmovs r0, 65\n"
- "\tnegs r0, r0\n"
- "\tands r4, r0\n"
- "\tstrb r4, [r7, 3]\n"
- "\tadds r1, r7, 0\n"
- "\tadds r1, 126\n"
- "\tmovs r0, 255\n"
- "\tstrb r0, [r1]\n"
- "\tadds r5, r7, 0\n"
- "\tadds r5, 136\n"
- "\tmov r3, r8\n"
- "\tmovs r1, 52\n"
- "\tldrsh r0, [r3, r1]\n"
- "\tbl __floatsisf\n"
- "\tstr r0, [r5]\n"
- "\tadds r1, r7, 0\n"
- "\tadds r1, 152\n"
- "\tldr r0, _08119614 @ =0\n"
- "\tstr r0, [r1]\n"
- "\tadds r3, r7, 0\n"
- "\tadds r3, 140\n"
- "\tldr r2, _08119618 @ =gUnknown_083F8DF4\n"
- "\tldrb r0, [r7, 4]\n"
- "\tlsls r0, 30\n"
- "\tlsrs r1, r0, 25\n"
- "\tadds r2, 28\n"
- "\tadds r1, r2\n"
- "\tldr r1, [r1]\n"
- "\tstr r1, [r3]\n"
- "\tlsrs r0, 30\n"
- "\tlsls r1, r0, 4\n"
- "\tsubs r1, r0\n"
- "\tlsls r1, 1\n"
- "\tadds r1, 33\n"
- "\tlsls r4, 27\n"
- "\tlsrs r4, 27\n"
- "\tsubs r6, r4\n"
- "\tlsls r0, r6, 4\n"
- "\tsubs r0, r6\n"
- "\tadds r1, r0\n"
- "\tlsls r1, 16\n"
- "\tlsrs r1, 16\n"
- "\tmov r5, r10\n"
- "\tmov r3, r8\n"
- "\tmovs r0, 52\n"
- "\tldrsh r2, [r3, r0]\n"
- "_081195C8:\n"
- "\tcmp r1, r2\n"
- "\tbge _081195D4\n"
- "\tadds r0, r1, 0\n"
- "\tadds r0, 90\n"
- "\tcmp r2, r0\n"
- "\tble _08119638\n"
- "_081195D4:\n"
- "\tcmp r5, 3\n"
- "\tbeq _0811961C\n"
- "\tadds r0, r1, 0\n"
- "\tadds r0, 90\n"
- "\tlsls r0, 16\n"
- "\tlsrs r1, r0, 16\n"
- "\tadds r0, r5, 1\n"
- "\tlsls r0, 24\n"
- "\tlsrs r5, r0, 24\n"
- "\tcmp r5, 3\n"
- "\tbls _081195C8\n"
- "_081195EA:\n"
- "\tldr r0, _08119610 @ =gSharedMem + 0x19000\n"
- "\tldrb r1, [r0, 3]\n"
- "\tmovs r0, 31\n"
- "\tands r0, r1\n"
- "\tcmp r0, 0\n"
- "\tbeq _08119664\n"
- "\tmov r1, r8\n"
- "\tmovs r2, 46\n"
- "\tldrsh r0, [r1, r2]\n"
- "\tcmp r0, 0\n"
- "\tbeq _08119658\n"
- "\tmovs r0, 152\n"
- "\tlsls r0, 1\n"
- "\tmovs r1, 63\n"
- "\tnegs r1, r1\n"
- "\tbl PlayCry1\n"
- "\tb _08119670\n"
- "\t.align 2, 0\n"
- "_08119610: .4byte gSharedMem + 0x19000\n"
- "_08119614: .4byte 0\n"
- "_08119618: .4byte gUnknown_083F8DF4\n"
- "_0811961C:\n"
- "\tmovs r0, 1\n"
- "\tmov r3, r8\n"
- "\tstrh r0, [r3, 46]\n"
- "\tldr r2, _08119634 @ =gSharedMem + 0x19000\n"
- "\tldrb r1, [r2, 3]\n"
- "\tsubs r0, 33\n"
- "\tands r0, r1\n"
- "\tmovs r1, 1\n"
- "\torrs r0, r1\n"
- "\tstrb r0, [r2, 3]\n"
- "\tb _081195EA\n"
- "\t.align 2, 0\n"
- "_08119634: .4byte gSharedMem + 0x19000\n"
- "_08119638:\n"
- "\tlsrs r0, r5, 1\n"
- "\tmov r1, r8\n"
- "\tstrh r0, [r1, 46]\n"
- "\tldr r3, _08119654 @ =gSharedMem + 0x19000\n"
- "\tmovs r1, 1\n"
- "\tands r1, r5\n"
- "\tldrb r2, [r3, 3]\n"
- "\tmovs r0, 32\n"
- "\tnegs r0, r0\n"
- "\tands r0, r2\n"
- "\torrs r0, r1\n"
- "\tstrb r0, [r3, 3]\n"
- "\tb _081195EA\n"
- "\t.align 2, 0\n"
- "_08119654: .4byte gSharedMem + 0x19000\n"
- "_08119658:\n"
- "\tmovs r0, 152\n"
- "\tlsls r0, 1\n"
- "\tmovs r1, 63\n"
- "\tbl PlayCry1\n"
- "\tb _08119670\n"
- "_08119664:\n"
- "\tmovs r0, 153\n"
- "\tlsls r0, 1\n"
- "\tmovs r1, 63\n"
- "\tnegs r1, r1\n"
- "\tbl PlayCry1\n"
- "_08119670:\n"
- "\tmovs r5, 2\n"
- "\tldr r4, _081196A0 @ =gSharedMem + 0x19000\n"
- "\tadds r0, r4, 0\n"
- "\tadds r0, 127\n"
- "\tldrb r0, [r0]\n"
- "\tadds r0, 2\n"
- "\tmovs r1, 12\n"
- "\tbl __modsi3\n"
- "\tlsls r0, 24\n"
- "\tlsrs r3, r0, 24\n"
- "\tldrb r1, [r4, 3]\n"
- "\tmovs r0, 31\n"
- "\tands r0, r1\n"
- "\tcmp r0, 1\n"
- "\tbne _081196A4\n"
- "\tldrb r1, [r4, 4]\n"
- "\tmovs r0, 3\n"
- "\tands r0, r1\n"
- "\tcmp r0, 1\n"
- "\tbne _081196A4\n"
- "\tmov r0, r9\n"
- "\tadds r0, 6\n"
- "\tb _081196A8\n"
- "\t.align 2, 0\n"
- "_081196A0: .4byte gSharedMem + 0x19000\n"
- "_081196A4:\n"
- "\tmov r2, r9\n"
- "\tadds r0, r2, r5\n"
- "_081196A8:\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tmov r9, r0\n"
- "\tcmp r5, r9\n"
- "\tbcs _0811970E\n"
- "\tldr r6, _08119734 @ =gSharedMem + 0x19000\n"
- "\tldr r7, _08119738 @ =gUnknown_083F8C00 + 12\n"
- "_081196B6:\n"
- "\tlsls r0, r3, 3\n"
- "\tldr r1, _0811973C @ =gUnknown_083F8D90 + 4\n"
- "\tadds r0, r1\n"
- "\tldr r1, [r6, 8]\n"
- "\tldr r2, [r0]\n"
- "\tands r1, r2\n"
- "\tcmp r1, 0\n"
- "\tbne _081196F8\n"
- "\tmov r0, r10\n"
- "\tadds r1, r0, 1\n"
- "\tlsls r1, 24\n"
- "\tlsrs r1, 24\n"
- "\tmov r10, r1\n"
- "\tadd r0, sp\n"
- "\tstrb r5, [r0]\n"
- "\tldr r0, [sp, 12]\n"
- "\tcmp r0, 0\n"
- "\tbne _081196F8\n"
- "\tldrb r0, [r6, 26]\n"
- "\tlsls r0, 28\n"
- "\tlsrs r0, 28\n"
- "\tldr r1, _08119740 @ =gSharedMem + 0x1901b\n"
- "\tadds r0, r1\n"
- "\tldrb r1, [r0]\n"
- "\tlsls r0, r1, 2\n"
- "\tadds r0, r1\n"
- "\tlsls r0, 2\n"
- "\tadds r0, r7\n"
- "\tldr r0, [r0]\n"
- "\tands r2, r0\n"
- "\tcmp r2, 0\n"
- "\tbeq _081196F8\n"
- "\tstr r5, [sp, 12]\n"
- "_081196F8:\n"
- "\tadds r0, r3, 1\n"
- "\tmovs r1, 12\n"
- "\tbl __modsi3\n"
- "\tlsls r0, 24\n"
- "\tlsrs r3, r0, 24\n"
- "\tadds r0, r5, 1\n"
- "\tlsls r0, 24\n"
- "\tlsrs r5, r0, 24\n"
- "\tcmp r5, r9\n"
- "\tbcc _081196B6\n"
- "_0811970E:\n"
- "\tldrb r0, [r4, 3]\n"
- "\tlsls r0, 27\n"
- "\tlsrs r0, 27\n"
- "\tadds r0, 1\n"
- "\tldrb r1, [r4, 2]\n"
- "\tands r0, r1\n"
- "\tcmp r0, 0\n"
- "\tbeq _08119756\n"
- "\tldr r2, [sp, 12]\n"
- "\tcmp r2, 0\n"
- "\tbeq _08119744\n"
- "\tmovs r0, 255\n"
- "\tldr r3, [sp, 16]\n"
- "\tands r0, r3\n"
- "\tcmp r0, 191\n"
- "\tbhi _08119744\n"
- "\tmov r0, r8\n"
- "\tstrh r2, [r0, 60]\n"
- "\tb _08119766\n"
- "\t.align 2, 0\n"
- "_08119734: .4byte gSharedMem + 0x19000\n"
- "_08119738: .4byte gUnknown_083F8C00 + 12\n"
- "_0811973C: .4byte gUnknown_083F8D90 + 4\n"
- "_08119740: .4byte gSharedMem + 0x1901b\n"
- "_08119744:\n"
- "\tldr r0, [sp, 16]\n"
- "\tmov r1, r10\n"
- "\tbl __modsi3\n"
- "\tadd r0, sp\n"
- "\tldrb r0, [r0]\n"
- "\tmov r1, r8\n"
- "\tstrh r0, [r1, 60]\n"
- "\tb _08119766\n"
- "_08119756:\n"
- "\tldr r0, [sp, 16]\n"
- "\tmov r1, r10\n"
- "\tbl __modsi3\n"
- "\tadd r0, sp\n"
- "\tldrb r0, [r0]\n"
- "\tmov r2, r8\n"
- "\tstrh r0, [r2, 60]\n"
- "_08119766:\n"
- "\tldr r3, _0811977C @ =sub_8118CEC\n"
- "\tmov r0, r8\n"
- "\tstr r3, [r0, 28]\n"
- "\tadd sp, 20\n"
- "\tpop {r3-r5}\n"
- "\tmov r8, r3\n"
- "\tmov r9, r4\n"
- "\tmov r10, r5\n"
- "\tpop {r4-r7}\n"
- "\tpop {r0}\n"
- "\tbx r0\n"
- "\t.align 2, 0\n"
- "_0811977C: .4byte sub_8118CEC");
-}
-#endif
const u16 gUnknown_083FA61E[] = {
BLDALPHA_BLEND( 7, 9),
diff --git a/src/save.c b/src/save.c
index 3eeea88de..3b6cabe6a 100644
--- a/src/save.c
+++ b/src/save.c
@@ -738,7 +738,7 @@ u8 Save_WriteDataInternal(u8 saveType)
return 0;
}
-#if DEBUG
+#if (DEBUG && GERMAN)
extern u32 gUnknown_Debug_03004BD0;
#endif
@@ -749,7 +749,7 @@ u8 Save_WriteData(u8 saveType) // TrySave
Save_WriteDataInternal(saveType);
if (!gDamagedSaveSectors
-#if DEBUG
+#if (DEBUG && GERMAN)
&& gUnknown_Debug_03004BD0 == 0
#endif
)
diff --git a/src/save_failed_screen.c b/src/save_failed_screen.c
index f5544bc65..9ef5f541c 100644
--- a/src/save_failed_screen.c
+++ b/src/save_failed_screen.c
@@ -155,7 +155,7 @@ static void CB2_WipeSave(void)
gSaveFailedClockInfo[0] = TRUE;
-#if DEBUG
+#if (DEBUG && !(ENGLISH && REVISION == 0))
if (gUnknown_Debug_03004BD0 != 0)
gDamagedSaveSectors = 1;
#endif
@@ -277,7 +277,7 @@ static bool8 IsSectorNonEmpty(u16 sector)
ReadFlash(sector, 0, ptr, 4096);
-#if DEBUG // Don't verify the sector wipe?
+#if (DEBUG && !(ENGLISH && REVISION == 0)) // Don't verify the sector wipe?
for (i = 0; i < 0x400; i++, ptr++)
;
return gUnknown_Debug_03004BD0;
diff --git a/src/secret_base.c b/src/secret_base.c
index 21dd83dd2..b37da51d1 100644
--- a/src/secret_base.c
+++ b/src/secret_base.c
@@ -872,7 +872,11 @@ void sub_80BC6B0(u8 taskId)
Menu_PrintText(gOtherText_Exit, 18, 2 * n + 2);
DestroyVerticalScrollIndicator(BOTTOM_ARROW);
if (n != 7)
- Menu_BlankWindowRect(18, ((n << 25) + (1 << 26)) >> 24, 28, 18); // the shifts are needed to match
+ {
+ n++;
+ n--;
+ Menu_BlankWindowRect(18, n * 2 + 4, 28, 18);
+ }
}
else
{
diff --git a/src/slot_machine.c b/src/slot_machine.c
index c03ae0dfa..c6cbdb1c8 100644
--- a/src/slot_machine.c
+++ b/src/slot_machine.c
@@ -5677,7 +5677,7 @@ void debug_sub_811B310(void)
PRINT_NUMBER(eSlotMachine->unk6C, 10, 5);
PRINT_NUMBER(eSlotMachine->unk10, 10, 7);
-#if DEBUG_TRANSLATE
+#if DEBUG_FIX
#define OFFSET 24 // wider window
#else
#define OFFSET 20
@@ -5785,7 +5785,7 @@ static void debug_sub_811B654(u8 taskId)
switch (task->data[0])
{
case 0:
-#if DEBUG_TRANSLATE
+#if DEBUG_FIX
Menu_DrawStdWindowFrame(0, 0, 28, 19); // wider window
#else
Menu_DrawStdWindowFrame(0, 0, 24, 19);
diff --git a/src/text.c b/src/text.c
index dbf74ab61..d963045df 100644
--- a/src/text.c
+++ b/src/text.c
@@ -6,6 +6,7 @@
#include "constants/songs.h"
#include "sound.h"
#include "string_util.h"
+#include "start_menu.h"
enum
{
@@ -2078,7 +2079,7 @@ static u8 sub_8002FA0(struct Window *win, const u8 *text)
static u8 PrintNextChar(struct Window *win)
{
- u8 c = win->text[win->textIndex++];
+ u32 c = win->text[win->textIndex++];
// Handle special control characters
switch (c)
@@ -2106,6 +2107,12 @@ static u8 PrintNextChar(struct Window *win)
return HandleExtCtrlCode(win);
}
+// TODO: see if this is in rev1+
+#if (DEBUG && ENGLISH && REVISION == 0)
+ // Code related to the Murakawa task.
+ if ((gUnknown_Debug_03004BD0) && (!gUnknown_Debug_Murakawa2))
+ c = win->textMode + CHAR_0;
+#endif
sPrintGlyphFuncs[win->textMode](win, c);
return 1;
}
diff --git a/src/trade.c b/src/trade.c
index 424a503bf..8d57cd60b 100644
--- a/src/trade.c
+++ b/src/trade.c
@@ -454,46 +454,38 @@ const u8 gTradeMonSpriteCoords[][2] = {
{23, 18} // CANCEL
};
-const u8 gTradeLevelDisplayCoords[2][6][2] = {
- {
- // Your party
- {5, 4},
- {12, 4},
- {5, 9},
- {12, 9},
- {5, 14},
- {12, 14},
- },
- {
- // Friend's party
- {20, 4},
- {27, 4},
- {20, 9},
- {27, 9},
- {20, 14},
- {27, 14}
- }
+const u8 gTradeLevelDisplayCoords[][2] = {
+ // Your party
+ {5, 4},
+ {12, 4},
+ {5, 9},
+ {12, 9},
+ {5, 14},
+ {12, 14},
+ // Friend's party
+ {20, 4},
+ {27, 4},
+ {20, 9},
+ {27, 9},
+ {20, 14},
+ {27, 14}
};
-const u8 gTradeMonBoxCoords[2][6][2] = {
- {
- // Your party
- {1, 3},
- {8, 3},
- {1, 8},
- {8, 8},
- {1, 13},
- {8, 13},
- },
- {
- // Friend's party
- {16, 3},
- {23, 3},
- {16, 8},
- {23, 8},
- {16, 13},
- {23, 13}
- }
+const u8 gTradeMonBoxCoords[][2] = {
+ // Your party
+ {1, 3},
+ {8, 3},
+ {1, 8},
+ {8, 8},
+ {1, 13},
+ {8, 13},
+ // Friend's party
+ {16, 3},
+ {23, 3},
+ {16, 8},
+ {23, 8},
+ {16, 13},
+ {23, 13}
};
const u8 gTradeUnknownSpriteCoords[][2][2] = {
@@ -3054,71 +3046,15 @@ void sub_804A51C(u8 a0, u8 a1, u8 a2, u8 a3, u8 a4, u8 a5)
#endif
}
-// simple nonmatching, supposedly from a CSE optimization
-#ifdef NONMATCHING
static void sub_804A6DC(u8 whichParty)
{
int i;
- for (i = 0; i < gUnknown_03004824->partyCounts[whichParty]; i ++)
+ for (i = 0; i < gUnknown_03004824->partyCounts[whichParty]; i++)
{
- sub_804A51C(whichParty, i, gTradeLevelDisplayCoords[whichParty][i][0], gTradeLevelDisplayCoords[whichParty][i][1], gTradeMonBoxCoords[whichParty][i][0], gTradeMonBoxCoords[whichParty][i][1]);
+ int loc = i + whichParty * 6;
+ sub_804A51C(whichParty, i, gTradeLevelDisplayCoords[loc][0], gTradeLevelDisplayCoords[loc][1], gTradeMonBoxCoords[loc][0], gTradeMonBoxCoords[loc][1]);
}
}
-#else
-NAKED
-static void sub_804A6DC(u8 whichParty)
-{
- asm_unified("\tpush {r4-r7,lr}\n"
- "\tsub sp, 0x8\n"
- "\tlsls r0, 24\n"
- "\tlsrs r6, r0, 24\n"
- "\tmovs r7, 0\n"
- "\tldr r0, _0804A734 @ =gUnknown_03004824\n"
- "\tldr r0, [r0]\n"
- "\tadds r0, 0x42\n"
- "\tadds r0, r6\n"
- "\tldrb r0, [r0]\n"
- "\tcmp r7, r0\n"
- "\tbge _0804A72C\n"
- "\tlsls r0, r6, 1\n"
- "\tadds r0, r6\n"
- "\tldr r1, _0804A738 @ =gTradeLevelDisplayCoords\n"
- "\tlsls r0, 2\n"
- "\tadds r5, r0, r1\n"
- "\tldr r1, _0804A73C @ =gTradeMonBoxCoords\n"
- "\tadds r4, r0, r1\n"
- "_0804A702:\n"
- "\tlsls r1, r7, 24\n"
- "\tlsrs r1, 24\n"
- "\tldrb r2, [r5]\n"
- "\tldrb r3, [r5, 0x1]\n"
- "\tldrb r0, [r4]\n"
- "\tstr r0, [sp]\n"
- "\tldrb r0, [r4, 0x1]\n"
- "\tstr r0, [sp, 0x4]\n"
- "\tadds r0, r6, 0\n"
- "\tbl sub_804A51C\n"
- "\tadds r5, 0x2\n"
- "\tadds r4, 0x2\n"
- "\tadds r7, 0x1\n"
- "\tldr r0, _0804A734 @ =gUnknown_03004824\n"
- "\tldr r0, [r0]\n"
- "\tadds r0, 0x42\n"
- "\tadds r0, r6\n"
- "\tldrb r0, [r0]\n"
- "\tcmp r7, r0\n"
- "\tblt _0804A702\n"
- "_0804A72C:\n"
- "\tadd sp, 0x8\n"
- "\tpop {r4-r7}\n"
- "\tpop {r0}\n"
- "\tbx r0\n"
- "\t.align 2, 0\n"
- "_0804A734: .4byte gUnknown_03004824\n"
- "_0804A738: .4byte gTradeLevelDisplayCoords\n"
- "_0804A73C: .4byte gTradeMonBoxCoords");
-}
-#endif
static void sub_804A740(u8 whichParty)
{
@@ -3495,68 +3431,31 @@ static void sub_804B128(void)
REG_BG2Y = dest.dy;
}
-// register swap with volatile, wtf !how
-#ifdef NONMATCHING
static void sub_804B1BC(void)
{
- REG_BG1VOFS = gUnknown_03004828->bg1vofs, REG_BG1HOFS = gUnknown_03004828->bg1hofs;
- //temp = ;
- //asm(""::"r"(gUnknown_03004828->bg2vofs));
- if (REG_DISPCNT % 8 == 0)
+ u16 dispcnt;
+
+ REG_BG1VOFS = gUnknown_03004828->bg1vofs;
+ REG_BG1HOFS = gUnknown_03004828->bg1hofs;
+
+ /*
+ A u16 cast allows for REG_DISPCNT storage to be swapped.
+ This is required for the function to match.
+
+ You can see this less obfuscated in FireRed and Emerald,
+ since they use gflib's GPU manager for this instead.
+ */
+ dispcnt = (*(u16 *)REG_ADDR_DISPCNT);
+ if ((dispcnt & 7) == DISPCNT_MODE_0)
{
- REG_BG2VOFS = gUnknown_03004828->bg2vofs, REG_BG2HOFS = gUnknown_03004828->bg2hofs;
+ REG_BG2VOFS = gUnknown_03004828->bg2vofs;
+ REG_BG2HOFS = gUnknown_03004828->bg2hofs;
}
else
{
sub_804B128();
}
}
-#else
-NAKED static void sub_804B1BC(void)
-{
- asm_unified("\tpush {lr}\n"
- "\tldr r1, _0804B1FC @ =REG_BG1VOFS\n"
- "\tldr r0, _0804B200 @ =gUnknown_03004828\n"
- "\tldr r2, [r0]\n"
- "\tmovs r3, 0x88\n"
- "\tlsls r3, 1\n"
- "\tadds r0, r2, r3\n"
- "\tldrh r0, [r0]\n"
- "\tstrh r0, [r1]\n"
- "\tsubs r1, 0x2\n"
- "\tadds r3, 0x2\n"
- "\tadds r0, r2, r3\n"
- "\tldrh r0, [r0]\n"
- "\tstrh r0, [r1]\n"
- "\tmovs r0, 0x80\n"
- "\tlsls r0, 19\n"
- "\tldrh r0, [r0]\n"
- "\tmovs r1, 0x7\n"
- "\tands r0, r1\n"
- "\tcmp r0, 0\n"
- "\tbne _0804B208\n"
- "\tldr r1, _0804B204 @ =REG_BG2VOFS\n"
- "\tadds r3, 0x2\n"
- "\tadds r0, r2, r3\n"
- "\tldrh r0, [r0]\n"
- "\tstrh r0, [r1]\n"
- "\tsubs r1, 0x2\n"
- "\tadds r3, 0x2\n"
- "\tadds r0, r2, r3\n"
- "\tldrh r0, [r0]\n"
- "\tstrh r0, [r1]\n"
- "\tb _0804B20C\n"
- "\t.align 2, 0\n"
- "_0804B1FC: .4byte REG_BG1VOFS\n"
- "_0804B200: .4byte gUnknown_03004828\n"
- "_0804B204: .4byte REG_BG2VOFS\n"
- "_0804B208:\n"
- "\tbl sub_804B128\n"
- "_0804B20C:\n"
- "\tpop {r0}\n"
- "\tbx r0");
-}
-#endif
static void sub_804B210(void)
{
diff --git a/src/trainer_card.c b/src/trainer_card.c
index b6eb28005..0e44c7cfc 100644
--- a/src/trainer_card.c
+++ b/src/trainer_card.c
@@ -816,19 +816,12 @@ bool8 TrainerCard_InitFlipAnimation(struct Task *task)
return FALSE;
}
-/*
bool8 TrainerCard_ScaleDownFlipAnimation(struct Task *task)
{
- u32 r7;
- u16 r9;
- u32 r6;
- u32 r5;
- u32 r4;
- u32 r10;
- u32 sp0;
s16 i;
+ u32 r4, r5, r10, r7, r6, var_24, r9, var;
- ewram0_2.var_4 = 0;
+ ewram0_2.var_4 = FALSE;
task->data[1] += 3;
if (task->data[1] > 79)
task->data[1] = 79;
@@ -837,183 +830,33 @@ bool8 TrainerCard_ScaleDownFlipAnimation(struct Task *task)
r9 = 160 - r7;
r4 = r9 - r7;
r6 = -r7 << 16;
- r5 = (160 << 16) / r4;
- r5 -= 1 << 16;
- r10 = r5 * r4 + r6;
- sp0 = r5 / r4;
+ r5 = 0xA00000 / r4;
+ r5 += 0xFFFF0000;
+ var_24 = r6 + r5 * r4;
+ r10 = r5 / r4;
r5 *= 2;
- for (i = 0; i < r7; i++)
- {
- gScanlineEffectRegBuffers.filler0[i] = -4 - (u32)i;
- }
- //_08093B74
- for (; i < r9; i++)
+ for (i = 0; i < r7;
+ // WHAT?!
+ gScanlineEffectRegBuffers[0][i] = (u32)-i + -4,
+ i++);
+ for (; i < (s16)r9; i++)
{
- u16 var = r6 >> 16;
+ var = r6 >> 16;
r6 += r5;
- r5 -= sp0;
- gScanlineEffectRegBuffers.filler0[i] = -4 + var;
+ r5 -= r10;
+ gScanlineEffectRegBuffers[0][i] = var + -4;
}
- for (; i < 160; i++)
- gScanlineEffectRegBuffers.filler0[i] = -4 + (u16)(r10 >> 16);
- ewram0_2.var_4 = 1;
- if (task->data[1] > 0x4A)
+ for (var = var_24 >> 16; i < 160;
+ // WHAT?!
+ gScanlineEffectRegBuffers[0][i] = var + -4,
+ i++);
+
+ ewram0_2.var_4 = TRUE;
+ if (task->data[1] > 74)
task->data[0]++;
- return FALSE;
-}
-*/
-NAKED
-bool8 TrainerCard_ScaleDownFlipAnimation(struct Task *task)
-{
- 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, 0x4\n\
- mov r8, r0\n\
- ldr r1, _08093BFC @ =gSharedMem\n\
- movs r0, 0\n\
- strb r0, [r1, 0x4]\n\
- mov r2, r8\n\
- ldrh r0, [r2, 0xA]\n\
- adds r0, 0x3\n\
- strh r0, [r2, 0xA]\n\
- lsls r0, 16\n\
- asrs r0, 16\n\
- cmp r0, 0x4F\n\
- ble _08093B18\n\
- movs r0, 0x4F\n\
- strh r0, [r2, 0xA]\n\
-_08093B18:\n\
- mov r4, r8\n\
- movs r0, 0xA\n\
- ldrsh r7, [r4, r0]\n\
- movs r0, 0xA0\n\
- subs r0, r7\n\
- mov r9, r0\n\
- subs r4, r0, r7\n\
- negs r0, r7\n\
- lsls r6, r0, 16\n\
- movs r0, 0xA0\n\
- lsls r0, 16\n\
- adds r1, r4, 0\n\
- bl __udivsi3\n\
- adds r5, r0, 0\n\
- ldr r1, _08093C00 @ =0xffff0000\n\
- adds r5, r1\n\
- adds r0, r5, 0\n\
- muls r0, r4\n\
- adds r0, r6\n\
- mov r10, r0\n\
- adds r0, r5, 0\n\
- adds r1, r4, 0\n\
- bl __udivsi3\n\
- str r0, [sp]\n\
- lsls r5, 1\n\
- movs r3, 0\n\
- cmp r3, r7\n\
- bcs _08093B74\n\
- ldr r2, _08093C04 @ =gScanlineEffectRegBuffers\n\
- mov r12, r2\n\
- ldr r0, _08093C08 @ =0x0000fffc\n\
- adds r4, r0, 0\n\
-_08093B5C:\n\
- lsls r0, r3, 16\n\
- asrs r0, 16\n\
- lsls r1, r0, 1\n\
- add r1, r12\n\
- subs r2, r4, r0\n\
- strh r2, [r1]\n\
- adds r0, 0x1\n\
- lsls r0, 16\n\
- lsrs r3, r0, 16\n\
- asrs r0, 16\n\
- cmp r0, r7\n\
- bcc _08093B5C\n\
-_08093B74:\n\
- lsls r2, r3, 16\n\
- mov r1, r9\n\
- lsls r0, r1, 16\n\
- asrs r1, r0, 16\n\
- mov r4, r10\n\
- lsrs r7, r4, 16\n\
- cmp r2, r0\n\
- bge _08093BAE\n\
- ldr r0, _08093C04 @ =gScanlineEffectRegBuffers\n\
- mov r9, r0\n\
- ldr r4, _08093C08 @ =0x0000fffc\n\
- mov r12, r4\n\
- adds r4, r1, 0\n\
-_08093B8E:\n\
- lsrs r1, r6, 16\n\
- adds r6, r5\n\
- ldr r0, [sp]\n\
- subs r5, r0\n\
- asrs r2, 16\n\
- lsls r0, r2, 1\n\
- add r0, r9\n\
- add r1, r12\n\
- strh r1, [r0]\n\
- adds r2, 0x1\n\
- lsls r2, 16\n\
- lsrs r3, r2, 16\n\
- lsls r2, r3, 16\n\
- asrs r0, r2, 16\n\
- cmp r0, r4\n\
- blt _08093B8E\n\
-_08093BAE:\n\
- adds r1, r7, 0\n\
- lsls r0, r3, 16\n\
- asrs r0, 16\n\
- cmp r0, 0x9F\n\
- bgt _08093BD4\n\
- ldr r4, _08093C04 @ =gScanlineEffectRegBuffers\n\
- ldr r0, _08093C08 @ =0x0000fffc\n\
- adds r2, r1, r0\n\
-_08093BBE:\n\
- lsls r1, r3, 16\n\
- asrs r1, 16\n\
- lsls r0, r1, 1\n\
- adds r0, r4\n\
- strh r2, [r0]\n\
- adds r1, 0x1\n\
- lsls r1, 16\n\
- lsrs r3, r1, 16\n\
- asrs r1, 16\n\
- cmp r1, 0x9F\n\
- ble _08093BBE\n\
-_08093BD4:\n\
- movs r0, 0x1\n\
- ldr r1, _08093BFC @ =gSharedMem\n\
- strb r0, [r1, 0x4]\n\
- mov r2, r8\n\
- movs r4, 0xA\n\
- ldrsh r0, [r2, r4]\n\
- cmp r0, 0x4A\n\
- ble _08093BEA\n\
- ldrh r0, [r2, 0x8]\n\
- adds r0, 0x1\n\
- strh r0, [r2, 0x8]\n\
-_08093BEA:\n\
- movs r0, 0\n\
- add sp, 0x4\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r1}\n\
- bx r1\n\
- .align 2, 0\n\
-_08093BFC: .4byte gSharedMem\n\
-_08093C00: .4byte 0xffff0000\n\
-_08093C04: .4byte gScanlineEffectRegBuffers\n\
-_08093C08: .4byte 0x0000fffc\n\
- .syntax divided\n");
+ return FALSE;
}
bool8 TrainerCard_SwitchToNewSide(struct Task *task)
@@ -1028,154 +871,47 @@ bool8 TrainerCard_SwitchToNewSide(struct Task *task)
return TRUE;
}
-NAKED
bool8 TrainerCard_ScaleUpFlipAnimation(struct Task *task)
{
- 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, 0x4\n\
- mov r8, r0\n\
- ldr r1, _08093D40 @ =gSharedMem\n\
- movs r2, 0\n\
- strb r2, [r1, 0x4]\n\
- ldrh r0, [r0, 0xA]\n\
- subs r0, 0x3\n\
- mov r3, r8\n\
- strh r0, [r3, 0xA]\n\
- lsls r0, 16\n\
- cmp r0, 0\n\
- bgt _08093C5C\n\
- strh r2, [r3, 0xA]\n\
-_08093C5C:\n\
- mov r4, r8\n\
- movs r0, 0xA\n\
- ldrsh r7, [r4, r0]\n\
- movs r0, 0xA0\n\
- subs r0, r7\n\
- mov r9, r0\n\
- subs r4, r0, r7\n\
- negs r0, r7\n\
- lsls r6, r0, 16\n\
- movs r0, 0xA0\n\
- lsls r0, 16\n\
- adds r1, r4, 0\n\
- bl __udivsi3\n\
- adds r5, r0, 0\n\
- ldr r1, _08093D44 @ =0xffff0000\n\
- adds r5, r1\n\
- adds r0, r5, 0\n\
- muls r0, r4\n\
- adds r0, r6\n\
- mov r10, r0\n\
- adds r0, r5, 0\n\
- adds r1, r4, 0\n\
- bl __udivsi3\n\
- str r0, [sp]\n\
- lsrs r5, 1\n\
- movs r3, 0\n\
- cmp r3, r7\n\
- bcs _08093CB8\n\
- ldr r2, _08093D48 @ =gScanlineEffectRegBuffers\n\
- mov r12, r2\n\
- ldr r0, _08093D4C @ =0x0000fffc\n\
- adds r4, r0, 0\n\
-_08093CA0:\n\
- lsls r0, r3, 16\n\
- asrs r0, 16\n\
- lsls r1, r0, 1\n\
- add r1, r12\n\
- subs r2, r4, r0\n\
- strh r2, [r1]\n\
- adds r0, 0x1\n\
- lsls r0, 16\n\
- lsrs r3, r0, 16\n\
- asrs r0, 16\n\
- cmp r0, r7\n\
- bcc _08093CA0\n\
-_08093CB8:\n\
- lsls r2, r3, 16\n\
- mov r1, r9\n\
- lsls r0, r1, 16\n\
- asrs r1, r0, 16\n\
- mov r4, r10\n\
- lsrs r7, r4, 16\n\
- cmp r2, r0\n\
- bge _08093CF2\n\
- ldr r0, _08093D48 @ =gScanlineEffectRegBuffers\n\
- mov r9, r0\n\
- ldr r3, _08093D4C @ =0x0000fffc\n\
- mov r12, r3\n\
- adds r4, r1, 0\n\
-_08093CD2:\n\
- lsrs r1, r6, 16\n\
- adds r6, r5\n\
- ldr r0, [sp]\n\
- adds r5, r0\n\
- asrs r2, 16\n\
- lsls r0, r2, 1\n\
- add r0, r9\n\
- add r1, r12\n\
- strh r1, [r0]\n\
- adds r2, 0x1\n\
- lsls r2, 16\n\
- lsrs r3, r2, 16\n\
- lsls r2, r3, 16\n\
- asrs r0, r2, 16\n\
- cmp r0, r4\n\
- blt _08093CD2\n\
-_08093CF2:\n\
- adds r1, r7, 0\n\
- lsls r0, r3, 16\n\
- asrs r0, 16\n\
- cmp r0, 0x9F\n\
- bgt _08093D18\n\
- ldr r4, _08093D48 @ =gScanlineEffectRegBuffers\n\
- ldr r0, _08093D4C @ =0x0000fffc\n\
- adds r2, r1, r0\n\
-_08093D02:\n\
- lsls r1, r3, 16\n\
- asrs r1, 16\n\
- lsls r0, r1, 1\n\
- adds r0, r4\n\
- strh r2, [r0]\n\
- adds r1, 0x1\n\
- lsls r1, 16\n\
- lsrs r3, r1, 16\n\
- asrs r1, 16\n\
- cmp r1, 0x9F\n\
- ble _08093D02\n\
-_08093D18:\n\
- movs r0, 0x1\n\
- ldr r1, _08093D40 @ =gSharedMem\n\
- strb r0, [r1, 0x4]\n\
- mov r2, r8\n\
- movs r3, 0xA\n\
- ldrsh r0, [r2, r3]\n\
- cmp r0, 0\n\
- bgt _08093D2E\n\
- ldrh r0, [r2, 0x8]\n\
- adds r0, 0x1\n\
- strh r0, [r2, 0x8]\n\
-_08093D2E:\n\
- movs r0, 0\n\
- add sp, 0x4\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r1}\n\
- bx r1\n\
- .align 2, 0\n\
-_08093D40: .4byte gSharedMem\n\
-_08093D44: .4byte 0xffff0000\n\
-_08093D48: .4byte gScanlineEffectRegBuffers\n\
-_08093D4C: .4byte 0x0000fffc\n\
- .syntax divided\n");
+ s16 i;
+ u32 r4, r5, r10, r7, r6, var_24, r9, var;
+
+ ewram0_2.var_4 = FALSE;
+ task->data[1] -= 3;
+ if (task->data[1] <= 0)
+ task->data[1] = 0;
+
+ r7 = task->data[1];
+ r9 = 160 - r7;
+ r4 = r9 - r7;
+ r6 = -r7 << 16;
+ r5 = 0xA00000 / r4;
+ r5 += 0xFFFF0000;
+ var_24 = r6 + r5 * r4;
+ r10 = r5 / r4;
+ r5 /= 2;
+
+ for (i = 0; i < r7;
+ // WHAT?!
+ gScanlineEffectRegBuffers[0][i] = (u32)-i + -4,
+ i++);
+ for (; i < (s16)r9; i++)
+ {
+ var = r6 >> 16;
+ r6 += r5;
+ r5 += r10;
+ gScanlineEffectRegBuffers[0][i] = var + -4;
+ }
+ for (var = var_24 >> 16; i < 160;
+ // WHAT?!
+ gScanlineEffectRegBuffers[0][i] = var + -4,
+ i++);
+
+ ewram0_2.var_4 = TRUE;
+ if (task->data[1] <= 0)
+ task->data[0]++;
+
+ return FALSE;
}
bool8 TrainerCard_FinishFlipAnimation(struct Task *task)
diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c
index e13369c0b..8fff9edee 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,19 @@ 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 enhanced)
{
- if (a2 != 0)
+ if (enhanced)
{
- StringCopy(dest, sContextStatNames[statID]);
+ // This is a joke.
+ if (enhanced > 0)
+ enhanced = 0;
+
+ if (enhanced < 0)
+ // matches, but can also be a variety of values too
+ { u8 unk = -unk; } // see water.c for a similar behavior
+
+ StringCopy(dest, sContestStatNames[statId]);
StringAppend(dest, gOtherText_WasEnhanced);
}
else
@@ -696,49 +703,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)
{
diff --git a/src/util.c b/src/util.c
index 2e76cf4de..ed59ac241 100644
--- a/src/util.c
+++ b/src/util.c
@@ -152,10 +152,6 @@ void DoBgAffineSet(struct BgAffineDstData *dest, u32 texX, u32 texY, s16 scrX, s
BgAffineSet(&src, dest, 1);
}
-#ifdef NONMATCHING
-
-// Functionally equivalent.
-// Only the two yflip loops don't match.
void CopySpriteTiles(u8 shape, u8 size, u8 *tiles, u16 *tilemap, u8 *output)
{
u8 x, y;
@@ -170,27 +166,22 @@ void CopySpriteTiles(u8 shape, u8 size, u8 *tiles, u16 *tilemap, u8 *output)
for (x = 0; x < w; x++)
{
- int tile = (*tilemap & 0x3ff) * 32;
+ u16 tile = (*tilemap & 0x3ff) * 32;
int attr = *tilemap & 0xc00;
if (attr == 0)
{
- void *src = tiles + tile;
- void *dest = output;
- int length = 32;
- DmaCopy32(3, src, dest, length);
+ DmaCopy32Defvars(3, tiles + tile, output, 32);
}
else if (attr == 0x800) // yflip
{
for (i = 0; i < 8; i++)
{
- void *src = tiles;
- void *dest = output;
- int length = 4;
- // this is likely wrong, but makes it closer to matching
- src += tile + (7 - i) * 4;
- dest += i * 4;
- DmaCopy32(3, src, dest, length);
+ u8 requiredForMatching = 0;
+
+ ++requiredForMatching;
+ --requiredForMatching;
+ DmaCopy32Defvars(3, tile + (7 - i) * 4 + tiles, output + i * 4, 4);
}
}
else // xflip
@@ -200,26 +191,22 @@ void CopySpriteTiles(u8 shape, u8 size, u8 *tiles, u16 *tilemap, u8 *output)
for (j = 0; j < 4; j++)
{
u8 i2 = i * 4;
- xflip[i2 + (3-j)] = (tiles[tile + i2 + j] & 0xf) << 4;
- xflip[i2 + (3-j)] |= tiles[tile + i2 + j] >> 4;
+ xflip[i2 + (3 - j)] = (tiles[tile + i2 + j] & 0xf) << 4;
+ xflip[i2 + (3 - j)] |= tiles[tile + i2 + j] >> 4;
}
}
if (*tilemap & 0x800) // yflip
{
for (i = 0; i < 8; i++)
{
- void *src = xflip + (7-i) * 4;
- void *dest = output + i*4;
- int length = 4;
- DmaCopy32(3, src, dest, length);
+ ++tile;
+ --tile;
+ DmaCopy32Defvars(3, (7 - i) * 4 + xflip, output + i * 4, 4);
}
}
else
{
- void *src = xflip;
- void *dest = output;
- int length = 32;
- DmaCopy32(3, src, dest, length);
+ DmaCopy32Defvars(3, xflip, output, 32);
}
}
tilemap++;
@@ -229,253 +216,6 @@ void CopySpriteTiles(u8 shape, u8 size, u8 *tiles, u16 *tilemap, u8 *output)
}
}
-#else
-
-NAKED void CopySpriteTiles(u8 shape, u8 size, u8 *tiles, u16 *tilemap, u8 *output)
-{
- asm("\n"
- " .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, 0x3C\n"
- " str r2, [sp, 0x20]\n"
- " adds r4, r3, 0\n"
- " ldr r7, [sp, 0x5C]\n"
- " lsls r0, 24\n"
- " lsls r1, 24\n"
- " ldr r2, _08041008 @ =gSpriteDimensions\n"
- " lsrs r1, 23\n"
- " lsrs r0, 21\n"
- " adds r1, r0\n"
- " adds r0, r2, 0x1\n"
- " adds r0, r1, r0\n"
- " ldrb r0, [r0]\n"
- " str r0, [sp, 0x24]\n"
- " adds r1, r2\n"
- " ldrb r1, [r1]\n"
- " str r1, [sp, 0x28]\n"
- " movs r1, 0\n"
- " cmp r1, r0\n"
- " bcc _08040FB4\n"
- " b _08041136\n"
- "_08040FB4:\n"
- " movs r0, 0x20\n"
- " ldr r2, [sp, 0x28]\n"
- " subs r0, r2\n"
- " lsls r0, 1\n"
- " str r0, [sp, 0x2C]\n"
- "_08040FBE:\n"
- " movs r2, 0\n"
- " adds r1, 0x1\n"
- " str r1, [sp, 0x34]\n"
- " ldr r3, [sp, 0x28]\n"
- " cmp r2, r3\n"
- " bcc _08040FCC\n"
- " b _08041124\n"
- "_08040FCC:\n"
- " ldr r0, _0804100C @ =0x040000d4\n"
- " mov r8, r0\n"
- "_08040FD0:\n"
- " ldrh r1, [r4]\n"
- " ldr r0, _08041010 @ =0x000003ff\n"
- " ands r0, r1\n"
- " lsls r0, 5\n"
- " mov r12, r0\n"
- " movs r0, 0xC0\n"
- " lsls r0, 4\n"
- " ands r0, r1\n"
- " mov r3, sp\n"
- " strh r1, [r3, 0x38]\n"
- " cmp r0, 0\n"
- " bne _08041018\n"
- " ldr r0, [sp, 0x20]\n"
- " add r0, r12\n"
- " mov r1, r8\n"
- " str r0, [r1]\n"
- " str r7, [r1, 0x4]\n"
- " ldr r3, _08041014 @ =0x84000008\n"
- " str r3, [r1, 0x8]\n"
- " ldr r0, [r1, 0x8]\n"
- " adds r4, 0x2\n"
- " str r4, [sp, 0x30]\n"
- " adds r7, 0x20\n"
- " mov r10, r7\n"
- " adds r2, 0x1\n"
- " mov r9, r2\n"
- " b _08041112\n"
- " .align 2, 0\n"
- "_08041008: .4byte gSpriteDimensions\n"
- "_0804100C: .4byte 0x040000d4\n"
- "_08041010: .4byte 0x000003ff\n"
- "_08041014: .4byte 0x84000008\n"
- "_08041018:\n"
- " movs r1, 0x80\n"
- " lsls r1, 4\n"
- " cmp r0, r1\n"
- " bne _08041068\n"
- " movs r3, 0\n"
- " adds r4, 0x2\n"
- " str r4, [sp, 0x30]\n"
- " movs r0, 0x20\n"
- " adds r0, r7\n"
- " mov r10, r0\n"
- " adds r2, 0x1\n"
- " mov r9, r2\n"
- " ldr r4, _08041060 @ =0x040000d4\n"
- " ldr r6, _08041064 @ =0x84000001\n"
- " movs r5, 0x7\n"
- "_08041036:\n"
- " lsls r2, r3, 24\n"
- " asrs r2, 24\n"
- " subs r0, r5, r2\n"
- " lsls r0, 2\n"
- " add r0, r12\n"
- " ldr r1, [sp, 0x20]\n"
- " adds r0, r1, r0\n"
- " lsls r1, r2, 2\n"
- " adds r1, r7, r1\n"
- " str r0, [r4]\n"
- " str r1, [r4, 0x4]\n"
- " str r6, [r4, 0x8]\n"
- " ldr r0, [r4, 0x8]\n"
- " adds r2, 0x1\n"
- " lsls r2, 24\n"
- " lsrs r3, r2, 24\n"
- " asrs r2, 24\n"
- " cmp r2, 0x7\n"
- " ble _08041036\n"
- " b _08041112\n"
- " .align 2, 0\n"
- "_08041060: .4byte 0x040000d4\n"
- "_08041064: .4byte 0x84000001\n"
- "_08041068:\n"
- " movs r3, 0\n"
- " adds r4, 0x2\n"
- " str r4, [sp, 0x30]\n"
- " movs r0, 0x20\n"
- " adds r0, r7\n"
- " mov r10, r0\n"
- " adds r2, 0x1\n"
- " mov r9, r2\n"
- "_08041078:\n"
- " movs r2, 0\n"
- " lsls r4, r3, 24\n"
- " lsls r0, r4, 2\n"
- " lsrs r0, 24\n"
- " adds r6, r0, 0x3\n"
- " mov r1, r12\n"
- " adds r5, r1, r0\n"
- "_08041086:\n"
- " lsls r1, r2, 24\n"
- " asrs r1, 24\n"
- " subs r0, r6, r1\n"
- " mov r2, sp\n"
- " adds r3, r2, r0\n"
- " adds r0, r5, r1\n"
- " ldr r2, [sp, 0x20]\n"
- " adds r0, r2, r0\n"
- " ldrb r2, [r0]\n"
- " movs r0, 0xF\n"
- " ands r0, r2\n"
- " lsls r0, 4\n"
- " lsrs r2, 4\n"
- " orrs r0, r2\n"
- " strb r0, [r3]\n"
- " adds r1, 0x1\n"
- " lsls r1, 24\n"
- " lsrs r2, r1, 24\n"
- " asrs r1, 24\n"
- " cmp r1, 0x3\n"
- " ble _08041086\n"
- " movs r3, 0x80\n"
- " lsls r3, 17\n"
- " adds r0, r4, r3\n"
- " lsrs r3, r0, 24\n"
- " asrs r0, 24\n"
- " cmp r0, 0x7\n"
- " ble _08041078\n"
- " movs r0, 0x80\n"
- " lsls r0, 4\n"
- " mov r1, sp\n"
- " ldrh r1, [r1, 0x38]\n"
- " ands r0, r1\n"
- " cmp r0, 0\n"
- " beq _08041104\n"
- " movs r3, 0\n"
- " ldr r4, _080410FC @ =0x040000d4\n"
- " ldr r6, _08041100 @ =0x84000001\n"
- " movs r5, 0x7\n"
- "_080410D4:\n"
- " lsls r1, r3, 24\n"
- " asrs r1, 24\n"
- " subs r0, r5, r1\n"
- " lsls r0, 2\n"
- " mov r3, sp\n"
- " adds r2, r3, r0\n"
- " lsls r0, r1, 2\n"
- " adds r0, r7, r0\n"
- " str r2, [r4]\n"
- " str r0, [r4, 0x4]\n"
- " str r6, [r4, 0x8]\n"
- " ldr r0, [r4, 0x8]\n"
- " adds r1, 0x1\n"
- " lsls r1, 24\n"
- " lsrs r3, r1, 24\n"
- " asrs r1, 24\n"
- " cmp r1, 0x7\n"
- " ble _080410D4\n"
- " b _08041112\n"
- " .align 2, 0\n"
- "_080410FC: .4byte 0x040000d4\n"
- "_08041100: .4byte 0x84000001\n"
- "_08041104:\n"
- " mov r0, sp\n"
- " mov r1, r8\n"
- " str r0, [r1]\n"
- " str r7, [r1, 0x4]\n"
- " ldr r2, _08041148 @ =0x84000008\n"
- " str r2, [r1, 0x8]\n"
- " ldr r0, [r1, 0x8]\n"
- "_08041112:\n"
- " ldr r4, [sp, 0x30]\n"
- " mov r7, r10\n"
- " mov r3, r9\n"
- " lsls r0, r3, 24\n"
- " lsrs r2, r0, 24\n"
- " ldr r0, [sp, 0x28]\n"
- " cmp r2, r0\n"
- " bcs _08041124\n"
- " b _08040FD0\n"
- "_08041124:\n"
- " ldr r1, [sp, 0x2C]\n"
- " adds r4, r1\n"
- " ldr r2, [sp, 0x34]\n"
- " lsls r0, r2, 24\n"
- " lsrs r1, r0, 24\n"
- " ldr r3, [sp, 0x24]\n"
- " cmp r1, r3\n"
- " bcs _08041136\n"
- " b _08040FBE\n"
- "_08041136:\n"
- " add sp, 0x3C\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"
- "_08041148: .4byte 0x84000008\n"
- " .syntax divided\n"
- );
-}
-
-#endif
-
int CountTrailingZeroBits(u32 value)
{
u8 i;