diff options
Diffstat (limited to 'src/pokemon_3.c')
-rw-r--r-- | src/pokemon_3.c | 193 |
1 files changed, 193 insertions, 0 deletions
diff --git a/src/pokemon_3.c b/src/pokemon_3.c new file mode 100644 index 0000000..fd03834 --- /dev/null +++ b/src/pokemon_3.c @@ -0,0 +1,193 @@ +#include "global.h" + +extern u32 gIQSkillNames[]; +extern u32 gIQSkillDescriptions[]; +extern u32 gTacticsDescriptions[]; +extern u8 *gTactics[]; +extern u8 gUnknown_810A36B[]; + +extern s16 gUnknown_810A378[]; +extern s32 gUnknown_810A390[]; +extern u32 gUnknown_81076E4[]; + +extern bool8 sub_808ECD0(u8 *, u32); +extern void sub_808EC30(u8 *, u32); + +u32 GetIQSkillName(u8 r0) +{ + return gIQSkillNames[r0]; +} + +void CopyTacticsNameToBuffer(char *r0, u8 r1) +{ + strncpy(r0, gTactics[r1], 0x14); +} + +u32 GetIQSkillDescription(u8 r0) +{ + return gIQSkillDescriptions[r0]; +} + +u32 GetTacticsDescription(u8 r0) +{ + return gTacticsDescriptions[r0]; +} + +u8 sub_808EAFC(u8 r0) +{ + return gUnknown_810A36B[r0]; +} + +void sub_808EB0C(u8 *r0, s32 r1) +{ + s32 counter; + s32 storage; + u32 index; + storage = 0; + index = 0; + for(counter = 0; counter <= 0xB; counter++) + { + if(gUnknown_810A378[index] <= r1) + { + r0[storage] = counter; + storage++; + } + index++; + } + if(storage > 0xB) + { + return; + } + while(storage <= 0xB) + { + r0[storage] = 0xB; + storage++; + } +} + +void sub_808EB48(u8 *r0, s32 r1) +{ + s32 counter; + + for(counter = 0; counter <= 0xB; counter++) + { + if(gUnknown_810A378[counter] <= r1) + { + r0[counter] = TRUE; + } + else + { + r0[counter] = FALSE; + } + } +} + +bool8 sub_808EB7C(s32 r0, u8 r1) +{ + if(r1 == 0) + { + return FALSE; + } + + return gUnknown_810A390[r1] <= r0; +} + +s32 sub_808EBA8(u8 param_1[], s32 param_2) +{ + s32 counter_2; + s32 counter_1; + u8 cast_u8; + s32 index; + + index = 0; + + for(counter_1 = 1; counter_1 < 0x18; counter_1++) { + cast_u8 = counter_1; // force this cast to be in a reg + if (sub_808EB7C(param_2, cast_u8)) { + param_1[index] = cast_u8; + index++; + } + } + + counter_2 = index; // set counter to where the first loop ended + + while (counter_2 < 0x18) { + param_1[counter_2] = 0; + counter_2++; + } + return index; +} + +void sub_808EBF4(u8 *param_1, u32 param_2) +{ + int iVar2; // a mask? + + iVar2 = 1 << (param_2); + if (sub_808ECD0(param_1,iVar2)) { + param_1[0] = param_1[0] & ~iVar2; + param_1[1] = param_1[1] & ~(iVar2 >> 8); + param_1[2] = param_1[2] & ~(iVar2 >> 0x10); + } + else + { + sub_808EC30(param_1,param_2); + } +} + +void sub_808EC30(u8 *param_1, u32 param_2) +{ + s32 iVar1; + s32 counter; + s32 iVar4; + s32 iVar5; + + counter = 0; + iVar4 = gUnknown_81076E4[param_2]; + do { + if (iVar4 == gUnknown_81076E4[counter]) { + iVar1 = 1 << (counter); + param_1[0] = param_1[0] & ~iVar1; + param_1[1] = param_1[1] & ~(iVar1 >> 8); + param_1[2] = param_1[2] & ~(iVar1 >> 0x10); + } + counter++; + } while (counter < 0x18); + + iVar5 = 1 << (param_2); + param_1[0] = iVar5 | param_1[0]; + param_1[1] = (iVar5 >> 8) | param_1[1]; + param_1[2] = (iVar5 >> 0x10) | param_1[2]; +} + +void sub_808EC94(u8 *param_1, u8 param_2) +{ + + param_1[0] = 0; + param_1[1] = 0; + param_1[2] = 0; + sub_808EC30(param_1, 2); + sub_808EC30(param_1, 3); + sub_808EC30(param_1, 0x16); + if (param_2 != 0) { + sub_808EC30(param_1, 0x12); + } +} + +bool8 sub_808ECD0(u8 *param_1, u32 param_2) +{ + + if ((((param_1[0] & param_2) == 0) && + ((param_1[1] & param_2 >> 8) == 0)) && + ((param_1[2] & param_2 >> 0x10) == 0)) + { + return 0; + } + else { + return 1; + } +} + +u32 sub_808ECFC(void) +{ + return 0; +} |