Merge branch 'master' into doc-blender

This commit is contained in:
GriffinR 2020-08-28 16:07:35 -04:00 committed by GitHub
commit e9b734c1ef
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
17 changed files with 323 additions and 538 deletions

View File

@ -230,6 +230,7 @@
#define STATUS_PRIMARY_POKERUS 6 #define STATUS_PRIMARY_POKERUS 6
#define STATUS_PRIMARY_FAINTED 7 #define STATUS_PRIMARY_FAINTED 7
#define MAX_PER_STAT_EVS 255
#define MAX_TOTAL_EVS 510 #define MAX_TOTAL_EVS 510
#define EV_ITEM_RAISE_LIMIT 100 #define EV_ITEM_RAISE_LIMIT 100

View File

@ -8,6 +8,12 @@
#define MENU_NOTHING_CHOSEN -2 #define MENU_NOTHING_CHOSEN -2
#define MENU_B_PRESSED -1 #define MENU_B_PRESSED -1
#define MENU_CURSOR_DELTA_NONE 0
#define MENU_CURSOR_DELTA_UP -1
#define MENU_CURSOR_DELTA_DOWN 1
#define MENU_CURSOR_DELTA_LEFT -1
#define MENU_CURSOR_DELTA_RIGHT 1
enum enum
{ {
SAVE_MENU_NAME, SAVE_MENU_NAME,
@ -77,7 +83,7 @@ void AddTextPrinterForMessage(bool8 allowSkippingDelayWithButtonPress);
void AddItemMenuActionTextPrinters(u8 windowId, u8 fontId, u8 left, u8 top, u8 letterSpacing, u8 lineHeight, u8 itemCount, const struct MenuAction *strs, const u8 *a8); void AddItemMenuActionTextPrinters(u8 windowId, u8 fontId, u8 left, u8 top, u8 letterSpacing, u8 lineHeight, u8 itemCount, const struct MenuAction *strs, const u8 *a8);
void sub_8198DBC(u8 windowId, u8 fontId, u8 left, u8 top, u8 a4, u8 itemCount, u8 itemCount2, const struct MenuAction *strs, const u8 *a8); void sub_8198DBC(u8 windowId, u8 fontId, u8 left, u8 top, u8 a4, u8 itemCount, u8 itemCount2, const struct MenuAction *strs, const u8 *a8);
u8 sub_8199944(u8 windowId, u8 optionWidth, u8 columns, u8 rows, u8 initialCursorPos); u8 sub_8199944(u8 windowId, u8 optionWidth, u8 columns, u8 rows, u8 initialCursorPos);
u8 sub_8199134(s8, s8); u8 ChangeListMenuCursorPosition(s8 deltaX, s8 deltaY);
u8 GetStartMenuWindowId(void); u8 GetStartMenuWindowId(void);
void ListMenuLoadStdPalAt(u8, u8); void ListMenuLoadStdPalAt(u8, u8);
u8 Menu_MoveCursor(s8 cursorDelta); u8 Menu_MoveCursor(s8 cursorDelta);

View File

@ -1014,15 +1014,12 @@ void BattleLoadSubstituteOrMonSpriteGfx(u8 battlerId, bool8 loadMonSprite)
palOffset = (battlerId * 16) + 0x100; palOffset = (battlerId * 16) + 0x100;
LoadCompressedPalette(gSubstituteDollPal, palOffset, 32); LoadCompressedPalette(gSubstituteDollPal, palOffset, 32);
} }
else else if (!IsContest())
{ {
if (!IsContest()) if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)
{ BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId);
if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) else
BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId); BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battlerId]], battlerId);
else
BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battlerId]], battlerId);
}
} }
} }

View File

@ -4851,40 +4851,38 @@ static void SetActionsAndBattlersTurnOrder(void)
gBattleStruct->focusPunchBattlerId = 0; gBattleStruct->focusPunchBattlerId = 0;
return; return;
} }
else for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++)
{ {
for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++) if (gChosenActionByBattler[gActiveBattler] == B_ACTION_USE_ITEM || gChosenActionByBattler[gActiveBattler] == B_ACTION_SWITCH)
{ {
if (gChosenActionByBattler[gActiveBattler] == B_ACTION_USE_ITEM || gChosenActionByBattler[gActiveBattler] == B_ACTION_SWITCH) gActionsByTurnOrder[turnOrderId] = gChosenActionByBattler[gActiveBattler];
{ gBattlerByTurnOrder[turnOrderId] = gActiveBattler;
gActionsByTurnOrder[turnOrderId] = gChosenActionByBattler[gActiveBattler]; turnOrderId++;
gBattlerByTurnOrder[turnOrderId] = gActiveBattler;
turnOrderId++;
}
} }
for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++) }
for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++)
{
if (gChosenActionByBattler[gActiveBattler] != B_ACTION_USE_ITEM && gChosenActionByBattler[gActiveBattler] != B_ACTION_SWITCH)
{ {
if (gChosenActionByBattler[gActiveBattler] != B_ACTION_USE_ITEM && gChosenActionByBattler[gActiveBattler] != B_ACTION_SWITCH) gActionsByTurnOrder[turnOrderId] = gChosenActionByBattler[gActiveBattler];
{ gBattlerByTurnOrder[turnOrderId] = gActiveBattler;
gActionsByTurnOrder[turnOrderId] = gChosenActionByBattler[gActiveBattler]; turnOrderId++;
gBattlerByTurnOrder[turnOrderId] = gActiveBattler;
turnOrderId++;
}
} }
for (i = 0; i < gBattlersCount - 1; i++) }
for (i = 0; i < gBattlersCount - 1; i++)
{
for (j = i + 1; j < gBattlersCount; j++)
{ {
for (j = i + 1; j < gBattlersCount; j++) u8 battler1 = gBattlerByTurnOrder[i];
u8 battler2 = gBattlerByTurnOrder[j];
if (gActionsByTurnOrder[i] != B_ACTION_USE_ITEM
&& gActionsByTurnOrder[j] != B_ACTION_USE_ITEM
&& gActionsByTurnOrder[i] != B_ACTION_SWITCH
&& gActionsByTurnOrder[j] != B_ACTION_SWITCH)
{ {
u8 battler1 = gBattlerByTurnOrder[i]; if (GetWhoStrikesFirst(battler1, battler2, FALSE))
u8 battler2 = gBattlerByTurnOrder[j]; SwapTurnOrder(i, j);
if (gActionsByTurnOrder[i] != B_ACTION_USE_ITEM
&& gActionsByTurnOrder[j] != B_ACTION_USE_ITEM
&& gActionsByTurnOrder[i] != B_ACTION_SWITCH
&& gActionsByTurnOrder[j] != B_ACTION_SWITCH)
{
if (GetWhoStrikesFirst(battler1, battler2, FALSE))
SwapTurnOrder(i, j);
}
} }
} }
} }
@ -4962,12 +4960,8 @@ static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void)
} }
TryClearRageStatuses(); TryClearRageStatuses();
gCurrentTurnActionNumber = 0; gCurrentTurnActionNumber = 0; //See comment underneath
{ gCurrentActionFuncId = gActionsByTurnOrder[gCurrentTurnActionNumber]; //Should be gActionsByTurnOrder[(gCurrentTurnActionNumber = 0)], but that doesn't match
// something stupid needed to match
u8 zero;
gCurrentActionFuncId = gActionsByTurnOrder[(zero = 0)];
}
gDynamicBasePower = 0; gDynamicBasePower = 0;
gBattleStruct->dynamicMoveType = 0; gBattleStruct->dynamicMoveType = 0;
gBattleMainFunc = RunTurnActionsFunctions; gBattleMainFunc = RunTurnActionsFunctions;
@ -4990,13 +4984,10 @@ static void RunTurnActionsFunctions(void)
gHitMarker &= ~(HITMARKER_x100000); gHitMarker &= ~(HITMARKER_x100000);
gBattleMainFunc = sEndTurnFuncsTable[gBattleOutcome & 0x7F]; gBattleMainFunc = sEndTurnFuncsTable[gBattleOutcome & 0x7F];
} }
else else if (gBattleStruct->savedTurnActionNumber != gCurrentTurnActionNumber) // action turn has been done, clear hitmarker bits for another battlerId
{ {
if (gBattleStruct->savedTurnActionNumber != gCurrentTurnActionNumber) // action turn has been done, clear hitmarker bits for another battlerId gHitMarker &= ~(HITMARKER_NO_ATTACKSTRING);
{ gHitMarker &= ~(HITMARKER_UNABLE_TO_USE_MOVE);
gHitMarker &= ~(HITMARKER_NO_ATTACKSTRING);
gHitMarker &= ~(HITMARKER_UNABLE_TO_USE_MOVE);
}
} }
} }

View File

@ -970,7 +970,7 @@ static void HandleMenuActionInput(u8 taskId)
if (id > 0 && IsValidMenuAction(id - 2)) if (id > 0 && IsValidMenuAction(id - 2))
{ {
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
sub_8199134(0, -1); ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_UP);
} }
} }
else if (gMain.newKeys & DPAD_DOWN) else if (gMain.newKeys & DPAD_DOWN)
@ -978,7 +978,7 @@ static void HandleMenuActionInput(u8 taskId)
if (id < gPyramidBagResources->menuActionsCount - 2 && IsValidMenuAction(id + 2)) if (id < gPyramidBagResources->menuActionsCount - 2 && IsValidMenuAction(id + 2))
{ {
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
sub_8199134(0, 1); ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_DOWN);
} }
} }
else if (gMain.newKeys & DPAD_LEFT || GetLRKeysPressed() == MENU_L_PRESSED) else if (gMain.newKeys & DPAD_LEFT || GetLRKeysPressed() == MENU_L_PRESSED)
@ -986,7 +986,7 @@ static void HandleMenuActionInput(u8 taskId)
if (id & 1 && IsValidMenuAction(id - 1)) if (id & 1 && IsValidMenuAction(id - 1))
{ {
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
sub_8199134(-1, 0); ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_LEFT, MENU_CURSOR_DELTA_NONE);
} }
} }
else if (gMain.newKeys & DPAD_RIGHT || GetLRKeysPressed() == MENU_R_PRESSED) else if (gMain.newKeys & DPAD_RIGHT || GetLRKeysPressed() == MENU_R_PRESSED)
@ -994,7 +994,7 @@ static void HandleMenuActionInput(u8 taskId)
if (!(id & 1) && IsValidMenuAction(id + 1)) if (!(id & 1) && IsValidMenuAction(id + 1))
{ {
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
sub_8199134(1, 0); ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_RIGHT, MENU_CURSOR_DELTA_NONE);
} }
} }
else if (gMain.newKeys & A_BUTTON) else if (gMain.newKeys & A_BUTTON)

View File

@ -999,8 +999,6 @@ void ResetLinkContestBoolean(void)
static void SetupContestGpuRegs(void) static void SetupContestGpuRegs(void)
{ {
u16 savedIme;
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP);
SetGpuReg(REG_OFFSET_BLDCNT, 0); SetGpuReg(REG_OFFSET_BLDCNT, 0);
SetGpuReg(REG_OFFSET_BLDALPHA, 0); SetGpuReg(REG_OFFSET_BLDALPHA, 0);
@ -3410,8 +3408,7 @@ static void GetAllChosenMoves(void)
static void RankContestants(void) static void RankContestants(void)
{ {
s32 i; s32 i, j;
s32 j;
s16 arr[CONTESTANT_COUNT]; s16 arr[CONTESTANT_COUNT];
for (i = 0; i < CONTESTANT_COUNT; i++) for (i = 0; i < CONTESTANT_COUNT; i++)
@ -3486,8 +3483,7 @@ static bool8 ContestantCanUseTurn(u8 contestant)
{ {
if (eContestantStatus[contestant].numTurnsSkipped != 0 || eContestantStatus[contestant].noMoreTurns) if (eContestantStatus[contestant].numTurnsSkipped != 0 || eContestantStatus[contestant].noMoreTurns)
return FALSE; return FALSE;
else return TRUE;
return TRUE;
} }
static void SetContestantStatusesForNextRound(void) static void SetContestantStatusesForNextRound(void)
@ -3541,8 +3537,7 @@ bool8 Contest_IsMonsTurnDisabled(u8 contestant)
{ {
if (eContestantStatus[contestant].numTurnsSkipped != 0 || eContestantStatus[contestant].noMoreTurns) if (eContestantStatus[contestant].numTurnsSkipped != 0 || eContestantStatus[contestant].noMoreTurns)
return TRUE; return TRUE;
else return FALSE;
return FALSE;
} }
static void CalculateTotalPointsForContestant(u8 contestant) static void CalculateTotalPointsForContestant(u8 contestant)
@ -4485,17 +4480,14 @@ static void CalculateAppealMoveImpact(u8 contestant)
eContestantStatus[contestant].comboAppealBonus = eContestantStatus[contestant].baseAppeal * eContestantStatus[contestant].completedCombo; eContestantStatus[contestant].comboAppealBonus = eContestantStatus[contestant].baseAppeal * eContestantStatus[contestant].completedCombo;
eContestantStatus[contestant].completedComboFlag = TRUE; // Redundant with completedCombo, used by AI eContestantStatus[contestant].completedComboFlag = TRUE; // Redundant with completedCombo, used by AI
} }
else if (gContestMoves[eContestantStatus[contestant].currMove].comboStarterId != 0)
{
eContestantStatus[contestant].hasJudgesAttention = TRUE;
eContestantStatus[contestant].usedComboMove = TRUE;
}
else else
{ {
if (gContestMoves[eContestantStatus[contestant].currMove].comboStarterId != 0) eContestantStatus[contestant].hasJudgesAttention = FALSE;
{
eContestantStatus[contestant].hasJudgesAttention = TRUE;
eContestantStatus[contestant].usedComboMove = TRUE;
}
else
{
eContestantStatus[contestant].hasJudgesAttention = FALSE;
}
} }
} }
if (eContestantStatus[contestant].repeatedMove) if (eContestantStatus[contestant].repeatedMove)

View File

@ -384,8 +384,6 @@ static void InitContestMonPixels(u16 species, u8 whichSprite)
} }
} }
#ifdef NONMATCHING
// functionally equivalent.
static void _InitContestMonPixels(u8 *spriteGfx, u16 *palette, u16 (*destPixels)[64][64]) static void _InitContestMonPixels(u8 *spriteGfx, u16 *palette, u16 (*destPixels)[64][64])
{ {
u16 tileY, tileX, pixelY, pixelX; u16 tileY, tileX, pixelY, pixelX;
@ -399,125 +397,21 @@ static void _InitContestMonPixels(u8 *spriteGfx, u16 *palette, u16 (*destPixels)
{ {
for (pixelX = 0; pixelX < 8; pixelX++) for (pixelX = 0; pixelX < 8; pixelX++)
{ {
int offset = 32 * (8 * tileY + tileX) + (pixelY * 4 + pixelX / 2); colorIndex = spriteGfx[((tileY * 8) + tileX) * 32 + (pixelY << 2) + (pixelX >> 1)];
colorIndex = spriteGfx[offset];
if (pixelX & 1) if (pixelX & 1)
colorIndex >>= 4; colorIndex >>= 4;
else else
colorIndex &= 0xF; colorIndex &= 0xF; // %=16 works here too. Both match
if (colorIndex == 0) // transparent pixel if (colorIndex == 0) // transparent pixel
(*destPixels)[8 * tileY + pixelY][tileX * 8 + pixelX] = 0x8000; (*destPixels)[tileY * 8 + pixelY][tileX * 8 + pixelX] = 0x8000;
else else
(*destPixels)[8 * tileY + pixelY][tileX * 8 + pixelX] = palette[colorIndex]; (*destPixels)[tileY * 8 + pixelY][tileX * 8 + pixelX] = palette[colorIndex];
} }
} }
} }
} }
} }
#else
NAKED
static void _InitContestMonPixels(u8 *spriteGfx, u16 *palette, u16 (*destPixels)[64][64])
{
asm_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\
_08130394:\n\
movs r3, 0\n\
adds r1, r0, 0x1\n\
str r1, [sp, 0x4]\n\
lsls r0, 3\n\
str r0, [sp, 0x8]\n\
_0813039E:\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\
_081303AE:\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\
_081303C2:\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 _081303D6\n\
lsrs r1, 4\n\
b _081303DA\n\
_081303D6:\n\
movs r0, 0xF\n\
ands r1, r0\n\
_081303DA:\n\
cmp r1, 0\n\
bne _081303EC\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 _081303F8\n\
_081303EC:\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\
_081303F8:\n\
strh r1, [r0]\n\
adds r0, r3, 0x1\n\
lsls r0, 16\n\
lsrs r3, r0, 16\n\
cmp r3, 0x7\n\
bls _081303C2\n\
lsls r0, r6, 16\n\
lsrs r1, r0, 16\n\
cmp r1, 0x7\n\
bls _081303AE\n\
mov r1, r8\n\
lsls r0, r1, 16\n\
lsrs r3, r0, 16\n\
cmp r3, 0x7\n\
bls _0813039E\n\
ldr r2, [sp, 0x4]\n\
lsls r0, r2, 16\n\
lsrs r0, 16\n\
cmp r0, 0x7\n\
bls _08130394\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");
}
#endif
#define VRAM_PICTURE_DATA(x, y) (((u16 *)(BG_SCREEN_ADDR(12)))[(y) * 32 + (x)]) #define VRAM_PICTURE_DATA(x, y) (((u16 *)(BG_SCREEN_ADDR(12)))[(y) * 32 + (x)])

View File

@ -8216,15 +8216,13 @@ bool8 FreezeObjectEvent(struct ObjectEvent *objectEvent)
{ {
return TRUE; return TRUE;
} }
else
{ objectEvent->frozen = 1;
objectEvent->frozen = 1; objectEvent->spriteAnimPausedBackup = gSprites[objectEvent->spriteId].animPaused;
objectEvent->spriteAnimPausedBackup = gSprites[objectEvent->spriteId].animPaused; objectEvent->spriteAffineAnimPausedBackup = gSprites[objectEvent->spriteId].affineAnimPaused;
objectEvent->spriteAffineAnimPausedBackup = gSprites[objectEvent->spriteId].affineAnimPaused; gSprites[objectEvent->spriteId].animPaused = 1;
gSprites[objectEvent->spriteId].animPaused = 1; gSprites[objectEvent->spriteId].affineAnimPaused = 1;
gSprites[objectEvent->spriteId].affineAnimPaused = 1; return FALSE;
return FALSE;
}
} }
void FreezeObjectEvents(void) void FreezeObjectEvents(void)
@ -8397,8 +8395,8 @@ bool8 sub_80976EC(struct Sprite *sprite)
if (sprite->data[5] > 15) if (sprite->data[5] > 15)
return TRUE; return TRUE;
else
return FALSE; return FALSE;
} }
static const s8 sFigure8XOffsets[FIGURE_8_LENGTH] = { static const s8 sFigure8XOffsets[FIGURE_8_LENGTH] = {
@ -8478,15 +8476,15 @@ static bool8 AnimateSpriteInFigure8(struct Sprite *sprite)
return finished; return finished;
} }
static const s8 gUnknown_0850E802[] = { static const s8 gUnknown_0850E802[16] = {
-4, -6, -8, -10, -11, -12, -12, -12, -11, -10, -9, -8, -6, -4, 0, 0 -4, -6, -8, -10, -11, -12, -12, -12, -11, -10, -9, -8, -6, -4, 0, 0
}; };
static const s8 gUnknown_0850E812[] = { static const s8 gUnknown_0850E812[16] = {
0, -2, -3, -4, -5, -6, -6, -6, -5, -5, -4, -3, -2, 0, 0, 0 0, -2, -3, -4, -5, -6, -6, -6, -5, -5, -4, -3, -2, 0, 0, 0
}; };
static const s8 gUnknown_0850E822[] = { static const s8 gUnknown_0850E822[16] = {
-2, -4, -6, -8, -9, -10, -10, -10, -9, -8, -6, -5, -3, -2, 0, 0 -2, -4, -6, -8, -9, -10, -10, -10, -9, -8, -6, -5, -3, -2, 0, 0
}; };
@ -8509,23 +8507,11 @@ void sub_809783C(struct Sprite *sprite, u8 a2, u8 a3, u8 a4)
sprite->data[6] = 0; sprite->data[6] = 0;
} }
static const s16 gUnknown_0850E840[] = {
16, 16, 32,
};
static const u8 gUnknown_0850E846[] = {
0, 0, 1,
};
u8 sub_809785C(struct Sprite *sprite) u8 sub_809785C(struct Sprite *sprite)
{ {
s16 v5[3]; s16 v5[] = {16, 16, 32};
u8 v6[3]; u8 v6[] = {0, 0, 1};
u8 v2; u8 v2 = 0;
memcpy(v5, gUnknown_0850E840, 6); // TODO: get rid of memcpy
memcpy(v6, gUnknown_0850E846, 3);
v2 = 0;
if (sprite->data[4]) if (sprite->data[4])
Step1(sprite, sprite->data[3]); Step1(sprite, sprite->data[3]);
@ -8546,23 +8532,11 @@ u8 sub_809785C(struct Sprite *sprite)
return v2; return v2;
} }
static const s16 gUnknown_0850E84A[] = {
32, 32, 64,
};
static const u8 gUnknown_0850E850[] = {
1, 1, 2,
};
u8 sub_80978E4(struct Sprite *sprite) u8 sub_80978E4(struct Sprite *sprite)
{ {
s16 v5[3]; s16 v5[] = {32, 32, 64};
u8 v6[3]; u8 v6[] = {1, 1, 2};
u8 v2; u8 v2 = 0;
memcpy(v5, gUnknown_0850E84A, 6);
memcpy(v6, gUnknown_0850E850, 3);
v2 = 0;
if (sprite->data[4] && !(sprite->data[6] & 1)) if (sprite->data[4] && !(sprite->data[6] & 1))
Step1(sprite, sprite->data[3]); Step1(sprite, sprite->data[3]);
@ -8590,12 +8564,9 @@ static void SetMovementDelay(struct Sprite *sprite, s16 timer)
static bool8 WaitForMovementDelay(struct Sprite *sprite) static bool8 WaitForMovementDelay(struct Sprite *sprite)
{ {
sprite->data[3]--; if (--sprite->data[3] == 0)
if (sprite->data[3] == 0)
return TRUE; return TRUE;
else return FALSE;
return FALSE;
} }
void SetAndStartSpriteAnim(struct Sprite *sprite, u8 animNum, u8 animCmdIndex) void SetAndStartSpriteAnim(struct Sprite *sprite, u8 animNum, u8 animCmdIndex)
@ -8609,8 +8580,7 @@ bool8 SpriteAnimEnded(struct Sprite *sprite)
{ {
if (sprite->animEnded) if (sprite->animEnded)
return TRUE; return TRUE;
else return FALSE;
return FALSE;
} }
void UpdateObjectEventSpriteVisibility(struct Sprite *sprite, bool8 invisible) void UpdateObjectEventSpriteVisibility(struct Sprite *sprite, bool8 invisible)
@ -8789,14 +8759,14 @@ static void UpdateObjectEventSpritePosition(struct Sprite *sprite)
{ {
switch(sprite->tAnimNum) switch(sprite->tAnimNum)
{ {
case 0:
break;
case UNION_ROOM_SPAWN_IN: case UNION_ROOM_SPAWN_IN:
MoveUnionRoomObjectDown(sprite); MoveUnionRoomObjectDown(sprite);
break; break;
case UNION_ROOM_SPAWN_OUT: case UNION_ROOM_SPAWN_OUT:
MoveUnionRoomObjectUp(sprite); MoveUnionRoomObjectUp(sprite);
break; break;
case 0:
break;
default: default:
sprite->tAnimNum = 0; sprite->tAnimNum = 0;
break; break;
@ -8877,8 +8847,7 @@ u8 MovementAction_StoreAndLockAnim_Step0(struct ObjectEvent *objectEvent, struct
} }
else else
{ {
u8 i; u8 i, firstFreeSlot;
u8 firstFreeSlot;
bool32 found; bool32 found;
for (firstFreeSlot = 16, found = FALSE, i = 0; i < 16; i++) for (firstFreeSlot = 16, found = FALSE, i = 0; i < 16; i++)
{ {

View File

@ -227,9 +227,7 @@ bool8 SetUpFieldMove_Cut(void)
y = gPlayerFacingPosition.y + sHyperCutStruct[i].y; y = gPlayerFacingPosition.y + sHyperCutStruct[i].y;
tileCuttable = TRUE; tileCuttable = TRUE;
j = 0; for (j = 0; j < 2; ++j) {
do
{
if (sHyperCutStruct[i].unk2[j] == 0) if (sHyperCutStruct[i].unk2[j] == 0)
break; break;
if (cutTiles[(u8)(sHyperCutStruct[i].unk2[j] - 1)] == FALSE) if (cutTiles[(u8)(sHyperCutStruct[i].unk2[j] - 1)] == FALSE)
@ -237,7 +235,7 @@ bool8 SetUpFieldMove_Cut(void)
tileCuttable = FALSE; tileCuttable = FALSE;
break; break;
} }
} while (++j <= 1); }
if (tileCuttable == TRUE) if (tileCuttable == TRUE)
{ {
@ -253,11 +251,8 @@ bool8 SetUpFieldMove_Cut(void)
sHyperCutTiles[tileArrayId] = TRUE; sHyperCutTiles[tileArrayId] = TRUE;
ret = TRUE; ret = TRUE;
} }
else else if (MetatileBehavior_IsCuttableGrass(tileBehavior) == TRUE)
{ sHyperCutTiles[tileArrayId] = TRUE;
if (MetatileBehavior_IsCuttableGrass(tileBehavior) == TRUE)
sHyperCutTiles[tileArrayId] = TRUE;
}
} }
} }
} }

View File

@ -52,6 +52,13 @@
#include "battle_pike.h" #include "battle_pike.h"
#include "constants/rgb.h" #include "constants/rgb.h"
enum
{
SWITCH_POCKET_NONE,
SWITCH_POCKET_LEFT,
SWITCH_POCKET_RIGHT
};
void GoToBagMenu(u8 bagMenuType, u8 pocketId, void (*postExitMenuMainCallback2)()); void GoToBagMenu(u8 bagMenuType, u8 pocketId, void (*postExitMenuMainCallback2)());
void CB2_Bag(void); void CB2_Bag(void);
bool8 SetupBagMenu(void); bool8 SetupBagMenu(void);
@ -62,7 +69,7 @@ void AllocateBagItemListBuffers(void);
void LoadBagItemListBuffers(u8); void LoadBagItemListBuffers(u8);
void BagMenu_PrintPocketNames(const u8*, const u8*); void BagMenu_PrintPocketNames(const u8*, const u8*);
void BagMenu_CopyPocketNameToWindow(u32); void BagMenu_CopyPocketNameToWindow(u32);
void BagMenu_DrawPocketIndicatorSquare(u8, u8); static void DrawPocketIndicatorSquare(u8 x, bool8 isCurrentPocket);
void CreatePocketScrollArrowPair(void); void CreatePocketScrollArrowPair(void);
void CreatePocketSwitchArrowPair(void); void CreatePocketSwitchArrowPair(void);
void BagMenu_PrepareTMHMMoveWindow(void); void BagMenu_PrepareTMHMMoveWindow(void);
@ -80,16 +87,16 @@ u16 BagGetQuantityByPocketPosition(u8, u16);
void BagDestroyPocketSwitchArrowPair(void); void BagDestroyPocketSwitchArrowPair(void);
void TaskCloseBagMenu_2(u8); void TaskCloseBagMenu_2(u8);
u8 AddItemMessageWindow(u8); u8 AddItemMessageWindow(u8);
void bag_menu_RemoveBagItem_message_window(u8); void BagMenu_RemoveBagItemMessageindow(u8);
void set_callback3_to_bag(u8); void set_callback3_to_bag(u8);
void PrintItemDepositAmount(u8, s16); void PrintItemDepositAmount(u8, s16);
u8 BagMenu_AddWindow(u8); static u8 BagMenu_AddWindow(u8);
u8 GetSwitchBagPocketDirection(void); static u8 GetSwitchBagPocketDirection(void);
void SwitchBagPocket(u8, s16, u16); static void SwitchBagPocket(u8, s16, u16);
bool8 sub_81AC2C0(void); static bool8 CanSwapItems(void);
void BagMenu_SwapItems(u8); static void BagMenu_SwapItems(u8 taskId);
void sub_81AC10C(u8); static void sub_81AC10C(u8);
void sub_81AC3C0(u8); static void Task_HandleSwappingItemsInput(u8);
void sub_81AC498(u8); void sub_81AC498(u8);
void sub_81AC590(u8); void sub_81AC590(u8);
void PrintTMHMMoveData(u16); void PrintTMHMMoveData(u16);
@ -106,19 +113,18 @@ void BagMenu_YesNo(u8, u8, const struct YesNoFuncTable*);
void Task_ActuallyToss(u8); void Task_ActuallyToss(u8);
void ItemMenu_Cancel(u8); void ItemMenu_Cancel(u8);
void sub_81AD350(u8); void sub_81AD350(u8);
void BagMenu_PrintItemCantBeHeld(u8); static void BagMenu_PrintItemCantBeHeld(u8);
void DisplayCurrentMoneyWindow(void); static void DisplayCurrentMoneyWindow(void);
void DisplaySellItemPriceAndConfirm(u8); static void DisplaySellItemPriceAndConfirm(u8);
void sub_81AD730(u8); void sub_81AD730(u8);
void sub_81AD6E4(u8); void sub_81AD6E4(u8);
void bag_menu_remove_money_window(void); static void RemoveMoneyWindow(void);
void bag_menu_RemoveBagItem_message_window(u8); static void Task_SellHowManyDialogueHandleInput(u8);
void Task_BuyHowManyDialogueHandleInput(u8); static void BagMenu_Sell_UpdateItemListAndMoney(u8);
void sub_81AD8C8(u8); static void BagMenu_Sell_WaitForABPress(u8);
void sub_81AD9C0(u8); static void BagMenu_TryDepositItem(u8);
void sub_81ADB14(u8); static void Task_ChooseHowManyToDeposit(u8 taskId);
void sub_81ADA7C(u8); static void BagMenu_Deposit_WaitForABPress(u8);
void sub_81ADC0C(u8);
void CB2_ApprenticeExitBagMenu(void); void CB2_ApprenticeExitBagMenu(void);
void CB2_FavorLadyExitBagMenu(void); void CB2_FavorLadyExitBagMenu(void);
void CB2_QuizLadyExitBagMenu(void); void CB2_QuizLadyExitBagMenu(void);
@ -688,7 +694,7 @@ bool8 SetupBagMenu(void)
case 13: case 13:
BagMenu_PrintPocketNames(gPocketNamesStringsTable[gBagPositionStruct.pocket], 0); BagMenu_PrintPocketNames(gPocketNamesStringsTable[gBagPositionStruct.pocket], 0);
BagMenu_CopyPocketNameToWindow(0); BagMenu_CopyPocketNameToWindow(0);
BagMenu_DrawPocketIndicatorSquare(gBagPositionStruct.pocket, 1); DrawPocketIndicatorSquare(gBagPositionStruct.pocket, TRUE);
gMain.state++; gMain.state++;
break; break;
case 14: case 14:
@ -1111,7 +1117,7 @@ void BagMenu_InitListsMenu(u8 taskId)
s16* data = gTasks[taskId].data; s16* data = gTasks[taskId].data;
u16* scrollPos = &gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket]; u16* scrollPos = &gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket];
u16* cursorPos = &gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket]; u16* cursorPos = &gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket];
bag_menu_RemoveBagItem_message_window(4); BagMenu_RemoveBagItemMessageindow(4);
DestroyListMenuTask(data[0], scrollPos, cursorPos); DestroyListMenuTask(data[0], scrollPos, cursorPos);
UpdatePocketItemList(gBagPositionStruct.pocket); UpdatePocketItemList(gBagPositionStruct.pocket);
SetInitialScrollAndCursorPositions(gBagPositionStruct.pocket); SetInitialScrollAndCursorPositions(gBagPositionStruct.pocket);
@ -1154,16 +1160,16 @@ void Task_BagMenu_HandleInput(u8 taskId)
{ {
switch (GetSwitchBagPocketDirection()) switch (GetSwitchBagPocketDirection())
{ {
case 1: case SWITCH_POCKET_LEFT:
SwitchBagPocket(taskId, -1, 0); SwitchBagPocket(taskId, MENU_CURSOR_DELTA_LEFT, 0);
return; return;
case 2: case SWITCH_POCKET_RIGHT:
SwitchBagPocket(taskId, 1, 0); SwitchBagPocket(taskId, MENU_CURSOR_DELTA_RIGHT, 0);
return; return;
default: default:
if (gMain.newKeys & SELECT_BUTTON) if (gMain.newKeys & SELECT_BUTTON)
{ {
if (sub_81AC2C0() == 1) if (CanSwapItems() == TRUE)
{ {
ListMenuGetScrollAndRow(data[0], scrollPos, cursorPos); ListMenuGetScrollAndRow(data[0], scrollPos, cursorPos);
if ((*scrollPos + *cursorPos) != gBagMenu->numItemStacks[gBagPositionStruct.pocket] - 1) if ((*scrollPos + *cursorPos) != gBagMenu->numItemStacks[gBagPositionStruct.pocket] - 1)
@ -1217,26 +1223,26 @@ void set_callback3_to_bag(u8 taskId)
gTasks[taskId].func = Task_BagMenu_HandleInput; gTasks[taskId].func = Task_BagMenu_HandleInput;
} }
u8 GetSwitchBagPocketDirection(void) static u8 GetSwitchBagPocketDirection(void)
{ {
u8 LRKeys; u8 LRKeys;
if (gBagMenu->pocketSwitchDisabled) if (gBagMenu->pocketSwitchDisabled)
return 0; return SWITCH_POCKET_NONE;
LRKeys = GetLRKeysPressed(); LRKeys = GetLRKeysPressed();
if ((gMain.newKeys & DPAD_LEFT) || LRKeys == MENU_L_PRESSED) if ((gMain.newKeys & DPAD_LEFT) || LRKeys == MENU_L_PRESSED)
{ {
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
return 1; return SWITCH_POCKET_LEFT;
} }
if ((gMain.newKeys & DPAD_RIGHT) || LRKeys == MENU_R_PRESSED) if ((gMain.newKeys & DPAD_RIGHT) || LRKeys == MENU_R_PRESSED)
{ {
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
return 2; return SWITCH_POCKET_RIGHT;
} }
return 0; return SWITCH_POCKET_NONE;
} }
void ChangeBagPocketId(u8 *bagPocketId, s8 deltaBagPocketId) static void ChangeBagPocketId(u8 *bagPocketId, s8 deltaBagPocketId)
{ {
if (deltaBagPocketId == 1 && *bagPocketId == POCKETS_COUNT - 1) if (deltaBagPocketId == 1 && *bagPocketId == POCKETS_COUNT - 1)
*bagPocketId = 0; *bagPocketId = 0;
@ -1246,7 +1252,7 @@ void ChangeBagPocketId(u8 *bagPocketId, s8 deltaBagPocketId)
*bagPocketId += deltaBagPocketId; *bagPocketId += deltaBagPocketId;
} }
void SwitchBagPocket(u8 taskId, s16 deltaBagPocketId, u16 a3) static void SwitchBagPocket(u8 taskId, s16 deltaBagPocketId, u16 a3)
{ {
s16* data = gTasks[taskId].data; s16* data = gTasks[taskId].data;
u8 pocketId; u8 pocketId;
@ -1265,7 +1271,7 @@ void SwitchBagPocket(u8 taskId, s16 deltaBagPocketId, u16 a3)
} }
pocketId = gBagPositionStruct.pocket; pocketId = gBagPositionStruct.pocket;
ChangeBagPocketId(&pocketId, deltaBagPocketId); ChangeBagPocketId(&pocketId, deltaBagPocketId);
if (deltaBagPocketId == 1) if (deltaBagPocketId == MENU_CURSOR_DELTA_RIGHT)
{ {
BagMenu_PrintPocketNames(gPocketNamesStringsTable[gBagPositionStruct.pocket], gPocketNamesStringsTable[pocketId]); BagMenu_PrintPocketNames(gPocketNamesStringsTable[gBagPositionStruct.pocket], gPocketNamesStringsTable[pocketId]);
BagMenu_CopyPocketNameToWindow(0); BagMenu_CopyPocketNameToWindow(0);
@ -1275,8 +1281,8 @@ void SwitchBagPocket(u8 taskId, s16 deltaBagPocketId, u16 a3)
BagMenu_PrintPocketNames(gPocketNamesStringsTable[pocketId], gPocketNamesStringsTable[gBagPositionStruct.pocket]); BagMenu_PrintPocketNames(gPocketNamesStringsTable[pocketId], gPocketNamesStringsTable[gBagPositionStruct.pocket]);
BagMenu_CopyPocketNameToWindow(8); BagMenu_CopyPocketNameToWindow(8);
} }
BagMenu_DrawPocketIndicatorSquare(gBagPositionStruct.pocket, 0); DrawPocketIndicatorSquare(gBagPositionStruct.pocket, FALSE);
BagMenu_DrawPocketIndicatorSquare(pocketId, 1); DrawPocketIndicatorSquare(pocketId, TRUE);
FillBgTilemapBufferRect_Palette0(2, 11, 14, 2, 15, 16); FillBgTilemapBufferRect_Palette0(2, 11, 14, 2, 15, 16);
ScheduleBgCopyTilemapToVram(2); ScheduleBgCopyTilemapToVram(2);
SetBagVisualPocketId(pocketId, 1); SetBagVisualPocketId(pocketId, 1);
@ -1293,15 +1299,15 @@ void sub_81AC10C(u8 taskId)
{ {
switch (GetSwitchBagPocketDirection()) switch (GetSwitchBagPocketDirection())
{ {
case 1: case SWITCH_POCKET_LEFT:
ChangeBagPocketId(&gBagPositionStruct.pocket, data[11]); ChangeBagPocketId(&gBagPositionStruct.pocket, data[11]);
SwitchTaskToFollowupFunc(taskId); SwitchTaskToFollowupFunc(taskId);
SwitchBagPocket(taskId, -1, 1); SwitchBagPocket(taskId, MENU_CURSOR_DELTA_LEFT, 1);
return; return;
case 2: case SWITCH_POCKET_RIGHT:
ChangeBagPocketId(&gBagPositionStruct.pocket, data[11]); ChangeBagPocketId(&gBagPositionStruct.pocket, data[11]);
SwitchTaskToFollowupFunc(taskId); SwitchTaskToFollowupFunc(taskId);
SwitchBagPocket(taskId, 1, 1); SwitchBagPocket(taskId, MENU_CURSOR_DELTA_RIGHT, 1);
return; return;
} }
} }
@ -1338,16 +1344,16 @@ void sub_81AC23C(u8 a)
ScheduleBgCopyTilemapToVram(2); ScheduleBgCopyTilemapToVram(2);
} }
void BagMenu_DrawPocketIndicatorSquare(u8 x, u8 is_current_bag) static void DrawPocketIndicatorSquare(u8 x, bool8 isCurrentPocket)
{ {
if (is_current_bag == 0) if (!isCurrentPocket)
FillBgTilemapBufferRect_Palette0(2, 0x1017, x + 5, 3, 1, 1); FillBgTilemapBufferRect_Palette0(2, 0x1017, x + 5, 3, 1, 1);
else else
FillBgTilemapBufferRect_Palette0(2, 0x102B, x + 5, 3, 1, 1); FillBgTilemapBufferRect_Palette0(2, 0x102B, x + 5, 3, 1, 1);
ScheduleBgCopyTilemapToVram(2); ScheduleBgCopyTilemapToVram(2);
} }
bool8 sub_81AC2C0(void) static bool8 CanSwapItems(void)
{ {
if (gBagPositionStruct.location <= ITEMMENULOCATION_BATTLE) if (gBagPositionStruct.location <= ITEMMENULOCATION_BATTLE)
{ {
@ -1372,10 +1378,10 @@ void BagMenu_SwapItems(u8 taskId)
sub_80D4FEC(data[1]); sub_80D4FEC(data[1]);
BagDestroyPocketSwitchArrowPair(); BagDestroyPocketSwitchArrowPair();
BagMenu_PrintCursor_(data[0], 2); BagMenu_PrintCursor_(data[0], 2);
gTasks[taskId].func = sub_81AC3C0; gTasks[taskId].func = Task_HandleSwappingItemsInput;
} }
void sub_81AC3C0(u8 taskId) static void Task_HandleSwappingItemsInput(u8 taskId)
{ {
s16* data = gTasks[taskId].data; s16* data = gTasks[taskId].data;
int input; int input;
@ -1644,7 +1650,7 @@ void Task_HandleOutOfBattleItemMenuInput(u8 taskId)
if (cursorPos > 0 && sub_81ACDFC(cursorPos - 2)) if (cursorPos > 0 && sub_81ACDFC(cursorPos - 2))
{ {
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
sub_8199134(0, -1); ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_UP);
} }
} }
else if (gMain.newKeys & DPAD_DOWN) else if (gMain.newKeys & DPAD_DOWN)
@ -1652,7 +1658,7 @@ void Task_HandleOutOfBattleItemMenuInput(u8 taskId)
if (cursorPos < (gBagMenu->contextMenuNumItems - 2) && sub_81ACDFC(cursorPos + 2)) if (cursorPos < (gBagMenu->contextMenuNumItems - 2) && sub_81ACDFC(cursorPos + 2))
{ {
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
sub_8199134(0, 1); ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_DOWN);
} }
} }
else if ((gMain.newKeys & DPAD_LEFT) || GetLRKeysPressed() == MENU_L_PRESSED) else if ((gMain.newKeys & DPAD_LEFT) || GetLRKeysPressed() == MENU_L_PRESSED)
@ -1660,7 +1666,7 @@ void Task_HandleOutOfBattleItemMenuInput(u8 taskId)
if ((cursorPos & 1) && sub_81ACDFC(cursorPos - 1)) if ((cursorPos & 1) && sub_81ACDFC(cursorPos - 1))
{ {
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
sub_8199134(-1, 0); ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_LEFT, MENU_CURSOR_DELTA_NONE);
} }
} }
else if ((gMain.newKeys & DPAD_RIGHT) || GetLRKeysPressed() == MENU_R_PRESSED) else if ((gMain.newKeys & DPAD_RIGHT) || GetLRKeysPressed() == MENU_R_PRESSED)
@ -1668,7 +1674,7 @@ void Task_HandleOutOfBattleItemMenuInput(u8 taskId)
if (!(cursorPos & 1) && sub_81ACDFC(cursorPos + 1)) if (!(cursorPos & 1) && sub_81ACDFC(cursorPos + 1))
{ {
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
sub_8199134(1, 0); ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_RIGHT, MENU_CURSOR_DELTA_NONE);
} }
} }
else if (gMain.newKeys & A_BUTTON) else if (gMain.newKeys & A_BUTTON)
@ -1871,7 +1877,7 @@ void BagMenu_PrintThereIsNoPokemon(u8 taskId)
DisplayItemMessage(taskId, 1, gText_NoPokemon, sub_81AD350); DisplayItemMessage(taskId, 1, gText_NoPokemon, sub_81AD350);
} }
void BagMenu_PrintItemCantBeHeld(u8 taskId) static void BagMenu_PrintItemCantBeHeld(u8 taskId)
{ {
CopyItemName(gSpecialVar_ItemId, gStringVar1); CopyItemName(gSpecialVar_ItemId, gStringVar1);
StringExpandPlaceholders(gStringVar4, gText_Var1CantBeHeld); StringExpandPlaceholders(gStringVar4, gText_Var1CantBeHeld);
@ -2012,7 +2018,7 @@ void Task_ItemContext_Sell(u8 taskId)
} }
} }
void DisplaySellItemPriceAndConfirm(u8 taskId) static void DisplaySellItemPriceAndConfirm(u8 taskId)
{ {
s16* data = gTasks[taskId].data; s16* data = gTasks[taskId].data;
@ -2030,8 +2036,8 @@ void BagMenu_CancelSell(u8 taskId)
{ {
s16* data = gTasks[taskId].data; s16* data = gTasks[taskId].data;
bag_menu_remove_money_window(); RemoveMoneyWindow();
bag_menu_RemoveBagItem_message_window(4); BagMenu_RemoveBagItemMessageindow(4);
BagMenu_PrintCursor_(data[0], 0); BagMenu_PrintCursor_(data[0], 0);
set_callback3_to_bag(taskId); set_callback3_to_bag(taskId);
} }
@ -2043,10 +2049,10 @@ void sub_81AD730(u8 taskId)
PrintItemSoldAmount(windowId, 1, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * tItemCount); PrintItemSoldAmount(windowId, 1, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * tItemCount);
DisplayCurrentMoneyWindow(); DisplayCurrentMoneyWindow();
gTasks[taskId].func = Task_BuyHowManyDialogueHandleInput; gTasks[taskId].func = Task_SellHowManyDialogueHandleInput;
} }
void Task_BuyHowManyDialogueHandleInput(u8 taskId) static void Task_SellHowManyDialogueHandleInput(u8 taskId)
{ {
s16* data = gTasks[taskId].data; s16* data = gTasks[taskId].data;
@ -2064,9 +2070,9 @@ void Task_BuyHowManyDialogueHandleInput(u8 taskId)
{ {
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
BagMenu_PrintCursor_(data[0], 0); BagMenu_PrintCursor_(data[0], 0);
bag_menu_remove_money_window(); RemoveMoneyWindow();
BagMenu_RemoveWindow(8); BagMenu_RemoveWindow(8);
bag_menu_RemoveBagItem_message_window(4); BagMenu_RemoveBagItemMessageindow(4);
set_callback3_to_bag(taskId); set_callback3_to_bag(taskId);
} }
} }
@ -2078,10 +2084,10 @@ void BagMenu_ConfirmSell(u8 taskId)
CopyItemName(gSpecialVar_ItemId, gStringVar2); CopyItemName(gSpecialVar_ItemId, gStringVar2);
ConvertIntToDecimalStringN(gStringVar1, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * tItemCount, STR_CONV_MODE_LEFT_ALIGN, 6); ConvertIntToDecimalStringN(gStringVar1, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * tItemCount, STR_CONV_MODE_LEFT_ALIGN, 6);
StringExpandPlaceholders(gStringVar4, gText_TurnedOverVar1ForVar2); StringExpandPlaceholders(gStringVar4, gText_TurnedOverVar1ForVar2);
DisplayItemMessage(taskId, 1, gStringVar4, sub_81AD8C8); DisplayItemMessage(taskId, 1, gStringVar4, BagMenu_Sell_UpdateItemListAndMoney);
} }
void sub_81AD8C8(u8 taskId) static void BagMenu_Sell_UpdateItemListAndMoney(u8 taskId)
{ {
s16* data = gTasks[taskId].data; s16* data = gTasks[taskId].data;
u16* scrollPos = &gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket]; u16* scrollPos = &gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket];
@ -2097,15 +2103,15 @@ void sub_81AD8C8(u8 taskId)
data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos); data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos);
BagMenu_PrintCursor_(data[0], 2); BagMenu_PrintCursor_(data[0], 2);
PrintMoneyAmountInMoneyBox(gBagMenu->windowPointers[9], GetMoney(&gSaveBlock1Ptr->money), 0); PrintMoneyAmountInMoneyBox(gBagMenu->windowPointers[9], GetMoney(&gSaveBlock1Ptr->money), 0);
gTasks[taskId].func = sub_81AD9C0; gTasks[taskId].func = BagMenu_Sell_WaitForABPress;
} }
void sub_81AD9C0(u8 taskId) static void BagMenu_Sell_WaitForABPress(u8 taskId)
{ {
if (gMain.newKeys & (A_BUTTON | B_BUTTON)) if (gMain.newKeys & (A_BUTTON | B_BUTTON))
{ {
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
bag_menu_remove_money_window(); RemoveMoneyWindow();
BagMenu_InitListsMenu(taskId); BagMenu_InitListsMenu(taskId);
} }
} }
@ -2117,7 +2123,7 @@ void Task_ItemContext_Deposit(u8 taskId)
tItemCount = 1; tItemCount = 1;
if (data[2] == 1) if (data[2] == 1)
{ {
sub_81ADB14(taskId); BagMenu_TryDepositItem(taskId);
} }
else else
{ {
@ -2126,11 +2132,11 @@ void Task_ItemContext_Deposit(u8 taskId)
FillWindowPixelBuffer(1, PIXEL_FILL(0)); FillWindowPixelBuffer(1, PIXEL_FILL(0));
BagMenu_Print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0); BagMenu_Print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0);
sub_81ABC3C(7); sub_81ABC3C(7);
gTasks[taskId].func = sub_81ADA7C; gTasks[taskId].func = Task_ChooseHowManyToDeposit;
} }
} }
void sub_81ADA7C(u8 taskId) static void Task_ChooseHowManyToDeposit(u8 taskId)
{ {
s16* data = gTasks[taskId].data; s16* data = gTasks[taskId].data;
@ -2142,7 +2148,7 @@ void sub_81ADA7C(u8 taskId)
{ {
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
BagMenu_RemoveWindow(7); BagMenu_RemoveWindow(7);
sub_81ADB14(taskId); BagMenu_TryDepositItem(taskId);
} }
else if (gMain.newKeys & B_BUTTON) else if (gMain.newKeys & B_BUTTON)
{ {
@ -2154,7 +2160,7 @@ void sub_81ADA7C(u8 taskId)
} }
} }
void sub_81ADB14(u8 taskId) static void BagMenu_TryDepositItem(u8 taskId)
{ {
s16* data = gTasks[taskId].data; s16* data = gTasks[taskId].data;
@ -2162,7 +2168,7 @@ void sub_81ADB14(u8 taskId)
if (ItemId_GetImportance(gSpecialVar_ItemId)) if (ItemId_GetImportance(gSpecialVar_ItemId))
{ {
BagMenu_Print(1, 1, gText_CantStoreImportantItems, 3, 1, 0, 0, 0, 0); BagMenu_Print(1, 1, gText_CantStoreImportantItems, 3, 1, 0, 0, 0, 0);
gTasks[taskId].func = sub_81ADC0C; gTasks[taskId].func = BagMenu_Deposit_WaitForABPress;
} }
else if (AddPCItem(gSpecialVar_ItemId, tItemCount) == TRUE) else if (AddPCItem(gSpecialVar_ItemId, tItemCount) == TRUE)
{ {
@ -2175,11 +2181,11 @@ void sub_81ADB14(u8 taskId)
else else
{ {
BagMenu_Print(1, 1, gText_NoRoomForItems, 3, 1, 0, 0, 0, 0); BagMenu_Print(1, 1, gText_NoRoomForItems, 3, 1, 0, 0, 0, 0);
gTasks[taskId].func = sub_81ADC0C; gTasks[taskId].func = BagMenu_Deposit_WaitForABPress;
} }
} }
void sub_81ADC0C(u8 taskId) static void BagMenu_Deposit_WaitForABPress(u8 taskId)
{ {
s16* data = gTasks[taskId].data; s16* data = gTasks[taskId].data;
@ -2250,7 +2256,7 @@ void Task_WallyTutorialBagMenu(u8 taskId)
{ {
case 0x66: case 0x66:
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
SwitchBagPocket(taskId, 1, 0); SwitchBagPocket(taskId, MENU_CURSOR_DELTA_RIGHT, 0);
data[8]++; data[8]++;
break; break;
case 0xCC: case 0xCC:
@ -2416,7 +2422,7 @@ u8 AddItemMessageWindow(u8 which)
return *ptr; return *ptr;
} }
void bag_menu_RemoveBagItem_message_window(u8 which) void BagMenu_RemoveBagItemMessageindow(u8 which)
{ {
u8 *ptr = &gBagMenu->windowPointers[which]; u8 *ptr = &gBagMenu->windowPointers[which];
if (*ptr != 0xFF) if (*ptr != 0xFF)
@ -2435,14 +2441,14 @@ void BagMenu_YesNo(u8 a, u8 b, const struct YesNoFuncTable *funcTable)
CreateYesNoMenuWithCallbacks(a, &sContextMenuWindowTemplates[b], 1, 0, 2, 1, 14, funcTable); CreateYesNoMenuWithCallbacks(a, &sContextMenuWindowTemplates[b], 1, 0, 2, 1, 14, funcTable);
} }
void DisplayCurrentMoneyWindow(void) static void DisplayCurrentMoneyWindow(void)
{ {
u8 windowId = BagMenu_AddWindow(9); u8 windowId = BagMenu_AddWindow(9);
PrintMoneyAmountInMoneyBoxWithBorder(windowId, 1, 14, GetMoney(&gSaveBlock1Ptr->money)); PrintMoneyAmountInMoneyBoxWithBorder(windowId, 1, 14, GetMoney(&gSaveBlock1Ptr->money));
AddMoneyLabelObject(19, 11); AddMoneyLabelObject(19, 11);
} }
void bag_menu_remove_money_window(void) static void RemoveMoneyWindow(void)
{ {
BagMenu_RemoveWindow(9); BagMenu_RemoveWindow(9);
RemoveMoneyLabelObject(); RemoveMoneyLabelObject();

View File

@ -876,8 +876,7 @@ static void sub_800F498(u16 *a0, u8 *a1)
static bool32 RfuProcessEnqueuedRecvBlock(void) static bool32 RfuProcessEnqueuedRecvBlock(void)
{ {
u8 i; u8 i, j;
u8 j;
u8 sp00[MAX_RFU_PLAYERS * (2 * (CMD_LENGTH - 1))]; u8 sp00[MAX_RFU_PLAYERS * (2 * (CMD_LENGTH - 1))];
u8 sp48[2 * (CMD_LENGTH - 1)]; u8 sp48[2 * (CMD_LENGTH - 1)];
u8 status; u8 status;
@ -923,7 +922,7 @@ static bool32 RfuProcessEnqueuedRecvBlock(void)
static void HandleSendFailure(u8 unused, u32 flags) static void HandleSendFailure(u8 unused, u32 flags)
{ {
s32 i, j; s32 i, j, temp;
const u8 *r10 = Rfu.sendBlock.payload; const u8 *r10 = Rfu.sendBlock.payload;
for (i = 0; i < Rfu.sendBlock.count; i++) for (i = 0; i < Rfu.sendBlock.count; i++)
@ -933,14 +932,15 @@ static void HandleSendFailure(u8 unused, u32 flags)
sResendBlock16[0] = RFUCMD_0x8900 | i; sResendBlock16[0] = RFUCMD_0x8900 | i;
for (j = 0; j < 7; j++) for (j = 0; j < 7; j++)
{ {
sResendBlock16[j + 1] = (r10[12 * i + (j << 1) + 1] << 8) | r10[12 * i + (j << 1) + 0]; temp = j << 1;
sResendBlock16[j + 1] = (r10[i * 12 + temp + 1] << 8) | r10[i * 12 + temp];
} }
for (j = 0; j < 7; j++) for (j = 0; j < 7; j++)
{ {
sResendBlock8[2 * j + 1] = sResendBlock16[j] >> 8; temp = j << 1;
sResendBlock8[2 * j + 0] = sResendBlock16[j]; sResendBlock8[temp + 1] = sResendBlock16[j] >> 8;
sResendBlock8[temp + 0] = sResendBlock16[j] & 0xff;
j++;j--; // Needed to match;
} }
RfuSendQueue_Enqueue(&Rfu.sendQueue, sResendBlock8); RfuSendQueue_Enqueue(&Rfu.sendQueue, sResendBlock8);
Rfu.sendBlock.failedFlags |= (1 << i); Rfu.sendBlock.failedFlags |= (1 << i);
@ -1024,8 +1024,7 @@ void Rfu_SetBerryBlenderLinkCallback(void)
static void RfuHandleReceiveCommand(u8 unused) static void RfuHandleReceiveCommand(u8 unused)
{ {
u16 i; u16 i, j;
u16 j;
for (i = 0; i < MAX_RFU_PLAYERS; i++) for (i = 0; i < MAX_RFU_PLAYERS; i++)
{ {
@ -1039,7 +1038,7 @@ static void RfuHandleReceiveCommand(u8 unused)
if (gRfuLinkStatus->parentChild == MODE_CHILD) if (gRfuLinkStatus->parentChild == MODE_CHILD)
{ {
Rfu.playerCount = gRecvCmds[i][1]; Rfu.playerCount = gRecvCmds[i][1];
Rfu.multiplayerId = sub_800F74C((u8 *)(gRecvCmds[i] + 2)); Rfu.multiplayerId = sub_800F74C((u8 *)(&gRecvCmds[i][2]));
} }
break; break;
case RFUCMD_0x8800: case RFUCMD_0x8800:
@ -1238,10 +1237,9 @@ void Rfu_SendPacket(void *data)
bool32 Rfu_InitBlockSend(const u8 *src, size_t size) bool32 Rfu_InitBlockSend(const u8 *src, size_t size)
{ {
bool8 r4; bool8 r4;
if (Rfu.callback != NULL) if (Rfu.callback != NULL || gSendCmd[0] != 0)
return FALSE;
if (gSendCmd[0] != 0)
return FALSE; return FALSE;
if (Rfu.sendBlock.sending) if (Rfu.sendBlock.sending)
{ {
sRfuDebug.unk_83++; sRfuDebug.unk_83++;
@ -1419,16 +1417,12 @@ void Rfu_SetCloseLinkCallback(void)
static void SendReadyExitStandbyUntilAllReady(void) static void SendReadyExitStandbyUntilAllReady(void)
{ {
u8 playerCount; u8 i, playerCount;
u8 i;
if (GetMultiplayerId() != 0) if (GetMultiplayerId() != 0 && Rfu.recvQueue.count == 0 && Rfu.resendExitStandbyTimer > 60)
{ {
if (Rfu.recvQueue.count == 0 && Rfu.resendExitStandbyTimer > 60) RfuPrepareSendBuffer(RFUCMD_READY_EXIT_STANDBY);
{ Rfu.resendExitStandbyTimer = 0;
RfuPrepareSendBuffer(RFUCMD_READY_EXIT_STANDBY);
Rfu.resendExitStandbyTimer = 0;
}
} }
playerCount = GetLinkPlayerCount(); playerCount = GetLinkPlayerCount();
for (i = 0; i < playerCount; i++) for (i = 0; i < playerCount; i++)
@ -1458,8 +1452,7 @@ static void LinkLeaderReadyToExitStandby(void)
// RFU equivalent of LinkCB_Standby and LinkCB_StandbyForAll // RFU equivalent of LinkCB_Standby and LinkCB_StandbyForAll
static void Rfu_LinkStandby(void) static void Rfu_LinkStandby(void)
{ {
u8 i; u8 i, playerCount;
u8 playerCount;
if (GetMultiplayerId() != 0) if (GetMultiplayerId() != 0)
{ {
@ -1555,28 +1548,28 @@ static bool8 CheckForLeavingGroupMembers(void)
bool8 memberLeft = FALSE; bool8 memberLeft = FALSE;
for (i = 0; i < RFU_CHILD_MAX; i++) for (i = 0; i < RFU_CHILD_MAX; i++)
{ {
if (Rfu.partnerSendStatuses[i] < RFU_STATUS_JOIN_GROUP_OK if (Rfu.partnerSendStatuses[i] == RFU_STATUS_JOIN_GROUP_OK
|| Rfu.partnerSendStatuses[i] > RFU_STATUS_JOIN_GROUP_NO) || Rfu.partnerSendStatuses[i] == RFU_STATUS_JOIN_GROUP_NO)
{ {
if (gRfuSlotStatusNI[i]->recv.state == SLOT_STATE_RECV_SUCCESS continue;
|| gRfuSlotStatusNI[i]->recv.state == SLOT_STATE_RECV_SUCCESS_AND_SENDSIDE_UNKNOWN) }
{
if (Rfu.partnerRecvStatuses[i] == RFU_STATUS_LEAVE_GROUP_NOTICE)
{
Rfu.partnerSendStatuses[i] = RFU_STATUS_LEAVE_GROUP;
Rfu.partnerRecvStatuses[i] = RFU_STATUS_10;
rfu_clearSlot(TYPE_NI_RECV, i);
rfu_NI_setSendData(1 << i, 8, &Rfu.partnerSendStatuses[i], 1);
memberLeft = TRUE;
}
} if (gRfuSlotStatusNI[i]->recv.state == SLOT_STATE_RECV_SUCCESS
else if (gRfuSlotStatusNI[Rfu.childSlot]->recv.state == SLOT_STATE_RECV_FAILED) || gRfuSlotStatusNI[i]->recv.state == SLOT_STATE_RECV_SUCCESS_AND_SENDSIDE_UNKNOWN)
{
if (Rfu.partnerRecvStatuses[i] == RFU_STATUS_LEAVE_GROUP_NOTICE)
{
Rfu.partnerSendStatuses[i] = RFU_STATUS_LEAVE_GROUP;
Rfu.partnerRecvStatuses[i] = RFU_STATUS_10;
rfu_clearSlot(TYPE_NI_RECV, i); rfu_clearSlot(TYPE_NI_RECV, i);
{ rfu_NI_setSendData(1 << i, 8, &Rfu.partnerSendStatuses[i], 1);
memberLeft = TRUE;
} }
} }
else if (gRfuSlotStatusNI[Rfu.childSlot]->recv.state == SLOT_STATE_RECV_FAILED)
{
rfu_clearSlot(TYPE_NI_RECV, i);
}
} }
return memberLeft; return memberLeft;
} }
@ -2097,8 +2090,7 @@ static void sub_80111FC(void)
static void sub_801120C(u8 msg, u8 paramCount) static void sub_801120C(u8 msg, u8 paramCount)
{ {
u8 i; u8 i, disconnectFlag = 0;
u8 disconnectFlag = 0;
switch (msg) switch (msg)
{ {
case LMAN_MSG_INITIALIZE_COMPLETED: case LMAN_MSG_INITIALIZE_COMPLETED:

View File

@ -1282,7 +1282,7 @@ void ListMenuSetUpRedOutlineCursorSpriteOamTable(u16 rowWidth, u16 rowHeight, st
{ {
subsprites[id] = sSubsprite_RedOutline3; subsprites[id] = sSubsprite_RedOutline3;
subsprites[id].x = i - 120; subsprites[id].x = i - 120;
subsprites[id].y = 136; subsprites[id].y = -120;
id++; id++;
subsprites[id] = sSubsprite_RedOutline6; subsprites[id] = sSubsprite_RedOutline6;

View File

@ -1299,10 +1299,12 @@ u8 sub_8198F58(u8 windowId, u8 fontId, u8 left, u8 top, u8 a4, u8 cursorHeight,
else else
sMenu.cursorPos = pos; sMenu.cursorPos = pos;
sub_8199134(0, 0); // Why call this when it's not gonna move?
ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_NONE);
return sMenu.cursorPos; return sMenu.cursorPos;
} }
// Unused
u8 sub_8198FD4(u8 windowId, u8 fontId, u8 left, u8 top, u8 a4, u8 a5, u8 a6, u8 a7) u8 sub_8198FD4(u8 windowId, u8 fontId, u8 left, u8 top, u8 a4, u8 a5, u8 a6, u8 a7)
{ {
u8 cursorHeight = GetMenuCursorDimensionByFont(fontId, 1); u8 cursorHeight = GetMenuCursorDimensionByFont(fontId, 1);
@ -1333,40 +1335,28 @@ void sub_8199060(u8 oldCursorPos, u8 newCursorPos)
0); 0);
} }
u8 sub_8199134(s8 deltaX, s8 deltaY) u8 ChangeListMenuCursorPosition(s8 deltaX, s8 deltaY)
{ {
u8 oldPos = sMenu.cursorPos; u8 oldPos = sMenu.cursorPos;
if (deltaX != 0) if (deltaX != 0)
{ {
if ((sMenu.cursorPos % sMenu.columns) + deltaX < 0) if ((sMenu.cursorPos % sMenu.columns) + deltaX < 0)
{
sMenu.cursorPos += sMenu.columns - 1; sMenu.cursorPos += sMenu.columns - 1;
}
else if ((sMenu.cursorPos % sMenu.columns) + deltaX >= sMenu.columns) else if ((sMenu.cursorPos % sMenu.columns) + deltaX >= sMenu.columns)
{
sMenu.cursorPos = (sMenu.cursorPos / sMenu.columns) * sMenu.columns; sMenu.cursorPos = (sMenu.cursorPos / sMenu.columns) * sMenu.columns;
}
else else
{
sMenu.cursorPos += deltaX; sMenu.cursorPos += deltaX;
}
} }
if (deltaY != 0) if (deltaY != 0)
{ {
if ((sMenu.cursorPos / sMenu.columns) + deltaY < 0) if ((sMenu.cursorPos / sMenu.columns) + deltaY < 0)
{
sMenu.cursorPos += sMenu.columns * (sMenu.rows - 1); sMenu.cursorPos += sMenu.columns * (sMenu.rows - 1);
}
else if ((sMenu.cursorPos / sMenu.columns) + deltaY >= sMenu.rows) else if ((sMenu.cursorPos / sMenu.columns) + deltaY >= sMenu.rows)
{
sMenu.cursorPos -= sMenu.columns * (sMenu.rows - 1); sMenu.cursorPos -= sMenu.columns * (sMenu.rows - 1);
}
else else
{
sMenu.cursorPos += (sMenu.columns * deltaY); sMenu.cursorPos += (sMenu.columns * deltaY);
}
} }
if (sMenu.cursorPos > sMenu.maxCursorPos) if (sMenu.cursorPos > sMenu.maxCursorPos)
@ -1381,7 +1371,7 @@ u8 sub_8199134(s8 deltaX, s8 deltaY)
} }
} }
u8 sub_81991F8(s8 deltaX, s8 deltaY) u8 ChangeGridMenuCursorPosition(s8 deltaX, s8 deltaY)
{ {
u8 oldPos = sMenu.cursorPos; u8 oldPos = sMenu.cursorPos;
@ -1429,25 +1419,25 @@ s8 sub_8199284(void)
else if (gMain.newKeys & DPAD_UP) else if (gMain.newKeys & DPAD_UP)
{ {
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
sub_8199134(0, -1); ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_UP);
return MENU_NOTHING_CHOSEN; return MENU_NOTHING_CHOSEN;
} }
else if (gMain.newKeys & DPAD_DOWN) else if (gMain.newKeys & DPAD_DOWN)
{ {
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
sub_8199134(0, 1); ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_DOWN);
return MENU_NOTHING_CHOSEN; return MENU_NOTHING_CHOSEN;
} }
else if (gMain.newKeys & DPAD_LEFT || GetLRKeysPressed() == MENU_L_PRESSED) else if (gMain.newKeys & DPAD_LEFT || GetLRKeysPressed() == MENU_L_PRESSED)
{ {
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
sub_8199134(-1, 0); ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_LEFT, MENU_CURSOR_DELTA_NONE);
return MENU_NOTHING_CHOSEN; return MENU_NOTHING_CHOSEN;
} }
else if (gMain.newKeys & DPAD_RIGHT || GetLRKeysPressed() == MENU_R_PRESSED) else if (gMain.newKeys & DPAD_RIGHT || GetLRKeysPressed() == MENU_R_PRESSED)
{ {
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
sub_8199134(1, 0); ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_RIGHT, MENU_CURSOR_DELTA_NONE);
return MENU_NOTHING_CHOSEN; return MENU_NOTHING_CHOSEN;
} }
@ -1469,25 +1459,25 @@ s8 Menu_ProcessInputGridLayout(void)
} }
else if (gMain.newKeys & DPAD_UP) else if (gMain.newKeys & DPAD_UP)
{ {
if (oldPos != sub_81991F8(0, -1)) if (oldPos != ChangeGridMenuCursorPosition(0, -1))
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
return MENU_NOTHING_CHOSEN; return MENU_NOTHING_CHOSEN;
} }
else if (gMain.newKeys & DPAD_DOWN) else if (gMain.newKeys & DPAD_DOWN)
{ {
if (oldPos != sub_81991F8(0, 1)) if (oldPos != ChangeGridMenuCursorPosition(0, 1))
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
return MENU_NOTHING_CHOSEN; return MENU_NOTHING_CHOSEN;
} }
else if (gMain.newKeys & DPAD_LEFT || GetLRKeysPressed() == MENU_L_PRESSED) else if (gMain.newKeys & DPAD_LEFT || GetLRKeysPressed() == MENU_L_PRESSED)
{ {
if (oldPos != sub_81991F8(-1, 0)) if (oldPos != ChangeGridMenuCursorPosition(-1, 0))
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
return MENU_NOTHING_CHOSEN; return MENU_NOTHING_CHOSEN;
} }
else if (gMain.newKeys & DPAD_RIGHT || GetLRKeysPressed() == MENU_R_PRESSED) else if (gMain.newKeys & DPAD_RIGHT || GetLRKeysPressed() == MENU_R_PRESSED)
{ {
if (oldPos != sub_81991F8(1, 0)) if (oldPos != ChangeGridMenuCursorPosition(1, 0))
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
return MENU_NOTHING_CHOSEN; return MENU_NOTHING_CHOSEN;
} }
@ -1509,31 +1499,32 @@ s8 sub_81993D8(void)
else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_UP) else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_UP)
{ {
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
sub_8199134(0, -1); ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_UP);
return MENU_NOTHING_CHOSEN; return MENU_NOTHING_CHOSEN;
} }
else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_DOWN) else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_DOWN)
{ {
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
sub_8199134(0, 1); ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_DOWN);
return MENU_NOTHING_CHOSEN; return MENU_NOTHING_CHOSEN;
} }
else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_LEFT || GetLRKeysPressedAndHeld() == MENU_L_PRESSED) else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_LEFT || GetLRKeysPressedAndHeld() == MENU_L_PRESSED)
{ {
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
sub_8199134(-1, 0); ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_LEFT, MENU_CURSOR_DELTA_NONE);
return MENU_NOTHING_CHOSEN; return MENU_NOTHING_CHOSEN;
} }
else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_RIGHT || GetLRKeysPressedAndHeld() == MENU_R_PRESSED) else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_RIGHT || GetLRKeysPressedAndHeld() == MENU_R_PRESSED)
{ {
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
sub_8199134(1, 0); ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_RIGHT, MENU_CURSOR_DELTA_NONE);
return MENU_NOTHING_CHOSEN; return MENU_NOTHING_CHOSEN;
} }
return MENU_NOTHING_CHOSEN; return MENU_NOTHING_CHOSEN;
} }
//Unused
s8 sub_8199484(void) s8 sub_8199484(void)
{ {
u8 oldPos = sMenu.cursorPos; u8 oldPos = sMenu.cursorPos;
@ -1549,25 +1540,25 @@ s8 sub_8199484(void)
} }
else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_UP) else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_UP)
{ {
if (oldPos != sub_81991F8(0, -1)) if (oldPos != ChangeGridMenuCursorPosition(0, -1))
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
return MENU_NOTHING_CHOSEN; return MENU_NOTHING_CHOSEN;
} }
else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_DOWN) else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_DOWN)
{ {
if (oldPos != sub_81991F8(0, 1)) if (oldPos != ChangeGridMenuCursorPosition(0, 1))
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
return MENU_NOTHING_CHOSEN; return MENU_NOTHING_CHOSEN;
} }
else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_LEFT || GetLRKeysPressedAndHeld() == MENU_L_PRESSED) else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_LEFT || GetLRKeysPressedAndHeld() == MENU_L_PRESSED)
{ {
if (oldPos != sub_81991F8(-1, 0)) if (oldPos != ChangeGridMenuCursorPosition(-1, 0))
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
return MENU_NOTHING_CHOSEN; return MENU_NOTHING_CHOSEN;
} }
else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_RIGHT || GetLRKeysPressedAndHeld() == MENU_R_PRESSED) else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_RIGHT || GetLRKeysPressedAndHeld() == MENU_R_PRESSED)
{ {
if (oldPos != sub_81991F8(1, 0)) if (oldPos != ChangeGridMenuCursorPosition(1, 0))
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
return MENU_NOTHING_CHOSEN; return MENU_NOTHING_CHOSEN;
} }
@ -1732,7 +1723,8 @@ u8 sub_8199944(u8 windowId, u8 optionWidth, u8 columns, u8 rows, u8 initialCurso
else else
sMenu.cursorPos = pos; sMenu.cursorPos = pos;
sub_8199134(0, 0); // Why call this when it's not gonna move?
ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_NONE);
return sMenu.cursorPos; return sMenu.cursorPos;
} }

View File

@ -894,76 +894,73 @@ static u8 *GetConditionMenuMonString(u8 *dst, u16 boxId, u16 monId)
{ {
return StringCopyPadded(dst, gText_EggNickname, 0, 12); return StringCopyPadded(dst, gText_EggNickname, 0, 12);
} }
GetBoxOrPartyMonData(boxId, monId, MON_DATA_NICKNAME, dst);
StringGetEnd10(dst);
species = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SPECIES, NULL);
if (boxId == TOTAL_BOXES_COUNT) // Party mon.
{
level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL);
gender = GetMonGender(&gPlayerParty[monId]);
}
else else
{ {
GetBoxOrPartyMonData(boxId, monId, MON_DATA_NICKNAME, dst); // Needed to match, feel free to remove.
StringGetEnd10(dst); boxId++, boxId--;
species = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SPECIES, NULL); monId++, monId--;
if (boxId == TOTAL_BOXES_COUNT) // Party mon.
{
level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL);
gender = GetMonGender(&gPlayerParty[monId]);
}
else
{
// Needed to match, feel free to remove.
boxId++;boxId--;
monId++;monId--;
boxMon = GetBoxedMonPtr(boxId, monId); boxMon = GetBoxedMonPtr(boxId, monId);
gender = GetBoxMonGender(boxMon); gender = GetBoxMonGender(boxMon);
level = GetLevelFromBoxMonExp(boxMon); level = GetLevelFromBoxMonExp(boxMon);
}
if ((species == SPECIES_NIDORAN_F || species == SPECIES_NIDORAN_M) && !StringCompare(dst, gSpeciesNames[species]))
gender = MON_GENDERLESS;
for (str = dst; *str != EOS; str++)
;
*(str++) = EXT_CTRL_CODE_BEGIN;
*(str++) = EXT_CTRL_CODE_SKIP;
*(str++) = 60;
switch (gender)
{
default:
*(str++) = CHAR_SPACE;
break;
case MON_MALE:
*(str++) = EXT_CTRL_CODE_BEGIN;
*(str++) = EXT_CTRL_CODE_COLOR;
*(str++) = TEXT_COLOR_RED;
*(str++) = EXT_CTRL_CODE_BEGIN;
*(str++) = EXT_CTRL_CODE_SHADOW;
*(str++) = TEXT_COLOR_LIGHT_RED;
*(str++) = CHAR_MALE;
break;
case MON_FEMALE:
*(str++) = EXT_CTRL_CODE_BEGIN;
*(str++) = EXT_CTRL_CODE_COLOR;
*(str++) = TEXT_COLOR_GREEN;
*(str++) = EXT_CTRL_CODE_BEGIN;
*(str++) = EXT_CTRL_CODE_SHADOW;
*(str++) = TEXT_COLOR_LIGHT_GREEN;
*(str++) = CHAR_FEMALE;
break;
}
*(str++) = EXT_CTRL_CODE_BEGIN;
*(str++) = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW;
*(str++) = TEXT_COLOR_BLUE;
*(str++) = TEXT_COLOR_TRANSPARENT;
*(str++) = TEXT_COLOR_LIGHT_BLUE;
*(str++) = CHAR_SLASH;
*(str++) = CHAR_EXTRA_SYMBOL;
*(str++) = CHAR_LV_2;
str = ConvertIntToDecimalStringN(str, level, STR_CONV_MODE_LEFT_ALIGN, 3);
*(str++) = CHAR_SPACE;
*str = EOS;
return str;
} }
if ((species == SPECIES_NIDORAN_F || species == SPECIES_NIDORAN_M) && !StringCompare(dst, gSpeciesNames[species]))
gender = MON_GENDERLESS;
for (str = dst; *str != EOS; str++)
;
*(str++) = EXT_CTRL_CODE_BEGIN;
*(str++) = EXT_CTRL_CODE_SKIP;
*(str++) = 60;
switch (gender)
{
default:
*(str++) = CHAR_SPACE;
break;
case MON_MALE:
*(str++) = EXT_CTRL_CODE_BEGIN;
*(str++) = EXT_CTRL_CODE_COLOR;
*(str++) = TEXT_COLOR_RED;
*(str++) = EXT_CTRL_CODE_BEGIN;
*(str++) = EXT_CTRL_CODE_SHADOW;
*(str++) = TEXT_COLOR_LIGHT_RED;
*(str++) = CHAR_MALE;
break;
case MON_FEMALE:
*(str++) = EXT_CTRL_CODE_BEGIN;
*(str++) = EXT_CTRL_CODE_COLOR;
*(str++) = TEXT_COLOR_GREEN;
*(str++) = EXT_CTRL_CODE_BEGIN;
*(str++) = EXT_CTRL_CODE_SHADOW;
*(str++) = TEXT_COLOR_LIGHT_GREEN;
*(str++) = CHAR_FEMALE;
break;
}
*(str++) = EXT_CTRL_CODE_BEGIN;
*(str++) = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW;
*(str++) = TEXT_COLOR_BLUE;
*(str++) = TEXT_COLOR_TRANSPARENT;
*(str++) = TEXT_COLOR_LIGHT_BLUE;
*(str++) = CHAR_SLASH;
*(str++) = CHAR_EXTRA_SYMBOL;
*(str++) = CHAR_LV_2;
str = ConvertIntToDecimalStringN(str, level, STR_CONV_MODE_LEFT_ALIGN, 3);
*(str++) = CHAR_SPACE;
*str = EOS;
return str;
} }
// Buffers the string in src to dest up to n chars. If src is less than n chars, fill with spaces // Buffers the string in src to dest up to n chars. If src is less than n chars, fill with spaces

View File

@ -1898,22 +1898,22 @@ static const u16 sDeoxysBaseStats[] =
const u16 gLinkPlayerFacilityClasses[NUM_MALE_LINK_FACILITY_CLASSES + NUM_FEMALE_LINK_FACILITY_CLASSES] = const u16 gLinkPlayerFacilityClasses[NUM_MALE_LINK_FACILITY_CLASSES + NUM_FEMALE_LINK_FACILITY_CLASSES] =
{ {
// Male classes // Male classes
FACILITY_CLASS_COOLTRAINER_M, FACILITY_CLASS_COOLTRAINER_M,
FACILITY_CLASS_BLACK_BELT, FACILITY_CLASS_BLACK_BELT,
FACILITY_CLASS_CAMPER, FACILITY_CLASS_CAMPER,
FACILITY_CLASS_YOUNGSTER, FACILITY_CLASS_YOUNGSTER,
FACILITY_CLASS_PSYCHIC_M, FACILITY_CLASS_PSYCHIC_M,
FACILITY_CLASS_BUG_CATCHER, FACILITY_CLASS_BUG_CATCHER,
FACILITY_CLASS_PKMN_BREEDER_M, FACILITY_CLASS_PKMN_BREEDER_M,
FACILITY_CLASS_GUITARIST, FACILITY_CLASS_GUITARIST,
// Female Classes // Female Classes
FACILITY_CLASS_COOLTRAINER_F, FACILITY_CLASS_COOLTRAINER_F,
FACILITY_CLASS_HEX_MANIAC, FACILITY_CLASS_HEX_MANIAC,
FACILITY_CLASS_PICNICKER, FACILITY_CLASS_PICNICKER,
FACILITY_CLASS_LASS, FACILITY_CLASS_LASS,
FACILITY_CLASS_PSYCHIC_F, FACILITY_CLASS_PSYCHIC_F,
FACILITY_CLASS_BATTLE_GIRL, FACILITY_CLASS_BATTLE_GIRL,
FACILITY_CLASS_PKMN_BREEDER_F, FACILITY_CLASS_PKMN_BREEDER_F,
FACILITY_CLASS_BEAUTY FACILITY_CLASS_BEAUTY
}; };
@ -5806,7 +5806,7 @@ void AdjustFriendship(struct Pokemon *mon, u8 event)
if (friendship > 199) if (friendship > 199)
friendshipLevel++; friendshipLevel++;
if ((event != FRIENDSHIP_EVENT_WALKING || !(Random() & 1)) if ((event != FRIENDSHIP_EVENT_WALKING || !(Random() & 1))
&& (event != FRIENDSHIP_EVENT_LEAGUE_BATTLE || IS_LEAGUE_BATTLE)) && (event != FRIENDSHIP_EVENT_LEAGUE_BATTLE || IS_LEAGUE_BATTLE))
{ {
s8 mod = sFriendshipEventModifiers[event][friendshipLevel]; s8 mod = sFriendshipEventModifiers[event][friendshipLevel];
@ -5848,7 +5848,7 @@ void MonGainEVs(struct Pokemon *mon, u16 defeatedSpecies)
{ {
if (totalEVs >= MAX_TOTAL_EVS) if (totalEVs >= MAX_TOTAL_EVS)
break; break;
if (CheckPartyHasHadPokerus(mon, 0)) if (CheckPartyHasHadPokerus(mon, 0))
multiplier = 2; multiplier = 2;
else else
@ -5895,9 +5895,9 @@ void MonGainEVs(struct Pokemon *mon, u16 defeatedSpecies)
if (totalEVs + (s16)evIncrease > MAX_TOTAL_EVS) if (totalEVs + (s16)evIncrease > MAX_TOTAL_EVS)
evIncrease = ((s16)evIncrease + MAX_TOTAL_EVS) - (totalEVs + evIncrease); evIncrease = ((s16)evIncrease + MAX_TOTAL_EVS) - (totalEVs + evIncrease);
if (evs[i] + (s16)evIncrease > 255) if (evs[i] + (s16)evIncrease > MAX_PER_STAT_EVS)
{ {
int val1 = (s16)evIncrease + 255; int val1 = (s16)evIncrease + MAX_PER_STAT_EVS;
int val2 = evs[i] + evIncrease; int val2 = evs[i] + evIncrease;
evIncrease = val1 - val2; evIncrease = val1 - val2;
} }

View File

@ -26,9 +26,9 @@ void InitScriptContext(struct ScriptContext *ctx, void *cmdTable, void *cmdTable
s32 i; s32 i;
ctx->mode = 0; ctx->mode = 0;
ctx->scriptPtr = 0; ctx->scriptPtr = NULL;
ctx->stackDepth = 0; ctx->stackDepth = 0;
ctx->nativePtr = 0; ctx->nativePtr = NULL;
ctx->cmdTable = cmdTable; ctx->cmdTable = cmdTable;
ctx->cmdTableEnd = cmdTableEnd; ctx->cmdTableEnd = cmdTableEnd;
@ -55,7 +55,7 @@ void SetupNativeScript(struct ScriptContext *ctx, bool8 (*ptr)(void))
void StopScript(struct ScriptContext *ctx) void StopScript(struct ScriptContext *ctx)
{ {
ctx->mode = 0; ctx->mode = 0;
ctx->scriptPtr = 0; ctx->scriptPtr = NULL;
} }
bool8 RunScriptCommand(struct ScriptContext *ctx) bool8 RunScriptCommand(struct ScriptContext *ctx)

View File

@ -356,7 +356,7 @@ static void SetUpDataStruct(void)
{ {
if (sHillData == NULL) if (sHillData == NULL)
{ {
sHillData = AllocZeroed(sizeof(*sHillData)); sHillData = AllocZeroed(sizeof(struct TrHillStruct2));
sHillData->floorId = gMapHeader.mapLayoutId - LAYOUT_TRAINER_HILL_1F; sHillData->floorId = gMapHeader.mapLayoutId - LAYOUT_TRAINER_HILL_1F;
CpuCopy32(sDataPerTag[gSaveBlock1Ptr->trainerHill.tag], &sHillData->tag, sizeof(sHillData->tag) + 4 * sizeof(struct TrHillFloor)); CpuCopy32(sDataPerTag[gSaveBlock1Ptr->trainerHill.tag], &sHillData->tag, sizeof(sHillData->tag) + 4 * sizeof(struct TrHillFloor));
nullsub_2(); nullsub_2();
@ -672,70 +672,23 @@ bool32 LoadTrainerHillFloorObjectEventScripts(void)
return TRUE; return TRUE;
} }
// Functionally equivalent.
#ifdef NONMATCHING
static u32 sub_81D5F58(u8 floorId, u32 bit, u32 arg2, u32 arg3) static u32 sub_81D5F58(u8 floorId, u32 bit, u32 arg2, u32 arg3)
{ {
u32 var0, var1, var2, var3; u16 var0, var1;
#ifndef NONMATCHING
register u16 var2 asm("r3"); //compiler keeps wanting to "mov r3, 0x80" instead of "mov r2 0x80" and then later "add r3, r2, 0"
#else
u16 var2;
#endif
u16 var3;
var0 = (sHillData->floors[floorId].display.unk3A0[arg2] >> (15 - bit)) & 1; var0 = (sHillData->floors[floorId].display.unk3A0[arg2] >> (15 - bit) & 1);
var1 = sHillData->floors[floorId].display.data[arg2 * arg3 + bit]; var1 = sHillData->floors[floorId].display.data[arg3 * arg2 + bit];
var3 = 0x200; var2 = 0x200;
var2 = 0x3000; var3 = 0x3000;
return ((var0 << 10) | var2) | (var1 | var3); return ((var0 << 10) | var3) | (var1 | var2);
} }
#else
NAKED
static u32 sub_81D5F58(u8 floorId, u32 bit, u32 arg2, u32 arg3)
{
asm_unified("\n\
push {r4,r5,lr}\n\
lsls r0, 24\n\
lsrs r0, 24\n\
ldr r4, =sHillData\n\
ldr r4, [r4]\n\
mov r12, r4\n\
lsls r4, r2, 1\n\
lsls r5, r0, 4\n\
subs r5, r0\n\
lsls r5, 3\n\
subs r5, r0\n\
lsls r5, 3\n\
adds r4, r5\n\
movs r0, 0xE8\n\
lsls r0, 2\n\
add r0, r12\n\
adds r0, r4\n\
ldrh r0, [r0]\n\
movs r4, 0xF\n\
subs r4, r1\n\
asrs r0, r4\n\
movs r4, 0x1\n\
ands r0, r4\n\
muls r2, r3\n\
adds r2, r1\n\
adds r2, r5\n\
movs r1, 0xA8\n\
lsls r1, 2\n\
add r1, r12\n\
adds r1, r2\n\
ldrb r1, [r1]\n\
movs r2, 0x80\n\
lsls r2, 2\n\
adds r3, r2, 0\n\
movs r2, 0xC0\n\
lsls r2, 6\n\
lsls r0, 10\n\
orrs r0, r2\n\
orrs r1, r3\n\
orrs r0, r1\n\
pop {r4,r5}\n\
pop {r1}\n\
bx r1\n\
.pool");
}
#endif // NONMATCHING
void GenerateTrainerHillFloorLayout(u16 *mapArg) void GenerateTrainerHillFloorLayout(u16 *mapArg)
{ {