diff --git a/asm/code_8070E3C.s b/asm/code_8070E3C.s deleted file mode 100644 index 5c8a0a76e..000000000 --- a/asm/code_8070E3C.s +++ /dev/null @@ -1,397 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_8070E3C -sub_8070E3C: - push {r4-r7,lr} - adds r4, r0, 0 - adds r6, r1, 0 - adds r7, r2, 0 - ldr r0, [r4, 0x70] - movs r1, 0x2 - ldrsh r0, [r0, r1] - bl GetCrossableTerrain - lsls r0, 24 - lsrs r5, r0, 24 - movs r2, 0 - ldrsh r0, [r6, r2] - ldr r1, _08070EB0 - lsls r2, r7, 2 - adds r2, r1 - movs r3, 0 - ldrsh r1, [r2, r3] - adds r0, r1 - movs r3, 0x2 - ldrsh r1, [r6, r3] - movs r3, 0x2 - ldrsh r2, [r2, r3] - adds r1, r2 - bl GetMapTile_1 - adds r2, r0, 0 - ldrh r1, [r2] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _08070F0C - ldr r0, [r2, 0x10] - cmp r0, 0 - beq _08070E8A - bl GetEntityType - cmp r0, 0x1 - bne _08070F0C -_08070E8A: - bl IsFixedDungeon - lsls r0, 24 - cmp r0, 0 - bne _08070EDC - ldr r0, [r4, 0x70] - adds r0, 0xE4 - ldrb r0, [r0] - cmp r0, 0x3 - beq _08070EAC - adds r0, r4, 0 - movs r1, 0x9 - bl HasItem - lsls r0, 24 - cmp r0, 0 - beq _08070EB4 -_08070EAC: - movs r5, 0x3 - b _08070EDC - .align 2, 0 -_08070EB0: .4byte gAdjacentTileOffsets -_08070EB4: - adds r0, r4, 0 - movs r1, 0xC - bl HasIQSkill - lsls r0, 24 - cmp r0, 0 - bne _08070EDA - adds r0, r4, 0 - movs r1, 0xD - bl HasIQSkill - lsls r0, 24 - cmp r0, 0 - beq _08070EDC - movs r0, 0x1 - ands r0, r7 - movs r5, 0x3 - cmp r0, 0 - beq _08070EDC -_08070EDA: - movs r5, 0x2 -_08070EDC: - movs r1, 0 - ldrsh r0, [r6, r1] - movs r2, 0x2 - ldrsh r1, [r6, r2] - bl GetMapTile_1 - adds r2, r0, 0 - adds r1, r2, 0 - adds r1, 0xA - adds r1, r5 - ldr r2, _08070F08 - movs r0, 0x7 - ands r0, r7 - adds r0, r2 - ldrb r1, [r1] - ldrb r0, [r0] - ands r0, r1 - cmp r0, 0 - beq _08070F0C - movs r0, 0x1 - b _08070F0E - .align 2, 0 -_08070F08: .4byte gUnknown_8106FB5 -_08070F0C: - movs r0, 0 -_08070F0E: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_8070E3C - - thumb_func_start sub_8070F14 -sub_8070F14: - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - movs r1, 0x4 - ldrsh r0, [r4, r1] - ldr r1, _08070F70 - lsls r2, r5, 2 - adds r2, r1 - movs r3, 0 - ldrsh r1, [r2, r3] - adds r0, r1 - movs r3, 0x6 - ldrsh r1, [r4, r3] - movs r3, 0x2 - ldrsh r2, [r2, r3] - adds r1, r2 - bl GetMapTile_1 - adds r2, r0, 0 - ldrh r1, [r2] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _08070F78 - ldr r0, [r2, 0x10] - cmp r0, 0 - bne _08070F78 - movs r1, 0x4 - ldrsh r0, [r4, r1] - movs r2, 0x6 - ldrsh r1, [r4, r2] - bl GetMapTile_1 - adds r2, r0, 0 - ldr r1, _08070F74 - movs r0, 0x7 - ands r0, r5 - adds r0, r1 - ldrb r1, [r2, 0xA] - ldrb r0, [r0] - ands r0, r1 - cmp r0, 0 - beq _08070F78 - movs r0, 0x1 - b _08070F7A - .align 2, 0 -_08070F70: .4byte gAdjacentTileOffsets -_08070F74: .4byte gUnknown_8106FBD -_08070F78: - movs r0, 0 -_08070F7A: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8070F14 - - thumb_func_start sub_8070F80 -sub_8070F80: - push {r4-r6,lr} - adds r4, r0, 0 - adds r6, r1, 0 - ldr r0, [r4, 0x70] - movs r1, 0x2 - ldrsh r0, [r0, r1] - bl GetCrossableTerrain - lsls r0, 24 - lsrs r5, r0, 24 - movs r2, 0x4 - ldrsh r0, [r4, r2] - ldr r1, _08070FF4 - lsls r2, r6, 2 - adds r2, r1 - movs r3, 0 - ldrsh r1, [r2, r3] - adds r0, r1 - movs r3, 0x6 - ldrsh r1, [r4, r3] - movs r3, 0x2 - ldrsh r2, [r2, r3] - adds r1, r2 - bl GetMapTile_1 - adds r2, r0, 0 - ldrh r1, [r2] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _08071050 - ldr r0, [r2, 0x10] - cmp r0, 0 - beq _08070FCC - bl GetEntityType - cmp r0, 0x1 - bne _08071050 -_08070FCC: - bl IsFixedDungeon - lsls r0, 24 - cmp r0, 0 - bne _08071020 - ldr r0, [r4, 0x70] - adds r0, 0xE4 - ldrb r0, [r0] - cmp r0, 0x3 - beq _08070FEE - adds r0, r4, 0 - movs r1, 0x9 - bl HasItem - lsls r0, 24 - cmp r0, 0 - beq _08070FF8 -_08070FEE: - movs r5, 0x3 - b _08071020 - .align 2, 0 -_08070FF4: .4byte gAdjacentTileOffsets -_08070FF8: - adds r0, r4, 0 - movs r1, 0xC - bl HasIQSkill - lsls r0, 24 - cmp r0, 0 - bne _0807101E - adds r0, r4, 0 - movs r1, 0xD - bl HasIQSkill - lsls r0, 24 - cmp r0, 0 - beq _08071020 - movs r0, 0x1 - ands r0, r6 - movs r5, 0x3 - cmp r0, 0 - beq _08071020 -_0807101E: - movs r5, 0x2 -_08071020: - movs r1, 0x4 - ldrsh r0, [r4, r1] - movs r2, 0x6 - ldrsh r1, [r4, r2] - bl GetMapTile_1 - adds r2, r0, 0 - adds r1, r2, 0 - adds r1, 0xA - adds r1, r5 - ldr r2, _0807104C - movs r0, 0x7 - ands r0, r6 - adds r0, r2 - ldrb r1, [r1] - ldrb r0, [r0] - ands r0, r1 - cmp r0, 0 - beq _08071050 - movs r0, 0x1 - b _08071052 - .align 2, 0 -_0807104C: .4byte gUnknown_8106FC5 -_08071050: - movs r0, 0 -_08071052: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_8070F80 - - thumb_func_start sub_8071058 -sub_8071058: - push {r4-r7,lr} - adds r5, r0, 0 - adds r7, r1, 0 - ldr r0, [r5, 0x70] - movs r1, 0x2 - ldrsh r0, [r0, r1] - bl GetCrossableTerrain - lsls r0, 24 - lsrs r6, r0, 24 - movs r2, 0x4 - ldrsh r0, [r5, r2] - ldr r1, _080710D4 - lsls r2, r7, 2 - adds r2, r1 - movs r3, 0 - ldrsh r1, [r2, r3] - adds r0, r1 - movs r3, 0x6 - ldrsh r1, [r5, r3] - movs r3, 0x2 - ldrsh r2, [r2, r3] - adds r1, r2 - bl GetMapTile_1 - adds r4, r0, 0 - ldrh r1, [r4] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _08071130 - ldr r0, [r4, 0x10] - cmp r0, 0 - beq _080710AE - bl GetEntityType - cmp r0, 0x1 - beq _080710AE - ldr r0, [r4, 0x10] - ldr r0, [r0, 0x70] - ldrb r0, [r0, 0x6] - cmp r0, 0 - bne _08071130 -_080710AE: - bl IsFixedDungeon - lsls r0, 24 - cmp r0, 0 - bne _08071100 - ldr r0, [r5, 0x70] - adds r0, 0xE4 - ldrb r0, [r0] - cmp r0, 0x3 - beq _080710D0 - adds r0, r5, 0 - movs r1, 0x9 - bl HasItem - lsls r0, 24 - cmp r0, 0 - beq _080710D8 -_080710D0: - movs r6, 0x3 - b _08071100 - .align 2, 0 -_080710D4: .4byte gAdjacentTileOffsets -_080710D8: - adds r0, r5, 0 - movs r1, 0xC - bl HasIQSkill - lsls r0, 24 - cmp r0, 0 - bne _080710FE - adds r0, r5, 0 - movs r1, 0xD - bl HasIQSkill - lsls r0, 24 - cmp r0, 0 - beq _08071100 - movs r0, 0x1 - ands r0, r7 - movs r6, 0x3 - cmp r0, 0 - beq _08071100 -_080710FE: - movs r6, 0x2 -_08071100: - movs r1, 0x4 - ldrsh r0, [r5, r1] - movs r2, 0x6 - ldrsh r1, [r5, r2] - bl GetMapTile_1 - adds r4, r0, 0 - adds r1, r4, 0 - adds r1, 0xA - adds r1, r6 - ldr r2, _0807112C - movs r0, 0x7 - ands r0, r7 - adds r0, r2 - ldrb r1, [r1] - ldrb r0, [r0] - ands r0, r1 - cmp r0, 0 - beq _08071130 - movs r0, 0x1 - b _08071132 - .align 2, 0 -_0807112C: .4byte gUnknown_8106FCD -_08071130: - movs r0, 0 -_08071132: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_8071058 - - .align 2, 0 \ No newline at end of file diff --git a/asm/code_8097DD0.s b/asm/code_8097DD0.s index 36f15d983..127e07bf2 100644 --- a/asm/code_8097DD0.s +++ b/asm/code_8097DD0.s @@ -5,28 +5,6 @@ .text - thumb_func_start sub_8097DD0 -sub_8097DD0: - push {lr} - adds r2, r0, 0 - adds r3, r1, 0 - ldr r1, [r2] - ldr r0, [r3] - cmp r1, r0 - bne _08097DEA - ldr r1, [r2, 0x4] - ldr r0, [r3, 0x4] - cmp r1, r0 - bne _08097DEA - movs r0, 0x1 - b _08097DEC -_08097DEA: - movs r0, 0 -_08097DEC: - pop {r1} - bx r1 - thumb_func_end sub_8097DD0 - thumb_func_start sub_8097DF0 sub_8097DF0: push {r4-r7,lr} diff --git a/data/data_8106FB5.s b/data/data_8106FB5.s deleted file mode 100644 index e958b9f06..000000000 --- a/data/data_8106FB5.s +++ /dev/null @@ -1,21 +0,0 @@ - .section .rodata - - .global gUnknown_8106FB5 -gUnknown_8106FB5: @ 8106FB5 -@ replacing .incbin "baserom.gba", 0x00106fb5, 0x8 - .byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 - - .global gUnknown_8106FBD -gUnknown_8106FBD: @ 8106FBD -@ replacing .incbin "baserom.gba", 0x00106fbd, 0x8 - .byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 - - .global gUnknown_8106FC5 -gUnknown_8106FC5: @ 8106FC5 -@ replacing .incbin "baserom.gba", 0x00106fc5, 0x8 - .byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 - - .global gUnknown_8106FCD -gUnknown_8106FCD: @ 8106FCD -@ replacing .incbin "baserom.gba", 0x00106fcd, 0x8 - .byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 diff --git a/include/exclusive_pokemon.h b/include/exclusive_pokemon.h index 17bb8eff1..be105e700 100644 --- a/include/exclusive_pokemon.h +++ b/include/exclusive_pokemon.h @@ -1,6 +1,9 @@ #ifndef GUARD_EXCLUSIVE_POKEMON_H #define GUARD_EXCLUSIVE_POKEMON_H +#include "code_8092334.h" + + #define NUM_EXCLUSIVE_POKEMON 12 struct ExclusivePokemon @@ -36,6 +39,9 @@ extern struct ExclusivePokemonData *gUnknown_203B498; void LoadExclusivePokemon(void); struct ExclusivePokemonData *GetExclusivePokemon(void); void InitializeExclusivePokemon(void); +bool8 IsExclusivePokemonUnlocked(s16 pokeID); void UnlockExclusivePokemon(s16 pokeID); +void WriteExclusivePokemon(struct unkStruct_8094924 *r0); +void ReadExclusivePokemon(struct unkStruct_8094924 *r0); #endif // GUARD_EXCLUSIVE_POKEMON_H diff --git a/ld_script.txt b/ld_script.txt index 4f3221ff5..b5ff54a6e 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -238,7 +238,6 @@ SECTIONS { src/dungeon_capabilities.o(.text); asm/code_8070BC0.o(.text); src/dungeon_capabilities_1.o(.text); - asm/code_8070E3C.o(.text); src/dungeon_ai_targeting.o(.text); src/dungeon_pokemon_attributes.o(.text); asm/code_80718D8.o(.text); @@ -465,7 +464,6 @@ SECTIONS { src/type_effectiveness.o(.data); data/data_8106F7C.o(.rodata); src/dungeon_capabilities_1.o(.rodata); - data/data_8106FB5.o(.rodata); src/dungeon_ai_targeting.o(.rodata); data/data_8107010.o(.rodata); src/friend_area.o(.rodata); diff --git a/src/code_8097DD0.c b/src/code_8097DD0.c index abbb02e35..f8336901c 100644 --- a/src/code_8097DD0.c +++ b/src/code_8097DD0.c @@ -1,6 +1,7 @@ #include "global.h" #include "code_8092334.h" #include "pokemon.h" +#include "exclusive_pokemon.h" struct unkStruct_203B494 { @@ -23,10 +24,8 @@ extern struct unkStruct_203B494 *gUnknown_203B494; extern void SaveDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*); extern void RestoreDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*); -void ReadExclusivePokemon(struct unkStruct_8094924 *r0); void ReadGameOptions(struct unkStruct_8094924 *param_1); void ReadPlayTime(struct unkStruct_8094924 *r0); -void WriteExclusivePokemon(struct unkStruct_8094924 *r0); void WriteGameOptions(struct unkStruct_8094924 *param_1); void WritePlayTime(struct unkStruct_8094924 *r0); @@ -88,3 +87,13 @@ u32 sub_8097D98(u8 *r0, u32 size) nullsub_102(&backup); return backup.unk8; } + +bool8 sub_8097DD0(s32 *param_1, s32 *param_2) +{ + if ((param_1[0] == param_2[0]) && (param_1[1] == param_2[1])) { + return TRUE; + } + else { + return FALSE; + } +} diff --git a/src/dungeon_ai_targeting.c b/src/dungeon_ai_targeting.c index c5c16d709..2a24b7099 100644 --- a/src/dungeon_ai_targeting.c +++ b/src/dungeon_ai_targeting.c @@ -22,6 +22,10 @@ extern void ShowVisualFlags(struct DungeonEntity *r0); +const u8 gUnknown_8106FB5[] = {0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80}; +const u8 gUnknown_8106FBD[] = {0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80}; +const u8 gUnknown_8106FC5[] = {0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80}; +const u8 gUnknown_8106FCD[] = {0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80}; const u8 gDirectionBitMasks_2[] = {0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80}; const u8 gDirectionBitMasks_3[] = {0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80}; @@ -58,6 +62,159 @@ const u8 gTargetingData[3][2][2][2] = { } }; +bool8 sub_8070F3C(struct DungeonEntity * pokemon, struct Position *pos, s32 direction) +{ + u8 terrain; + struct MapTile *tile; + + terrain = GetCrossableTerrain(pokemon->entityData->entityID); + + tile = GetMapTile_1(pos->x + gAdjacentTileOffsets[direction].x, pos->y + gAdjacentTileOffsets[direction].y); + if ((!(tile->tileType & TILE_TYPE_MAP_EDGE)) && + (((tile->pokemon == NULL || (GetEntityType(tile->pokemon) == ENTITY_POKEMON))))) { + if (!IsFixedDungeon()) + { + if (pokemon->entityData->transformStatus == TRANSFORM_STATUS_MOBILE || + HasItem(pokemon, ITEM_ID_MOBILE_SCARF)) + { + terrain = CROSSABLE_TERRAIN_WALL; + } + else if (HasIQSkill(pokemon, IQ_SKILL_ALL_TERRAIN_HIKER)) + { + // BUG: If the Pokémon is a Ghost type that can normally attack through walls, + // All-Terrain Hiker/Super Mobile may make the AI think it can't attack through walls. + terrain = CROSSABLE_TERRAIN_CREVICE; + } + else if (HasIQSkill(pokemon, IQ_SKILL_SUPER_MOBILE)) + { + if ((direction & 1) != 0) + { + terrain = CROSSABLE_TERRAIN_CREVICE; + } + else + { + terrain = CROSSABLE_TERRAIN_WALL; + } + } + } + + tile = GetMapTile_1(pos->x, pos->y); + + if (((tile->canMoveAdjacent[terrain] & gUnknown_8106FB5[direction & DIRECTION_MASK]))) { + return TRUE; + } + } + return FALSE; +} + +bool8 sub_8070F14(struct DungeonEntity * pokemon, s32 direction) +{ + struct MapTile *tile; + + + tile = GetMapTile_1(pokemon->posWorld.x + gAdjacentTileOffsets[direction].x, pokemon->posWorld.y + gAdjacentTileOffsets[direction].y); + if ((!(tile->tileType & TILE_TYPE_MAP_EDGE)) && + (((tile->pokemon == NULL)))) { + + tile = GetMapTile_1(pokemon->posWorld.x, pokemon->posWorld.y); + + if (((tile->canMoveAdjacent[0] & gUnknown_8106FBD[direction & DIRECTION_MASK]))) { + return TRUE; + } + } + return FALSE; +} + +bool8 sub_8070F80(struct DungeonEntity * pokemon, s32 direction) +{ + u8 terrain; + struct MapTile *tile; + + terrain = GetCrossableTerrain(pokemon->entityData->entityID); + + tile = GetMapTile_1(pokemon->posWorld.x + gAdjacentTileOffsets[direction].x, pokemon->posWorld.y + gAdjacentTileOffsets[direction].y); + if ((!(tile->tileType & TILE_TYPE_MAP_EDGE)) && + (((tile->pokemon == NULL || (GetEntityType(tile->pokemon) == ENTITY_POKEMON))))) { + if (!IsFixedDungeon()) + { + if (pokemon->entityData->transformStatus == TRANSFORM_STATUS_MOBILE || + HasItem(pokemon, ITEM_ID_MOBILE_SCARF)) + { + terrain = CROSSABLE_TERRAIN_WALL; + } + else if (HasIQSkill(pokemon, IQ_SKILL_ALL_TERRAIN_HIKER)) + { + // BUG: If the Pokémon is a Ghost type that can normally attack through walls, + // All-Terrain Hiker/Super Mobile may make the AI think it can't attack through walls. + terrain = CROSSABLE_TERRAIN_CREVICE; + } + else if (HasIQSkill(pokemon, IQ_SKILL_SUPER_MOBILE)) + { + if ((direction & 1) != 0) + { + terrain = CROSSABLE_TERRAIN_CREVICE; + } + else + { + terrain = CROSSABLE_TERRAIN_WALL; + } + } + } + + tile = GetMapTile_1(pokemon->posWorld.x, pokemon->posWorld.y); + + if (((tile->canMoveAdjacent[terrain] & gUnknown_8106FC5[direction & DIRECTION_MASK]))) { + return TRUE; + } + } + return FALSE; +} + +bool8 sub_8071058(struct DungeonEntity * pokemon, s32 direction) +{ + u8 terrain; + struct MapTile *tile; + + terrain = GetCrossableTerrain(pokemon->entityData->entityID); + + tile = GetMapTile_1(pokemon->posWorld.x + gAdjacentTileOffsets[direction].x, pokemon->posWorld.y + gAdjacentTileOffsets[direction].y); + if ((!(tile->tileType & TILE_TYPE_MAP_EDGE)) && + (((tile->pokemon == NULL || (GetEntityType(tile->pokemon) == ENTITY_POKEMON)) || + (!tile->pokemon->entityData->isEnemy)))) { + if (!IsFixedDungeon()) + { + if (pokemon->entityData->transformStatus == TRANSFORM_STATUS_MOBILE || + HasItem(pokemon, ITEM_ID_MOBILE_SCARF)) + { + terrain = CROSSABLE_TERRAIN_WALL; + } + else if (HasIQSkill(pokemon, IQ_SKILL_ALL_TERRAIN_HIKER)) + { + // BUG: If the Pokémon is a Ghost type that can normally attack through walls, + // All-Terrain Hiker/Super Mobile may make the AI think it can't attack through walls. + terrain = CROSSABLE_TERRAIN_CREVICE; + } + else if (HasIQSkill(pokemon, IQ_SKILL_SUPER_MOBILE)) + { + if ((direction & 1) != 0) + { + terrain = CROSSABLE_TERRAIN_CREVICE; + } + else + { + terrain = CROSSABLE_TERRAIN_WALL; + } + } + } + tile = GetMapTile_1(pokemon->posWorld.x, pokemon->posWorld.y); + + if (((tile->canMoveAdjacent[terrain] & gUnknown_8106FCD[direction & DIRECTION_MASK]))) { + return TRUE; + } + } + return FALSE; +} + bool8 CanAttackInFront(struct DungeonEntity *pokemon, s32 direction) { u8 crossableTerrain = GetCrossableTerrain(pokemon->entityData->entityID); diff --git a/src/exclusive_pokemon_1.c b/src/exclusive_pokemon_1.c index 48b5ec50e..215002906 100644 --- a/src/exclusive_pokemon_1.c +++ b/src/exclusive_pokemon_1.c @@ -4,7 +4,6 @@ extern struct ExclusivePokemonData *gUnknown_203B498; extern struct ExclusivePokemon gExclusivePokemon[NUM_EXCLUSIVE_POKEMON]; -void RestoreIntegerBits(u32 *, void *, u32); void sub_80980B4(s16); void sub_8097FA8(u8); void sub_8098170(s32); @@ -13,7 +12,6 @@ void sub_8097FF8(void); u8 sub_8098100(u8); u8 sub_8098134(s16); u8 sub_80981A0(s32); -void SaveIntegerBits(u32 *, void *, s32); bool8 IsExclusivePokemonUnlocked(s16 pokeID) { @@ -40,11 +38,11 @@ void UnlockExclusivePokemon(s16 pokeID) for(iVar2 = 0; iVar2 < NUM_EXCLUSIVE_POKEMON; iVar2++) { if(gExclusivePokemon[iVar2].poke_id == pokeID_s32) - gUnknown_203B498->Exclusives[iVar2] = 1; + gUnknown_203B498->Exclusives[iVar2] = TRUE; } } -void WriteExclusivePokemon(u32 *r0) +void WriteExclusivePokemon(struct unkStruct_8094924 *r0) { s32 iVar2; u8 *puVar2; @@ -59,7 +57,7 @@ void WriteExclusivePokemon(u32 *r0) zero = 0; - SaveIntegerBits(r0, (u8 *)gUnknown_203B498, 1); + SaveIntegerBits(r0, gUnknown_203B498, 1); for(iVar2 = 0; iVar2 < 424; iVar2++) { stack_0 = sub_8098134(iVar2); @@ -85,7 +83,7 @@ void WriteExclusivePokemon(u32 *r0) } } -void ReadExclusivePokemon(u32 *r0) +void ReadExclusivePokemon(struct unkStruct_8094924 *r0) { s32 iVar2; u8 stack_0;