summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnonymousRandomPerson <chenghanngan.us@gmail.com>2022-02-05 20:23:01 -0500
committerAnonymousRandomPerson <chenghanngan.us@gmail.com>2022-02-05 20:23:01 -0500
commita9b5977d4ca6c0aeedea966a0165b625a4c2dbab (patch)
treebd0ceaf643aafb41fc5bb4e87936dc7b638ddd31
parentf728e7e90ebd50521dbc32f7f2b2be5858d91477 (diff)
Decomped MoveMatchesChargingStatus
-rw-r--r--asm/code_8040094.s2
-rw-r--r--asm/code_80521D0.s59
-rw-r--r--asm/code_8057144.s2
-rw-r--r--asm/code_8057824.s16
-rw-r--r--asm/code_80701A4.s2
-rw-r--r--data/data_80F59C8.s4
-rw-r--r--include/charge_move.h3
-rw-r--r--src/charge_move.c48
-rw-r--r--src/dungeon_ai_attack.c4
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;