summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <PikalaxALT@users.noreply.github.com>2020-09-08 16:31:47 -0400
committerGitHub <noreply@github.com>2020-09-08 16:31:47 -0400
commit818bc4ebe5893783ef386b10b8b0ec6b4967086b (patch)
tree4239d2cb1ce9d69df2d6e872dc993ad06ee08776
parent16ecbc6446f4e8d308e71aa5e649c69acb8a6b3e (diff)
parent4d31980359af92c407a15358d3c73ba47d6f00b7 (diff)
Merge pull request #1179 from PokeCodec/Maintenance
Match CheckBagHasSpace
-rw-r--r--include/AgbRfu_LinkManager.h4
-rw-r--r--include/battle_main.h2
-rw-r--r--include/battle_message.h2
-rw-r--r--src/battle_ai_script_commands.c2
-rw-r--r--src/battle_main.c71
-rw-r--r--src/event_object_movement.c12
-rwxr-xr-xsrc/faraway_island.c23
-rw-r--r--src/item.c227
-rw-r--r--src/m4a_1.s10
-rw-r--r--src/m4a_tables.c6
-rw-r--r--src/pokemon.c20
11 files changed, 109 insertions, 270 deletions
diff --git a/include/AgbRfu_LinkManager.h b/include/AgbRfu_LinkManager.h
index d4ef13183..4e1a879c2 100644
--- a/include/AgbRfu_LinkManager.h
+++ b/include/AgbRfu_LinkManager.h
@@ -176,8 +176,8 @@ typedef struct linkManagerTag
/* 0x024 */ VBL_TIMER nameAcceptTimer;
/* 0x030 */ VBL_TIMER linkRecoveryTimer;
/* 0x03c */ INIT_PARAM *init_param;
- /* 0x040 */ void (*LMAN_callback)(u8, u8);
- /* 0x044 */ void (*MSC_callback)(u16);
+ /* 0x040 */ void (*LMAN_callback)(u8 msg, u8 paramCount);
+ /* 0x044 */ void (*MSC_callback)(u16 REQ_commandID);
} LINK_MANAGER;
extern struct linkManagerTag lman;
diff --git a/include/battle_main.h b/include/battle_main.h
index 890e47f39..9e3dc7cd6 100644
--- a/include/battle_main.h
+++ b/include/battle_main.h
@@ -73,8 +73,6 @@ void nullsub_20(void);
void BeginBattleIntro(void);
void SwitchInClearSetData(void);
void FaintClearSetData(void);
-void sub_803B3AC(void); // unused
-void sub_803B598(void); // unused
void BattleTurnPassed(void);
u8 IsRunningFromBattleImpossible(void);
void SwitchPartyOrder(u8 battlerId);
diff --git a/include/battle_message.h b/include/battle_message.h
index 011a1cb0c..af090a06c 100644
--- a/include/battle_message.h
+++ b/include/battle_message.h
@@ -145,7 +145,7 @@
{ \
textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \
textVar[1] = B_BUFF_STRING; \
- textVar[2] = stringId; \
+ textVar[2] = (stringId & 0xFF); \
textVar[3] = (stringId & 0xFF00) >> 8; \
textVar[4] = B_BUFF_EOS; \
}
diff --git a/src/battle_ai_script_commands.c b/src/battle_ai_script_commands.c
index 748e4729a..032e5f407 100644
--- a/src/battle_ai_script_commands.c
+++ b/src/battle_ai_script_commands.c
@@ -1299,7 +1299,7 @@ static void Cmd_count_usable_party_mons(void)
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{
- u32 position;
+ u8 position;
battlerOnField1 = gBattlerPartyIndexes[battlerId];
position = GetBattlerPosition(battlerId) ^ BIT_FLANK;
battlerOnField2 = gBattlerPartyIndexes[GetBattlerAtPosition(position)];
diff --git a/src/battle_main.c b/src/battle_main.c
index 193fffaf2..e2b3714fc 100644
--- a/src/battle_main.c
+++ b/src/battle_main.c
@@ -655,19 +655,16 @@ static void CB2_InitBattleInternal(void)
gBattle_WIN0V = 0x5051;
ScanlineEffect_Clear();
- i = 0;
- while (i < 80)
+ for (i = 0; i < 80; i++)
{
gScanlineEffectRegBuffers[0][i] = 0xF0;
gScanlineEffectRegBuffers[1][i] = 0xF0;
- i++;
}
- while (i < 160)
+ for (; i < 160; i++)
{
gScanlineEffectRegBuffers[0][i] = 0xFF10;
gScanlineEffectRegBuffers[1][i] = 0xFF10;
- i++;
}
ScanlineEffect_SetParams(sIntroScanlineParams16Bit);
@@ -794,8 +791,7 @@ static void SetPlayerBerryDataInBattleStruct(void)
static void SetAllPlayersBerryData(void)
{
- s32 i;
- s32 j;
+ s32 i, j;
if (!(gBattleTypeFlags & BATTLE_TYPE_LINK))
{
@@ -3560,7 +3556,7 @@ static void BattleIntroPrintWildMonAttacked(void)
static void BattleIntroPrintOpponentSendsOut(void)
{
- u32 position;
+ u8 position;
if (gBattleControllerExecFlags)
return;
@@ -3583,7 +3579,7 @@ static void BattleIntroPrintOpponentSendsOut(void)
static void BattleIntroOpponent2SendsOutMonAnimation(void)
{
- u32 position;
+ u8 position;
if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED))
position = B_POSITION_OPPONENT_RIGHT;
@@ -3612,19 +3608,24 @@ static void BattleIntroOpponent2SendsOutMonAnimation(void)
#ifdef NONMATCHING
static void BattleIntroOpponent1SendsOutMonAnimation(void)
{
- u32 position;
+ u8 position;
- if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED))
- position = B_POSITION_OPPONENT_LEFT;
- else if (gBattleTypeFlags & BATTLE_TYPE_x2000000)
+ if (gBattleTypeFlags & BATTLE_TYPE_RECORDED)
{
- if (gBattleTypeFlags & BATTLE_TYPE_x80000000)
- position = B_POSITION_OPPONENT_LEFT;
+ if (gBattleTypeFlags & BATTLE_TYPE_x2000000)
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_x80000000)
+ position = B_POSITION_OPPONENT_LEFT;
+ else
+ position = B_POSITION_PLAYER_LEFT;
+ }
else
- position = B_POSITION_PLAYER_LEFT;
+ position = B_POSITION_OPPONENT_LEFT;
}
else
+ {
position = B_POSITION_OPPONENT_LEFT;
+ }
if (gBattleControllerExecFlags)
return;
@@ -3752,7 +3753,7 @@ static void BattleIntroRecordMonsToDex(void)
}
}
-void sub_803B3AC(void) // unused
+static void sub_803B3AC(void) // unused
{
if (gBattleControllerExecFlags == 0)
gBattleMainFunc = BattleIntroPrintPlayerSendsOut;
@@ -3785,7 +3786,7 @@ static void BattleIntroPrintPlayerSendsOut(void)
static void BattleIntroPlayer2SendsOutMonAnimation(void)
{
- u32 position;
+ u8 position;
if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED))
position = B_POSITION_PLAYER_RIGHT;
@@ -3817,7 +3818,7 @@ static void BattleIntroPlayer2SendsOutMonAnimation(void)
static void BattleIntroPlayer1SendsOutMonAnimation(void)
{
- u32 position;
+ u8 position;
if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED))
position = B_POSITION_PLAYER_LEFT;
@@ -3855,7 +3856,7 @@ static void BattleIntroPlayer1SendsOutMonAnimation(void)
gBattleMainFunc = TryDoEventsBeforeFirstTurn;
}
-void sub_803B598(void) // unused
+static void sub_803B598(void) // unused
{
if (gBattleControllerExecFlags == 0)
{
@@ -3878,8 +3879,7 @@ void sub_803B598(void) // unused
static void TryDoEventsBeforeFirstTurn(void)
{
- s32 i;
- s32 j;
+ s32 i, j;
u8 effect = 0;
if (gBattleControllerExecFlags)
@@ -5103,15 +5103,15 @@ static void HandleEndTurn_RanFromBattle(void)
{
switch (gProtectStructs[gBattlerAttacker].fleeFlag)
{
- default:
- gBattlescriptCurrInstr = BattleScript_GotAwaySafely;
- break;
case 1:
gBattlescriptCurrInstr = BattleScript_SmokeBallEscape;
break;
case 2:
gBattlescriptCurrInstr = BattleScript_RanAwayUsingMonAbility;
break;
+ default:
+ gBattlescriptCurrInstr = BattleScript_GotAwaySafely;
+ break;
}
}
@@ -5195,10 +5195,7 @@ static void FreeResetData_ReturnToOvOrDoEvolutions(void)
gBattleMainFunc = ReturnFromBattleToOverworld;
return;
}
- else
- {
- gBattleMainFunc = TryEvolvePokemon;
- }
+ gBattleMainFunc = TryEvolvePokemon;
}
FreeAllWindowBuffers();
@@ -5534,7 +5531,9 @@ static void HandleAction_UseItem(void)
gBattlerAttacker = gBattlerTarget = gBattlerByTurnOrder[gCurrentTurnActionNumber];
gBattle_BG0_X = 0;
gBattle_BG0_Y = 0;
+
ClearFuryCutterDestinyBondGrudge(gBattlerAttacker);
+
gLastUsedItem = gBattleBufferB[gBattlerAttacker][1] | (gBattleBufferB[gBattlerAttacker][2] << 8);
if (gLastUsedItem <= LAST_BALL) // is ball
@@ -5560,18 +5559,18 @@ static void HandleAction_UseItem(void)
break;
case AI_ITEM_CURE_CONDITION:
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
- if (*(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) & 1)
+ if (*(gBattleStruct->AI_itemFlags + (gBattlerAttacker >> 1)) & 1)
{
- if (*(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) & 0x3E)
+ if (*(gBattleStruct->AI_itemFlags + (gBattlerAttacker >> 1)) & 0x3E)
gBattleCommunication[MULTISTRING_CHOOSER] = 5;
}
else
{
- while (!(*(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) & 1))
+ do
{
- *(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) >>= 1;
+ *(gBattleStruct->AI_itemFlags + (gBattlerAttacker >> 1)) >>= 1;
gBattleCommunication[MULTISTRING_CHOOSER]++;
- }
+ } while (!(*(gBattleStruct->AI_itemFlags + (gBattlerAttacker >> 1)) & 1));
}
break;
case AI_ITEM_X_STAT:
@@ -5587,7 +5586,7 @@ static void HandleAction_UseItem(void)
while (!((*(gBattleStruct->AI_itemFlags + (gBattlerAttacker >> 1))) & 1))
{
- *(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) >>= 1;
+ *(gBattleStruct->AI_itemFlags + (gBattlerAttacker >> 1)) >>= 1;
gBattleTextBuff1[2]++;
}
@@ -5603,7 +5602,7 @@ static void HandleAction_UseItem(void)
break;
}
- gBattlescriptCurrInstr = gBattlescriptsForUsingItem[*(gBattleStruct->AI_itemType + gBattlerAttacker / 2)];
+ gBattlescriptCurrInstr = gBattlescriptsForUsingItem[*(gBattleStruct->AI_itemType + (gBattlerAttacker >> 1))];
}
gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT;
}
diff --git a/src/event_object_movement.c b/src/event_object_movement.c
index 72de880c8..68f873446 100644
--- a/src/event_object_movement.c
+++ b/src/event_object_movement.c
@@ -8835,20 +8835,18 @@ u8 (*const gMovementActionFuncs_FlyDown[])(struct ObjectEvent *, struct Sprite *
u8 MovementAction_StoreAndLockAnim_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
- u32 one;
- bool32 ableToStore = FALSE;
+ bool8 ableToStore = FALSE;
if (gLockedAnimObjectEvents == NULL)
{
gLockedAnimObjectEvents = AllocZeroed(sizeof(struct LockedAnimObjectEvents));
gLockedAnimObjectEvents->objectEventIds[0] = objectEvent->localId;
- // needed to match
- gLockedAnimObjectEvents->count = (one = 1);
- ableToStore = one;
+ gLockedAnimObjectEvents->count = 1;
+ ableToStore = TRUE;
}
else
{
u8 i, firstFreeSlot;
- bool32 found;
+ bool8 found;
for (firstFreeSlot = 16, found = FALSE, i = 0; i < 16; i++)
{
if (firstFreeSlot == 16 && gLockedAnimObjectEvents->objectEventIds[i] == 0)
@@ -8881,7 +8879,7 @@ u8 MovementAction_StoreAndLockAnim_Step0(struct ObjectEvent *objectEvent, struct
u8 MovementAction_FreeAndUnlockAnim_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
- bool32 ableToStore;
+ bool8 ableToStore;
u8 index;
sprite->data[2] = 1;
diff --git a/src/faraway_island.c b/src/faraway_island.c
index e3d8444c9..6bfa066c2 100755
--- a/src/faraway_island.c
+++ b/src/faraway_island.c
@@ -181,40 +181,36 @@ u32 GetMewMoveDirection(void)
{
if (ShouldMewMoveEast(mew, 1))
return GetRandomMewDirectionCandidate(2);
- else if (ShouldMewMoveWest(mew, 1))
+ if (ShouldMewMoveWest(mew, 1))
return GetRandomMewDirectionCandidate(2);
- else
- return DIR_NORTH;
+ return DIR_NORTH;
}
if (ShouldMewMoveSouth(mew, 0))
{
if (ShouldMewMoveEast(mew, 1))
return GetRandomMewDirectionCandidate(2);
- else if (ShouldMewMoveWest(mew, 1))
+ if (ShouldMewMoveWest(mew, 1))
return GetRandomMewDirectionCandidate(2);
- else
- return DIR_SOUTH;
+ return DIR_SOUTH;
}
if (ShouldMewMoveEast(mew, 0))
{
if (ShouldMewMoveNorth(mew, 1))
return GetRandomMewDirectionCandidate(2);
- else if (ShouldMewMoveSouth(mew, 1))
+ if (ShouldMewMoveSouth(mew, 1))
return GetRandomMewDirectionCandidate(2);
- else
- return DIR_EAST;
+ return DIR_EAST;
}
if (ShouldMewMoveWest(mew, 0))
{
if (ShouldMewMoveNorth(mew, 1))
return GetRandomMewDirectionCandidate(2);
- else if (ShouldMewMoveSouth(mew, 1))
+ if (ShouldMewMoveSouth(mew, 1))
return GetRandomMewDirectionCandidate(2);
- else
- return DIR_WEST;
+ return DIR_WEST;
}
// If this point is reached, Mew cannot move without getting closer to the player
@@ -315,8 +311,7 @@ static u8 GetValidMewMoveDirection(u8 ignoredDir)
if (count > 1)
return sMewDirectionCandidates[VarGet(VAR_FARAWAY_ISLAND_STEP_COUNTER) % count];
- else
- return sMewDirectionCandidates[0];
+ return sMewDirectionCandidates[0];
}
void UpdateFarawayIslandStepCounter(void)
diff --git a/src/item.c b/src/item.c
index 5a77d363e..290e7177c 100644
--- a/src/item.c
+++ b/src/item.c
@@ -181,222 +181,67 @@ bool8 HasAtLeastOneBerry(void)
return FALSE;
}
-#ifdef NONMATCHING
-// Refuses to match.
bool8 CheckBagHasSpace(u16 itemId, u16 count)
{
- u8 i;
+ u8 i, pocket;
+ u16 slotCapacity, ownedCount;
if (ItemId_GetPocket(itemId) == POCKET_NONE)
return FALSE;
- if (InBattlePyramid() || FlagGet(FLAG_STORING_ITEMS_IN_PYRAMID_BAG) == TRUE)
+ if (InBattlePyramid() || (FlagGet(FLAG_STORING_ITEMS_IN_PYRAMID_BAG) == TRUE))
{
return CheckPyramidBagHasSpace(itemId, count);
}
- else
- {
- u8 pocket;
- u16 slotCapacity;
- u16 ownedCount;
- pocket = ItemId_GetPocket(itemId) - 1;
- if (pocket != BERRIES_POCKET)
- slotCapacity = MAX_BAG_ITEM_CAPACITY;
- else
- slotCapacity = MAX_BERRY_CAPACITY;
+ pocket = ItemId_GetPocket(itemId) - 1;
+ if (pocket != BERRIES_POCKET)
+ slotCapacity = MAX_BAG_ITEM_CAPACITY;
+ else
+ slotCapacity = MAX_BERRY_CAPACITY;
- // Check space in any existing item slots that already contain this item
- for (i = 0; i < gBagPockets[pocket].capacity; i++)
+ // Check space in any existing item slots that already contain this item
+ for (i = 0; i < gBagPockets[pocket].capacity; i++)
+ {
+ if (gBagPockets[pocket].itemSlots[i].itemId == itemId)
{
- if (gBagPockets[pocket].itemSlots[i].itemId == itemId)
- {
- ownedCount = GetBagItemQuantity(&gBagPockets[pocket].itemSlots[i].quantity);
- if (ownedCount + count <= slotCapacity)
- return TRUE;
- if (pocket == TMHM_POCKET || pocket == BERRIES_POCKET)
- return FALSE;
- count -= slotCapacity - ownedCount;
- if (count == 0)
- return TRUE;
- }
+ ownedCount = GetBagItemQuantity(&gBagPockets[pocket].itemSlots[i].quantity);
+ if (ownedCount + count <= slotCapacity)
+ return TRUE;
+ if (pocket == TMHM_POCKET || pocket == BERRIES_POCKET)
+ return FALSE;
+ count -= (slotCapacity - ownedCount);
+ if (count == 0)
+ break; //Should just be "return TRUE", since setting count to 0 means all the remaining checks until return will be false anyway, but that doesn't match
}
+ }
- // Check space in empty item slots
- if (count > 0)
+ // Check space in empty item slots
+ if (count > 0) //if (count !=0) also works here; both match
+ {
+ for (i = 0; i < gBagPockets[pocket].capacity; i++)
{
- for (i = 0; i < gBagPockets[pocket].capacity; i++)
+ if (gBagPockets[pocket].itemSlots[i].itemId == 0)
{
- if (gBagPockets[pocket].itemSlots[i].itemId == 0)
+ if (count > slotCapacity)
{
- if (count <= slotCapacity)
- return TRUE;
if (pocket == TMHM_POCKET || pocket == BERRIES_POCKET)
return FALSE;
count -= slotCapacity;
}
+ else
+ {
+ count = 0; //Should just be "return TRUE", since setting count to 0 means all the remaining checks until return will be false anyway, but that doesn't match
+ break;
+ }
}
- if (count > 0)
- return FALSE; // No more item slots. The bag is full
}
-
- return TRUE;
+ if (count > 0) //if (count !=0) also works here; both match
+ return FALSE; // No more item slots. The bag is full
}
+
+ return TRUE;
}
-#else
-NAKED
-bool8 CheckBagHasSpace(u16 itemId, u16 count)
-{
- 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, 0x4\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- mov r8, r0\n\
- lsls r1, 16\n\
- lsrs r5, r1, 16\n\
- bl ItemId_GetPocket\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- beq _080D6906\n\
- bl InBattlePyramid\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- bne _080D6838\n\
- ldr r0, =0x00004004\n\
- bl FlagGet\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, 0x1\n\
- bne _080D684C\n\
-_080D6838:\n\
- mov r0, r8\n\
- adds r1, r5, 0\n\
- bl CheckPyramidBagHasSpace\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- b _080D6916\n\
- .pool\n\
-_080D684C:\n\
- mov r0, r8\n\
- bl ItemId_GetPocket\n\
- subs r0, 0x1\n\
- lsls r0, 24\n\
- lsrs r2, r0, 24\n\
- ldr r7, =0x000003e7\n\
- cmp r2, 0x3\n\
- beq _080D6860\n\
- movs r7, 0x63\n\
-_080D6860:\n\
- movs r6, 0\n\
- ldr r1, =gBagPockets\n\
- lsls r4, r2, 3\n\
- adds r0, r4, r1\n\
- mov r9, r4\n\
- ldrb r0, [r0, 0x4]\n\
- cmp r6, r0\n\
- bcs _080D68BC\n\
- subs r0, r2, 0x2\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r10, r0\n\
-_080D6878:\n\
- adds r0, r4, r1\n\
- ldr r1, [r0]\n\
- lsls r0, r6, 2\n\
- adds r1, r0, r1\n\
- ldrh r0, [r1]\n\
- cmp r0, r8\n\
- bne _080D68AC\n\
- adds r0, r1, 0x2\n\
- str r2, [sp]\n\
- bl GetBagItemQuantity\n\
- lsls r0, 16\n\
- lsrs r1, r0, 16\n\
- adds r0, r1, r5\n\
- ldr r2, [sp]\n\
- cmp r0, r7\n\
- ble _080D6914\n\
- mov r0, r10\n\
- cmp r0, 0x1\n\
- bls _080D6906\n\
- subs r0, r7, r1\n\
- subs r0, r5, r0\n\
- lsls r0, 16\n\
- lsrs r5, r0, 16\n\
- cmp r5, 0\n\
- beq _080D6914\n\
-_080D68AC:\n\
- adds r0, r6, 0x1\n\
- lsls r0, 24\n\
- lsrs r6, r0, 24\n\
- ldr r1, =gBagPockets\n\
- adds r0, r4, r1\n\
- ldrb r0, [r0, 0x4]\n\
- cmp r6, r0\n\
- bcc _080D6878\n\
-_080D68BC:\n\
- cmp r5, 0\n\
- beq _080D6914\n\
- movs r6, 0\n\
- ldr r3, =gBagPockets\n\
- mov r1, r9\n\
- adds r0, r1, r3\n\
- ldrb r0, [r0, 0x4]\n\
- cmp r6, r0\n\
- bcs _080D6902\n\
- adds r4, r3, 0\n\
- subs r0, r2, 0x2\n\
- lsls r0, 24\n\
- lsrs r2, r0, 24\n\
-_080D68D6:\n\
- adds r0, r1, r4\n\
- ldr r1, [r0]\n\
- lsls r0, r6, 2\n\
- adds r0, r1\n\
- ldrh r0, [r0]\n\
- cmp r0, 0\n\
- bne _080D68F2\n\
- cmp r5, r7\n\
- bls _080D6914\n\
- cmp r2, 0x1\n\
- bls _080D6906\n\
- subs r0, r5, r7\n\
- lsls r0, 16\n\
- lsrs r5, r0, 16\n\
-_080D68F2:\n\
- adds r0, r6, 0x1\n\
- lsls r0, 24\n\
- lsrs r6, r0, 24\n\
- mov r1, r9\n\
- adds r0, r1, r3\n\
- ldrb r0, [r0, 0x4]\n\
- cmp r6, r0\n\
- bcc _080D68D6\n\
-_080D6902:\n\
- cmp r5, 0\n\
- beq _080D6914\n\
-_080D6906:\n\
- movs r0, 0\n\
- b _080D6916\n\
- .pool\n\
-_080D6914:\n\
- movs r0, 0x1\n\
-_080D6916:\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");
-}
-#endif // NONMATCHING
bool8 AddBagItem(u16 itemId, u16 count)
{
diff --git a/src/m4a_1.s b/src/m4a_1.s
index eace09b05..290404ad0 100644
--- a/src/m4a_1.s
+++ b/src/m4a_1.s
@@ -1392,10 +1392,10 @@ _081DD9F6:
bl ChnVolSetAsm
cmp r6, 0
beq _081DDA14
- ldrb r0, [r4, o_CgbChannel_mo]
+ ldrb r0, [r4, #o_CgbChannel_mo]
movs r1, 0x1
orrs r0, r1
- strb r0, [r4, o_CgbChannel_mo]
+ strb r0, [r4, #o_CgbChannel_mo]
_081DDA14:
ldrb r3, [r5, #o_MusicPlayerTrack_flags]
movs r0, 0xC
@@ -1416,11 +1416,11 @@ _081DDA28:
ldrb r2, [r5, #o_MusicPlayerTrack_pitM]
adds r0, r6, 0
bl call_r3
- str r0, [r4, o_CgbChannel_fr]
- ldrb r0, [r4, o_CgbChannel_mo]
+ str r0, [r4, #o_CgbChannel_fr]
+ ldrb r0, [r4, #o_CgbChannel_mo]
movs r1, 0x2
orrs r0, r1
- strb r0, [r4, o_CgbChannel_mo]
+ strb r0, [r4, #o_CgbChannel_mo]
b _081DDA52
_081DDA46:
adds r1, r2, 0
diff --git a/src/m4a_tables.c b/src/m4a_tables.c
index 9a4ea32e6..dfd285b1f 100644
--- a/src/m4a_tables.c
+++ b/src/m4a_tables.c
@@ -83,7 +83,7 @@ const u8 gScaleTable[] =
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B,
};
-const u32 gFreqTable[] =
+const u32 gFreqTable[12] =
{
2147483648u,
2275179671u,
@@ -99,7 +99,7 @@ const u32 gFreqTable[] =
4053909305u,
};
-const u16 gPcmSamplesPerVBlankTable[] =
+const u16 gPcmSamplesPerVBlankTable[12] =
{
96,
132,
@@ -130,7 +130,7 @@ const u8 gCgbScaleTable[] =
0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB,
};
-const s16 gCgbFreqTable[] =
+const s16 gCgbFreqTable[12] =
{
-2004,
-1891,
diff --git a/src/pokemon.c b/src/pokemon.c
index 188624d6a..2440f183e 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -5746,25 +5746,29 @@ u8 GetTrainerEncounterMusicId(u16 trainerOpponentId)
u16 ModifyStatByNature(u8 nature, u16 n, u8 statIndex)
{
+ u16 retVal;
// Dont modify HP, Accuracy, or Evasion by nature
if (statIndex <= STAT_HP || statIndex > NUM_NATURE_STATS)
{
- // Should just be "return n", but it wouldn't match without this.
- u16 retVal = n;
- retVal++;
- retVal--;
- return retVal;
+ return n;
}
switch (gNatureStatTable[nature][statIndex - 1])
{
case 1:
- return (u16)(n * 110) / 100; // NOTE: will overflow for n > 595 because the intermediate value is cast to u16 before the division. Fix by removing (u16) cast
+ retVal = n * 110;
+ retVal /= 100;
+ break;
case -1:
- return (u16)(n * 90) / 100; // NOTE: will overflow for n > 728, see above
+ retVal = n * 90;
+ retVal /= 100;
+ break;
+ default:
+ retVal = n;
+ break;
}
- return n;
+ return retVal;
}
#define IS_LEAGUE_BATTLE \