summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/trade.s96
-rw-r--r--src/trade.c145
2 files changed, 83 insertions, 158 deletions
diff --git a/asm/trade.s b/asm/trade.s
index 210996176..453493da6 100644
--- a/asm/trade.s
+++ b/asm/trade.s
@@ -10,102 +10,6 @@
.set sub_804A96C_alt, sub_804A96C
.endif
- thumb_func_start sub_8049560
-sub_8049560: @ 8049560
- push {r4-r7,lr}
- adds r7, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldrb r0, [r7]
- bl sub_8049514
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0xC
- bne _080495B8
- ldr r5, _080495B0 @ =gUnknown_03004824
- ldr r0, [r5]
- adds r0, 0x40
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r4, _080495B4 @ =gSprites
- adds r0, r4
- movs r1, 0x1
- bl StartSpriteAnim
- ldr r2, [r5]
- adds r2, 0x40
- ldrb r1, [r2]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- movs r1, 0xE0
- strh r1, [r0, 0x20]
- ldrb r1, [r2]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- movs r1, 0xA0
- strh r1, [r0, 0x22]
- b _08049600
- .align 2, 0
-_080495B0: .4byte gUnknown_03004824
-_080495B4: .4byte gSprites
-_080495B8:
- ldr r4, _08049614 @ =gUnknown_03004824
- ldr r0, [r4]
- adds r0, 0x40
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r5, _08049618 @ =gSprites
- adds r0, r5
- movs r1, 0
- bl StartSpriteAnim
- ldr r4, [r4]
- adds r4, 0x40
- ldrb r0, [r4]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- ldr r2, _0804961C @ =gTradeMonSpriteCoords
- lsls r3, r6, 1
- adds r0, r3, r2
- ldrb r0, [r0]
- lsls r0, 3
- adds r0, 0x20
- strh r0, [r1, 0x20]
- ldrb r0, [r4]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- adds r2, 0x1
- adds r3, r2
- ldrb r0, [r3]
- lsls r0, 3
- strh r0, [r1, 0x22]
-_08049600:
- ldrb r0, [r7]
- cmp r0, r6
- beq _0804960C
- movs r0, 0x5
- bl PlaySE
-_0804960C:
- strb r6, [r7]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08049614: .4byte gUnknown_03004824
-_08049618: .4byte gSprites
-_0804961C: .4byte gTradeMonSpriteCoords
- thumb_func_end sub_8049560
-
thumb_func_start sub_8049620
sub_8049620: @ 8049620
push {r4,lr}
diff --git a/src/trade.c b/src/trade.c
index 76ff71204..c05bc0c63 100644
--- a/src/trade.c
+++ b/src/trade.c
@@ -75,9 +75,8 @@ struct TradeEwramSubstruct {
/*0x0041*/ u8 unk_0041;
/*0x0042*/ u8 playerPartyCount;
/*0x0043*/ u8 friendPartyCount;
- /*0x0044*/ u8 tradeIconsActive[12];
- /*0x0050*/ u8 unk_0050;
- /*0x0051*/ u8 filler_0044[0x24];
+ /*0x0044*/ u8 tradeMenuOptionsActive[13];
+ /*0x0051*/ u8 filler_0051[0x24];
/*0x0075*/ u8 unk_0075;
/*0x0076*/ u8 filler_0076[4];
/*0x007a*/ u8 unk_007a;
@@ -312,70 +311,70 @@ const u8 *const gUnknown_0820C14C[] = {
const u8 gTradeNextSelectedMonTable[][4][6] = {
{
- {4, 2, 12, 12, 0, 0},
- {2, 4, 12, 12, 0, 0},
- {7, 6, 1, 0, 0, 0},
- {1, 6, 7, 0, 0, 0}
+ { 4, 2, 12, 12, 0, 0},
+ { 2, 4, 12, 12, 0, 0},
+ { 7, 6, 1, 0, 0, 0},
+ { 1, 6, 7, 0, 0, 0}
}, {
- {5, 3, 12, 12, 0, 0},
- {3, 5, 12, 12, 0, 0},
- {0, 7, 6, 1, 0, 0},
- {6, 7, 0, 1, 0, 0}
+ { 5, 3, 12, 12, 0, 0},
+ { 3, 5, 12, 12, 0, 0},
+ { 0, 7, 6, 1, 0, 0},
+ { 6, 7, 0, 1, 0, 0}
}, {
- {0, 0, 0, 0, 0, 0},
- {4, 0, 0, 0, 0, 0},
- {9, 8, 7, 6, 0, 0},
- {3, 1, 0, 0, 0, 0}
+ { 0, 0, 0, 0, 0, 0},
+ { 4, 0, 0, 0, 0, 0},
+ { 9, 8, 7, 6, 0, 0},
+ { 3, 1, 0, 0, 0, 0}
}, {
- {1, 1, 1, 1, 0, 0},
- {5, 1, 1, 1, 0, 0},
- {2, 9, 8, 7, 0, 0},
- {8, 9, 6, 6, 0, 0}
+ { 1, 1, 1, 1, 0, 0},
+ { 5, 1, 1, 1, 0, 0},
+ { 2, 9, 8, 7, 0, 0},
+ { 8, 9, 6, 6, 0, 0}
}, {
- {2, 2, 2, 2, 0, 0},
- {0, 0, 0, 0, 0, 0},
- {11, 10, 9, 8, 7, 6},
- {5, 3, 1, 0, 0, 0}
+ { 2, 2, 2, 2, 0, 0},
+ { 0, 0, 0, 0, 0, 0},
+ {11, 10, 9, 8, 7, 6},
+ { 5, 3, 1, 0, 0, 0}
}, {
- {3, 3, 3, 3, 0, 0},
- {1, 1, 1, 1, 0, 0},
- {4, 4, 4, 4, 0, 0},
- {10, 8, 6, 0, 0, 0}
+ { 3, 3, 3, 3, 0, 0},
+ { 1, 1, 1, 1, 0, 0},
+ { 4, 4, 4, 4, 0, 0},
+ {10, 8, 6, 0, 0, 0}
}, {
- {10, 8, 12, 0, 0, 0},
- {8, 10, 12, 0, 0, 0},
- {1, 0, 0, 0, 0, 0},
- {7, 0, 1, 0, 0, 0}
+ {10, 8, 12, 0, 0, 0},
+ { 8, 10, 12, 0, 0, 0},
+ { 1, 0, 0, 0, 0, 0},
+ { 7, 0, 1, 0, 0, 0}
}, {
- {12, 0, 0, 0, 0, 0},
- {9, 12, 0, 0, 0, 0},
- {6, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0}
+ {12, 0, 0, 0, 0, 0},
+ { 9, 12, 0, 0, 0, 0},
+ { 6, 0, 0, 0, 0, 0},
+ { 0, 0, 0, 0, 0, 0}
}, {
- {6, 0, 0, 0, 0, 0},
- {10, 6, 0, 0, 0, 0},
- {3, 2, 1, 0, 0, 0},
- {9, 7, 0, 0, 0, 0}
+ { 6, 0, 0, 0, 0, 0},
+ {10, 6, 0, 0, 0, 0},
+ { 3, 2, 1, 0, 0, 0},
+ { 9, 7, 0, 0, 0, 0}
}, {
- {7, 0, 0, 0, 0, 0},
- {11, 12, 0, 0, 0, 0},
- {8, 0, 0, 0, 0, 0},
- {2, 1, 0, 0, 0, 0}
+ { 7, 0, 0, 0, 0, 0},
+ {11, 12, 0, 0, 0, 0},
+ { 8, 0, 0, 0, 0, 0},
+ { 2, 1, 0, 0, 0, 0}
}, {
- {8, 0, 0, 0, 0, 0},
- {6, 0, 0, 0, 0, 0},
- {5, 4, 3, 2, 1, 0},
- {11, 9, 7, 0, 0, 0}
+ { 8, 0, 0, 0, 0, 0},
+ { 6, 0, 0, 0, 0, 0},
+ { 5, 4, 3, 2, 1, 0},
+ {11, 9, 7, 0, 0, 0}
}, {
- {9, 0, 0, 0, 0, 0},
- {12, 0, 0, 0, 0, 0},
- {10, 0, 0, 0, 0, 0},
- {4, 2, 0, 0, 0, 0}
+ { 9, 0, 0, 0, 0, 0},
+ {12, 0, 0, 0, 0, 0},
+ {10, 0, 0, 0, 0, 0},
+ { 4, 2, 0, 0, 0, 0}
}, {
- {11, 9, 7, 6, 0, 0},
- {7, 6, 0, 0, 0, 0},
- {12, 0, 0, 0, 0, 0},
- {12, 0, 0, 0, 0, 0}
+ {11, 9, 7, 6, 0, 0},
+ { 7, 6, 0, 0, 0, 0},
+ {12, 0, 0, 0, 0, 0},
+ {12, 0, 0, 0, 0, 0}
}
};
@@ -1272,23 +1271,23 @@ static void sub_8048C70(void)
if (i < gUnknown_03004824->playerPartyCount)
{
gSprites[gUnknown_03004824->playerPartyIcons[i]].invisible = FALSE;
- gUnknown_03004824->tradeIconsActive[i] = TRUE;
+ gUnknown_03004824->tradeMenuOptionsActive[i] = TRUE;
}
else
{
- gUnknown_03004824->tradeIconsActive[i] = FALSE;
+ gUnknown_03004824->tradeMenuOptionsActive[i] = FALSE;
}
if (i < gUnknown_03004824->friendPartyCount)
{
gSprites[gUnknown_03004824->friendPartyIcons[i]].invisible = FALSE;
- gUnknown_03004824->tradeIconsActive[i + 6] = TRUE;
+ gUnknown_03004824->tradeMenuOptionsActive[i + 6] = TRUE;
}
else
{
- gUnknown_03004824->tradeIconsActive[i + 6] = FALSE;
+ gUnknown_03004824->tradeMenuOptionsActive[i + 6] = FALSE;
}
}
- gUnknown_03004824->unk_0050 = TRUE;
+ gUnknown_03004824->tradeMenuOptionsActive[12] = TRUE;
}
static void nullsub_5(u8 a0, u8 a1) {}
@@ -1606,13 +1605,13 @@ static void sub_80494D8(void)
sub_80492D8();
}
-u8 sub_8049514(u8 a0, u8 a1)
+static u8 sub_8049514(u8 a0, u8 a1)
{
int i;
u8 retval = 0;
for (i = 0; i < PARTY_SIZE; i ++)
{
- if (gUnknown_03004824->tradeIconsActive[gTradeNextSelectedMonTable[a0][a1][i]] == TRUE)
+ if (gUnknown_03004824->tradeMenuOptionsActive[gTradeNextSelectedMonTable[a0][a1][i]] == TRUE)
{
retval = gTradeNextSelectedMonTable[a0][a1][i];
break;
@@ -1621,6 +1620,28 @@ u8 sub_8049514(u8 a0, u8 a1)
return retval;
}
+/*static*/ void sub_8049560(u8 *a0, u8 a1)
+{
+ u8 v0 = sub_8049514(*a0, a1);
+ if (v0 == 12) // CANCEL
+ {
+ StartSpriteAnim(&gSprites[gUnknown_03004824->unk_0040], 1);
+ gSprites[gUnknown_03004824->unk_0040].pos1.x = 0xe0;
+ gSprites[gUnknown_03004824->unk_0040].pos1.y = 0xa0;
+ }
+ else
+ {
+ StartSpriteAnim(&gSprites[gUnknown_03004824->unk_0040], 0);
+ gSprites[gUnknown_03004824->unk_0040].pos1.x = gTradeMonSpriteCoords[v0][0] * 8 + 32;
+ gSprites[gUnknown_03004824->unk_0040].pos1.y = gTradeMonSpriteCoords[v0][1] * 8;
+ }
+ if (*a0 != v0)
+ {
+ PlaySE(SE_SELECT);
+ }
+ *a0 = v0;
+}
+
asm(".section .text.sub_804A96C");
/*static*/ void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 width, u8 height, u16 sp8) {