diff options
-rw-r--r-- | asm/code_8040094.s | 2 | ||||
-rw-r--r-- | asm/code_80521D0.s | 59 | ||||
-rw-r--r-- | asm/code_8057144.s | 2 | ||||
-rw-r--r-- | asm/code_8057824.s | 16 | ||||
-rw-r--r-- | asm/code_80701A4.s | 2 | ||||
-rw-r--r-- | data/data_80F59C8.s | 4 | ||||
-rw-r--r-- | include/charge_move.h | 3 | ||||
-rw-r--r-- | src/charge_move.c | 48 | ||||
-rw-r--r-- | src/dungeon_ai_attack.c | 4 |
9 files changed, 70 insertions, 70 deletions
diff --git a/asm/code_8040094.s b/asm/code_8040094.s index b057290..431c7ba 100644 --- a/asm/code_8040094.s +++ b/asm/code_8040094.s @@ -2501,7 +2501,7 @@ _080414A0: _080414A4: adds r0, r4, 0 adds r1, r5, 0 - bl IsChargeMove + bl MoveMatchesChargingStatus adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 diff --git a/asm/code_80521D0.s b/asm/code_80521D0.s index ad3024b..ac3aa13 100644 --- a/asm/code_80521D0.s +++ b/asm/code_80521D0.s @@ -2831,7 +2831,7 @@ _08053A4C: movs r4, 0 adds r0, r7, 0 mov r1, r8 - bl IsChargeMove + bl MoveMatchesChargingStatus lsls r0, 24 cmp r0, 0 bne _08053A7E @@ -6521,7 +6521,7 @@ _08055B74: adds r0, r5, 0 adds r1, r6, 0 str r2, [sp, 0x30] - bl IsChargeMove + bl MoveMatchesChargingStatus lsls r0, 24 lsrs r4, r0, 24 ldrb r0, [r6, 0x4] @@ -7148,7 +7148,7 @@ _080560AE: beq _080560CC adds r0, r5, 0 adds r1, r7, 0 - bl IsChargeMove + bl MoveMatchesChargingStatus lsls r0, 24 cmp r0, 0 bne _080560CC @@ -7165,7 +7165,7 @@ _080560CC: bl sub_80928C0 adds r0, r5, 0 adds r1, r7, 0 - bl IsChargeMove + bl MoveMatchesChargingStatus lsls r0, 24 cmp r0, 0 beq _08056124 @@ -8038,7 +8038,7 @@ _080567EC: beq _08056820 mov r0, r10 ldr r1, [sp, 0x1C] - bl IsChargeMove + bl MoveMatchesChargingStatus lsls r0, 24 cmp r0, 0 bne _08056820 @@ -8740,7 +8740,7 @@ _08056D44: bne _08056D86 adds r0, r5, 0 mov r1, r8 - bl IsChargeMove + bl MoveMatchesChargingStatus lsls r0, 24 lsrs r4, r0, 24 mov r2, r8 @@ -9186,49 +9186,4 @@ _080570A6: bx r1 thumb_func_end sub_8057088 - thumb_func_start IsChargeMove -IsChargeMove: - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - bne _080570C2 - b _080570E8 -_080570BE: - movs r0, 0x1 - b _080570EA -_080570C2: - ldr r0, [r4, 0x70] - movs r3, 0 - ldr r2, _080570F0 - adds r4, r0, 0 - adds r4, 0xC0 -_080570CC: - ldrh r1, [r2] - cmp r1, 0 - beq _080570E8 - ldrh r0, [r5, 0x2] - cmp r0, r1 - bne _080570E0 - ldrb r0, [r4] - ldrb r1, [r2, 0x2] - cmp r0, r1 - beq _080570BE -_080570E0: - adds r2, 0x4 - adds r3, 0x1 - cmp r3, 0x63 - ble _080570CC -_080570E8: - movs r0, 0 -_080570EA: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080570F0: .4byte gChargeMovesToStatuses - thumb_func_end IsChargeMove - - .align 2, 0 + .align 2, 0
\ No newline at end of file diff --git a/asm/code_8057144.s b/asm/code_8057144.s index fba13cd..899bf52 100644 --- a/asm/code_8057144.s +++ b/asm/code_8057144.s @@ -932,7 +932,7 @@ _080577C8: .4byte gUnknown_80FD14C _080577CC: adds r0, r4, 0 adds r1, r6, 0 - bl IsChargeMove + bl MoveMatchesChargingStatus lsls r0, 24 cmp r0, 0 beq _080577F8 diff --git a/asm/code_8057824.s b/asm/code_8057824.s index 6ae62c4..4dc4556 100644 --- a/asm/code_8057824.s +++ b/asm/code_8057824.s @@ -1209,7 +1209,7 @@ sub_80582EC: adds r4, r2, 0 adds r6, r3, 0 adds r1, r4, 0 - bl IsChargeMove + bl MoveMatchesChargingStatus lsls r0, 24 cmp r0, 0 beq _08058328 @@ -1684,7 +1684,7 @@ sub_805867C: adds r4, r2, 0 adds r6, r3, 0 adds r1, r4, 0 - bl IsChargeMove + bl MoveMatchesChargingStatus lsls r0, 24 cmp r0, 0 beq _080586B8 @@ -2255,7 +2255,7 @@ SkyAttackMoveAction: mov r8, r0 adds r0, r4, 0 adds r1, r5, 0 - bl IsChargeMove + bl MoveMatchesChargingStatus lsls r0, 24 cmp r0, 0 beq _08058B14 @@ -3847,7 +3847,7 @@ sub_805968C: beq _080596B6 adds r0, r5, 0 adds r1, r6, 0 - bl IsChargeMove + bl MoveMatchesChargingStatus lsls r0, 24 cmp r0, 0 beq _080596EC @@ -3972,7 +3972,7 @@ sub_8059790: adds r4, r2, 0 adds r6, r3, 0 adds r1, r4, 0 - bl IsChargeMove + bl MoveMatchesChargingStatus lsls r0, 24 cmp r0, 0 beq _080597CC @@ -4077,7 +4077,7 @@ _0805986C: .4byte gUnknown_80FD128 _08059870: adds r0, r4, 0 adds r1, r5, 0 - bl IsChargeMove + bl MoveMatchesChargingStatus lsls r0, 24 cmp r0, 0 beq _080598A4 @@ -5002,7 +5002,7 @@ sub_8059F38: mov r8, r0 adds r0, r4, 0 adds r1, r5, 0 - bl IsChargeMove + bl MoveMatchesChargingStatus lsls r0, 24 cmp r0, 0 beq _08059FA0 @@ -8374,7 +8374,7 @@ SkullBashMoveAction: adds r4, r2, 0 adds r6, r3, 0 adds r1, r4, 0 - bl IsChargeMove + bl MoveMatchesChargingStatus lsls r0, 24 cmp r0, 0 beq _0805B8EC diff --git a/asm/code_80701A4.s b/asm/code_80701A4.s index ac383ab..df0521b 100644 --- a/asm/code_80701A4.s +++ b/asm/code_80701A4.s @@ -153,7 +153,7 @@ _080702B0: beq _08070312 adds r0, r7, 0 adds r1, r4, 0 - bl IsChargeMove + bl MoveMatchesChargingStatus lsls r0, 24 cmp r0, 0 beq _08070312 diff --git a/data/data_80F59C8.s b/data/data_80F59C8.s index 7440857..93158f6 100644 --- a/data/data_80F59C8.s +++ b/data/data_80F59C8.s @@ -6109,7 +6109,3 @@ gUnknown_81069BC: @ 81069BC .global gUnknown_81069D4 gUnknown_81069D4: @ 81069D4 .incbin "baserom.gba", 0x1069D4, 0x20 - - .global gChargeMovesToStatuses -gChargeMovesToStatuses: @ 81069F4 - .incbin "baserom.gba", 0x1069F4, 0x28 diff --git a/include/charge_move.h b/include/charge_move.h index 9d10ac2..fd88a62 100644 --- a/include/charge_move.h +++ b/include/charge_move.h @@ -3,7 +3,10 @@ #include "dungeon_entity.h" +// 0x570AC +bool8 MoveMatchesChargingStatus(struct DungeonEntity *pokemon, struct PokemonMove *move); // 0x570F4 +// checkCharge = Check for the move named Charge. bool8 IsCharging(struct DungeonEntity *pokemon, bool8 checkCharge); #endif diff --git a/src/charge_move.c b/src/charge_move.c index 7fe358c..c0d09fc 100644 --- a/src/charge_move.c +++ b/src/charge_move.c @@ -1,9 +1,29 @@ #include "global.h" #include "charge_move.h" +#include "constants/move_id.h" #include "constants/status.h" #include "dungeon_util.h" +struct MultiTurnChargeMove +{ + u16 moveID; + u8 chargingStatus; +}; + +const struct MultiTurnChargeMove gMultiTurnChargeMoves[10] = { + {MOVE_SOLARBEAM, CHARGING_STATUS_SOLARBEAM}, + {MOVE_SKY_ATTACK, CHARGING_STATUS_SKY_ATTACK}, + {MOVE_RAZOR_WIND, CHARGING_STATUS_RAZOR_WIND}, + {MOVE_FOCUS_PUNCH, CHARGING_STATUS_FOCUS_PUNCH}, + {MOVE_SKULL_BASH, CHARGING_STATUS_SKULL_BASH}, + {MOVE_FLY, CHARGING_STATUS_FLY}, + {MOVE_BOUNCE, CHARGING_STATUS_BOUNCE}, + {MOVE_DIVE, CHARGING_STATUS_DIVE}, + {MOVE_DIG, CHARGING_STATUS_DIG}, + {MOVE_NONE, CHARGING_STATUS_NONE} +}; + const u32 gMultiTurnChargingStatuses[10] = { CHARGING_STATUS_SOLARBEAM, CHARGING_STATUS_SKY_ATTACK, @@ -19,6 +39,32 @@ const u32 gMultiTurnChargingStatuses[10] = { ALIGNED(4) const char chargingStatusFill[] = "pksdir0"; +bool8 MoveMatchesChargingStatus(struct DungeonEntity *pokemon, struct PokemonMove *move) +{ + if (!EntityExists(pokemon)) + { + return FALSE; + } + else + { + struct DungeonEntityData *pokemonData = pokemon->entityData; + s32 i; + for (i = 0; i < 100; i++) + { + if (gMultiTurnChargeMoves[i].moveID == MOVE_NONE) + { + return FALSE; + } + if (move->moveID == gMultiTurnChargeMoves[i].moveID && + pokemonData->chargingStatus == gMultiTurnChargeMoves[i].chargingStatus) + { + return TRUE; + } + } + return FALSE; + } +} + bool8 IsCharging(struct DungeonEntity *pokemon, bool8 checkCharge) { if (!EntityExists(pokemon)) @@ -53,4 +99,4 @@ bool8 IsCharging(struct DungeonEntity *pokemon, bool8 checkCharge) } return FALSE; } -} +}
\ No newline at end of file diff --git a/src/dungeon_ai_attack.c b/src/dungeon_ai_attack.c index e695422..0c48f24 100644 --- a/src/dungeon_ai_attack.c +++ b/src/dungeon_ai_attack.c @@ -8,6 +8,7 @@ #include "constants/status.h" #include "constants/tactic.h" #include "constants/type.h" +#include "charge_move.h" #include "dungeon_action.h" #include "dungeon_ai.h" #include "dungeon_capabilities_1.h" @@ -29,7 +30,6 @@ struct MoveTargetResults s32 moveWeight; }; -extern bool8 IsChargeMove(struct DungeonEntity*, struct PokemonMove*); extern void TargetTileInFront(struct DungeonEntity*); extern s32 FindMoveTarget(struct MoveTargetResults*, struct DungeonEntity*, struct PokemonMove*); extern bool8 IsMoveUsable(struct DungeonEntity*, s32, bool8); @@ -63,7 +63,7 @@ void DecideAttack(struct DungeonEntity *pokemon) for (i = 0; i < MAX_MON_MOVES; i++) { if (pokemonData->moves[i].moveFlags & MOVE_FLAG_EXISTS && - IsChargeMove(pokemon, &pokemonData->moves[i]) && + MoveMatchesChargingStatus(pokemon, &pokemonData->moves[i]) && pokemonData->chargingStatusMoveIndex == i) { s32 chosenMoveIndex; |