trade through sub_804E944

This commit is contained in:
PikalaxALT
2019-10-28 15:55:57 -04:00
parent e9cf9fc104
commit efe914a5ba
9 changed files with 585 additions and 1808 deletions
+1 -1
View File
@@ -8681,7 +8681,7 @@ _08122D8C:
ldr r3, _08122DB8 @ =sub_8122DBC
movs r4, 0
str r4, [sp]
bl sub_81344F8
bl ShowPokemonSummaryScreen
add sp, 0x4
pop {r4}
pop {r0}
+1 -1
View File
@@ -6561,7 +6561,7 @@ _0808EE78:
mov r0, r8
adds r1, r6, 0
adds r2, r5, 0
bl sub_81344F8
bl ShowPokemonSummaryScreen
b _0808EEF6
.align 2, 0
_0808EEAC: .4byte gUnknown_20397B0
+5 -5
View File
@@ -5,8 +5,8 @@
.text
thumb_func_start sub_81344F8
sub_81344F8: @ 81344F8
thumb_func_start ShowPokemonSummaryScreen
ShowPokemonSummaryScreen: @ 81344F8
push {r4-r7,lr}
mov r7, r10
mov r6, r9
@@ -268,7 +268,7 @@ _08134728: .4byte 0x0000322c
_0813472C: .4byte 0x00003290
_08134730: .4byte 0x00003204
_08134734: .4byte sub_8135C34
thumb_func_end sub_81344F8
thumb_func_end ShowPokemonSummaryScreen
thumb_func_start ShowSelectMovePokemonSummaryScreen
ShowSelectMovePokemonSummaryScreen: @ 8134738
@@ -283,7 +283,7 @@ ShowSelectMovePokemonSummaryScreen: @ 8134738
lsrs r5, 16
movs r4, 0x2
str r4, [sp]
bl sub_81344F8
bl ShowPokemonSummaryScreen
ldr r0, _08134764 @ =gUnknown_203B140
ldr r0, [r0]
ldr r1, _08134768 @ =0x00003260
@@ -14091,7 +14091,7 @@ sub_813B854: @ 813B854
str r0, [sp]
movs r1, 0
movs r2, 0
bl sub_81344F8
bl ShowPokemonSummaryScreen
add sp, 0x4
pop {r0}
bx r0
-1796
View File
File diff suppressed because it is too large Load Diff
+1
View File
@@ -142,5 +142,6 @@ bool32 sub_8058318(void);
void CB2_ReturnToStartMenu(void);
void CB2_WhiteOut(void);
void c2_8056854(void);
#endif //GUARD_OVERWORLD_H
+1 -1
View File
@@ -8,7 +8,6 @@ extern u8 gLastViewedMonIndex;
extern const u8 *const gMoveDescriptionPointers[];
extern const u8 *const gNatureNamePointers[];
void ShowPokemonSummaryScreen(u8 mode, void *mons, u8 monIndex, u8 maxMonIndex, void (*callback)(void));
void ShowSelectMovePokemonSummaryScreen(struct Pokemon *, u8, u8, MainCallback, u16);
void ShowPokemonSummaryScreenSet40EF(u8 mode, struct BoxPokemon *mons, u8 monIndex, u8 maxMonIndex, void (*callback)(void));
u8 sub_8138B2C(void);
@@ -34,5 +33,6 @@ enum PokemonSummaryScreenPage
};
s32 sub_8138B20(void);
void ShowPokemonSummaryScreen(struct Pokemon * party, u8 cursorPos, u8 lastIdx, void (*callback)(void), u8 a4);
#endif // GUARD_POKEMON_SUMMARY_SCREEN_H
+3
View File
@@ -660,4 +660,7 @@ extern const u8 gText_FiveIsland[];
extern const u8 gText_SixIsland[];
extern const u8 gText_SevenIsland[];
// trade
extern const u8 gUnknown_841E0A5[];
#endif //GUARD_STRINGS_H
+3 -3
View File
@@ -8,11 +8,11 @@ u32 gRngValue;
u16 Random(void)
{
gRngValue = 1103515245 * gRngValue + 24691;
return gRngValue >> 16;
gRngValue = 1103515245 * gRngValue + 24691;
return gRngValue >> 16;
}
void SeedRng(u16 seed)
{
gRngValue = seed;
gRngValue = seed;
}
+570 -1
View File
@@ -16,6 +16,9 @@
#include "data.h"
#include "sound.h"
#include "string_util.h"
#include "strings.h"
#include "menu.h"
#include "overworld.h"
#include "party_menu.h"
#include "pokemon_summary_screen.h"
#include "pokemon_storage_system.h"
@@ -79,12 +82,16 @@ void sub_804D4F8(void);
void sub_804D638(void);
void sub_804D694(u8 state);
void sub_804D764(void);
u8 shedinja_maker_maybe(void);
void sub_804DFF0(void);
void sub_804E9E4(void);
void sub_804EAAC(u8 a0);
void sub_804EAE4(u8 side);
u8 shedinja_maker_maybe(void);
void sub_804F020(u8 side);
void sub_804F284(u8 side);
void sub_804F3B4(void);
void sub_804F3C8(u8 a0);
void sub_804F488(u16 a0, u8 a1);
void sub_804F4DC(void);
void sub_804F5BC(u8 str_idx);
bool8 sub_804F610(void);
@@ -93,6 +100,7 @@ void sub_804F748(u8 side);
void sub_804F890(u8 side);
void sub_804F964(void);
void sub_804F9D8(void);
u32 sub_804FA14(struct Pokemon * party, u8 partyCount, u8 cursorPos);
void LoadHeldItemIcons(void);
void sub_8050138(void);
@@ -106,6 +114,7 @@ extern const u8 gTradeUnknownSpriteCoords[][4];
extern const struct SpriteTemplate gUnknown_8261CB0;
extern const struct SpriteTemplate gUnknown_8261CC8;
extern const u8 gJPText_Shedinja[];
extern const u8 gUnknown_8261D08[][4][6];
void sub_804C600(void)
{
@@ -2513,3 +2522,563 @@ bool8 shedinja_maker_maybe(void)
}
return FALSE;
}
void sub_804DBAC(void)
{
sub_804F728(gUnknown_841E0A5, (u8 *)OBJ_VRAM0 + gUnknown_2031DA8->unk_72 * 32, 0x18);
}
void sub_804DBD4(u8 a0, u8 a1)
{
if (a1 & 1)
{
switch (gBlockRecvBuffer[0][0])
{
case 0xEEAA:
gUnknown_2031DA8->unk_78 = 2;
break;
case 0xAABB:
gUnknown_2031DA8->unk_78 = 1;
break;
case 0xBBBB:
gUnknown_2031DA8->unk_7A = 1;
break;
case 0xBBCC:
gUnknown_2031DA8->unk_7A = 2;
break;
}
ResetBlockReceivedFlag(0);
}
if (a1 & 2)
{
switch (gBlockRecvBuffer[1][0])
{
case 0xEEAA:
gUnknown_2031DA8->unk_79 = 2;
break;
case 0xAABB:
gUnknown_2031DA8->unk_7E = gBlockRecvBuffer[1][1] + 6;
gUnknown_2031DA8->unk_79 = 1;
break;
case 0xBBBB:
gUnknown_2031DA8->unk_7B = 1;
break;
case 0xBBCC:
gUnknown_2031DA8->unk_7B = 2;
break;
}
ResetBlockReceivedFlag(1);
}
}
void sub_804DCF4(u8 a0, u8 a1)
{
if (a1 & 1)
{
switch (gBlockRecvBuffer[0][0])
{
case 0xEEBB:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
sub_804F5BC(4);
gUnknown_2031DA8->unk_6F = 11;
break;
case 0xEECC:
sub_804F5BC(5);
gUnknown_2031DA8->unk_6F = 8;
break;
case 0xDDDD:
gUnknown_2031DA8->unk_7E = gBlockRecvBuffer[0][1] + 6;
rbox_fill_rectangle(0);
sub_804EAAC(gUnknown_2031DA8->tradeMenuCursorPosition);
sub_804EAAC(gUnknown_2031DA8->unk_7E);
gUnknown_2031DA8->unk_6F = 7;
break;
case 0xCCDD:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
gUnknown_2031DA8->unk_6F = 10;
break;
case 0xDDEE:
sub_804F5BC(1);
gUnknown_2031DA8->unk_6F = 8;
}
ResetBlockReceivedFlag(0);
}
if (a1 & 2)
ResetBlockReceivedFlag(1);
}
void sub_804DDF0(void)
{
if (gUnknown_2031DA8->unk_78 && gUnknown_2031DA8->unk_79)
{
if (gUnknown_2031DA8->unk_78 == 1 && gUnknown_2031DA8->unk_79 == 1)
{
gUnknown_2031DA8->unk_6F = 6;
gUnknown_2031DA8->linkData[0] = 0xDDDD;
gUnknown_2031DA8->linkData[1] = gUnknown_2031DA8->tradeMenuCursorPosition;
sub_804F488(5, 0);
gUnknown_2031DA8->unk_78 = gUnknown_2031DA8->unk_79 = 0;
}
else if (gUnknown_2031DA8->unk_78 == 1 && gUnknown_2031DA8->unk_79 == 2)
{
sub_804F5BC(1);
gUnknown_2031DA8->linkData[0] = 0xEECC;
gUnknown_2031DA8->linkData[1] = 0;
sub_804F488(5, 0);
gUnknown_2031DA8->unk_7A = gUnknown_2031DA8->unk_7B = 0;
gUnknown_2031DA8->unk_78 = gUnknown_2031DA8->unk_79 = 0;
gUnknown_2031DA8->unk_6F = 8;
}
else if (gUnknown_2031DA8->unk_78 == 2 && gUnknown_2031DA8->unk_79 == 1)
{
sub_804F5BC(5);
gUnknown_2031DA8->linkData[0] = 0xDDEE;
gUnknown_2031DA8->linkData[1] = 0;
sub_804F488(5, 0);
gUnknown_2031DA8->unk_7A = gUnknown_2031DA8->unk_7B = 0;
gUnknown_2031DA8->unk_78 = gUnknown_2031DA8->unk_79 = 0;
gUnknown_2031DA8->unk_6F = 8;
}
else if (gUnknown_2031DA8->unk_78 == 2 && gUnknown_2031DA8->unk_79 == 2)
{
gUnknown_2031DA8->linkData[0] = 0xEEBB;
gUnknown_2031DA8->linkData[1] = 0;
sub_804F488(5, 0);
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
gUnknown_2031DA8->unk_78 = gUnknown_2031DA8->unk_79 = 0;
gUnknown_2031DA8->unk_6F = 11;
}
}
if (gUnknown_2031DA8->unk_7A && gUnknown_2031DA8->unk_7B)
{
if (gUnknown_2031DA8->unk_7A == 1 && gUnknown_2031DA8->unk_7B == 1)
{
gUnknown_2031DA8->linkData[0] = 0xCCDD;
gUnknown_2031DA8->linkData[1] = 0;
sub_804F488(5, 0);
gUnknown_2031DA8->unk_7A = 0;
gUnknown_2031DA8->unk_7B = 0;
gUnknown_2031DA8->unk_6F = 9;
}
if (gUnknown_2031DA8->unk_7A == 2 || gUnknown_2031DA8->unk_7B == 2)
{
sub_804F5BC(1);
gUnknown_2031DA8->linkData[0] = 0xDDEE;
gUnknown_2031DA8->linkData[1] = 0;
sub_804F488(5, 0);
gUnknown_2031DA8->unk_7A = 0;
gUnknown_2031DA8->unk_7B = 0;
gUnknown_2031DA8->unk_6F = 8;
}
}
}
void sub_804DFF0(void)
{
u8 mpId = GetMultiplayerId();
u8 status;
if ((status = GetBlockReceivedStatus()))
{
if (mpId == 0)
sub_804DBD4(0, status);
else
sub_804DCF4(mpId, status);
}
if (mpId == 0)
sub_804DDF0();
}
u8 sub_804E028(u8 oldPosition, u8 direction)
{
int i;
u8 newPosition = 0;
for (i = 0; i < PARTY_SIZE; i++)
{
if (gUnknown_2031DA8->tradeMenuOptionsActive[gUnknown_8261D08[oldPosition][direction][i]] == TRUE)
{
newPosition = gUnknown_8261D08[oldPosition][direction][i];
break;
}
}
return newPosition;
}
void TradeMenuMoveCursor(u8 *tradeMenuCursorPosition, u8 direction)
{
u8 newPosition = sub_804E028(*tradeMenuCursorPosition, direction);
if (newPosition == 12) // CANCEL
{
StartSpriteAnim(&gSprites[gUnknown_2031DA8->tradeMenuCursorSpriteIdx], 1);
gSprites[gUnknown_2031DA8->tradeMenuCursorSpriteIdx].pos1.x = 224;
gSprites[gUnknown_2031DA8->tradeMenuCursorSpriteIdx].pos1.y = 160;
}
else
{
StartSpriteAnim(&gSprites[gUnknown_2031DA8->tradeMenuCursorSpriteIdx], 0);
gSprites[gUnknown_2031DA8->tradeMenuCursorSpriteIdx].pos1.x = gTradeMonSpriteCoords[newPosition][0] * 8 + 32;
gSprites[gUnknown_2031DA8->tradeMenuCursorSpriteIdx].pos1.y = gTradeMonSpriteCoords[newPosition][1] * 8;
}
if (*tradeMenuCursorPosition != newPosition)
{
PlaySE(SE_SELECT);
}
*tradeMenuCursorPosition = newPosition;
}
void sub_804E134(void)
{
sub_804F5BC(0);
gUnknown_2031DA8->unk_6F = 5;
if (GetMultiplayerId() == 1)
{
gUnknown_2031DA8->linkData[0] = 0xAABB;
gUnknown_2031DA8->linkData[1] = gUnknown_2031DA8->tradeMenuCursorPosition;
SendBlock(bitmask_all_link_players_but_self(), gUnknown_2031DA8->linkData, 0x14);
}
else
{
gUnknown_2031DA8->unk_78 = 1;
}
}
extern const struct MenuAction gUnknown_8261EE4[];
extern const struct WindowTemplate gUnknown_8261FC4;
void sub_804E194(void)
{
int i;
if (JOY_REPT(DPAD_UP))
{
TradeMenuMoveCursor(&gUnknown_2031DA8->tradeMenuCursorPosition, 0);
}
else if (JOY_REPT(DPAD_DOWN))
{
TradeMenuMoveCursor(&gUnknown_2031DA8->tradeMenuCursorPosition, 1);
}
else if (JOY_REPT(DPAD_LEFT))
{
TradeMenuMoveCursor(&gUnknown_2031DA8->tradeMenuCursorPosition, 2);
}
else if (JOY_REPT(DPAD_RIGHT))
{
TradeMenuMoveCursor(&gUnknown_2031DA8->tradeMenuCursorPosition, 3);
}
if (JOY_NEW(A_BUTTON))
{
PlaySE(SE_SELECT);
if (gUnknown_2031DA8->tradeMenuCursorPosition < 6) // PlayerParty
{
DrawTextBorderOuter(1, 1, 14);
FillWindowPixelBuffer(1, PIXEL_FILL(1));
UnionRoomAndTradeMenuPrintOptions(1, 3, 16, 2, gUnknown_8261EE4);
Menu_InitCursor(1, 3, 0, 0, 16, 2, 0);
PutWindowTilemap(1);
CopyWindowToVram(1, 3);
gUnknown_2031DA8->unk_6F = 1;
}
else if (gUnknown_2031DA8->tradeMenuCursorPosition < 12)
{
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
gUnknown_2031DA8->unk_6F = 2;
}
else if (gUnknown_2031DA8->tradeMenuCursorPosition == 12)
{
CreateYesNoMenu(&gUnknown_8261FC4, 3, 0, 2, 0x001, 14, 0);
gUnknown_2031DA8->unk_6F = 4;
sub_804F728(gUnknown_8261ECC[4], (void *)OBJ_VRAM0 + gUnknown_2031DA8->unk_72 * 32, 24);
}
}
if (JOY_NEW(R_BUTTON))
{
for (i = 0; i < 10; i++)
gUnknown_2031DA8->linkData[i] = i;
SendBlock(bitmask_all_link_players_but_self(), gUnknown_2031DA8->linkData, 20);
}
}
void sub_804E330(void)
{
sub_804F3B4();
gUnknown_2031DA8->unk_6F = 0;
gSprites[gUnknown_2031DA8->tradeMenuCursorSpriteIdx].invisible = FALSE;
sub_804F728(gUnknown_8261ECC[1], (void *)OBJ_VRAM0 + gUnknown_2031DA8->unk_72 * 32, 24);
}
void sub_804E388(void)
{
switch (Menu_ProcessInputNoWrapAround())
{
case MENU_B_PRESSED:
PlaySE(SE_SELECT);
sub_804E330();
break;
case MENU_NOTHING_CHOSEN:
break;
case 0:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
gUnknown_2031DA8->unk_6F = 2;
break;
case 1:
switch (sub_804FA14(gPlayerParty, gPlayerPartyCount, gUnknown_2031DA8->tradeMenuCursorPosition))
{
case 0:
sub_804E134();
gSprites[gUnknown_2031DA8->tradeMenuCursorSpriteIdx].invisible = TRUE;
break;
case 1:
sub_804F488(3, 3);
gUnknown_2031DA8->unk_6F = 8;
break;
case 2:
case 4:
sub_804F488(3, 6);
gUnknown_2031DA8->unk_6F = 8;
break;
case 3:
case 5:
sub_804F488(3, 7);
gUnknown_2031DA8->unk_6F = 8;
break;
}
break;
}
}
void sub_804E46C(void)
{
if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON))
{
PlaySE(SE_SELECT);
sub_804E330();
}
}
void sub_804E494(void)
{
if (!gPaletteFade.active)
{
if (gUnknown_2031DA8->tradeMenuCursorPosition < 6)
ShowPokemonSummaryScreen(gPlayerParty, gUnknown_2031DA8->tradeMenuCursorPosition, gUnknown_2031DA8->partyCounts[0] - 1, sub_804CF14, 4);
else
ShowPokemonSummaryScreen(gEnemyParty, gUnknown_2031DA8->tradeMenuCursorPosition - 6, gUnknown_2031DA8->partyCounts[1] - 1, sub_804CF14, 4);
FreeAllWindowBuffers();
}
}
u8 sub_804E50C(u8 *a0, u8 a1, u8 a2)
{
s32 i;
u16 species;
u8 r4 = 0;
for (i = 0; i < a1; i++)
{
if (a2 != i)
r4 += a0[i];
}
species = GetMonData(&gEnemyParty[gUnknown_2031DA8->unk_7E % 6], MON_DATA_SPECIES);
if ((species == SPECIES_DEOXYS || species == SPECIES_MEW) && !GetMonData(&gEnemyParty[gUnknown_2031DA8->unk_7E % 6], MON_DATA_OBEDIENCE))
return 2;
if (r4 != 0)
r4 = 1;
return r4;
}
void sub_804E5A0(void)
{
int i;
u8 arr[12];
for (i = 0; i < gUnknown_2031DA8->partyCounts[0]; i++)
{
arr[i] = gUnknown_2031DA8->unk_45[0][i];
}
switch (sub_804E50C(arr, gUnknown_2031DA8->partyCounts[0], gUnknown_2031DA8->tradeMenuCursorPosition))
{
case 0:
sub_804F488(3, 3);
gUnknown_2031DA8->linkData[0] = 0xBBCC;
sub_804F488(0xB4, 0);
break;
case 1:
sub_804F488(3, 1);
gUnknown_2031DA8->linkData[0] = 0xBBBB;
if (IsLinkTaskFinished())
{
SendBlock(bitmask_all_link_players_but_self(), gUnknown_2031DA8->linkData, 20);
}
break;
case 2:
sub_804F488(3, 8);
gUnknown_2031DA8->linkData[0] = 0xBBCC;
sub_804F488(0xB4, 0);
break;
}
}
void sub_804E674(void)
{
switch (Menu_ProcessInputNoWrapClearOnChoose())
{
case 0:
sub_804E5A0();
gUnknown_2031DA8->unk_6F = 100;
PutWindowTilemap(17);
break;
case 1:
case MENU_B_PRESSED:
sub_804F488(3, 1);
if (IsLinkTaskFinished())
{
gUnknown_2031DA8->linkData[0] = 0xBBCC;
SendBlock(bitmask_all_link_players_but_self(), gUnknown_2031DA8->linkData, 20);
}
gUnknown_2031DA8->unk_6F = 100;
PutWindowTilemap(17);
break;
}
}
void sub_804E6FC(void)
{
int i;
for (i = 0; i < gUnknown_2031DA8->partyCounts[1] - 4; i++)
{
PutWindowTilemap(i + 12);
CopyWindowToVram(i + 12, 1);
}
}
void sub_804E744(void)
{
switch (Menu_ProcessInputNoWrapClearOnChoose())
{
case 0:
sub_804F5BC(4);
gUnknown_2031DA8->linkData[0] = 0xEEAA;
gUnknown_2031DA8->linkData[1] = 0;
sub_804F488(5, 0);
gSprites[gUnknown_2031DA8->tradeMenuCursorSpriteIdx].invisible = TRUE;
gUnknown_2031DA8->unk_6F = 100;
sub_804E6FC();
break;
case 1:
case MENU_B_PRESSED:
PlaySE(SE_SELECT);
sub_804E330();
break;
}
}
void sub_804E7C8(void)
{
if (GetMultiplayerId() == 0)
{
rbox_fill_rectangle(0);
sub_804EAAC(gUnknown_2031DA8->tradeMenuCursorPosition);
sub_804EAAC(gUnknown_2031DA8->unk_7E);
}
gUnknown_2031DA8->unk_6F = 7;
}
void sub_804E804(void)
{
if (gUnknown_2031DA8->unk_74[0] == 5 && gUnknown_2031DA8->unk_74[1] == 5)
{
sub_804DBAC();
gUnknown_2031DA8->unk_6F = 14;
}
}
void sub_804E830(void)
{
gUnknown_2031DA8->unk_A8++;
if (gUnknown_2031DA8->unk_A8 > 120)
{
CreateYesNoMenu(&gUnknown_8261FC4, 3, 0, 2, 1, 14, 0);
gUnknown_2031DA8->unk_A8 = 0;
gUnknown_2031DA8->unk_6F = 3;
}
}
void sub_804E880(void)
{
int i;
if (gMain.newKeys & A_BUTTON)
{
PlaySE(SE_SELECT);
rbox_fill_rectangle(0);
rbox_fill_rectangle(1);
for (i = 0; i < 4; i++)
{
FillWindowPixelBuffer(i + 14, PIXEL_FILL(0));
rbox_fill_rectangle(i + 14);
}
sub_804F3C8(0);
sub_804F3C8(1);
gUnknown_2031DA8->unk_6F = 0;
gSprites[gUnknown_2031DA8->tradeMenuCursorSpriteIdx].invisible = FALSE;
}
}
void sub_804E908(void)
{
if (!gPaletteFade.active)
{
if (gWirelessCommType)
{
sub_800AB9C();
}
else
{
sub_800AA80(12);
}
gUnknown_2031DA8->unk_6F = 12;
}
}
void sub_804E944(void)
{
if (gWirelessCommType)
{
if (IsLinkTaskFinished())
{
Free(gUnknown_2031C90);
Free(gUnknown_2031DA8);
FreeAllWindowBuffers();
DestroyWirelessStatusIndicatorSprite();
SetMainCallback2(c2_8056854);
}
}
else
{
if (!gReceivedRemoteLinkPlayers)
{
Free(gUnknown_2031C90);
Free(gUnknown_2031DA8);
FreeAllWindowBuffers();
SetMainCallback2(c2_8056854);
}
}
}