summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorscnorton <scnorton@biociphers.org>2017-09-04 15:02:00 -0400
committerscnorton <scnorton@biociphers.org>2017-09-04 15:02:00 -0400
commit9fe04d897f1c92ee9fb60d7ca526b54010464118 (patch)
treef96fae3913854648a2d4f9410befd63a30ad116b /src
parent0c7472075bbf318711e5d7c84df17796af0ec0d5 (diff)
sub_804C29C
Diffstat (limited to 'src')
-rw-r--r--src/egg_hatch.c6
-rw-r--r--src/trade.c781
2 files changed, 779 insertions, 8 deletions
diff --git a/src/egg_hatch.c b/src/egg_hatch.c
index aa3d45250..df54587af 100644
--- a/src/egg_hatch.c
+++ b/src/egg_hatch.c
@@ -19,6 +19,7 @@
#include "naming_screen.h"
#include "trig.h"
#include "rng.h"
+#include "trade.h"
extern u8 ewram[];
extern struct SpriteTemplate gUnknown_02024E8C;
@@ -40,10 +41,7 @@ struct EggHatchData* gEggHatchData;
extern const u32 gUnknown_08D00000[];
extern const u32 gUnknown_08D00524[];
-extern const u32 gUnknown_0820CA98[];
-extern const u32 gUnknown_0820F798[];
extern const u16 gUnknown_08D004E0[]; //palette
-extern const u16 gUnknown_0820C9F8[]; //palette
extern const struct SpriteSheet sUnknown_0820A3B0;
extern const struct SpriteSheet sUnknown_0820A3B8;
extern const struct SpritePalette sUnknown_0820A3C0;
@@ -512,7 +510,7 @@ static void CB2_EggHatch_0(void)
u32 size;
REG_BG2CNT = 0x4C06;
- LoadPalette(&gUnknown_0820C9F8, 0x10, 0xA0);
+ LoadPalette(gUnknown_0820C9F8, 0x10, 0xA0);
offsetRead = (u32)(&gUnknown_0820CA98);
offsetWrite = (VRAM + 0x4000);
diff --git a/src/trade.c b/src/trade.c
index ee0ed96db..3ec01246c 100644
--- a/src/trade.c
+++ b/src/trade.c
@@ -33,6 +33,7 @@
#include "decompress.h"
#include "mail_data.h"
#include "evolution_scene.h"
+#include "pokeball.h"
#include "trade.h"
#ifdef ENGLISH
@@ -131,12 +132,31 @@ struct TradeEwramSubstruct2 {
/*0x009c*/ u8 unk_009c;
/*0x009d*/ u8 unk_009d;
/*0x009e*/ u16 linkData[13];
+ // Sprite indices
/*0x00b8*/ u8 unk_00b8;
/*0x00b9*/ u8 unk_00b9;
- /*0x00ba*/ u8 filler_00ba[3];
+ /*0x00ba*/ u8 unk_00ba;
+ /*0x00bb*/ u8 unk_00bb;
+ /*0x00bc*/ u8 unk_00bc;
/*0x00bd*/ u8 unk_00bd;
+ // Timer
/*0x00c0*/ u32 unk_00c0;
+ // Scene index
/*0x00c4*/ u16 unk_00c4;
+ /*0x00c6*/ u8 filler_00c6[0x3c];
+ /*0x0102*/ u8 unk_0102;
+ /*0x0103*/ u8 unk_0103;
+ /*0x0104*/ u8 filler_0104[0x0c];
+ /*0x0110*/ s16 unk_0110;
+ /*0x0112*/ u8 filler_0112[4];
+ /*0x0116*/ s16 unk_0116;
+ /*0x0118*/ u16 unk_0118;
+ /*0x011a*/ u16 unk_011a;
+ /*0x011c*/ u8 filler_011c[2];
+ /*0x011e*/ u8 unk_011e;
+ /*0x0120*/ u16 unk_0120;
+ /*0x0122*/ u16 unk_0122;
+ /*0x0124*/ u16 unk_0124;
};
struct TradeEwramStruct {
@@ -204,6 +224,22 @@ static void sub_804E1A0(u8);
static void sub_804DAD4(struct MailStruct *, const struct InGameTrade *);
void sub_804D588(void);
static void sub_804DC88(void);
+u8 sub_8047580(u8, u8, u8, u8, u8, u8, u8, u32);
+void sub_804D6BC(struct Sprite *);
+void sub_804D738(struct Sprite *);
+void sub_804BBE8(u8);
+void sub_804B128(void);
+void sub_804B058(struct Sprite *);
+void sub_804B07C(struct Sprite *);
+void sub_804B0BC(struct Sprite *);
+void sub_804B104(struct Sprite *);
+void sub_804C0F8(u8);
+bool8 sub_8040A3C(u16);
+void sub_804B0E0(struct Sprite *);
+void sub_804D80C(struct Sprite *);
+void sub_804E1DC(void);
+void sub_804BBCC(void);
+void sub_804D8E4(void);
extern u8 gUnknown_020297D8[2];
extern u8 *gUnknown_020296CC[13];
@@ -565,10 +601,297 @@ const u8 unref_string_0820C3B5[] = _("こうかんせいりつ ");
const u8 unref_string_0820C3C3[] = _("だめだたらしいよ ");
const u8 gUnknown_0820C3D1[][2] = {
{ 4, 3},
- {19, 3}
+ {19, 3},
+ { 0, 0}
};
-asm(".section .rodata.igt");
+const u16 gTradeBallPalette[] = INCBIN_U16("graphics/trade/ball.gbapal");
+const u32 gTradeBallTiles[] = INCBIN_U32("graphics/trade/ball.4bpp");
+const u16 gUnknown_0820C9F8[][16] = {
+ INCBIN_U16("graphics/trade/unknown.gbapal"),
+ INCBIN_U16("graphics/trade/gba.gbapal"),
+ INCBIN_U16("graphics/trade/shadow.gbapal"),
+ {},
+ INCBIN_U16("graphics/trade/misc.gbapal")
+};
+
+const u32 gUnknown_0820CA98[] = INCBIN_U32("graphics/trade/gba.4bpp");
+const u32 gUnknown_0820CA98_2[] = INCBIN_U32("graphics/trade/shadow.4bpp");
+const u32 gUnknown_0820DD98[] = INCBIN_U32("graphics/trade/pokeball_symbol.8bpp");
+const u16 gUnknown_0820F798[] = INCBIN_U16("graphics/trade/shadow_map.bin");
+const u16 gUnknown_08210798[] = INCBIN_U16("graphics/trade/gba_map.bin");
+const u16 gUnknown_08211798[] = INCBIN_U16("graphics/trade/cable_closeup_map.bin");
+const u16 gUnknown_08211F98[] = INCBIN_U16("graphics/trade/pokeball_symbol_map.bin");
+const u16 unused_08212098[] = INCBIN_U16("graphics/unused/unknown/8212098.gbapal");
+const u16 gTradeCableEndPalette[] = INCBIN_U16("graphics/trade/cable_end.gbapal");
+const u16 unused_082120D8[] = INCBIN_U16("graphics/unused/unknown/82120D8.gbapal");
+const u16 nullpal_082120F8[16] = {};
+const u16 gTradeGlowPalette[] = INCBIN_U16("graphics/trade/glow.gbapal");
+const u32 gTradeGlow1Tiles[] = INCBIN_U32("graphics/trade/glow1.4bpp");
+const u32 gTradeGlow2Tiles[] = INCBIN_U32("graphics/trade/glow2.4bpp");
+const u32 gTradeCableEndTiles[] = INCBIN_U32("graphics/trade/cable_end.4bpp");
+const u32 gTradeGBAScreenTiles[] = INCBIN_U32("graphics/trade/gba_screen.4bpp");
+const u32 gUnknown_08213738[] = INCBIN_U32("graphics/trade/gba_affine.8bpp");
+const u16 gUnknown_08215778[] = INCBIN_U16("graphics/trade/gba_affine_map.bin");
+
+const struct OamData gOamData_8215878 = {
+ .affineMode = 1,
+ .size = 1
+};
+
+const union AnimCmd gSpriteAnim_8215880[] = {
+ ANIMCMD_FRAME( 0, 3),
+ ANIMCMD_FRAME( 4, 3),
+ ANIMCMD_FRAME( 8, 3),
+ ANIMCMD_FRAME(12, 3),
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_FRAME(20, 3),
+ ANIMCMD_FRAME(24, 3),
+ ANIMCMD_FRAME(28, 3),
+ ANIMCMD_FRAME(32, 3),
+ ANIMCMD_FRAME(36, 3),
+ ANIMCMD_FRAME(40, 3),
+ ANIMCMD_FRAME(44, 3),
+ ANIMCMD_LOOP(1),
+ ANIMCMD_FRAME( 0, 3),
+ ANIMCMD_END
+};
+
+const union AnimCmd gSpriteAnim_82158BC[] = {
+ ANIMCMD_FRAME( 0, 3),
+ ANIMCMD_FRAME( 4, 3),
+ ANIMCMD_FRAME( 8, 3),
+ ANIMCMD_FRAME(12, 3),
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_FRAME(20, 3),
+ ANIMCMD_FRAME(24, 3),
+ ANIMCMD_FRAME(28, 3),
+ ANIMCMD_FRAME(32, 3),
+ ANIMCMD_FRAME(36, 3),
+ ANIMCMD_FRAME(40, 3),
+ ANIMCMD_FRAME(44, 3),
+ ANIMCMD_LOOP(2),
+ ANIMCMD_FRAME( 0, 3),
+ ANIMCMD_END
+};
+
+const union AnimCmd *const gSpriteAnimTable_82158F8[] = {
+ gSpriteAnim_8215880,
+ gSpriteAnim_82158BC
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_8215900[] = {
+ AFFINEANIMCMD_FRAME(0, 0, 0, 1),
+ AFFINEANIMCMD_END
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_8215910[] = {
+ AFFINEANIMCMD_FRAME(-8, 0, 0, 20),
+ AFFINEANIMCMD_END
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_8215920[] = {
+ AFFINEANIMCMD_FRAME(0x60, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME( 0, 0, 0, 5),
+ AFFINEANIMCMD_FRAME( 8, 0, 0, 20),
+ AFFINEANIMCMD_END
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_8215940[] = {
+ gSpriteAffineAnim_8215900,
+ gSpriteAffineAnim_8215910,
+ gSpriteAffineAnim_8215920
+};
+
+const struct SpriteSheet gUnknown_0821594C = {
+ (const u8 *)gTradeBallTiles, 0x600, 5557
+};
+
+const struct SpritePalette gUnknown_08215954 = {
+ gTradeBallPalette, 5558
+};
+
+const struct SpriteTemplate gSpriteTemplate_821595C = {
+ 5557,
+ 5558,
+ &gOamData_8215878,
+ gSpriteAnimTable_82158F8,
+ NULL,
+ gSpriteAffineAnimTable_8215940,
+ sub_804D6BC
+};
+
+const struct OamData gOamData_8215974 = {
+ .affineMode = 1,
+ .objMode = 1,
+ .size = 2,
+ .priority = 1
+};
+
+const union AnimCmd gSpriteAnim_821597C[] = {
+ ANIMCMD_FRAME(0, 5, .hFlip = TRUE, .vFlip = TRUE),
+ ANIMCMD_END
+};
+
+const union AnimCmd *const gSpriteAnimTable_8215984[] = {
+ gSpriteAnim_821597C
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_8215988[] = {
+ AFFINEANIMCMD_FRAME(-10, -10, 0, 5),
+ AFFINEANIMCMD_FRAME(10, 10, 0, 5),
+ AFFINEANIMCMD_JUMP(0)
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_82159A0[] = {
+ gSpriteAffineAnim_8215988
+};
+
+const struct SpriteSheet gUnknown_082159A4 = {
+ (const u8 *)gTradeGlow1Tiles, 0x200, 5550
+};
+
+const struct SpritePalette gUnknown_082159AC = {
+ gTradeGlowPalette, 5551
+};
+
+const struct SpritePalette gUnknown_082159B4 = {
+ gTradeCableEndPalette, 5555
+};
+
+const struct SpriteTemplate gSpriteTemplate_82159BC = {
+ 5550,
+ 5551,
+ &gOamData_8215974,
+ gSpriteAnimTable_8215984,
+ NULL,
+ gSpriteAffineAnimTable_82159A0,
+ sub_804B058
+};
+
+const struct OamData gOamData_82159D4 = {
+ .shape = ST_OAM_V_RECTANGLE,
+ .size = 2,
+ .priority = 1
+};
+
+const union AnimCmd gSpriteAnim_82159DC[] = {
+ ANIMCMD_FRAME(0, 5, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_END
+};
+
+const union AnimCmd gSpriteAnim_82159E4[] = {
+ ANIMCMD_FRAME(8, 5, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_END
+};
+
+const union AnimCmd *const gSpriteAnimTable_82159EC[] = {
+ gSpriteAnim_82159DC,
+ gSpriteAnim_82159E4
+};
+
+const struct SpriteSheet gUnknown_082159F4 = {
+ (const u8 *)gTradeGlow2Tiles, 0x300, 5552
+};
+
+const struct SpriteTemplate gSpriteTemplate_82159FC = {
+ 5552,
+ 5551,
+ &gOamData_82159D4,
+ gSpriteAnimTable_82159EC,
+ NULL,
+ gDummySpriteAffineAnimTable,
+ sub_804B07C
+};
+
+const struct OamData gOamData_8215A14 = {
+ .shape = ST_OAM_V_RECTANGLE,
+ .size = 2,
+ .priority = 1
+};
+
+const union AnimCmd gSpriteAnim_8215A1C[] = {
+ ANIMCMD_FRAME(0, 10),
+ ANIMCMD_END
+};
+
+const union AnimCmd *const gSpriteAnimTable_8215A24[] = {
+ gSpriteAnim_8215A1C
+};
+
+const struct SpriteSheet gUnknown_08215A28 = {
+ (const u8 *)gTradeCableEndTiles, 0x100, 5554
+};
+
+const struct SpriteTemplate gSpriteTemplate_8215A30 = {
+ 5554,
+ 5555,
+ &gOamData_8215A14,
+ gSpriteAnimTable_8215A24,
+ NULL,
+ gDummySpriteAffineAnimTable,
+ sub_804B0BC
+};
+
+const struct OamData gOamData_8215A48 = {
+ .shape = ST_OAM_H_RECTANGLE,
+ .size = 3,
+ .priority = 1
+};
+
+const union AnimCmd gSpriteAnim_8215A50[] = {
+ ANIMCMD_FRAME( 0, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(64, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(96, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(64, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME( 0, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_LOOP(8),
+ ANIMCMD_END
+};
+
+const union AnimCmd *const gSpriteAnimTable_8215A74[] = {
+ gSpriteAnim_8215A50
+};
+
+const struct SpriteSheet gUnknown_08215A78 = {
+ (const u8 *)gTradeGBAScreenTiles, 0x1000, 5556
+};
+
+const struct SpriteTemplate gSpriteTemplate_8215A80 = {
+ 5556,
+ 5555,
+ &gOamData_8215A48,
+ gSpriteAnimTable_8215A74,
+ NULL,
+ gDummySpriteAffineAnimTable,
+ sub_804B104
+};
+
+const u16 gTradeGlow2PaletteAnimTable[] = {
+ RGB(18, 24, 31),
+ RGB(18, 24, 31),
+ RGB(18, 24, 31),
+ RGB(31, 31, 31),
+ RGB(31, 31, 31),
+ RGB(31, 31, 31),
+ RGB(18, 24, 31),
+ RGB(18, 24, 31),
+ RGB(18, 24, 31),
+ RGB(31, 31, 31),
+ RGB(31, 31, 31),
+ RGB(31, 31, 31),
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_8215AB0[] = {
+ AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_JUMP(0)
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_8215AC0[] = {
+ gSpriteAffineAnim_8215AB0
+};
const struct InGameTrade gIngameTrades[] = {
{
@@ -3174,6 +3497,456 @@ static bool8 sub_804ABF8(void)
asm(".section .text.sub_804DAD4");
+bool8 sub_804C29C(void)
+{
+ u16 evoTarget;
+
+ switch (gUnknown_03004828->unk_00c4)
+ {
+ case 0:
+ gSprites[gUnknown_03004828->unk_00b8].invisible = FALSE;
+ gSprites[gUnknown_03004828->unk_00b8].pos2.x = -0xb4;
+ gSprites[gUnknown_03004828->unk_00b8].pos2.y = gMonFrontPicCoords[gUnknown_03004828->unk_0120].y_offset;
+ gUnknown_03004828->unk_00c4 ++;
+ gUnknown_03004828->unk_0124 = GetCurrentMapMusic();
+ PlayBGM(BGM_SHINKA);
+ break;
+ case 1:
+ if (gUnknown_03004828->unk_0116 > 0)
+ {
+ gSprites[gUnknown_03004828->unk_00b8].pos2.x += 3;
+ gUnknown_03004828->unk_0116 -= 3;
+ }
+ else
+ {
+ gSprites[gUnknown_03004828->unk_00b8].pos2.x = 0;
+ gUnknown_03004828->unk_0116 = 0;
+ gUnknown_03004828->unk_00c4 = 10;
+ }
+ break;
+
+ case 10:
+ StringExpandPlaceholders(gStringVar4, gTradeText_WillBeSent);
+ sub_8003460(&gUnknown_03004828->window, gStringVar4, gUnknown_03004828->unk_0034, 2, 15);
+ gUnknown_03004828->unk_00c4 = 11;
+ gUnknown_03004828->unk_00c0 = 0;
+ break;
+ case 11:
+ if (++gUnknown_03004828->unk_00c0 == 80)
+ {
+ gUnknown_03004828->unk_0102 = sub_8047580(gUnknown_03004828->unk_00b8, gSprites[gUnknown_03004828->unk_00b8].oam.paletteNum, 0x78, 0x20, 0x2, 0x1, 0x14, 0xfffff);
+ gUnknown_03004828->unk_00c4 ++;
+ ZeroFillWindowRect(&gUnknown_03004828->window, 0, 0, 29, 19);
+ StringExpandPlaceholders(gStringVar4, gTradeText_ByeBye);
+ sub_8003460(&gUnknown_03004828->window, gStringVar4, gUnknown_03004828->unk_0034, 2, 15);
+ }
+ break;
+ case 12:
+ if (gSprites[gUnknown_03004828->unk_0102].callback == SpriteCallbackDummy && sub_80035AC(&gUnknown_03004828->window) == TRUE)
+ {
+ gUnknown_03004828->unk_0103 = CreateSprite(&gSpriteTemplate_821595C, 0x78, 0x20, 0);
+ gSprites[gUnknown_03004828->unk_0103].callback = sub_804D738;
+ DestroySprite(&gSprites[gUnknown_03004828->unk_0102]);
+ gUnknown_03004828->unk_00c4 ++;
+ }
+ break;
+ case 13:
+ // The game waits here for the sprite to finish its animation sequence.
+ break;
+ case 14:
+ BeginNormalPaletteFade(-1, 0, 0, 16, 0);
+ gUnknown_03004828->unk_00c4 = 20;
+ break;
+
+ case 20:
+ if (!gPaletteFade.active)
+ {
+ sub_804BBE8(4);
+ gUnknown_03004828->unk_00c4 ++;
+ }
+ break;
+ case 21:
+ BeginNormalPaletteFade(-1, -1, 16, 0, 0);
+ gUnknown_03004828->unk_00c4 ++;
+ break;
+ case 22:
+ if (!gPaletteFade.active)
+ {
+ gUnknown_03004828->unk_00c4 = 23;
+ }
+ break;
+ case 23:
+ if (gUnknown_03004828->unk_011a > 0x100)
+ {
+ gUnknown_03004828->unk_011a -= 0x34;
+ }
+ else
+ {
+ sub_804BBE8(1);
+ gUnknown_03004828->unk_011a = 0x80;
+ gUnknown_03004828->unk_00c4 ++;
+ gUnknown_03004828->unk_00c0 = 0;
+ }
+ gUnknown_03004828->unk_0118 = 0x8000 / gUnknown_03004828->unk_011a;
+ break;
+ case 24:
+ if (++ gUnknown_03004828->unk_00c0 > 20)
+ {
+ sub_804BBE8(3);
+ sub_804B128();
+ gUnknown_03004828->unk_00bb = CreateSprite(&gSpriteTemplate_8215A80, 0x78, 0x50, 0);
+ gUnknown_03004828->unk_00c4 ++;
+ }
+ break;
+ case 25:
+ if (gSprites[gUnknown_03004828->unk_00bb].animEnded)
+ {
+ DestroySprite(&gSprites[gUnknown_03004828->unk_00bb]);
+ REG_BLDCNT = 0x640;
+ REG_BLDALPHA = 0x40C;
+ gUnknown_03004828->unk_00c4 ++;
+ }
+ break;
+ case 26:
+ if (-- gUnknown_03004828->unk_0110 == 0x13C)
+ {
+ gUnknown_03004828->unk_00c4 ++;
+ }
+ if (gUnknown_03004828->unk_0110 == 0x148)
+ {
+ gUnknown_03004828->unk_00bc = CreateSprite(&gSpriteTemplate_8215A30, 0x80, 0x41, 0);
+ }
+ break;
+ case 27:
+ gUnknown_03004828->unk_00ba = CreateSprite(&gSpriteTemplate_82159BC, 0x80, 0x50, 3);
+ gUnknown_03004828->unk_00bb = CreateSprite(&gSpriteTemplate_82159FC, 0x80, 0x50, 0);
+ StartSpriteAnim(&gSprites[gUnknown_03004828->unk_00bb], 1);
+ gUnknown_03004828->unk_00c4 ++;
+ break;
+ case 28:
+ if ((gUnknown_03004828->unk_0110 -= 2) == 0xA6)
+ {
+ gUnknown_03004828->unk_00c4 = 200;
+ }
+ sub_804C0F8(0);
+ REG_DISPCNT = DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON;
+ break;
+ case 200:
+ gSprites[gUnknown_03004828->unk_00ba].pos1.y -= 2;
+ gSprites[gUnknown_03004828->unk_00bb].pos1.y -= 2;
+ sub_804C0F8(0);
+ if (gSprites[gUnknown_03004828->unk_00ba].pos1.y < -8)
+ {
+ gUnknown_03004828->unk_00c4 = 29;
+ }
+ break;
+ case 29:
+ BeginNormalPaletteFade(-1, -1, 0, 16, 0);
+ gUnknown_03004828->unk_00c4 = 30;
+ break;
+ case 30:
+ if (!gPaletteFade.active)
+ {
+ DestroySprite(&gSprites[gUnknown_03004828->unk_00ba]);
+ DestroySprite(&gSprites[gUnknown_03004828->unk_00bb]);
+ sub_804BBE8(2);
+ gUnknown_03004828->unk_00c4 ++;
+ }
+ break;
+ case 31:
+ BeginNormalPaletteFade(-1, -1, 16, 0, 0);
+ gUnknown_03004828->unk_00ba = CreateSprite(&gSpriteTemplate_82159FC, 0x6f, 0xaa, 0);
+ gUnknown_03004828->unk_00bb = CreateSprite(&gSpriteTemplate_82159FC, 0x81, -0xa, 0);
+ gUnknown_03004828->unk_00c4 ++;
+ break;
+ case 32:
+ if (!gPaletteFade.active)
+ {
+ PlaySE(SE_TK_WARPOUT);
+ gUnknown_03004828->unk_00c4 ++;
+ }
+ gSprites[gUnknown_03004828->unk_00ba].pos2.y -= 3;
+ gSprites[gUnknown_03004828->unk_00bb].pos2.y += 3;
+ break;
+ case 33:
+ gSprites[gUnknown_03004828->unk_00ba].pos2.y -= 3;
+ gSprites[gUnknown_03004828->unk_00bb].pos2.y += 3;
+ if (gSprites[gUnknown_03004828->unk_00ba].pos2.y <= -0x5a)
+ {
+ gSprites[gUnknown_03004828->unk_00ba].data1 = 1;
+ gSprites[gUnknown_03004828->unk_00bb].data1 = 1;
+ gUnknown_03004828->unk_00c4 ++;
+ }
+ break;
+ case 34:
+ BlendPalettes(1, 16, 0xffff);
+ gUnknown_03004828->unk_00c4 ++;
+ break;
+ case 35:
+ BlendPalettes(1, 0, 0xffff);
+ gUnknown_03004828->unk_00c4 ++;
+ break;
+ case 36:
+ BlendPalettes(1, 16, 0xffff);
+ gUnknown_03004828->unk_00c4 ++;
+ break;
+ case 37:
+ if (!sub_8040A3C(gUnknown_03004828->unk_0120))
+ {
+ gSprites[gUnknown_03004828->unk_00b8].affineAnims = gSpriteAffineAnimTable_8215AC0;
+ gSprites[gUnknown_03004828->unk_00b8].oam.affineMode = 3;
+ CalcCenterToCornerVec(&gSprites[gUnknown_03004828->unk_00b8], 0, 3, 3);
+ StartSpriteAffineAnim(&gSprites[gUnknown_03004828->unk_00b8], 0);
+ }
+ else
+ {
+ StartSpriteAffineAnim(&gSprites[gUnknown_03004828->unk_00b8], 0);
+ }
+ StartSpriteAffineAnim(&gSprites[gUnknown_03004828->unk_00b9], 0);
+ gSprites[gUnknown_03004828->unk_00b8].pos1.x = 0x3c;
+ gSprites[gUnknown_03004828->unk_00b9].pos1.x = 0xb4;
+ gSprites[gUnknown_03004828->unk_00b8].pos1.y = 0xc0;
+ gSprites[gUnknown_03004828->unk_00b9].pos1.y = -0x20;
+ gSprites[gUnknown_03004828->unk_00b8].invisible = FALSE;
+ gSprites[gUnknown_03004828->unk_00b9].invisible = FALSE;
+ gUnknown_03004828->unk_00c4 ++;
+ break;
+ case 38:
+ gSprites[gUnknown_03004828->unk_00b8].pos2.y -= 3;
+ gSprites[gUnknown_03004828->unk_00b9].pos2.y += 3;
+ if (-0xa0 > gSprites[gUnknown_03004828->unk_00b8].pos2.y && gSprites[gUnknown_03004828->unk_00b8].pos2.y >= -0xa3)
+ {
+ PlaySE(SE_TK_WARPIN);
+ }
+ if (gSprites[gUnknown_03004828->unk_00b8].pos2.y < -0xde)
+ {
+ gSprites[gUnknown_03004828->unk_00ba].data1 = 0;
+ gSprites[gUnknown_03004828->unk_00bb].data1 = 0;
+ gUnknown_03004828->unk_00c4 ++;
+ gSprites[gUnknown_03004828->unk_00b8].invisible = TRUE;
+ gSprites[gUnknown_03004828->unk_00b9].invisible = TRUE;
+ BlendPalettes(1, 0, 0xffff);
+ }
+ break;
+ case 39:
+ gSprites[gUnknown_03004828->unk_00ba].pos2.y -= 3;
+ gSprites[gUnknown_03004828->unk_00bb].pos2.y += 3;
+ if (gSprites[gUnknown_03004828->unk_00ba].pos2.y <= -0xde)
+ {
+ BeginNormalPaletteFade(-1, -1, 0, 16, 0);
+ gUnknown_03004828->unk_00c4 ++;
+ DestroySprite(&gSprites[gUnknown_03004828->unk_00ba]);
+ DestroySprite(&gSprites[gUnknown_03004828->unk_00bb]);
+ }
+ break;
+ case 40:
+ if (!gPaletteFade.active)
+ {
+ gUnknown_03004828->unk_00c4 ++;
+ sub_804BBE8(1);
+ gUnknown_03004828->unk_0110 = 0xa6;
+ gUnknown_03004828->unk_00ba = CreateSprite(&gSpriteTemplate_82159BC, 0x80, -0x14, 3);
+ gUnknown_03004828->unk_00bb = CreateSprite(&gSpriteTemplate_82159FC, 0x80, -0x14, 0);
+ StartSpriteAnim(&gSprites[gUnknown_03004828->unk_00bb], 1);
+ }
+ break;
+ case 41:
+ BeginNormalPaletteFade(-1, -1, 16, 0, 0);
+ gUnknown_03004828->unk_00c4 ++;
+ break;
+ case 42:
+ REG_DISPCNT = DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON;
+ sub_804C0F8(1);
+ if (!gPaletteFade.active)
+ {
+ gUnknown_03004828->unk_00c4 ++;
+ }
+ break;
+ case 43:
+ sub_804C0F8(1);
+ gSprites[gUnknown_03004828->unk_00ba].pos2.y += 3;
+ gSprites[gUnknown_03004828->unk_00bb].pos2.y += 3;
+ if (gSprites[gUnknown_03004828->unk_00ba].pos2.y + gSprites[gUnknown_03004828->unk_00ba].pos1.y == 64)
+ {
+ gUnknown_03004828->unk_00c4 ++;
+ }
+ break;
+ case 44:
+ sub_804C0F8(1);
+ if ((gUnknown_03004828->unk_0110 += 2) > 0x13c)
+ {
+ gUnknown_03004828->unk_0110 = 0x13c;
+ gUnknown_03004828->unk_00c4 ++;
+ }
+ break;
+ case 45:
+ DestroySprite(&gSprites[gUnknown_03004828->unk_00ba]);
+ DestroySprite(&gSprites[gUnknown_03004828->unk_00bb]);
+ gUnknown_03004828->unk_00c4 ++;
+ gUnknown_03004828->unk_00c0 = 0;
+ break;
+ case 46:
+ if (++ gUnknown_03004828->unk_00c0 == 10)
+ {
+ gUnknown_03004828->unk_00c4 ++;
+ }
+ break;
+ case 47:
+ if (++ gUnknown_03004828->unk_0110 > 0x15c)
+ {
+ gUnknown_03004828->unk_0110 = 0x15c;
+ gUnknown_03004828->unk_00c4 ++;
+ }
+ if (gUnknown_03004828->unk_0110 == 0x148)
+ gUnknown_03004828->unk_00bc = CreateSprite(&gSpriteTemplate_8215A30, 0x80, 0x41, 0);
+ gSprites[gUnknown_03004828->unk_00bc].callback = sub_804B0E0;
+ break;
+ case 48:
+ gUnknown_03004828->unk_00bb = CreateSprite(&gSpriteTemplate_8215A80, 0x78, 0x50, 0);
+ gUnknown_03004828->unk_00c4 = 50;
+ break;
+
+ case 50:
+ if (gSprites[gUnknown_03004828->unk_00bb].animEnded)
+ {
+ DestroySprite(&gSprites[gUnknown_03004828->unk_00bb]);
+ sub_804BBE8(6);
+ gUnknown_03004828->unk_00c4 ++;
+ PlaySE(SE_W028);
+ }
+ break;
+ case 51:
+ if (gUnknown_03004828->unk_011a < 0x400)
+ {
+ gUnknown_03004828->unk_011a += 0x34;
+ }
+ else
+ {
+ gUnknown_03004828->unk_011a = 0x400;
+ gUnknown_03004828->unk_00c4 ++;
+ }
+ gUnknown_03004828->unk_0118 = 0x8000 / gUnknown_03004828->unk_011a;
+ break;
+ case 52:
+ BeginNormalPaletteFade(-1, 0, 0, 16, 0);
+ gUnknown_03004828->unk_00c4 = 60;
+ break;
+
+ case 60:
+ if (!gPaletteFade.active)
+ {
+ sub_804BBE8(5);
+ sub_804BBE8(7);
+ gUnknown_03004828->unk_00c4 ++;
+ }
+ break;
+ case 61:
+ BeginNormalPaletteFade(-1, 0, 16, 0, 0);
+ gUnknown_03004828->unk_00c4 ++;
+ break;
+ case 62:
+ REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_OBJ_ON;
+ if (!gPaletteFade.active)
+ {
+ gUnknown_03004828->unk_00c4 ++;
+ }
+ break;
+ case 63:
+ gUnknown_03004828->unk_0103 = CreateSprite(&gSpriteTemplate_821595C, 0x78, -0x8, 0);
+ gSprites[gUnknown_03004828->unk_0103].data3 = 0x4a;
+ gSprites[gUnknown_03004828->unk_0103].callback = sub_804D80C;
+ StartSpriteAnim(&gSprites[gUnknown_03004828->unk_0103], 1);
+ StartSpriteAffineAnim(&gSprites[gUnknown_03004828->unk_0103], 2);
+ BlendPalettes(1 << (16 + gSprites[gUnknown_03004828->unk_0103].oam.paletteNum), 16, 0xffff);
+ gUnknown_03004828->unk_00c4 ++;
+ gUnknown_03004828->unk_00c0 = 0;
+ break;
+ case 64:
+ BeginNormalPaletteFade(1 << (16 + gSprites[gUnknown_03004828->unk_0103].oam.paletteNum), 1, 16, 0, 0xffff);
+ gUnknown_03004828->unk_00c4 ++;
+ break;
+ case 65:
+ if (gSprites[gUnknown_03004828->unk_0103].callback == SpriteCallbackDummy)
+ {
+ gUnknown_03004828->unk_00c4 ++;
+ }
+ break;
+ case 66:
+ gSprites[gUnknown_03004828->unk_00b9].pos1.x = 0x78;
+ gSprites[gUnknown_03004828->unk_00b9].pos1.y = gMonFrontPicCoords[gUnknown_03004828->unk_0122].y_offset + 60;
+ gSprites[gUnknown_03004828->unk_00b9].pos2.x = 0;
+ gSprites[gUnknown_03004828->unk_00b9].pos2.y = 0;
+ CreatePokeballSprite(gUnknown_03004828->unk_00b9, gSprites[gUnknown_03004828->unk_00b9].oam.paletteNum, 0x78, 0x54, 2, 1, 0x14, 0xfffff);
+ FreeSpriteOamMatrix(&gSprites[gUnknown_03004828->unk_0103]);
+ DestroySprite(&gSprites[gUnknown_03004828->unk_0103]);
+ gUnknown_03004828->unk_00c4 ++;
+ break;
+ case 67:
+ REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON;
+ ZeroFillWindowRect(&gUnknown_03004828->window, 0, 0, 29, 19);
+ StringExpandPlaceholders(gStringVar4, gTradeText_SentOverPoke);
+ sub_8003460(&gUnknown_03004828->window, gStringVar4, gUnknown_03004828->unk_0034, 2, 15);
+ gUnknown_03004828->unk_00c4 ++;
+ gUnknown_03004828->unk_00c0 = 0;
+ break;
+ case 68:
+ if (++ gUnknown_03004828->unk_00c0 == 4)
+ {
+ PlayFanfare(BGM_FANFA5);
+ }
+ if (gUnknown_03004828->unk_00c0 == 0xf0)
+ {
+ gUnknown_03004828->unk_00c4 ++;
+ ZeroFillWindowRect(&gUnknown_03004828->window, 0, 0, 29, 19);
+ StringExpandPlaceholders(gStringVar4, gTradeText_TakeGoodCare);
+ sub_8003460(&gUnknown_03004828->window, gStringVar4, gUnknown_03004828->unk_0034, 2, 15);
+ gUnknown_03004828->unk_00c0 = 0;
+ }
+ break;
+ case 69: // OneHand
+ if (++ gUnknown_03004828->unk_00c0 == 60)
+ {
+ gUnknown_03004828->unk_00c4 ++;
+ }
+ break;
+ case 70:
+ sub_804E1DC();
+ gUnknown_03004828->unk_00c4 ++;
+ break;
+ case 71:
+ if (gUnknown_03004828->unk_011e)
+ {
+ return TRUE;
+ }
+ else if (gMain.newKeys & A_BUTTON)
+ {
+ gUnknown_03004828->unk_00c4 ++;
+ }
+ break;
+ case 72: // Only if in-game trade
+ sub_804BA94(gSpecialVar_0x8005, 0);
+ gUnknown_03005E94 = sub_804BBCC;
+ evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gUnknown_020297D8[0]], TRUE, ITEM_NONE);
+ if (evoTarget != SPECIES_NONE)
+ TradeEvolutionScene(&gPlayerParty[gUnknown_020297D8[0]], evoTarget, gUnknown_03004828->unk_00b9, gUnknown_020297D8[0]);
+ gUnknown_03004828->unk_00c4 ++;
+ break;
+ case 73:
+ BeginNormalPaletteFade(-1, 0, 0, 16, 0);
+ gUnknown_03004828->unk_00c4 ++;
+ break;
+ case 74:
+ if (!gPaletteFade.active)
+ {
+ PlayBGM(gUnknown_03004828->unk_0124);
+ SetMainCallback2(c2_exit_to_overworld_2_switch);
+ sub_804D8E4();
+ }
+ break;
+ }
+ return FALSE;
+}
+
void sub_804D588(void)
{
u16 evoTarget;
@@ -3272,7 +4045,7 @@ void sub_804D7AC(struct Sprite *sprite)
if (++ sprite->data0 == 23)
{
DestroySprite(sprite);
- gUnknown_03004828->unk_00c4 = 14;
+ gUnknown_03004828->unk_00c4 = 14; // Resume the master trade animation
}
}
}