diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2019-10-28 16:31:59 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2019-10-28 16:31:59 -0400 |
commit | 4e296b8777eae2a824bf6511aa51d3b78b2e39dc (patch) | |
tree | d166ba954d5ff31739d3776198deb28d0e97429d /src | |
parent | efe914a5bab5062834f35cbae7824d1703f45618 (diff) |
trade through sub_804EED4
Diffstat (limited to 'src')
-rw-r--r-- | src/trade.c | 206 |
1 files changed, 206 insertions, 0 deletions
diff --git a/src/trade.c b/src/trade.c index 7c77556db..b0f3b0e90 100644 --- a/src/trade.c +++ b/src/trade.c @@ -19,6 +19,7 @@ #include "strings.h" #include "menu.h" #include "overworld.h" +#include "battle_anim.h" #include "party_menu.h" #include "pokemon_summary_screen.h" #include "pokemon_storage_system.h" @@ -27,6 +28,7 @@ #include "constants/items.h" #include "constants/easy_chat.h" #include "constants/songs.h" +#include "constants/moves.h" struct TradeResources { @@ -87,7 +89,10 @@ void sub_804DFF0(void); void sub_804E9E4(void); void sub_804EAAC(u8 a0); void sub_804EAE4(u8 side); +u8 sub_804EE6C(u8 *str, u8 whichParty, u8 partyIdx); +void sub_804EED4(u8 *str, u8 whichParty, u8 partyIdx); void sub_804F020(u8 side); +void sub_804F08C(u8 a0, u8 partyIdx, u8 a2, u8 a3, u8 a4, u8 a5); void sub_804F284(u8 side); void sub_804F3B4(void); void sub_804F3C8(u8 a0); @@ -115,6 +120,13 @@ extern const struct SpriteTemplate gUnknown_8261CB0; extern const struct SpriteTemplate gUnknown_8261CC8; extern const u8 gJPText_Shedinja[]; extern const u8 gUnknown_8261D08[][4][6]; +extern const u16 gTradePartyBoxTilemap[]; +extern const u16 gTradeMovesBoxTilemap[]; +extern const u8 gUnknown_8262055[][2]; +extern const u8 gUnknown_8261F18[]; +extern const u8 gUnknown_8261EB6[]; +extern const u8 gUnknown_8261EC7[]; +extern const u8 gUnknown_841E09F[]; void sub_804C600(void) { @@ -3082,3 +3094,197 @@ void sub_804E944(void) } } +void sub_804E9C0(void) +{ + if (!sub_80FA484(FALSE)) + { + sub_800AB9C(); + gUnknown_2031DA8->unk_6F = 13; + } +} + +void sub_804E9E4(void) +{ + switch (gUnknown_2031DA8->unk_6F) + { + case 0: + sub_804E194(); + break; + case 1: + sub_804E388(); + break; + case 2: + sub_804E494(); + break; + case 3: + sub_804E674(); + break; + case 4: + sub_804E744(); + break; + case 6: + sub_804E7C8(); + break; + case 7: + sub_804E804(); + break; + case 8: + sub_804E880(); + break; + case 9: + sub_804D50C(); + break; + case 10: + sub_804D548(); + break; + case 11: + sub_804E908(); + break; + case 12: + sub_804E944(); + break; + case 13: + sub_804D5A4(); + break; + case 14: + sub_804E830(); + break; + case 15: + sub_804E46C(); + break; + case 16: + sub_804E9C0(); + break; + } +} + +void sub_804EAAC(u8 a0) +{ + u8 whichParty = a0 / PARTY_SIZE; + + if (gUnknown_2031DA8->unk_74[whichParty] == 0) + { + gUnknown_2031DA8->unk_74[whichParty] = 1; + gUnknown_2031DA8->unk_76[whichParty] = a0; + } +} + +void sub_804EAE4(u8 a0) +{ + s8 nameStringWidth; + u8 nickname[20]; + u8 movesString[56]; + u8 i; + u8 partyIdx; + u8 whichParty; + u8 monIdx = gUnknown_2031DA8->unk_76[a0]; + + whichParty = 1; + if (gUnknown_2031DA8->unk_76[a0] < PARTY_SIZE) + whichParty = 0; + partyIdx = monIdx % PARTY_SIZE; + nameStringWidth = 0; + + switch (gUnknown_2031DA8->unk_74[a0]) + { + case 1: + for (i = 0; i < gUnknown_2031DA8->partyCounts[a0]; i++) + { + gSprites[gUnknown_2031DA8->partyIcons[0][i + (whichParty * PARTY_SIZE)]].invisible = TRUE; + } + + for (i = 0; i < 6; i++) + { + ClearWindowTilemap(i + (a0 * 6 + 2)); + } + + gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].invisible = FALSE; + gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].data[0] = 20; + gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].data[2] = (gTradeMonSpriteCoords[whichParty * PARTY_SIZE][0] + gTradeMonSpriteCoords[whichParty * PARTY_SIZE + 1][0]) / 2 * 8 + 14; + gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].data[4] = (gTradeMonSpriteCoords[whichParty * PARTY_SIZE][1] * 8) - 12; + StoreSpriteCallbackInData6(&gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]], SpriteCB_MonIcon); + gUnknown_2031DA8->unk_74[a0]++; + sub_8075490(&gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]]); + CopyToBgTilemapBufferRect_ChangePalette(1, gTradePartyBoxTilemap, a0 * 15, 0, 15, 17, 0); + CopyBgTilemapBufferToVram(1); + CopyBgTilemapBufferToVram(0); + + if (whichParty == 0) + sub_804F3B4(); + break; + case 2: + if (gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].callback == SpriteCB_MonIcon) + gUnknown_2031DA8->unk_74[a0] = 3; + break; + case 3: + CopyToBgTilemapBufferRect_ChangePalette(1, gTradeMovesBoxTilemap, whichParty * 15, 0, 15, 17, 0); + CopyBgTilemapBufferToVram(1); + gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos1.x = (gTradeMonSpriteCoords[whichParty * PARTY_SIZE][0] + gTradeMonSpriteCoords[whichParty * PARTY_SIZE + 1][0]) / 2 * 8 + 14; + gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos1.y = (gTradeMonSpriteCoords[whichParty * PARTY_SIZE][1] * 8) - 12; + gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos2.x = 0; + gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos2.y = 0; + nameStringWidth = sub_804EE6C(nickname, whichParty, partyIdx); + AddTextPrinterParameterized3((a0 * 2) + 14, 0, (80 - nameStringWidth) / 2, 4, gUnknown_8261F18, 0, nickname); + sub_804EED4(movesString, whichParty, partyIdx); + AddTextPrinterParameterized4((a0 * 2) + 15, 1, 0, 0, 0, 0, gUnknown_8261F18, 0, movesString); + PutWindowTilemap((a0 * 2) + 14); + CopyWindowToVram((a0 * 2) + 14, 3); + PutWindowTilemap((a0 * 2) + 15); + CopyWindowToVram((a0 * 2) + 15, 3); + gUnknown_2031DA8->unk_74[a0]++; + break; + case 4: + sub_804F08C(a0, partyIdx, gUnknown_8262055[a0][0] + 4, gUnknown_8262055[a0][1] + 1, gUnknown_8262055[a0][0], gUnknown_8262055[a0][1]); + gUnknown_2031DA8->unk_74[a0]++; + break; + } +} + +u8 sub_804EE6C(u8 *dest, u8 whichParty, u8 partyIdx) +{ + u8 nickname[11]; + if (whichParty == 0) + GetMonData(&gPlayerParty[partyIdx], MON_DATA_NICKNAME, nickname); + else + GetMonData(&gEnemyParty[partyIdx], MON_DATA_NICKNAME, nickname); + StringCopy10(dest, nickname); + return GetStringWidth(0, dest, GetFontAttribute(0, FONTATTR_LETTER_SPACING)); +} + +void sub_804EED4(u8 *a0, u8 a1, u8 a2) +{ + u16 moves[MAX_MON_MOVES]; + u16 i; + + if (!gUnknown_2031DA8->unk_51[a1][a2]) + { + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (!a1) + { + moves[i] = GetMonData(&gPlayerParty[a2], i + MON_DATA_MOVE1, NULL); + } + else + { + moves[i] = GetMonData(&gEnemyParty[a2], i + MON_DATA_MOVE1, NULL); + } + } + + StringCopy(a0, gUnknown_8261EB6); + + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (moves[i] != MOVE_NONE) + { + StringAppend(a0, gMoveNames[moves[i]]); + } + + StringAppend(a0, gUnknown_8261EC7); + } + } + else + { + StringCopy(a0, gUnknown_8261EB6); + StringAppend(a0, gUnknown_841E09F); + } +} |