diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2021-07-22 15:56:32 -0400 |
---|---|---|
committer | huderlem <huderlem@gmail.com> | 2021-07-23 09:32:38 -0500 |
commit | 096a979f784945a1c453f2b821205bf46f5a02cb (patch) | |
tree | 7d572222eaf981f5332562d7fec4dc49ad7c4230 | |
parent | a1ad5cb2d9e463fa2b77d2fc4a7b995a4f7ed5e2 (diff) |
Through sub_29C8
-rwxr-xr-x | asm/bonus_field_select.s | 347 | ||||
-rwxr-xr-x | data/rom.s | 35 | ||||
-rwxr-xr-x | src/bonus_field_select.c | 91 |
3 files changed, 119 insertions, 354 deletions
diff --git a/asm/bonus_field_select.s b/asm/bonus_field_select.s index 7d444d0..e4aaa6c 100755 --- a/asm/bonus_field_select.s +++ b/asm/bonus_field_select.s @@ -3,350 +3,3 @@ .syntax unified .text - - thumb_func_start sub_2990 -sub_2990: @ 0x08002990 - push {lr} - ldr r0, _080029BC @ =sub_29C8 + 1 - bl sub_FE04 - bl m4aMPlayAllStop - bl sub_D10 - ldr r1, _080029C0 @ =gAutoDisplayTitlescreenMenu - movs r0, #1 - strb r0, [r1] - ldr r0, _080029C4 @ =gUnknown_0202BEE4 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - bl SetMainGameState - pop {r0} - bx r0 - .align 2, 0 -_080029BC: .4byte sub_29C8 + 1 -_080029C0: .4byte gAutoDisplayTitlescreenMenu -_080029C4: .4byte gUnknown_0202BEE4 - - thumb_func_start sub_29C8 -sub_29C8: @ 0x080029C8 - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - sub sp, #0x18 - ldr r1, _08002C14 @ =gMain - ldrh r0, [r1, #0x38] - ldr r0, _08002C18 @ =0x00000C14 - strh r0, [r1, #0x38] - ldrh r0, [r1, #0x3a] - ldr r0, _08002C1C @ =0x00000808 - strh r0, [r1, #0x3a] - ldr r2, _08002C20 @ =0x04000050 - ldrh r0, [r1, #0x38] - strh r0, [r2] - adds r2, #2 - ldrh r0, [r1, #0x3a] - strh r0, [r2] - ldr r7, _08002C24 @ =gUnknown_0201A4F8 - movs r0, #0xe9 - lsls r0, r0, #3 - adds r3, r1, r0 - ldr r4, _08002C28 @ =gUnknown_0201A4C0 - ldr r5, _08002C2C @ =gUnknown_0201A4F4 - ldr r2, _08002C30 @ =gUnknown_0201A4B0 - mov sb, r2 - ldr r0, _08002C34 @ =gUnknown_086A4C80 - mov ip, r0 - movs r2, #0xd2 - lsls r2, r2, #3 - adds r1, r1, r2 - add r0, sp, #0x14 -_08002A0A: - str r1, [r0] - subs r1, #0xb8 - subs r0, #4 - cmp r0, sp @ warning: use of r13 is deprecated - bge _08002A0A - movs r0, #0 - ldrsb r0, [r7, r0] - movs r2, #0xb8 - muls r0, r2, r0 - adds r0, r0, r3 - mov sl, r0 - ldrb r1, [r4] - lsls r1, r1, #1 - movs r4, #0 - ldrsh r0, [r5, r4] - adds r0, #0xc - adds r1, r1, r0 - muls r1, r2, r1 - ldr r2, _08002C38 @ =0xFFFFFBB0 - adds r0, r3, r2 - adds r1, r1, r0 - mov r8, r1 - movs r2, #1 - mov r1, sp - movs r6, #5 -_08002A3C: - ldm r1!, {r0} - strh r2, [r0] - subs r6, #1 - cmp r6, #0 - bge _08002A3C - movs r0, #0 - ldrsb r0, [r7, r0] - lsls r0, r0, #2 - add r0, sp - ldr r1, [r0] - movs r0, #0 - strh r0, [r1] - movs r0, #1 - mov r3, sl - strh r0, [r3] - mov r4, sb - movs r0, #0 - ldrsb r0, [r4, r0] - mov r7, r8 - strh r0, [r7] - mov r0, ip - movs r1, #0x10 - ldr r2, _08002C3C @ =gUnknown_0200B3B8 - bl LoadSpriteSets - movs r1, #0 -_08002A70: - lsls r2, r1, #2 - mov r0, sp - adds r4, r0, r2 - ldr r3, [r4] - ldrh r0, [r3] - adds r1, #1 - mov sb, r1 - cmp r0, #1 - bne _08002AEC - ldr r1, _08002C40 @ =gUnknown_086A4CC0 - adds r1, r2, r1 - ldrh r0, [r1] - strh r0, [r3, #2] - ldr r2, [r4] - ldrh r0, [r1, #2] - strh r0, [r2, #4] - adds r5, r4, #0 - ldr r1, _08002C44 @ =gOamBuffer - mov ip, r1 - movs r7, #8 - movs r6, #3 -_08002A9A: - ldr r4, [r5] - adds r4, r4, r7 - ldrh r2, [r4] - lsls r2, r2, #3 - add r2, ip - ldrb r1, [r2, #1] - movs r0, #0xd - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #4 - orrs r0, r1 - strb r0, [r2, #1] - ldrh r2, [r4] - lsls r2, r2, #3 - add r2, ip - movs r3, #2 - ldrsh r1, [r4, r3] - ldr r0, [r5] - movs r3, #2 - ldrsh r0, [r0, r3] - adds r1, r1, r0 - ldr r3, _08002C48 @ =0x000001FF - adds r0, r3, #0 - ands r1, r0 - ldrh r3, [r2, #2] - ldr r0, _08002C4C @ =0xFFFFFE00 - ands r0, r3 - orrs r0, r1 - strh r0, [r2, #2] - ldrh r1, [r4] - lsls r1, r1, #3 - add r1, ip - ldr r0, [r5] - ldrb r0, [r0, #4] - ldrb r4, [r4, #4] - adds r0, r0, r4 - strb r0, [r1] - adds r7, #8 - subs r6, #1 - cmp r6, #0 - bge _08002A9A -_08002AEC: - mov r1, sb - cmp r1, #5 - ble _08002A70 - movs r0, #0x58 - mov r4, sl - strh r0, [r4, #2] - movs r0, #0x85 - strh r0, [r4, #4] - ldr r5, _08002C44 @ =gOamBuffer - movs r7, #0xd - rsbs r7, r7, #0 - mov sb, r7 - ldr r0, _08002C4C @ =0xFFFFFE00 - mov ip, r0 - adds r4, #8 - movs r6, #1 -_08002B0C: - ldrh r1, [r4] - lsls r1, r1, #3 - adds r1, r1, r5 - ldrb r2, [r1, #1] - mov r0, sb - ands r0, r2 - strb r0, [r1, #1] - ldrh r2, [r4] - lsls r2, r2, #3 - adds r2, r2, r5 - ldr r3, _08002C50 @ =gUnknown_0202BEE8 - ldrb r1, [r3] - lsls r1, r1, #4 - ldrb r3, [r2, #5] - movs r0, #0xf - ands r0, r3 - orrs r0, r1 - strb r0, [r2, #5] - ldrh r3, [r4] - lsls r3, r3, #3 - adds r3, r3, r5 - movs r7, #2 - ldrsh r1, [r4, r7] - mov r2, sl - movs r7, #2 - ldrsh r0, [r2, r7] - adds r1, r1, r0 - ldr r2, _08002C48 @ =0x000001FF - adds r0, r2, #0 - ands r1, r0 - ldrh r2, [r3, #2] - mov r0, ip - ands r0, r2 - orrs r0, r1 - strh r0, [r3, #2] - ldrh r1, [r4] - lsls r1, r1, #3 - adds r1, r1, r5 - mov r3, sl - ldrb r0, [r3, #4] - ldrb r7, [r4, #4] - adds r0, r0, r7 - strb r0, [r1] - adds r4, #8 - subs r6, #1 - cmp r6, #0 - bge _08002B0C - mov r1, r8 - ldrh r0, [r1] - cmp r0, #1 - bne _08002BEA - ldr r2, _08002C54 @ =gUnknown_086A4CD8 - ldr r1, _08002C24 @ =gUnknown_0201A4F8 - movs r0, #0 - ldrsb r0, [r1, r0] - lsls r0, r0, #2 - adds r0, r0, r2 - ldrh r0, [r0] - mov r3, r8 - strh r0, [r3, #2] - movs r0, #0 - ldrsb r0, [r1, r0] - lsls r0, r0, #2 - adds r0, r0, r2 - ldrh r0, [r0, #2] - strh r0, [r3, #4] - ldr r5, _08002C44 @ =gOamBuffer - movs r4, #0xd - rsbs r4, r4, #0 - mov sb, r4 - ldr r7, _08002C4C @ =0xFFFFFE00 - mov ip, r7 - mov r4, r8 - adds r4, #8 - movs r6, #4 -_08002BA2: - ldrh r1, [r4] - lsls r1, r1, #3 - adds r1, r1, r5 - ldrb r2, [r1, #1] - mov r0, sb - ands r0, r2 - strb r0, [r1, #1] - ldrh r3, [r4] - lsls r3, r3, #3 - adds r3, r3, r5 - movs r0, #2 - ldrsh r1, [r4, r0] - mov r2, r8 - movs r7, #2 - ldrsh r0, [r2, r7] - adds r1, r1, r0 - ldr r2, _08002C48 @ =0x000001FF - adds r0, r2, #0 - ands r1, r0 - ldrh r2, [r3, #2] - mov r0, ip - ands r0, r2 - orrs r0, r1 - strh r0, [r3, #2] - ldrh r1, [r4] - lsls r1, r1, #3 - adds r1, r1, r5 - mov r3, r8 - ldrb r0, [r3, #4] - ldrb r7, [r4, #4] - adds r0, r0, r7 - strb r0, [r1] - adds r4, #8 - subs r6, #1 - cmp r6, #0 - bge _08002BA2 -_08002BEA: - movs r2, #0 - mov r1, sp - movs r6, #5 -_08002BF0: - ldm r1!, {r0} - strh r2, [r0] - subs r6, #1 - cmp r6, #0 - bge _08002BF0 - movs r0, #0 - mov r1, sl - strh r0, [r1] - mov r2, r8 - strh r0, [r2] - add sp, #0x18 - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7} - pop {r0} - bx r0 - .align 2, 0 -_08002C14: .4byte gMain -_08002C18: .4byte 0x00000C14 -_08002C1C: .4byte 0x00000808 -_08002C20: .4byte 0x04000050 -_08002C24: .4byte gUnknown_0201A4F8 -_08002C28: .4byte gUnknown_0201A4C0 -_08002C2C: .4byte gUnknown_0201A4F4 -_08002C30: .4byte gUnknown_0201A4B0 -_08002C34: .4byte gUnknown_086A4C80 -_08002C38: .4byte 0xFFFFFBB0 -_08002C3C: .4byte gUnknown_0200B3B8 -_08002C40: .4byte gUnknown_086A4CC0 -_08002C44: .4byte gOamBuffer -_08002C48: .4byte 0x000001FF -_08002C4C: .4byte 0xFFFFFE00 -_08002C50: .4byte gUnknown_0202BEE8 -_08002C54: .4byte gUnknown_086A4CD8 @@ -2101,18 +2101,45 @@ gUnknown_086A4C44:: @ 0x086A4C44 .4byte gUnknown_086A4C18 .4byte gUnknown_086A4C2C + .align 2, 0 gUnknown_086A4C80:: @ 0x086A4C80 - .incbin "baserom.gba", 0x6A4C80, 0x40 + .4byte 0x086A699E + .4byte 0x086A699E + .4byte 0x086A699E + .4byte 0x086A699E + .4byte 0x086A699E + .4byte 0x086A699E + .4byte 0x086A69C0 + .4byte 0x086A69D2 + .4byte 0x086A69E4 + .4byte 0x086A69F6 + .4byte 0x086A6A08 + .4byte 0x086A6A1A + .4byte 0x086A6A2C + .4byte 0x086A6A56 + .4byte 0x086A6A80 + .4byte 0x086A6AAA gUnknown_086A4CC0:: @ 0x086A4CC0 - .incbin "baserom.gba", 0x6A4CC0, 0x18 + .2byte 0x20, 0x20 + .2byte 0x60, 0x20 + .2byte 0xa0, 0x20 + .2byte 0x20, 0x58 + .2byte 0x60, 0x58 + .2byte 0xa0, 0x58 gUnknown_086A4CD8:: @ 0x086A4CD8 - .incbin "baserom.gba", 0x6A4CD8, 0x18 + .2byte 0x18, 0x24 + .2byte 0x58, 0x24 + .2byte 0x98, 0x24 + .2byte 0x18, 0x5C + .2byte 0x58, 0x5C + .2byte 0x98, 0x5C gUnknown_086A4CF0:: @ 0x086A4CF0 - .incbin "baserom.gba", 0x6A4CF0, 0x8 + .byte 2, 3, 7, 5, 4, 6 + .align 2, 0 gUnknown_086A4CF8:: @ 0x086A4CF8 .incbin "baserom.gba", 0x6A4CF8, 0x7E0 diff --git a/src/bonus_field_select.c b/src/bonus_field_select.c index b60ceec..bb690aa 100755 --- a/src/bonus_field_select.c +++ b/src/bonus_field_select.c @@ -2,6 +2,7 @@ #include "m4a.h" #include "main.h" #include "functions.h" +#include "titlescreen.h" extern void (*const gUnknown_0805C750[])(void); extern const u16 gUnknown_0807C2E0[]; @@ -49,16 +50,19 @@ void sub_25C4(void) gMain.subState++; } -EWRAM_DATA u16 gUnknown_0201A4F4 = 0; +EWRAM_DATA s16 gUnknown_0201A4F4 = 0; EWRAM_DATA s8 gUnknown_0201A4F8 = 0; -EWRAM_DATA u8 gUnknown_0201A4B0 = 0; +EWRAM_DATA s8 gUnknown_0201A4B0 = 0; EWRAM_DATA u8 gUnknown_0201A4C0 = 0; EWRAM_DATA s16 gUnknown_0202A560 = 0; EWRAM_DATA s16 gUnknown_0202BE1C = 0; EWRAM_DATA s8 gUnknown_0202BED0 = 0; -EWRAM_DATA u8 gUnknown_0202BEE4 = 0; +EWRAM_DATA s8 gUnknown_0202BEE4 = 0; EWRAM_DATA u8 gUnknown_0202BEE8 = 0; +extern const struct SpriteSet *const gUnknown_086A4C80[16]; +extern const struct Coord16 gUnknown_086A4CC0[]; +extern const struct Coord16 gUnknown_086A4CD8[]; extern const u8 gUnknown_086A4CF0[]; void sub_2710(void) @@ -173,3 +177,84 @@ void sub_2768(void) break; } } + +void sub_2990(void) +{ + sub_FE04(sub_29C8); + m4aMPlayAllStop(); + sub_D10(); + gAutoDisplayTitlescreenMenu = 1; + SetMainGameState(gUnknown_0202BEE4); +} + +void sub_29C8(void) +{ + struct SpriteGroup * sgptrs[6]; + struct SpriteGroup * r8; + struct SpriteGroup * r10; + struct OamDataSimple * simple; + s32 i; + s32 j; + + gMain.blendControl = BLDCNT_TGT1_BG2 | BLDCNT_TGT1_OBJ | BLDCNT_EFFECT_NONE | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3; + gMain.blendAlpha = BLDALPHA_BLEND(8, 8); + REG_BLDCNT = gMain.blendControl; + REG_BLDALPHA = gMain.blendAlpha; + for (i = 0; i < 6; i++) + { + sgptrs[i] = &gMain.spriteGroups[i]; + } + r10 = &gMain.spriteGroups[6 + gUnknown_0201A4F8]; + r8 = &gMain.spriteGroups[12 + gUnknown_0201A4C0 * 2 + gUnknown_0201A4F4]; + for (j = 0; j < 6; j++) + { + sgptrs[j]->available = 1; + } + sgptrs[gUnknown_0201A4F8]->available = 0; + r10->available = 1; + r8->available = gUnknown_0201A4B0; + LoadSpriteSets(gUnknown_086A4C80, 16, gUnknown_0200B3B8); + for (i = 0; i < 6; i++) + { + if (sgptrs[i]->available == 1) + { + sgptrs[i]->baseX = gUnknown_086A4CC0[i].x; + sgptrs[i]->baseY = gUnknown_086A4CC0[i].y; + for (j = 0; j < 4; j++) + { + simple = &sgptrs[i]->oam[j]; + gOamBuffer[simple->oamId].objMode = ST_OAM_OBJ_BLEND; + gOamBuffer[simple->oamId].x = simple->xOffset + sgptrs[i]->baseX; + gOamBuffer[simple->oamId].y = simple->yOffset + sgptrs[i]->baseY; + } + } + } + r10->baseX = 0x58; + r10->baseY = 0x85; + for (j = 0; j < 2; j++) + { + simple = &r10->oam[j]; + gOamBuffer[simple->oamId].objMode = ST_OAM_OBJ_NORMAL; + gOamBuffer[simple->oamId].paletteNum = gUnknown_0202BEE8; + gOamBuffer[simple->oamId].x = simple->xOffset + r10->baseX; + gOamBuffer[simple->oamId].y = simple->yOffset + r10->baseY; + } + if (r8->available == 1) + { + r8->baseX = gUnknown_086A4CD8[gUnknown_0201A4F8].x; + r8->baseY = gUnknown_086A4CD8[gUnknown_0201A4F8].y; + for (j = 0; j < 5; j++) + { + simple = &r8->oam[j]; + gOamBuffer[simple->oamId].objMode = ST_OAM_OBJ_NORMAL; + gOamBuffer[simple->oamId].x = simple->xOffset + r8->baseX; + gOamBuffer[simple->oamId].y = simple->yOffset + r8->baseY; + } + } + for (j = 0; j < 6; j++) + { + sgptrs[j]->available = 0; + } + r10->available = 0; + r8->available = 0; +} |