diff options
-rw-r--r-- | asm/trade.s | 87 | ||||
-rw-r--r-- | include/evolution_scene.h | 12 | ||||
-rw-r--r-- | include/pokemon.h | 1 | ||||
-rw-r--r-- | src/trade.c | 30 |
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) { |