diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2021-06-25 13:16:36 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2021-06-25 13:16:36 -0400 |
commit | f029db52f59614e22a7a2d70eb3da46094bf47f1 (patch) | |
tree | a726761fbf6f6d22a2c8332e89bddae15833b5b4 /src | |
parent | a6ae701c1d244d418975d9019b6a1af217674ae5 (diff) |
Document pokedex_cry_screen.c
Diffstat (limited to 'src')
-rw-r--r-- | src/data/graphics.c | 6 | ||||
-rw-r--r-- | src/debug/sound_check_menu.c | 8 | ||||
-rw-r--r-- | src/pokedex.c | 8 | ||||
-rw-r--r-- | src/pokedex_cry_screen.c | 394 |
4 files changed, 211 insertions, 205 deletions
diff --git a/src/data/graphics.c b/src/data/graphics.c index 34bcef5ff..8c98739a2 100644 --- a/src/data/graphics.c +++ b/src/data/graphics.c @@ -1422,7 +1422,7 @@ const u16 gTilesetPalettes_Shop[][16] = }; const u8 gTilesetTiles_Shop[] = INCBIN_U8("data/tilesets/secondary/shop/tiles.4bpp.lz"); -const u16 gUnknown_083FAF1C[] = INCBIN_U16("graphics/pokedex/cry_meter.gbapal"); -const u8 gUnknown_083FAF3C[] = INCBIN_U8("graphics/pokedex/cry_meter.4bpp.lz"); -const u8 gUnknown_083FAE7C[] = INCBIN_U8("graphics/pokedex/cry_meter_map.bin"); +const u16 sCryMeter_Pal[] = INCBIN_U16("graphics/pokedex/cry_meter.gbapal"); +const u8 sCryMeter_Gfx[] = INCBIN_U8("graphics/pokedex/cry_meter.4bpp.lz"); +const u8 sCryMeter_Tilemap[] = INCBIN_U8("graphics/pokedex/cry_meter_map.bin"); #endif // GERMAN diff --git a/src/debug/sound_check_menu.c b/src/debug/sound_check_menu.c index 4a67a0ebc..6f6ee58dd 100644 --- a/src/debug/sound_check_menu.c +++ b/src/debug/sound_check_menu.c @@ -1217,8 +1217,8 @@ void Task_InitCryTest(u8 taskId) ResetSpriteData(); FreeAllSpritePalettes(); - cryStruct.unk0 = 0x2000; - cryStruct.unk2 = 29; + cryStruct.charBase = 0x2000; + cryStruct.screenBase = 29; cryStruct.paletteNo = 12; cryStruct.yPos = 30; cryStruct.xPos = 4; @@ -1229,8 +1229,8 @@ void Task_InitCryTest(u8 taskId) while (LoadCryWaveformWindow(&cryStruct, 3) == FALSE) ; - cryStruct2.unk0 = 0; - cryStruct2.unk2 = 15; + cryStruct2.charBase = 0; + cryStruct2.screenBase = 15; cryStruct2.paletteNo = 13; cryStruct2.xPos = 12; cryStruct2.yPos = 12; diff --git a/src/pokedex.c b/src/pokedex.c index e542b6eb9..85d330d5c 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -3201,8 +3201,8 @@ static void Task_InitCryScreenMultistep(u8 taskId) { struct CryScreenWindow waveformWindow; - waveformWindow.unk0 = 0x4020; - waveformWindow.unk2 = 0x1F; + waveformWindow.charBase = 0x4020; + waveformWindow.screenBase = 0x1F; waveformWindow.paletteNo = 8; waveformWindow.yPos = 0x1E; waveformWindow.xPos = 0xC; @@ -3217,8 +3217,8 @@ static void Task_InitCryScreenMultistep(u8 taskId) { struct CryScreenWindow sp10; - sp10.unk0 = 0x3000; - sp10.unk2 = 0xE; + sp10.charBase = 0x3000; + sp10.screenBase = 0xE; sp10.paletteNo = 9; sp10.xPos = 0x12; sp10.yPos = 3; diff --git a/src/pokedex_cry_screen.c b/src/pokedex_cry_screen.c index b9ae10881..914febd9c 100644 --- a/src/pokedex_cry_screen.c +++ b/src/pokedex_cry_screen.c @@ -11,35 +11,35 @@ extern struct SoundInfo gSoundInfo; extern struct MusicPlayerInfo gMPlayInfo_BGM; -struct Unk201C800 { - s8 unk_0; - s8 unk_1; - u8 unk_2; - u16 unk_4; +struct PokedexCryMeterNeedle { + s8 rotation; + s8 targetRotation; + u8 moveIncrement; + u16 spriteId; }; -struct PokedexCryScreen_201C000 +struct PokedexCryScreen { - u8 unk0000[0x10]; - u8 unk0010; - u8 unk0011; - u8 unk0012; - u16 unk0014; - u8 unk0016; + u8 cryWaveformBuffer[0x10]; + u8 cryState; + u8 playhead; + u8 waveformPreviousY; + u16 charBase; + u8 playStartPos; u16 species; - u8 unk001A; - u8 unk001B; + u8 cryOverrideCountdown; + u8 cryRepeatDelay; }; -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, s16, u8); -void sub_811A534(struct Sprite *); -void sub_811A6D8(s8); +void PlayCryScreenCry(u16 species); +void BufferCryWaveformSegment(void); +void DrawWaveformFlatline(void); +void AdvancePlayhead(u8 bgId); +void DrawWaveformSegment(u8 position, u8 amplitude); +void DrawWaveformWindow(void); +void ShiftWaveformOver(u8 bgId, s16 pos, u8 axis); +void SpriteCB_CryMeterNeedle(struct Sprite *); +void SetCryMeterNeedleTarget(s8); u8 gDexCryScreenState; @@ -49,16 +49,16 @@ const u16 CryMeterNeedlePalette[] = INCBIN_U16("graphics/pokedex/cry_meter_needl const u8 CryMeterNeedleTiles[] = INCBIN_U8("graphics/pokedex/cry_meter_needle.4bpp"); #if ENGLISH -const u16 gUnknown_083FAE7C[] = INCBIN_U16("graphics/pokedex/cry_meter_map.bin"); -const u16 gUnknown_083FAF1C[] = INCBIN_U16("graphics/pokedex/cry_meter.gbapal"); -const u8 gUnknown_083FAF3C[] = INCBIN_U8("graphics/pokedex/cry_meter.4bpp.lz"); +const u16 sCryMeter_Tilemap[] = INCBIN_U16("graphics/pokedex/cry_meter_map.bin"); +const u16 sCryMeter_Pal[] = INCBIN_U16("graphics/pokedex/cry_meter.gbapal"); +const u8 sCryMeter_Gfx[] = INCBIN_U8("graphics/pokedex/cry_meter.4bpp.lz"); #else -extern const u16 gUnknown_083FAE7C[]; -extern const u16 gUnknown_083FAF1C[]; -extern const u8 gUnknown_083FAF3C[]; +extern const u16 sCryMeter_Tilemap[]; +extern const u16 sCryMeter_Pal[]; +extern const u8 sCryMeter_Gfx[]; #endif // ENGLISH -const u16 gUnknown_083FB274[][72] = { +const u16 sWaveformOffsets[][72] = { { 0x0000, 0x0004, 0x0008, 0x000C, 0x0010, 0x0014, 0x0018, 0x001C, 0x0400, 0x0404, 0x0408, 0x040C, 0x0410, 0x0414, 0x0418, 0x041C, @@ -142,13 +142,16 @@ const u16 gUnknown_083FB274[][72] = { } }; -struct PokedexCryScreen_201C000 * const gPokedexCryScreenPtr = (struct PokedexCryScreen_201C000 *)(gSharedMem + 0x1c000); +struct PokedexCryScreen * const gPokedexCryScreenPtr = &ePokedexCryScreen; -const u16 gUnknown_083FB6F8[] = INCBIN_U16("graphics/pokedex/83FB6F8.gbapal"); -const u16 gUnknown_083FB718[] = INCBIN_U16("graphics/pokedex/83FB718.4bpp"); +const u16 sCryScreenBg_Pal[] = INCBIN_U16("graphics/pokedex/83FB6F8.gbapal"); +const u16 sCryScreenBg_Gfx[] = INCBIN_U16("graphics/pokedex/83FB718.4bpp"); -const u8 gUnknown_083FB738[] = {0xF0, 0x0F}; -const u8 gUnknown_083FB73A[][16] = { +const u8 sWaveformTileDataNybbleMasks[] = {0xF0, 0x0F}; + +// Waveform is blue in the middle (8) grading to white at peaks (15) +// Split into two arrays for the two vertical slice halves +const u8 sWaveformColor[][16] = { { 0x0F, 0x0E, 0x0D, 0x0C, 0x0B, 0x0A, 0x09, 0x08, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F @@ -158,32 +161,30 @@ const u8 gUnknown_083FB73A[][16] = { } }; -struct Unk201C800 * const gPokedexCryScreenPtr2 = (struct Unk201C800 *)(gSharedMem + 0x1c800); +struct PokedexCryMeterNeedle * const gPokedexCryScreenPtr2 = &ePokedexCryScreen2; -union AnimCmd gSpriteAnim_83FB760[] = { +union AnimCmd sAnim_CryMeterNeedle_0[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_END }; -const union AnimCmd * gSpriteAnimTable_83FB768[] = { - gSpriteAnim_83FB760 -}; +const union AnimCmd *sAnimTable_CryMeterNeedle[] = { sAnim_CryMeterNeedle_0 }; -struct OamData gOamData_83FB76C = { +struct OamData sOamData_CryMeterNeedle = { .y = 160, .affineMode = ST_OAM_AFFINE_NORMAL, .size = 3, .priority = 1 }; -struct SpriteTemplate gSpriteTemplate_83FB774 = { +struct SpriteTemplate sSpriteTemplate_CryMeterNeedle = { 0x2000, 0x2000, - &gOamData_83FB76C, - gSpriteAnimTable_83FB768, + &sOamData_CryMeterNeedle, + sAnimTable_CryMeterNeedle, NULL, gDummySpriteAffineAnimTable, - sub_811A534 + SpriteCB_CryMeterNeedle }; struct SpriteSheet gCryMeterNeedleSpriteSheets[] = { @@ -202,125 +203,127 @@ struct SpritePalette gCryMeterNeedleSpritePalettes[] = { #define CRY_METER_MAP_WIDTH 32 #endif -u8 LoadCryWaveformWindow(struct CryScreenWindow *cry, u8 arg1) +bool8 LoadCryWaveformWindow(struct CryScreenWindow *cry, u8 bgId) { u8 i; u8 j; - u8 i2; - u16 r6; - u16 r7; - u8 r9 = FALSE; + u8 position; + u16 tileNum; + u16 screenBase; + bool8 finished = FALSE; switch (gDexCryScreenState) { case 0: - gPokedexCryScreenPtr->unk0014 = cry->unk0; - gPokedexCryScreenPtr->unk0016 = cry->yPos; - gPokedexCryScreenPtr->unk001A = 0; - gPokedexCryScreenPtr->unk001B = 0; - gPokedexCryScreenPtr->unk0010 = 0; - gPokedexCryScreenPtr->unk0012 = 28; - gPokedexCryScreenPtr->unk0011 = 0; - sub_811A350(arg1, -8 * cry->xPos, 1); + gPokedexCryScreenPtr->charBase = cry->charBase; + gPokedexCryScreenPtr->playStartPos = cry->yPos; + gPokedexCryScreenPtr->cryOverrideCountdown = 0; + gPokedexCryScreenPtr->cryRepeatDelay = 0; + gPokedexCryScreenPtr->cryState = 0; + gPokedexCryScreenPtr->waveformPreviousY = 28; + gPokedexCryScreenPtr->playhead = 0; + ShiftWaveformOver(bgId, -8 * cry->xPos, 1); for (i = 0; i < 7; i++) { for (j = 0; j < 32; j++) { - DmaCopy16(3, gUnknown_083FB718, &gSharedMem[((32 * i) + j) * 32], 32); + DmaCopy16(3, sCryScreenBg_Gfx, &sCryWaveformWindowTiledata[((32 * i) + j) * 32], 32); } } gDexCryScreenState++; break; case 1: - r7 = cry->unk2 << 11; - r6 = (cry->paletteNo << 12) + ((cry->unk0 >> 5) & 0x1FF); + screenBase = cry->screenBase * 0x800; + tileNum = (cry->paletteNo << 12) + ((cry->charBase >> 5) & 0x1FF); for (i = 0; i < 7; i++) { for (j = 0; j < 32; j++) { - *((u16 *)(VRAM + (2 * j) + (64 * i) + r7)) = r6++; + *((u16 *)(VRAM + (2 * j) + (64 * i) + screenBase)) = tileNum++; } } - for (i2 = 0; i2 < gPokedexCryScreenPtr->unk0016 * 8; i2++) + for (position = 0; position < gPokedexCryScreenPtr->playStartPos * 8; position++) { - sub_811A1C8(i2, 0); + DrawWaveformSegment(position, 0); } gDexCryScreenState++; break; case 2: - sub_811A324(); - LoadPalette(gUnknown_083FB6F8, cry->paletteNo * 16, 32); - r9 = TRUE; + DrawWaveformWindow(); + LoadPalette(sCryScreenBg_Pal, cry->paletteNo * 16, 32); + finished = TRUE; break; } - return r9; + return finished; } -void UpdateCryWaveformWindow(u8 a0) +void UpdateCryWaveformWindow(u8 bgId) { u8 r4; - sub_811A324(); - sub_811A15C(a0); - if (gPokedexCryScreenPtr->unk001B) - gPokedexCryScreenPtr->unk001B--; - if (gPokedexCryScreenPtr->unk001A && !--gPokedexCryScreenPtr->unk001A) + DrawWaveformWindow(); + AdvancePlayhead(bgId); + if (gPokedexCryScreenPtr->cryRepeatDelay) + gPokedexCryScreenPtr->cryRepeatDelay--; + if (gPokedexCryScreenPtr->cryOverrideCountdown && !--gPokedexCryScreenPtr->cryOverrideCountdown) { - sub_811A0A0(gPokedexCryScreenPtr->species); - sub_811A124(); + PlayCryScreenCry(gPokedexCryScreenPtr->species); + DrawWaveformFlatline(); return; } - if (gPokedexCryScreenPtr->unk0010 == 0) + if (gPokedexCryScreenPtr->cryState == 0) { - sub_811A124(); + DrawWaveformFlatline(); return; } - if (gPokedexCryScreenPtr->unk0010 == 1) + if (gPokedexCryScreenPtr->cryState == 1) { - sub_811A0C0(); + BufferCryWaveformSegment(); } - else if (gPokedexCryScreenPtr->unk0010 > 8) + else if (gPokedexCryScreenPtr->cryState > 8) { if (!IsCryPlaying()) { - sub_811A124(); - gPokedexCryScreenPtr->unk0010 = 0; + DrawWaveformFlatline(); + gPokedexCryScreenPtr->cryState = 0; return; } - sub_811A0C0(); - gPokedexCryScreenPtr->unk0010 = 1; + BufferCryWaveformSegment(); + gPokedexCryScreenPtr->cryState = 1; } - r4 = 2 * (gPokedexCryScreenPtr->unk0010 - 1); - sub_811A1C8(gPokedexCryScreenPtr->unk0016 * 8 + gPokedexCryScreenPtr->unk0011 - 2, gPokedexCryScreenPtr->unk0000[r4]); - sub_811A1C8(gPokedexCryScreenPtr->unk0016 * 8 + gPokedexCryScreenPtr->unk0011 - 1, gPokedexCryScreenPtr->unk0000[r4 + 1]); - gPokedexCryScreenPtr->unk0010++; + r4 = 2 * (gPokedexCryScreenPtr->cryState - 1); + DrawWaveformSegment(gPokedexCryScreenPtr->playStartPos * 8 + gPokedexCryScreenPtr->playhead - 2, + gPokedexCryScreenPtr->cryWaveformBuffer[r4]); + DrawWaveformSegment(gPokedexCryScreenPtr->playStartPos * 8 + gPokedexCryScreenPtr->playhead - 1, + gPokedexCryScreenPtr->cryWaveformBuffer[r4 + 1]); + gPokedexCryScreenPtr->cryState++; } void CryScreenPlayButton(u16 species) { - if (gMPlayInfo_BGM.status & MUSICPLAYER_STATUS_PAUSE && !gPokedexCryScreenPtr->unk001A) + if (gMPlayInfo_BGM.status & MUSICPLAYER_STATUS_PAUSE && !gPokedexCryScreenPtr->cryOverrideCountdown) { - if (!gPokedexCryScreenPtr->unk001B) + if (!gPokedexCryScreenPtr->cryRepeatDelay) { - gPokedexCryScreenPtr->unk001B = 4; + gPokedexCryScreenPtr->cryRepeatDelay = 4; if (IsCryPlaying() == TRUE) { StopCry(); gPokedexCryScreenPtr->species = species; - gPokedexCryScreenPtr->unk001A = 2; + gPokedexCryScreenPtr->cryOverrideCountdown = 2; } else - sub_811A0A0(species); + PlayCryScreenCry(species); } } } -void sub_811A0A0(u16 species) +void PlayCryScreenCry(u16 species) { - PlayCry2(species, 0, 0x7d, 10); - gPokedexCryScreenPtr->unk0010 = 1; + PlayCry2(species, 0, 125, 10); + gPokedexCryScreenPtr->cryState = 1; } -#define MACRO_sub_811A0C0(counter) ({ \ +#define GetSrcBufferForCryWaveformSegment(counter) ({ \ const s8 * p; \ if ((counter) < 2) \ p = gSoundInfo.pcmBuffer; \ @@ -329,124 +332,125 @@ void sub_811A0A0(u16 species) p + PCM_DMA_BUF_SIZE; \ }) -void sub_811A0C0(void) +void BufferCryWaveformSegment(void) { const s8 * src; u8 i; - src = MACRO_sub_811A0C0(gPcmDmaCounter); + src = GetSrcBufferForCryWaveformSegment(gPcmDmaCounter); for (i = 0; i < 16; i++) - gPokedexCryScreenPtr->unk0000[i] = src[i * 2] * 2; + gPokedexCryScreenPtr->cryWaveformBuffer[i] = src[i * 2] * 2; } -void sub_811A124(void) +void DrawWaveformFlatline(void) { - sub_811A1C8(gPokedexCryScreenPtr->unk0016 * 8 + gPokedexCryScreenPtr->unk0011 - 2, 0); - sub_811A1C8(gPokedexCryScreenPtr->unk0016 * 8 + gPokedexCryScreenPtr->unk0011 - 1, 0); + DrawWaveformSegment(gPokedexCryScreenPtr->playStartPos * 8 + gPokedexCryScreenPtr->playhead - 2, 0); + DrawWaveformSegment(gPokedexCryScreenPtr->playStartPos * 8 + gPokedexCryScreenPtr->playhead - 1, 0); } -void sub_811A15C(u8 a0) +void AdvancePlayhead(u8 bgId) { u8 i; - u16 r3; - sub_811A350(a0, gPokedexCryScreenPtr->unk0011, 0); - gPokedexCryScreenPtr->unk0011 += 2; - r3 = (gPokedexCryScreenPtr->unk0011 / 8 + gPokedexCryScreenPtr->unk0016 + 1) % 32; + u16 offset; + + ShiftWaveformOver(bgId, gPokedexCryScreenPtr->playhead, 0); + gPokedexCryScreenPtr->playhead += 2; + offset = (gPokedexCryScreenPtr->playhead / 8 + gPokedexCryScreenPtr->playStartPos + 1) % 32; for (i = 0; i < 7; i++) { - DmaCopy16(3, gUnknown_083FB718, &gSharedMem[32 * (32 * i + r3)], 32); + DmaCopy16(3, sCryScreenBg_Gfx, &sCryWaveformWindowTiledata[32 * (32 * i + offset)], 32); } } -void sub_811A1C8(u8 a0, u8 a1) +void DrawWaveformSegment(u8 position, u8 amplitude) { -#define PLAY_START_POS (a0 >> 3) -#define PLAYHEAD_POS (a0 & ((1 << 3) - 1)) -#define VERT_SLICE (a0 & 1) +#define PLAY_START_POS (position >> 3) +#define PLAYHEAD_POS (position & ((1 << 3) - 1)) +#define VERT_SLICE (position & 1) u8 currentPointY; u8 nybble; u16 offset; u16 temp; u8 y; - temp = (a1 + 127) * 256; + temp = (amplitude + 127) * 256; y = temp / 1152.0; if (y > 71 - 16) y = 71 - 16; currentPointY = y; nybble = VERT_SLICE; - if (y > gPokedexCryScreenPtr->unk0012) + if (y > gPokedexCryScreenPtr->waveformPreviousY) { do { - offset = gUnknown_083FB274[PLAYHEAD_POS][y] + PLAY_START_POS * TILE_SIZE_4BPP; - gSharedMem[offset] &= gUnknown_083FB738[nybble]; - gSharedMem[offset] |= gUnknown_083FB73A[nybble][((y / 3) - 1) & 0x0F]; + offset = sWaveformOffsets[PLAYHEAD_POS][y] + PLAY_START_POS * TILE_SIZE_4BPP; + sCryWaveformWindowTiledata[offset] &= sWaveformTileDataNybbleMasks[nybble]; + sCryWaveformWindowTiledata[offset] |= sWaveformColor[nybble][((y / 3) - 1) & 0x0F]; y--; - } while (y > gPokedexCryScreenPtr->unk0012); + } while (y > gPokedexCryScreenPtr->waveformPreviousY); } else { do { - offset = gUnknown_083FB274[PLAYHEAD_POS][y] + PLAY_START_POS * TILE_SIZE_4BPP; - gSharedMem[offset] &= gUnknown_083FB738[nybble]; - gSharedMem[offset] |= gUnknown_083FB73A[nybble][((y / 3) - 1) & 0x0F]; + offset = sWaveformOffsets[PLAYHEAD_POS][y] + PLAY_START_POS * TILE_SIZE_4BPP; + sCryWaveformWindowTiledata[offset] &= sWaveformTileDataNybbleMasks[nybble]; + sCryWaveformWindowTiledata[offset] |= sWaveformColor[nybble][((y / 3) - 1) & 0x0F]; y++; - } while (y < gPokedexCryScreenPtr->unk0012); + } while (y < gPokedexCryScreenPtr->waveformPreviousY); } - gPokedexCryScreenPtr->unk0012 = currentPointY; + gPokedexCryScreenPtr->waveformPreviousY = currentPointY; #undef PLAYHEAD_POS #undef PLAY_START_POS #undef VERT_SLICE } -void sub_811A324(void) +void DrawWaveformWindow(void) { - DmaCopy16(3, gSharedMem, VRAM + gPokedexCryScreenPtr->unk0014, 0x1c00); + DmaCopy16(3, sCryWaveformWindowTiledata, VRAM + gPokedexCryScreenPtr->charBase, 0x1c00); } -void sub_811A350(u8 a0, s16 a1, u8 a2) +void ShiftWaveformOver(u8 bgId, s16 pos, u8 axis) { - switch (a0) + switch (bgId) { case 0: - if (a2) - REG_BG0VOFS = a1; + if (axis) + REG_BG0VOFS = pos; else - REG_BG0HOFS = a1; + REG_BG0HOFS = pos; break; case 1: - if (a2) - REG_BG1VOFS = a1; + if (axis) + REG_BG1VOFS = pos; else - REG_BG1HOFS = a1; + REG_BG1HOFS = pos; break; case 2: - if (a2) - REG_BG2VOFS = a1; + if (axis) + REG_BG2VOFS = pos; else - REG_BG2HOFS = a1; + REG_BG2HOFS = pos; break; case 3: - if (a2) - REG_BG3VOFS = a1; + if (axis) + REG_BG3VOFS = pos; else - REG_BG3HOFS = a1; + REG_BG3HOFS = pos; break; } } -u8 ShowPokedexCryScreen(struct CryScreenWindow *cry, u8 arg1) { +bool8 ShowPokedexCryScreen(struct CryScreenWindow *cry, UNUSED u8 arg1) { int returnVal = FALSE; switch (gDexCryScreenState) { case 0: - LZ77UnCompVram(gUnknown_083FAF3C, (void *) (VRAM + cry->unk0)); - LoadPalette(&gUnknown_083FAF1C, cry->paletteNo * 16, 0x20); - gDexCryScreenState += 1; + LZ77UnCompVram(sCryMeter_Gfx, (void *) (VRAM + cry->charBase)); + LoadPalette(sCryMeter_Pal, cry->paletteNo * 16, 0x20); + gDexCryScreenState++; break; case 1: @@ -456,9 +460,9 @@ u8 ShowPokedexCryScreen(struct CryScreenWindow *cry, u8 arg1) { u32 r12; int x, y; - vram = BG_SCREEN_ADDR(cry->unk2); + vram = BG_SCREEN_ADDR(cry->screenBase); - r12 = (u32) (cry->unk0 << 18) >> 23; + r12 = (cry->charBase >> 5) & 0x1FF; for (row = 0; row < 8; row++) { @@ -466,7 +470,7 @@ u8 ShowPokedexCryScreen(struct CryScreenWindow *cry, u8 arg1) { { y = row + cry->yPos; x = col + cry->xPos; - *(u16 *) (vram + (y * 64 + x * 2)) = (gUnknown_083FAE7C[row * CRY_METER_MAP_WIDTH + col] | (cry->paletteNo << 12)) + r12; + *(u16 *) (vram + (y * 64 + x * 2)) = (sCryMeter_Tilemap[row * CRY_METER_MAP_WIDTH + col] | (cry->paletteNo << 12)) + r12; } } @@ -478,10 +482,10 @@ u8 ShowPokedexCryScreen(struct CryScreenWindow *cry, u8 arg1) { { LoadSpriteSheets(gCryMeterNeedleSpriteSheets); LoadSpritePalettes(gCryMeterNeedleSpritePalettes); - gPokedexCryScreenPtr2->unk_4 = CreateSprite(&gSpriteTemplate_83FB774, 40 + cry->xPos * 8, 56 + cry->yPos * 8, 1); - gPokedexCryScreenPtr2->unk_0 = 0x20; - gPokedexCryScreenPtr2->unk_1 = 0x20; - gPokedexCryScreenPtr2->unk_2 = 0; + gPokedexCryScreenPtr2->spriteId = CreateSprite(&sSpriteTemplate_CryMeterNeedle, 40 + cry->xPos * 8, 56 + cry->yPos * 8, 1); + gPokedexCryScreenPtr2->rotation = 0x20; + gPokedexCryScreenPtr2->targetRotation = 0x20; + gPokedexCryScreenPtr2->moveIncrement = 0; returnVal = TRUE; break; @@ -493,82 +497,84 @@ u8 ShowPokedexCryScreen(struct CryScreenWindow *cry, u8 arg1) { void DestroyCryMeterNeedleSprite(void) { - FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(gSprites[gPokedexCryScreenPtr2->unk_4].oam.paletteNum)); - DestroySprite(gSprites + gPokedexCryScreenPtr2->unk_4); + FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(gSprites[gPokedexCryScreenPtr2->spriteId].oam.paletteNum)); + DestroySprite(gSprites + gPokedexCryScreenPtr2->spriteId); } -void sub_811A534(struct Sprite * sprite) +void SpriteCB_CryMeterNeedle(struct Sprite * sprite) { u16 i; - s8 r3; + s8 peakAmplitude; s16 x; s16 y; - struct ObjAffineSrcData sp04; - struct OamMatrix sp0c; + struct ObjAffineSrcData affine; + struct OamMatrix matrix; u8 * r0; - gSprites[gPokedexCryScreenPtr2->unk_4].oam.affineMode = ST_OAM_AFFINE_NORMAL; - gSprites[gPokedexCryScreenPtr2->unk_4].oam.affineParam = 0; - switch (gPokedexCryScreenPtr->unk0010) + gSprites[gPokedexCryScreenPtr2->spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; + gSprites[gPokedexCryScreenPtr2->spriteId].oam.affineParam = 0; + switch (gPokedexCryScreenPtr->cryState) { case 0: - gPokedexCryScreenPtr2->unk_1 = 0x20; - if (gPokedexCryScreenPtr2->unk_0 > 0) + gPokedexCryScreenPtr2->targetRotation = 0x20; + if (gPokedexCryScreenPtr2->rotation > 0) { - if (gPokedexCryScreenPtr2->unk_2 != 1) - gPokedexCryScreenPtr2->unk_2--; + if (gPokedexCryScreenPtr2->moveIncrement != 1) + gPokedexCryScreenPtr2->moveIncrement--; } else - gPokedexCryScreenPtr2->unk_2 = 5; + gPokedexCryScreenPtr2->moveIncrement = 5; break; case 2: - r3 = 0; + peakAmplitude = 0; for (i = 0; i < 16; i++) { - if (r3 < gPokedexCryScreenPtr->unk0000[i]) - r3 = gPokedexCryScreenPtr->unk0000[i]; + if (peakAmplitude < gPokedexCryScreenPtr->cryWaveformBuffer[i]) + peakAmplitude = gPokedexCryScreenPtr->cryWaveformBuffer[i]; } - sub_811A6D8(r3 * 0xd0 / 0x100); + SetCryMeterNeedleTarget(peakAmplitude * 0xd0 / 0x100); break; case 6: - r0 = &gPokedexCryScreenPtr->unk0000[10]; - sub_811A6D8(*r0 * 0xd0 / 0x100); + r0 = &gPokedexCryScreenPtr->cryWaveformBuffer[10]; + SetCryMeterNeedleTarget(*r0 * 0xd0 / 0x100); break; } - if (gPokedexCryScreenPtr2->unk_0 == gPokedexCryScreenPtr2->unk_1) - ; - else if (gPokedexCryScreenPtr2->unk_0 < gPokedexCryScreenPtr2->unk_1) + if (gPokedexCryScreenPtr2->rotation == gPokedexCryScreenPtr2->targetRotation) + ; // Empty, needle has reached target + else if (gPokedexCryScreenPtr2->rotation < gPokedexCryScreenPtr2->targetRotation) { - if ((gPokedexCryScreenPtr2->unk_0 += gPokedexCryScreenPtr2->unk_2) > gPokedexCryScreenPtr2->unk_1) + // Rotate needle left + if ((gPokedexCryScreenPtr2->rotation += gPokedexCryScreenPtr2->moveIncrement) > gPokedexCryScreenPtr2->targetRotation) { - gPokedexCryScreenPtr2->unk_0 = gPokedexCryScreenPtr2->unk_1; - gPokedexCryScreenPtr2->unk_1 = 0; + gPokedexCryScreenPtr2->rotation = gPokedexCryScreenPtr2->targetRotation; + gPokedexCryScreenPtr2->targetRotation = 0; } } else { - if ((gPokedexCryScreenPtr2->unk_0 -= gPokedexCryScreenPtr2->unk_2) < gPokedexCryScreenPtr2->unk_1) + // Rotate needle right + if ((gPokedexCryScreenPtr2->rotation -= gPokedexCryScreenPtr2->moveIncrement) < gPokedexCryScreenPtr2->targetRotation) { - gPokedexCryScreenPtr2->unk_0 = gPokedexCryScreenPtr2->unk_1; - gPokedexCryScreenPtr2->unk_1 = 0; + gPokedexCryScreenPtr2->rotation = gPokedexCryScreenPtr2->targetRotation; + gPokedexCryScreenPtr2->targetRotation = 0; } } - sp04.xScale = 0x100; - sp04.yScale = 0x100; - sp04.rotation = gPokedexCryScreenPtr2->unk_0 * 256; - ObjAffineSet(&sp04, &sp0c, 1, 2); - SetOamMatrix(0, sp0c.a, sp0c.b, sp0c.c, sp0c.d); - x = gSineTable[((gPokedexCryScreenPtr2->unk_0 + 0x7F) & 0xFF)]; - y = gSineTable[((gPokedexCryScreenPtr2->unk_0 + 0x7F) & 0xFF) + 0x40]; + affine.xScale = 0x100; + affine.yScale = 0x100; + affine.rotation = gPokedexCryScreenPtr2->rotation * 256; + ObjAffineSet(&affine, &matrix, 1, 2); + SetOamMatrix(0, matrix.a, matrix.b, matrix.c, matrix.d); + x = gSineTable[((gPokedexCryScreenPtr2->rotation + 0x7F) & 0xFF)]; + y = gSineTable[((gPokedexCryScreenPtr2->rotation + 0x7F) & 0xFF) + 0x40]; sprite->pos2.x = x * 24 / 256; sprite->pos2.y = y * 24 / 256; } -void sub_811A6D8(s8 a0) +void SetCryMeterNeedleTarget(s8 offset) { - u16 r2 = (0x20 - a0) & 0xff; - if (r2 > 0x20 && r2 < 0xe0) - r2 = 0xe0; - gPokedexCryScreenPtr2->unk_1 = r2; - gPokedexCryScreenPtr2->unk_2 = 5; + u16 rotation = (0x20 - offset) & 0xff; + if (rotation > 0x20 && rotation < 0xe0) + rotation = 0xe0; + gPokedexCryScreenPtr2->targetRotation = rotation; + gPokedexCryScreenPtr2->moveIncrement = 5; } |