summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKaz <kazbloxmc@gmail.com>2020-05-28 02:21:46 -0400
committerKaz <kazbloxmc@gmail.com>2020-05-28 02:21:46 -0400
commit2608dd2a3383ed116c4bf32255751afd3b7f0374 (patch)
tree3b5a7a0f9aeac62d9913b9241ba5ce8d60f4bf6a /src
parent4b75f2fef9c793a1c2e9656d2bf6926913b692d7 (diff)
Fix mauville_man, battle_anim_special, battle_ai_switch_items,
battle_ai_script_commands, roulette_gfx and util nonmatchings
Diffstat (limited to 'src')
-rw-r--r--src/battle_ai_script_commands.c301
-rw-r--r--src/battle_ai_switch_items.c275
-rwxr-xr-xsrc/battle_anim_special.c80
-rw-r--r--src/mauville_man.c14
-rw-r--r--src/roulette_gfx.c365
-rw-r--r--src/util.c286
6 files changed, 117 insertions, 1204 deletions
diff --git a/src/battle_ai_script_commands.c b/src/battle_ai_script_commands.c
index 405776db6..bf5444cf6 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,
@@ -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_special.c b/src/battle_anim_special.c
index d8cf71be6..bae635e9f 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/mauville_man.c b/src/mauville_man.c
index 64c41f3bf..7b317e08b 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/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/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;