diff options
-rw-r--r-- | asm/rom_8094928.s | 316 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/rom_8094928.c | 135 |
3 files changed, 135 insertions, 317 deletions
diff --git a/asm/rom_8094928.s b/asm/rom_8094928.s deleted file mode 100644 index d1cc820f1..000000000 --- a/asm/rom_8094928.s +++ /dev/null @@ -1,316 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_8094C20 -sub_8094C20: @ 8094C20 - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - movs r1, 0x1 - ands r1, r2 - lsrs r2, r0, 25 - cmp r1, 0 - beq _08094C40 - ldr r0, _08094C3C @ =gUnknown_02038470 - adds r0, r2, r0 - ldrb r0, [r0] - movs r1, 0xF - ands r1, r0 - b _08094C48 - .align 2, 0 -_08094C3C: .4byte gUnknown_02038470 -_08094C40: - ldr r0, _08094C50 @ =gUnknown_02038470 - adds r0, r2, r0 - ldrb r0, [r0] - lsrs r1, r0, 4 -_08094C48: - adds r0, r1, 0 - pop {r1} - bx r1 - .align 2, 0 -_08094C50: .4byte gUnknown_02038470 - thumb_func_end sub_8094C20 - - thumb_func_start sub_8094C54 -sub_8094C54: @ 8094C54 - push {r4,lr} - lsls r0, 24 - lsrs r3, r0, 24 - lsls r1, 24 - lsrs r4, r1, 24 - movs r1, 0x1 - ands r1, r3 - lsrs r3, r0, 25 - cmp r1, 0 - beq _08094C7C - ldr r0, _08094C78 @ =gUnknown_02038470 - adds r0, r3, r0 - ldrb r2, [r0] - movs r1, 0xF0 - ands r1, r2 - orrs r1, r4 - strb r1, [r0] - b _08094C8C - .align 2, 0 -_08094C78: .4byte gUnknown_02038470 -_08094C7C: - ldr r2, _08094C94 @ =gUnknown_02038470 - adds r2, r3, r2 - ldrb r1, [r2] - movs r0, 0xF - ands r0, r1 - lsls r1, r4, 4 - orrs r0, r1 - strb r0, [r2] -_08094C8C: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08094C94: .4byte gUnknown_02038470 - thumb_func_end sub_8094C54 - - thumb_func_start sub_8094C98 -sub_8094C98: @ 8094C98 - push {r4-r6,lr} - adds r5, r0, 0 - adds r6, r1, 0 - lsls r5, 24 - lsrs r5, 24 - lsls r6, 24 - lsrs r6, 24 - adds r0, r5, 0 - bl sub_8094C20 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r6, 0 - bl sub_8094C20 - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r5, 0 - bl sub_8094C54 - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_8094C54 - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_8094C98 - - thumb_func_start pokemon_order_func -pokemon_order_func: @ 8094CD4 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - movs r3, 0 - movs r2, 0 - ldr r5, _08094CFC @ =gUnknown_02038470 -_08094CE0: - adds r0, r3, r5 - ldrb r1, [r0] - lsrs r0, r1, 4 - cmp r0, r4 - beq _08094CF8 - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - movs r0, 0xF - ands r0, r1 - cmp r0, r4 - bne _08094D00 -_08094CF8: - adds r0, r2, 0 - b _08094D12 - .align 2, 0 -_08094CFC: .4byte gUnknown_02038470 -_08094D00: - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x2 - bls _08094CE0 - movs r0, 0 -_08094D12: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end pokemon_order_func - - thumb_func_start pokemon_change_order -pokemon_change_order: @ 8094D18 - push {r4,r5,lr} - ldr r0, _08094D58 @ =0x0201b000 - ldr r1, _08094D5C @ =gPlayerParty - movs r2, 0x96 - lsls r2, 2 - bl memcpy - movs r4, 0 - movs r5, 0x64 -_08094D2A: - adds r0, r4, 0 - bl pokemon_order_func - lsls r0, 24 - lsrs r0, 24 - muls r0, r5 - ldr r1, _08094D5C @ =gPlayerParty - adds r0, r1 - adds r1, r4, 0 - muls r1, r5 - ldr r2, _08094D58 @ =0x0201b000 - adds r1, r2 - movs r2, 0x64 - bl memcpy - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x5 - bls _08094D2A - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08094D58: .4byte 0x0201b000 -_08094D5C: .4byte gPlayerParty - thumb_func_end pokemon_change_order - - thumb_func_start sub_8094D60 -sub_8094D60: @ 8094D60 - push {r4,r5,lr} - ldr r4, _08094DA8 @ =0xfffffda8 - add sp, r4 - ldr r1, _08094DAC @ =gPlayerParty - movs r2, 0x96 - lsls r2, 2 - mov r0, sp - bl memcpy - movs r4, 0 - movs r5, 0x64 -_08094D76: - adds r0, r4, 0 - bl sub_8094C20 - lsls r0, 24 - lsrs r0, 24 - muls r0, r5 - ldr r1, _08094DAC @ =gPlayerParty - adds r0, r1 - adds r1, r4, 0 - muls r1, r5 - add r1, sp - movs r2, 0x64 - bl memcpy - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x5 - bls _08094D76 - movs r3, 0x96 - lsls r3, 2 - add sp, r3 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08094DA8: .4byte 0xfffffda8 -_08094DAC: .4byte gPlayerParty - thumb_func_end sub_8094D60 - - thumb_func_start unref_sub_8094DB0 -unref_sub_8094DB0: @ 8094DB0 - push {r4-r7,lr} - mov r7, r8 - push {r7} - movs r6, 0x1 - movs r7, 0x64 - ldr r0, _08094E08 @ =gPlayerParty - mov r8, r0 -_08094DBE: - adds r0, r6, 0 - bl sub_8094C20 - lsls r0, 24 - lsrs r0, 24 - muls r0, r7 - mov r1, r8 - adds r5, r0, r1 - adds r0, r5, 0 - movs r1, 0xB - bl GetMonData - cmp r0, 0 - beq _08094E0C - adds r0, r5, 0 - movs r1, 0x39 - bl GetMonData - cmp r0, 0 - beq _08094E0C - movs r0, 0 - bl sub_8094C20 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0 - adds r1, r6, 0 - bl sub_8094C98 - adds r0, r4, 0 - muls r0, r7 - add r0, r8 - adds r1, r5, 0 - bl sub_806E6F0 - b _08094E16 - .align 2, 0 -_08094E08: .4byte gPlayerParty -_08094E0C: - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, 0x5 - bls _08094DBE -_08094E16: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end unref_sub_8094DB0 - - thumb_func_start sub_8094E20 -sub_8094E20: @ 8094E20 - push {lr} - ldr r3, _08094E44 @ =gPaletteFade - ldrb r1, [r3, 0x8] - movs r2, 0x80 - orrs r1, r2 - strb r1, [r3, 0x8] - ldr r1, _08094E48 @ =gUnknown_02038473 - strb r0, [r1] - bl nullsub_14 - bl pokemon_change_order - movs r0, 0x1 - movs r1, 0xFF - bl OpenPartyMenu - pop {r0} - bx r0 - .align 2, 0 -_08094E44: .4byte gPaletteFade -_08094E48: .4byte gUnknown_02038473 - thumb_func_end sub_8094E20 - - thumb_func_start sub_8094E4C -sub_8094E4C: @ 8094E4C - push {lr} - movs r0, 0x3 - bl sub_8094E20 - pop {r0} - bx r0 - thumb_func_end sub_8094E4C - - .align 2, 0 @ Don't pad with nop. diff --git a/ld_script.txt b/ld_script.txt index 38d564974..98b8e2ded 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -143,7 +143,6 @@ SECTIONS { src/trainer_card.o(.text); src/save_menu_util.o(.text); src/rom_8094928.o(.text); - asm/rom_8094928.o(.text); src/battle_party_menu.o(.text); asm/pokemon_storage_system.o(.text); src/pokemon_storage_system.o(.text); diff --git a/src/rom_8094928.c b/src/rom_8094928.c index 761a49d27..511c4ed7b 100644 --- a/src/rom_8094928.c +++ b/src/rom_8094928.c @@ -1,8 +1,28 @@ #include "global.h" +#include "palette.h" #include "pokemon.h" extern u8 ewram[]; +#define DATA_COUNT (6) + +struct Unk201B000 +{ + //u8 filler0[0x260]; + struct Pokemon unk0[6]; + u8 filler258[8]; + u8 unk260; + u8 unk261; + u8 filler262[2]; + s16 unk264[DATA_COUNT * 2]; + u8 filler27C[2]; + s16 unk27E; + s16 unk280; + s16 unk282; +}; + +#define ewram1B000 (*(struct Unk201B000 *)(ewram + 0x1B000)) + #define UNK_201606C_ARRAY (ewram + 0x1606C) // lazy define but whatever. extern struct PokemonStorage gPokemonStorage; @@ -12,8 +32,12 @@ extern u8 battle_get_side_with_given_state(u8); extern u8 battle_side_get_owner(u8); void sub_8094998(u8[3], u8); void sub_8094A74(u8[3], u8, u32); +extern void nullsub_14(); +extern void OpenPartyMenu(); +extern void sub_806E6F0(); extern u8 gUnknown_02038470[3]; +extern u8 gUnknown_02038473; extern u8 sub_803FBBC(void); extern u16 gUnknown_02024A6A[]; @@ -171,3 +195,114 @@ void sub_8094B6C(u8 a, u8 b, u8 c) } } } + +u8 sub_8094C20(u8 a) +{ + u8 retVal; + u8 val = a & 1; + + a /= 2; + if (val) + retVal = gUnknown_02038470[a] & 0xF; + else + retVal = gUnknown_02038470[a] >> 4; + return retVal; +} + +void sub_8094C54(u8 a, u8 b) +{ + u8 val = a & 1; + + a /= 2; + if (val) + gUnknown_02038470[a] = (gUnknown_02038470[a] & 0xF0) | b; + else + gUnknown_02038470[a] = (gUnknown_02038470[a] & 0xF) | (b << 4); +} + +void sub_8094C98(u8 a, u8 b) +{ + u8 r4 = sub_8094C20(a); + u8 r1 = sub_8094C20(b); + + sub_8094C54(a, r1); + sub_8094C54(b, r4); +} + +u8 pokemon_order_func(u8 a) +{ + u8 i; + u8 r2; + + for (i = 0, r2 = 0; i < 3; i++) + { + if ((gUnknown_02038470[i] >> 4) == a) + return r2; + r2++; + if ((gUnknown_02038470[i] & 0xF) == a) + return r2; + r2++; + } + return 0; +} + +void pokemon_change_order(void) +{ + u8 i; + + memcpy(ewram1B000.unk0, gPlayerParty, sizeof(gPlayerParty)); + for (i = 0; i < 6; i++) + { + u8 n = pokemon_order_func(i); + + memcpy(&gPlayerParty[n], &ewram1B000.unk0[i], sizeof(struct Pokemon)); + } +} + +void sub_8094D60(void) +{ + struct Pokemon temp[6]; + u8 i; + + memcpy(temp, gPlayerParty, sizeof(gPlayerParty)); + for (i = 0; i < 6; i++) + { + u8 n = sub_8094C20(i); + + memcpy(&gPlayerParty[n], &temp[i], sizeof(struct Pokemon)); + } +} + +void unref_sub_8094DB0(void) +{ + u8 i; + u8 r4; + + for (i = 1; i < 6; i++) + { + u8 n = sub_8094C20(i); + + if (GetMonData(&gPlayerParty[n], MON_DATA_SPECIES) != 0 + && GetMonData(&gPlayerParty[n], MON_DATA_HP) != 0) + { + r4 = sub_8094C20(0); + sub_8094C98(0, i); + sub_806E6F0(&gPlayerParty[r4], &gPlayerParty[n]); + break; + } + } +} + +void sub_8094E20(u8 a) +{ + gPaletteFade.bufferTransferDisabled = TRUE; + gUnknown_02038473 = a; + nullsub_14(); + pokemon_change_order(); + OpenPartyMenu(1, 0xFF); +} + +void sub_8094E4C(void) +{ + sub_8094E20(3); +} |