diff options
-rw-r--r-- | asm/pokemon_3.s | 111 | ||||
-rw-r--r-- | include/calculate_base_damage.h | 6 | ||||
-rw-r--r-- | include/pokemon.h | 7 | ||||
-rw-r--r-- | include/pokemon_3.h | 9 | ||||
-rw-r--r-- | include/pokemon_item_effects.h | 62 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/battle_ai_switch_items.c | 1 | ||||
-rw-r--r-- | src/battle_script_commands.c | 2 | ||||
-rw-r--r-- | src/battle_setup.c | 1 | ||||
-rw-r--r-- | src/battle_util.c | 1 | ||||
-rw-r--r-- | src/pokemon_1.c | 89 | ||||
-rw-r--r-- | src/scrcmd.c | 1 |
12 files changed, 69 insertions, 222 deletions
diff --git a/asm/pokemon_3.s b/asm/pokemon_3.s deleted file mode 100644 index 6873bce3d..000000000 --- a/asm/pokemon_3.s +++ /dev/null @@ -1,111 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - - - - - thumb_func_start sub_806F47C -sub_806F47C: @ 806F47C - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x1 - ands r0, r1 - ldr r1, =gUnknown_020249B4 - lsls r0, 2 - adds r0, r1 - ldr r4, [r0] - cmp r4, 0 - beq _0806F4F0 - ldrb r0, [r4, 0x2] - cmp r0, 0xA3 - beq _0806F4A8 - adds r0, r4, 0 - movs r1, 0 - movs r2, 0x14 - bl memset - b _0806F4F0 - .pool -_0806F4A8: - ldr r0, [r4, 0x10] - cmp r0, 0 - beq _0806F4B6 - bl Free - movs r0, 0 - str r0, [r4, 0x10] -_0806F4B6: - ldr r0, [r4, 0xC] - cmp r0, 0 - beq _0806F4C4 - bl Free - movs r0, 0 - str r0, [r4, 0xC] -_0806F4C4: - ldr r0, [r4, 0x8] - cmp r0, 0 - beq _0806F4D2 - bl Free - movs r0, 0 - str r0, [r4, 0x8] -_0806F4D2: - ldr r0, [r4, 0x4] - cmp r0, 0 - beq _0806F4E0 - bl Free - movs r0, 0 - str r0, [r4, 0x4] -_0806F4E0: - adds r0, r4, 0 - movs r1, 0 - movs r2, 0x14 - bl memset - adds r0, r4, 0 - bl Free -_0806F4F0: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_806F47C - - thumb_func_start sub_806F4F8 -sub_806F4F8: @ 806F4F8 - push {lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r3, r1, 24 - ldr r2, =gUnknown_020249B4 - movs r1, 0x1 - ands r0, r1 - lsls r0, 2 - adds r0, r2 - ldr r1, [r0] - ldrb r0, [r1, 0x2] - cmp r0, 0xA3 - beq _0806F51C - movs r0, 0 - b _0806F530 - .pool -_0806F51C: - ldrb r0, [r1] - lsls r0, 28 - lsrs r0, 28 - cmp r3, r0 - blt _0806F528 - movs r3, 0 -_0806F528: - ldr r0, [r1, 0x8] - lsls r1, r3, 2 - adds r1, r0 - ldr r0, [r1] -_0806F530: - pop {r1} - bx r1 - thumb_func_end sub_806F4F8 - - .align 2, 0 @ Don't pad with nop. diff --git a/include/calculate_base_damage.h b/include/calculate_base_damage.h deleted file mode 100644 index e9146c188..000000000 --- a/include/calculate_base_damage.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef GUARD_CALCULATE_BASE_DAMAGE_H -#define GUARD_CALCULATE_BASE_DAMAGE_H - -s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *defender, u32 move, u16 sideStatus, u16 powerOverride, u8 typeOverride, u8 bankAtk, u8 bankDef); - -#endif // GUARD_CALCULATE_BASE_DAMAGE_H diff --git a/include/pokemon.h b/include/pokemon.h index ac2638557..0430a465b 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -675,6 +675,13 @@ void BoxMonToMon(const struct BoxPokemon *srcMon, struct Pokemon *dstMon); u8 GetLevelUpMovesBySpecies(u16 species, u16 *moves); u8 GetMonsStateToDoubles_2(void); +bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 itemId, u8 partyId, u8 monMoveIndex, u8 a5); +s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *defender, u32 move, u16 sideStatus, u16 powerOverride, u8 typeOverride, u8 bankAtk, u8 bankDef); +const u8* GetTrainerClassNameFromId(u16 trainerId); +const u8* GetTrainerNameFromId(u16 trainerId); +void PlayMapChosenOrBattleBGM(u16 song); +u8 GetTrainerEncounterMusicId(u16 trainerOpponentId); + #include "sprite.h" void DoMonFrontSpriteAnimation(struct Sprite* sprite, u16 species, bool8 noCry, u8 arg3); diff --git a/include/pokemon_3.h b/include/pokemon_3.h deleted file mode 100644 index 82dfacf48..000000000 --- a/include/pokemon_3.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef GUARD_POKEMON_3_H -#define GUARD_POKEMON_3_H - -const u8* GetTrainerClassNameFromId(u16 trainerId); -const u8* GetTrainerNameFromId(u16 trainerId); -void PlayMapChosenOrBattleBGM(u16 song); -u8 GetTrainerEncounterMusicId(u16 trainerOpponentId); - -#endif // GUARD_POKEMON_3_H diff --git a/include/pokemon_item_effects.h b/include/pokemon_item_effects.h deleted file mode 100644 index 1564f7f99..000000000 --- a/include/pokemon_item_effects.h +++ /dev/null @@ -1,62 +0,0 @@ -#ifndef GUARD_POKEMON_ITEM_EFFECTS -#define GUARD_POKEMON_ITEM_EFFECTS - -#include "pokemon.h" - -// TODO once pokemon item effects is decompiled -/* -struct PokemonItemEffect -{ - //field 0 - u8 xAtk : 4; // x1, x2, x4, x8 = xF - u8 field_0_x10 : 1; // x10 - u8 critRatioUp : 1; // x20 - u8 field_0_x40 : 1; // x40 - u8 cureInfatuation : 1; // x80 - - /*field 1 - u8 xSpeed : 4; // x1, x2, x4, x8 = xF - u8 xDefense : 4; // x10, x20, x40, xF0 - - /*field 2 - u8 xSpAtk : 4; // x1, x2, x4, x8 = xF - u8 xAccuracy : 4; // x10, x20, x40, xF0 - - /*field 3 - u8 cureConfusion : 1; // x1 - u8 cureParalysis : 1; // x2 - u8 cureFreeze : 1; // x4 - u8 cureBurn : 1; // x8 - u8 curePoison : 1; // x10 - u8 cureSleep : 1; // x20 - u8 field_3_x40 : 1; // x40 - u8 cantLowerStats : 1; // x80 - - /*field 4 - u8 hpEv : 1; // x1 - u8 attackEv : 1; // x2 - u8 healHp : 1; // x4 - u8 field_4_x8 : 1; // x8 - u8 field_4_x10 : 1; // x10 - u8 ppUp : 1; // x20 - u8 levelUp : 1; // x40 - u8 evolutionStone : 1; // x80 - - /*field 5 - u8 defEv: 1; // x1 - u8 speedEv : 1; // x2 - u8 spDefEv : 1; // x4 - u8 spAtkEv : 1; // x8 - u8 ppMax : 1; // x10 - u8 field_5_x20 : 1; // x20 - u8 field_5_x40 : 1; // x40 - u8 field_5_x80 : 1; // x80 - - /*field 6 - u8 value; -}; -*/ - -bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 itemId, u8 partyId, u8 monMoveIndex, u8 a5); - -#endif // GUARD_POKEMON_ITEM_EFFECTS diff --git a/ld_script.txt b/ld_script.txt index 2ee175853..059f892b0 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -69,7 +69,6 @@ SECTIONS { src/battle_ai_switch_items.o(.text); src/battle_controller_link_opponent.o(.text); src/pokemon_1.o(.text); - asm/pokemon_3.o(.text); src/trig.o(.text); src/random.o(.text); src/util.o(.text); diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index 23d223308..28055c0df 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -8,7 +8,6 @@ #include "random.h" #include "util.h" #include "constants/items.h" -#include "pokemon_item_effects.h" extern u8 gActiveBattler; extern u8 gAbsentBattlerFlags; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 2acdd02f6..2ccc8fea8 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -11,7 +11,6 @@ #include "constants/hold_effects.h" #include "util.h" #include "pokemon.h" -#include "calculate_base_damage.h" #include "random.h" #include "battle_controllers.h" #include "battle_interface.h" @@ -31,7 +30,6 @@ #include "bg.h" #include "string_util.h" #include "pokemon_icon.h" -#include "pokemon_item_effects.h" #include "m4a.h" #include "mail.h" #include "event_data.h" diff --git a/src/battle_setup.c b/src/battle_setup.c index 96af536fe..69da30435 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -5,7 +5,6 @@ #include "battle_transition.h" #include "main.h" #include "task.h" -#include "pokemon_3.h" #include "safari_zone.h" #include "script.h" #include "constants/game_stat.h" diff --git a/src/battle_util.c b/src/battle_util.c index bbb4bf41d..b159bb6c4 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -19,7 +19,6 @@ #include "battle_ai_script_commands.h" #include "battle_controllers.h" #include "event_data.h" -#include "calculate_base_damage.h" #include "link.h" #include "berry.h" diff --git a/src/pokemon_1.c b/src/pokemon_1.c index b7c703f30..ea32479ab 100644 --- a/src/pokemon_1.c +++ b/src/pokemon_1.c @@ -27,6 +27,7 @@ #include "rtc.h" #include "m4a.h" #include "malloc.h" +#include "util.h" //Extracts the upper 16 bits of a 32-bit number #define HIHALF(n) (((n) & 0xFFFF0000) >> 16) @@ -39,7 +40,7 @@ struct Unknown_806F160_Struct u8 field_0_0 : 4; u8 field_0_1 : 4; u8 field_1; - u8 field_2; + u8 magic; u8 field_3_0 : 4; u8 field_3_1 : 4; void *bytes; @@ -96,7 +97,6 @@ extern u8 gLastUsedAbility; extern u16 gPartnerTrainerId; extern u32 gHitMarker; -extern const u32 gBitTable[]; extern const struct SpriteTemplate gUnknown_08329D98[]; extern const struct SpriteTemplate gUnknown_08329DF8[]; extern const union AnimCmd* gUnknown_082FF70C[]; @@ -105,8 +105,6 @@ extern const union AnimCmd* const * const gUnknown_08305D0C[]; extern const union AnimCmd* const * const gUnknown_0830536C[]; extern const u8 gText_BadEgg[]; extern const u8 gText_EggNickname[]; -extern const u8 gFacilityClassToPicIndex[]; -extern const u8 gFacilityClassToTrainerClass[]; extern const u8 gSecretBaseTrainerClasses[][5]; extern const struct BattleMove gBattleMoves[]; extern const u8 gSpeciesNames[][POKEMON_NAME_LENGTH + 1]; @@ -122,11 +120,6 @@ extern const u8 gUnknown_08329D22[]; extern const u8 gUnknown_08329D26[]; extern const u8 gUnknown_08329D2A[]; extern const u8 gUnknown_08329EC2[]; -extern const u16 gSpeciesToHoennPokedexNum[]; -extern const u16 gSpeciesToNationalPokedexNum[]; -extern const u16 gHoennToNationalOrder[]; -extern const u16 gSpeciesIdToCryId[]; -extern const struct SpindaSpot gSpindaSpotGraphics[]; extern const u8* const gStatNamesTable[]; extern const u8 gSpeciesNames[][11]; extern const u8 gUnknown_08329EC8[]; @@ -136,7 +129,6 @@ extern const u8 gText_PkmnGettingPumped[]; extern const u8 gText_PkmnShroudedInMist[]; extern const s8 gNatureStatTable[][5]; extern const s8 gUnknown_08329ECE[][3]; -extern const u32 gBitTable[]; extern const u32 gTMHMLearnsets[][2]; extern const u8 gText_BattleWallyName[]; extern const u8 gText_PkmnsXPreventsSwitching[]; @@ -145,8 +137,9 @@ extern const struct CompressedSpritePalette gMonShinyPaletteTable[]; extern const u16 gHMMoves[]; extern const u8 gMonAnimationDelayTable[]; extern const u8 gMonFrontAnimIdsTable[]; -extern const u8 gFacilityClassToPicIndex[]; extern const u8 gTrainerClassNames[][13]; +extern const struct SpriteTemplate gUnknown_08329D98[]; +extern const struct SpriteTemplate gUnknown_08329F28; extern bool8 ShouldGetStatBadgeBoost(u16 flagId, u8 bank); extern u8 pokemon_order_func(u8); @@ -157,7 +150,6 @@ extern u16 get_unknown_box_id(void); extern u8 StorageGetCurrentBox(void); extern void set_unknown_box_id(u8); extern struct BoxPokemon* GetBoxedMonPtr(u8 boxNumber, u8 boxPosition); -extern s32 GetDeoxysStat(struct Pokemon *mon, s32 statId); extern void sub_803FA70(u8 bank); extern void ClearTemporarySpeciesSpriteData(u8 bank, bool8); extern u32 GetBoxMonDataFromAnyBox(u8 boxNo, u8 boxPos, s32 field); @@ -4912,14 +4904,12 @@ bool8 sub_806F104(void) return FALSE; } -extern const struct SpriteTemplate gUnknown_08329D98[]; -extern const struct SpriteTemplate gUnknown_08329F28; +#define FORCE_SIGNED(x)(-(x * (-1))) void sub_806F160(struct Unknown_806F160_Struct* structPtr) { - s32 i; - u16 j; - for (i = 0; i < structPtr->field_0_0; i = (u16)(i + 1)) + u16 i, j; + for (i = 0; i < FORCE_SIGNED(structPtr->field_0_0); i++) { structPtr->templates[i] = gUnknown_08329D98[i]; for (j = 0; j < structPtr->field_1; j++) @@ -4933,9 +4923,8 @@ void sub_806F160(struct Unknown_806F160_Struct* structPtr) void sub_806F1FC(struct Unknown_806F160_Struct* structPtr) { - s32 i; - u16 j; - for (i = 0; i < structPtr->field_0_0; i = (u16)(i + 1)) + u16 i, j; + for (i = 0; i < FORCE_SIGNED(structPtr->field_0_0); i++) { structPtr->templates[i] = gUnknown_08329F28; for (j = 0; j < structPtr->field_1; j++) @@ -4948,14 +4937,14 @@ void sub_806F1FC(struct Unknown_806F160_Struct* structPtr) } } -struct Unknown_806F160_Struct *sub_806F2AC(u8 arg0, u8 arg1) +struct Unknown_806F160_Struct *sub_806F2AC(u8 id, u8 arg1) { u8 i; u8 flags; struct Unknown_806F160_Struct *structPtr; flags = 0; - arg0 %= 2; + id %= 2; structPtr = AllocZeroed(sizeof(*structPtr)); if (structPtr == NULL) return NULL; @@ -4979,7 +4968,7 @@ struct Unknown_806F160_Struct *sub_806F2AC(u8 arg0, u8 arg1) break; } - structPtr->bytes = AllocZeroed(structPtr->field_3_0 * structPtr->field_0_0); + structPtr->bytes = AllocZeroed(structPtr->field_3_0 * 0x800 * 4 * structPtr->field_0_0); structPtr->byteArrays = AllocZeroed(structPtr->field_0_0 * 32); if (structPtr->bytes == NULL || structPtr->byteArrays == NULL) { @@ -4987,7 +4976,7 @@ struct Unknown_806F160_Struct *sub_806F2AC(u8 arg0, u8 arg1) } else { - for (i = 0; i < structPtr->field_0_0; i++) + for (i = 0; i < FORCE_SIGNED(structPtr->field_0_0); i++) structPtr->byteArrays[i] = structPtr->bytes + (structPtr->field_3_0 * (i << 0xD)); } @@ -5037,9 +5026,55 @@ struct Unknown_806F160_Struct *sub_806F2AC(u8 arg0, u8 arg1) } else { - structPtr->field_2 = 0xA3; - gUnknown_020249B4[arg0] = structPtr; + structPtr->magic = 0xA3; + gUnknown_020249B4[id] = structPtr; + } + + return gUnknown_020249B4[id]; +} + +void sub_806F47C(u8 id) +{ + struct Unknown_806F160_Struct *structPtr; + + id %= 2; + structPtr = gUnknown_020249B4[id]; + if (structPtr == NULL) + return; + + if (structPtr->magic != 0xA3) + { + memset(structPtr, 0, sizeof(struct Unknown_806F160_Struct)); + } + else + { + + if (structPtr->frameImages != NULL) + FREE_AND_SET_NULL(structPtr->frameImages); + if (structPtr->templates != NULL) + FREE_AND_SET_NULL(structPtr->templates); + if (structPtr->byteArrays != NULL) + FREE_AND_SET_NULL(structPtr->byteArrays); + if (structPtr->bytes != NULL) + FREE_AND_SET_NULL(structPtr->bytes); + + memset(structPtr, 0, sizeof(struct Unknown_806F160_Struct)); + Free(structPtr); + } +} + +u8 *sub_806F4F8(u8 id, u8 arg1) +{ + struct Unknown_806F160_Struct *structPtr = gUnknown_020249B4[id % 2]; + if (structPtr->magic != 0xA3) + { + return NULL; } + else + { + if (arg1 >= FORCE_SIGNED(structPtr->field_0_0)) + arg1 = 0; - return gUnknown_020249B4[arg0]; + return structPtr->byteArrays[arg1]; + } } diff --git a/src/scrcmd.c b/src/scrcmd.c index 467b8f320..490bc6fda 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -31,7 +31,6 @@ #include "mystery_event_script.h" #include "palette.h" #include "party_menu.h" -#include "pokemon_3.h" #include "pokemon_storage_system.h" #include "random.h" #include "overworld.h" |