summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2018-04-28 14:09:33 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2018-04-28 14:09:33 -0400
commit4f66d1b7f2630aa1b805ac8e848ebae38faaacd3 (patch)
treec487f306b352fee6cab0fabbdda34960a79f929c /src
parent21415be0d3bcd5edffbd83777660af319a01e51b (diff)
through sub_811A15C (two nonmatching)
Diffstat (limited to 'src')
-rw-r--r--src/main.c2
-rw-r--r--src/pokedex_cry_screen.c413
2 files changed, 412 insertions, 3 deletions
diff --git a/src/main.c b/src/main.c
index 54a443e80..d7ef91df0 100644
--- a/src/main.c
+++ b/src/main.c
@@ -68,7 +68,7 @@ u8 gSoftResetDisabled;
IntrFunc gIntrTable[INTR_COUNT];
bool8 gLinkVSyncDisabled;
u32 IntrMain_Buffer[0x200];
-u8 gPcmDmaCounter;
+s8 gPcmDmaCounter;
EWRAM_DATA u8 gSharedMem[0x20000] = {0};
EWRAM_DATA void (**gFlashTimerIntrFunc)(void) = NULL;
diff --git a/src/pokedex_cry_screen.c b/src/pokedex_cry_screen.c
index 941218fb0..b6abd436d 100644
--- a/src/pokedex_cry_screen.c
+++ b/src/pokedex_cry_screen.c
@@ -1,9 +1,19 @@
#include "global.h"
+#include "m4a.h"
+#include "main.h"
#include "pokedex_cry_screen.h"
#include "palette.h"
#include "sprite.h"
#include "ewram.h"
#include "trig.h"
+#include "sound.h"
+
+extern struct SoundInfo gSoundInfo;
+extern struct MusicPlayerInfo gMPlay_BGM;
+
+struct Unk2000000 {
+ u16 unk0000[7 * 32][16];
+};
struct Unk201C800 {
s8 unk_0;
@@ -16,17 +26,32 @@ struct PokedexCryScreen_201C000
{
u8 unk0000[0x10];
u8 unk0010;
- u8 filler_0011[0x7EF];
- struct Unk201C800 unk0800;
+ u8 unk0011;
+ u8 unk0012;
+ u16 unk0014;
+ u8 unk0016;
+ u16 species;
+ u8 unk001A;
+ u8 unk001B;
};
+#define ePokedexCryScreenGfx (*(struct Unk2000000 *)gSharedMem)
#define ePokedexCryScreen (*(struct PokedexCryScreen_201C000 *)(gSharedMem + 0x1C000))
+void sub_811A0A0(u16 species);
+void sub_811A0C0(void);
+void sub_811A124(void);
+void sub_811A15C(u8);
+void sub_811A1C8(u8, u8);
+void sub_811A324(void);
+void sub_811A350(u8, u8, u8);
void sub_811A6D8(s8);
extern u8 gUnknown_03005E98;
// data/pokedex_cry_screen.o
+extern const u16 gUnknown_083FB6F8[];
+extern const u16 gUnknown_083FB718[];
extern const u16 gUnknown_083FAE7C[];
extern const u16 gUnknown_083FAF1C[];
extern const u8 gUnknown_083FAF3C[];
@@ -40,6 +65,390 @@ extern const struct SpritePalette gCryMeterNeedleSpritePalettes[];
#define CRY_METER_MAP_WIDTH 32
#endif
+#ifdef NONMATCHING
+u8 sub_8119E3C(struct CryRelatedStruct *cry, u8 arg1)
+{
+ u8 i;
+ u8 j;
+ u16 r6;
+ u16 r7;
+ u8 r9 = FALSE;
+ u32 offset;
+
+ switch (gUnknown_03005E98)
+ {
+ case 0:
+ ePokedexCryScreen.unk0014 = cry->unk0;
+ ePokedexCryScreen.unk0016 = cry->yPos;
+ ePokedexCryScreen.unk001A = 0;
+ ePokedexCryScreen.unk001B = 0;
+ ePokedexCryScreen.unk0010 = 0;
+ ePokedexCryScreen.unk0012 = 28;
+ ePokedexCryScreen.unk0011 = 0;
+ sub_811A350(arg1, -8 * cry->xPos, 0);
+ for (i = 0; i < 7; i++)
+ {
+ for (j = 0; j < 32; j++)
+ {
+ DmaCopy16(3, gUnknown_083FB718, ePokedexCryScreenGfx.unk0000[32 * i + j], 32);
+ }
+ }
+ gUnknown_03005E98++;
+ break;
+ case 1:
+ r7 = cry->unk2 << 11;
+ r6 = (cry->paletteNo << 12) + ((unsigned)(cry->unk0 << 18) >> 23);
+ for (i = 0; i < 7; i++)
+ {
+ for (j = 0; j < 32; j++)
+ {
+ offset = j << 1;
+ offset += i << 6;
+ offset += r7;
+ *((u16 *)(VRAM + offset)) = r6++;
+ }
+ }
+ for (i = 0; i < ePokedexCryScreen.unk0016 * 8; i++)
+ {
+ sub_811A1C8(i, 0);
+ }
+ gUnknown_03005E98++;
+ break;
+ case 2:
+ sub_811A324();
+ LoadPalette(gUnknown_083FB6F8, cry->paletteNo * 16, 32);
+ r9 = TRUE;
+ break;
+ }
+ return r9;
+}
+#else
+NAKED u8 sub_8119E3C(struct CryRelatedStruct *cry, u8 arg1)
+{
+ asm_unified("\tpush {r4-r7,lr}\n"
+ "\tmov r7, r9\n"
+ "\tmov r6, r8\n"
+ "\tpush {r6,r7}\n"
+ "\tadds r5, r0, 0\n"
+ "\tlsls r1, 24\n"
+ "\tlsrs r2, r1, 24\n"
+ "\tmovs r0, 0\n"
+ "\tmov r9, r0\n"
+ "\tldr r6, _08119E60 @ =gUnknown_03005E98\n"
+ "\tldrb r0, [r6]\n"
+ "\tcmp r0, 0x1\n"
+ "\tbeq _08119EE0\n"
+ "\tcmp r0, 0x1\n"
+ "\tbgt _08119E64\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _08119E6A\n"
+ "\tb _08119F74\n"
+ "\t.align 2, 0\n"
+ "_08119E60: .4byte gUnknown_03005E98\n"
+ "_08119E64:\n"
+ "\tcmp r0, 0x2\n"
+ "\tbeq _08119F60\n"
+ "\tb _08119F74\n"
+ "_08119E6A:\n"
+ "\tldr r4, _08119ECC @ =gSharedMem + 0x1C000\n"
+ "\tldrh r0, [r5]\n"
+ "\tmovs r1, 0\n"
+ "\tstrh r0, [r4, 0x14]\n"
+ "\tldrb r0, [r5, 0x5]\n"
+ "\tstrb r0, [r4, 0x16]\n"
+ "\tstrb r1, [r4, 0x1A]\n"
+ "\tstrb r1, [r4, 0x1B]\n"
+ "\tstrb r1, [r4, 0x10]\n"
+ "\tmovs r0, 0x1C\n"
+ "\tstrb r0, [r4, 0x12]\n"
+ "\tstrb r1, [r4, 0x11]\n"
+ "\tldrb r1, [r5, 0x4]\n"
+ "\tlsls r1, 19\n"
+ "\tnegs r1, r1\n"
+ "\tasrs r1, 16\n"
+ "\tadds r0, r2, 0\n"
+ "\tmovs r2, 0x1\n"
+ "\tbl sub_811A350\n"
+ "\tmovs r0, 0\n"
+ "\tmov r12, r6\n"
+ "\tldr r1, _08119ED0 @ =0x040000d4\n"
+ "\tldr r7, _08119ED4 @ =gUnknown_083FB718\n"
+ "\tldr r2, _08119ED8 @ =0xfffe4000\n"
+ "\tadds r6, r4, r2\n"
+ "\tldr r5, _08119EDC @ =0x80000010\n"
+ "_08119EA0:\n"
+ "\tmovs r3, 0\n"
+ "\tadds r4, r0, 0x1\n"
+ "\tlsls r2, r0, 5\n"
+ "_08119EA6:\n"
+ "\tstr r7, [r1]\n"
+ "\tadds r0, r2, r3\n"
+ "\tlsls r0, 5\n"
+ "\tadds r0, r6\n"
+ "\tstr r0, [r1, 0x4]\n"
+ "\tstr r5, [r1, 0x8]\n"
+ "\tldr r0, [r1, 0x8]\n"
+ "\tadds r0, r3, 0x1\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r3, r0, 24\n"
+ "\tcmp r3, 0x1F\n"
+ "\tbls _08119EA6\n"
+ "\tlsls r0, r4, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tcmp r0, 0x6\n"
+ "\tbls _08119EA0\n"
+ "\tmov r1, r12\n"
+ "\tb _08119F50\n"
+ "\t.align 2, 0\n"
+ "_08119ECC: .4byte gSharedMem + 0x1C000\n"
+ "_08119ED0: .4byte 0x040000d4\n"
+ "_08119ED4: .4byte gUnknown_083FB718\n"
+ "_08119ED8: .4byte 0xfffe4000\n"
+ "_08119EDC: .4byte 0x80000010\n"
+ "_08119EE0:\n"
+ "\tldrb r0, [r5, 0x2]\n"
+ "\tlsls r0, 27\n"
+ "\tlsrs r7, r0, 16\n"
+ "\tldrb r1, [r5, 0x3]\n"
+ "\tlsls r1, 12\n"
+ "\tldrh r0, [r5]\n"
+ "\tlsls r0, 18\n"
+ "\tlsrs r0, 23\n"
+ "\tadds r1, r0\n"
+ "\tlsls r1, 16\n"
+ "\tlsrs r6, r1, 16\n"
+ "\tmovs r0, 0\n"
+ "\tldr r2, _08119F58 @ =gSharedMem + 0x1C000\n"
+ "\tmov r8, r2\n"
+ "\tmovs r1, 0xC0\n"
+ "\tlsls r1, 19\n"
+ "\tmov r12, r1\n"
+ "_08119F02:\n"
+ "\tmovs r3, 0\n"
+ "\tadds r4, r0, 0x1\n"
+ "\tlsls r5, r0, 6\n"
+ "_08119F08:\n"
+ "\tlsls r1, r3, 1\n"
+ "\tadds r1, r5\n"
+ "\tadds r1, r7\n"
+ "\tadd r1, r12\n"
+ "\tadds r2, r6, 0\n"
+ "\tadds r0, r2, 0x1\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r6, r0, 16\n"
+ "\tstrh r2, [r1]\n"
+ "\tadds r0, r3, 0x1\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r3, r0, 24\n"
+ "\tcmp r3, 0x1F\n"
+ "\tbls _08119F08\n"
+ "\tlsls r0, r4, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tcmp r0, 0x6\n"
+ "\tbls _08119F02\n"
+ "\tmov r2, r8\n"
+ "\tldrb r0, [r2, 0x16]\n"
+ "\tmovs r4, 0\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _08119F4E\n"
+ "\tmov r5, r8\n"
+ "_08119F38:\n"
+ "\tadds r0, r4, 0\n"
+ "\tmovs r1, 0\n"
+ "\tbl sub_811A1C8\n"
+ "\tadds r0, r4, 0x1\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r4, r0, 24\n"
+ "\tldrb r0, [r5, 0x16]\n"
+ "\tlsls r0, 3\n"
+ "\tcmp r4, r0\n"
+ "\tblt _08119F38\n"
+ "_08119F4E:\n"
+ "\tldr r1, _08119F5C @ =gUnknown_03005E98\n"
+ "_08119F50:\n"
+ "\tldrb r0, [r1]\n"
+ "\tadds r0, 0x1\n"
+ "\tstrb r0, [r1]\n"
+ "\tb _08119F74\n"
+ "\t.align 2, 0\n"
+ "_08119F58: .4byte gSharedMem + 0x1C000\n"
+ "_08119F5C: .4byte gUnknown_03005E98\n"
+ "_08119F60:\n"
+ "\tbl sub_811A324\n"
+ "\tldr r0, _08119F84 @ =gUnknown_083FB6F8\n"
+ "\tldrb r1, [r5, 0x3]\n"
+ "\tlsls r1, 4\n"
+ "\tmovs r2, 0x20\n"
+ "\tbl LoadPalette\n"
+ "\tmovs r0, 0x1\n"
+ "\tmov r9, r0\n"
+ "_08119F74:\n"
+ "\tmov r0, r9\n"
+ "\tpop {r3,r4}\n"
+ "\tmov r8, r3\n"
+ "\tmov r9, r4\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r1}\n"
+ "\tbx r1\n"
+ "\t.align 2, 0\n"
+ "_08119F84: .4byte gUnknown_083FB6F8");
+}
+#endif // NONMATCHING
+
+void sub_8119F88(u8 a0)
+{
+ u8 r4;
+ sub_811A324();
+ sub_811A15C(a0);
+ if (ePokedexCryScreen.unk001B)
+ ePokedexCryScreen.unk001B--;
+ if (ePokedexCryScreen.unk001A && !--ePokedexCryScreen.unk001A)
+ {
+ sub_811A0A0(ePokedexCryScreen.species);
+ sub_811A124();
+ return;
+ }
+ if (ePokedexCryScreen.unk0010 == 0)
+ {
+ sub_811A124();
+ return;
+ }
+ if (ePokedexCryScreen.unk0010 == 1)
+ {
+ sub_811A0C0();
+ }
+ else if (ePokedexCryScreen.unk0010 > 8)
+ {
+ if (!IsCryPlaying())
+ {
+ sub_811A124();
+ ePokedexCryScreen.unk0010 = 0;
+ return;
+ }
+ sub_811A0C0();
+ ePokedexCryScreen.unk0010 = 1;
+ }
+ r4 = 2 * (ePokedexCryScreen.unk0010 - 1);
+ sub_811A1C8(ePokedexCryScreen.unk0016 * 8 + ePokedexCryScreen.unk0011 - 2, ePokedexCryScreen.unk0000[r4]);
+ sub_811A1C8(ePokedexCryScreen.unk0016 * 8 + ePokedexCryScreen.unk0011 - 1, ePokedexCryScreen.unk0000[r4 + 1]);
+ ePokedexCryScreen.unk0010++;
+}
+
+void sub_811A050(u16 species)
+{
+ if (gMPlay_BGM.status & MUSICPLAYER_STATUS_PAUSE && !ePokedexCryScreen.unk001A)
+ {
+ if (!ePokedexCryScreen.unk001B)
+ {
+ ePokedexCryScreen.unk001B = 4;
+ if (IsCryPlaying() == TRUE)
+ {
+ StopCry();
+ ePokedexCryScreen.species = species;
+ ePokedexCryScreen.unk001A = 2;
+ }
+ else
+ sub_811A0A0(species);
+ }
+ }
+}
+
+void sub_811A0A0(u16 species)
+{
+ PlayCry2(species, 0, 0x7d, 10);
+ ePokedexCryScreen.unk0010 = 1;
+}
+
+#ifdef NONMATCHING
+void sub_811A0C0(void)
+{
+ const s8 * src;
+ u8 i;
+ if (gPcmDmaCounter < 2)
+ src = gSoundInfo.pcmBuffer;
+ else
+ src = gSoundInfo.pcmBuffer + (gSoundInfo.pcmDmaPeriod + 1 - gPcmDmaCounter) * gSoundInfo.pcmSamplesPerVBlank;
+ src += PCM_DMA_BUF_SIZE;
+ for (i = 0; i < 16; i++)
+ ePokedexCryScreen.unk0000[i] = src[i * 2] * 2;
+}
+#else
+NAKED void sub_811A0C0(void)
+{
+ asm_unified("\tpush {r4,lr}\n"
+ "\tldr r3, _0811A0D0 @ =gPcmDmaCounter\n"
+ "\tmovs r0, 0\n"
+ "\tldrsb r0, [r3, r0]\n"
+ "\tcmp r0, 0x1\n"
+ "\tbgt _0811A0D8\n"
+ "\tldr r0, _0811A0D4 @ =gSoundInfo + 0x350\n"
+ "\tb _0811A0F0\n"
+ "\t.align 2, 0\n"
+ "_0811A0D0: .4byte gPcmDmaCounter\n"
+ "_0811A0D4: .4byte gSoundInfo + 0x350\n"
+ "_0811A0D8:\n"
+ "\tldr r2, _0811A11C @ =gSoundInfo\n"
+ "\tldrb r1, [r2, 0xB]\n"
+ "\tmovs r0, 0\n"
+ "\tldrsb r0, [r3, r0]\n"
+ "\tsubs r0, 0x1\n"
+ "\tsubs r1, r0\n"
+ "\tldr r0, [r2, 0x10]\n"
+ "\tmuls r0, r1\n"
+ "\tmovs r1, 0xD4\n"
+ "\tlsls r1, 2\n"
+ "\tadds r2, r1\n"
+ "\tadds r0, r2\n"
+ "_0811A0F0:\n"
+ "\tmovs r1, 0xC6\n"
+ "\tlsls r1, 3\n"
+ "\tadds r3, r0, r1\n"
+ "\tmovs r2, 0\n"
+ "\tldr r4, _0811A120 @ =gSharedMem + 0x1C000\n"
+ "_0811A0FA:\n"
+ "\tadds r1, r2, r4\n"
+ "\tlsls r0, r2, 1\n"
+ "\tadds r0, r3\n"
+ "\tldrb r0, [r0]\n"
+ "\tlsls r0, 24\n"
+ "\tasrs r0, 24\n"
+ "\tlsls r0, 1\n"
+ "\tstrb r0, [r1]\n"
+ "\tadds r0, r2, 0x1\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r2, r0, 24\n"
+ "\tcmp r2, 0xF\n"
+ "\tbls _0811A0FA\n"
+ "\tpop {r4}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n"
+ "\t.align 2, 0\n"
+ "_0811A11C: .4byte gSoundInfo\n"
+ "_0811A120: .4byte gSharedMem + 0x1C000");
+}
+#endif // NONMATCHING
+
+void sub_811A124(void)
+{
+ sub_811A1C8(ePokedexCryScreen.unk0016 * 8 + ePokedexCryScreen.unk0011 - 2, 0);
+ sub_811A1C8(ePokedexCryScreen.unk0016 * 8 + ePokedexCryScreen.unk0011 - 1, 0);
+}
+
+void sub_811A15C(u8 a0)
+{
+ u8 i;
+ u16 r3;
+ sub_811A350(a0, ePokedexCryScreen.unk0011, 0);
+ ePokedexCryScreen.unk0011 += 2;
+ r3 = (ePokedexCryScreen.unk0011 / 8 + ePokedexCryScreen.unk0016 + 1) % 32;
+ for (i = 0; i < 7; i++)
+ {
+ DmaCopy16(3, gUnknown_083FB718, ePokedexCryScreenGfx.unk0000[32 * i + r3], 32);
+ }
+}
+
+asm(".section .text.ShowPokedexCryScreen");
+
u8 ShowPokedexCryScreen(struct CryRelatedStruct *cry, u8 arg1) {
int returnVal = FALSE;