summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2018-04-26 19:49:36 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2018-04-26 19:49:36 -0400
commit21415be0d3bcd5edffbd83777660af319a01e51b (patch)
treea9577e7d623cf0e98031bda7c4a5637c4d67c896
parent260ec0d276221c9252b2276a50587fb708f79fcf (diff)
Fix the swiss cheese in pokedex_cry_screen
-rw-r--r--asm/pokedex_cry_screen.s277
-rw-r--r--ld_script.txt1
-rw-r--r--src/pokedex_cry_screen.c100
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;
+}