diff options
author | Cameron Hall <camthesaxman@users.noreply.github.com> | 2016-10-06 23:53:33 -0500 |
---|---|---|
committer | YamaArashi <YamaArashi@users.noreply.github.com> | 2016-10-06 21:53:33 -0700 |
commit | 3634e8edc2f1e732e1139a71fb2ea6a357027220 (patch) | |
tree | 0a25092b18cfae01023bc18542d45abed3542645 | |
parent | 7bfb307a68458b89ef4eb42716a98f86a47280a1 (diff) |
decompile starter chooser (#55)
-rw-r--r-- | asm/rom5.s | 1067 | ||||
-rw-r--r-- | asm/rom6.s | 4 | ||||
-rw-r--r-- | data/data2.s | 23 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/starter_choose.c | 434 |
5 files changed, 457 insertions, 1072 deletions
diff --git a/asm/rom5.s b/asm/rom5.s index 523bf8a4c..b1ebc4e1c 100644 --- a/asm/rom5.s +++ b/asm/rom5.s @@ -14921,7 +14921,7 @@ sub_8082168: @ 8082168 pop {r0} bx r0 .align 2, 0 -_0808217C: .4byte sub_8109E80 +_0808217C: .4byte CB2_ChooseStarter _08082180: .4byte gMain _08082184: .4byte sub_8082188 thumb_func_end sub_8082168 @@ -14936,7 +14936,7 @@ sub_8082188: @ 8082188 ldrh r1, [r2] strh r1, [r0] ldrh r0, [r2] - bl sub_8109E50 + bl GetStarterPokemon lsls r0, 16 lsrs r0, 16 movs r1, 0 @@ -44865,8 +44865,8 @@ _08090D34: .4byte 0x0000064e _08090D38: .4byte 0x06007aca thumb_func_end sub_8090C68 - thumb_func_start sub_8090D3C -sub_8090D3C: @ 8090D3C + thumb_func_start GetPokemonCategory +GetPokemonCategory: @ 8090D3C adds r1, r0, 0 lsls r1, 16 lsrs r1, 16 @@ -44878,7 +44878,7 @@ sub_8090D3C: @ 8090D3C bx lr .align 2, 0 _08090D50: .4byte gPokedexEntries - thumb_func_end sub_8090D3C + thumb_func_end GetPokemonCategory thumb_func_start sub_8090D54 sub_8090D54: @ 8090D54 @@ -294608,1061 +294608,4 @@ sub_8109E34: @ 8109E34 _08109E4C: .4byte sub_8109B7C thumb_func_end sub_8109E34 - thumb_func_start sub_8109E50 -sub_8109E50: @ 8109E50 - push {lr} - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0x3 - bls _08109E5C - movs r1, 0 -_08109E5C: - ldr r0, _08109E68 - lsls r1, 1 - adds r1, r0 - ldrh r0, [r1] - pop {r1} - bx r1 - .align 2, 0 -_08109E68: .4byte gUnknown_083F76C4 - thumb_func_end sub_8109E50 - - thumb_func_start sub_8109E6C -sub_8109E6C: @ 8109E6C - push {lr} - bl LoadOam - bl ProcessSpriteCopyRequests - bl TransferPlttBuffer - pop {r0} - bx r0 - thumb_func_end sub_8109E6C - - thumb_func_start sub_8109E80 -sub_8109E80: @ 8109E80 - push {r4-r6,lr} - mov r6, r10 - mov r5, r9 - mov r4, r8 - push {r4-r6} - sub sp, 0xC - movs r0, 0 - bl SetVBlankCallback - movs r0, 0x80 - lsls r0, 19 - mov r10, r0 - movs r1, 0 - strh r1, [r0] - ldr r6, _0810A08C - strh r1, [r6] - ldr r3, _0810A090 - mov r8, r3 - strh r1, [r3] - adds r0, 0xA - strh r1, [r0] - ldr r5, _0810A094 - strh r1, [r5] - adds r0, 0x12 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - subs r0, 0x6 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - subs r0, 0x6 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - subs r0, 0x6 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - add r0, sp, 0x4 - strh r1, [r0] - ldr r2, _0810A098 - str r0, [r2] - movs r1, 0xC0 - lsls r1, 19 - str r1, [r2, 0x4] - ldr r0, _0810A09C - str r0, [r2, 0x8] - ldr r0, [r2, 0x8] - movs r0, 0 - mov r9, r0 - str r0, [sp, 0x8] - add r0, sp, 0x8 - str r0, [r2] - movs r0, 0xE0 - lsls r0, 19 - str r0, [r2, 0x4] - ldr r0, _0810A0A0 - str r0, [r2, 0x8] - ldr r0, [r2, 0x8] - add r0, sp, 0x4 - mov r3, r9 - strh r3, [r0] - str r0, [r2] - movs r0, 0xA0 - lsls r0, 19 - str r0, [r2, 0x4] - ldr r0, _0810A0A4 - str r0, [r2, 0x8] - ldr r0, [r2, 0x8] - ldr r0, _0810A0A8 - bl LZ77UnCompVram - ldr r0, _0810A0AC - ldr r1, _0810A0B0 - bl LZ77UnCompVram - ldr r0, _0810A0B4 - ldr r1, _0810A0B8 - bl LZ77UnCompVram - bl remove_some_task - bl ResetTasks - bl ResetSpriteData - bl ResetPaletteFade - bl FreeAllSpritePalettes - ldr r0, _0810A0BC - movs r1, 0 - movs r2, 0x40 - bl LoadPalette - ldr r0, _0810A0C0 - bl LoadCompressedObjectPic - ldr r0, _0810A0C4 - bl LoadCompressedObjectPic - ldr r0, _0810A0C8 - bl LoadSpritePalettes - ldr r0, _0810A0CC - bl SetUpWindowConfig - ldr r0, _0810A0D0 - bl InitMenuWindow - movs r0, 0x1 - negs r0, r0 - mov r1, r9 - str r1, [sp] - movs r1, 0 - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - ldr r3, _0810A0D4 - ldrh r2, [r3] - mov r0, r9 - strh r0, [r3] - ldr r4, _0810A0D8 - ldrh r0, [r4] - movs r1, 0x1 - orrs r0, r1 - strh r0, [r4] - strh r2, [r3] - ldr r2, _0810A0DC - ldrh r0, [r2] - movs r1, 0x8 - orrs r0, r1 - strh r0, [r2] - ldr r0, _0810A0E0 - bl SetVBlankCallback - ldr r0, _0810A0E4 - bl SetMainCallback2 - ldr r1, _0810A0E8 - movs r0, 0x3F - strh r0, [r1] - adds r1, 0x2 - movs r0, 0x1F - strh r0, [r1] - ldr r0, _0810A0EC - mov r1, r9 - strh r1, [r0] - adds r0, 0x4 - strh r1, [r0] - ldr r1, _0810A0F0 - movs r0, 0xFE - strh r0, [r1] - ldr r0, _0810A0F4 - mov r3, r9 - strh r3, [r0] - adds r1, 0x4 - movs r0, 0x7 - strh r0, [r1] - ldr r1, _0810A0F8 - adds r0, r1, 0 - strh r0, [r6] - ldr r3, _0810A0FC - adds r0, r3, 0 - mov r1, r8 - strh r0, [r1] - ldr r3, _0810A100 - adds r0, r3, 0 - strh r0, [r5] - movs r1, 0xF5 - lsls r1, 6 - adds r0, r1, 0 - mov r3, r10 - strh r0, [r3] - ldr r0, _0810A104 - movs r1, 0 - bl CreateTask - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r1, _0810A108 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - movs r1, 0x1 - mov r10, r1 - mov r3, r10 - strh r3, [r0, 0x8] - ldr r0, _0810A10C - movs r1, 0x78 - movs r2, 0x38 - movs r3, 0x2 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0810A110 - mov r8, r1 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - add r1, r8 - strh r4, [r1, 0x2E] - ldr r6, _0810A114 - ldr r5, _0810A118 - ldrb r1, [r5] - ldrb r2, [r5, 0x1] - adds r0, r6, 0 - movs r3, 0x2 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - add r1, r8 - strh r4, [r1, 0x2E] - mov r3, r9 - strh r3, [r1, 0x30] - ldrb r1, [r5, 0x2] - ldrb r2, [r5, 0x3] - adds r0, r6, 0 - movs r3, 0x2 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - add r1, r8 - strh r4, [r1, 0x2E] - mov r0, r10 - strh r0, [r1, 0x30] - ldrb r1, [r5, 0x4] - ldrb r2, [r5, 0x5] - adds r0, r6, 0 - movs r3, 0x2 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - add r1, r8 - strh r4, [r1, 0x2E] - movs r0, 0x2 - strh r0, [r1, 0x30] - add sp, 0xC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0810A08C: .4byte REG_BG3CNT -_0810A090: .4byte REG_BG2CNT -_0810A094: .4byte REG_BG0CNT -_0810A098: .4byte 0x040000d4 -_0810A09C: .4byte 0x8100c000 -_0810A0A0: .4byte 0x85000100 -_0810A0A4: .4byte 0x81000200 -_0810A0A8: .4byte gUnknown_083F66F0 -_0810A0AC: .4byte gBirchBagTilemap -_0810A0B0: .4byte 0x06003000 -_0810A0B4: .4byte gBirchGrassTilemap -_0810A0B8: .4byte 0x06003800 -_0810A0BC: .4byte gUnknown_083F62EC -_0810A0C0: .4byte gUnknown_083F7794 -_0810A0C4: .4byte gUnknown_083F77A4 -_0810A0C8: .4byte gUnknown_083F77B4 -_0810A0CC: .4byte gWindowConfig_81E6C3C -_0810A0D0: .4byte gWindowConfig_81E6CE4 -_0810A0D4: .4byte 0x04000208 -_0810A0D8: .4byte 0x04000200 -_0810A0DC: .4byte REG_DISPSTAT -_0810A0E0: .4byte sub_8109E6C -_0810A0E4: .4byte sub_810A11C -_0810A0E8: .4byte REG_WININ -_0810A0EC: .4byte REG_WIN0H -_0810A0F0: .4byte REG_BLDCNT -_0810A0F4: .4byte REG_BLDALPHA -_0810A0F8: .4byte 0x00000703 -_0810A0FC: .4byte 0x00000602 -_0810A100: .4byte 0x00001f08 -_0810A104: .4byte sub_810A134 -_0810A108: .4byte gTasks -_0810A10C: .4byte gSpriteTemplate_83F77CC -_0810A110: .4byte gSprites -_0810A114: .4byte gSpriteTemplate_83F77E4 -_0810A118: .4byte gUnknown_083F76B8 - thumb_func_end sub_8109E80 - - thumb_func_start sub_810A11C -sub_810A11C: @ 810A11C - push {lr} - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - bl UpdatePaletteFade - pop {r0} - bx r0 - thumb_func_end sub_810A11C - - thumb_func_start sub_810A134 -sub_810A134: @ 810A134 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0810A16C - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - adds r4, r1 - ldrb r1, [r4, 0x8] - movs r0, 0xFF - bl sub_810A42C - movs r0, 0x2 - movs r1, 0xE - movs r2, 0x1B - movs r3, 0x13 - bl MenuDrawTextWindow - ldr r0, _0810A170 - movs r1, 0x3 - movs r2, 0xF - bl MenuPrint - ldr r0, _0810A174 - str r0, [r4] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0810A16C: .4byte gTasks -_0810A170: .4byte gOtherText_BirchInTrouble -_0810A174: .4byte sub_810A178 - thumb_func_end sub_810A134 - - thumb_func_start sub_810A178 -sub_810A178: @ 810A178 - push {r4-r7,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r2, _0810A218 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r6, r0, r2 - ldrh r7, [r6, 0x8] - ldrb r4, [r6, 0x8] - ldr r1, _0810A21C - ldrh r3, [r1, 0x2E] - movs r0, 0x1 - ands r0, r3 - cmp r0, 0 - beq _0810A240 - ldr r1, _0810A220 - lsls r4, 1 - adds r0, r4, r1 - ldrb r0, [r0] - adds r1, 0x1 - adds r1, r4, r1 - ldrb r1, [r1] - adds r2, r0, 0 - adds r2, 0xD - lsls r2, 24 - lsrs r2, 24 - adds r3, r1, 0x3 - lsls r3, 24 - lsrs r3, 24 - bl MenuZeroFillWindowRect - ldr r0, _0810A224 - movs r1, 0 - strh r1, [r0] - adds r0, 0x4 - strh r1, [r0] - ldr r0, _0810A228 - ldr r1, _0810A22C - adds r2, r4, r1 - ldrb r5, [r2] - adds r1, 0x1 - adds r4, r1 - ldrb r4, [r4] - adds r1, r5, 0 - adds r2, r4, 0 - movs r3, 0x1 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - strh r0, [r6, 0xC] - ldrh r0, [r6, 0x8] - bl sub_8109E50 - lsls r0, 16 - lsrs r0, 16 - adds r1, r5, 0 - adds r2, r4, 0 - bl sub_810A580 - lsls r0, 24 - lsrs r0, 24 - ldr r4, _0810A230 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r2, r4, 0 - adds r2, 0x10 - adds r2, r1, r2 - ldr r3, _0810A234 - str r3, [r2] - adds r4, 0x1C - adds r1, r4 - ldr r2, _0810A238 - str r2, [r1] - strh r0, [r6, 0xA] - ldr r0, _0810A23C - str r0, [r6] - b _0810A282 - .align 2, 0 -_0810A218: .4byte gTasks -_0810A21C: .4byte gMain -_0810A220: .4byte gUnknown_083F76BE -_0810A224: .4byte REG_WIN0H -_0810A228: .4byte gSpriteTemplate_83F77FC -_0810A22C: .4byte gUnknown_083F76B8 -_0810A230: .4byte gSprites -_0810A234: .4byte gUnknown_083F778C -_0810A238: .4byte sub_810A6C4 -_0810A23C: .4byte sub_810A288 -_0810A240: - movs r0, 0x20 - ands r0, r3 - cmp r0, 0 - beq _0810A25C - cmp r4, 0 - beq _0810A25C - subs r1, r7, 0x1 - strh r1, [r6, 0x8] - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl sub_810A42C - b _0810A282 -_0810A25C: - ldrh r1, [r1, 0x2E] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _0810A282 - cmp r4, 0x1 - bhi _0810A282 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r2 - ldrh r1, [r0, 0x8] - adds r1, 0x1 - strh r1, [r0, 0x8] - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl sub_810A42C -_0810A282: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_810A178 - - thumb_func_start sub_810A288 -sub_810A288: @ 810A288 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r3, _0810A2CC - ldr r2, _0810A2D0 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r2, r1, r2 - movs r0, 0xC - ldrsh r1, [r2, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r1, r0, r3 - adds r0, r1, 0 - adds r0, 0x3F - ldrb r0, [r0] - lsls r0, 26 - cmp r0, 0 - bge _0810A2C6 - movs r3, 0x20 - ldrsh r0, [r1, r3] - cmp r0, 0x78 - bne _0810A2C6 - movs r3, 0x22 - ldrsh r0, [r1, r3] - cmp r0, 0x40 - bne _0810A2C6 - ldr r0, _0810A2D4 - str r0, [r2] -_0810A2C6: - pop {r0} - bx r0 - .align 2, 0 -_0810A2CC: .4byte gSprites -_0810A2D0: .4byte gTasks -_0810A2D4: .4byte sub_810A2D8 - thumb_func_end sub_810A288 - - thumb_func_start sub_810A2D8 -sub_810A2D8: @ 810A2D8 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0810A324 - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - adds r4, r1 - ldrh r0, [r4, 0x8] - bl sub_8109E50 - lsls r0, 16 - lsrs r0, 16 - movs r1, 0 - bl PlayCry1 - movs r0, 0x2 - movs r1, 0xE - movs r2, 0x1B - movs r3, 0x13 - bl MenuDrawTextWindow - ldr r0, _0810A328 - movs r1, 0x3 - movs r2, 0xF - bl MenuPrint - movs r0, 0x15 - movs r1, 0x7 - movs r2, 0x1 - bl DisplayYesNoMenu - ldr r0, _0810A32C - str r0, [r4] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0810A324: .4byte gTasks -_0810A328: .4byte gOtherText_DoYouChoosePoke -_0810A32C: .4byte sub_810A330 - thumb_func_end sub_810A2D8 - - thumb_func_start sub_810A330 -sub_810A330: @ 810A330 - push {r4-r6,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl ProcessMenuInputNoWrap_ - lsls r0, 24 - asrs r1, r0, 24 - cmp r1, 0 - beq _0810A356 - cmp r1, 0 - bgt _0810A350 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _0810A37C - b _0810A3E2 -_0810A350: - cmp r1, 0x1 - beq _0810A37C - b _0810A3E2 -_0810A356: - ldr r2, _0810A370 - ldr r1, _0810A374 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldrh r0, [r0, 0x8] - strh r0, [r2] - ldr r0, _0810A378 - ldr r0, [r0, 0x8] - bl SetMainCallback2 - b _0810A3E2 - .align 2, 0 -_0810A370: .4byte gScriptResult -_0810A374: .4byte gTasks -_0810A378: .4byte gMain -_0810A37C: - movs r0, 0x5 - bl PlaySE - movs r0, 0x15 - movs r1, 0x7 - movs r2, 0x1B - movs r3, 0xC - bl MenuZeroFillWindowRect - ldr r0, _0810A3E8 - lsls r5, r4, 2 - adds r5, r4 - lsls r5, 3 - adds r5, r0 - ldrb r0, [r5, 0xA] - ldr r6, _0810A3EC - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - adds r4, r6 - ldrb r0, [r4, 0x5] - lsrs r0, 4 - bl GetSpritePaletteTagByPaletteNum - lsls r0, 16 - lsrs r0, 16 - bl FreeSpritePaletteByTag - ldrb r0, [r4, 0x3] - lsls r0, 26 - lsrs r0, 27 - bl FreeOamMatrix - adds r0, r4, 0 - bl DestroySprite - ldrb r0, [r5, 0xC] - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - adds r4, r6 - ldrb r0, [r4, 0x3] - lsls r0, 26 - lsrs r0, 27 - bl FreeOamMatrix - adds r0, r4, 0 - bl DestroySprite - ldr r0, _0810A3F0 - str r0, [r5] -_0810A3E2: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0810A3E8: .4byte gTasks -_0810A3EC: .4byte gSprites -_0810A3F0: .4byte sub_810A3F4 - thumb_func_end sub_810A330 - - thumb_func_start sub_810A3F4 -sub_810A3F4: @ 810A3F4 - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0810A408 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - ldr r0, _0810A40C - str r0, [r1] - bx lr - .align 2, 0 -_0810A408: .4byte gTasks -_0810A40C: .4byte sub_810A134 - thumb_func_end sub_810A3F4 - - thumb_func_start sub_810A410 -sub_810A410: @ 810A410 - push {r4,lr} - movs r4, 0xFC - strb r4, [r0] - adds r0, 0x1 - movs r4, 0x4 - strb r4, [r0] - adds r0, 0x1 - strb r2, [r0] - adds r0, 0x1 - strb r1, [r0] - strb r3, [r0, 0x1] - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_810A410 - - thumb_func_start sub_810A42C -sub_810A42C: @ 810A42C - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x48 - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r6, r1, 24 - cmp r0, 0xFF - beq _0810A46A - ldr r1, _0810A568 - lsls r2, r0, 1 - adds r0, r2, r1 - ldrb r0, [r0] - adds r1, 0x1 - adds r2, r1 - ldrb r1, [r2] - adds r2, r0, 0 - adds r2, 0xD - lsls r2, 24 - lsrs r2, 24 - adds r3, r1, 0x3 - lsls r3, 24 - lsrs r3, 24 - bl MenuZeroFillWindowRect - ldr r0, _0810A56C - movs r1, 0 - strh r1, [r0] - adds r0, 0x4 - strh r1, [r0] -_0810A46A: - adds r0, r6, 0 - bl sub_8109E50 - lsls r0, 16 - lsrs r7, r0, 16 - adds r0, r7, 0 - bl SpeciesToNationalPokedexNum - lsls r0, 16 - lsrs r0, 16 - bl sub_8090D3C - adds r5, r0, 0 - mov r0, sp - movs r1, 0 - movs r2, 0xF - movs r3, 0x8 - bl sub_810A410 - movs r4, 0x5 - mov r2, sp - adds r2, 0x5 - movs r0, 0xFC - strb r0, [r2] - mov r1, sp - adds r1, 0x6 - movs r0, 0x11 - strb r0, [r1] - mov r0, sp - adds r0, 0x7 - strb r4, [r0] - movs r4, 0x8 - movs r3, 0 - ldrb r0, [r5] - mov r8, r2 - lsls r6, 1 - cmp r0, 0xFF - beq _0810A4D8 -_0810A4B6: - mov r0, sp - adds r1, r0, r4 - adds r0, r5, r3 - ldrb r0, [r0] - strb r0, [r1] - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - adds r0, r5, r3 - ldrb r0, [r0] - cmp r0, 0xFF - beq _0810A4D8 - cmp r3, 0xA - bls _0810A4B6 -_0810A4D8: - adds r1, r4, 0 - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - add r1, sp - movs r0, 0 - strb r0, [r1] - mov r1, sp - adds r0, r1, r4 - ldr r1, _0810A570 - bl StringCopy - ldr r0, _0810A568 - adds r1, r6, r0 - ldrb r4, [r1] - adds r0, 0x1 - adds r0, r6, r0 - ldrb r5, [r0] - mov r0, sp - adds r1, r4, 0 - adds r2, r5, 0 - bl MenuPrint - mov r0, sp - movs r1, 0 - movs r2, 0xF - movs r3, 0x8 - bl sub_810A410 - movs r0, 0xB - adds r1, r7, 0 - muls r1, r0 - ldr r0, _0810A574 - adds r1, r0 - mov r0, r8 - movs r2, 0x6B - movs r3, 0x1 - bl sub_8072C74 - adds r2, r5, 0x2 - lsls r2, 24 - lsrs r2, 24 - mov r0, sp - adds r1, r4, 0 - bl MenuPrint - lsls r0, r4, 3 - adds r0, 0x4 - lsls r0, 24 - adds r4, 0xD - lsls r4, 3 - adds r4, 0x4 - lsls r4, 24 - lsrs r4, 24 - lsls r1, r5, 27 - adds r5, 0x4 - lsls r5, 27 - lsrs r5, 24 - ldr r2, _0810A56C - lsrs r0, 16 - orrs r0, r4 - strh r0, [r2] - ldr r0, _0810A578 - lsrs r1, 16 - orrs r1, r5 - strh r1, [r0] - add sp, 0x48 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0810A568: .4byte gUnknown_083F76BE -_0810A56C: .4byte REG_WIN0H -_0810A570: .4byte gOtherText_Poke -_0810A574: .4byte gSpeciesNames -_0810A578: .4byte REG_WIN0V - thumb_func_end sub_810A42C - - thumb_func_start nullsub_72 -nullsub_72: @ 810A57C - bx lr - thumb_func_end nullsub_72 - - thumb_func_start sub_810A580 -sub_810A580: @ 810A580 - push {r4-r6,lr} - mov r6, r9 - mov r5, r8 - push {r5,r6} - sub sp, 0x8 - adds r5, r0, 0 - mov r8, r1 - mov r9, r2 - lsls r5, 16 - lsrs r5, 16 - mov r0, r8 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - mov r0, r9 - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - lsls r6, r5, 3 - ldr r0, _0810A610 - adds r0, r6, r0 - ldr r1, _0810A614 - lsls r2, r5, 2 - adds r2, r1 - ldrb r1, [r2] - ldrb r2, [r2, 0x1] - ldr r4, _0810A618 - ldr r3, [r4] - ldr r4, [r4, 0x4] - str r4, [sp] - str r5, [sp, 0x4] - bl DecompressPicFromTable_2 - ldr r0, _0810A61C - adds r6, r0 - adds r0, r6, 0 - bl LoadCompressedObjectPalette - adds r0, r5, 0 - movs r1, 0x1 - bl GetMonSpriteTemplate_803C56C - ldr r0, _0810A620 - mov r1, r8 - mov r2, r9 - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - ldr r4, _0810A624 - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r1, r4, 0 - adds r1, 0x1C - adds r1, r2, r1 - ldr r3, _0810A628 - str r3, [r1] - adds r2, r4 - ldrb r3, [r2, 0x5] - movs r1, 0xD - negs r1, r1 - ands r1, r3 - strb r1, [r2, 0x5] - add sp, 0x8 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_0810A610: .4byte gMonFrontPicTable -_0810A614: .4byte gMonFrontPicCoords -_0810A618: .4byte gUnknown_081FAF4C -_0810A61C: .4byte gMonPaletteTable -_0810A620: .4byte gUnknown_02024E8C -_0810A624: .4byte gSprites -_0810A628: .4byte nullsub_72 - thumb_func_end sub_810A580 - - thumb_func_start sub_810A62C -sub_810A62C: @ 810A62C - push {r4,lr} - adds r4, r0, 0 - ldr r2, _0810A684 - ldr r3, _0810A688 - movs r0, 0x2E - ldrsh r1, [r4, r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r3 - movs r1, 0x8 - ldrsh r0, [r0, r1] - lsls r0, 1 - adds r0, r2 - ldrb r0, [r0] - strh r0, [r4, 0x20] - movs r0, 0x2E - ldrsh r1, [r4, r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r3 - movs r1, 0x8 - ldrsh r0, [r0, r1] - lsls r0, 1 - adds r2, 0x1 - adds r0, r2 - ldrb r0, [r0] - strh r0, [r4, 0x22] - movs r1, 0x30 - ldrsh r0, [r4, r1] - movs r1, 0x8 - bl Sin - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x30] - lsls r0, 24 - lsrs r0, 24 - adds r0, 0x4 - strh r0, [r4, 0x30] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0810A684: .4byte gUnknown_083F76E4 -_0810A688: .4byte gTasks - thumb_func_end sub_810A62C - - thumb_func_start sub_810A68C -sub_810A68C: @ 810A68C - push {lr} - adds r3, r0, 0 - ldr r2, _0810A6B4 - movs r0, 0x2E - ldrsh r1, [r3, r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - movs r2, 0x8 - ldrsh r1, [r0, r2] - movs r2, 0x30 - ldrsh r0, [r3, r2] - cmp r1, r0 - bne _0810A6B8 - adds r0, r3, 0 - movs r1, 0x1 - bl StartSpriteAnimIfDifferent - b _0810A6C0 - .align 2, 0 -_0810A6B4: .4byte gTasks -_0810A6B8: - adds r0, r3, 0 - movs r1, 0 - bl StartSpriteAnimIfDifferent -_0810A6C0: - pop {r0} - bx r0 - thumb_func_end sub_810A68C - - thumb_func_start sub_810A6C4 -sub_810A6C4: @ 810A6C4 - push {lr} - adds r1, r0, 0 - ldrh r2, [r1, 0x20] - movs r3, 0x20 - ldrsh r0, [r1, r3] - cmp r0, 0x78 - ble _0810A6D6 - subs r0, r2, 0x4 - strh r0, [r1, 0x20] -_0810A6D6: - ldrh r2, [r1, 0x20] - movs r3, 0x20 - ldrsh r0, [r1, r3] - cmp r0, 0x77 - bgt _0810A6E4 - adds r0, r2, 0x4 - strh r0, [r1, 0x20] -_0810A6E4: - ldrh r2, [r1, 0x22] - movs r3, 0x22 - ldrsh r0, [r1, r3] - cmp r0, 0x40 - ble _0810A6F2 - subs r0, r2, 0x2 - strh r0, [r1, 0x22] -_0810A6F2: - ldrh r2, [r1, 0x22] - movs r3, 0x22 - ldrsh r0, [r1, r3] - cmp r0, 0x3F - bgt _0810A700 - adds r0, r2, 0x2 - strh r0, [r1, 0x22] -_0810A700: - pop {r0} - bx r0 - thumb_func_end sub_810A6C4 - .align 2, 0 @ Don't pad with nop. diff --git a/asm/rom6.s b/asm/rom6.s index 165c8b229..038db98db 100644 --- a/asm/rom6.s +++ b/asm/rom6.s @@ -8694,7 +8694,7 @@ sub_810F694: @ 810F694 bl VarGet lsls r0, 16 lsrs r0, 16 - bl sub_8109E50 + bl GetStarterPokemon lsls r0, 16 lsrs r6, r0, 16 bl CalculatePlayerPartyCount @@ -118856,7 +118856,7 @@ sub_81458DC: @ 81458DC bl VarGet lsls r0, 16 lsrs r0, 16 - bl sub_8109E50 + bl GetStarterPokemon lsls r0, 16 lsrs r0, 16 bl SpeciesToNationalPokedexNum diff --git a/data/data2.s b/data/data2.s index 4c976cd75..21a0c4c5a 100644 --- a/data/data2.s +++ b/data/data2.s @@ -23922,15 +23922,22 @@ gBirchBallarrow_Gfx:: gBirchCircle_Gfx:: .incbin "graphics/misc/birch_circle.4bpp.lz" -gUnknown_083F76B8:: @ 83F76B8 - .incbin "baserom.gba", 0x003f76b8, 0x6 +gStarterChoose_PokeballCoords:: @ 83F76B8 + .byte 60, 64 + .byte 120, 88 + .byte 692, 64 -gUnknown_083F76BE:: @ 83F76BE - .incbin "baserom.gba", 0x003f76be, 0x6 - -gUnknown_083F76C4:: @ 83F76C4 - .incbin "baserom.gba", 0x003f76c4, 0x8 +gStarterChoose_LabelCoords:: @ 83F76BE + .byte 0, 9 + .byte 16, 10 + .byte 8, 4 +gStarterMons:: @ 83F76C4 + .2byte SPECIES_TREECKO + .2byte SPECIES_TORCHIC + .2byte SPECIES_MUDKIP + .2byte 0 + .align 2 gOamData_83F76CC:: @ 83F76CC .2byte 0x00A0 @@ -24042,7 +24049,7 @@ gSpriteTemplate_83F77E4:: @ 83F77E4 .align 2 gSpriteTemplate_83F77FC:: @ 83F77FC - spr_template 4097, 4097, gOamData_83F76DC, gSpriteAnimTable_83F7758, NULL, gSpriteAffineAnimTable_83F7790, sub_810A6C4 + spr_template 4097, 4097, gOamData_83F76DC, gSpriteAnimTable_83F7758, NULL, gSpriteAffineAnimTable_83F7790, StarterPokemonSpriteAnimCallback @ 83F7814 ClockGfx_Misc: diff --git a/ld_script.txt b/ld_script.txt index ae47a7157..e9aec19af 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -72,6 +72,7 @@ SECTIONS { asm/rom_8074BAC.o(.text); src/task.o(.text); asm/rom5.o(.text); + src/starter_choose.o(.text); src/wallclock.o(.text); asm/rom6.o(.text); } =0 diff --git a/src/starter_choose.c b/src/starter_choose.c new file mode 100644 index 000000000..0bb6c88b4 --- /dev/null +++ b/src/starter_choose.c @@ -0,0 +1,434 @@ +#include "gba/gba.h" +#include "main.h" +#include "menu.h" +#include "palette.h" +#include "pokemon.h" +#include "songs.h" +#include "sound.h" +#include "sprite.h" +#include "string_util.h" +#include "task.h" +#include "text.h" +#include "trig.h" + +//Functions that need to be put in headers +void LZ77UnCompVram(const void *src, void *dest); +void remove_some_task(void); +void LoadCompressedObjectPic(void *); +void LoadCompressedObjectPalette(const struct SpritePalette *); +u16 SpeciesToNationalPokedexNum(u16); +void DecompressPicFromTable_2(const struct SpriteSheet *, u8, u8, void *, void *, u32); + +struct MonCoords +{ + u8 x, y; +}; + +extern void * const gUnknown_081FAF4C[]; +extern const u8 gStarterChoose_PokeballCoords[][2]; +extern u8 gUnknown_083F66F0[]; +extern u8 gBirchBagTilemap[]; +extern u8 gBirchGrassTilemap[]; +extern u8 gUnknown_083F7794[]; +extern u8 gUnknown_083F77A4[]; +extern u8 gUnknown_083F62EC[]; +extern const u8 gStarterChoose_LabelCoords[][2]; +extern u16 gStarterMons[]; +extern union AffineAnimCmd *gUnknown_083F778C[]; +extern u8 gOtherText_DoYouChoosePoke[]; +extern u16 gScriptResult; +extern u8 gSpeciesNames[][11]; +extern u8 gOtherText_Poke[]; +extern const struct SpriteSheet gMonFrontPicTable[]; +extern const struct MonCoords gMonFrontPicCoords[]; +extern const struct SpritePalette gMonPaletteTable[]; +extern u8 gUnknown_083F76E4[][2]; +extern u8 gOtherText_BirchInTrouble[]; + +extern struct WindowConfig gWindowConfig_81E6C3C; +extern struct WindowConfig gWindowConfig_81E6CE4; +extern struct SpriteTemplate gSpriteTemplate_83F77E4; +extern struct SpriteTemplate gSpriteTemplate_83F77CC; +extern struct SpritePalette gUnknown_083F77B4[]; +extern struct SpriteTemplate gSpriteTemplate_83F77FC; +extern struct SpriteTemplate gUnknown_02024E8C; + +u16 GetStarterPokemon(u16); +static void MainCallback2(void); +static void Task_StarterChoose1(u8 taskId); +static void Task_StarterChoose2(u8 taskId); +static void Task_StarterChoose3(u8 taskId); +static void Task_StarterChoose4(u8 taskId); +static void Task_StarterChoose5(u8 taskId); +static void Task_StarterChoose6(u8 taskId); + +extern u8 *GetPokemonCategory(u16); +static void CreateStarterPokemonLabel(u8, u8); +static u8 CreatePokemonFrontSprite(u16, u8, u8); +void StarterPokemonSpriteAnimCallback(struct Sprite *); + +//Task data +enum { + TD_STARTERSELECTION, + TD_POKEMON_SPRITE, + TD_CIRCLE_SPRITE, +}; + +//Retrieves one of the available starter Pokemon +u16 GetStarterPokemon(u16 n) +{ + if(n > 3) + n = 0; + return gStarterMons[n]; +} + +static void VblankCallback(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void CB2_ChooseStarter(void) +{ + u16 savedIme; + u8 taskId; + u8 spriteId; + + SetVBlankCallback(NULL); + + REG_DISPCNT = 0; + REG_BG3CNT = 0; + REG_BG2CNT = 0; + REG_BG1CNT = 0; + REG_BG0CNT = 0; + REG_BG3HOFS = 0; + REG_BG3VOFS = 0; + REG_BG2HOFS = 0; + REG_BG2VOFS = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + + DmaFill16(3, 0, VRAM, VRAM_SIZE); + DmaFill32(3, 0, OAM, OAM_SIZE); + DmaFill16(3, 0, PLTT, PLTT_SIZE); + + LZ77UnCompVram(&gUnknown_083F66F0, (void *)VRAM); + LZ77UnCompVram(&gBirchBagTilemap, (void *)(VRAM + 0x3000)); + LZ77UnCompVram(&gBirchGrassTilemap, (void *)(VRAM + 0x3800)); + remove_some_task(); + ResetTasks(); + ResetSpriteData(); + ResetPaletteFade(); + FreeAllSpritePalettes(); + LoadPalette(gUnknown_083F62EC, 0, 0x40); + LoadCompressedObjectPic(gUnknown_083F7794); + LoadCompressedObjectPic(gUnknown_083F77A4); + LoadSpritePalettes(gUnknown_083F77B4); + SetUpWindowConfig(&gWindowConfig_81E6C3C); + InitMenuWindow(&gWindowConfig_81E6CE4); + BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); + + savedIme = REG_IME; + REG_IME = 0; + REG_IE |= INTR_FLAG_VBLANK; + REG_IME = savedIme; + REG_DISPSTAT |= DISPSTAT_VBLANK_INTR; + + SetVBlankCallback(VblankCallback); + SetMainCallback2(MainCallback2); + + REG_WININ = 0x3F; + REG_WINOUT = 0x1F; + REG_WIN0H = 0; + REG_WIN0V = 0; + REG_BLDCNT = 0xFE; + REG_BLDALPHA = 0; + REG_BLDY = 0x7; + REG_BG3CNT = 0x703; + REG_BG2CNT = 0x602; + REG_BG0CNT = 0x1F08; + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG2_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON; + + taskId = CreateTask(Task_StarterChoose1, 0); + gTasks[taskId].data[TD_STARTERSELECTION] = 1; + + //Create hand sprite + spriteId = CreateSprite(&gSpriteTemplate_83F77CC, 120, 56, 2); + gSprites[spriteId].data0 = taskId; + + //Create three Pokeball sprites + spriteId = CreateSprite( + &gSpriteTemplate_83F77E4, + gStarterChoose_PokeballCoords[0][0], gStarterChoose_PokeballCoords[0][1], 2); + gSprites[spriteId].data0 = taskId; + gSprites[spriteId].data1 = 0; + spriteId = CreateSprite( + &gSpriteTemplate_83F77E4, + gStarterChoose_PokeballCoords[1][0], gStarterChoose_PokeballCoords[1][1], 2); + gSprites[spriteId].data0 = taskId; + gSprites[spriteId].data1 = 1; + spriteId = CreateSprite( + &gSpriteTemplate_83F77E4, + gStarterChoose_PokeballCoords[2][0], gStarterChoose_PokeballCoords[2][1], 2); + gSprites[spriteId].data0 = taskId; + gSprites[spriteId].data1 = 2; +} + +static void MainCallback2(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +static void Task_StarterChoose1(u8 taskId) +{ + CreateStarterPokemonLabel(0xFF, gTasks[taskId].data[TD_STARTERSELECTION]); + MenuDrawTextWindow(2, 14, 27, 19); + MenuPrint(gOtherText_BirchInTrouble, 3, 15); + gTasks[taskId].func = Task_StarterChoose2; +} + +static void Task_StarterChoose2(u8 taskId) +{ + u8 selection = gTasks[taskId].data[TD_STARTERSELECTION]; + + if(gMain.newKeys & A_BUTTON) + { + u8 spriteId; + + MenuZeroFillWindowRect( + gStarterChoose_LabelCoords[selection][0], + gStarterChoose_LabelCoords[selection][1], + gStarterChoose_LabelCoords[selection][0] + 13, + gStarterChoose_LabelCoords[selection][1] + 3); + + REG_WIN0H = 0; + REG_WIN0V = 0; + + //Create white circle background + spriteId = CreateSprite( + &gSpriteTemplate_83F77FC, + gStarterChoose_PokeballCoords[selection][0], + gStarterChoose_PokeballCoords[selection][1], + 1); + gTasks[taskId].data[TD_CIRCLE_SPRITE] = spriteId; + + //Create Pokemon sprite + spriteId = CreatePokemonFrontSprite( + GetStarterPokemon(gTasks[taskId].data[TD_STARTERSELECTION]), + gStarterChoose_PokeballCoords[selection][0], + gStarterChoose_PokeballCoords[selection][1]); + gSprites[spriteId].affineAnims = gUnknown_083F778C; + gSprites[spriteId].callback = StarterPokemonSpriteAnimCallback; + gTasks[taskId].data[TD_POKEMON_SPRITE] = spriteId; + + gTasks[taskId].func = Task_StarterChoose3; + } + else + { + if((gMain.newKeys & DPAD_LEFT) && selection != 0) + { + gTasks[taskId].data[TD_STARTERSELECTION]--; + CreateStarterPokemonLabel(selection, gTasks[taskId].data[TD_STARTERSELECTION]); + } + else if((gMain.newKeys & DPAD_RIGHT) && selection <= 1) + { + gTasks[taskId].data[TD_STARTERSELECTION]++; + CreateStarterPokemonLabel(selection, gTasks[taskId].data[TD_STARTERSELECTION]); + } + } +} + +static void Task_StarterChoose3(u8 taskId) +{ + if(gSprites[gTasks[taskId].data[TD_CIRCLE_SPRITE]].affineAnimEnded && + gSprites[gTasks[taskId].data[TD_CIRCLE_SPRITE]].pos1.x == 120 && + gSprites[gTasks[taskId].data[TD_CIRCLE_SPRITE]].pos1.y == 64) + { + gTasks[taskId].func = Task_StarterChoose4; + } +} + +static void Task_StarterChoose4(u8 taskId) +{ + PlayCry1(GetStarterPokemon(gTasks[taskId].data[TD_STARTERSELECTION]), 0); + MenuDrawTextWindow(2, 14, 27, 19); + //"Do you choose this POKEMON?" + MenuPrint(gOtherText_DoYouChoosePoke, 3, 15); + DisplayYesNoMenu(21, 7, 1); + gTasks[taskId].func = Task_StarterChoose5; +} + +static void Task_StarterChoose5(u8 taskId) +{ + u8 spriteId; + + switch(ProcessMenuInputNoWrap_()) + { + case 0: //YES + //Return the starter choice and exit. + gScriptResult = gTasks[taskId].data[TD_STARTERSELECTION]; + SetMainCallback2(gMain.field_8); + break; + case 1: //NO + case -1: //B button + PlaySE(SE_SELECT); + MenuZeroFillWindowRect(21, 7, 27, 12); + + spriteId = gTasks[taskId].data[TD_POKEMON_SPRITE]; + FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(gSprites[spriteId].oam.paletteNum)); + FreeOamMatrix(gSprites[spriteId].oam.matrixNum); + DestroySprite(&gSprites[spriteId]); + + spriteId = gTasks[taskId].data[TD_CIRCLE_SPRITE]; + FreeOamMatrix(gSprites[spriteId].oam.matrixNum); + DestroySprite(&gSprites[spriteId]); + gTasks[taskId].func = Task_StarterChoose6; + break; + } +} + +static void Task_StarterChoose6(u8 taskId) +{ + gTasks[taskId].func = Task_StarterChoose1; +} + +static void AddTextColorCtrlCode(u8 *string, u8 bgColor, u8 textColor, u8 shadowColor) +{ + *(string++) = EXT_CTRL_CODE_BEGIN; + *(string++) = 4; + *(string++) = textColor; + *(string++) = bgColor; + *(string++) = shadowColor; +} + +#define SET_CHAR(str, index, c) \ +{ \ + u8 *p = str + index; \ + *p = c; \ +} + +static void CreateStarterPokemonLabel(u8 prevSelection, u8 selection) +{ + u8 labelText[72]; + u8 *category; + u8 srcIndex; + u8 dstIndex; + u16 species; + + u8 labelLeft; + u8 labelRight; + u8 labelTop; + u8 labelBottom; + + if(prevSelection != 0xFF) + { + //Remove the old Pokemon label + MenuZeroFillWindowRect( + gStarterChoose_LabelCoords[prevSelection][0], + gStarterChoose_LabelCoords[prevSelection][1], + gStarterChoose_LabelCoords[prevSelection][0] + 13, + gStarterChoose_LabelCoords[prevSelection][1] + 3); + REG_WIN0H = 0; + REG_WIN0V = 0; + } + species = GetStarterPokemon(selection); + category = GetPokemonCategory(SpeciesToNationalPokedexNum(species)); + AddTextColorCtrlCode(labelText, 0, 15, 8); + dstIndex = 5; + SET_CHAR(labelText, 5, EXT_CTRL_CODE_BEGIN); + SET_CHAR(labelText, 6, 0x11); + SET_CHAR(labelText, 7, dstIndex); + + //Copy category string to label + dstIndex = 8; + srcIndex = 0; + while(category[srcIndex] != EOS && srcIndex <= 10) + { + labelText[dstIndex] = category[srcIndex]; + srcIndex++; + dstIndex++; + } + labelText[dstIndex++] = CHAR_SPACE; + + //Copy POKEMON string to label + StringCopy(labelText + dstIndex, gOtherText_Poke); + MenuPrint( + labelText, + gStarterChoose_LabelCoords[selection][0], + gStarterChoose_LabelCoords[selection][1]); + AddTextColorCtrlCode(labelText, 0, 15, 8); + + //Copy Pokemon name to label + sub_8072C74(labelText + 5, gSpeciesNames[species], 0x6B, 1); + MenuPrint( + labelText, + gStarterChoose_LabelCoords[selection][0], + gStarterChoose_LabelCoords[selection][1] + 2); + + labelLeft = gStarterChoose_LabelCoords[selection][0] * 8 + 4; + labelRight = (gStarterChoose_LabelCoords[selection][0] + 13) * 8 + 4; + labelTop = gStarterChoose_LabelCoords[selection][1] * 8; + labelBottom = (gStarterChoose_LabelCoords[selection][1] + 4) * 8; + REG_WIN0H = WIN_RANGE(labelLeft, labelRight); + REG_WIN0V = WIN_RANGE(labelTop, labelBottom); +} + +void nullsub_72(struct Sprite *sprite) +{ + +} + +static u8 CreatePokemonFrontSprite(u16 species, u8 x, u8 y) +{ + u8 spriteId; + + DecompressPicFromTable_2( + &gMonFrontPicTable[species], + gMonFrontPicCoords[species].x, gMonFrontPicCoords[species].y, + gUnknown_081FAF4C[0], gUnknown_081FAF4C[1], + species); + LoadCompressedObjectPalette(&gMonPaletteTable[species]); + GetMonSpriteTemplate_803C56C(species, 1); + spriteId = CreateSprite(&gUnknown_02024E8C, x, y, 0); + gSprites[spriteId].callback = nullsub_72; + gSprites[spriteId].oam.priority = 0; + return spriteId; +} + +//Sprite callback +void sub_810A62C(struct Sprite *sprite) +{ + sprite->pos1.x = gUnknown_083F76E4[gTasks[sprite->data0].data[TD_STARTERSELECTION]][0]; + sprite->pos1.y = gUnknown_083F76E4[gTasks[sprite->data0].data[TD_STARTERSELECTION]][1]; + sprite->pos2.y = Sin(sprite->data1, 8); + sprite->data1 = (u8)sprite->data1 + 4; +} + +//Sprite callback +void sub_810A68C(struct Sprite *sprite) +{ + if(gTasks[sprite->data0].data[TD_STARTERSELECTION] == sprite->data1) + StartSpriteAnimIfDifferent(sprite, 1); + else + StartSpriteAnimIfDifferent(sprite, 0); +} + +//Sprite callback +void StarterPokemonSpriteAnimCallback(struct Sprite *sprite) +{ + //Move sprite to upper center of screen + if(sprite->pos1.x > 120) + sprite->pos1.x -= 4; + if(sprite->pos1.x <= 119) + sprite->pos1.x += 4; + if(sprite->pos1.y > 64) + sprite->pos1.y -= 2; + if(sprite->pos1.y <= 63) + sprite->pos1.y += 2; +} |