diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2018-04-26 19:49:36 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2018-04-26 19:49:36 -0400 |
commit | 21415be0d3bcd5edffbd83777660af319a01e51b (patch) | |
tree | a9577e7d623cf0e98031bda7c4a5637c4d67c896 | |
parent | 260ec0d276221c9252b2276a50587fb708f79fcf (diff) |
Fix the swiss cheese in pokedex_cry_screen
-rw-r--r-- | asm/pokedex_cry_screen.s | 277 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/pokedex_cry_screen.c | 100 |
3 files changed, 97 insertions, 281 deletions
diff --git a/asm/pokedex_cry_screen.s b/asm/pokedex_cry_screen.s index 00f8cfe14..cc9ed7dc3 100644 --- a/asm/pokedex_cry_screen.s +++ b/asm/pokedex_cry_screen.s @@ -736,281 +736,4 @@ _0811A3C4: _0811A3C8: .4byte REG_BG3HOFS thumb_func_end sub_811A350 -.section .text_811A4F8 - - thumb_func_start DestroyCryMeterNeedleSprite -DestroyCryMeterNeedleSprite: @ 811A4F8 - push {r4,r5,lr} - ldr r5, _0811A52C @ =gSprites - ldr r4, _0811A530 @ =gSharedMem + 0x1C800 - ldrh r1, [r4, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldrb r0, [r0, 0x5] - lsrs r0, 4 - bl GetSpritePaletteTagByPaletteNum - lsls r0, 16 - lsrs r0, 16 - bl FreeSpritePaletteByTag - ldrh r1, [r4, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - bl DestroySprite - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0811A52C: .4byte gSprites -_0811A530: .4byte gSharedMem + 0x1C800 - thumb_func_end DestroyCryMeterNeedleSprite - - thumb_func_start sub_811A534 -sub_811A534: @ 811A534 - push {r4-r7,lr} - sub sp, 0x14 - adds r7, r0, 0 - ldr r3, _0811A578 @ =gSprites - ldr r5, _0811A57C @ =gSharedMem + 0x1C800 - ldrh r1, [r5, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - ldrb r2, [r0, 0x1] - movs r1, 0x4 - negs r1, r1 - ands r1, r2 - movs r2, 0x1 - orrs r1, r2 - strb r1, [r0, 0x1] - ldrh r1, [r5, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - movs r1, 0 - strh r1, [r0, 0x6] - ldr r0, _0811A580 @ =0xfffff800 - adds r1, r5, r0 - ldrb r0, [r1, 0x10] - cmp r0, 0x2 - beq _0811A5AA - cmp r0, 0x2 - bgt _0811A584 - cmp r0, 0 - beq _0811A58A - b _0811A5F4 - .align 2, 0 -_0811A578: .4byte gSprites -_0811A57C: .4byte gSharedMem + 0x1C800 -_0811A580: .4byte 0xfffff800 -_0811A584: - cmp r0, 0x6 - beq _0811A5E2 - b _0811A5F4 -_0811A58A: - movs r0, 0x20 - strb r0, [r5, 0x1] - movs r0, 0 - ldrsb r0, [r5, r0] - cmp r0, 0 - ble _0811A5A4 - ldrb r0, [r5, 0x2] - add r4, sp, 0xC - cmp r0, 0x1 - beq _0811A5F6 - subs r0, 0x1 - strb r0, [r5, 0x2] - b _0811A5F6 -_0811A5A4: - movs r0, 0x5 - strb r0, [r5, 0x2] - b _0811A5F4 -_0811A5AA: - movs r3, 0 - movs r2, 0 - add r4, sp, 0xC - adds r5, r1, 0 -_0811A5B2: - lsls r1, r3, 24 - asrs r1, 24 - adds r0, r2, r5 - ldrb r0, [r0] - cmp r1, r0 - bge _0811A5C0 - adds r3, r0, 0 -_0811A5C0: - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, 0xF - bls _0811A5B2 - lsls r0, r3, 24 - asrs r0, 24 - movs r1, 0xD0 - muls r0, r1 - cmp r0, 0 - bge _0811A5D8 - adds r0, 0xFF -_0811A5D8: - lsls r0, 16 - asrs r0, 24 - bl sub_811A6D8 - b _0811A5F6 -_0811A5E2: - ldr r1, _0811A620 @ =0xfffff80a - adds r0, r5, r1 - ldrb r1, [r0] - movs r0, 0xD0 - muls r0, r1 - lsls r0, 16 - asrs r0, 24 - bl sub_811A6D8 -_0811A5F4: - add r4, sp, 0xC -_0811A5F6: - ldr r0, _0811A624 @ =gSharedMem + 0x1C800 - ldrb r3, [r0] - movs r2, 0 - ldrsb r2, [r0, r2] - ldrb r6, [r0, 0x1] - movs r1, 0x1 - ldrsb r1, [r0, r1] - adds r5, r0, 0 - cmp r2, r1 - beq _0811A63C - cmp r2, r1 - bge _0811A628 - ldrb r0, [r5, 0x2] - adds r0, r3, r0 - strb r0, [r5] - lsls r0, 24 - asrs r0, 24 - cmp r0, r1 - ble _0811A63C - b _0811A636 - .align 2, 0 -_0811A620: .4byte 0xfffff80a -_0811A624: .4byte gSharedMem + 0x1C800 -_0811A628: - ldrb r0, [r5, 0x2] - subs r0, r3, r0 - strb r0, [r5] - lsls r0, 24 - asrs r0, 24 - cmp r0, r1 - bge _0811A63C -_0811A636: - strb r6, [r5] - movs r0, 0 - strb r0, [r5, 0x1] -_0811A63C: - ldr r2, _0811A6CC @ =0xffff0000 - ldr r0, [sp, 0x4] - ands r0, r2 - movs r1, 0x80 - lsls r1, 1 - orrs r0, r1 - ldr r1, _0811A6D0 @ =0x0000ffff - ands r0, r1 - movs r1, 0x80 - lsls r1, 17 - orrs r0, r1 - str r0, [sp, 0x4] - movs r1, 0 - ldrsb r1, [r5, r1] - lsls r1, 24 - lsrs r1, 16 - ldr r0, [sp, 0x8] - ands r0, r2 - orrs r0, r1 - str r0, [sp, 0x8] - add r0, sp, 0x4 - adds r1, r4, 0 - movs r2, 0x1 - movs r3, 0x2 - bl ObjAffineSet - add r0, sp, 0xC - ldrh r1, [r0] - ldrh r2, [r4, 0x2] - ldrh r3, [r4, 0x4] - ldrh r0, [r4, 0x6] - str r0, [sp] - movs r0, 0 - bl SetOamMatrix - ldr r2, _0811A6D4 @ =gSineTable - movs r0, 0 - ldrsb r0, [r5, r0] - adds r0, 0x7F - movs r1, 0xFF - ands r0, r1 - lsls r1, r0, 1 - adds r1, r2 - adds r0, 0x40 - lsls r0, 1 - adds r0, r2 - ldrh r2, [r0] - movs r0, 0 - ldrsh r1, [r1, r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - cmp r0, 0 - bge _0811A6AA - adds r0, 0xFF -_0811A6AA: - asrs r0, 8 - strh r0, [r7, 0x24] - lsls r1, r2, 16 - asrs r1, 16 - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - cmp r0, 0 - bge _0811A6BE - adds r0, 0xFF -_0811A6BE: - asrs r0, 8 - strh r0, [r7, 0x26] - add sp, 0x14 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0811A6CC: .4byte 0xffff0000 -_0811A6D0: .4byte 0x0000ffff -_0811A6D4: .4byte gSineTable - thumb_func_end sub_811A534 - - thumb_func_start sub_811A6D8 -sub_811A6D8: @ 811A6D8 - push {lr} - lsls r0, 24 - asrs r0, 24 - movs r1, 0x20 - subs r2, r1, r0 - movs r0, 0xFF - ands r2, r0 - adds r0, r2, 0 - subs r0, 0x21 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0xBE - bhi _0811A6F4 - movs r2, 0xE0 -_0811A6F4: - ldr r1, _0811A700 @ =gSharedMem + 0x1C800 - strb r2, [r1, 0x1] - movs r0, 0x5 - strb r0, [r1, 0x2] - pop {r0} - bx r0 - .align 2, 0 -_0811A700: .4byte gSharedMem + 0x1C800 - thumb_func_end sub_811A6D8 - .align 2, 0 @ Don't pad with nop. diff --git a/ld_script.txt b/ld_script.txt index 688682a34..d7e2a5820 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -345,7 +345,6 @@ SECTIONS { src/roulette.o(.text); asm/pokedex_cry_screen.o(.text); src/pokedex_cry_screen.o(.text); - asm/pokedex_cry_screen.o(.text_811A4F8); src/coins.o(.text); src/landmark.o(.text); src/fldeff_strength.o(.text); diff --git a/src/pokedex_cry_screen.c b/src/pokedex_cry_screen.c index 912b9aabd..941218fb0 100644 --- a/src/pokedex_cry_screen.c +++ b/src/pokedex_cry_screen.c @@ -3,15 +3,27 @@ #include "palette.h" #include "sprite.h" #include "ewram.h" +#include "trig.h" struct Unk201C800 { - u8 unk_0; - u8 unk_1; + s8 unk_0; + s8 unk_1; u8 unk_2; - u8 filler_3; u16 unk_4; }; +struct PokedexCryScreen_201C000 +{ + u8 unk0000[0x10]; + u8 unk0010; + u8 filler_0011[0x7EF]; + struct Unk201C800 unk0800; +}; + +#define ePokedexCryScreen (*(struct PokedexCryScreen_201C000 *)(gSharedMem + 0x1C000)) + +void sub_811A6D8(s8); + extern u8 gUnknown_03005E98; // data/pokedex_cry_screen.o @@ -80,3 +92,85 @@ u8 ShowPokedexCryScreen(struct CryRelatedStruct *cry, u8 arg1) { return returnVal; } + +void DestroyCryMeterNeedleSprite(void) +{ + FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(gSprites[EWRAM_1C800.unk_4].oam.paletteNum)); + DestroySprite(gSprites + EWRAM_1C800.unk_4); +} + +void sub_811A534(struct Sprite * sprite) +{ + u16 i; + s8 r3; + s16 x; + s16 y; + struct ObjAffineSrcData sp04; + struct OamMatrix sp0c; + u8 * r0; + + gSprites[EWRAM_1C800.unk_4].oam.affineMode = ST_OAM_AFFINE_NORMAL; + gSprites[EWRAM_1C800.unk_4].oam.affineParam = 0; + switch (ePokedexCryScreen.unk0010) + { + case 0: + EWRAM_1C800.unk_1 = 0x20; + if (EWRAM_1C800.unk_0 > 0) + { + if (EWRAM_1C800.unk_2 != 1) + EWRAM_1C800.unk_2--; + } + else + EWRAM_1C800.unk_2 = 5; + break; + case 2: + r3 = 0; + for (i = 0; i < 16; i++) + { + if (r3 < ePokedexCryScreen.unk0000[i]) + r3 = ePokedexCryScreen.unk0000[i]; + } + sub_811A6D8(r3 * 0xd0 / 0x100); + break; + case 6: + r0 = &ePokedexCryScreen.unk0000[10]; + sub_811A6D8(*r0 * 0xd0 / 0x100); + break; + } + if (EWRAM_1C800.unk_0 == EWRAM_1C800.unk_1) + ; + else if (EWRAM_1C800.unk_0 < EWRAM_1C800.unk_1) + { + if ((EWRAM_1C800.unk_0 += EWRAM_1C800.unk_2) > EWRAM_1C800.unk_1) + { + EWRAM_1C800.unk_0 = EWRAM_1C800.unk_1; + EWRAM_1C800.unk_1 = 0; + } + } + else + { + if ((EWRAM_1C800.unk_0 -= EWRAM_1C800.unk_2) < EWRAM_1C800.unk_1) + { + EWRAM_1C800.unk_0 = EWRAM_1C800.unk_1; + EWRAM_1C800.unk_1 = 0; + } + } + sp04.xScale = 0x100; + sp04.yScale = 0x100; + sp04.rotation = EWRAM_1C800.unk_0 * 256; + ObjAffineSet(&sp04, &sp0c, 1, 2); + SetOamMatrix(0, sp0c.a, sp0c.b, sp0c.c, sp0c.d); + x = gSineTable[((EWRAM_1C800.unk_0 + 0x7F) & 0xFF)]; + y = gSineTable[((EWRAM_1C800.unk_0 + 0x7F) & 0xFF) + 0x40]; + sprite->pos2.x = x * 24 / 256; + sprite->pos2.y = y * 24 / 256; +} + +void sub_811A6D8(s8 a0) +{ + u16 r2 = (0x20 - a0) & 0xff; + if (r2 > 0x20 && r2 < 0xe0) + r2 = 0xe0; + EWRAM_1C800.unk_1 = r2; + EWRAM_1C800.unk_2 = 5; +} |