diff options
author | Marcus Huderle <huderlem@gmail.com> | 2018-11-28 10:14:32 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-11-28 10:14:32 -0600 |
commit | 0148e389738d857d473a54d612115cd51fbb8606 (patch) | |
tree | 344ff6447163086060d853d3ad41b63ee303833e /src | |
parent | 9fafa637438b45a48de36a4a7bf898111951ec92 (diff) |
Decompile pokedex_cry_screen.c (#406)
Diffstat (limited to 'src')
-rw-r--r-- | src/main.c | 2 | ||||
-rw-r--r-- | src/pokedex.c | 6 | ||||
-rwxr-xr-x | src/pokedex_cry_screen.c | 511 |
3 files changed, 515 insertions, 4 deletions
diff --git a/src/main.c b/src/main.c index 4c71ed1f9..d069ab3bc 100644 --- a/src/main.c +++ b/src/main.c @@ -69,7 +69,7 @@ bool8 gSoftResetDisabled; IntrFunc gIntrTable[INTR_COUNT]; u8 gLinkVSyncDisabled; u32 IntrMain_Buffer[0x200]; -u8 gPcmDmaCounter; +s8 gPcmDmaCounter; static EWRAM_DATA u16 gTrainerId = 0; diff --git a/src/pokedex.c b/src/pokedex.c index fa3faab84..3d06a0417 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -30,7 +30,7 @@ #include "constants/songs.h" #include "constants/species.h" -extern u8 gUnknown_030061EC; +extern u8 gDexCryScreenState; // EWRAM static EWRAM_DATA struct PokedexView *gUnknown_02039B4C = NULL; @@ -3232,7 +3232,7 @@ void sub_80BF250(u8 taskId) case 5: gTasks[taskId].data[4] = sub_80C0E9C(gUnknown_02039B54->dexNum, 48, 56, 0); gSprites[gTasks[taskId].data[4]].oam.priority = 0; - gUnknown_030061EC = 0; + gDexCryScreenState = 0; gMain.state++; break; case 6: @@ -3247,7 +3247,7 @@ void sub_80BF250(u8 taskId) if (sub_8145354(&sp4, 2) != 0) { gMain.state++; - gUnknown_030061EC = 0; + gDexCryScreenState = 0; } } break; diff --git a/src/pokedex_cry_screen.c b/src/pokedex_cry_screen.c new file mode 100755 index 000000000..f3eeeed07 --- /dev/null +++ b/src/pokedex_cry_screen.c @@ -0,0 +1,511 @@ +#include "global.h" +#include "bg.h" +#include "m4a.h" +#include "main.h" +#include "malloc.h" +#include "palette.h" +#include "pokedex_cry_screen.h" +#include "sound.h" +#include "trig.h" +#include "window.h" + +struct PokedexCryVolumeMeter { + s8 unk0; + s8 unk1; + u8 unk2; + u16 needleSpriteId; +}; + +struct PokedexCryScreen +{ + u8 unk0[16]; + u8 unk10; + u8 unk11; + u8 unk12; + u16 unk14; + u8 unk16; + u16 species; + u8 unk1A; + u8 unk1B; +}; + +static void sub_8145588(u16); +static void sub_81455A8(void); +static void sub_814560C(void); +static void sub_8145648(u8); +static void sub_81456A8(u8, u8); +static void sub_8145814(u8); +static void sub_8145824(u8, s16, u8); +static void sub_814596C(struct Sprite *); +static void sub_8145B24(s8); + +extern u8 gDexCryScreenState; +static EWRAM_DATA struct PokedexCryScreen *sDexCryScreen = NULL; +static EWRAM_DATA u8 *sCryWaveformWindowTiledata = NULL; +static EWRAM_DATA struct PokedexCryVolumeMeter *sCryVolumeMeter = NULL; + +const u16 CryMeterNeedlePalette[] = INCBIN_U16("graphics/pokedex/cry_meter_needle.gbapal"); +const u8 CryMeterNeedleTiles[] = INCBIN_U8("graphics/pokedex/cry_meter_needle.4bpp"); + +const u16 gUnknown_085B8378[] = INCBIN_U16("graphics/pokedex/cry_meter_map.bin"); +const u16 gUnknown_085B8418[] = INCBIN_U16("graphics/pokedex/cry_meter.gbapal"); +const u8 gUnknown_085B8438[] = INCBIN_U8("graphics/pokedex/cry_meter.4bpp.lz"); + +const u16 gUnknown_085B8770[][72] = { + { + 0x0000, 0x0004, 0x0008, 0x000C, 0x0010, 0x0014, 0x0018, 0x001C, + 0x0400, 0x0404, 0x0408, 0x040C, 0x0410, 0x0414, 0x0418, 0x041C, + 0x0800, 0x0804, 0x0808, 0x080C, 0x0810, 0x0814, 0x0818, 0x081C, + 0x0C00, 0x0C04, 0x0C08, 0x0C0C, 0x0C10, 0x0C14, 0x0C18, 0x0C1C, + 0x1000, 0x1004, 0x1008, 0x100C, 0x1010, 0x1014, 0x1018, 0x101C, + 0x1400, 0x1404, 0x1408, 0x140C, 0x1410, 0x1414, 0x1418, 0x141C, + 0x1800, 0x1804, 0x1808, 0x180C, 0x1810, 0x1814, 0x1818, 0x181C, + 0x1C00, 0x1C04, 0x1C08, 0x1C0C, 0x1C10, 0x1C14, 0x1C18, 0x1C1C, + 0x2000, 0x2004, 0x2008, 0x200C, 0x2010, 0x2014, 0x2018, 0x201C + }, { + 0x0000, 0x0004, 0x0008, 0x000C, 0x0010, 0x0014, 0x0018, 0x001C, + 0x0400, 0x0404, 0x0408, 0x040C, 0x0410, 0x0414, 0x0418, 0x041C, + 0x0800, 0x0804, 0x0808, 0x080C, 0x0810, 0x0814, 0x0818, 0x081C, + 0x0C00, 0x0C04, 0x0C08, 0x0C0C, 0x0C10, 0x0C14, 0x0C18, 0x0C1C, + 0x1000, 0x1004, 0x1008, 0x100C, 0x1010, 0x1014, 0x1018, 0x101C, + 0x1400, 0x1404, 0x1408, 0x140C, 0x1410, 0x1414, 0x1418, 0x141C, + 0x1800, 0x1804, 0x1808, 0x180C, 0x1810, 0x1814, 0x1818, 0x181C, + 0x1C00, 0x1C04, 0x1C08, 0x1C0C, 0x1C10, 0x1C14, 0x1C18, 0x1C1C, + 0x2000, 0x2004, 0x2008, 0x200C, 0x2010, 0x2014, 0x2018, 0x201C + }, { + 0x0001, 0x0005, 0x0009, 0x000D, 0x0011, 0x0015, 0x0019, 0x001D, + 0x0401, 0x0405, 0x0409, 0x040D, 0x0411, 0x0415, 0x0419, 0x041D, + 0x0801, 0x0805, 0x0809, 0x080D, 0x0811, 0x0815, 0x0819, 0x081D, + 0x0C01, 0x0C05, 0x0C09, 0x0C0D, 0x0C11, 0x0C15, 0x0C19, 0x0C1D, + 0x1001, 0x1005, 0x1009, 0x100D, 0x1011, 0x1015, 0x1019, 0x101D, + 0x1401, 0x1405, 0x1409, 0x140D, 0x1411, 0x1415, 0x1419, 0x141D, + 0x1801, 0x1805, 0x1809, 0x180D, 0x1811, 0x1815, 0x1819, 0x181D, + 0x1C01, 0x1C05, 0x1C09, 0x1C0D, 0x1C11, 0x1C15, 0x1C19, 0x1C1D, + 0x2001, 0x2005, 0x2009, 0x200D, 0x2011, 0x2015, 0x2019, 0x201D + }, { + 0x0001, 0x0005, 0x0009, 0x000D, 0x0011, 0x0015, 0x0019, 0x001D, + 0x0401, 0x0405, 0x0409, 0x040D, 0x0411, 0x0415, 0x0419, 0x041D, + 0x0801, 0x0805, 0x0809, 0x080D, 0x0811, 0x0815, 0x0819, 0x081D, + 0x0C01, 0x0C05, 0x0C09, 0x0C0D, 0x0C11, 0x0C15, 0x0C19, 0x0C1D, + 0x1001, 0x1005, 0x1009, 0x100D, 0x1011, 0x1015, 0x1019, 0x101D, + 0x1401, 0x1405, 0x1409, 0x140D, 0x1411, 0x1415, 0x1419, 0x141D, + 0x1801, 0x1805, 0x1809, 0x180D, 0x1811, 0x1815, 0x1819, 0x181D, + 0x1C01, 0x1C05, 0x1C09, 0x1C0D, 0x1C11, 0x1C15, 0x1C19, 0x1C1D, + 0x2001, 0x2005, 0x2009, 0x200D, 0x2011, 0x2015, 0x2019, 0x201D + }, { + 0x0002, 0x0006, 0x000A, 0x000E, 0x0012, 0x0016, 0x001A, 0x001E, + 0x0402, 0x0406, 0x040A, 0x040E, 0x0412, 0x0416, 0x041A, 0x041E, + 0x0802, 0x0806, 0x080A, 0x080E, 0x0812, 0x0816, 0x081A, 0x081E, + 0x0C02, 0x0C06, 0x0C0A, 0x0C0E, 0x0C12, 0x0C16, 0x0C1A, 0x0C1E, + 0x1002, 0x1006, 0x100A, 0x100E, 0x1012, 0x1016, 0x101A, 0x101E, + 0x1402, 0x1406, 0x140A, 0x140E, 0x1412, 0x1416, 0x141A, 0x141E, + 0x1802, 0x1806, 0x180A, 0x180E, 0x1812, 0x1816, 0x181A, 0x181E, + 0x1C02, 0x1C06, 0x1C0A, 0x1C0E, 0x1C12, 0x1C16, 0x1C1A, 0x1C1E, + 0x2002, 0x2006, 0x200A, 0x200E, 0x2012, 0x2016, 0x201A, 0x201E + }, { + 0x0002, 0x0006, 0x000A, 0x000E, 0x0012, 0x0016, 0x001A, 0x001E, + 0x0402, 0x0406, 0x040A, 0x040E, 0x0412, 0x0416, 0x041A, 0x041E, + 0x0802, 0x0806, 0x080A, 0x080E, 0x0812, 0x0816, 0x081A, 0x081E, + 0x0C02, 0x0C06, 0x0C0A, 0x0C0E, 0x0C12, 0x0C16, 0x0C1A, 0x0C1E, + 0x1002, 0x1006, 0x100A, 0x100E, 0x1012, 0x1016, 0x101A, 0x101E, + 0x1402, 0x1406, 0x140A, 0x140E, 0x1412, 0x1416, 0x141A, 0x141E, + 0x1802, 0x1806, 0x180A, 0x180E, 0x1812, 0x1816, 0x181A, 0x181E, + 0x1C02, 0x1C06, 0x1C0A, 0x1C0E, 0x1C12, 0x1C16, 0x1C1A, 0x1C1E, + 0x2002, 0x2006, 0x200A, 0x200E, 0x2012, 0x2016, 0x201A, 0x201E + }, { + 0x0003, 0x0007, 0x000B, 0x000F, 0x0013, 0x0017, 0x001B, 0x001F, + 0x0403, 0x0407, 0x040B, 0x040F, 0x0413, 0x0417, 0x041B, 0x041F, + 0x0803, 0x0807, 0x080B, 0x080F, 0x0813, 0x0817, 0x081B, 0x081F, + 0x0C03, 0x0C07, 0x0C0B, 0x0C0F, 0x0C13, 0x0C17, 0x0C1B, 0x0C1F, + 0x1003, 0x1007, 0x100B, 0x100F, 0x1013, 0x1017, 0x101B, 0x101F, + 0x1403, 0x1407, 0x140B, 0x140F, 0x1413, 0x1417, 0x141B, 0x141F, + 0x1803, 0x1807, 0x180B, 0x180F, 0x1813, 0x1817, 0x181B, 0x181F, + 0x1C03, 0x1C07, 0x1C0B, 0x1C0F, 0x1C13, 0x1C17, 0x1C1B, 0x1C1F, + 0x2003, 0x2007, 0x200B, 0x200F, 0x2013, 0x2017, 0x201B, 0x201F + }, { + 0x0003, 0x0007, 0x000B, 0x000F, 0x0013, 0x0017, 0x001B, 0x001F, + 0x0403, 0x0407, 0x040B, 0x040F, 0x0413, 0x0417, 0x041B, 0x041F, + 0x0803, 0x0807, 0x080B, 0x080F, 0x0813, 0x0817, 0x081B, 0x081F, + 0x0C03, 0x0C07, 0x0C0B, 0x0C0F, 0x0C13, 0x0C17, 0x0C1B, 0x0C1F, + 0x1003, 0x1007, 0x100B, 0x100F, 0x1013, 0x1017, 0x101B, 0x101F, + 0x1403, 0x1407, 0x140B, 0x140F, 0x1413, 0x1417, 0x141B, 0x141F, + 0x1803, 0x1807, 0x180B, 0x180F, 0x1813, 0x1817, 0x181B, 0x181F, + 0x1C03, 0x1C07, 0x1C0B, 0x1C0F, 0x1C13, 0x1C17, 0x1C1B, 0x1C1F, + 0x2003, 0x2007, 0x200B, 0x200F, 0x2013, 0x2017, 0x201B, 0x201F + } +}; + +const u16 gUnknown_085B8BF0[] = INCBIN_U16("graphics/pokedex/85B8C10.gbapal"); +const u8 gUnknown_085B8C10[] = INCBIN_U8("graphics/pokedex/85B8C10.4bpp"); + +const u8 gUnknown_085B8C30[] = {0xF0, 0x0F}; +const u8 gUnknown_085B8C32[][16] = { + { + 0x0F, 0x0E, 0x0D, 0x0C, 0x0B, 0x0A, 0x09, 0x08, + 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F + }, { + 0xF0, 0xE0, 0xD0, 0xC0, 0xB0, 0xA0, 0x90, 0x80, + 0x80, 0x90, 0xA0, 0xB0, 0xC0, 0xD0, 0xE0, 0xF0 + } +}; + +const union AnimCmd gSpriteAnim_85B8C54[] = { + ANIMCMD_FRAME(0, 30), + ANIMCMD_END +}; + +const union AnimCmd *const gSpriteAnimTable_85B8C5C[] = { + gSpriteAnim_85B8C54 +}; + +const struct OamData gOamData_85B8C60 = { + .y = 160, + .affineMode = ST_OAM_AFFINE_NORMAL, + .size = 3, + .priority = 1 +}; + +const struct SpriteTemplate gUnknown_085B8C68 = { + 0x2000, + 0x2000, + &gOamData_85B8C60, + gSpriteAnimTable_85B8C5C, + NULL, + gDummySpriteAffineAnimTable, + sub_814596C +}; + +const struct SpriteSheet gCryMeterNeedleSpriteSheets[] = { + {CryMeterNeedleTiles, 0x800, 0x2000}, + {} +}; + +const struct SpritePalette gCryMeterNeedleSpritePalettes[] = { + {CryMeterNeedlePalette, 0x2000}, + {} +}; + +bool8 sub_8145354(struct CryRelatedStruct *arg0, u8 windowId) +{ + u8 i; + u8 retVal = FALSE; + + switch (gDexCryScreenState) + { + case 0: + if (!sDexCryScreen) + { + sDexCryScreen = AllocZeroed(sizeof(*sDexCryScreen)); + sCryWaveformWindowTiledata = (u8*)GetWindowAttribute(windowId, WINDOW_TILE_DATA); + } + + sDexCryScreen->unk14 = arg0->unk0; + sDexCryScreen->unk16 = arg0->yPos; + sDexCryScreen->unk1A = 0; + sDexCryScreen->unk1B = 0; + sDexCryScreen->unk10 = 0; + sDexCryScreen->unk12 = 28; + sDexCryScreen->unk11 = 0; + sub_8145824(windowId, -8 * arg0->xPos, 1); + for (i = 0; i < 224; i++) + CopyToWindowPixelBuffer(windowId, gUnknown_085B8C10, TILE_SIZE_4BPP, i); + + gDexCryScreenState++; + break; + case 1: + for (i = 0; i < sDexCryScreen->unk16 * 8; i++) + sub_81456A8(i, 0); + + gDexCryScreenState++; + break; + case 2: + sub_8145814(windowId); + LoadPalette(gUnknown_085B8BF0, arg0->paletteNo * 16, 32); + retVal = TRUE; + break; + } + + return retVal; +} + +void sub_814545C(u8 windowId) +{ + u8 var0; + + sub_8145814(windowId); + sub_8145648(windowId); + if (sDexCryScreen->unk1B) + sDexCryScreen->unk1B--; + + if (sDexCryScreen->unk1A) + { + sDexCryScreen->unk1A--; + if (!sDexCryScreen->unk1A) + { + sub_8145588(sDexCryScreen->species); + sub_814560C(); + return; + } + } + + if (sDexCryScreen->unk10 == 0) + { + sub_814560C(); + return; + } + + if (sDexCryScreen->unk10 == 1) + { + sub_81455A8(); + } + else if (sDexCryScreen->unk10 > 8) + { + if (!IsCryPlaying()) + { + sub_814560C(); + sDexCryScreen->unk10 = 0; + return; + } + + sub_81455A8(); + sDexCryScreen->unk10 = 1; + } + + var0 = 2 * (sDexCryScreen->unk10 - 1); + sub_81456A8(sDexCryScreen->unk16 * 8 + sDexCryScreen->unk11 - 2, sDexCryScreen->unk0[var0]); + sub_81456A8(sDexCryScreen->unk16 * 8 + sDexCryScreen->unk11 - 1, sDexCryScreen->unk0[var0 + 1]); + sDexCryScreen->unk10++; +} + +void sub_8145534(u16 species) +{ + if (gMPlayInfo_BGM.status & MUSICPLAYER_STATUS_PAUSE && !sDexCryScreen->unk1A) + { + if (!sDexCryScreen->unk1B) + { + sDexCryScreen->unk1B = 4; + if (IsCryPlaying() == TRUE) + { + StopCry(); + sDexCryScreen->species = species; + sDexCryScreen->unk1A = 2; + } + else + { + sub_8145588(species); + } + } + } +} + +static void sub_8145588(u16 species) +{ + PlayCry2(species, 0, 0x7d, 10); + sDexCryScreen->unk10 = 1; +} + +static void sub_81455A8(void) +{ + u8 i; + s8 *baseBuffer; + s8 *buffer; + + if (gPcmDmaCounter < 2) + baseBuffer = gSoundInfo.pcmBuffer; + else + baseBuffer = gSoundInfo.pcmBuffer + (gSoundInfo.pcmDmaPeriod + 1 - gPcmDmaCounter) * gSoundInfo.pcmSamplesPerVBlank; + + buffer = baseBuffer + 0x630; + for (i = 0; i < 16; i++) + sDexCryScreen->unk0[i] = buffer[i * 2] * 2; +} + +static void sub_814560C(void) +{ + sub_81456A8(sDexCryScreen->unk16 * 8 + sDexCryScreen->unk11 - 2, 0); + sub_81456A8(sDexCryScreen->unk16 * 8 + sDexCryScreen->unk11 - 1, 0); +} + +static void sub_8145648(u8 windowId) +{ + u8 i; + u16 offset; + + sub_8145824(windowId, sDexCryScreen->unk11, 0); + sDexCryScreen->unk11 += 2; + offset = (sDexCryScreen->unk11 / 8 + sDexCryScreen->unk16 + 1) % 32; + for (i = 0; i < 7; i++) + CopyToWindowPixelBuffer(windowId, gUnknown_085B8C10, TILE_SIZE_4BPP, offset + (i * TILE_SIZE_4BPP)); +} + +static void sub_81456A8(u8 a0, u8 a1) +{ + u8 sp0; + u8 r6; + u8 r8; + u16 offset; + u16 r1; + u8 i; + + r1 = (a1 + 127) * 256; + i = r1 / 1152.0; + if (i > 55) + i = 55; + sp0 = i; + r6 = a0 & 1; + if (i > sDexCryScreen->unk12) + { + do + { + offset = gUnknown_085B8770[a0 & 0x7][i] + (a0 / 8) * TILE_SIZE_4BPP; + sCryWaveformWindowTiledata[offset] &= gUnknown_085B8C30[r6]; + sCryWaveformWindowTiledata[offset] |= gUnknown_085B8C32[r6][((i / 3) - 1) & 0x0F]; + i--; + } while (i > sDexCryScreen->unk12); + } + else + { + do + { + offset = gUnknown_085B8770[a0 & 0x7][i] + (a0 / 8) * TILE_SIZE_4BPP; + sCryWaveformWindowTiledata[offset] &= gUnknown_085B8C30[r6]; + sCryWaveformWindowTiledata[offset] |= gUnknown_085B8C32[r6][((i / 3) - 1) & 0x0F]; + i++; + } while (i < sDexCryScreen->unk12); + } + + sDexCryScreen->unk12 = sp0; +} + +static void sub_8145814(u8 windowId) +{ + CopyWindowToVram(windowId, 2); +} + +static void sub_8145824(u8 windowId, s16 arg1, u8 arg2) +{ + if (!arg2) + { + u8 bg = GetWindowAttribute(windowId, WINDOW_BG); + ChangeBgX(bg, arg1 << 8, 0); + } +} + +bool8 sub_8145850(struct CryRelatedStruct *arg0, u8 windowId) +{ + int retVal = FALSE; + + switch (gDexCryScreenState) + { + case 0: + if (!sCryVolumeMeter) + sCryVolumeMeter = AllocZeroed(sizeof(*sCryVolumeMeter)); + + CopyToWindowPixelBuffer(windowId, gUnknown_085B8438, 0, 0); + LoadPalette(gUnknown_085B8418, arg0->paletteNo * 16, 32); + gDexCryScreenState++; + break; + case 1: + LoadSpriteSheets(gCryMeterNeedleSpriteSheets); + LoadSpritePalettes(gCryMeterNeedleSpritePalettes); + sCryVolumeMeter->needleSpriteId = CreateSprite(&gUnknown_085B8C68, 40 + arg0->xPos * 8, 56 + arg0->yPos * 8, 1); + sCryVolumeMeter->unk0 = 0x20; + sCryVolumeMeter->unk1 = 0x20; + sCryVolumeMeter->unk2 = 0; + retVal = TRUE; + break; + } + + return retVal; +} + +void sub_8145914(void) +{ + FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(gSprites[sCryVolumeMeter->needleSpriteId].oam.paletteNum)); + DestroySprite(gSprites + sCryVolumeMeter->needleSpriteId); + FREE_AND_SET_NULL(sDexCryScreen); + FREE_AND_SET_NULL(sCryVolumeMeter); +} + +static void sub_814596C(struct Sprite *sprite) +{ + u16 i; + s8 r3; + s16 x; + s16 y; + struct ObjAffineSrcData affine; + struct OamMatrix matrix; + u8 *var0; + + gSprites[sCryVolumeMeter->needleSpriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; + gSprites[sCryVolumeMeter->needleSpriteId].oam.affineParam = 0; + switch (sDexCryScreen->unk10) + { + case 0: + sCryVolumeMeter->unk1 = 0x20; + if (sCryVolumeMeter->unk0 > 0) + { + if (sCryVolumeMeter->unk2 != 1) + sCryVolumeMeter->unk2--; + } + else + sCryVolumeMeter->unk2 = 5; + break; + case 2: + r3 = 0; + for (i = 0; i < 16; i++) + { + if (r3 < sDexCryScreen->unk0[i]) + r3 = sDexCryScreen->unk0[i]; + } + sub_8145B24(r3 * 0xd0 / 0x100); + break; + case 6: + var0 = &sDexCryScreen->unk0[10]; + sub_8145B24(*var0 * 0xd0 / 0x100); + break; + } + + if (sCryVolumeMeter->unk0 == sCryVolumeMeter->unk1) + { + // empty block + } + else if (sCryVolumeMeter->unk0 < sCryVolumeMeter->unk1) + { + sCryVolumeMeter->unk0 += sCryVolumeMeter->unk2; + if (sCryVolumeMeter->unk0 > sCryVolumeMeter->unk1) + { + sCryVolumeMeter->unk0 = sCryVolumeMeter->unk1; + sCryVolumeMeter->unk1 = 0; + } + } + else + { + sCryVolumeMeter->unk0 -= sCryVolumeMeter->unk2; + if (sCryVolumeMeter->unk0 < sCryVolumeMeter->unk1) + { + sCryVolumeMeter->unk0 = sCryVolumeMeter->unk1; + sCryVolumeMeter->unk1 = 0; + } + } + + affine.xScale = 0x100; + affine.yScale = 0x100; + affine.rotation = sCryVolumeMeter->unk0 * 256; + ObjAffineSet(&affine, &matrix, 1, 2); + SetOamMatrix(0, matrix.a, matrix.b, matrix.c, matrix.d); + x = gSineTable[((sCryVolumeMeter->unk0 + 0x7F) & 0xFF)]; + y = gSineTable[((sCryVolumeMeter->unk0 + 0x7F) & 0xFF) + 0x40]; + sprite->pos2.x = x * 24 / 256; + sprite->pos2.y = y * 24 / 256; +} + +static void sub_8145B24(s8 a0) +{ + u16 r2 = (0x20 - a0) & 0xff; + if (r2 > 0x20 && r2 < 0xe0) + r2 = 0xe0; + + sCryVolumeMeter->unk1 = r2; + sCryVolumeMeter->unk2 = 5; +} |