summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2017-09-04 20:27:26 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2017-09-04 20:27:26 -0400
commit12c4614cc396830f62c02c65547a3465829be5c8 (patch)
tree0f9bb98b991af569bcd94650dcfd35809d94a587
parent67f39a3b7363fc74539b15a023c340b45b91af14 (diff)
sub_804B2D0
-rw-r--r--asm/trade.s156
-rw-r--r--include/pokemon.h1
-rw-r--r--src/trade.c112
3 files changed, 74 insertions, 195 deletions
diff --git a/asm/trade.s b/asm/trade.s
index 99c3e8e7d..ba5cef071 100644
--- a/asm/trade.s
+++ b/asm/trade.s
@@ -808,160 +808,4 @@ _0804B2CC:
bx r1
thumb_func_end sub_804B2B0
- thumb_func_start sub_804B2D0
-sub_804B2D0: @ 804B2D0
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0xC
- lsls r0, 24
- lsrs r7, r0, 24
- lsls r1, 24
- lsrs r5, r1, 24
- movs r4, 0
- mov r10, r4
- cmp r7, 0
- bne _0804B2FC
- ldr r0, _0804B324 @ =gUnknown_020297D8
- ldrb r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _0804B328 @ =gPlayerParty
- adds r1, r0
- mov r10, r1
- movs r4, 0x1
-_0804B2FC:
- cmp r7, 0x1
- bne _0804B31A
- ldr r0, _0804B324 @ =gUnknown_020297D8
- ldrb r0, [r0, 0x1]
- movs r1, 0x6
- bl __umodsi3
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x64
- muls r1, r0
- ldr r0, _0804B32C @ =gEnemyParty
- adds r1, r0
- mov r10, r1
- movs r4, 0x3
-_0804B31A:
- cmp r5, 0
- beq _0804B330
- cmp r5, 0x1
- beq _0804B3A4
- b _0804B3FA
- .align 2, 0
-_0804B324: .4byte gUnknown_020297D8
-_0804B328: .4byte gPlayerParty
-_0804B32C: .4byte gEnemyParty
-_0804B330:
- mov r0, r10
- movs r1, 0x41
- bl GetMonData
- adds r5, r0, 0
- lsls r5, 16
- lsrs r5, 16
- mov r0, r10
- movs r1, 0
- bl GetMonData
- mov r9, r0
- lsls r0, r5, 3
- ldr r1, _0804B390 @ =gMonFrontPicTable
- adds r0, r1
- ldr r1, _0804B394 @ =gMonFrontPicCoords
- lsls r2, r5, 2
- adds r2, r1
- ldrb r1, [r2]
- ldrb r2, [r2, 0x1]
- ldr r3, _0804B398 @ =0x02000000
- ldr r6, _0804B39C @ =gUnknown_081FAF4C
- lsls r7, 1
- mov r8, r7
- mov r4, r8
- adds r4, 0x1
- lsls r4, 2
- adds r4, r6
- ldr r4, [r4]
- str r4, [sp]
- str r5, [sp, 0x4]
- mov r4, r9
- str r4, [sp, 0x8]
- bl HandleLoadSpecialPokePic
- mov r0, r10
- bl sub_8040990
- bl LoadCompressedObjectPalette
- ldr r0, _0804B3A0 @ =gUnknown_03004828
- ldr r0, [r0]
- movs r1, 0x90
- lsls r1, 1
- adds r0, r1
- add r0, r8
- strh r5, [r0]
- b _0804B3FA
- .align 2, 0
-_0804B390: .4byte gMonFrontPicTable
-_0804B394: .4byte gMonFrontPicCoords
-_0804B398: .4byte 0x02000000
-_0804B39C: .4byte gUnknown_081FAF4C
-_0804B3A0: .4byte gUnknown_03004828
-_0804B3A4:
- mov r0, r10
- bl sub_8040990
- ldrh r0, [r0, 0x4]
- adds r1, r4, 0
- bl GetMonSpriteTemplate_803C56C
- ldr r0, _0804B40C @ =gUnknown_02024E8C
- movs r1, 0x78
- movs r2, 0x3C
- movs r3, 0x6
- bl CreateSprite
- ldr r4, _0804B410 @ =gUnknown_03004828
- ldr r1, [r4]
- adds r1, 0xB8
- adds r1, r7
- strb r0, [r1]
- ldr r3, _0804B414 @ =gSprites
- ldr r0, [r4]
- adds r0, 0xB8
- adds r0, r7
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- adds r0, 0x3E
- ldrb r1, [r0]
- movs r2, 0x4
- orrs r1, r2
- strb r1, [r0]
- ldr r0, [r4]
- adds r0, 0xB8
- adds r0, r7
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r3, 0x1C
- adds r0, r3
- ldr r1, _0804B418 @ =SpriteCallbackDummy
- str r1, [r0]
-_0804B3FA:
- add sp, 0xC
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0804B40C: .4byte gUnknown_02024E8C
-_0804B410: .4byte gUnknown_03004828
-_0804B414: .4byte gSprites
-_0804B418: .4byte SpriteCallbackDummy
- thumb_func_end sub_804B2D0
-
.align 2, 0 @ Don't pad with nop.
diff --git a/include/pokemon.h b/include/pokemon.h
index ba9d7237e..6ff36a2c4 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -600,5 +600,6 @@ bool32 sub_8040D3C(u16 species, u8 *name, u8 language);
s8 sub_8040A54(struct Pokemon *, u8);
u16 GetMonEVCount(struct Pokemon *);
u16 GetEvolutionTargetSpecies(struct Pokemon *, u8, u16);
+const struct CompressedSpritePalette *sub_8040990(struct Pokemon *);
#endif // GUARD_POKEMON_H
diff --git a/src/trade.c b/src/trade.c
index aa3296969..2532e6e89 100644
--- a/src/trade.c
+++ b/src/trade.c
@@ -35,6 +35,7 @@
#include "evolution_scene.h"
#include "pokeball.h"
#include "pokedex.h"
+#include "field_effect.h"
#include "trade.h"
#ifdef ENGLISH
@@ -135,8 +136,7 @@ struct TradeEwramSubstruct2 {
/*0x009e*/ u16 linkData[12];
/*0x00b6*/ u16 unk_00b6;
// Sprite indices
- /*0x00b8*/ u8 unk_00b8;
- /*0x00b9*/ u8 unk_00b9;
+ /*0x00b8*/ u8 unk_00b8[2];
/*0x00ba*/ u8 unk_00ba;
/*0x00bb*/ u8 unk_00bb;
/*0x00bc*/ u8 unk_00bc;
@@ -162,8 +162,7 @@ struct TradeEwramSubstruct2 {
/*0x011a*/ u16 unk_011a;
/*0x011c*/ u16 unk_011c;
/*0x011e*/ u8 isLinkTrade;
- /*0x0120*/ u16 unk_0120;
- /*0x0122*/ u16 unk_0122;
+ /*0x0120*/ u16 unk_0120[2];
/*0x0124*/ u16 unk_0124;
};
@@ -3514,7 +3513,42 @@ void sub_804B228(void);
void sub_804B24C(void);
-void sub_804B2D0(u8, u8);
+void sub_804B2D0(u8 whichParty, u8 a1)
+{
+ u8 v0;
+ struct Pokemon *pokemon;
+ u16 species;
+ u32 personality;
+
+ v0 = 0;
+ pokemon = NULL;
+ if (whichParty == 0)
+ {
+ pokemon = &gPlayerParty[gUnknown_020297D8[0]];
+ v0 = 1;
+ }
+ if (whichParty == 1)
+ {
+ pokemon = &gEnemyParty[gUnknown_020297D8[1] % 6];
+ v0 = 3;
+ }
+ switch (a1)
+ {
+ case 0:
+ species = GetMonData(pokemon, MON_DATA_SPECIES2);
+ personality = GetMonData(pokemon, MON_DATA_PERSONALITY);
+ HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, (u32)ewram, gUnknown_081FAF4C[whichParty * 2 + 1], species, personality);
+ LoadCompressedObjectPalette(sub_8040990(pokemon));
+ gUnknown_03004828->unk_0120[whichParty] = species;
+ break;
+ case 1:
+ GetMonSpriteTemplate_803C56C(sub_8040990(pokemon)->tag, v0);
+ gUnknown_03004828->unk_00b8[whichParty] = CreateSprite(&gUnknown_02024E8C, 0x78, 0x3c, 0x6);
+ gSprites[gUnknown_03004828->unk_00b8[whichParty]].invisible = TRUE;
+ gSprites[gUnknown_03004828->unk_00b8[whichParty]].callback = SpriteCallbackDummy;
+ break;
+ }
+}
#ifdef NONMATCHING
void sub_804B41C(void)
@@ -4323,9 +4357,9 @@ bool8 sub_804C29C(void)
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;
+ gSprites[gUnknown_03004828->unk_00b8[0]].invisible = FALSE;
+ gSprites[gUnknown_03004828->unk_00b8[0]].pos2.x = -0xb4;
+ gSprites[gUnknown_03004828->unk_00b8[0]].pos2.y = gMonFrontPicCoords[gUnknown_03004828->unk_0120[0]].y_offset;
gUnknown_03004828->unk_00c4 ++;
gUnknown_03004828->unk_0124 = GetCurrentMapMusic();
PlayBGM(BGM_SHINKA);
@@ -4333,12 +4367,12 @@ bool8 sub_804C29C(void)
case 1:
if (gUnknown_03004828->unk_0116 > 0)
{
- gSprites[gUnknown_03004828->unk_00b8].pos2.x += 3;
+ gSprites[gUnknown_03004828->unk_00b8[0]].pos2.x += 3;
gUnknown_03004828->unk_0116 -= 3;
}
else
{
- gSprites[gUnknown_03004828->unk_00b8].pos2.x = 0;
+ gSprites[gUnknown_03004828->unk_00b8[0]].pos2.x = 0;
gUnknown_03004828->unk_0116 = 0;
gUnknown_03004828->unk_00c4 = 10;
}
@@ -4353,7 +4387,7 @@ bool8 sub_804C29C(void)
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_0102 = sub_8047580(gUnknown_03004828->unk_00b8[0], gSprites[gUnknown_03004828->unk_00b8[0]].oam.paletteNum, 0x78, 0x20, 0x2, 0x1, 0x14, 0xfffff);
gUnknown_03004828->unk_00c4 ++;
ZeroFillWindowRect(&gUnknown_03004828->window, 0, 0, 29, 19);
StringExpandPlaceholders(gStringVar4, gTradeText_ByeBye);
@@ -4510,40 +4544,40 @@ bool8 sub_804C29C(void)
gUnknown_03004828->unk_00c4 ++;
break;
case 37:
- if (!sub_8040A3C(gUnknown_03004828->unk_0120))
+ if (!sub_8040A3C(gUnknown_03004828->unk_0120[0]))
{
- 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);
+ gSprites[gUnknown_03004828->unk_00b8[0]].affineAnims = gSpriteAffineAnimTable_8215AC0;
+ gSprites[gUnknown_03004828->unk_00b8[0]].oam.affineMode = 3;
+ CalcCenterToCornerVec(&gSprites[gUnknown_03004828->unk_00b8[0]], 0, 3, 3);
+ StartSpriteAffineAnim(&gSprites[gUnknown_03004828->unk_00b8[0]], 0);
}
else
{
- StartSpriteAffineAnim(&gSprites[gUnknown_03004828->unk_00b8], 0);
+ StartSpriteAffineAnim(&gSprites[gUnknown_03004828->unk_00b8[0]], 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;
+ StartSpriteAffineAnim(&gSprites[gUnknown_03004828->unk_00b8[1]], 0);
+ gSprites[gUnknown_03004828->unk_00b8[0]].pos1.x = 0x3c;
+ gSprites[gUnknown_03004828->unk_00b8[1]].pos1.x = 0xb4;
+ gSprites[gUnknown_03004828->unk_00b8[0]].pos1.y = 0xc0;
+ gSprites[gUnknown_03004828->unk_00b8[1]].pos1.y = -0x20;
+ gSprites[gUnknown_03004828->unk_00b8[0]].invisible = FALSE;
+ gSprites[gUnknown_03004828->unk_00b8[1]].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)
+ gSprites[gUnknown_03004828->unk_00b8[0]].pos2.y -= 3;
+ gSprites[gUnknown_03004828->unk_00b8[1]].pos2.y += 3;
+ if (-0xa0 > gSprites[gUnknown_03004828->unk_00b8[0]].pos2.y && gSprites[gUnknown_03004828->unk_00b8[0]].pos2.y >= -0xa3)
{
PlaySE(SE_TK_WARPIN);
}
- if (gSprites[gUnknown_03004828->unk_00b8].pos2.y < -0xde)
+ if (gSprites[gUnknown_03004828->unk_00b8[0]].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;
+ gSprites[gUnknown_03004828->unk_00b8[0]].invisible = TRUE;
+ gSprites[gUnknown_03004828->unk_00b8[1]].invisible = TRUE;
BlendPalettes(1, 0, 0xffff);
}
break;
@@ -4691,11 +4725,11 @@ bool8 sub_804C29C(void)
}
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);
+ gSprites[gUnknown_03004828->unk_00b8[1]].pos1.x = 0x78;
+ gSprites[gUnknown_03004828->unk_00b8[1]].pos1.y = gMonFrontPicCoords[gUnknown_03004828->unk_0120[1]].y_offset + 60;
+ gSprites[gUnknown_03004828->unk_00b8[1]].pos2.x = 0;
+ gSprites[gUnknown_03004828->unk_00b8[1]].pos2.y = 0;
+ CreatePokeballSprite(gUnknown_03004828->unk_00b8[1], gSprites[gUnknown_03004828->unk_00b8[1]].oam.paletteNum, 0x78, 0x54, 2, 1, 0x14, 0xfffff);
FreeSpriteOamMatrix(&gSprites[gUnknown_03004828->unk_0103]);
DestroySprite(&gSprites[gUnknown_03004828->unk_0103]);
gUnknown_03004828->unk_00c4 ++;
@@ -4747,7 +4781,7 @@ bool8 sub_804C29C(void)
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]);
+ TradeEvolutionScene(&gPlayerParty[gUnknown_020297D8[0]], evoTarget, gUnknown_03004828->unk_00b8[1], gUnknown_020297D8[0]);
gUnknown_03004828->unk_00c4 ++;
break;
case 73:
@@ -4779,7 +4813,7 @@ void sub_804D588(void)
gUnknown_03005E94 = sub_804DC88;
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]);
+ TradeEvolutionScene(&gPlayerParty[gUnknown_020297D8[0]], evoTarget, gUnknown_03004828->unk_00b8[1], gUnknown_020297D8[0]);
else
SetMainCallback2(sub_804DC88);
gUnknown_020297D8[0] = 255;
@@ -4999,8 +5033,8 @@ void sub_804DB84(void)
{
if (sub_804C29C() == TRUE)
{
- DestroySprite(&gSprites[gUnknown_03004828->unk_00b8]);
- FreeSpriteOamMatrix(&gSprites[gUnknown_03004828->unk_00b9]);
+ DestroySprite(&gSprites[gUnknown_03004828->unk_00b8[0]]);
+ FreeSpriteOamMatrix(&gSprites[gUnknown_03004828->unk_00b8[1]]);
sub_804BA94(gUnknown_020297D8[0], gUnknown_020297D8[1] % 6);
gUnknown_03004828->linkData[0] = 0xabcd;
gUnknown_03004828->unk_00bd = 1;