diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/code_8094F88.c | 31 | ||||
-rw-r--r-- | src/code_8095824.c | 165 | ||||
-rw-r--r-- | src/code_80972F4.c | 200 | ||||
-rw-r--r-- | src/friend_rescue_1.c | 3 | ||||
-rw-r--r-- | src/load_screen.c | 15 |
5 files changed, 379 insertions, 35 deletions
diff --git a/src/code_8094F88.c b/src/code_8094F88.c index 5bd3a29..0ca6de9 100644 --- a/src/code_8094F88.c +++ b/src/code_8094F88.c @@ -1,33 +1,18 @@ #include "global.h" +#include "pokemon.h" +#include "code_8094F88.h" #include "memory.h" -struct unkStruct_203B480 -{ - //size of 48 - u8 unk0; - u8 fill1[0x22 - 1]; - u8 unk22; - u8 fill23[0x2D - 0x23]; - u8 unk2D; -}; - -struct unkStruct_203B48C -{ - s32 unk0; - s32 unk4[0x20]; -}; - extern struct unkStruct_203B480 gUnknown_2038C88; -extern u8 gUnknown_2039288; -extern u32 gUnknown_20392E8; +extern struct unkStruct_203B480 *gUnknown_203B480; +extern struct unkStruct_203B484 gUnknown_2039288; +extern struct unkStruct_203B484 *gUnknown_203B484; extern struct unkStruct_203B48C gUnknown_20393C0; -extern u8 *gUnknown_203B484; +extern struct unkStruct_203B48C *gUnknown_203B48C; extern u32 *gUnknown_203B488; +extern u32 gUnknown_20392E8; -extern struct unkStruct_203B480 *gUnknown_203B480; - -extern struct unkStruct_203B48C *gUnknown_203B48C; // def a pointer void sub_80950BC(void) @@ -43,7 +28,7 @@ struct unkStruct_203B480 *sub_80950F8(void) return &gUnknown_2038C88; } -u8 *sub_8095100(void) +struct unkStruct_203B484 *sub_8095100(void) { return &gUnknown_2039288; } diff --git a/src/code_8095824.c b/src/code_8095824.c new file mode 100644 index 0000000..b366574 --- /dev/null +++ b/src/code_8095824.c @@ -0,0 +1,165 @@ +#include "global.h" +#include "pokemon.h" +#include "code_8094F88.h" + +extern struct unkStruct_203B484 *gUnknown_203B484; +extern struct unkStruct_203B480 *gUnknown_203B480; +extern struct unkStruct_203B48C *gUnknown_203B48C; + +extern void xxx_save_poke_sub_4_80902F4(struct unkStruct_8094924*, struct unkPokeSubStruct_4*); +extern void xxx_restore_poke_sub_4_8090314(struct unkStruct_8094924*, struct unkPokeSubStruct_4*); +extern void xxx_save_poke_sub_c_808F41C(struct unkStruct_8094924* a1, struct unkPokeSubStruct_C* unkC); +extern void xxx_restore_poke_sub_c_808F410(struct unkStruct_8094924*, struct unkPokeSubStruct_C*); +extern void SavePokemonMoves(struct unkStruct_8094924 *r0, struct PokemonMove *moveSet); +extern void RestorePokemonMoves(struct unkStruct_8094924 *r0, struct PokemonMove *moveSet); + +void sub_8095824(struct unkStruct_8094924 * a, struct unkStruct_203B480 *b); +void sub_8095774(struct unkStruct_8094924 * a, struct unkStruct_203B480 *b); +extern u32 sub_8095324(u32); + +u32 sub_80954B4(void) +{ + if(sub_8095324(3) != 0) + return 1; + else + return 0; +} + +u32 sub_80954CC(u8 *a, u32 b) +{ + struct unkStruct_8094924 backup; + struct PokemonStruct *temp; + s32 index; + + xxx_init_struct_8094924_restore_809485C(&backup, a, b); + for(index = 0; index < 0x20; index++) + { + sub_8095774(&backup, &gUnknown_203B480[index]); + } + RestoreIntegerBits(&backup, &gUnknown_203B484->unk0, 0x20); + temp = &gUnknown_203B484->unk4; + memset(temp, 0, sizeof(struct PokemonStruct)); + RestoreIntegerBits(&backup, &temp->unk0, 2); + RestoreIntegerBits(&backup, &temp->unk2, 1); + RestoreIntegerBits(&backup, &temp->unkHasNextStage, 7); + xxx_restore_poke_sub_4_8090314(&backup, &temp->unk4); + RestoreIntegerBits(&backup, &temp->speciesNum, 9); + xxx_restore_poke_sub_c_808F410(&backup, &temp->unkC[0]); + xxx_restore_poke_sub_c_808F410(&backup, &temp->unkC[1]); + RestoreIntegerBits(&backup, &temp->IQ, 0xA); + RestoreIntegerBits(&backup, &temp->pokeHP, 0xA); + RestoreIntegerBits(&backup, &temp->offense.att[0], 8); + RestoreIntegerBits(&backup, &temp->offense.att[1], 8); + RestoreIntegerBits(&backup, &temp->offense.def[0], 8); + RestoreIntegerBits(&backup, &temp->offense.def[1], 8); + RestoreIntegerBits(&backup, &temp->unk1C, 0x18); + RestoreIntegerBits(&backup, &temp->IQSkills, 0x18); + RestoreIntegerBits(&backup, &temp->unk24, 4); + RestoreHeldItem(&backup, &temp->heldItem); + RestorePokemonMoves(&backup, temp->moves); + RestoreIntegerBits(&backup, temp->name, 0x50); + + RestoreIntegerBits(&backup, &gUnknown_203B48C->unk0, 0x20); + for(index = 0; index < 0x20; index++) + { + RestoreIntegerBits(&backup, &gUnknown_203B48C->unk4[index], 0x20); + } + nullsub_102(&backup); + return backup.unk8; +} + +u32 sub_8095624(u8 *a, u32 b) +{ + struct unkStruct_8094924 backup; + struct PokemonStruct *temp; + s32 index; + + xxx_init_struct_8094924_save_809486C(&backup, a, b); + for(index = 0; index < 0x20; index++) + { + sub_8095824(&backup, &gUnknown_203B480[index]); + } + SaveIntegerBits(&backup, &gUnknown_203B484->unk0, 0x20); + temp = &gUnknown_203B484->unk4; + SaveIntegerBits(&backup, &temp->unk0, 2); + SaveIntegerBits(&backup, &temp->unk2, 1); + SaveIntegerBits(&backup, &temp->unkHasNextStage, 7); + xxx_save_poke_sub_4_80902F4(&backup, &temp->unk4); + SaveIntegerBits(&backup, &temp->speciesNum, 9); + xxx_save_poke_sub_c_808F41C(&backup, &temp->unkC[0]); + xxx_save_poke_sub_c_808F41C(&backup, &temp->unkC[1]); + SaveIntegerBits(&backup, &temp->IQ, 0xA); + SaveIntegerBits(&backup, &temp->pokeHP, 0xA); + SaveIntegerBits(&backup, &temp->offense.att[0], 8); + SaveIntegerBits(&backup, &temp->offense.att[1], 8); + SaveIntegerBits(&backup, &temp->offense.def[0], 8); + SaveIntegerBits(&backup, &temp->offense.def[1], 8); + SaveIntegerBits(&backup, &temp->unk1C, 0x18); + SaveIntegerBits(&backup, &temp->IQSkills, 0x18); + SaveIntegerBits(&backup, &temp->unk24, 4); + SaveHeldItem(&backup, &temp->heldItem); + SavePokemonMoves(&backup, temp->moves); + SaveIntegerBits(&backup, temp->name, 0x50); + + SaveIntegerBits(&backup, &gUnknown_203B48C->unk0, 0x20); + for(index = 0; index < 0x20; index++) + { + SaveIntegerBits(&backup, &gUnknown_203B48C->unk4[index], 0x20); + } + nullsub_102(&backup); + return backup.unk8; +} + +void sub_8095774(struct unkStruct_8094924 * a, struct unkStruct_203B480 *b) +{ + u8 temp; + + RestoreIntegerBits(a, &b->unk0, 4); + xxx_restore_poke_sub_4_8090314(a, &b->unk4); + RestoreIntegerBits(a, &b->unk8, 0x18); + RestoreIntegerBits(a, &b->unkC, 0x9); + RestoreIntegerBits(a, &b->unk10, 0x20); + RestoreIntegerBits(a, &b->unk14, 0x50); + RestoreIntegerBits(a, &b->unk20, 0x8); + RestoreIntegerBits(a, &b->unk21, 0x8); + RestoreIntegerBits(a, &b->unk22, 0x8); + RestoreIntegerBits(a, &b->unk24, 0x20); + RestoreIntegerBits(a, &b->unk28, 0x20); + RestoreIntegerBits(a, &b->unk2C, 0x8); + + RestoreIntegerBits(a, &temp, 1); + b->unk2D = temp & 1; +} + +void sub_8095824(struct unkStruct_8094924 * a, struct unkStruct_203B480 *b) +{ + u8 neg1; + u8 zero; + u8 *puVar2; + neg1 = -1; + zero = 0; + + SaveIntegerBits(a, &b->unk0, 4); + xxx_save_poke_sub_4_80902F4(a, &b->unk4); + SaveIntegerBits(a, &b->unk8, 0x18); + SaveIntegerBits(a, &b->unkC, 0x9); + SaveIntegerBits(a, &b->unk10, 0x20); + SaveIntegerBits(a, &b->unk14, 0x50); + SaveIntegerBits(a, &b->unk20, 0x8); + SaveIntegerBits(a, &b->unk21, 0x8); + SaveIntegerBits(a, &b->unk22, 0x8); + SaveIntegerBits(a, &b->unk24, 0x20); + SaveIntegerBits(a, &b->unk28, 0x20); + SaveIntegerBits(a, &b->unk2C, 0x8); + + if(b->unk2D != 0) + puVar2 = &neg1; + else + puVar2 = &zero; + SaveIntegerBits(a, puVar2, 1); +} + +void sub_80958E4(u32 *a, u32 b) +{ + *a = b; +} diff --git a/src/code_80972F4.c b/src/code_80972F4.c new file mode 100644 index 0000000..7e87832 --- /dev/null +++ b/src/code_80972F4.c @@ -0,0 +1,200 @@ +#include "global.h" +#include "pokemon.h" +#include "wonder_mail.h" + +extern void xxx_save_poke_sub_4_80902F4(struct unkStruct_8094924*, struct unkPokeSubStruct_4*); +extern void xxx_restore_poke_sub_4_8090314(struct unkStruct_8094924*, struct unkPokeSubStruct_4*); +extern void sub_80015C0(u32, u32); + +struct unkStruct_8097270 +{ + u8 unk0; + u8 unk1; + u8 unk2; + struct unkPokeSubStruct_4 unk4; + u32 unk8; + u16 unkC; + u16 unkE; + u8 unk10; + u8 unk11; + u8 unk12; + u8 unk13; +}; + +struct subStruct_203B490 +{ + // size: 0xC + struct unkPokeSubStruct_4 unk0; + u32 unk4; + u32 unk8; +}; + + +struct unkStruct_203B490 +{ + // size: 0x330? + + struct unkStruct_8097270 unk0[4]; + struct unkStruct_8097270 unk50[8]; + struct unkStruct_8097270 unkF0[8]; + u8 unk190[0x28]; + u8 unk1B8[0x78]; + struct subStruct_203B490 unk230[16]; + u8 unk2F0[0x38]; + u8 unk328; +}; +extern struct unkStruct_203B490 *gUnknown_203B490; + +void sub_8097270(struct unkStruct_8094924 *a, struct unkStruct_8097270 *b); +void sub_80971EC(struct unkStruct_8094924 *a, struct unkStruct_8097270 *b); +extern s32 sub_8096EB0(void); + +bool8 sub_8096F50(struct WonderMail *r0) +{ + s32 index; + s32 temp2; + struct subStruct_203B490 *temp; + + temp2 = sub_8096EB0(); + + + for(index = 0; index < 0x10; index++) + { + temp = &gUnknown_203B490->unk230[index]; + if(temp->unk0.unk4 == r0->dungeon) + if(temp->unk0.unk5 == r0->floor) + if(temp->unk4 == r0->unk8) + if(temp->unk8 == temp2) + return TRUE; + } + return FALSE; +} + +u32 sub_8096FA0(u8 *r0, u32 size) +{ + s32 index; + struct unkStruct_8094924 backup; + u32 temp; + + xxx_init_struct_8094924_restore_809485C(&backup, r0, size); + for(index = 0; index < 4; index++) + { + sub_80971EC(&backup, &gUnknown_203B490->unk0[index]); + } + for(index = 0; index < 8; index++) + { + sub_80971EC(&backup, &gUnknown_203B490->unk50[index]); + } + for(index = 0; index < 8; index++) + { + sub_80971EC(&backup, &gUnknown_203B490->unkF0[index]); + } + for(index = 0; index < 0x38; index++) + { + RestoreIntegerBits(&backup, &temp, 1); + if(temp & 1) + gUnknown_203B490->unk2F0[index] = 1; + else + gUnknown_203B490->unk2F0[index] = 0; + } + RestoreIntegerBits(&backup, &temp, 1); + if(temp & 1) + gUnknown_203B490->unk328 = 1; + else + gUnknown_203B490->unk328 = 0; + + RestoreIntegerBits(&backup, gUnknown_203B490->unk190, 0x140); + RestoreIntegerBits(&backup, gUnknown_203B490->unk1B8, 0x3C0); + for(index = 0; index < 0x10; index++) + { + RestoreIntegerBits(&backup, &gUnknown_203B490->unk230[index].unk8, 0x20); + RestoreIntegerBits(&backup, &gUnknown_203B490->unk230[index].unk4, 0x18); + xxx_restore_poke_sub_4_8090314(&backup, &gUnknown_203B490->unk230[index].unk0); + } + nullsub_102(&backup); + return backup.unk8; +} + +u32 sub_80970D8(u8 *r0, u32 size) +{ + s32 index; + struct unkStruct_8094924 backup; + u32 temp; + + xxx_init_struct_8094924_save_809486C(&backup, r0, size); + for(index = 0; index < 4; index++) + { + sub_8097270(&backup, &gUnknown_203B490->unk0[index]); + } + for(index = 0; index < 8; index++) + { + sub_8097270(&backup, &gUnknown_203B490->unk50[index]); + } + for(index = 0; index < 8; index++) + { + sub_8097270(&backup, &gUnknown_203B490->unkF0[index]); + } + for(index = 0; index < 0x38; index++) + { + if(gUnknown_203B490->unk2F0[index] != 0) + temp = -1; + else + temp = 0; + SaveIntegerBits(&backup, &temp, 1); + } + if(gUnknown_203B490->unk328 != 0) + temp = -1; + else + temp = 0; + SaveIntegerBits(&backup, &temp, 1); + SaveIntegerBits(&backup, gUnknown_203B490->unk190, 0x140); + SaveIntegerBits(&backup, gUnknown_203B490->unk1B8, 0x3C0); + for(index = 0; index < 0x10; index++) + { + SaveIntegerBits(&backup, &gUnknown_203B490->unk230[index].unk8, 0x20); + SaveIntegerBits(&backup, &gUnknown_203B490->unk230[index].unk4, 0x18); + xxx_save_poke_sub_4_80902F4(&backup, &gUnknown_203B490->unk230[index].unk0); + } + nullsub_102(&backup); + return backup.unk8; +} + +void sub_80971EC(struct unkStruct_8094924 *a, struct unkStruct_8097270 *b) +{ + RestoreIntegerBits(a, &b->unk0, 4); + RestoreIntegerBits(a, &b->unk1, 3); + RestoreIntegerBits(a, &b->unk2, 4); + RestoreIntegerBits(a, &b->unkC, 9); + RestoreIntegerBits(a, &b->unkE, 9); + RestoreIntegerBits(a, &b->unk10, 8); + RestoreIntegerBits(a, &b->unk11, 4); + RestoreIntegerBits(a, &b->unk12, 8); + RestoreIntegerBits(a, &b->unk13, 6); + RestoreIntegerBits(a, &b->unk8, 0x18); + xxx_restore_poke_sub_4_8090314(a, &b->unk4); +} + +void sub_8097270(struct unkStruct_8094924 *a, struct unkStruct_8097270 *b) +{ + SaveIntegerBits(a, &b->unk0, 4); + SaveIntegerBits(a, &b->unk1, 3); + SaveIntegerBits(a, &b->unk2, 4); + SaveIntegerBits(a, &b->unkC, 9); + SaveIntegerBits(a, &b->unkE, 9); + SaveIntegerBits(a, &b->unk10, 8); + SaveIntegerBits(a, &b->unk11, 4); + SaveIntegerBits(a, &b->unk12, 8); + SaveIntegerBits(a, &b->unk13, 6); + SaveIntegerBits(a, &b->unk8, 0x18); + xxx_save_poke_sub_4_80902F4(a, &b->unk4); +} + +void sub_80972F4(void) +{ + sub_80015C0(0, 0x2B); + sub_80015C0(0, 0x2C); + sub_80015C0(0, 0x2D); +} + +void nullsub_128(void) +{} diff --git a/src/friend_rescue_1.c b/src/friend_rescue_1.c index 325cf4e..f7a74ef 100644 --- a/src/friend_rescue_1.c +++ b/src/friend_rescue_1.c @@ -8,6 +8,7 @@ #include "friend_rescue.h" #include "sub_8095228.h" #include "item.h" +#include "code_8094F88.h" extern struct TeamInventory *gTeamInventory_203B460; extern u8 *gUnknown_203B484; @@ -488,7 +489,7 @@ void sub_8033DBC(void) sub_80951FC(&temp.unk0); temp2 = sub_8095228(sub_809539C(1, temp.unk10)); temp2->unk0 = 7; - MemoryFill8((u8 *)gUnknown_203B484, 0, 0x5C); + MemoryFill8((u8 *)gUnknown_203B484, 0, sizeof(struct unkStruct_203B484)); SetFriendRescueMenuState(0x40); break; case 24: diff --git a/src/load_screen.c b/src/load_screen.c index 1c224f5..775e974 100644 --- a/src/load_screen.c +++ b/src/load_screen.c @@ -9,17 +9,10 @@ #include "pokemon.h" #include "save.h" #include "code_800D090.h" +#include "code_8094F88.h" extern const struct FileArchive gTitleMenuFileArchive; -struct unkStruct_203B484 -{ - u8 fill0[0xC]; - /* 0xC */ s16 speciesIndex; - u8 fillE[0x50 - 0xE]; - /* 0x50 */ u8 helperName[10]; -}; - struct LoadScreen { // size: 0x27c @@ -373,9 +366,9 @@ void DrawLoadScreenText(void) if (iVar2 == 0xf1207){ // NOTE: very hacky match here but needed var here to match temp2 = gUnknown_203B484; - if(temp2->speciesIndex != SPECIES_NONE) { - sub_808D930(speciesHelper,temp2->speciesIndex); - sub_80922B4(nameHelper,temp2->helperName,POKEMON_NAME_LENGTH); + if(temp2->unk4.speciesNum != SPECIES_NONE) { + sub_808D930(speciesHelper,temp2->unk4.speciesNum); + sub_80922B4(nameHelper,temp2->unk4.name,POKEMON_NAME_LENGTH); sprintf_2(gLoadScreen->formattedHelperInfo,gHelperInfoPlaceholder,nameHelper,speciesHelper); // %s (%s) } else |