diff options
-rw-r--r-- | asm/trade.s | 156 | ||||
-rw-r--r-- | include/pokemon.h | 1 | ||||
-rw-r--r-- | src/trade.c | 112 |
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; |