diff options
author | Cameron Hall <camthesaxman@users.noreply.github.com> | 2016-11-01 08:48:23 -0500 |
---|---|---|
committer | YamaArashi <YamaArashi@users.noreply.github.com> | 2016-11-01 06:48:23 -0700 |
commit | 315af92a3cfb8524d3b560f42fc352387e1369ed (patch) | |
tree | d0378005d477a1aa03dc2dbf0ddbf8652d765cb0 /src | |
parent | 447b23ff24a4011001a620199fb9ac790052681c (diff) |
decompile more pokedex functions (#81)
* decompile more pokedex functions
* use spaces instead of tabs
* mostly fix up sub_808D690
* fix sub_808DBE8
* decompile sub_808E398
* decompile more pokedex functions
* decompile sub_808E978
* decompile more functions
* decompile sub_808F2B0
* decompile sub_808F8B8
* decompile more pokedex functions
Diffstat (limited to 'src')
-rw-r--r-- | src/pokedex.c | 378 |
1 files changed, 364 insertions, 14 deletions
diff --git a/src/pokedex.c b/src/pokedex.c index bea845d91..51fce03aa 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -60,6 +60,29 @@ struct PokedexView { u8 unk65E[8]; }; +struct PokedexEntry +{ + /*0x00*/ u8 categoryName[12]; + /*0x0C*/ u16 height; //in decimeters + /*0x0E*/ u16 weight; //in hectograms + /*0x10*/ u8 *descriptionPage1; + /*0x14*/ u8 *descriptionPage2; + /*0x18*/ u16 unused; + /*0x1A*/ u16 pokemonScale; + /*0x1C*/ u16 pokemonOffset; + /*0x1E*/ u16 trainerScale; + /*0x20*/ u16 trainerOffset; +}; /*size = 0x24*/ + +struct CryRelatedStruct +{ + u16 unk0; + u8 unk2; + u8 unk3; + u8 unk4; + u8 unk5; +}; + extern struct MusicPlayerInfo gMPlay_BGM; extern u8 gReservedSpritePaletteCount; extern struct PokedexView *gUnknown_0202FFB4; @@ -91,25 +114,17 @@ extern struct PokedexListItem *gUnknown_0202FFBC; extern IntrCallback gUnknown_03005CEC; extern u8 gUnknown_08E96BD4[]; extern u8 gUnknown_083A05F8[]; - -struct PokedexEntry -{ - /*0x00*/ u8 categoryName[12]; - /*0x0C*/ u16 height; //in decimeters - /*0x0E*/ u16 weight; //int hectograms - /*0x10*/ u8 *descriptionPage1; - /*0x14*/ u8 *descriptionPage2; - /*0x18*/ u16 unused; - /*0x1A*/ u16 pokemonScale; - /*0x1C*/ u16 pokemonOffset; - /*0x1E*/ u16 trainerScale; - /*0x20*/ u16 trainerOffset; -}; /*size = 0x24*/ +extern u8 gUnknown_0839F8A0[]; +extern u8 gUnknown_0839F988[]; +extern u8 gUnknown_03005E98; +extern u8 gUnknown_083B4EC4[]; extern struct PokedexEntry gPokedexEntries[]; extern u8 gDexText_UnknownPoke[]; extern u8 gDexText_UnknownHeight[]; extern u8 gDexText_UnknownWeight[]; +extern u8 gDexText_CryOf[]; +extern u8 gDexText_SizeComparedTo[]; extern void m4aMPlayVolumeControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u16 volume); extern bool8 BeginNormalPaletteFade(u32, s8, u8, u8, u16); @@ -180,6 +195,15 @@ void sub_808F8D8(u8 taskId); void sub_808F8B8(u8 taskId); void sub_808F888(u8 taskId); void sub_8090070(u8 taskId); +void sub_808F9C8(u8 taskId); +void sub_808FA00(u8 taskId); +void sub_808FDF8(u8 taskId); +void sub_808FFBC(u8 taskId); +void sub_80903D0(u8 taskId); +void sub_8090040(u8); +u16 NationalPokedexNumToSpecies(u16); +u8 sub_8119E3C(struct CryRelatedStruct *, u8); +u8 ShowPokedexCryScreen(struct CryRelatedStruct *, u8); void sub_808C02C(void) { @@ -2475,3 +2499,329 @@ void sub_808F8B8(u8 taskId) if(!gPaletteFade.active) DestroyTask(taskId); } + +void sub_808F8D8(u8 taskId) +{ + switch (gMain.state) + { + case 0: + default: + if (!gPaletteFade.active) + { + gUnknown_0202FFB4->unk64A = 5; + gUnknown_03005CEC = gMain.vblankCallback; + SetVBlankCallback(NULL); + sub_8091060(0x200); + gUnknown_0202FFB4->unk64D = 1; + gMain.state = 1; + } + break; + case 1: + sub_8090540(0xD); + sub_8090644(1, 0xD); + sub_808D640(); + REG_BG1CNT = 0xD00; + gMain.state++; + break; + case 2: + ShowPokedexAreaScreen(NationalPokedexNumToSpecies(gUnknown_0202FFBC->a), &gUnknown_0202FFB4->unk64F); + SetVBlankCallback(gUnknown_03005CEC); + gUnknown_0202FFB4->unk64F = 0; + gMain.state = 0; + gTasks[taskId].func = sub_808F9C8; + break; + } +} + +void sub_808F9C8(u8 taskId) +{ + if(gUnknown_0202FFB4->unk64F != 0) + gTasks[taskId].func = sub_808FA00; +} + +void sub_808FA00(u8 taskId) +{ + if(!gPaletteFade.active) + { + switch(gUnknown_0202FFB4->unk64F) + { + case 1: + default: + gTasks[taskId].func = sub_808F2B0; + break; + case 2: + gTasks[taskId].func = sub_808FA64; + break; + } + } +} + +void sub_808FA64(u8 taskId) +{ + switch(gMain.state) + { + case 0: + default: + if(!gPaletteFade.active) + { + m4aMPlayStop(&gMPlay_BGM); + gUnknown_0202FFB4->unk64A = 6; + gUnknown_03005CEC = gMain.vblankCallback; + SetVBlankCallback(NULL); + sub_8091060(0x200); + gUnknown_0202FFB4->unk64D = 2; + gMain.state = 1; + } + break; + case 1: + LZ77UnCompVram(gPokedexMenu_Gfx, (void *)VRAM); + LZ77UnCompVram(gUnknown_0839F8A0, (void *)(VRAM + 0x7000)); + gMain.state++; + break; + case 2: + sub_8090540(0xD); + sub_8090644(2, 0xD); + sub_808D640(); + DmaClear16(3, (void *)(VRAM + 0xF800), 0x500); + gMain.state++; + break; + case 3: + SetUpWindowConfig(&gWindowConfig_81E702C); + InitMenuWindow(&gWindowConfig_81E702C); + ResetPaletteFade(); + gMain.state++; + break; + case 4: + MenuPrint(gDexText_CryOf, 10, 4); + sub_8091260(gUnknown_0202FFBC->a, 10, 6, 2); + gMain.state++; + break; + case 5: + gTasks[taskId].data[4] = sub_80918EC(gUnknown_0202FFBC->a, 0x30, 0x38, 0); + gSprites[gTasks[taskId].data[4]].oam.priority = 0; + gUnknown_03005E98 = 0; + gMain.state++; + break; + case 6: + { + struct CryRelatedStruct sp8; + + sp8.unk0 = 0x4020; + sp8.unk2 = 0x1F; + sp8.unk3 = 8; + sp8.unk5 = 0x1E; + sp8.unk4 = 0xC; + if(sub_8119E3C(&sp8, 0) != 0) + { + gMain.state++; + gUnknown_03005E98 = 0; + } + break; + } + case 7: + { + struct CryRelatedStruct sp10; + + sp10.unk0 = 0x3000; + sp10.unk2 = 0xE; + sp10.unk3 = 9; + sp10.unk4 = 0x12; + sp10.unk5 = 3; + if(ShowPokedexCryScreen(&sp10, 1) != 0) + { + gMain.state++; + } + break; + } + case 8: + BeginNormalPaletteFade(-0x15, 0, 0x10, 0, 0); + SetVBlankCallback(gUnknown_03005CEC); + gMain.state++; + break; + case 9: + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + REG_BLDY = 0; + REG_BG2CNT = 0xE02; + REG_BG0CNT = 0x1F07; + REG_BG1CNT = 0xD00; + REG_DISPCNT = 0x1F07 + 0x39; + gMain.state++; + break; + case 10: + gUnknown_0202FFB4->unk64F = 0; + gMain.state = 0; + gTasks[taskId].func = sub_808FDF8; + break; + } +} + +void sub_808FDF8(u8 taskId) +{ + sub_8119F88(0); + + if (IsCryPlaying()) + sub_8090040(1); + else + sub_8090040(0); + + if (gMain.newKeys & 1) + { + sub_8090040(1); + sub_811A050(NationalPokedexNumToSpecies(gUnknown_0202FFBC->a)); + return; + } + else if (!gPaletteFade.active) + { + if (gMain.newKeys & 2) + { + BeginNormalPaletteFade(-0x15, 0, 0, 0x10, 0); + m4aMPlayContinue(&gMPlay_BGM); + gUnknown_0202FFB4->unk64F = 1; + gTasks[taskId].func = sub_808FFBC; + PlaySE(3); + } + else if ((gMain.newKeys & 0x20) || ((gMain.newKeys & 0x200) && gSaveBlock2.optionsButtonMode == 1)) + { + BeginNormalPaletteFade(-0x15, 0, 0, 0x10, 0); + m4aMPlayContinue(&gMPlay_BGM); + gUnknown_0202FFB4->unk64F = 2; + gTasks[taskId].func = sub_808FFBC; + PlaySE(0x6D); + } + else if ((gMain.newKeys & 0x10) || ((gMain.newKeys & 0x100) && gSaveBlock2.optionsButtonMode == 1)) + { + if (!gUnknown_0202FFBC->owned) + PlaySE(0x20); + else + { + BeginNormalPaletteFade(-0x15, 0, 0, 0x10, 0); + m4aMPlayContinue(&gMPlay_BGM); + gUnknown_0202FFB4->unk64F = 3; + gTasks[taskId].func = sub_808FFBC; + PlaySE(0x6D); + } + } + } +} + +void sub_808FFBC(u8 taskId) +{ + if(!gPaletteFade.active) + { + DestroyCryMeterNeedleSprite(); + switch(gUnknown_0202FFB4->unk64F) + { + default: + case 1: + gTasks[taskId].func = sub_808F2B0; + break; + case 2: + gTasks[taskId].func = sub_808F8D8; + break; + case 3: + gTasks[taskId].func = sub_8090070; + } + } +} + +void sub_8090040(u8 a) +{ + u16 unk; + + if(a != 0) + unk = 0x392; + else + unk = 0x2AF; + LoadPalette(&unk, 0x5D, 2); +} + +void sub_8090070(u8 taskId) +{ + u8 spriteId; + + switch(gMain.state) + { + default: + case 0: + if(!gPaletteFade.active) + { + gUnknown_0202FFB4->unk64A = 7; + gUnknown_03005CEC = gMain.vblankCallback; + SetVBlankCallback(NULL); + sub_8091060(0x200); + gUnknown_0202FFB4->unk64D = 3; + gMain.state = 1; + } + break; + case 1: + LZ77UnCompVram(gPokedexMenu_Gfx, (void *)VRAM); + LZ77UnCompVram(gUnknown_0839F988, (void *)(VRAM + 0x7000)); + gMain.state++; + break; + case 2: + sub_8090540(0xD); + sub_8090644(3, 0xD); + sub_808D640(); + gMain.state++; + break; + case 3: + { + u8 string[40]; //I hope this is the correct size + + SetUpWindowConfig(&gWindowConfig_81E702C); + InitMenuWindow(&gWindowConfig_81E702C); + string[0] = EOS; + StringAppend(string, gDexText_SizeComparedTo); + StringAppend(string, gSaveBlock2.playerName); + sub_8072BD8(string, 3, 15, 0xC0); + gMain.state++; + break; + } + case 4: + ResetPaletteFade(); + gMain.state++; + break; + case 5: + spriteId = sub_8091A4C(gSaveBlock2.playerGender, 0x98, 0x38, 0); + gSprites[spriteId].oam.affineMode = 1; + gSprites[spriteId].oam.matrixNum = 1; + gSprites[spriteId].oam.priority = 0; + gSprites[spriteId].pos2.y = gPokedexEntries[gUnknown_0202FFBC->a].trainerOffset; + SetOamMatrix(1, gPokedexEntries[gUnknown_0202FFBC->a].trainerScale, 0, 0, gPokedexEntries[gUnknown_0202FFBC->a].trainerScale); + LoadPalette(gUnknown_083B4EC4, (gSprites[spriteId].oam.paletteNum + 16) * 16, 0x20); + gMain.state++; + break; + case 6: + spriteId = sub_80918EC(gUnknown_0202FFBC->a, 0x58, 0x38, 1); + gSprites[spriteId].oam.affineMode = 1; + gSprites[spriteId].oam.matrixNum = 2; + gSprites[spriteId].oam.priority = 0; + gSprites[spriteId].pos2.y = gPokedexEntries[gUnknown_0202FFBC->a].pokemonOffset; + SetOamMatrix(2, gPokedexEntries[gUnknown_0202FFBC->a].pokemonScale, 0, 0, gPokedexEntries[gUnknown_0202FFBC->a].pokemonScale); + LoadPalette(gUnknown_083B4EC4, (gSprites[spriteId].oam.paletteNum + 16) * 16, 0x20); + gMain.state++; + break; + case 7: + BeginNormalPaletteFade(-0x15, 0, 0x10, 0, 0); + SetVBlankCallback(gUnknown_03005CEC); + gMain.state++; + break; + case 8: + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + REG_BLDY = 0; + REG_BG2CNT = 0xE03; + REG_DISPCNT = 0x1E40; + gMain.state++; + break; + case 9: + if(!gPaletteFade.active) + { + gUnknown_0202FFB4->unk64F = 0; + gMain.state = 0; + gTasks[taskId].func = sub_80903D0; + } + break; + } +} |