mirror of
https://github.com/pret/pokeruby.git
synced 2024-11-27 23:10:45 +00:00
decompile more pokedex functions (#65)
* decompile more pokedex functions * use spaces instead of tabs * mostly fix up sub_808D690 * fix sub_808DBE8 * decompile sub_808E398
This commit is contained in:
parent
502f8d10f1
commit
e30665cc2f
2140
asm/rom5_part2.s
2140
asm/rom5_part2.s
File diff suppressed because it is too large
Load Diff
687
src/pokedex.c
687
src/pokedex.c
@ -1,5 +1,6 @@
|
||||
#include "gba/gba.h"
|
||||
#include "main.h"
|
||||
#include "menu.h"
|
||||
#include "palette.h"
|
||||
#include "rng.h"
|
||||
#include "songs.h"
|
||||
@ -10,9 +11,9 @@
|
||||
|
||||
struct PokedexListItem {
|
||||
u16 a;
|
||||
u8 seen:1;
|
||||
u8 owned:1;
|
||||
u8 c;
|
||||
u16 seen:1;
|
||||
u16 owned:1;
|
||||
//u8 c;
|
||||
};
|
||||
|
||||
struct PokedexView {
|
||||
@ -38,8 +39,8 @@ struct PokedexView {
|
||||
u8 unk62D;
|
||||
u8 unk62E;
|
||||
u8 unk62F;
|
||||
u16 unk630;
|
||||
u16 unk632;
|
||||
s16 unk630;
|
||||
s16 unk632;
|
||||
u16 unk634;
|
||||
u16 unk636;
|
||||
u16 unk638;
|
||||
@ -65,6 +66,17 @@ extern struct PokedexView *gUnknown_0202FFB4;
|
||||
extern u16 gUnknown_0202FFB8;
|
||||
extern u8 gUnknown_0202FFBA;
|
||||
extern u8 gUnknown_03005CE8;
|
||||
extern u8 gPokedexMenu_Gfx[];
|
||||
extern u8 gUnknown_08E96738[];
|
||||
extern u8 gUnknown_08E9C6DC[];
|
||||
extern u8 gUnknown_08E96888[];
|
||||
extern u8 gUnknown_08E96994[];
|
||||
extern u8 gUnknown_083A05CC[];
|
||||
extern struct SpritePalette gUnknown_083A05DC[];
|
||||
extern u8 gUnknown_0839FA7C[];
|
||||
extern u8 gUnknown_0839F67C[];
|
||||
extern u8 gPokedexMenu_Pal[];
|
||||
extern u8 gUnknown_0839F73C[];
|
||||
|
||||
extern void m4aMPlayVolumeControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u16 volume);
|
||||
extern bool8 BeginNormalPaletteFade(u32, s8, u8, u8, u16);
|
||||
@ -74,6 +86,14 @@ extern u16 pokedex_count(u8);
|
||||
extern u8 sub_8091E3C(void);
|
||||
extern void sub_80690C8(void);
|
||||
extern void sub_805469C(void);
|
||||
extern void LoadCompressedObjectPic(void *);
|
||||
extern void LZ77UnCompVram(const void *, void *);
|
||||
extern u16 HoennToNationalOrder(u16);
|
||||
extern u16 NationalToHoennOrder(u16);
|
||||
extern u16 gPokedexOrder_Alphabetical[];
|
||||
extern u16 gPokedexOrder_Weight[];
|
||||
extern u16 gPokedexOrder_Height[];
|
||||
extern u8 gSpeciesNames[][11];
|
||||
|
||||
void ClearPokedexView(struct PokedexView *);
|
||||
void Task_PokedexShowMainScreen(u8 taskId);
|
||||
@ -108,6 +128,17 @@ void Task_PokedexResultsScreenMenu(u8 taskId);
|
||||
void Task_PokedexResultsScreenReturnToMainScreen(u8 taskId);
|
||||
void sub_808CEF8(u8 taskId);
|
||||
void Task_PokedexResultsScreenExitPokedex(u8 taskId);
|
||||
void sub_808D640(void);
|
||||
void sub_808E978(u8);
|
||||
bool8 sub_8090D90(u16, u8);
|
||||
void sub_808E090(u8, u8, u16);
|
||||
void sub_808DEB0(u16, u8, u8, u16);
|
||||
void sub_808DF88(u16, u8, u8, u16);
|
||||
u8 sub_808DFE4(u16, u8, u8);
|
||||
u16 sub_808E888(u16);
|
||||
u32 sub_808E8C8(u16, u16, u16);
|
||||
void sub_808EE28(struct Sprite *sprite);
|
||||
u16 sub_8091818(u8, u16, u16, u16);
|
||||
|
||||
void sub_808C02C(void)
|
||||
{
|
||||
@ -211,7 +242,7 @@ void CB2_InitPokedex(void)
|
||||
SetVBlankCallback(NULL);
|
||||
sub_8091060(0);
|
||||
addr = (u8 *)VRAM;
|
||||
size = 0x18000;
|
||||
size = VRAM_SIZE;
|
||||
while(1)
|
||||
{
|
||||
DmaFill16(3, 0, addr, 0x1000);
|
||||
@ -715,3 +746,647 @@ void Task_PokedexResultsScreenExitPokedex(u8 taskId)
|
||||
gTasks[taskId].func = Task_ClosePokedex;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool8 sub_808D344(u8 a)
|
||||
{
|
||||
switch(gMain.state)
|
||||
{
|
||||
case 0:
|
||||
default:
|
||||
if(gPaletteFade.active)
|
||||
return 0;
|
||||
//_0808D39E
|
||||
SetVBlankCallback(NULL);
|
||||
gUnknown_0202FFB4->unk64A = a;
|
||||
sub_8091060(0);
|
||||
REG_BG2VOFS = gUnknown_0202FFB4->unk62D;
|
||||
LZ77UnCompVram(gPokedexMenu_Gfx, (void *)(VRAM));
|
||||
LZ77UnCompVram(gUnknown_08E96738, (void *)(VRAM + 0x6800));
|
||||
LZ77UnCompVram(gUnknown_08E9C6DC, (void *)(VRAM + 0x7800));
|
||||
DmaClear16(3, VRAM + 0x6000, 0x500);
|
||||
if(a == 0)
|
||||
LZ77UnCompVram(gUnknown_08E96888, (void *)(VRAM + 0x6500));
|
||||
else
|
||||
LZ77UnCompVram(gUnknown_08E96994, (void *)(VRAM + 0x6500));
|
||||
ResetPaletteFade();
|
||||
if(a == 0)
|
||||
gUnknown_0202FFB4->unk64C_1 = 0;
|
||||
else
|
||||
gUnknown_0202FFB4->unk64C_1 = 1;
|
||||
sub_808D640();
|
||||
gMain.state = 1;
|
||||
break;
|
||||
case 1:
|
||||
ResetSpriteData();
|
||||
FreeAllSpritePalettes();
|
||||
gReservedSpritePaletteCount = 8;
|
||||
LoadCompressedObjectPic(gUnknown_083A05CC);
|
||||
LoadSpritePalettes(gUnknown_083A05DC);
|
||||
sub_808E978(a);
|
||||
gMain.state++;
|
||||
break;
|
||||
case 2:
|
||||
SetUpWindowConfig(&gWindowConfig_81E7048);
|
||||
InitMenuWindow(&gWindowConfig_81E7048);
|
||||
LZ77UnCompVram(gUnknown_0839FA7C, (void *)(VRAM + 0xFF80));
|
||||
gMain.state++;
|
||||
break;
|
||||
case 3:
|
||||
if(a == 0)
|
||||
sub_808D690(gUnknown_0202FFB4->unk612, gUnknown_0202FFB4->unk616);
|
||||
sub_808E0CC(gUnknown_0202FFB4->unk60E, 0xE);
|
||||
gUnknown_0202FFB4->unk650 = 0;
|
||||
gUnknown_0202FFB4->unk654 = 0;
|
||||
gMain.state++;
|
||||
break;
|
||||
case 4:
|
||||
BeginNormalPaletteFade(-1, 0, 0x10, 0, 0);
|
||||
SetVBlankCallback(sub_808C0B8);
|
||||
gMain.state++;
|
||||
break;
|
||||
case 5:
|
||||
REG_WININ = 0x3F3F;
|
||||
REG_WINOUT = 0x1D3F;
|
||||
REG_WIN0H = 0;
|
||||
REG_WIN0V = 0;
|
||||
REG_WIN1H = 0;
|
||||
REG_WIN1V = 0;
|
||||
REG_BLDCNT = 0;
|
||||
REG_BLDALPHA = 0;
|
||||
REG_BLDY = 0;
|
||||
REG_BG3CNT = 0xF03;
|
||||
REG_BG1CNT = 0xD01;
|
||||
REG_BG0CNT = 0xC00;
|
||||
REG_DISPCNT = 0x9F40;
|
||||
gMain.state++;
|
||||
break;
|
||||
case 6:
|
||||
if(!gPaletteFade.active)
|
||||
{
|
||||
gMain.state = 0;
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void sub_808D640(void)
|
||||
{
|
||||
if(gUnknown_0202FFB4->unk64C_1)
|
||||
LoadPalette(gUnknown_0839F67C + 0x2, 1, 0xBE);
|
||||
else if(!sub_806912C())
|
||||
LoadPalette(gPokedexMenu_Pal + 0x2, 1, 0xBE);
|
||||
else
|
||||
LoadPalette(gUnknown_0839F73C + 0x2, 1, 0xBE);
|
||||
}
|
||||
|
||||
//Pokedex sorting function
|
||||
void sub_808D690(u8 a, u8 mode)
|
||||
{
|
||||
u16 vars[3]; //I have no idea why three regular variables are stored in an array, but whatever.
|
||||
s16 i;
|
||||
|
||||
gUnknown_0202FFB4->unk60C = 0;
|
||||
|
||||
switch(a)
|
||||
{
|
||||
default:
|
||||
case 0:
|
||||
vars[0] = 202;
|
||||
vars[1] = 1;
|
||||
break;
|
||||
case 1:
|
||||
if(sub_806912C())
|
||||
{
|
||||
vars[0] = 386;
|
||||
vars[1] = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
vars[0] = 202;
|
||||
vars[1] = a;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
switch(mode)
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
if(vars[1])
|
||||
{
|
||||
for(i = 0; i < vars[0]; i++)
|
||||
{
|
||||
vars[2] = HoennToNationalOrder(i + 1);
|
||||
gUnknown_0202FFB4->unk0[i].a = vars[2];
|
||||
gUnknown_0202FFB4->unk0[i].seen = sub_8090D90(vars[2], 0);
|
||||
gUnknown_0202FFB4->unk0[i].owned = sub_8090D90(vars[2], 1);
|
||||
if(gUnknown_0202FFB4->unk0[i].seen)
|
||||
gUnknown_0202FFB4->unk60C = i + 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
bool32 r10;
|
||||
s16 r5;
|
||||
|
||||
r10 = r5 = i = 0;
|
||||
for(i = 0; i < vars[0]; i++)
|
||||
{
|
||||
vars[2] = i + 1;
|
||||
if(sub_8090D90(vars[2], 0))
|
||||
r10 = 1;
|
||||
if(r10)
|
||||
{
|
||||
asm(""); //Needed to match for some reason
|
||||
gUnknown_0202FFB4->unk0[r5].a = vars[2];
|
||||
gUnknown_0202FFB4->unk0[r5].seen = sub_8090D90(vars[2], 0);
|
||||
gUnknown_0202FFB4->unk0[r5].owned = sub_8090D90(vars[2], 1);
|
||||
if(gUnknown_0202FFB4->unk0[r5].seen)
|
||||
gUnknown_0202FFB4->unk60C = r5 + 1;
|
||||
r5++;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
for(i = 0; i < 411; i++)
|
||||
{
|
||||
vars[2] = gPokedexOrder_Alphabetical[i];
|
||||
|
||||
if(NationalToHoennOrder(vars[2]) <= vars[0] && sub_8090D90(vars[2], 0))
|
||||
{
|
||||
gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60C].a = vars[2];
|
||||
gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60C].seen = 1;
|
||||
gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60C].owned = sub_8090D90(vars[2], 1);
|
||||
gUnknown_0202FFB4->unk60C++;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
for(i = 385; i >= 0; i--)
|
||||
{
|
||||
vars[2] = gPokedexOrder_Weight[i];
|
||||
|
||||
if(NationalToHoennOrder(vars[2]) <= vars[0] && sub_8090D90(vars[2], 1))
|
||||
{
|
||||
gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60C].a = vars[2];
|
||||
gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60C].seen = 1;
|
||||
gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60C].owned = 1;
|
||||
gUnknown_0202FFB4->unk60C++;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
for(i = 0; i < 386; i++)
|
||||
{
|
||||
vars[2] = gPokedexOrder_Weight[i];
|
||||
|
||||
if(NationalToHoennOrder(vars[2]) <= vars[0] && sub_8090D90(vars[2], 1))
|
||||
{
|
||||
gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60C].a = vars[2];
|
||||
gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60C].seen = 1;
|
||||
gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60C].owned = 1;
|
||||
gUnknown_0202FFB4->unk60C++;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
for(i = 385; i >=0; i--)
|
||||
{
|
||||
vars[2] = gPokedexOrder_Height[i];
|
||||
|
||||
if(NationalToHoennOrder(vars[2]) <= vars[0] && sub_8090D90(vars[2], 1))
|
||||
{
|
||||
gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60C].a = vars[2];
|
||||
gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60C].seen = 1;
|
||||
gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60C].owned = 1;
|
||||
gUnknown_0202FFB4->unk60C++;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
for(i = 0; i < 386; i++)
|
||||
{
|
||||
vars[2] = gPokedexOrder_Height[i];
|
||||
|
||||
if(NationalToHoennOrder(vars[2]) <= vars[0] && sub_8090D90(vars[2], 1))
|
||||
{
|
||||
gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60C].a = vars[2];
|
||||
gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60C].seen = 1;
|
||||
gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60C].owned = 1;
|
||||
gUnknown_0202FFB4->unk60C++;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
for(i = gUnknown_0202FFB4->unk60C; i < 386; i++)
|
||||
{
|
||||
gUnknown_0202FFB4->unk0[i].a |= 0xFFFF;
|
||||
gUnknown_0202FFB4->unk0[i].seen = 0;
|
||||
gUnknown_0202FFB4->unk0[i].owned = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_808DBE8(u8 a, u16 b, u16 c)
|
||||
{
|
||||
switch(a)
|
||||
{
|
||||
case 0:
|
||||
default:
|
||||
{
|
||||
u16 i;
|
||||
s16 _b = b - 5;
|
||||
|
||||
for(i = 0; i <= 10; i++)
|
||||
{
|
||||
if((u16)_b > 385 || gUnknown_0202FFB4->unk0[_b].a == 0xFFFF)
|
||||
sub_808E090(0x11, i * 2, c);
|
||||
else
|
||||
{
|
||||
sub_808E090(0x11, i * 2, c);
|
||||
if(gUnknown_0202FFB4->unk0[_b].seen)
|
||||
{
|
||||
sub_808DEB0(_b, 0x12, i * 2, c);
|
||||
sub_808DF88(gUnknown_0202FFB4->unk0[_b].owned, 0x11, i * 2, c);
|
||||
sub_808DFE4(gUnknown_0202FFB4->unk0[_b].a, 0x17, i * 2);
|
||||
}
|
||||
else
|
||||
{
|
||||
sub_808DEB0(_b, 0x12, i * 2, c);
|
||||
sub_808DF88(0, 0x11, i * 2, c);
|
||||
sub_808DFE4(0, 0x17, i * 2);
|
||||
}
|
||||
}
|
||||
_b++;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
s16 _b = b - 5;
|
||||
|
||||
if((u16)_b > 385 || gUnknown_0202FFB4->unk0[_b].a == 0xFFFF)
|
||||
sub_808E090(0x11, gUnknown_0202FFB4->unk630 * 2, c);
|
||||
else
|
||||
{
|
||||
sub_808E090(0x11, gUnknown_0202FFB4->unk630 * 2, c);
|
||||
if(gUnknown_0202FFB4->unk0[_b].seen)
|
||||
{
|
||||
sub_808DEB0(_b, 0x12, gUnknown_0202FFB4->unk630 * 2, c);
|
||||
sub_808DF88(gUnknown_0202FFB4->unk0[_b].owned, 0x11, gUnknown_0202FFB4->unk630 * 2, c);
|
||||
sub_808DFE4(gUnknown_0202FFB4->unk0[_b].a, 0x17, gUnknown_0202FFB4->unk630 * 2);
|
||||
}
|
||||
else
|
||||
{
|
||||
sub_808DEB0(_b, 0x12, gUnknown_0202FFB4->unk630 * 2, c);
|
||||
sub_808DF88(0, 0x11, gUnknown_0202FFB4->unk630 * 2, c);
|
||||
sub_808DFE4(0, 0x17, gUnknown_0202FFB4->unk630 * 2);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
s16 _b = b + 5;
|
||||
u16 r2 = gUnknown_0202FFB4->unk630 + 10;
|
||||
|
||||
if(r2 > 15)
|
||||
r2 -= 16;
|
||||
if((u16)_b > 385 || gUnknown_0202FFB4->unk0[_b].a == 0xFFFF)
|
||||
sub_808E090(0x11, r2 * 2, c);
|
||||
else
|
||||
{
|
||||
sub_808E090(0x11, r2 * 2, c);
|
||||
if(gUnknown_0202FFB4->unk0[_b].seen)
|
||||
{
|
||||
sub_808DEB0(_b, 0x12, r2 * 2, c);
|
||||
sub_808DF88(gUnknown_0202FFB4->unk0[_b].owned, 0x11, r2 * 2, c);
|
||||
sub_808DFE4(gUnknown_0202FFB4->unk0[_b].a, 0x17, r2 * 2);
|
||||
}
|
||||
else
|
||||
{
|
||||
sub_808DEB0(_b, 0x12, r2 * 2, c);
|
||||
sub_808DF88(0, 0x11, r2 * 2, c);
|
||||
sub_808DFE4(0, 0x17, r2 * 2);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_808DEB0(u16 a, u8 b, u8 c, u16 d)
|
||||
{
|
||||
u8 text[4];
|
||||
u16 unk[2];
|
||||
u16 r7 = gUnknown_0202FFB4->unk0[a].a;
|
||||
|
||||
if(gUnknown_0202FFB4->unk612 == 0)
|
||||
r7 = NationalToHoennOrder(r7);
|
||||
unk[0] = 0x3FC;
|
||||
unk[1] = 0x3FD;
|
||||
text[0] = r7 / 100 + 0xA1;
|
||||
text[1] = (r7 % 100) / 10 + 0xA1;
|
||||
text[2] = (r7 % 100) % 10 + 0xA1;
|
||||
text[3] = 0xFF;
|
||||
*(u16 *)(VRAM + d * 0x800 + c * 0x40 + b * 2) = unk[0];
|
||||
*(u16 *)(VRAM + 0x40 + d * 0x800 + c * 0x40 + b * 2) = unk[1];
|
||||
MenuPrint(text, b - 15, c);
|
||||
}
|
||||
|
||||
void sub_808DF88(u16 a, u8 b, u8 c, u16 d)
|
||||
{
|
||||
u16 unk[2];
|
||||
|
||||
if(a)
|
||||
{
|
||||
unk[0] = 0x3FE;
|
||||
unk[1] = 0x3FF;
|
||||
}
|
||||
else
|
||||
{
|
||||
unk[0] = 0;
|
||||
unk[1] = 0;
|
||||
}
|
||||
*(u16 *)(VRAM + d * 0x800 + c * 0x40 + b * 2) = unk[0];
|
||||
*(u16 *)(VRAM + 0x40 + d * 0x800 + c * 0x40 + b * 2) = unk[1];
|
||||
}
|
||||
|
||||
#ifdef NONMATCHING
|
||||
//FixMe
|
||||
u8 sub_808DFE4(u16 a, u8 b, u8 c)
|
||||
{
|
||||
u8 text[10];
|
||||
u8 i;
|
||||
u32 species;
|
||||
|
||||
for(i = 0; i < 10; i++)
|
||||
text[i] = 0;
|
||||
text[i] = EOS;
|
||||
species = NationalPokedexNumToSpecies(a);
|
||||
if(species)
|
||||
{
|
||||
for(i = 0; gSpeciesNames[species][i] != EOS && i < 10; i++)
|
||||
text[i] = gSpeciesNames[species][i];
|
||||
}
|
||||
else
|
||||
{
|
||||
for(i = 0; i < 10; i++)
|
||||
text[i] = 0xAE;
|
||||
}
|
||||
sub_80729D8(text, (b - 0x11) * 8 + 0xFC, c * 8, 0);
|
||||
}
|
||||
#else
|
||||
__attribute__((naked))
|
||||
u8 sub_808DFE4(u16 a, u8 b, u8 c)
|
||||
{
|
||||
asm(".syntax unified\n\
|
||||
push {r4-r6,lr}\n\
|
||||
sub sp, 0xC\n\
|
||||
lsls r0, 16\n\
|
||||
lsrs r3, r0, 16\n\
|
||||
lsls r1, 24\n\
|
||||
lsrs r5, r1, 24\n\
|
||||
lsls r2, 24\n\
|
||||
lsrs r6, r2, 24\n\
|
||||
movs r4, 0\n\
|
||||
movs r1, 0\n\
|
||||
_0808DFF8:\n\
|
||||
mov r2, sp\n\
|
||||
adds r0, r2, r4\n\
|
||||
strb r1, [r0]\n\
|
||||
adds r0, r4, 0x1\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r4, r0, 24\n\
|
||||
cmp r4, 0x9\n\
|
||||
bls _0808DFF8\n\
|
||||
adds r0, r2, r4\n\
|
||||
movs r1, 0xFF\n\
|
||||
strb r1, [r0]\n\
|
||||
adds r0, r3, 0\n\
|
||||
bl NationalPokedexNumToSpecies\n\
|
||||
adds r3, r0, 0\n\
|
||||
cmp r3, 0\n\
|
||||
beq _0808E058\n\
|
||||
movs r4, 0\n\
|
||||
ldr r2, _0808E054\n\
|
||||
movs r0, 0xB\n\
|
||||
adds r1, r3, 0\n\
|
||||
muls r1, r0\n\
|
||||
adds r0, r1, r2\n\
|
||||
ldrb r0, [r0]\n\
|
||||
subs r5, 0x11\n\
|
||||
lsls r6, 19\n\
|
||||
cmp r0, 0xFF\n\
|
||||
beq _0808E070\n\
|
||||
adds r3, r1, 0\n\
|
||||
_0808E032:\n\
|
||||
mov r0, sp\n\
|
||||
adds r1, r0, r4\n\
|
||||
adds r0, r4, r3\n\
|
||||
adds r0, r2\n\
|
||||
ldrb r0, [r0]\n\
|
||||
strb r0, [r1]\n\
|
||||
adds r0, r4, 0x1\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r4, r0, 24\n\
|
||||
adds r0, r4, r3\n\
|
||||
adds r0, r2\n\
|
||||
ldrb r0, [r0]\n\
|
||||
cmp r0, 0xFF\n\
|
||||
beq _0808E070\n\
|
||||
cmp r4, 0x9\n\
|
||||
bls _0808E032\n\
|
||||
b _0808E070\n\
|
||||
.align 2, 0\n\
|
||||
_0808E054: .4byte gSpeciesNames\n\
|
||||
_0808E058:\n\
|
||||
movs r4, 0\n\
|
||||
subs r5, 0x11\n\
|
||||
lsls r6, 19\n\
|
||||
movs r1, 0xAE\n\
|
||||
_0808E060:\n\
|
||||
mov r2, sp\n\
|
||||
adds r0, r2, r4\n\
|
||||
strb r1, [r0]\n\
|
||||
adds r0, r4, 0x1\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r4, r0, 24\n\
|
||||
cmp r4, 0x9\n\
|
||||
bls _0808E060\n\
|
||||
_0808E070:\n\
|
||||
lsls r1, r5, 27\n\
|
||||
movs r0, 0xFC\n\
|
||||
lsls r0, 24\n\
|
||||
adds r1, r0\n\
|
||||
lsrs r1, 24\n\
|
||||
lsrs r2, r6, 16\n\
|
||||
mov r0, sp\n\
|
||||
movs r3, 0\n\
|
||||
bl sub_80729D8\n\
|
||||
adds r0, r4, 0\n\
|
||||
add sp, 0xC\n\
|
||||
pop {r4-r6}\n\
|
||||
pop {r1}\n\
|
||||
bx r1\n\
|
||||
.syntax divided\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
void sub_808E090(u8 a, u8 b, u16 c)
|
||||
{
|
||||
u8 i;
|
||||
|
||||
for(i = 0; i < 12; i++)
|
||||
{
|
||||
*(u16 *)(VRAM + c * 0x800 + b * 64 + (a + i) * 2) = 0;
|
||||
*(u16 *)(VRAM + 0x40 + c * 0x800 + b * 64 + (a + i) * 2) = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_808E0CC(u16 a, u16 b)
|
||||
{
|
||||
u8 i;
|
||||
u16 unk;
|
||||
u8 spriteId;
|
||||
|
||||
for(i = 0; i < 4; i++)
|
||||
gUnknown_0202FFB4->unk61E[i] |= 0xFFFF;
|
||||
gUnknown_0202FFB4->unk626 = 0xFFFF;
|
||||
sub_808DBE8(0, a, b);
|
||||
REG_BG2VOFS = gUnknown_0202FFB4->unk62D;
|
||||
unk = sub_808E888(a - 1);
|
||||
if(unk != 0xFFFF)
|
||||
{
|
||||
spriteId = sub_808E8C8(unk, 0x60, 0x50);
|
||||
gSprites[spriteId].callback = sub_808EE28;
|
||||
gSprites[spriteId].data5 = -32;
|
||||
}
|
||||
unk = sub_808E888(a);
|
||||
if(unk != 0xFFFF)
|
||||
{
|
||||
spriteId = sub_808E8C8(unk, 0x60, 0x50);
|
||||
gSprites[spriteId].callback = sub_808EE28;
|
||||
gSprites[spriteId].data5 = 0;
|
||||
}
|
||||
unk = sub_808E888(a + 1);
|
||||
if(unk != 0xFFFF)
|
||||
{
|
||||
spriteId = sub_808E8C8(unk, 0x60, 0x50);
|
||||
gSprites[spriteId].callback = sub_808EE28;
|
||||
gSprites[spriteId].data5 = 32;
|
||||
}
|
||||
gUnknown_0202FFB4->unk630 = 0;
|
||||
gUnknown_0202FFB4->unk632 = 0;
|
||||
}
|
||||
|
||||
bool8 sub_808E208(u8 a, u8 b, u8 c)
|
||||
{
|
||||
u16 i;
|
||||
u8 foo;
|
||||
|
||||
if(gUnknown_0202FFB4->unk62E)
|
||||
{
|
||||
gUnknown_0202FFB4->unk62E--;
|
||||
switch(a)
|
||||
{
|
||||
case 1:
|
||||
for(i = 0; i < 4; i++)
|
||||
{
|
||||
if(gUnknown_0202FFB4->unk61E[i] != 0xFFFF)
|
||||
gSprites[gUnknown_0202FFB4->unk61E[i]].data5 += b;
|
||||
}
|
||||
foo = 16 * (c - gUnknown_0202FFB4->unk62E) / c;
|
||||
REG_BG2VOFS = gUnknown_0202FFB4->unk62D + gUnknown_0202FFB4->unk632 * 16 - foo;
|
||||
gUnknown_0202FFB4->unk62C -= gUnknown_0202FFB4->unk628;
|
||||
break;
|
||||
case 2:
|
||||
for(i = 0; i < 4; i++)
|
||||
{
|
||||
if(gUnknown_0202FFB4->unk61E[i] != 0xFFFF)
|
||||
gSprites[gUnknown_0202FFB4->unk61E[i]].data5 -= b;
|
||||
}
|
||||
foo = 16 * (c - gUnknown_0202FFB4->unk62E) / c;
|
||||
REG_BG2VOFS = gUnknown_0202FFB4->unk62D + gUnknown_0202FFB4->unk632 * 16 + foo;
|
||||
gUnknown_0202FFB4->unk62C += gUnknown_0202FFB4->unk628;
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
//_0808E36C
|
||||
else
|
||||
{
|
||||
REG_BG2VOFS = gUnknown_0202FFB4->unk62D + gUnknown_0202FFB4->unk630 * 16;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_808E398(u8 a, u16 b)
|
||||
{
|
||||
u16 unk;
|
||||
u8 spriteId;
|
||||
|
||||
gUnknown_0202FFB4->unk632 = gUnknown_0202FFB4->unk630;
|
||||
switch(a)
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
unk = sub_808E888(b - 1);
|
||||
if(unk != 0xFFFF)
|
||||
{
|
||||
spriteId = sub_808E8C8(unk, 0x60, 0x50);
|
||||
gSprites[spriteId].callback = sub_808EE28;
|
||||
gSprites[spriteId].data5 = 0xFFC0;
|
||||
}
|
||||
if(gUnknown_0202FFB4->unk630 > 0)
|
||||
gUnknown_0202FFB4->unk630--;
|
||||
else
|
||||
gUnknown_0202FFB4->unk630 = 0xF;
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
unk = sub_808E888(b + 1);
|
||||
if(unk != 0xFFFF)
|
||||
{
|
||||
spriteId = sub_808E8C8(unk, 0x60, 0x50);
|
||||
gSprites[spriteId].callback = sub_808EE28;
|
||||
gSprites[spriteId].data5 = 0x40;
|
||||
}
|
||||
if(gUnknown_0202FFB4->unk630 <= 0xE)
|
||||
gUnknown_0202FFB4->unk630++;
|
||||
else
|
||||
gUnknown_0202FFB4->unk630 = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
u16 sub_808E48C(u16 a, u16 b)
|
||||
{
|
||||
if((gMain.heldKeys & 0x40) || a == 0)
|
||||
{
|
||||
//_0808E4B6
|
||||
if(gMain.heldKeys & 0x80)
|
||||
{
|
||||
|
||||
}
|
||||
//_0808E4CE
|
||||
}
|
||||
//_0808E5E4
|
||||
else
|
||||
{
|
||||
sub_8091818(1, a, 0, gUnknown_0202FFB4->unk60C - 1);
|
||||
sub_808E398(1, a);
|
||||
sub_808DBE8(1, a, b);
|
||||
PlaySE(0x6C);
|
||||
}
|
||||
|
||||
}
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user