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:
Cameron Hall 2016-10-21 01:37:26 -05:00 committed by YamaArashi
parent 502f8d10f1
commit e30665cc2f
2 changed files with 681 additions and 2146 deletions

File diff suppressed because it is too large Load Diff

View File

@ -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);
}
}
*/