summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/trade.s87
-rw-r--r--include/evolution_scene.h12
-rw-r--r--include/pokemon.h1
-rw-r--r--src/trade.c30
4 files changed, 42 insertions, 88 deletions
diff --git a/asm/trade.s b/asm/trade.s
index 670866401..8906de1bb 100644
--- a/asm/trade.s
+++ b/asm/trade.s
@@ -4740,91 +4740,4 @@ _0804D580: .4byte gPaletteFade
_0804D584: .4byte c2_exit_to_overworld_2_switch
thumb_func_end sub_804C29C
- thumb_func_start sub_804D588
-sub_804D588: @ 804D588
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r0, _0804D5A0 @ =gMain
- ldr r2, _0804D5A4 @ =0x0000043c
- adds r1, r0, r2
- ldrb r0, [r1]
- cmp r0, 0
- beq _0804D5A8
- cmp r0, 0x4
- beq _0804D5B8
- b _0804D614
- .align 2, 0
-_0804D5A0: .4byte gMain
-_0804D5A4: .4byte 0x0000043c
-_0804D5A8:
- movs r0, 0x4
- strb r0, [r1]
- ldr r1, _0804D5B4 @ =gSoftResetDisabled
- movs r0, 0x1
- b _0804D612
- .align 2, 0
-_0804D5B4: .4byte gSoftResetDisabled
-_0804D5B8:
- ldr r0, _0804D5F4 @ =gUnknown_03005E94
- ldr r1, _0804D5F8 @ =sub_804DC88
- mov r8, r1
- str r1, [r0]
- ldr r7, _0804D5FC @ =gUnknown_020297D8
- ldrb r0, [r7]
- movs r6, 0x64
- muls r0, r6
- ldr r5, _0804D600 @ =gPlayerParty
- adds r0, r5
- movs r1, 0x1
- movs r2, 0
- bl GetEvolutionTargetSpecies
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0
- beq _0804D608
- ldrb r3, [r7]
- adds r0, r3, 0
- muls r0, r6
- adds r0, r5
- ldr r1, _0804D604 @ =gUnknown_03004828
- ldr r1, [r1]
- adds r1, 0xB9
- ldrb r2, [r1]
- adds r1, r4, 0
- bl TradeEvolutionScene
- b _0804D60E
- .align 2, 0
-_0804D5F4: .4byte gUnknown_03005E94
-_0804D5F8: .4byte sub_804DC88
-_0804D5FC: .4byte gUnknown_020297D8
-_0804D600: .4byte gPlayerParty
-_0804D604: .4byte gUnknown_03004828
-_0804D608:
- mov r0, r8
- bl SetMainCallback2
-_0804D60E:
- ldr r1, _0804D638 @ =gUnknown_020297D8
- movs r0, 0xFF
-_0804D612:
- strb r0, [r1]
-_0804D614:
- bl HasLinkErrorOccurred
- lsls r0, 24
- cmp r0, 0
- bne _0804D622
- bl RunTasks
-_0804D622:
- bl AnimateSprites
- bl BuildOamBuffer
- bl UpdatePaletteFade
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0804D638: .4byte gUnknown_020297D8
- thumb_func_end sub_804D588
-
.align 2, 0 @ Don't pad with nop.
diff --git a/include/evolution_scene.h b/include/evolution_scene.h
new file mode 100644
index 000000000..ec78cb9ad
--- /dev/null
+++ b/include/evolution_scene.h
@@ -0,0 +1,12 @@
+//
+// Created by Scott Norton on 9/3/17.
+//
+
+#ifndef POKERUBY_EVOLUTION_SCENE_H
+#define POKERUBY_EVOLUTION_SCENE_H
+
+extern MainCallback gUnknown_03005E94;
+
+void TradeEvolutionScene(struct Pokemon *, u16, u8, u8);
+
+#endif //POKERUBY_EVOLUTION_SCENE_H
diff --git a/include/pokemon.h b/include/pokemon.h
index 594295b40..ba9d7237e 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -599,5 +599,6 @@ u8 *sub_8040D08();
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);
#endif // GUARD_POKEMON_H
diff --git a/src/trade.c b/src/trade.c
index fc15da7f8..ee0ed96db 100644
--- a/src/trade.c
+++ b/src/trade.c
@@ -32,6 +32,7 @@
#include "field_fadetransition.h"
#include "decompress.h"
#include "mail_data.h"
+#include "evolution_scene.h"
#include "trade.h"
#ifdef ENGLISH
@@ -202,6 +203,7 @@ static void sub_804E1A0(u8);
/*static*/ void sub_804B790(void);
static void sub_804DAD4(struct MailStruct *, const struct InGameTrade *);
void sub_804D588(void);
+static void sub_804DC88(void);
extern u8 gUnknown_020297D8[2];
extern u8 *gUnknown_020296CC[13];
@@ -3172,6 +3174,32 @@ static bool8 sub_804ABF8(void)
asm(".section .text.sub_804DAD4");
+void sub_804D588(void)
+{
+ u16 evoTarget;
+ switch (gMain.state)
+ {
+ case 0:
+ gMain.state = 4;
+ gSoftResetDisabled = TRUE;
+ break;
+ case 4:
+ 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]);
+ else
+ SetMainCallback2(sub_804DC88);
+ gUnknown_020297D8[0] = 255;
+ break;
+ }
+ if (!HasLinkErrorOccurred())
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
static void sub_804D63C(void)
{
u8 blockReceivedStatus;
@@ -3411,7 +3439,7 @@ void sub_804DC18(void)
UpdatePaletteFade();
}
-void sub_804DC88(void)
+static void sub_804DC88(void)
{
switch (gMain.state)
{