diff options
author | Rémi Calixte <remicalixte.rmc@gmail.com> | 2021-08-28 22:56:17 +0200 |
---|---|---|
committer | Rémi Calixte <remicalixte.rmc@gmail.com> | 2021-08-28 22:56:17 +0200 |
commit | 6fca01e85cbd692fe3697cbce9ca2457f1fae82b (patch) | |
tree | c34db2388262eebf9df27b51f5b926f030acf581 /arm9/src | |
parent | 0f1bec8dff2722dac9882facb27b909f08b9dd68 (diff) |
remaining functions
Diffstat (limited to 'arm9/src')
-rw-r--r-- | arm9/src/unk_02006D98.c (renamed from arm9/src/unk_02006D98_c.c) | 896 |
1 files changed, 798 insertions, 98 deletions
diff --git a/arm9/src/unk_02006D98_c.c b/arm9/src/unk_02006D98.c index 1ae1fa6e..154e3284 100644 --- a/arm9/src/unk_02006D98_c.c +++ b/arm9/src/unk_02006D98.c @@ -6,10 +6,7 @@ #include "poketool/pokegra/otherpoke.naix" #include "registers.h" #include "mod63_021DB450.h" - -struct UnkStruct3 { - u32 unk00[8]; -}; +#include "palette.h" struct UnkStruct4{ u8 unk0; @@ -18,7 +15,7 @@ struct UnkStruct4{ -static const u8 UNK_020ECCE0[] = { +const u8 UNK_020ECCE0[] = { 0xFF, 0xFF, 0x1B, 0x0F, 0x1C, 0x0F, 0x1D, 0x0F, 0x1E, 0x0F, 0x1A, 0x10, 0x1B, 0x10, 0x1C, 0x10, 0x1D, 0x10, 0x1E, 0x10, 0x1F, 0x10, 0x19, 0x11, 0x1A, 0x11, 0x1B, 0x11, 0x1C, 0x11, 0x1D, 0x11, 0x1E, 0x11, 0x1F, 0x11, 0x20, 0x11, 0x19, 0x12, 0x1A, 0x12, 0x1B, 0x12, 0x1C, 0x12, 0x1D, 0x12, 0x1E, 0x12, @@ -31,7 +28,7 @@ static const u8 UNK_020ECCE0[] = { -static const u8 UNK_020ECC10[] = { +const u8 UNK_020ECC10[] = { 0x1E, 0x21, 0x1F, 0x21, 0x20, 0x21, 0x1D, 0x22, 0x1E, 0x22, 0x1F, 0x22, 0x20, 0x22, 0x21, 0x22, 0x1C, 0x23, 0x1D, 0x23, 0x1E, 0x23, 0x1F, 0x23, 0x20, 0x23, 0x21, 0x23, 0x22, 0x23, 0x1C, 0x24, 0x1D, 0x24, 0x1E, 0x24, 0x1F, 0x24, 0x20, 0x24, 0x21, 0x24, 0x22, 0x24, 0x1C, 0x25, 0x1D, 0x25, @@ -42,7 +39,7 @@ static const u8 UNK_020ECC10[] = { }; -static const u8 UNK_020ECC78[] = { +const u8 UNK_020ECC78[] = { 0x33, 0x11, 0x34, 0x11, 0x35, 0x11, 0x36, 0x11, 0x32, 0x12, 0x33, 0x12, 0x34, 0x12, 0x35, 0x12, 0x36, 0x12, 0x37, 0x12, 0x31, 0x13, 0x32, 0x13, 0x33, 0x13, 0x34, 0x13, 0x35, 0x13, 0x36, 0x13, 0x37, 0x13, 0x38, 0x13, 0x31, 0x14, 0x32, 0x14, 0x33, 0x14, 0x34, 0x14, 0x35, 0x14, 0x36, 0x14, @@ -52,7 +49,7 @@ static const u8 UNK_020ECC78[] = { 0x33, 0x18, 0x34, 0x18, 0x35, 0x18, 0x36, 0x18, }; -static const u8 UNK_020ECDCC[] = { +const u8 UNK_020ECDCC[] = { 0x2B, 0x21, 0x2C, 0x21, 0x2D, 0x21, 0x29, 0x22, 0x2A, 0x22, 0x2B, 0x22, 0x2C, 0x22, 0x2D, 0x22, 0x2E, 0x22, 0x2F, 0x22, 0x28, 0x23, 0x29, 0x23, 0x2A, 0x23, 0x2B, 0x23, 0x2C, 0x23, 0x2D, 0x23, 0x2E, 0x23, 0x2F, 0x23, 0x30, 0x23, 0x28, 0x24, 0x29, 0x24, 0x2A, 0x24, 0x2B, 0x24, 0x2C, 0x24, @@ -68,7 +65,7 @@ static const u8 UNK_020ECDCC[] = { -static const int UNK_020ECBD0[4][4] = { +const int UNK_020ECBD0[4][4] = { {160, 160, 224, 176}, {160, 160, 224, 176}, {160, 176, 224, 192}, {160, 192, 224, 208} }; @@ -107,13 +104,33 @@ const u8 UNK_020ECD4C[] = { -const struct UnkStruct4 *UNK_02105AE8[] = { +struct UnkStruct4 *UNK_02105AE8[] = { + // ugly hack to fix extra padding added by the compiler (struct UnkStruct4 *)(UNK_020ECCE0+2), (struct UnkStruct4 *)UNK_020ECC78, (struct UnkStruct4 *)UNK_020ECC10, (struct UnkStruct4 *)UNK_020ECDCC, }; + +struct UnkStruct2_sub { + s8 unk0; + u8 unk1; +}; +struct UnkStruct2_sub2 { + u16 unk0_0:2; + u16 unk0_2:1; + u16 unk0_3:1; + u16 unk0_4:1; + u16 unk0_5:2; + s8 unk2; + u8 unk3; + s16 unk4; + s16 unk6; + s16 unk8; + s16 unka; +}; + struct UnkStruct2 { u32 unk00_0:1; u32 unk00_1:6; @@ -166,48 +183,27 @@ struct UnkStruct2 { u8 unk5B; u8 unk5C[10]; void (*unk68)(struct UnkStruct2 *, void *); - u16 unk6C_0:2; - u16 unk6C_2:1; - u16 unk6C_3:1; - u16 unk6C_4:1; - u16 unk6C_5:2; - s8 unk6E; - u8 unk6F; - s16 unk70; - s16 unk72; - s16 unk74; - s16 unk76; - u8 unk78[0xc]; - struct UnkStruct2_sub { - s8 unk0; - u8 unk1; - } unk84[10]; + struct UnkStruct2_sub2 unk6C; + struct UnkStruct2_sub2 unk78; + struct UnkStruct2_sub unk84[10]; }; struct UnkStruct1 { struct UnkStruct2 unk000[4]; - u8 unk260[0xc]; - u32 unk26C; - u32 unk270; - u32 unk274; - u32 unk278; - u32 unk27C; - u8 unk280[0x18]; + NNSG2dImageProxy unk260; + NNSG2dImagePaletteProxy unk284; u32 unk298; u32 unk29C; u32 unk2A0; u32 unk2A4; u32 unk2A8; - void *unk2AC; - void *unk2B0; - void *unk2B4; - u32 unk2B8; - u32 unk2BC; - u32 unk2C0; - u32 unk2C4; - u8 unk2C8[0x18]; + u8 *unk2AC; + u16 *unk2B0; + u16 *unk2B4; + NNSG2dCharacterData unk2B8; + NNSG2dPaletteData unk2D0; u8 unk2E0; u8 unk2E1; u8 unk2E2; @@ -216,7 +212,7 @@ struct UnkStruct1 }; extern void NNS_G2dSetupSoftwareSpriteCamera(void); -extern void FUN_02008A74(void *); +extern void FUN_02008A74(u8 *); THUMB_FUNC struct UnkStruct1 *FUN_02006D98(u32 heap_id) { @@ -250,9 +246,9 @@ THUMB_FUNC struct UnkStruct1 *FUN_02006D98(u32 heap_id) NNSG2dCharacterData *stc; NNS_G2dGetUnpackedCharacterData(st4, &stc); - ptr->unk2BC = stc->pixelFmt; - ptr->unk2C0 = stc->mapingType; - ptr->unk2C4 = stc->characterFmt; + ptr->unk2B8.pixelFmt = stc->pixelFmt; + ptr->unk2B8.mapingType = stc->mapingType; + ptr->unk2B8.characterFmt = stc->characterFmt; st8 = stc->pRawData; FUN_02008A74(st8); @@ -298,7 +294,7 @@ THUMB_FUNC void FUN_02006ED4(struct UnkStruct1 *param0) { reg_G3_MTX_PUSH = 0; // this is all shuffled however I try - reg_G3_TEXIMAGE_PARAM = (param0->unk29C >> 3) | (param0->unk274 << 26) | (1 << 30) | (param0->unk26C << 20) | (param0->unk270 << 23) | (param0->unk27C << 29); + reg_G3_TEXIMAGE_PARAM = (param0->unk29C >> 3) | (param0->unk260.attr.fmt << 26) | (1 << 30) | (param0->unk260.attr.sizeS << 20) | (param0->unk260.attr.sizeT << 23) | (param0->unk260.attr.plttUse << 29); for (int st18 = 0; st18 < 4; st18++) { if (param0->unk000[st18].unk00_0 == 0 || param0->unk000[st18].unk54_0 != 0 || param0->unk000[st18].unk54_B != 0) { @@ -318,7 +314,7 @@ THUMB_FUNC void FUN_02006ED4(struct UnkStruct1 *param0) { FUN_02007F48(¶m0->unk000[st18]); u32 shift; - if (param0->unk274 == 2) { + if (param0->unk260.attr.fmt == 2) { shift = 1; } else { shift = 0; @@ -379,7 +375,7 @@ THUMB_FUNC void FUN_02006ED4(struct UnkStruct1 *param0) { NNS_G2dDrawSpriteFast( param0->unk000[st18].unk24-40 + param0->unk000[st18].unk44 + param0->unk000[st18].unk2C, - param0->unk000[st18].unk26-40 + param0->unk000[st18].unk45 + param0->unk000[st18].unk2E - param0->unk000[st18].unk6E, + param0->unk000[st18].unk26-40 + param0->unk000[st18].unk45 + param0->unk000[st18].unk2E - param0->unk000[st18].unk6C.unk2, param0->unk000[st18].unk28 + param0->unk000[st18].unk30, r12, r7, @@ -395,7 +391,7 @@ THUMB_FUNC void FUN_02006ED4(struct UnkStruct1 *param0) { NNS_G2dDrawSpriteFast( param0->unk000[st18].unk24-(arg3/2)+param0->unk000[st18].unk2C, - param0->unk000[st18].unk26-(arg4/2)+ param0->unk000[st18].unk2E - param0->unk000[st18].unk6E, + param0->unk000[st18].unk26-(arg4/2)+ param0->unk000[st18].unk2E - param0->unk000[st18].unk6C.unk2, param0->unk000[st18].unk28 + param0->unk000[st18].unk30, arg3, arg4, @@ -407,7 +403,7 @@ THUMB_FUNC void FUN_02006ED4(struct UnkStruct1 *param0) { } - if (param0->unk000[st18].unk6C_0 == 0 || param0->unk000[st18].unk6C_5 == 0 || param0->unk000[st18].unk54_1 != 0 || (param0->unk2E4 & 1) != 0) { + if (param0->unk000[st18].unk6C.unk0_0 == 0 || param0->unk000[st18].unk6C.unk0_5 == 0 || param0->unk000[st18].unk54_1 != 0 || (param0->unk2E4 & 1) != 0) { continue; } @@ -416,16 +412,16 @@ THUMB_FUNC void FUN_02006ED4(struct UnkStruct1 *param0) { } u32 shift2; - if (param0->unk274 == 2) { + if (param0->unk260.attr.fmt == 2) { shift2 = 1; } else { shift2 = 0; } - reg_G3_TEXPLTT_BASE = (param0->unk2A4 + ((param0->unk000[st18].unk6C_0+3)<<5))>>(4-shift2); + reg_G3_TEXPLTT_BASE = (param0->unk2A4 + ((param0->unk000[st18].unk6C.unk0_0+3)<<5))>>(4-shift2); - if (param0->unk000[st18].unk6C_4 != 0) { + if (param0->unk000[st18].unk6C.unk0_4 != 0) { arg3 = (param0->unk000[st18].unk34*64)>>8; arg4 = (param0->unk000[st18].unk36*16)>>8; } else { @@ -433,25 +429,25 @@ THUMB_FUNC void FUN_02006ED4(struct UnkStruct1 *param0) { arg4 = 16; } - if (param0->unk000[st18].unk6C_2 != 0) { - param0->unk000[st18].unk70 = param0->unk000[st18].unk24+ param0->unk000[st18].unk2C + param0->unk000[st18].unk74; + if (param0->unk000[st18].unk6C.unk0_2 != 0) { + param0->unk000[st18].unk6C.unk4 = param0->unk000[st18].unk24+ param0->unk000[st18].unk2C + param0->unk000[st18].unk6C.unk8; } - if (param0->unk000[st18].unk6C_3 != 0) { - param0->unk000[st18].unk72 = param0->unk000[st18].unk26 + param0->unk000[st18].unk2E + param0->unk000[st18].unk76; + if (param0->unk000[st18].unk6C.unk0_3 != 0) { + param0->unk000[st18].unk6C.unk6 = param0->unk000[st18].unk26 + param0->unk000[st18].unk2E + param0->unk000[st18].unk6C.unka; } NNS_G2dDrawSpriteFast( - param0->unk000[st18].unk70 - (arg3/2), - param0->unk000[st18].unk72 - (arg4/2), + param0->unk000[st18].unk6C.unk4 - (arg3/2), + param0->unk000[st18].unk6C.unk4 - (arg4/2), 0xFFFFFC18, arg3, arg4, - UNK_020ECBD0[param0->unk000[st18].unk6C_5][0], - UNK_020ECBD0[param0->unk000[st18].unk6C_5][1], - UNK_020ECBD0[param0->unk000[st18].unk6C_5][2], - UNK_020ECBD0[param0->unk000[st18].unk6C_5][3] + UNK_020ECBD0[param0->unk000[st18].unk6C.unk0_5][0], + UNK_020ECBD0[param0->unk000[st18].unk6C.unk0_5][1], + UNK_020ECBD0[param0->unk000[st18].unk6C.unk0_5][2], + UNK_020ECBD0[param0->unk000[st18].unk6C.unk0_5][3] ); } @@ -1046,11 +1042,11 @@ THUMB_FUNC u32 FUN_020073E8(struct UnkStruct1 *param0, struct UnkStruct63_021DB param0->unk000[param6].unk50_14 = 0x10; param0->unk000[param6].unk50_19 = 0x10; param0->unk000[param6].unk68 = param8; - param0->unk000[param6].unk70 = (s16)param2; - param0->unk000[param6].unk72 = (s16)param3; - param0->unk000[param6].unk6C_2 = 1; - param0->unk000[param6].unk6C_3 = 1; - param0->unk000[param6].unk6C_4 = 1; + param0->unk000[param6].unk6C.unk4 = (s16)param2; + param0->unk000[param6].unk6C.unk6 = (s16)param3; + param0->unk000[param6].unk6C.unk0_2 = 1; + param0->unk000[param6].unk6C.unk0_3 = 1; + param0->unk000[param6].unk6C.unk0_4 = 1; if (param7 != 0) { MI_CpuCopy8(param7, param0->unk000[param6].unk84, 0x14); @@ -1132,16 +1128,16 @@ THUMB_FUNC void FUN_02007558(struct UnkStruct2 *param0, u32 param1, u32 param2) param0->unk47 = param2; break; case 19: - param0->unk70 = param2; + param0->unk6C.unk4 = param2; break; case 20: - param0->unk72 = param2; + param0->unk6C.unk6 = param2; break; case 21: - param0->unk74 = param2; + param0->unk6C.unk8 = param2; break; case 22: - param0->unk76 = param2; + param0->unk6C.unka = param2; break; case 23: param0->unk54_2 = param2; @@ -1202,23 +1198,23 @@ THUMB_FUNC void FUN_02007558(struct UnkStruct2 *param0, u32 param1, u32 param2) param0->unk00_7 = 1; break; case 41: - param0->unk6E = param2; + param0->unk6C.unk2 = param2; break; case 42: - param0->unk6C_0 = param2; + param0->unk6C.unk0_0 = param2; param0->unk00_8 = 1; break; case 43: - param0->unk6C_2 = param2; + param0->unk6C.unk0_2 = param2; break; case 44: - param0->unk6C_3 = param2; + param0->unk6C.unk0_3 = param2; break; case 45: - param0->unk6C_4 = param2; + param0->unk6C.unk0_4 = param2; break; case 46: - param0->unk6C_5 = param2; + param0->unk6C.unk0_5 = param2; break; } } @@ -1284,16 +1280,16 @@ THUMB_FUNC u32 FUN_0200782C(struct UnkStruct2 *param0, u32 param1) { return param0->unk47; case 19: - return param0->unk70; + return param0->unk6C.unk4; case 20: - return param0->unk72; + return param0->unk6C.unk6; case 21: - return param0->unk74; + return param0->unk6C.unk8; case 22: - return param0->unk76; + return param0->unk6C.unka; case 23: return param0->unk54_2; @@ -1347,22 +1343,22 @@ THUMB_FUNC u32 FUN_0200782C(struct UnkStruct2 *param0, u32 param1) { return param0->unk54_D; case 41: - return param0->unk6E; + return param0->unk6C.unk2; case 42: - return param0->unk6C_0; + return param0->unk6C.unk0_0; case 43: - return param0->unk6C_2; + return param0->unk6C.unk0_2; case 44: - return param0->unk6C_3; + return param0->unk6C.unk0_3; case 45: - return param0->unk6C_4; + return param0->unk6C.unk0_4; case 46: - return param0->unk6C_5; + return param0->unk6C.unk0_5; } @@ -1432,16 +1428,16 @@ THUMB_FUNC void FUN_020079E0(struct UnkStruct2 *param0, u32 param1, u32 param2) param0->unk47 += param2; break; case 19: - param0->unk70 += param2; + param0->unk6C.unk4 += param2; break; case 20: - param0->unk72 += param2; + param0->unk6C.unk6 += param2; break; case 21: - param0->unk74 += param2; + param0->unk6C.unk8 += param2; break; case 22: - param0->unk76 += param2; + param0->unk6C.unka += param2; break; case 23: param0->unk54_2 += param2; @@ -1502,23 +1498,727 @@ THUMB_FUNC void FUN_020079E0(struct UnkStruct2 *param0, u32 param1, u32 param2) param0->unk00_7 = 1; break; case 41: - param0->unk6E += param2; + param0->unk6C.unk2 += param2; break; case 42: - param0->unk6C_0 += param2; + param0->unk6C.unk0_0 += param2; param0->unk00_8 = 1; break; case 43: - param0->unk6C_2 += param2; + param0->unk6C.unk0_2 += param2; break; case 44: - param0->unk6C_3 += param2; + param0->unk6C.unk0_3 += param2; break; case 45: - param0->unk6C_4 += param2; + param0->unk6C.unk0_4 += param2; break; case 46: - param0->unk6C_5 += param2; + param0->unk6C.unk0_5 += param2; break; } } + + +THUMB_FUNC void FUN_02007E40(struct UnkStruct2 *param0, u32 param1, u32 param2, u32 param3, u32 param4) { + param0->unk54_1 = 1; + param0->unk44 = param1; + param0->unk45 = param2; + param0->unk46 = param3; + param0->unk47 = param4; +} + + +THUMB_FUNC void FUN_02007E68(struct UnkStruct2 *param0, u32 param1, u32 param2, u32 param3, u32 param4) { + param0->unk54_C = 1; + param0->unk48 = param1; + param0->unk49 = param2; + param0->unk4A = 0; + param0->unk4B = param3; + param0->unk4C = param4; +} + + +THUMB_FUNC void FUN_02007E98(struct UnkStruct1 *param0, u32 param1, u32 param2, u32 param3, u32 param4) { + for (s32 i = 0; i < 4; i++) { + if (param0->unk000[i].unk00_0 == 0) { + continue; + } + + param0->unk000[i].unk54_C = 1; + param0->unk000[i].unk48 = (u8)param1; + param0->unk000[i].unk49 = (u8)param2; + param0->unk000[i].unk4A = 0; + param0->unk000[i].unk4B = (u8)param3; + param0->unk000[i].unk4C = param4; + } +} + + +THUMB_FUNC void FUN_02007EEC(struct UnkStruct2 *param0) { + param0->unk54_C = 0; + param0->unk48 = 0; + param0->unk49 = 0; + param0->unk4A = 0; + param0->unk4B = 0; + param0->unk4C = 0; + param0->unk00_8 = 1; +} + + + +THUMB_FUNC BOOL FUN_02007F20(struct UnkStruct2 *param0) { + return param0->unk54_C == 1; +} + + +THUMB_FUNC void FUN_02007F34(struct UnkStruct2 *param0, s32 param1) { + param0->unk2E = (40-param1) - (((40-param1)*param0->unk36)>>8); +} + + +#ifdef NONMATCHING +THUMB_FUNC void FUN_02007F48(struct UnkStruct2 *param0) { + u8 *r6 = ¶m0->unk59; + if (param0->unk58 == 0) { + return; + } + + if (param0->unk5A == 0) { + (*r6)++; + + while (param0->unk84[*r6].unk0 < -1) { + param0->unk5C[*r6]++; + + if (param0->unk84[*r6].unk1 == param0->unk5C[*r6] || param0->unk84[*r6].unk1 == 0) { + param0->unk5C[*r6] = 0; + r6++; + } else { + *r6 = -2-param0->unk84[*r6].unk0; + } + } + + if (param0->unk84[*r6].unk0 == -1 || *r6 >= 10) { + param0->unk5B = 0; + param0->unk58 = 0; + + return; + } + + param0->unk5B = param0->unk84[*r6].unk0; + param0->unk5A = param0->unk84[*r6].unk1; + + } else { + param0->unk5A--; + } +} +#else +asm void FUN_02007F48(struct UnkStruct2 *param0) { + // clang-format off + push {r4-r7} + add r1, r0, #0x0 + add r1, #0x58 + ldrb r1, [r1, #0x0] + add r6, r0, #0x0 + add r6, #0x59 + cmp r1, #0x0 + beq _0200800A + add r1, r0, #0x0 + add r1, #0x5a + ldrb r1, [r1, #0x0] + cmp r1, #0x0 + bne _02007FFE + ldrb r1, [r6, #0x0] + add r1, r1, #0x1 + strb r1, [r6, #0x0] + ldrb r3, [r6, #0x0] + mov r1, #0x84 + lsl r4, r3, #0x1 + add r2, r0, r4 + ldrsb r2, [r2, r1] + sub r1, #0x85 + cmp r2, r1 + bge _02007FC6 + mov r2, #0x0 + sub r1, r2, #0x2 +_02007F7C: + add r4, r0, r3 + add r4, #0x5c + ldrb r4, [r4, #0x0] + add r3, r0, r3 + add r3, #0x5c + add r4, r4, #0x1 + strb r4, [r3, #0x0] + ldrb r5, [r6, #0x0] + lsl r3, r5, #0x1 + add r4, r0, r3 + add r3, r4, #0x0 + add r7, r0, r5 + add r3, #0x85 + add r7, #0x5c + ldrb r3, [r3, #0x0] + ldrb r7, [r7, #0x0] + cmp r3, r7 + beq _02007FA4 + cmp r3, #0x0 + bne _02007FAE +_02007FA4: + add r3, r0, r5 + add r3, #0x5c + strb r2, [r3, #0x0] + add r6, r6, #0x1 + b _02007FB6 +_02007FAE: + mov r3, #0x84 + ldrsb r3, [r4, r3] + sub r3, r1, r3 + strb r3, [r6, #0x0] +_02007FB6: + ldrb r3, [r6, #0x0] + mov r5, #0x84 + lsl r4, r3, #0x1 + add r7, r0, r4 + ldrsb r7, [r7, r5] + sub r5, #0x85 + cmp r7, r5 + blt _02007F7C +_02007FC6: + add r2, r0, r4 + mov r1, #0x84 + ldrsb r2, [r2, r1] + sub r1, #0x85 + cmp r2, r1 + beq _02007FD6 + cmp r3, #0xa + blo _02007FE6 +_02007FD6: + add r1, r0, #0x0 + mov r2, #0x0 + add r1, #0x5b + strb r2, [r1, #0x0] + add r0, #0x58 + strb r2, [r0, #0x0] + pop {r4-r7} + bx lr +_02007FE6: + add r1, r0, #0x0 + add r1, #0x5b + strb r2, [r1, #0x0] + ldrb r1, [r6, #0x0] + lsl r1, r1, #0x1 + add r1, r0, r1 + add r1, #0x85 + ldrb r1, [r1, #0x0] + add r0, #0x5a + strb r1, [r0, #0x0] + pop {r4-r7} + bx lr +_02007FFE: + add r1, r0, #0x0 + add r1, #0x5a + ldrb r1, [r1, #0x0] + add r0, #0x5a + sub r1, r1, #0x1 + strb r1, [r0, #0x0] +_0200800A: + pop {r4-r7} + bx lr + // clang-format on +} +#endif + + +THUMB_FUNC void FUN_02008010(u8 *param0, struct UnkStruct2_sub *param1) { + param0[0] = 1; + param0[2] = 0; + param0[1] = param1->unk0; + param0[3] = param1->unk1; + ((u32 *)param0)[4] = param1; + + for (s32 i= 0; i<10;i++) { + param0[i+4]=0; + } +} + +#ifdef NONMATCHING +THUMB_FUNC s32 FUN_02008030(u8 *param0) { + if (*param0 != 0) { + u8 *r3 = param0+2; + struct UnkStruct2_sub *r4 = ((struct UnkStruct2_sub **)param0)[4]; + if (*param0 != 0) { + if (param0[3] == 0) { + (*r3)++; + + while (r4[*r3].unk0 < -1) { + param0[*r3+4]++; + if (r4[*r3].unk1 == param0[*r3+4] || r4[*r3].unk1 == 0) { + param0[*r3+4] = 0; + r3++; + } else { + *r3 = -2 - r4[*r3].unk0; + } + } + + if (r4[*r3].unk0 == -1 || *r3 >= 10) { + param0[0] = 0; + param0[1] = 0; + } else { + param0[1] = r4[*r3].unk0; + param0[3] = r4[*r3].unk1; + } + } else { + param0[3]--; + } + } + + return param0[1]; + + } + + return -1; +} +#else +asm s32 FUN_02008030(u8 *param0) { + // clang-format off + push {r4-r7} + ldrb r1, [r0, #0x0] + cmp r1, #0x0 + beq _020080C6 + add r3, r0, #0x2 + ldr r4, [r0, #0x10] + cmp r1, #0x0 + beq _020080C0 + ldrb r1, [r0, #0x3] + cmp r1, #0x0 + bne _020080BC + ldrb r1, [r3, #0x0] + add r1, r1, #0x1 + strb r1, [r3, #0x0] + ldrb r2, [r3, #0x0] + mov r1, #0x0 + mvn r1, r1 + lsl r5, r2, #0x1 + ldrsb r6, [r4, r5] + cmp r6, r1 + bge _02008098 + mov r1, #0x0 +_0200805C: + add r5, r0, r2 + ldrb r2, [r5, #0x4] + add r2, r2, #0x1 + strb r2, [r5, #0x4] + ldrb r2, [r3, #0x0] + add r5, r0, r2 + lsl r2, r2, #0x1 + add r2, r4, r2 + ldrb r7, [r2, #0x1] + ldrb r6, [r5, #0x4] + cmp r7, r6 + beq _02008078 + cmp r7, #0x0 + bne _0200807E +_02008078: + strb r1, [r5, #0x4] + add r3, r3, #0x1 + b _0200808A +_0200807E: + mov r5, #0x0 + ldrsb r5, [r2, r5] + mov r2, #0x1 + mvn r2, r2 + sub r2, r2, r5 + strb r2, [r3, #0x0] +_0200808A: + ldrb r2, [r3, #0x0] + mov r6, #0x0 + mvn r6, r6 + lsl r5, r2, #0x1 + ldrsb r7, [r4, r5] + cmp r7, r6 + blt _0200805C +_02008098: + ldrsb r5, [r4, r5] + mov r1, #0x0 + mvn r1, r1 + cmp r5, r1 + beq _020080A6 + cmp r2, #0xa + blo _020080AE +_020080A6: + mov r1, #0x0 + strb r1, [r0, #0x1] + strb r1, [r0, #0x0] + b _020080C0 +_020080AE: + strb r5, [r0, #0x1] + ldrb r1, [r3, #0x0] + lsl r1, r1, #0x1 + add r1, r4, r1 + ldrb r1, [r1, #0x1] + strb r1, [r0, #0x3] + b _020080C0 +_020080BC: + sub r1, r1, #0x1 + strb r1, [r0, #0x3] +_020080C0: + ldrb r0, [r0, #0x1] + pop {r4-r7} + bx lr +_020080C6: + mov r0, #0x0 + mvn r0, r0 + pop {r4-r7} + bx lr + // clang-format on +} +#endif + + +THUMB_FUNC void FUN_020080D0(struct UnkStruct2 *param0) { + param0->unk00_7 = 1; + param0->unk00_8 = 1; +} + + +THUMB_FUNC void FUN_020080E0(struct UnkStruct2 *param0) { + param0->unk14 = param0->unk04; + param0->unk78 = param0->unk6C; +} + + +THUMB_FUNC void FUN_0200813C(struct UnkStruct2 *param0) { + param0->unk04 = param0->unk14; + param0->unk6C = param0->unk78; + param0->unk00_7 = 1; + param0->unk00_8 = 1; +} + + +THUMB_FUNC void FUN_020081A8(struct UnkStruct1 *param0, u32 param1, u32 param2) { + param0->unk29C = param1; + param0->unk2A0 = param2; +} + + +THUMB_FUNC void FUN_020081B4(struct UnkStruct1 *param0, u32 param1, u32 param2) { + param0->unk2A4 = param1; + param0->unk2A8 = param2; +} + + +THUMB_FUNC u32 FUN_020081C0(u32 param0) { + return param0+4; +} + +THUMB_FUNC void FUN_020081C4(struct UnkStruct1 *param0) { + if (param0->unk2E1 != 0) { + param0->unk2E1 = 0; + NNS_G2dInitImageProxy(¶m0->unk260); + + param0->unk2B8.H = 0x20; + param0->unk2B8.W = 0x20; + param0->unk2B8.szByte = param0->unk2A0; + param0->unk2B8.pRawData = param0->unk2AC; + + NNS_G2dLoadImage2DMapping(¶m0->unk2B8, param0->unk29C, 0, ¶m0->unk260); + + } + + if (param0->unk2E2 != 0) { + param0->unk2E2 = 0; + NNS_G2dInitImagePaletteProxy(¶m0->unk284); + + param0->unk2D0.szByte = param0->unk2A8; + param0->unk2D0.pRawData = param0->unk2B0; + + NNS_G2dLoadPalette(¶m0->unk2D0, param0->unk2A4, 0, ¶m0->unk284); + + } +} + + +THUMB_FUNC void FUN_0200825C(struct UnkStruct1 *param0, u8 param1) { + param0->unk2E3 = param1; +} + + +THUMB_FUNC BOOL FUN_02008268(struct UnkStruct2 *param0) { + GF_ASSERT(param0); + return param0->unk00_0 != 0; +} + + +THUMB_FUNC void FUN_02008284(struct UnkStruct1 *param0, u32 param1) { + param0->unk2E4 |= param1; +} + + +THUMB_FUNC void FUN_02008290(struct UnkStruct1 *param0, u32 param1) { + param0->unk2E4 &= (param1^~0); +} + + +extern void FUN_020088EC(struct UnkStruct2 *, u8 *); +extern u8 FUN_020088D8(u8); + +THUMB_FUNC void FUN_020082A8(struct UnkStruct1 *param0) { + NNSG2dCharacterData *st58; + int st54; + int r4; + int st14; + u8 *st50; + void *st4c; + u8 st48 = 0; + + for (st54 = 0; st54 < 4; st54++) { + if (param0->unk000[st54].unk00_0 != 0 && param0->unk000[st54].unk00_7 != 0) { + param0->unk000[st54].unk00_7 = 0; + st48 = 1; + st4c = AllocAndReadWholeNarcMemberByIdPair(param0->unk000[st54].unk04.field_00, param0->unk000[st54].unk04.field_02, param0->unk298); + NNS_G2dGetUnpackedCharacterData(st4c, &st58); + param0->unk2B8.pixelFmt = st58->pixelFmt; + param0->unk2B8.mapingType = st58->mapingType; + param0->unk2B8.characterFmt = st58->characterFmt; + + st50 = st58->pRawData; + FUN_02008A74(st50); + FUN_020088EC(¶m0->unk000[st54], st50); + + if (st54 == 3) { + for (st14 = 0; st14 < 0x50; st14++) { + for (r4 = 0; r4 < 0x50; r4++) { + if (r4 < 0x28) { + if (param0->unk000[st54].unk54_9 != 0 && param0->unk000[st54].unk54_A != 0) { + param0->unk2AC[st14*0x80+r4+0x50] = FUN_020088D8(st50[(0x4f-st14)*0x50+(0x27-r4)]); + } else if (param0->unk000[st54].unk54_9 != 0) { + param0->unk2AC[st14*0x80+r4+0x50] = FUN_020088D8(st50[st14*0x50+(0x27-r4)]); + } else if (param0->unk000[st54].unk54_A != 0) { + param0->unk2AC[st14*0x80+r4+0x50] = st50[(0x4f-st14)*0x50+r4]; + } else if (param0->unk000[st54].unk54_D != 0) { + if (st14%(param0->unk000[st54].unk54_D*2) != 0) { + param0->unk2AC[st14*0x80+r4+0x50] = param0->unk2AC[(st14-1)*0x80+r4+0x50]; + } else if (r4%param0->unk000[st54].unk54_D != 0) { + param0->unk2AC[st14*0x80+r4+0x50] = param0->unk2AC[st14*0x80+r4+0x4f]; + } else { + param0->unk2AC[st14*0x80+r4+0x50] = ((st50[st14*0x50+r4]&0xf) | ((st50[st14*0x50+r4]&0xf)<<4)); + } + } else { + param0->unk2AC[st14*0x80+r4+0x50] = st50[st14*0x50+r4]; + } + } else { + //_02008442 + if (param0->unk000[st54].unk54_9 != 0 && param0->unk000[st54].unk54_A != 0) { + param0->unk2AC[st14*0x80+r4+0x2828] = FUN_020088D8(st50[(0x4f-st14)*0x50+(0x4f-(r4-0x28))]); + } else if (param0->unk000[st54].unk54_9 != 0) { + param0->unk2AC[st14*0x80+r4+0x2828] = FUN_020088D8(st50[st14*0x50+(0x4f-(r4-0x28))]); + } else if (param0->unk000[st54].unk54_A != 0) { + param0->unk2AC[st14*0x80+r4+0x2828] = st50[(0x4f-st14)*0x50+r4]; + } else if (param0->unk000[st54].unk54_D != 0) { + if (st14%(param0->unk000[st54].unk54_D*2) != 0) { + param0->unk2AC[st14*0x80+r4+0x2828] = param0->unk2AC[(st14-1)*0x80+r4+0x2828]; + } else if (r4%param0->unk000[st54].unk54_D != 0) { + param0->unk2AC[st14*0x80+r4+0x2828] = param0->unk2AC[st14*0x80+(r4-1)+0x2828]; + } else { + param0->unk2AC[st14*0x80+r4+0x2828] = ((st50[st14*0x50+r4]&0xf) | ((st50[st14*0x50+r4]&0xf)<<4)); + } + } else { + param0->unk2AC[st14*0x80+r4+0x2828] = st50[st14*0x50+r4]; + } + } + } + } + + } else { + //_02008554 + for (st14 = 0; st14 < 0x50; st14++) { + for (r4 = 0; r4 < 0x50; r4++) { + if (param0->unk000[st54].unk54_9 != 0 && param0->unk000[st54].unk54_A != 0) { + if (r4 < 0x28) { + param0->unk2AC[st14*0x80+r4+st54*0x2800] = FUN_020088D8(st50[(0x4f-st14)*0x50+(0x27-r4)]); + } else { + param0->unk2AC[st14*0x80+r4+st54*0x2800] = FUN_020088D8(st50[(0x4f-st14)*0x50+(0x4f-(r4-0x28))]); + } + } else if (param0->unk000[st54].unk54_9 != 0) { + if (r4 < 0x28) { + param0->unk2AC[st14*0x80+r4+st54*0x2800] = FUN_020088D8(st50[st14*0x50+(0x27-r4)]); + } else { + param0->unk2AC[st14*0x80+r4+st54*0x2800] = FUN_020088D8(st50[st14*0x50+(0x4f-(r4-0x28))]); + } + } else if (param0->unk000[st54].unk54_A != 0) { + param0->unk2AC[st14*0x80+r4+st54*0x2800] = st50[(0x4f-st14)*0x50+r4]; + } else if (param0->unk000[st54].unk54_D != 0) { + if (st14%(param0->unk000[st54].unk54_D*2) != 0) { + param0->unk2AC[st14*0x80+r4+st54*0x2800] = param0->unk2AC[(st14-1)*0x80+r4+st54*0x2800]; + } else if (r4%(param0->unk000[st54].unk54_D) != 0) { + param0->unk2AC[st14*0x80+r4+st54*0x2800] = param0->unk2AC[st14*0x80+(r4-1)+st54*0x2800]; + } else { + param0->unk2AC[st14*0x80+r4+st54*0x2800] = ((st50[st14*0x50+r4]&0xf) | ((st50[st14*0x50+r4]&0xf)<<4)); + } + } else { + param0->unk2AC[st14*0x80+r4+st54*0x2800] = st50[st14*0x50+r4]; + } + } + } + + } + + FreeToHeap(st4c); + } + //_020086C2 + } + + param0->unk2E1 = st48; +} + + + +THUMB_FUNC void FUN_020086F4(struct UnkStruct1 *param0) { + NNSG2dPaletteData *st18; + int st14, r7; + u16 *r1; + void *st10; + u8 stc = 0; + + + for (st14 = 0 ; st14 < 4; st14++) { + if (param0->unk000[st14].unk00_0 != 0 && param0->unk000[st14].unk00_8 != 0) { + param0->unk000[st14].unk00_8 = 0; + stc = 1; + st10 = AllocAndReadWholeNarcMemberByIdPair(param0->unk000[st14].unk04.field_00, param0->unk000[st14].unk04.field_04, param0->unk298); + NNS_G2dGetUnpackedPaletteData(st10, &st18); + param0->unk2D0.fmt = st18->fmt; + r1 = st18->pRawData; + for (r7 = 0; r7 < 0x10; r7++) { + param0->unk2B0[st14*0x10+r7] = r1[r7]; + param0->unk2B4[st14*0x10+r7] = r1[r7]; + } + FreeToHeap(st10); + + if (param0->unk000[st14].unk6C.unk0_0 != 0) { + st10 = AllocAndReadWholeNarcMemberByIdPair(NARC_POKETOOL_POKEGRA_OTHERPOKE, NARC_otherpoke_narc_0212_NCLR, param0->unk298); + NNS_G2dGetUnpackedPaletteData(st10, &st18); + r1 = st18->pRawData; + for (r7 = 0; r7 < 0x10; r7++) { + param0->unk2B0[(param0->unk000[st14].unk6C.unk0_0+3)*0x10 + r7] = r1[r7]; + param0->unk2B4[(param0->unk000[st14].unk6C.unk0_0+3)*0x10 + r7] = r1[r7]; + } + FreeToHeap(st10); + } + } + //_020087E0 + + if (param0->unk000[st14].unk00_0 != 0 && param0->unk000[st14].unk54_C != 0) { + if (param0->unk000[st14].unk4A == 0) { + stc = 1; + param0->unk000[st14].unk4A = param0->unk000[st14].unk4B; + BlendPalette(param0->unk2B4+st14*0x10, param0->unk2B0+st14*0x10, 0x10, param0->unk000[st14].unk48, (u16)param0->unk000[st14].unk4C); + + if (param0->unk000[st14].unk6C.unk0_0 != 0) { + BlendPalette(param0->unk2B4+(param0->unk000[st14].unk6C.unk0_0+3)*0x10, param0->unk2B0+(param0->unk000[st14].unk6C.unk0_0+3)*0x10, 0x10, param0->unk000[st14].unk48, (u16)param0->unk000[st14].unk4C); + } + + if (param0->unk000[st14].unk48 == param0->unk000[st14].unk49) { + param0->unk000[st14].unk54_C = 0; + } else if (param0->unk000[st14].unk48 > param0->unk000[st14].unk49) { + param0->unk000[st14].unk48--; + } else { + param0->unk000[st14].unk48++; + } + } else { + param0->unk000[st14].unk4A--; + } + } + } + + param0->unk2E2 = stc; + +} + + + +THUMB_FUNC u8 FUN_020088D8(u8 param0) { + return ((u8)((param0&0xf0)>>4)) | ((u8)(param0<<4)); +} + +extern void FUN_02008904(u8 *param0, u32 param1, u32 param2); + +THUMB_FUNC void FUN_020088EC(struct UnkStruct2 *param0, u8 *param1) { + if (param0->unk04.field_06 != 0) { + FUN_02008904(param1, param0->unk04.field_0C,1); + } +} + + +THUMB_FUNC void FUN_02008904(u8 *param0, u32 param1, u32 param2) { + struct UnkStruct4 *st10; + s32 i; + u32 r2; + u8 r0; + u8 r4; + u8 r1; + u32 st0 = param1; + + for (i = 0; i < 4; i++) { + st10 = UNK_02105AE8[i]; + r1 = 0; + while (st10[r1].unk0 != 0xff) { + r0 = st10[r1].unk0+((param1&0xf) - 8); + r4 = st10[r1].unk1+(((param1&0xf0)>>4)-8); + r2 = r0/2 + r4*0x50; + if ((r0&1) != 0) { + if ((param0[r2]&0xf0) >= 0x10 && (param0[r2]&0xf0) <= 0x30) { + param0[r2] += 0x50; + } + } else { + if ((param0[r2]&0xf) >= 1 && (param0[r2]&0xf) <= 3) { + param0[r2]+= 5; + } + } + + r1++; + } + param1 >>= 8; + } + + param1 = st0; + + if (param2 != 0) { + for (i = 0; i < 4; i++) { + st10 = UNK_02105AE8[i]; + r1 = 0; + while (st10[r1].unk0 != 0xff) { + r0 = st10[r1].unk0-14+((param1&0xf)-8)+0x50; + r4 = st10[r1].unk1+(((param1&0xf0)>>4)-8); + r2 = r0/2 + r4*0x50; + if ((r0 &1) != 0) { + if ((param0[r2]&0xf0) >= 0x10 && (param0[r2]&0xf0) <= 0x30) { + param0[r2] += 0x50; + } + } else { + if ((param0[r2]&0xf) >= 1 && (param0[r2]&0xf) <= 3) { + param0[r2]+= 5; + } + } + r1++; + } + param1 >>= 8; + } + } +} + + + +THUMB_FUNC u16 FUN_02008A54(u32 *param0) { + *param0 = (*param0)*0x41C64E6D+0x6073; + + return *param0>>16; +} + + +THUMB_FUNC void FUN_02008A74(u8 *param0) { + u32 st0 = ((u16 *)param0)[0xc7f]; + for (s32 r4 = 0xc7f; r4 > -1; r4--) { + ((u16 *)param0)[r4] ^= st0; + FUN_02008A54(&st0); + } +} |