lazy day so more decomp away

This commit is contained in:
Seth Barberee
2022-04-22 19:02:28 -07:00
parent 01ca155b81
commit 519c9ebb6a
9 changed files with 427 additions and 877 deletions

View File

@@ -5,482 +5,6 @@
.text
thumb_func_start sub_8057A0C
sub_8057A0C:
push {r4-r7,lr}
mov r7, r8
push {r7}
adds r5, r0, 0
adds r6, r1, 0
ldr r2, [r5, 0x70]
mov r8, r2
ldr r0, [r6, 0x70]
adds r3, r0, 0
movs r1, 0xE
ldrsh r0, [r2, r1]
movs r4, 0xE
ldrsh r1, [r3, r4]
adds r0, r1
lsrs r1, r0, 31
adds r0, r1
asrs r0, 1
strh r0, [r2, 0xE]
strh r0, [r3, 0xE]
movs r7, 0xE
ldrsh r1, [r2, r7]
ldrh r4, [r2, 0x10]
movs r7, 0x10
ldrsh r0, [r2, r7]
cmp r1, r0
ble _08057A42
strh r4, [r2, 0xE]
_08057A42:
movs r0, 0xE
ldrsh r1, [r3, r0]
ldrh r2, [r3, 0x10]
movs r4, 0x10
ldrsh r0, [r3, r4]
cmp r1, r0
ble _08057A52
strh r2, [r3, 0xE]
_08057A52:
ldr r4, _08057A90
adds r0, r4, 0
adds r1, r5, 0
movs r2, 0
bl SetMessageArgument
adds r4, 0x50
adds r0, r4, 0
adds r1, r6, 0
movs r2, 0
bl SetMessageArgument
mov r1, r8
adds r1, 0xFB
ldrb r0, [r1]
cmp r0, 0
bne _08057A78
movs r0, 0x1
strb r0, [r1]
_08057A78:
ldr r0, _08057A94
ldr r2, [r0]
adds r0, r5, 0
adds r1, r6, 0
bl sub_80522F4
movs r0, 0x1
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r1}
bx r1
.align 2, 0
_08057A90: .4byte gAvailablePokemonNames
_08057A94: .4byte gUnknown_80FC7EC
thumb_func_end sub_8057A0C
thumb_func_start TormentMoveAction
TormentMoveAction:
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x10
mov r10, r0
mov r8, r1
ldr r0, [r1, 0x70]
str r0, [sp, 0x8]
movs r1, 0
str r1, [sp, 0xC]
movs r1, 0x8C
lsls r1, 1
adds r4, r0, r1
adds r5, r4, 0
movs r0, 0x10
mov r9, r0
movs r7, 0x3
_08057ABE:
ldrb r1, [r4]
movs r0, 0x1
ands r0, r1
cmp r0, 0
beq _08057B12
movs r6, 0x20
movs r0, 0x20
ands r0, r1
cmp r0, 0
bne _08057B04
mov r0, r9
ands r0, r1
cmp r0, 0
beq _08057B12
ldr r0, _08057AFC
adds r1, r5, 0
movs r2, 0
bl sub_80928C0
ldr r0, _08057B00
ldr r2, [r0]
mov r0, r10
mov r1, r8
bl sub_80522F4
ldrb r0, [r4]
orrs r0, r6
strb r0, [r4]
movs r1, 0x1
str r1, [sp, 0xC]
b _08057B12
.align 2, 0
_08057AFC: .4byte gUnknown_202DE58
_08057B00: .4byte gUnknown_80FCFBC
_08057B04:
mov r0, r9
ands r0, r1
cmp r0, 0
bne _08057B12
movs r0, 0xDF
ands r0, r1
strb r0, [r4]
_08057B12:
adds r4, 0x8
adds r5, 0x8
subs r7, 0x1
cmp r7, 0
bge _08057ABE
ldr r0, [sp, 0x8]
movs r1, 0x9C
lsls r1, 1
adds r4, r0, r1
ldrb r1, [r4]
movs r0, 0x20
ands r0, r1
cmp r0, 0
bne _08057B6C
movs r0, 0x10
ands r0, r1
cmp r0, 0
beq _08057B7A
movs r1, 0xB0
lsls r1, 1
mov r0, sp
bl InitPokemonMove
ldrb r1, [r4]
movs r0, 0x20
orrs r0, r1
strb r0, [r4]
movs r0, 0x1
str r0, [sp, 0xC]
ldr r0, _08057B64
mov r1, sp
movs r2, 0
bl sub_80928C0
ldr r0, _08057B68
ldr r2, [r0]
mov r0, r10
mov r1, r8
bl sub_80522F4
b _08057B7A
.align 2, 0
_08057B64: .4byte gUnknown_202DE58
_08057B68: .4byte gUnknown_80FCFBC
_08057B6C:
movs r0, 0x10
ands r0, r1
cmp r0, 0
bne _08057B7A
movs r0, 0xDF
ands r0, r1
strb r0, [r4]
_08057B7A:
ldr r1, [sp, 0xC]
cmp r1, 0
beq _08057B90
ldr r1, [sp, 0x8]
adds r1, 0xC0
ldrb r0, [r1]
cmp r0, 0x1
bne _08057B9C
movs r0, 0
strb r0, [r1]
b _08057B9C
_08057B90:
ldr r0, _08057BB0
ldr r2, [r0]
mov r0, r10
mov r1, r8
bl sub_80522F4
_08057B9C:
ldr r0, [sp, 0xC]
add sp, 0x10
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r1}
bx r1
.align 2, 0
_08057BB0: .4byte gUnknown_80FCFE4
thumb_func_end TormentMoveAction
thumb_func_start sub_8057BB4
sub_8057BB4:
push {lr}
movs r2, 0x1
movs r3, 0x1
bl sub_80779F0
movs r0, 0x1
pop {r1}
bx r1
thumb_func_end sub_8057BB4
thumb_func_start sub_8057BC4
sub_8057BC4:
push {r4,r5,lr}
adds r4, r0, 0
adds r5, r1, 0
movs r2, 0x1
bl sub_8077AE4
ldr r0, _08057BE8
ldr r2, [r0]
adds r0, r4, 0
adds r1, r5, 0
movs r3, 0x2
bl sub_8077084
movs r0, 0x1
pop {r4,r5}
pop {r1}
bx r1
.align 2, 0
_08057BE8: .4byte gUnknown_8106A4C
thumb_func_end sub_8057BC4
thumb_func_start sub_8057BEC
sub_8057BEC:
push {r4-r7,lr}
mov r7, r8
push {r7}
sub sp, 0x4
adds r4, r0, 0
adds r5, r1, 0
adds r7, r2, 0
adds r6, r3, 0
movs r0, 0
mov r8, r0
adds r0, r4, 0
bl IsSleeping
lsls r0, 24
cmp r0, 0
beq _08057C48
movs r3, 0x80
lsls r3, 1
str r6, [sp]
adds r0, r4, 0
adds r1, r5, 0
adds r2, r7, 0
bl sub_8055640
cmp r0, 0
beq _08057C54
movs r1, 0x1
mov r8, r1
ldr r0, _08057C44
movs r1, 0
ldrsh r2, [r0, r1]
adds r0, r4, 0
adds r1, r5, 0
bl sub_805727C
lsls r0, 24
cmp r0, 0
beq _08057C54
adds r0, r4, 0
adds r1, r5, 0
movs r2, 0
bl sub_80776C0
b _08057C54
.align 2, 0
_08057C44: .4byte gUnknown_80F4E0A
_08057C48:
ldr r0, _08057C64
ldr r2, [r0]
adds r0, r4, 0
adds r1, r5, 0
bl sub_80522F4
_08057C54:
mov r0, r8
add sp, 0x4
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r1}
bx r1
.align 2, 0
_08057C64: .4byte gUnknown_80FC734
thumb_func_end sub_8057BEC
thumb_func_start sub_8057C68
sub_8057C68:
push {lr}
sub sp, 0x4
ldr r2, _08057C84
ldr r2, [r2]
movs r3, 0x1
str r3, [sp]
movs r3, 0x40
bl sub_8077434
movs r0, 0x1
add sp, 0x4
pop {r1}
bx r1
.align 2, 0
_08057C84: .4byte gUnknown_8106A4C
thumb_func_end sub_8057C68
thumb_func_start sub_8057C88
sub_8057C88:
push {r4-r7,lr}
sub sp, 0x4
adds r5, r0, 0
adds r6, r1, 0
movs r7, 0
movs r4, 0x80
lsls r4, 1
str r3, [sp]
adds r3, r4, 0
bl sub_8055640
cmp r0, 0
beq _08057CC2
movs r7, 0x1
ldr r0, _08057CCC
movs r1, 0
ldrsh r2, [r0, r1]
adds r0, r5, 0
adds r1, r6, 0
bl sub_805727C
lsls r0, 24
cmp r0, 0
beq _08057CC2
adds r0, r5, 0
adds r1, r6, 0
movs r2, 0
bl sub_80776C0
_08057CC2:
adds r0, r7, 0
add sp, 0x4
pop {r4-r7}
pop {r1}
bx r1
.align 2, 0
_08057CCC: .4byte gUnknown_80F4DF6
thumb_func_end sub_8057C88
thumb_func_start sub_8057CD0
sub_8057CD0:
push {r4-r6,lr}
mov r6, r8
push {r6}
sub sp, 0x8
adds r4, r0, 0
adds r6, r1, 0
mov r8, r2
adds r5, r3, 0
bl GetWeather
lsls r0, 24
lsrs r0, 24
ldr r1, _08057D18
adds r1, r0, r1
ldrb r2, [r1]
ldr r1, _08057D1C
lsls r0, 2
adds r0, r1
ldr r0, [r0]
str r0, [sp]
str r5, [sp, 0x4]
adds r0, r4, 0
adds r1, r6, 0
mov r3, r8
bl sub_80556BC
cmp r0, 0
beq _08057D0A
movs r0, 0x1
_08057D0A:
add sp, 0x8
pop {r3}
mov r8, r3
pop {r4-r6}
pop {r1}
bx r1
.align 2, 0
_08057D18: .4byte gUnknown_80F51E4
_08057D1C: .4byte gUnknown_80F51EC
thumb_func_end sub_8057CD0
thumb_func_start sub_8057D20
sub_8057D20:
push {r4-r7,lr}
sub sp, 0x4
adds r5, r0, 0
adds r4, r1, 0
movs r7, 0
ldr r0, [r4, 0x70]
adds r0, 0xC0
ldrb r0, [r0]
movs r6, 0x80
lsls r6, 1
cmp r0, 0x9
bne _08057D3C
movs r6, 0x80
lsls r6, 2
_08057D3C:
str r3, [sp]
adds r0, r5, 0
adds r1, r4, 0
adds r3, r6, 0
bl sub_8055640
cmp r0, 0
beq _08057D6E
movs r7, 0x1
ldr r0, _08057D78
movs r1, 0
ldrsh r2, [r0, r1]
adds r0, r5, 0
adds r1, r4, 0
bl sub_805727C
lsls r0, 24
cmp r0, 0
beq _08057D6E
adds r0, r5, 0
adds r1, r4, 0
movs r2, 0x3B
movs r3, 0
bl sub_80768DC
_08057D6E:
adds r0, r7, 0
add sp, 0x4
pop {r4-r7}
pop {r1}
bx r1
.align 2, 0
_08057D78: .4byte gUnknown_80F4E08
thumb_func_end sub_8057D20
thumb_func_start sub_8057D7C
sub_8057D7C:
push {lr}
sub sp, 0x8
ldr r2, _08057D98
ldr r2, [r2]
movs r3, 0x1
str r3, [sp]
str r3, [sp, 0x4]
movs r3, 0x2
bl sub_8076F80
movs r0, 0x1
add sp, 0x8
pop {r1}
bx r1
.align 2, 0
_08057D98: .4byte gUnknown_8106A50
thumb_func_end sub_8057D7C
thumb_func_start sub_8057D9C
sub_8057D9C:
push {r4-r7,lr}
@@ -9599,333 +9123,4 @@ sub_805C1BC:
_0805C1E0: .4byte gUnknown_80F4F80
thumb_func_end sub_805C1BC
thumb_func_start sub_805C1E4
sub_805C1E4:
push {lr}
ldr r2, _0805C1F4
ldr r2, [r2]
bl sub_80522F4
movs r0, 0
pop {r1}
bx r1
.align 2, 0
_0805C1F4: .4byte gUnknown_80FD454
thumb_func_end sub_805C1E4
thumb_func_start sub_805C1F8
sub_805C1F8:
push {lr}
movs r2, 0x1
bl sub_8077BB4
movs r0, 0x1
pop {r1}
bx r1
thumb_func_end sub_805C1F8
thumb_func_start sub_805C208
sub_805C208:
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x1C
adds r7, r0, 0
mov r9, r1
adds r6, r2, 0
mov r8, r3
movs r5, 0
add r0, sp, 0x18
strb r5, [r0]
ldr r0, [r1, 0x70]
movs r1, 0x4
ldrsh r0, [r0, r1]
bl GetSizeOrbDmg
mov r10, r0
adds r0, r6, 0
bl GetMoveType
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
adds r0, r6, 0
mov r1, r8
bl sub_8057600
lsls r0, 16
asrs r0, 16
add r1, sp, 0x18
str r1, [sp]
str r4, [sp, 0x4]
str r0, [sp, 0x8]
str r5, [sp, 0xC]
movs r0, 0x1
str r0, [sp, 0x10]
str r5, [sp, 0x14]
adds r0, r7, 0
mov r1, r9
mov r2, r10
movs r3, 0x1
bl sub_806F370
add r1, sp, 0x18
movs r2, 0
adds r0, r1, 0
ldrb r0, [r0]
cmp r0, 0
bne _0805C270
movs r2, 0x1
_0805C270:
strb r2, [r1]
add r0, sp, 0x18
ldrb r0, [r0]
add sp, 0x1C
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end sub_805C208
thumb_func_start sub_805C288
sub_805C288:
push {lr}
ldr r2, _0805C29C
movs r3, 0
ldrsh r2, [r2, r3]
movs r3, 0
bl sub_8078A58
movs r0, 0x1
pop {r1}
bx r1
.align 2, 0
_0805C29C: .4byte gUnknown_80F4FC6
thumb_func_end sub_805C288
thumb_func_start sub_805C2A0
sub_805C2A0:
push {lr}
bl sub_807DC68
movs r0, 0x1
pop {r1}
bx r1
thumb_func_end sub_805C2A0
thumb_func_start FillInOrbAction
FillInOrbAction:
push {r4-r7,lr}
mov r7, r9
mov r6, r8
push {r6,r7}
sub sp, 0x4
mov r8, r0
adds r7, r1, 0
movs r0, 0
mov r9, r0
ldr r5, [r7, 0x70]
bl IsBossBattle
lsls r0, 24
cmp r0, 0
beq _0805C2DC
ldr r0, _0805C2D8
ldr r1, [r0]
mov r0, r8
bl SendMessage
movs r0, 0
b _0805C3CA
.align 2, 0
_0805C2D8: .4byte gUnknown_80FD0B8
_0805C2DC:
ldr r4, _0805C3A0
adds r3, r5, 0
adds r3, 0x46
ldrb r0, [r3]
lsls r0, 2
adds r0, r4
ldrh r0, [r0]
ldrh r1, [r7, 0x4]
adds r0, r1
lsls r0, 16
lsrs r0, 16
ldr r2, _0805C3A4
ldr r1, [sp]
ands r1, r2
orrs r1, r0
str r1, [sp]
ldrb r0, [r3]
lsls r0, 2
adds r0, r4
ldrh r0, [r0, 0x2]
ldrh r2, [r7, 0x6]
adds r0, r2
lsls r0, 16
ldr r2, _0805C3A8
ands r1, r2
orrs r1, r0
str r1, [sp]
mov r4, sp
mov r0, sp
bl sub_8042A54
mov r0, sp
movs r1, 0
ldrsh r0, [r0, r1]
movs r2, 0x2
ldrsh r1, [r4, r2]
bl GetMapTile_2
adds r2, r0, 0
ldrh r1, [r2]
movs r0, 0x3
ands r0, r1
cmp r0, 0x2
bne _0805C36C
ldr r0, _0805C3AC
ands r0, r1
movs r1, 0x1
orrs r0, r1
strh r0, [r2]
movs r5, 0x1
negs r5, r5
mov r6, sp
_0805C344:
movs r4, 0x1
negs r4, r4
_0805C348:
movs r1, 0
ldrsh r0, [r6, r1]
adds r0, r4
movs r2, 0x2
ldrsh r1, [r6, r2]
adds r1, r5
bl sub_80498A8
adds r4, 0x1
cmp r4, 0x1
ble _0805C348
adds r5, 0x1
cmp r5, 0x1
ble _0805C344
movs r0, 0x1
mov r9, r0
bl sub_806CF60
_0805C36C:
movs r5, 0
_0805C36E:
movs r4, 0
adds r6, r5, 0x1
_0805C372:
adds r0, r4, 0
adds r1, r5, 0
bl sub_8049BB0
adds r4, 0x1
cmp r4, 0x37
ble _0805C372
adds r5, r6, 0
cmp r5, 0x1F
ble _0805C36E
mov r1, r9
cmp r1, 0
beq _0805C3B4
mov r0, sp
bl sub_8042A64
ldr r0, _0805C3B0
ldr r2, [r0]
mov r0, r8
adds r1, r7, 0
bl sub_80522F4
b _0805C3C0
.align 2, 0
_0805C3A0: .4byte gAdjacentTileOffsets
_0805C3A4: .4byte 0xffff0000
_0805C3A8: .4byte 0x0000ffff
_0805C3AC: .4byte 0x0000fffc
_0805C3B0: .4byte gUnknown_80FD0B4
_0805C3B4:
ldr r0, _0805C3D8
ldr r2, [r0]
mov r0, r8
adds r1, r7, 0
bl sub_80522F4
_0805C3C0:
bl sub_8040A84
bl sub_8049ED4
mov r0, r9
_0805C3CA:
add sp, 0x4
pop {r3,r4}
mov r8, r3
mov r9, r4
pop {r4-r7}
pop {r1}
bx r1
.align 2, 0
_0805C3D8: .4byte gUnknown_80FD0B8
thumb_func_end FillInOrbAction
thumb_func_start sub_805C3DC
sub_805C3DC:
push {lr}
ldr r0, [r1, 0x70]
ldrb r0, [r0, 0x6]
movs r2, 0x1
cmp r0, 0
beq _0805C3EA
movs r2, 0x2
_0805C3EA:
adds r0, r1, 0x4
movs r1, 0x14
bl sub_807FC3C
movs r0, 0x1
pop {r1}
bx r1
thumb_func_end sub_805C3DC
thumb_func_start sub_805C3F8
sub_805C3F8:
push {r4,r5,lr}
sub sp, 0x8
adds r5, r0, 0
adds r4, r1, 0
ldr r0, [r4, 0x4]
str r0, [sp, 0x4]
ldr r0, [r4, 0x70]
adds r0, 0xA4
ldrb r1, [r0]
cmp r1, 0
bne _0805C442
adds r0, r4, 0
adds r0, 0x20
strb r1, [r0]
movs r0, 0
bl sub_803D73C
adds r1, r0, 0
lsls r1, 24
lsrs r1, 24
mov r0, sp
movs r2, 0
bl sub_8045C28
add r1, sp, 0x4
adds r0, r5, 0
mov r2, sp
bl sub_80464C8
movs r1, 0x86
lsls r1, 2
adds r0, r4, 0
adds r2, r5, 0
bl sub_8068FE0
movs r0, 0x1
b _0805C450
_0805C442:
ldr r0, _0805C458
ldr r2, [r0]
adds r0, r5, 0
adds r1, r4, 0
bl sub_80522F4
movs r0, 0
_0805C450:
add sp, 0x8
pop {r4,r5}
pop {r1}
bx r1
.align 2, 0
_0805C458: .4byte gUnknown_80FF678
thumb_func_end sub_805C3F8
.align 2, 0

View File

@@ -2737,39 +2737,4 @@ _0807FC34: .4byte 0x000001ff
_0807FC38: .4byte 0x000181ea
thumb_func_end sub_807FA9C
thumb_func_start sub_807FC3C
sub_807FC3C:
push {r4-r7,lr}
ldr r6, _0807FC70
ldr r4, [r6]
ldrh r5, [r0]
ldr r7, _0807FC74
adds r3, r4, r7
strh r5, [r3]
ldrh r3, [r0, 0x2]
ldr r5, _0807FC78
adds r0, r4, r5
strh r3, [r0]
adds r7, 0x4
adds r4, r7
strb r1, [r4]
ldr r0, [r6]
ldr r1, _0807FC7C
adds r0, r1
strb r2, [r0]
ldr r0, [r6]
subs r5, 0x6
adds r0, r5
movs r1, 0x1
strb r1, [r0]
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_0807FC70: .4byte gDungeonGlobalData
_0807FC74: .4byte 0x00013574
_0807FC78: .4byte 0x00013576
_0807FC7C: .4byte 0x00013579
thumb_func_end sub_807FC3C
.align 2, 0

View File

@@ -88,7 +88,14 @@ struct DungeonGlobalData
/* 0x10884 */ struct Position roomExits[MAX_ROOM_COUNT][32]; // Arrays of room exits for each room.
u8 fill11444[0x1356C - 0x11484];
u8 unk1356C;
u8 fill1356D[0x1357C - 0x1356D];
u8 fill1356D[0x13570 - 0x1356D];
/* 0x13570 */ u8 unk13570;
u8 fill13571[0x13574 - 0x13571];
/* 0x13574 */ u16 unk13574;
/* 0x13576 */ u16 unk13576;
/* 0x13578 */ u8 unk13578;
/* 0x13579 */ u8 unk13579;
u8 fill1357A[0x1357C - 0x1357A];
/* 0x1357C */ struct DungeonEntity *teamPokemon[MAX_TEAM_MEMBERS];
/* 0x1358C */ struct DungeonEntity *wildPokemon[DUNGEON_MAX_WILD_POKEMON];
/* 0x135CC */ struct DungeonEntity *allPokemon[DUNGEON_MAX_POKEMON]; // Contains both team and wild Pokémon

View File

@@ -204,7 +204,7 @@ u8 GetUnk1B(s16 index);
bool8 GetIsMoving(s16 index);
u8 GetUnk1D(s16 index);
u16 GetLowKickDmg(s16 index);
u16 GetSizeOrbDmg(s16 index);
u32 GetSizeOrbDmg(s16 index);
u8 GetFriendArea(s16 index);
u16 GetBaseHP(s16 index);
bool8 IsToolboxEnabled(s16 index);

View File

@@ -252,6 +252,7 @@ SECTIONS {
asm/code_807CD9C.o(.text);
src/weather.o(.text);
asm/code_807E5AC.o(.text);
src/code_807E5AC.o(.text);
src/trap.o(.text);
asm/code_807FCD4.o(.text);
src/code_8083288.o(.text);

View File

@@ -1,66 +1,97 @@
#include "global.h"
#include "constants/status.h"
#include "dungeon_global_data.h"
#include "dungeon_entity.h"
#include "moves.h"
#include "status_checks_1.h"
#include "weather.h"
extern u32 gUnknown_80FCF74;
extern u32 gUnknown_80FCF80;
extern u16 gUnknown_80F4F42;
extern u8 gUnknown_202DE58[];
extern u8 gAvailablePokemonNames[];
extern u32 gUnknown_8106A50;
extern u32 gUnknown_8106A4C;
extern s16 gUnknown_80F4DB6;
extern u16 gUnknown_80F4F42;
extern u32 gUnknown_80FAC88;
extern u8 *gUnknown_80FD018[];
extern u8 *gUnknown_80FCFBC[];
extern u8 *gUnknown_80FCFE4[];
extern u32 gUnknown_8106A4C;
extern s16 gUnknown_80F4DF6;
extern s16 gUnknown_80F4E0A;
extern u8 gUnknown_80F51E4[];
extern u32 gUnknown_80F51EC[];
extern u8 *gUnknown_80FC734[];
extern u8 *gUnknown_80FC7EC[];
extern u8 *gUnknown_80FCF74[];
extern u8 *gUnknown_80FCF80[];
extern u32 gUnknown_8106A50;
extern s16 gUnknown_80F4E08;
struct unkStruct_80928C0
{
u32 unk0;
s32 unk4;
u8 unk8;
u8 unk9;
};
void sub_80928C0(u8 *buffer, struct PokemonMove *move, struct unkStruct_80928C0 *param_3);
extern void sub_80775DC(struct DungeonEntity *r0, struct DungeonEntity *r1, u32, u32);
extern void sub_80768DC(struct DungeonEntity *, struct DungeonEntity *, u32, u32);
extern void sub_80772C0(struct DungeonEntity *r0, struct DungeonEntity *r1, u32, u32, u32);
extern u8 sub_807EAA0(u32, u32);
extern void sub_80522F4(struct DungeonEntity *r1, struct DungeonEntity *r2, u32);
extern void sub_80522F4(struct DungeonEntity *r1, struct DungeonEntity *r2, const char[]);
extern void sub_8079F20(struct DungeonEntity *r0, struct DungeonEntity *r1, u32, u32);
extern void sub_8077434(struct DungeonEntity *r0, struct DungeonEntity *r1, u32 , u32, u32);
extern s32 sub_80556BC(struct DungeonEntity *, struct DungeonEntity *, u8, u32, u32, u32);
extern u8 sub_805727C(struct DungeonEntity *, struct DungeonEntity *, s16);
extern u32 sub_8055640(struct DungeonEntity *, struct DungeonEntity *, u32, u32, u32);
extern void sub_80779F0(struct DungeonEntity *, struct DungeonEntity *, u32, u32);
extern void sub_8078968(struct DungeonEntity *r0, struct DungeonEntity *r1);
extern void sub_8079618(struct DungeonEntity *r0, struct DungeonEntity *r1, u32, u32, u32);
extern void sub_8077AE4(struct DungeonEntity *pokemon, struct DungeonEntity *target, u32);
extern void sub_8077084(struct DungeonEntity *pokemon, struct DungeonEntity *target, u32, u32);
extern u8 sub_80776C0(struct DungeonEntity *, struct DungeonEntity *, u8);
extern void sub_8076F80(struct DungeonEntity *, struct DungeonEntity *, u32, u32, u32, u32);
extern void sub_806F370(struct DungeonEntity *r0, struct DungeonEntity *r1, u32, u32, u8 *, u8, s32, u32, u32, u32);
extern void SetMessageArgument(char[], struct DungeonEntity*, u32);
extern u32 gUnknown_80FD018;
extern s16 sub_8057600(void*, u32);
bool32 sub_8057824(struct DungeonEntity *param_1, struct DungeonEntity *param_2)
bool32 sub_8057824(struct DungeonEntity *pokemon, struct DungeonEntity *target)
{
// Lower evasion?
sub_80775DC(param_1,param_2,gUnknown_8106A50,1);
sub_80775DC(pokemon,target,gUnknown_8106A50,1);
return TRUE;
}
bool32 sub_805783C(struct DungeonEntity *param_1, struct DungeonEntity *param_2)
bool32 sub_805783C(struct DungeonEntity *pokemon, struct DungeonEntity *target)
{
// Lower attack?
sub_80772C0(param_1,param_2,gUnknown_8106A4C,0x80,1);
sub_80772C0(pokemon,target,gUnknown_8106A4C,0x80,1);
return TRUE;
}
bool32 sub_805785C(struct DungeonEntity *param_1, struct DungeonEntity *param_2)
bool32 sub_805785C(struct DungeonEntity *pokemon, struct DungeonEntity *target)
{
gDungeonGlobalData->unkE26B = gUnknown_80F4F42;
if (sub_807EAA0(1,0) == '\0') {
if (sub_807EAA0(1,0) == 0) {
// The weather remains unchanged
sub_80522F4(param_1,param_2,gUnknown_80FCF74);
sub_80522F4(pokemon,target,*gUnknown_80FCF74);
}
return TRUE;
}
bool32 sub_80578A4(struct DungeonEntity *param_1, struct DungeonEntity *param_2)
bool32 sub_80578A4(struct DungeonEntity *pokemon, struct DungeonEntity *target)
{
gDungeonGlobalData->weatherTurnsLeft = gUnknown_80F4F42;
if (sub_807EAA0(1,0) == '\0') {
if (sub_807EAA0(1,0) == 0) {
// The weather remains unchanged
sub_80522F4(param_1,param_2,gUnknown_80FCF80);
sub_80522F4(pokemon,target,*gUnknown_80FCF80);
}
return TRUE;
}
@@ -71,48 +102,231 @@ bool32 sub_80578EC(struct DungeonEntity *r0, struct DungeonEntity *r1)
return TRUE;
}
bool32 sub_80578FC(struct DungeonEntity *param_1, struct DungeonEntity *param_2, u32 param_3, u32 param_4)
bool32 sub_80578FC(struct DungeonEntity *pokemon, struct DungeonEntity *target, u32 param_3, u32 param_4)
{
bool32 uVar3;
uVar3 = 0;
if (sub_8055640(param_1, param_2, param_3, 0x80 << 1, param_4) != 0) {
uVar3 = FALSE;
if (sub_8055640(pokemon, target, param_3, 0x100, param_4) != 0) {
uVar3 = TRUE;
if (sub_805727C(param_1,param_2, gUnknown_80F4DB6) != '\0') {
sub_80779F0(param_1, param_2, 1, 0);
if (sub_805727C(pokemon,target, gUnknown_80F4DB6) != 0) {
sub_80779F0(pokemon, target, 1, 0);
}
}
return uVar3;
}
bool32 sub_8057948(struct DungeonEntity *param_1, struct DungeonEntity *param_2)
bool32 sub_8057948(struct DungeonEntity *pokemon, struct DungeonEntity *target)
{
sub_8078968(param_1, param_2);
sub_8078968(pokemon, target);
return TRUE;
}
bool32 sub_8057954(struct DungeonEntity *param_1, struct DungeonEntity *param_2, u32 param_3)
bool32 sub_8057954(struct DungeonEntity *pokemon, struct DungeonEntity *target, u32 param_3)
{
// {ARG_POKEMON_0} is enraged
sub_8079618(param_1,param_2,0xc,param_3,gUnknown_80FAC88);
sub_8079618(pokemon,target,0xc,param_3,gUnknown_80FAC88);
return TRUE;
}
bool32 sub_8057974(struct DungeonEntity *param_1, struct DungeonEntity *param_2, struct PokemonMove *param_3, u32 param_4)
bool32 sub_8057974(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *param_3, u32 param_4)
{
s32 newHP;
u8 local_24;
bool8 local_24;
newHP = param_2->entityData->HP / 2;
local_24 = 0;
newHP = target->entityData->HP / 2;
local_24 = FALSE;
if (newHP != 0) {
sub_806F370(param_1,param_2,newHP,1,&local_24,GetMoveType(param_3),sub_8057600(param_3,param_4),0,1,0);
sub_806F370(pokemon,target,newHP,1,&local_24,GetMoveType(param_3),sub_8057600(param_3,param_4),0,1,0);
local_24 = local_24 == 0;
}
else
{
// The target's HP can't be halved anymore
sub_80522F4(param_1,param_2,gUnknown_80FD018);
sub_80522F4(pokemon,target,*gUnknown_80FD018);
}
return local_24;
}
bool8 sub_8057A0C(struct DungeonEntity *pokemon, struct DungeonEntity *target)
{
s32 newHP;
struct DungeonEntityData *iVar2;
struct DungeonEntityData *iVar3;
struct DungeonEntityData *iVar4;
struct DungeonEntityData *iVar5;
// Need copies for some reason to match..
iVar3 = (pokemon->entityData);
iVar4 = iVar3;
iVar2 = (target->entityData);
iVar5 = iVar2;
newHP = ((iVar3->HP + iVar2->HP) / 2);
iVar3->HP = newHP;
iVar5->HP = newHP;
if (iVar3->HP > iVar3->maxHP) {
iVar3->HP = iVar3->maxHP;
}
if (iVar5->HP > iVar5->maxHP) {
iVar5->HP = iVar5->maxHP;
}
SetMessageArgument(gAvailablePokemonNames,pokemon,0);
SetMessageArgument(gAvailablePokemonNames + 0x50,target,0);
if (iVar4->unkFB == 0) {
iVar4->unkFB = 1;
}
// $m0 and $m1 shared their HP
sub_80522F4(pokemon,target,*gUnknown_80FC7EC);
return TRUE;
}
bool8 TormentMoveAction(struct DungeonEntity *pokemon, struct DungeonEntity *target)
{
struct PokemonMove *movePtr;
s32 iVar4;
struct PokemonMove struggleMove;
struct DungeonEntityData *entityData;
bool8 isTormented;
entityData = target->entityData;
isTormented = FALSE;
for(iVar4 = 0; iVar4 < MAX_MON_MOVES; iVar4++)
{
movePtr = &entityData->moves[iVar4];
if ((movePtr->moveFlags & MOVE_FLAG_EXISTS) != 0) {
if ((movePtr->moveFlags & MOVE_FLAG_DISABLED) == 0) {
if ((movePtr->moveFlags & MOVE_FLAG_LAST_USED) != 0) {
sub_80928C0(gUnknown_202DE58,movePtr,0);
// $i0 was tormented
sub_80522F4(pokemon,target,*gUnknown_80FCFBC);
movePtr->moveFlags |= MOVE_FLAG_DISABLED;
isTormented = TRUE;
}
}
else if ((movePtr->moveFlags & MOVE_FLAG_LAST_USED) == 0) {
movePtr->moveFlags &= ~(MOVE_FLAG_DISABLED);
}
}
};
if ((entityData->struggleMoveFlags & MOVE_FLAG_DISABLED) == 0) {
if ((entityData->struggleMoveFlags & MOVE_FLAG_LAST_USED) != 0) {
InitPokemonMove(&struggleMove, MOVE_STRUGGLE);
entityData->struggleMoveFlags |= MOVE_FLAG_DISABLED;
isTormented = TRUE;
sub_80928C0(gUnknown_202DE58,&struggleMove,0);
// $i0 was tormented
sub_80522F4(pokemon,target,*gUnknown_80FCFBC);
}
}
else if ((entityData->struggleMoveFlags & MOVE_FLAG_LAST_USED) == 0) {
entityData->struggleMoveFlags &= ~(MOVE_FLAG_DISABLED);
}
if (isTormented)
{
if(entityData->chargingStatus == CHARGING_STATUS_BIDE) {
entityData->chargingStatus = CHARGING_STATUS_NONE;
}
}
else
{
// The target couldn't be tormented
sub_80522F4(pokemon,target,*gUnknown_80FCFE4);
}
return isTormented;
}
bool8 sub_8057BB4(struct DungeonEntity *pokemon, struct DungeonEntity *target)
{
sub_80779F0(pokemon, target, 1, 1);
return TRUE;
}
bool8 sub_8057BC4(struct DungeonEntity *pokemon, struct DungeonEntity *target)
{
sub_8077AE4(pokemon, target, 1);
sub_8077084(pokemon, target, gUnknown_8106A4C, 2);
return TRUE;
}
bool8 sub_8057BEC(struct DungeonEntity *pokemon, struct DungeonEntity *target, u32 param_3, u32 param_4)
{
bool8 uVar3;
uVar3 = FALSE;
if (IsSleeping(pokemon)) {
if (sub_8055640(pokemon,target,param_3,0x100,param_4) != 0) {
uVar3 = TRUE;
if (sub_805727C(pokemon,target,gUnknown_80F4E0A) != 0) {
sub_80776C0(pokemon,target,0);
}
}
}
else {
sub_80522F4(pokemon,target,*gUnknown_80FC734);
}
return uVar3;
}
bool8 sub_8057C68(struct DungeonEntity *pokemon, struct DungeonEntity *target)
{
sub_8077434(pokemon, target, gUnknown_8106A4C, 0x40, 1);
return TRUE;
}
bool8 sub_8057C88(struct DungeonEntity *pokemon, struct DungeonEntity *target, u32 param_3, u32 param_4)
{
u8 uVar3;
uVar3 = FALSE;
if (sub_8055640(pokemon, target, param_3, 0x100, param_4) != 0) {
uVar3 = TRUE;
if (sub_805727C(pokemon,target,gUnknown_80F4DF6) != 0) {
sub_80776C0(pokemon,target,0);
}
}
return uVar3;
}
s32 sub_8057CD0(struct DungeonEntity * pokemon, struct DungeonEntity * target, u32 param_3, u32 param_4)
{
u32 uVar1;
s32 iVar2;
uVar1 = GetWeather(pokemon);
iVar2 = sub_80556BC(pokemon,target,gUnknown_80F51E4[uVar1],param_3,
gUnknown_80F51EC[uVar1],param_4);
if (iVar2 != 0) {
iVar2 = 1;
}
return iVar2;
}
bool8 sub_8057D20(struct DungeonEntity * pokemon, struct DungeonEntity * target, u32 param_3, u32 param_4)
{
u32 uVar3;
bool8 uVar4;
u8 chargeStatus;
uVar4 = FALSE;
chargeStatus = target->entityData->chargingStatus;
uVar3 = 0x100;
if (chargeStatus == CHARGING_STATUS_DIVE) {
uVar3 = 0x200;
}
if (sub_8055640(pokemon,target,param_3,uVar3,param_4) != 0) {
uVar4 = TRUE;
if (sub_805727C(pokemon,target,gUnknown_80F4E08) != 0) {
sub_80768DC(pokemon,target,0x3b,0);
}
}
return uVar4;
}
bool8 sub_8057D7C(struct DungeonEntity * param_1, struct DungeonEntity * param_2)
{
sub_8076F80(param_1, param_2, gUnknown_8106A50, 2, 1, 1);
return TRUE;
}

11
src/code_807E5AC.c Normal file
View File

@@ -0,0 +1,11 @@
#include "global.h"
#include "dungeon_global_data.h"
void sub_807FC3C(struct Position *param_1, u32 param_2, u32 param_3)
{
gDungeonGlobalData->unk13574 = param_1->x;
gDungeonGlobalData->unk13576 = param_1->y;
gDungeonGlobalData->unk13578 = param_2;
gDungeonGlobalData->unk13579 = param_3;
gDungeonGlobalData->unk13570 = 1;
}

View File

@@ -373,7 +373,7 @@ u16 GetLowKickDmg(s16 index)
return gMonsterParameters[index].lowkick_dmg;
}
u16 GetSizeOrbDmg(s16 index)
u32 GetSizeOrbDmg(s16 index)
{
return gMonsterParameters[index].sizeorb_dmg;
}

View File

@@ -1,18 +1,21 @@
#include "global.h"
#include "status_checker.h"
#include "code_80521D0.h"
#include "constants/move_id.h"
#include "constants/status.h"
#include "constants/type.h"
#include "constants/weather.h"
#include "dungeon_engine.h"
#include "dungeon_global_data.h"
#include "dungeon_map_access.h"
#include "dungeon_pokemon_attributes.h"
#include "dungeon_util.h"
#include "dungeon_visibility.h"
#include "map.h"
#include "moves.h"
#include "number_util.h"
#include "pokemon.h"
#include "status_checks_1.h"
#include "tile_types.h"
#include "trap.h"
@@ -23,6 +26,40 @@ extern void sub_8078F50(struct DungeonEntity *, struct DungeonEntity *);
extern void sub_8077E4C(struct DungeonEntity *, struct DungeonEntity *);
extern void sub_8079570(struct DungeonEntity *, struct DungeonEntity *);
extern void sub_80795C4(struct DungeonEntity *, struct DungeonEntity *);
extern void sub_807DC68(struct DungeonEntity *, struct DungeonEntity *);
extern void sub_8077BB4(struct DungeonEntity *, struct DungeonEntity *, u8);
extern void sub_8078A58(struct DungeonEntity *, struct DungeonEntity *, s16, u32);
extern u32 sub_803D73C(u32);
extern void sub_8045C28(struct ItemSlot *, u8 , u8 *);
extern void sub_80464C8(struct DungeonEntity *, struct Position *, struct ItemSlot *);
extern void sub_8068FE0(struct DungeonEntity *, u32, struct DungeonEntity *r2);
extern void sub_80522F4(struct DungeonEntity *r1, struct DungeonEntity *r2, const char []);
extern void sub_806F370(struct DungeonEntity *r0, struct DungeonEntity *r1, u32, u32, u8 *, u8, s32, u32, u32, u32);
extern void sub_807FC3C(struct Position *, u32, u32);
extern void sub_8042A64(struct Position *);
extern void sub_8040A84(void);
extern void sub_8049ED4(void);
extern void sub_80498A8(s32, s32);
extern void sub_806CF60();
extern void sub_8042A54(struct Position *);
extern void sub_8049BB0(s32, s32);
extern s16 sub_8057600(void*, u32);
extern u8 *gUnknown_80FF678[];
extern u8 *gUnknown_80FD0B8[];
extern u8 *gUnknown_80FD0B4[];
extern u8 *gUnknown_80FD454[];
extern s16 gUnknown_80F4FC6;
struct Position_Alt
{
union PositionAlt
{
struct Position norm;
u32 full_bits;
} temp;
};
// Array indices correspond to the current dungeon tileset.
const u8 gDungeonCamouflageTypes[76] = {
@@ -104,6 +141,126 @@ const u8 gDungeonCamouflageTypes[76] = {
TYPE_ROCK
};
bool8 sub_805C1E4(struct DungeonEntity *pokemon, struct DungeonEntity *target)
{
sub_80522F4(pokemon, target, *gUnknown_80FD454);
return FALSE;
}
bool8 sub_805C1F8(struct DungeonEntity *pokemon, struct DungeonEntity *target)
{
sub_8077BB4(pokemon, target, 1);
return TRUE;
}
bool8 sub_805C208(struct DungeonEntity *param_1,struct DungeonEntity *param_2,struct PokemonMove *param_3,u32 param_4)
{
u32 uVar3;
u8 local_24;
local_24 = 0;
uVar3 = GetSizeOrbDmg(param_2->entityData->transformSpecies);
sub_806F370(param_1,param_2,uVar3,1,&local_24,GetMoveType(param_3),sub_8057600(param_3,param_4),0,1,0);
local_24 = local_24 == 0;
return local_24;
}
bool8 sub_805C288(struct DungeonEntity *pokemon, struct DungeonEntity *target)
{
sub_8078A58(pokemon, target, gUnknown_80F4FC6, 0);
return TRUE;
}
bool8 sub_805C2A0(struct DungeonEntity *pokemon, struct DungeonEntity *target)
{
sub_807DC68(pokemon, target);
return TRUE;
}
bool8 FillInOrbAction(struct DungeonEntity *pokemon,struct DungeonEntity *target)
{
struct MapTile *tileToFill;
struct DungeonEntityData *iVar5;
int y;
bool8 didWork; // TODO better name for this... signifies that orb worked
int x;
u16 cast_x;
u32 cast_y;
struct Position_Alt tileCoords;
didWork = FALSE;
iVar5 = target->entityData;
if (IsBossBattle()) {
SendMessage(pokemon,*gUnknown_80FD0B8);
return FALSE;
}
else
{
// Calcuate the coordinates of the tile in front of the user
cast_x = target->posWorld.x + gAdjacentTileOffsets[iVar5->action.facingDir].x;
tileCoords.temp.full_bits = (tileCoords.temp.full_bits & 0xffff0000) | cast_x;
cast_y = ((u16)(target->posWorld.y + gAdjacentTileOffsets[iVar5->action.facingDir].y)) << 0x10;
tileCoords.temp.full_bits = (tileCoords.temp.full_bits & 0x0000ffff) | cast_y;
sub_8042A54((struct Position *)&tileCoords);
tileToFill = GetMapTile_2(tileCoords.temp.norm.x,tileCoords.temp.norm.y);
if ((tileToFill->tileType & (TILE_TYPE_FLOOR | TILE_TYPE_LIQUID)) == TILE_TYPE_LIQUID) {
tileToFill->tileType = (tileToFill->tileType & ~(TILE_TYPE_FLOOR | TILE_TYPE_LIQUID)) | TILE_TYPE_FLOOR;
for(y = -1; y < 2; y++)
for(x = -1; x < 2; x++)
sub_80498A8(tileCoords.temp.norm.x + x, tileCoords.temp.norm.y + y);
didWork = TRUE;
sub_806CF60();
}
for(y = 0; y < DUNGEON_MAX_SIZE_Y; y++)
for(x = 0; x < DUNGEON_MAX_SIZE_X; x++)
sub_8049BB0(x,y);
if (didWork) {
sub_8042A64((struct Position *)&tileCoords);
sub_80522F4(pokemon,target,*gUnknown_80FD0B4);
}
else {
sub_80522F4(pokemon,target,*gUnknown_80FD0B8);
}
sub_8040A84();
sub_8049ED4();
return didWork;
}
}
bool8 sub_805C3DC(struct DungeonEntity *pokemon, struct DungeonEntity *target)
{
u32 var;
var = (target->entityData->isEnemy ? 2 : 1);
sub_807FC3C(&target->posWorld, 0x14, var);
return TRUE;
}
bool8 sub_805C3F8(struct DungeonEntity *pokemon, struct DungeonEntity *target)
{
struct ItemSlot stack;
struct Position posStruct = target->posWorld;
if(target->entityData->clientType != CLIENT_TYPE_NONE)
{
sub_80522F4(pokemon, target, *gUnknown_80FF678);
return FALSE;
}
else
{
target->visible = FALSE;
sub_8045C28(&stack, sub_803D73C(0), 0);
sub_80464C8(pokemon, &posStruct, &stack);
sub_8068FE0(target, 0x218, pokemon);
return TRUE;
}
}
bool8 sub_805C45C(struct DungeonEntity *pokemon, struct DungeonEntity *target)
{
sub_807F43C(pokemon, target);