mirror of
https://github.com/pret/pmd-red.git
synced 2026-04-24 23:17:03 -05:00
sub_8055FA0
This commit is contained in:
parent
ef2868a2bc
commit
902d82fcaf
|
|
@ -5,579 +5,6 @@
|
|||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_8055FA0
|
||||
sub_8055FA0:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r10
|
||||
mov r6, r9
|
||||
mov r5, r8
|
||||
push {r5-r7}
|
||||
sub sp, 0x130
|
||||
adds r5, r0, 0
|
||||
adds r6, r1, 0
|
||||
mov r10, r2
|
||||
str r3, [sp, 0x120]
|
||||
ldr r7, [sp, 0x154]
|
||||
movs r0, 0
|
||||
mov r8, r0
|
||||
str r0, [sp, 0xC]
|
||||
movs r0, 0x1
|
||||
bl sub_804178C
|
||||
ldrh r1, [r7, 0x2]
|
||||
movs r0, 0xA5
|
||||
lsls r0, 1
|
||||
cmp r1, r0
|
||||
bne _08056010
|
||||
movs r0, 0x69
|
||||
bl DungeonRandInt
|
||||
ldr r1, _08056004
|
||||
str r0, [r1]
|
||||
add r4, sp, 0x110
|
||||
ldr r1, _08056008
|
||||
lsls r0, 3
|
||||
adds r0, r1
|
||||
ldrh r1, [r0]
|
||||
adds r0, r4, 0
|
||||
bl InitPokemonMove
|
||||
ldrb r1, [r7]
|
||||
add r0, sp, 0x110
|
||||
strb r1, [r0]
|
||||
ldrb r0, [r7, 0x1]
|
||||
strb r0, [r4, 0x1]
|
||||
ldr r0, _0805600C
|
||||
ldr r2, [r0]
|
||||
mov r1, r10
|
||||
str r1, [sp]
|
||||
movs r0, 0x1
|
||||
str r0, [sp, 0x4]
|
||||
mov r0, r8
|
||||
str r0, [sp, 0x8]
|
||||
b _08056056
|
||||
.align 2, 0
|
||||
_08056004: .4byte gUnknown_202F228
|
||||
_08056008: .4byte gUnknown_80F59C8
|
||||
_0805600C: .4byte gUnknown_80FECBC
|
||||
_08056010:
|
||||
cmp r1, 0x77
|
||||
bne _08056068
|
||||
ldr r0, _08056108
|
||||
ldr r0, [r0]
|
||||
ldr r1, _0805610C
|
||||
adds r0, r1
|
||||
movs r2, 0
|
||||
ldrsh r0, [r0, r2]
|
||||
cmp r0, 0
|
||||
bge _08056026
|
||||
movs r0, 0
|
||||
_08056026:
|
||||
cmp r0, 0x4A
|
||||
ble _0805602C
|
||||
movs r0, 0x4A
|
||||
_0805602C:
|
||||
add r4, sp, 0x118
|
||||
ldr r1, _08056110
|
||||
lsls r0, 3
|
||||
adds r0, r1
|
||||
ldrh r1, [r0]
|
||||
adds r0, r4, 0
|
||||
bl InitPokemonMove
|
||||
ldrb r1, [r7]
|
||||
add r0, sp, 0x118
|
||||
strb r1, [r0]
|
||||
ldrb r0, [r7, 0x1]
|
||||
strb r0, [r4, 0x1]
|
||||
ldr r0, _08056114
|
||||
ldr r2, [r0]
|
||||
mov r0, r10
|
||||
str r0, [sp]
|
||||
movs r0, 0x1
|
||||
str r0, [sp, 0x4]
|
||||
mov r1, r8
|
||||
str r1, [sp, 0x8]
|
||||
_08056056:
|
||||
adds r0, r5, 0
|
||||
adds r1, r7, 0
|
||||
add r3, sp, 0xC
|
||||
bl sub_8056468
|
||||
movs r0, 0x1
|
||||
bl sub_804178C
|
||||
adds r7, r4, 0
|
||||
_08056068:
|
||||
movs r2, 0
|
||||
str r2, [sp, 0x128]
|
||||
adds r0, r5, 0
|
||||
adds r1, r7, 0
|
||||
movs r2, 0x1
|
||||
bl GetMoveTargetAndRangeForPokemon
|
||||
movs r4, 0xF0
|
||||
adds r1, r4, 0
|
||||
ands r1, r0
|
||||
cmp r1, 0x50
|
||||
bne _08056084
|
||||
movs r0, 0xA
|
||||
str r0, [sp, 0x128]
|
||||
_08056084:
|
||||
adds r0, r5, 0
|
||||
adds r1, r7, 0
|
||||
movs r2, 0x1
|
||||
bl GetMoveTargetAndRangeForPokemon
|
||||
adds r1, r4, 0
|
||||
ands r1, r0
|
||||
cmp r1, 0x80
|
||||
bne _080560CC
|
||||
movs r1, 0x1
|
||||
str r1, [sp, 0x128]
|
||||
ldrh r0, [r7, 0x2]
|
||||
cmp r0, 0x97
|
||||
bne _080560AE
|
||||
adds r0, r5, 0
|
||||
bl GetApparentWeather
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, 0x1
|
||||
beq _080560CC
|
||||
_080560AE:
|
||||
ldrh r0, [r7, 0x2]
|
||||
bl DoesMoveCharge
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _080560CC
|
||||
adds r0, r5, 0
|
||||
adds r1, r7, 0
|
||||
bl MoveMatchesChargingStatus
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _080560CC
|
||||
movs r2, 0
|
||||
str r2, [sp, 0x128]
|
||||
_080560CC:
|
||||
ldr r0, _08056118
|
||||
ldr r1, [r5, 0x70]
|
||||
movs r2, 0
|
||||
bl SetMessageArgument_2
|
||||
ldr r0, _0805611C
|
||||
adds r1, r7, 0
|
||||
movs r2, 0
|
||||
bl sub_80928C0
|
||||
adds r0, r5, 0
|
||||
adds r1, r7, 0
|
||||
bl MoveMatchesChargingStatus
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08056124
|
||||
ldr r0, _08056120
|
||||
ldr r0, [r0]
|
||||
mov r8, r0
|
||||
ldr r0, [r5, 0x70]
|
||||
adds r0, 0xFF
|
||||
movs r1, 0
|
||||
strb r1, [r0]
|
||||
adds r0, r5, 0
|
||||
adds r1, r7, 0
|
||||
movs r2, 0x1
|
||||
bl sub_805744C
|
||||
b _08056142
|
||||
.align 2, 0
|
||||
_08056108: .4byte gDungeon
|
||||
_0805610C: .4byte 0x00003a0e
|
||||
_08056110: .4byte gNaturePowerMoveTable
|
||||
_08056114: .4byte gUnknown_80FECE0
|
||||
_08056118: .4byte gAvailablePokemonNames
|
||||
_0805611C: .4byte gFormatItems
|
||||
_08056120: .4byte gUnknown_80FC72C
|
||||
_08056124:
|
||||
mov r0, r10
|
||||
cmp r0, 0
|
||||
bne _08056132
|
||||
ldrh r0, [r7, 0x2]
|
||||
bl GetMoveUseText
|
||||
b _08056136
|
||||
_08056132:
|
||||
ldr r0, _08056194
|
||||
ldr r0, [r0]
|
||||
_08056136:
|
||||
mov r8, r0
|
||||
adds r0, r5, 0
|
||||
adds r1, r7, 0
|
||||
movs r2, 0x1
|
||||
bl CanMonsterUseMove
|
||||
_08056142:
|
||||
lsls r0, 24
|
||||
lsrs r4, r0, 24
|
||||
cmp r4, 0
|
||||
beq _08056156
|
||||
cmp r6, 0
|
||||
beq _08056156
|
||||
adds r0, r5, 0
|
||||
adds r1, r7, 0
|
||||
bl sub_806ACE8
|
||||
_08056156:
|
||||
ldr r0, [r5, 0x70]
|
||||
adds r0, 0xEC
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0x1
|
||||
bne _080561A0
|
||||
ldrh r0, [r7, 0x2]
|
||||
bl FailsWhileMuzzled
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _080561A0
|
||||
ldr r0, _08056198
|
||||
adds r1, r5, 0
|
||||
movs r2, 0
|
||||
bl SetMessageArgument
|
||||
adds r0, r5, 0
|
||||
mov r1, r8
|
||||
bl TryDisplayDungeonLoggableMessage
|
||||
movs r0, 0xA
|
||||
movs r1, 0x3F
|
||||
bl sub_803E708
|
||||
ldr r0, _0805619C
|
||||
_08056188:
|
||||
ldr r1, [r0]
|
||||
adds r0, r5, 0
|
||||
bl TryDisplayDungeonLoggableMessage
|
||||
_08056190:
|
||||
movs r0, 0
|
||||
b _08056446
|
||||
.align 2, 0
|
||||
_08056194: .4byte gUnknown_80F9158
|
||||
_08056198: .4byte gAvailablePokemonNames
|
||||
_0805619C: .4byte gUnknown_80FC710
|
||||
_080561A0:
|
||||
cmp r4, 0
|
||||
bne _08056214
|
||||
ldr r0, _080561D4
|
||||
ldr r1, [r5, 0x70]
|
||||
movs r2, 0
|
||||
bl SetMessageArgument_2
|
||||
mov r1, r10
|
||||
cmp r1, 0
|
||||
bne _080561E0
|
||||
ldr r0, _080561D8
|
||||
adds r1, r7, 0
|
||||
movs r2, 0
|
||||
bl sub_80928C0
|
||||
adds r0, r5, 0
|
||||
mov r1, r8
|
||||
bl TryDisplayDungeonLoggableMessage
|
||||
movs r0, 0xA
|
||||
movs r1, 0x3F
|
||||
bl sub_803E708
|
||||
ldr r0, _080561DC
|
||||
b _08056188
|
||||
.align 2, 0
|
||||
_080561D4: .4byte gAvailablePokemonNames
|
||||
_080561D8: .4byte gFormatItems
|
||||
_080561DC: .4byte gUnknown_80FC6D0
|
||||
_080561E0:
|
||||
ldr r0, _0805620C
|
||||
mov r2, r10
|
||||
lsls r1, r2, 24
|
||||
lsrs r1, 24
|
||||
movs r2, 0
|
||||
bl BufferItemName
|
||||
adds r0, r5, 0
|
||||
mov r1, r8
|
||||
bl TryDisplayDungeonLoggableMessage
|
||||
movs r0, 0xA
|
||||
movs r1, 0x3F
|
||||
bl sub_803E708
|
||||
ldr r0, _08056210
|
||||
ldr r1, [r0]
|
||||
adds r0, r5, 0
|
||||
bl TryDisplayDungeonLoggableMessage
|
||||
b _08056190
|
||||
.align 2, 0
|
||||
_0805620C: .4byte gFormatItems
|
||||
_08056210: .4byte gUnknown_80FC6FC
|
||||
_08056214:
|
||||
ldr r0, _0805625C
|
||||
movs r1, 0
|
||||
str r1, [r0]
|
||||
ldr r0, _08056260
|
||||
str r1, [r0]
|
||||
ldr r0, _08056264
|
||||
str r1, [r0]
|
||||
ldr r0, _08056268
|
||||
strb r1, [r0]
|
||||
ldr r0, _0805626C
|
||||
strb r1, [r0]
|
||||
ldr r0, _08056270
|
||||
strb r1, [r0]
|
||||
ldr r0, _08056274
|
||||
str r1, [r0]
|
||||
ldr r0, _08056278
|
||||
strb r1, [r0]
|
||||
ldr r0, [sp, 0x150]
|
||||
cmp r0, 0
|
||||
beq _0805624C
|
||||
ldr r0, [r5, 0x70]
|
||||
ldr r2, _0805627C
|
||||
adds r1, r0, r2
|
||||
ldrb r0, [r1]
|
||||
cmp r0, 0x3
|
||||
bhi _0805624C
|
||||
adds r0, 0x1
|
||||
strb r0, [r1]
|
||||
_0805624C:
|
||||
adds r0, r7, 0
|
||||
bl sub_8057070
|
||||
str r0, [sp, 0x124]
|
||||
movs r0, 0
|
||||
mov r9, r0
|
||||
b _080563E4
|
||||
.align 2, 0
|
||||
_0805625C: .4byte gUnknown_202F214
|
||||
_08056260: .4byte gUnknown_202F20C
|
||||
_08056264: .4byte gUnknown_202F210
|
||||
_08056268: .4byte gUnknown_202F218
|
||||
_0805626C: .4byte gUnknown_202F219
|
||||
_08056270: .4byte gUnknown_202F21A
|
||||
_08056274: .4byte gUnknown_202F21C
|
||||
_08056278: .4byte gUnknown_202F220
|
||||
_0805627C: .4byte 0x00000153
|
||||
_08056280:
|
||||
adds r0, r5, 0
|
||||
bl EntityExists
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _0805628E
|
||||
b _08056444
|
||||
_0805628E:
|
||||
bl sub_8044B28
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _0805629A
|
||||
b _08056444
|
||||
_0805629A:
|
||||
ldr r4, [r5, 0x70]
|
||||
ldr r0, [sp, 0x120]
|
||||
cmp r0, 0
|
||||
bne _080562AC
|
||||
ldrh r0, [r7, 0x2]
|
||||
cmp r0, 0x19
|
||||
beq _080562AC
|
||||
cmp r0, 0xE3
|
||||
bne _080562BE
|
||||
_080562AC:
|
||||
adds r0, r5, 0
|
||||
bl IsSleeping
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _080562CE
|
||||
adds r0, r5, 0
|
||||
movs r1, 0x1
|
||||
b _080562C2
|
||||
_080562BE:
|
||||
adds r0, r5, 0
|
||||
movs r1, 0
|
||||
_080562C2:
|
||||
bl CannotAttack
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _080562CE
|
||||
b _08056400
|
||||
_080562CE:
|
||||
movs r1, 0xA5
|
||||
lsls r1, 1
|
||||
adds r0, r4, r1
|
||||
movs r6, 0
|
||||
strb r6, [r0]
|
||||
ldrh r0, [r7, 0x2]
|
||||
cmp r0, 0x9
|
||||
bne _080562F4
|
||||
ldr r4, [r5, 0x70]
|
||||
movs r0, 0x8
|
||||
bl DungeonRandInt
|
||||
adds r4, 0x46
|
||||
strb r0, [r4]
|
||||
adds r0, r5, 0
|
||||
bl TargetTileInFront
|
||||
movs r2, 0
|
||||
str r2, [sp, 0x12C]
|
||||
_080562F4:
|
||||
ldr r0, _080563A0
|
||||
str r6, [r0]
|
||||
str r6, [sp, 0xC]
|
||||
ldr r0, [sp, 0x128]
|
||||
cmp r0, 0x1
|
||||
bhi _08056324
|
||||
add r0, sp, 0xC
|
||||
adds r1, r5, 0
|
||||
adds r2, r7, 0
|
||||
bl sub_8056CE8
|
||||
add r0, sp, 0xC
|
||||
adds r1, r5, 0
|
||||
bl sub_80574C4
|
||||
mov r1, r9
|
||||
cmp r1, 0
|
||||
beq _08056324
|
||||
ldr r2, [sp, 0x12C]
|
||||
cmp r2, 0
|
||||
beq _08056324
|
||||
ldr r0, [sp, 0xC]
|
||||
cmp r0, 0
|
||||
beq _08056400
|
||||
_08056324:
|
||||
mov r0, r10
|
||||
str r0, [sp]
|
||||
movs r0, 0
|
||||
mov r1, r9
|
||||
cmp r1, 0
|
||||
bne _08056332
|
||||
movs r0, 0x1
|
||||
_08056332:
|
||||
str r0, [sp, 0x4]
|
||||
ldr r2, [sp, 0x128]
|
||||
str r2, [sp, 0x8]
|
||||
adds r0, r5, 0
|
||||
adds r1, r7, 0
|
||||
mov r2, r8
|
||||
add r3, sp, 0xC
|
||||
bl sub_8056468
|
||||
lsls r0, 24
|
||||
lsrs r4, r0, 24
|
||||
movs r0, 0
|
||||
mov r8, r0
|
||||
ldr r0, _080563A0
|
||||
ldr r0, [r0]
|
||||
cmp r0, 0
|
||||
beq _08056358
|
||||
bl sub_806A1E8
|
||||
_08056358:
|
||||
ldr r1, [r5, 0x70]
|
||||
adds r0, r1, 0
|
||||
adds r0, 0xBC
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0x2
|
||||
beq _0805637C
|
||||
cmp r0, 0x4
|
||||
beq _0805637C
|
||||
movs r2, 0xB6
|
||||
lsls r2, 1
|
||||
adds r0, r1, r2
|
||||
mov r2, r8
|
||||
strh r2, [r0]
|
||||
movs r2, 0xB7
|
||||
lsls r2, 1
|
||||
adds r0, r1, r2
|
||||
mov r1, r8
|
||||
strh r1, [r0]
|
||||
_0805637C:
|
||||
ldr r1, _080563A4
|
||||
ldr r0, [r1]
|
||||
adds r0, 0x1
|
||||
str r0, [r1]
|
||||
ldr r2, [sp, 0x128]
|
||||
cmp r2, 0
|
||||
beq _080563A8
|
||||
mov r0, r10
|
||||
str r0, [sp]
|
||||
ldr r1, [sp, 0x150]
|
||||
str r1, [sp, 0x4]
|
||||
adds r0, r5, 0
|
||||
adds r1, r7, 0
|
||||
adds r3, r4, 0
|
||||
bl sub_80566F8
|
||||
b _080563B8
|
||||
.align 2, 0
|
||||
_080563A0: .4byte gUnknown_203B438
|
||||
_080563A4: .4byte gUnknown_202F214
|
||||
_080563A8:
|
||||
ldr r2, [sp, 0x150]
|
||||
str r2, [sp]
|
||||
add r0, sp, 0xC
|
||||
adds r1, r5, 0
|
||||
adds r2, r7, 0
|
||||
mov r3, r10
|
||||
bl sub_8053704
|
||||
_080563B8:
|
||||
adds r0, r5, 0
|
||||
bl EntityExists
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08056400
|
||||
adds r0, r5, 0
|
||||
bl sub_806CF18
|
||||
ldr r0, [r5, 0x70]
|
||||
movs r2, 0xA5
|
||||
lsls r2, 1
|
||||
adds r1, r0, r2
|
||||
ldrb r0, [r1]
|
||||
cmp r0, 0
|
||||
bne _080563E0
|
||||
strb r0, [r1]
|
||||
adds r0, r5, 0
|
||||
bl sub_8079764
|
||||
_080563E0:
|
||||
movs r0, 0x1
|
||||
add r9, r0
|
||||
_080563E4:
|
||||
ldr r1, [sp, 0x124]
|
||||
cmp r9, r1
|
||||
bge _08056400
|
||||
movs r2, 0x1
|
||||
str r2, [sp, 0x12C]
|
||||
ldr r0, _08056458
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0
|
||||
bne _08056400
|
||||
ldr r0, _0805645C
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0
|
||||
bne _08056400
|
||||
b _08056280
|
||||
_08056400:
|
||||
ldr r0, _08056460
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0
|
||||
beq _08056418
|
||||
adds r0, r5, 0
|
||||
adds r1, r5, 0
|
||||
bl SendImmobilizeEndMessage
|
||||
adds r0, r5, 0
|
||||
adds r1, r5, 0
|
||||
bl SendLinkedEndMessage
|
||||
_08056418:
|
||||
ldr r0, _08056464
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0
|
||||
beq _08056444
|
||||
adds r0, r5, 0
|
||||
bl EntityExists
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08056444
|
||||
ldr r4, [r5, 0x70]
|
||||
adds r0, r5, 0
|
||||
adds r1, r5, 0
|
||||
movs r2, 0
|
||||
bl ConfuseStatusTarget
|
||||
adds r4, 0xFB
|
||||
ldrb r0, [r4]
|
||||
cmp r0, 0
|
||||
bne _08056444
|
||||
movs r0, 0x1
|
||||
strb r0, [r4]
|
||||
_08056444:
|
||||
movs r0, 0x1
|
||||
_08056446:
|
||||
add sp, 0x130
|
||||
pop {r3-r5}
|
||||
mov r8, r3
|
||||
mov r9, r4
|
||||
mov r10, r5
|
||||
pop {r4-r7}
|
||||
pop {r1}
|
||||
bx r1
|
||||
.align 2, 0
|
||||
_08056458: .4byte gUnknown_202F220
|
||||
_0805645C: .4byte gUnknown_202F221
|
||||
_08056460: .4byte gUnknown_202F21A
|
||||
_08056464: .4byte gUnknown_202F219
|
||||
thumb_func_end sub_8055FA0
|
||||
|
||||
thumb_func_start sub_8056468
|
||||
sub_8056468:
|
||||
push {r4-r7,lr}
|
||||
|
|
|
|||
|
|
@ -260,7 +260,7 @@ typedef struct EntityInfo
|
|||
/* 0xF8 */ bool8 speedStageChanged; // Toggled when pokemon is movement speed is sped up
|
||||
/* 0xF9 */ u8 unkF9;
|
||||
/* 0xFA */ u8 terrifiedTurns; // Doubles as a bool for whether the Pokémon is terrified.
|
||||
u8 expMultiplier;
|
||||
/* 0xFB */ u8 expMultiplier;
|
||||
// Set to true if the player makes a teammate use their held item.
|
||||
// This is done by going to the teammate's held item in the toolbox and selecting "Use".
|
||||
/* 0xFC */ bool8 useHeldItem;
|
||||
|
|
|
|||
|
|
@ -1082,6 +1082,7 @@ static void CreateMessageLogArrow(bool8 upArrow, s32 y)
|
|||
#include "structs/str_damage.h"
|
||||
#include "constants/ability.h"
|
||||
#include "constants/status.h"
|
||||
#include "constants/weather.h"
|
||||
#include "type_chart.h"
|
||||
#include "position_util.h"
|
||||
#include "code_806CD90.h"
|
||||
|
|
@ -1090,9 +1091,14 @@ static void CreateMessageLogArrow(bool8 upArrow, s32 y)
|
|||
#include "dungeon_capabilities.h"
|
||||
#include "move_effects_target.h"
|
||||
#include "status.h"
|
||||
#include "weather.h"
|
||||
#include "code_8077274_1.h"
|
||||
#include "charge_move.h"
|
||||
#include "dungeon_random.h"
|
||||
#include "targeting_flags.h"
|
||||
#include "targeting.h"
|
||||
|
||||
NAKED void sub_8053704(void)
|
||||
NAKED void sub_8053704(s32 *sp, Entity *entity, Move *move, s32 itemId, s32 a4)
|
||||
{
|
||||
asm_unified("\n"
|
||||
" push {r4-r7,lr}\n"
|
||||
|
|
@ -4504,6 +4510,7 @@ NAKED void sub_8053704(void)
|
|||
s32 sub_8055640(Entity *, Entity *, Move *, s32, s32);
|
||||
s32 sub_8055728(Entity *attacker, Entity *target, Move *move, struct DamageStruct *dmgStruct, s16 unk);
|
||||
bool8 sub_8056B34(Entity *attacker, Entity *target, Move *move, s32 accuracyType, bool8 unkBool);
|
||||
bool8 sub_8055FA0(struct Entity *entity, u32 r6, s32 itemId, u32 var_30, u32 arg_0, struct Move *move);
|
||||
|
||||
UNUSED bool32 sub_8055620(Entity *a0, Entity *a1, Move *a2, s32 a3)
|
||||
{
|
||||
|
|
@ -4515,6 +4522,8 @@ extern void sub_806EAF4(Entity *, Entity *, u8, u32, u32, struct DamageStruct *d
|
|||
extern s16 sub_8057600(Move *move, s32 itemID);
|
||||
extern void sub_803ED30(s32, Entity *r0, u8, s32);
|
||||
extern void sub_8042238(Entity *pokemon, Entity *target);
|
||||
extern void sub_806A1E8(Entity *pokemon);
|
||||
extern void sub_80574C4(s32 *a0, s32 a1);
|
||||
|
||||
extern const u8 *const gUnknown_80F9688;
|
||||
|
||||
|
|
@ -4673,13 +4682,13 @@ extern u8 gUnknown_202F221;
|
|||
extern u8 gUnknown_202F222;
|
||||
extern s32 gUnknown_202F208;
|
||||
|
||||
extern bool8 sub_8055FA0(struct Entity *, u32, u32, u32, u32, struct Move *);
|
||||
|
||||
extern bool8 sub_8044B28(void);
|
||||
extern void sub_804178C(u32);
|
||||
extern void sub_8071DA4(Entity *);
|
||||
extern void sub_80428A0(Entity *r0);
|
||||
|
||||
bool32 sub_8055A00(Entity *entity, s32 firstMoveId, s32 var_34, bool32 isOrb, s32 arg_0)
|
||||
bool32 sub_8055A00(Entity *entity, s32 firstMoveId, s32 var_34, s32 itemId, s32 arg_0)
|
||||
{
|
||||
s32 i, j;
|
||||
s32 moveId;
|
||||
|
|
@ -4774,10 +4783,10 @@ bool32 sub_8055A00(Entity *entity, s32 firstMoveId, s32 var_34, bool32 isOrb, s3
|
|||
assistMove.id = sub_8057144(entity);
|
||||
sub_80928C0(gFormatItems, &assistMove, NULL);
|
||||
TryDisplayDungeonLoggableMessage(entity, gUnknown_80FD2DC); // Assist:
|
||||
r0 = sub_8055FA0(entity, var_34, isOrb, arg_0, var_2C, &assistMove);
|
||||
r0 = sub_8055FA0(entity, var_34, itemId, arg_0, var_2C, &assistMove);
|
||||
}
|
||||
else {
|
||||
r0 = sub_8055FA0(entity, var_34, isOrb, arg_0, var_2C, currMove);
|
||||
r0 = sub_8055FA0(entity, var_34, itemId, arg_0, var_2C, currMove);
|
||||
}
|
||||
|
||||
if (var_28 && r0) {
|
||||
|
|
@ -4790,7 +4799,7 @@ bool32 sub_8055A00(Entity *entity, s32 firstMoveId, s32 var_34, bool32 isOrb, s3
|
|||
}
|
||||
|
||||
if (unkBefore == gUnknown_202F208) {
|
||||
if (!isOrb) {
|
||||
if (!itemId) {
|
||||
TryDisplayDungeonLoggableMessage(entity, gUnknown_80FC690); // The currMove failed!
|
||||
}
|
||||
else {
|
||||
|
|
@ -4825,7 +4834,7 @@ bool32 sub_8055A00(Entity *entity, s32 firstMoveId, s32 var_34, bool32 isOrb, s3
|
|||
sub_80928C0(gFormatItems, &assistMove, NULL);
|
||||
TryDisplayDungeonLoggableMessage(entity, gUnknown_80FD2DC); // Assist:
|
||||
}
|
||||
sub_8055FA0(entity, 0, isOrb, arg_0, var_2C, movePtr);
|
||||
sub_8055FA0(entity, 0, itemId, arg_0, var_2C, movePtr);
|
||||
}
|
||||
sub_804178C(1);
|
||||
}
|
||||
|
|
@ -4860,6 +4869,15 @@ extern const u8 *const gUnknown_80FEF54;
|
|||
extern const u8 *const gUnknown_80FEF74;
|
||||
extern const u8 *const gUnknown_80FEF98;
|
||||
extern const u8 *const gUnknown_80FEFD0;
|
||||
extern const u8 *const gUnknown_80FECA4;
|
||||
extern const u8 *const gUnknown_80F9158;
|
||||
extern const u8 *const gUnknown_80FC72C;
|
||||
extern const u8 *const gUnknown_80FC700;
|
||||
extern const u8 *const gUnknown_80FC6D0;
|
||||
extern const u8 *const gUnknown_80FC710;
|
||||
extern const u8 *const gUnknown_80FC6FC;
|
||||
extern const u8 *const gUnknown_80FECBC;
|
||||
extern const u8 *const gUnknown_80FECE0;
|
||||
|
||||
void TriggerAbilityEffect(Entity *entity)
|
||||
{
|
||||
|
|
@ -4916,3 +4934,231 @@ void TriggerAbilityEffect(Entity *entity)
|
|||
entInfo->abilityEffectFlags = 0;
|
||||
}
|
||||
}
|
||||
|
||||
extern s32 gUnknown_202F228;
|
||||
|
||||
// Todo: unify
|
||||
typedef bool8 (*MoveCallback)(Entity *pokemon, Entity *target, Move *move, s32 param_4);
|
||||
struct NaturePowerMove
|
||||
{
|
||||
u16 moveID;
|
||||
u16 unk2;
|
||||
MoveCallback move;
|
||||
};
|
||||
extern const struct NaturePowerMove gUnknown_80F59C8[];
|
||||
extern const struct NaturePowerMove gNaturePowerMoveTable[];
|
||||
|
||||
extern void sub_806ACE8(Entity *entity, Move *move);
|
||||
extern s32 sub_8057070(Move *move);
|
||||
|
||||
bool8 sub_8056468(Entity *entity, Move *move, const u8 *str, s32 *unkArray, bool32 itemId, bool8 arg_4, bool32 unused);
|
||||
bool8 sub_805744C(Entity * pokemon, Move *move, bool8 param_3);
|
||||
void sub_8056CE8(s32 *, Entity * pokemon, Move *move);
|
||||
void sub_80566F8(Entity*, Move *, s32 a2, bool8 a3, s32 a4, s32 a5);
|
||||
|
||||
extern s32 gUnknown_202F214;
|
||||
extern s32 gUnknown_202F20C;
|
||||
extern s32 gUnknown_202F210;
|
||||
extern s32 gUnknown_202F21C;
|
||||
extern Entity *gUnknown_203B438;
|
||||
extern u8 gUnknown_202F218;
|
||||
extern u8 gUnknown_202F219;
|
||||
extern u8 gUnknown_202F21A;
|
||||
extern u8 gUnknown_202F220;
|
||||
extern u8 gUnknown_202F221;
|
||||
|
||||
bool8 sub_8055FA0(struct Entity *entity, u32 r6, s32 itemId, u32 var_30, u32 arg_0, struct Move *move)
|
||||
{
|
||||
s32 i;
|
||||
s32 var_144[65]; //????
|
||||
const u8 *msg;
|
||||
Move metronomeMove, naturePwrMove;
|
||||
s32 var_2C;
|
||||
s32 var_28;
|
||||
s32 var_24;
|
||||
bool8 moveUsable;
|
||||
|
||||
msg = NULL;
|
||||
var_144[0] = 0;
|
||||
|
||||
sub_804178C(1);
|
||||
if (move->id == MOVE_METRONOME) {
|
||||
gUnknown_202F228 = DungeonRandInt(105);
|
||||
InitPokemonMove(&metronomeMove, gUnknown_80F59C8[gUnknown_202F228].moveID);
|
||||
metronomeMove.moveFlags = move->moveFlags;
|
||||
metronomeMove.moveFlags2 = move->moveFlags2;
|
||||
sub_8056468(entity, move, gUnknown_80FECBC, var_144, itemId, TRUE, FALSE);
|
||||
sub_804178C(1);
|
||||
move = &metronomeMove;
|
||||
}
|
||||
else if (move->id == MOVE_NATURE_POWER)
|
||||
{
|
||||
s32 tileset = gDungeon->tileset;
|
||||
|
||||
if (tileset < 0)
|
||||
tileset = 0;
|
||||
if (tileset > 74)
|
||||
tileset = 74;
|
||||
|
||||
InitPokemonMove(&naturePwrMove, gNaturePowerMoveTable[tileset].moveID);
|
||||
naturePwrMove.moveFlags = move->moveFlags;
|
||||
naturePwrMove.moveFlags2 = move->moveFlags2;
|
||||
sub_8056468(entity, move, gUnknown_80FECE0, var_144, itemId, TRUE, FALSE);
|
||||
sub_804178C(1);
|
||||
move = &naturePwrMove;
|
||||
}
|
||||
|
||||
var_28 = 0;
|
||||
if ((GetMoveTargetAndRangeForPokemon(entity, move, TRUE)
|
||||
& (0xF0)) == TARGETING_FLAG_TARGET_LINE)
|
||||
{
|
||||
var_28 = 10;
|
||||
}
|
||||
if ((GetMoveTargetAndRangeForPokemon(entity, move, TRUE)
|
||||
& (0xF0)) == TARGETING_FLAG_CUT_CORNERS)
|
||||
{
|
||||
var_28 = 1;
|
||||
if ((move->id != MOVE_SOLARBEAM || GetApparentWeather(entity) != WEATHER_SUNNY) && DoesMoveCharge(move->id)) {
|
||||
if (!MoveMatchesChargingStatus(entity, move)) {
|
||||
var_28 = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SetMessageArgument_2(gAvailablePokemonNames, GetEntInfo(entity), 0);
|
||||
sub_80928C0(gFormatItems, move, NULL);
|
||||
if (MoveMatchesChargingStatus(entity, move)) {
|
||||
msg = gUnknown_80FC72C; // mon loosed move
|
||||
GetEntInfo(entity)->unkFF = 0;
|
||||
moveUsable = sub_805744C(entity, move, TRUE);
|
||||
}
|
||||
else {
|
||||
if (!itemId) {
|
||||
msg = GetMoveUseText(move->id);
|
||||
}
|
||||
else {
|
||||
msg = gUnknown_80F9158;
|
||||
}
|
||||
moveUsable = CanMonsterUseMove(entity, move, TRUE);
|
||||
}
|
||||
|
||||
if (moveUsable && r6) {
|
||||
sub_806ACE8(entity, move);
|
||||
}
|
||||
|
||||
if (GetEntInfo(entity)->muzzled.muzzled == TRUE && FailsWhileMuzzled(move->id)) {
|
||||
SetMessageArgument(gAvailablePokemonNames, entity, 0);
|
||||
TryDisplayDungeonLoggableMessage(entity, msg);
|
||||
sub_803E708(0xA, 0x3F);
|
||||
TryDisplayDungeonLoggableMessage(entity, gUnknown_80FC710); // is muzzled!
|
||||
return FALSE;
|
||||
}
|
||||
else if (!moveUsable) {
|
||||
SetMessageArgument_2(gAvailablePokemonNames, GetEntInfo(entity), 0);
|
||||
if (!itemId) {
|
||||
sub_80928C0(gFormatItems, move, NULL);
|
||||
TryDisplayDungeonLoggableMessage(entity, msg);
|
||||
sub_803E708(0xA, 0x3F);
|
||||
TryDisplayDungeonLoggableMessage(entity, gUnknown_80FC6D0); // But the move couldn't be used!
|
||||
}
|
||||
else {
|
||||
BufferItemName(gFormatItems, itemId, NULL);
|
||||
TryDisplayDungeonLoggableMessage(entity, msg);
|
||||
sub_803E708(0xA, 0x3F);
|
||||
TryDisplayDungeonLoggableMessage(entity, gUnknown_80FC6FC); // But Orbs are prevented from being used!
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
gUnknown_202F214 = 0;
|
||||
gUnknown_202F20C = 0;
|
||||
gUnknown_202F210 = 0;
|
||||
gUnknown_202F218 = 0;
|
||||
gUnknown_202F219 = 0;
|
||||
gUnknown_202F21A = 0;
|
||||
gUnknown_202F21C = 0;
|
||||
gUnknown_202F220 = 0;
|
||||
if (arg_0 && GetEntInfo(entity)->unk153 <= 3) {
|
||||
GetEntInfo(entity)->unk153++;
|
||||
}
|
||||
|
||||
var_2C = sub_8057070(move);
|
||||
for (i = 0; i < var_2C; i++) {
|
||||
u8 r4;
|
||||
EntityInfo *entInfo;
|
||||
|
||||
var_24 = 1;
|
||||
if (gUnknown_202F220 != 0 || gUnknown_202F221 != 0)
|
||||
break;
|
||||
if (!EntityExists(entity) || sub_8044B28())
|
||||
return TRUE;
|
||||
|
||||
entInfo = GetEntInfo(entity);
|
||||
if (var_30 != 0 || move->id == MOVE_SNORE || move->id == MOVE_SLEEP_TALK) {
|
||||
if (!IsSleeping(entity) && CannotAttack(entity, TRUE))
|
||||
break;
|
||||
}
|
||||
else {
|
||||
if (CannotAttack(entity, FALSE))
|
||||
break;
|
||||
}
|
||||
entInfo->unk14A = 0;
|
||||
if (move->id == MOVE_THRASH) {
|
||||
GetEntInfo(entity)->action.direction = DungeonRandInt(NUM_DIRECTIONS);
|
||||
TargetTileInFront(entity);
|
||||
var_24 = 0;
|
||||
}
|
||||
gUnknown_203B438 = NULL;
|
||||
var_144[0] = 0;
|
||||
if (var_28 == 0 || var_28 == 1) {
|
||||
sub_8056CE8(var_144, entity, move);
|
||||
sub_80574C4(var_144, (s32) entity); // Todo fix sub_80574C4
|
||||
if (i != 0 && var_24 != 0 && var_144[0] == 0)
|
||||
break;
|
||||
}
|
||||
r4 = sub_8056468(entity, move, msg, var_144, itemId, (i == 0), var_28);
|
||||
msg = NULL;
|
||||
if (gUnknown_203B438 != 0) {
|
||||
sub_806A1E8(gUnknown_203B438);
|
||||
}
|
||||
|
||||
if (GetEntInfo(entity)->volatileStatus.volatileStatus != STATUS_CONFUSED && GetEntInfo(entity)->volatileStatus.volatileStatus != STATUS_COWERING) {
|
||||
EntityInfo *entInfo = GetEntInfo(entity);
|
||||
entInfo->targetPos.x = 0;
|
||||
entInfo->targetPos.y = 0;
|
||||
}
|
||||
|
||||
gUnknown_202F214++;
|
||||
if (var_28 != 0) {
|
||||
sub_80566F8(entity, move, var_28, r4, itemId, arg_0);
|
||||
}
|
||||
else {
|
||||
sub_8053704(var_144, entity, move, itemId, arg_0);
|
||||
}
|
||||
|
||||
if (!EntityExists(entity))
|
||||
break;
|
||||
|
||||
sub_806CF18(entity);
|
||||
if (GetEntInfo(entity)->unk14A == 0) {
|
||||
GetEntInfo(entity)->unk14A = 0; // Redundant as it's already 0
|
||||
sub_8079764(entity);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (gUnknown_202F21A != 0) {
|
||||
SendImmobilizeEndMessage(entity, entity);
|
||||
SendLinkedEndMessage(entity, entity);
|
||||
}
|
||||
|
||||
if (gUnknown_202F219 != 0 && EntityExists(entity)) {
|
||||
EntityInfo *entInfo = GetEntInfo(entity);
|
||||
|
||||
ConfuseStatusTarget(entity, entity, FALSE);
|
||||
SetExpMultplier(entInfo);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
//
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user