mirror of
https://github.com/pret/pmd-red.git
synced 2026-07-19 17:32:00 -05:00
match sub_806E100
This commit is contained in:
parent
149018635e
commit
ab0c556a9b
|
|
@ -2120,658 +2120,4 @@ _0806E0F0:
|
|||
bx r1
|
||||
thumb_func_end sub_806D528
|
||||
|
||||
thumb_func_start sub_806E100
|
||||
sub_806E100:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r10
|
||||
mov r6, r9
|
||||
mov r5, r8
|
||||
push {r5-r7}
|
||||
sub sp, 0x28
|
||||
adds r6, r0, 0
|
||||
mov r8, r1
|
||||
str r2, [sp, 0x18]
|
||||
lsls r3, 24
|
||||
lsrs r7, r3, 24
|
||||
movs r0, 0
|
||||
mov r9, r0
|
||||
movs r1, 0
|
||||
str r1, [sp, 0x20]
|
||||
mov r2, r8
|
||||
ldr r2, [r2, 0x70]
|
||||
str r2, [sp, 0x24]
|
||||
ldr r3, [sp, 0x18]
|
||||
ldr r3, [r3, 0x70]
|
||||
mov r10, r3
|
||||
adds r0, r6, 0
|
||||
movs r1, 0x1
|
||||
bl sub_800A020
|
||||
mov r0, r9
|
||||
ldr r4, [sp, 0x48]
|
||||
strb r0, [r4, 0xD]
|
||||
strb r0, [r4, 0xE]
|
||||
movs r1, 0
|
||||
str r1, [sp, 0x1C]
|
||||
ldr r0, [sp, 0x18]
|
||||
bl EntityExists
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _0806E14E
|
||||
movs r0, 0x1
|
||||
b _0806E61A
|
||||
_0806E14E:
|
||||
cmp r7, 0x1
|
||||
beq _0806E156
|
||||
cmp r7, 0x7
|
||||
bne _0806E15A
|
||||
_0806E156:
|
||||
movs r2, 0x1
|
||||
str r2, [sp, 0x20]
|
||||
_0806E15A:
|
||||
ldr r0, [sp, 0x18]
|
||||
movs r1, 0x35
|
||||
bl HasAbility
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _0806E170
|
||||
cmp r7, 0
|
||||
beq _0806E170
|
||||
movs r3, 0x1
|
||||
str r3, [sp, 0x1C]
|
||||
_0806E170:
|
||||
movs r0, 0x2
|
||||
ldr r4, [sp, 0x48]
|
||||
str r0, [r4, 0x8]
|
||||
movs r5, 0
|
||||
add r0, sp, 0x10
|
||||
mov r9, r0
|
||||
b _0806E1F2
|
||||
_0806E17E:
|
||||
mov r1, r10
|
||||
adds r1, 0x5C
|
||||
ldr r2, [sp, 0x20]
|
||||
cmp r2, 0
|
||||
beq _0806E1B4
|
||||
adds r0, r1, r5
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0xE
|
||||
bne _0806E1B4
|
||||
mov r0, r10
|
||||
adds r0, 0xF5
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0
|
||||
bne _0806E1B4
|
||||
movs r4, 0
|
||||
ldr r0, _0806E1AC
|
||||
ldr r0, [r0]
|
||||
ldr r3, _0806E1B0
|
||||
adds r1, r0, r3
|
||||
movs r0, 0x1
|
||||
strb r0, [r1]
|
||||
b _0806E1CA
|
||||
.align 2, 0
|
||||
_0806E1AC: .4byte gDungeon
|
||||
_0806E1B0: .4byte 0x00000179
|
||||
_0806E1B4:
|
||||
ldr r2, _0806E4E4
|
||||
adds r0, r1, r5
|
||||
ldrb r1, [r0]
|
||||
lsls r1, 1
|
||||
lsls r0, r7, 3
|
||||
adds r0, r7
|
||||
lsls r0, 2
|
||||
adds r1, r0
|
||||
adds r1, r2
|
||||
movs r0, 0
|
||||
ldrsh r4, [r1, r0]
|
||||
_0806E1CA:
|
||||
cmp r4, 0x2
|
||||
beq _0806E1DC
|
||||
lsls r0, r4, 2
|
||||
add r0, sp
|
||||
ldr r2, [r0]
|
||||
adds r0, r6, 0
|
||||
adds r1, r6, 0
|
||||
bl sub_800A34C
|
||||
_0806E1DC:
|
||||
lsls r0, r5, 2
|
||||
add r0, r9
|
||||
str r4, [r0]
|
||||
ldr r0, _0806E4E8
|
||||
ldr r0, [r0]
|
||||
movs r1, 0x9E
|
||||
lsls r1, 1
|
||||
adds r0, r1
|
||||
adds r0, r5
|
||||
strb r4, [r0]
|
||||
adds r5, 0x1
|
||||
_0806E1F2:
|
||||
cmp r5, 0x1
|
||||
bgt _0806E20E
|
||||
mov r1, sp
|
||||
ldr r0, _0806E4EC
|
||||
ldm r0!, {r2-r4}
|
||||
stm r1!, {r2-r4}
|
||||
ldr r0, [r0]
|
||||
str r0, [r1]
|
||||
adds r0, r6, 0
|
||||
bl sub_800A2A0
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _0806E17E
|
||||
_0806E20E:
|
||||
ldr r2, _0806E4F0
|
||||
mov r1, r9
|
||||
ldr r0, [r1, 0x4]
|
||||
lsls r0, 2
|
||||
ldr r1, [sp, 0x10]
|
||||
lsls r1, 4
|
||||
adds r0, r1
|
||||
adds r0, r2
|
||||
ldr r0, [r0]
|
||||
ldr r2, [sp, 0x48]
|
||||
str r0, [r2, 0x8]
|
||||
movs r3, 0x1
|
||||
mov r9, r3
|
||||
cmp r0, 0x3
|
||||
beq _0806E240
|
||||
movs r4, 0
|
||||
mov r9, r4
|
||||
ldr r0, [sp, 0x1C]
|
||||
cmp r0, 0
|
||||
beq _0806E240
|
||||
ldr r0, _0806E4F4
|
||||
ldr r1, [r0, 0x4]
|
||||
ldr r0, [r0]
|
||||
str r0, [r6]
|
||||
str r1, [r6, 0x4]
|
||||
_0806E240:
|
||||
cmp r7, 0x2
|
||||
beq _0806E248
|
||||
cmp r7, 0x6
|
||||
bne _0806E26C
|
||||
_0806E248:
|
||||
ldr r0, [sp, 0x18]
|
||||
movs r1, 0x2
|
||||
bl HasAbility
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _0806E26C
|
||||
ldr r0, _0806E4E8
|
||||
ldr r0, [r0]
|
||||
ldr r2, _0806E4F8
|
||||
adds r1, r0, r2
|
||||
movs r0, 0x1
|
||||
strb r0, [r1]
|
||||
ldr r2, _0806E4FC
|
||||
adds r0, r6, 0
|
||||
adds r1, r6, 0
|
||||
bl sub_800A34C
|
||||
_0806E26C:
|
||||
cmp r7, 0x2
|
||||
bne _0806E2A0
|
||||
ldr r0, [sp, 0x18]
|
||||
bl GetFlashFireStatus
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _0806E2A0
|
||||
ldr r0, _0806E4E8
|
||||
ldr r0, [r0]
|
||||
movs r3, 0xB7
|
||||
lsls r3, 1
|
||||
adds r0, r3
|
||||
movs r4, 0
|
||||
movs r5, 0x1
|
||||
strb r5, [r0]
|
||||
adds r0, r6, 0
|
||||
movs r1, 0
|
||||
bl sub_800A020
|
||||
ldr r0, [sp, 0x48]
|
||||
str r4, [r0, 0x8]
|
||||
strb r4, [r0, 0xD]
|
||||
strb r5, [r0, 0xE]
|
||||
movs r1, 0
|
||||
mov r9, r1
|
||||
_0806E2A0:
|
||||
cmp r7, 0x9
|
||||
bne _0806E2D2
|
||||
ldr r0, [sp, 0x18]
|
||||
movs r1, 0x37
|
||||
bl HasAbility
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _0806E2D2
|
||||
ldr r0, _0806E4E8
|
||||
ldr r0, [r0]
|
||||
ldr r2, _0806E500
|
||||
adds r0, r2
|
||||
movs r4, 0
|
||||
movs r5, 0x1
|
||||
strb r5, [r0]
|
||||
adds r0, r6, 0
|
||||
movs r1, 0
|
||||
bl sub_800A020
|
||||
ldr r3, [sp, 0x48]
|
||||
str r4, [r3, 0x8]
|
||||
strb r4, [r3, 0xD]
|
||||
strb r5, [r3, 0xE]
|
||||
mov r9, r4
|
||||
_0806E2D2:
|
||||
cmp r7, 0x3
|
||||
bne _0806E340
|
||||
mov r0, r8
|
||||
movs r1, 0x10
|
||||
bl HasAbility
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _0806E340
|
||||
movs r4, 0
|
||||
ldr r0, [sp, 0x24]
|
||||
movs r2, 0x10
|
||||
ldrsh r1, [r0, r2]
|
||||
cmp r1, 0
|
||||
bge _0806E2F2
|
||||
adds r1, 0x3
|
||||
_0806E2F2:
|
||||
asrs r1, 2
|
||||
ldr r3, [sp, 0x24]
|
||||
movs r2, 0xE
|
||||
ldrsh r0, [r3, r2]
|
||||
cmp r1, r0
|
||||
blt _0806E300
|
||||
movs r4, 0x1
|
||||
_0806E300:
|
||||
ldr r0, [sp, 0x24]
|
||||
movs r1, 0x80
|
||||
adds r2, r4, 0
|
||||
bl SetVisualFlags
|
||||
lsls r0, 24
|
||||
lsrs r5, r0, 24
|
||||
cmp r4, 0
|
||||
beq _0806E32A
|
||||
ldr r0, _0806E4E8
|
||||
ldr r0, [r0]
|
||||
movs r3, 0xB8
|
||||
lsls r3, 1
|
||||
adds r0, r3
|
||||
movs r1, 0x1
|
||||
strb r1, [r0]
|
||||
ldr r2, _0806E504
|
||||
adds r0, r6, 0
|
||||
adds r1, r6, 0
|
||||
bl sub_800A34C
|
||||
_0806E32A:
|
||||
cmp r5, 0
|
||||
beq _0806E340
|
||||
mov r0, r8
|
||||
bl sub_80428EC
|
||||
ldr r0, _0806E508
|
||||
ldr r2, [r0]
|
||||
mov r0, r8
|
||||
ldr r1, [sp, 0x18]
|
||||
bl sub_80522F4
|
||||
_0806E340:
|
||||
cmp r7, 0x4
|
||||
bne _0806E3AC
|
||||
mov r0, r8
|
||||
movs r1, 0x1A
|
||||
bl HasAbility
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _0806E3AC
|
||||
movs r4, 0
|
||||
ldr r0, [sp, 0x24]
|
||||
movs r2, 0x10
|
||||
ldrsh r1, [r0, r2]
|
||||
cmp r1, 0
|
||||
bge _0806E360
|
||||
adds r1, 0x3
|
||||
_0806E360:
|
||||
asrs r1, 2
|
||||
ldr r3, [sp, 0x24]
|
||||
movs r2, 0xE
|
||||
ldrsh r0, [r3, r2]
|
||||
cmp r1, r0
|
||||
blt _0806E36E
|
||||
movs r4, 0x1
|
||||
_0806E36E:
|
||||
ldr r0, [sp, 0x24]
|
||||
movs r1, 0x2
|
||||
adds r2, r4, 0
|
||||
bl SetVisualFlags
|
||||
lsls r0, 24
|
||||
lsrs r5, r0, 24
|
||||
cmp r4, 0
|
||||
beq _0806E396
|
||||
ldr r0, _0806E4E8
|
||||
ldr r0, [r0]
|
||||
ldr r3, _0806E50C
|
||||
adds r1, r0, r3
|
||||
movs r0, 0x1
|
||||
strb r0, [r1]
|
||||
ldr r2, _0806E504
|
||||
adds r0, r6, 0
|
||||
adds r1, r6, 0
|
||||
bl sub_800A34C
|
||||
_0806E396:
|
||||
cmp r5, 0
|
||||
beq _0806E3AC
|
||||
mov r0, r8
|
||||
bl sub_80428D8
|
||||
ldr r0, _0806E510
|
||||
ldr r2, [r0]
|
||||
mov r0, r8
|
||||
ldr r1, [sp, 0x18]
|
||||
bl sub_80522F4
|
||||
_0806E3AC:
|
||||
cmp r7, 0xC
|
||||
bne _0806E41A
|
||||
mov r0, r8
|
||||
movs r1, 0x43
|
||||
bl HasAbility
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _0806E41A
|
||||
movs r4, 0
|
||||
ldr r0, [sp, 0x24]
|
||||
movs r2, 0x10
|
||||
ldrsh r1, [r0, r2]
|
||||
cmp r1, 0
|
||||
bge _0806E3CC
|
||||
adds r1, 0x3
|
||||
_0806E3CC:
|
||||
asrs r1, 2
|
||||
ldr r3, [sp, 0x24]
|
||||
movs r2, 0xE
|
||||
ldrsh r0, [r3, r2]
|
||||
cmp r1, r0
|
||||
blt _0806E3DA
|
||||
movs r4, 0x1
|
||||
_0806E3DA:
|
||||
ldr r0, [sp, 0x24]
|
||||
movs r1, 0x10
|
||||
adds r2, r4, 0
|
||||
bl SetVisualFlags
|
||||
lsls r0, 24
|
||||
lsrs r5, r0, 24
|
||||
cmp r4, 0
|
||||
beq _0806E404
|
||||
ldr r0, _0806E4E8
|
||||
ldr r0, [r0]
|
||||
movs r3, 0xB9
|
||||
lsls r3, 1
|
||||
adds r1, r0, r3
|
||||
movs r0, 0x1
|
||||
strb r0, [r1]
|
||||
ldr r2, _0806E504
|
||||
adds r0, r6, 0
|
||||
adds r1, r6, 0
|
||||
bl sub_800A34C
|
||||
_0806E404:
|
||||
cmp r5, 0
|
||||
beq _0806E41A
|
||||
mov r0, r8
|
||||
bl sub_8042978
|
||||
ldr r0, _0806E514
|
||||
ldr r2, [r0]
|
||||
mov r0, r8
|
||||
ldr r1, [sp, 0x18]
|
||||
bl sub_80522F4
|
||||
_0806E41A:
|
||||
cmp r7, 0x2
|
||||
bne _0806E486
|
||||
mov r0, r8
|
||||
movs r1, 0x46
|
||||
bl HasAbility
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _0806E486
|
||||
movs r4, 0
|
||||
ldr r0, [sp, 0x24]
|
||||
movs r2, 0x10
|
||||
ldrsh r1, [r0, r2]
|
||||
cmp r1, 0
|
||||
bge _0806E43A
|
||||
adds r1, 0x3
|
||||
_0806E43A:
|
||||
asrs r1, 2
|
||||
ldr r3, [sp, 0x24]
|
||||
movs r2, 0xE
|
||||
ldrsh r0, [r3, r2]
|
||||
cmp r1, r0
|
||||
blt _0806E448
|
||||
movs r4, 0x1
|
||||
_0806E448:
|
||||
ldr r0, [sp, 0x24]
|
||||
movs r1, 0x20
|
||||
adds r2, r4, 0
|
||||
bl SetVisualFlags
|
||||
lsls r0, 24
|
||||
lsrs r5, r0, 24
|
||||
cmp r4, 0
|
||||
beq _0806E470
|
||||
ldr r0, _0806E4E8
|
||||
ldr r0, [r0]
|
||||
ldr r3, _0806E518
|
||||
adds r1, r0, r3
|
||||
movs r0, 0x1
|
||||
strb r0, [r1]
|
||||
ldr r2, _0806E504
|
||||
adds r0, r6, 0
|
||||
adds r1, r6, 0
|
||||
bl sub_800A34C
|
||||
_0806E470:
|
||||
cmp r5, 0
|
||||
beq _0806E486
|
||||
mov r0, r8
|
||||
bl sub_804298C
|
||||
ldr r0, _0806E51C
|
||||
ldr r2, [r0]
|
||||
mov r0, r8
|
||||
ldr r1, [sp, 0x18]
|
||||
bl sub_80522F4
|
||||
_0806E486:
|
||||
adds r0, r6, 0
|
||||
bl sub_800A2A0
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _0806E4B8
|
||||
mov r0, r8
|
||||
adds r1, r7, 0
|
||||
bl MonsterIsType
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _0806E4B8
|
||||
ldr r0, _0806E4E8
|
||||
ldr r0, [r0]
|
||||
movs r4, 0xBA
|
||||
lsls r4, 1
|
||||
adds r0, r4
|
||||
movs r1, 0x1
|
||||
strb r1, [r0]
|
||||
ldr r2, _0806E520
|
||||
adds r0, r6, 0
|
||||
adds r1, r6, 0
|
||||
bl sub_800A34C
|
||||
_0806E4B8:
|
||||
mov r0, r8
|
||||
bl GetApparentWeather
|
||||
lsls r0, 24
|
||||
lsrs r4, r0, 24
|
||||
cmp r4, 0x1
|
||||
bne _0806E53E
|
||||
cmp r7, 0x2
|
||||
bne _0806E524
|
||||
ldr r0, _0806E4E8
|
||||
ldr r0, [r0]
|
||||
movs r1, 0xB6
|
||||
lsls r1, 1
|
||||
adds r0, r1
|
||||
strb r4, [r0]
|
||||
ldr r2, _0806E520
|
||||
adds r0, r6, 0
|
||||
adds r1, r6, 0
|
||||
bl sub_800A34C
|
||||
b _0806E53E
|
||||
.align 2, 0
|
||||
_0806E4E4: .4byte gTypeEffectivenessChart
|
||||
_0806E4E8: .4byte gDungeon
|
||||
_0806E4EC: .4byte gUnknown_8106F54
|
||||
_0806E4F0: .4byte gUnknown_80F54B4
|
||||
_0806E4F4: .4byte gUnknown_8106EFC
|
||||
_0806E4F8: .4byte 0x0000016d
|
||||
_0806E4FC: .4byte gUnknown_8106F1C
|
||||
_0806E500: .4byte 0x0000016f
|
||||
_0806E504: .4byte gUnknown_8106F0C
|
||||
_0806E508: .4byte gUnknown_80FEDA8
|
||||
_0806E50C: .4byte 0x00000171
|
||||
_0806E510: .4byte gUnknown_80FED88
|
||||
_0806E514: .4byte gUnknown_80FEDC8
|
||||
_0806E518: .4byte 0x00000173
|
||||
_0806E51C: .4byte gUnknown_80FEDE8
|
||||
_0806E520: .4byte gUnknown_8106F14
|
||||
_0806E524:
|
||||
cmp r7, 0x3
|
||||
bne _0806E53E
|
||||
ldr r0, _0806E560
|
||||
ldr r0, [r0]
|
||||
movs r2, 0xB6
|
||||
lsls r2, 1
|
||||
adds r0, r2
|
||||
strb r4, [r0]
|
||||
ldr r2, _0806E564
|
||||
adds r0, r6, 0
|
||||
adds r1, r6, 0
|
||||
bl sub_800A34C
|
||||
_0806E53E:
|
||||
cmp r4, 0x4
|
||||
bne _0806E586
|
||||
cmp r7, 0x2
|
||||
bne _0806E56C
|
||||
ldr r0, _0806E560
|
||||
ldr r0, [r0]
|
||||
ldr r3, _0806E568
|
||||
adds r1, r0, r3
|
||||
movs r0, 0x1
|
||||
strb r0, [r1]
|
||||
ldr r2, _0806E564
|
||||
adds r0, r6, 0
|
||||
adds r1, r6, 0
|
||||
bl sub_800A34C
|
||||
b _0806E586
|
||||
.align 2, 0
|
||||
_0806E560: .4byte gDungeon
|
||||
_0806E564: .4byte gUnknown_8106F1C
|
||||
_0806E568: .4byte 0x0000016b
|
||||
_0806E56C:
|
||||
cmp r7, 0x3
|
||||
bne _0806E586
|
||||
ldr r0, _0806E62C
|
||||
ldr r0, [r0]
|
||||
ldr r2, _0806E630
|
||||
adds r1, r0, r2
|
||||
movs r0, 0x1
|
||||
strb r0, [r1]
|
||||
ldr r2, _0806E634
|
||||
adds r0, r6, 0
|
||||
adds r1, r6, 0
|
||||
bl sub_800A34C
|
||||
_0806E586:
|
||||
cmp r4, 0x3
|
||||
bne _0806E5A6
|
||||
cmp r7, 0x1
|
||||
beq _0806E5A6
|
||||
ldr r2, _0806E638
|
||||
adds r0, r6, 0
|
||||
adds r1, r6, 0
|
||||
bl sub_800A34C
|
||||
ldr r0, _0806E62C
|
||||
ldr r0, [r0]
|
||||
movs r3, 0xB5
|
||||
lsls r3, 1
|
||||
adds r1, r0, r3
|
||||
movs r0, 0x1
|
||||
strb r0, [r1]
|
||||
_0806E5A6:
|
||||
ldr r0, _0806E62C
|
||||
ldr r1, [r0]
|
||||
ldr r2, _0806E63C
|
||||
adds r0, r1, r2
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0
|
||||
bne _0806E5B8
|
||||
cmp r4, 0x6
|
||||
bne _0806E5CE
|
||||
_0806E5B8:
|
||||
cmp r7, 0x5
|
||||
bne _0806E5CE
|
||||
ldr r3, _0806E640
|
||||
adds r1, r3
|
||||
movs r0, 0x1
|
||||
strb r0, [r1]
|
||||
ldr r2, _0806E644
|
||||
adds r0, r6, 0
|
||||
adds r1, r6, 0
|
||||
bl sub_800A34C
|
||||
_0806E5CE:
|
||||
ldr r0, _0806E62C
|
||||
ldr r1, [r0]
|
||||
ldr r4, _0806E648
|
||||
adds r0, r1, r4
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0
|
||||
beq _0806E5F4
|
||||
cmp r7, 0x2
|
||||
bne _0806E5F4
|
||||
movs r0, 0xBB
|
||||
lsls r0, 1
|
||||
adds r1, r0
|
||||
movs r0, 0x1
|
||||
strb r0, [r1]
|
||||
ldr r2, _0806E644
|
||||
adds r0, r6, 0
|
||||
adds r1, r6, 0
|
||||
bl sub_800A34C
|
||||
_0806E5F4:
|
||||
cmp r7, 0x5
|
||||
bne _0806E618
|
||||
ldr r0, [sp, 0x24]
|
||||
adds r0, 0xC0
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0xB
|
||||
bne _0806E618
|
||||
ldr r0, _0806E62C
|
||||
ldr r0, [r0]
|
||||
ldr r2, _0806E64C
|
||||
adds r1, r0, r2
|
||||
movs r0, 0x1
|
||||
strb r0, [r1]
|
||||
ldr r2, _0806E650
|
||||
adds r0, r6, 0
|
||||
adds r1, r6, 0
|
||||
bl sub_800A34C
|
||||
_0806E618:
|
||||
mov r0, r9
|
||||
_0806E61A:
|
||||
add sp, 0x28
|
||||
pop {r3-r5}
|
||||
mov r8, r3
|
||||
mov r9, r4
|
||||
mov r10, r5
|
||||
pop {r4-r7}
|
||||
pop {r1}
|
||||
bx r1
|
||||
.align 2, 0
|
||||
_0806E62C: .4byte gDungeon
|
||||
_0806E630: .4byte 0x0000016b
|
||||
_0806E634: .4byte gUnknown_8106F14
|
||||
_0806E638: .4byte gUnknown_8106F64
|
||||
_0806E63C: .4byte 0x0000e277
|
||||
_0806E640: .4byte 0x00000175
|
||||
_0806E644: .4byte gUnknown_8106F1C
|
||||
_0806E648: .4byte 0x0000e278
|
||||
_0806E64C: .4byte 0x00000177
|
||||
_0806E650: .4byte gUnknown_8106F0C
|
||||
thumb_func_end sub_806E100
|
||||
|
||||
.align 2, 0
|
||||
|
|
|
|||
|
|
@ -87,7 +87,12 @@ typedef struct Dungeon
|
|||
u8 fill14[0xB8 - 0x14];
|
||||
Entity *unkB8;
|
||||
Entity *unkBC;
|
||||
u8 fillC0[0x16D - 0xC0];
|
||||
u8 fillC0[0x13C - 0xC0];
|
||||
u8 unk13C[2];
|
||||
u8 fill13E[0x16A - 0x13E];
|
||||
u8 unk16A;
|
||||
u8 unk16B;
|
||||
u8 unk16C;
|
||||
u8 unk16D;
|
||||
u8 fill16E[0x179 - 0x16E];
|
||||
/* 0x179 */ bool8 pokemonExposed; // True if a Pokémon on the floor has the Exposed status.
|
||||
|
|
|
|||
|
|
@ -13,6 +13,226 @@
|
|||
|
||||
u32 gTypeEffectivenessMultipliers[] = {0, 1, 2, 4};
|
||||
|
||||
|
||||
struct unkStruct_806D010
|
||||
{
|
||||
s32 unk0;
|
||||
u32 unk4;
|
||||
u32 unk8;
|
||||
u8 unkC;
|
||||
u8 unkD;
|
||||
u8 unkE;
|
||||
u8 unkF;
|
||||
};
|
||||
|
||||
struct dumb_struct
|
||||
{
|
||||
u32 *unk0[4];
|
||||
};
|
||||
extern struct dumb_struct gUnknown_8106F54;
|
||||
|
||||
|
||||
extern u32 gUnknown_8106F0C;
|
||||
extern u32 gUnknown_8106F1C;
|
||||
extern u32 gUnknown_8106F14;
|
||||
extern u32 gUnknown_8106F64;
|
||||
extern u32 gUnknown_8106EFC[2];
|
||||
|
||||
extern u8 *gUnknown_80FEDE8[];
|
||||
extern u8 *gUnknown_80FEDC8[];
|
||||
extern u8 *gUnknown_80FEDA8[];
|
||||
extern u8 *gUnknown_80FED88[];
|
||||
|
||||
extern s32 gUnknown_80F54B4[2][4];
|
||||
|
||||
void sub_80522F4(Entity *, Entity *, u8 *);
|
||||
void sub_80428D8(Entity *);
|
||||
void sub_8042978(Entity *);
|
||||
void sub_804298C(Entity *);
|
||||
u8 sub_800A2A0(s32 *);
|
||||
void sub_800A34C(s32 *, s32 *, s32 *);
|
||||
void sub_800A020(s32 *, u32);
|
||||
void sub_80428EC(Entity *);
|
||||
|
||||
bool8 sub_806E100(s32 *param_1, Entity *pokemon, Entity *target, u8 type, struct unkStruct_806D010 *param_5)
|
||||
{
|
||||
bool8 bVar1;
|
||||
bool8 bVar2;
|
||||
bool8 bVar3;
|
||||
bool8 bVar5;
|
||||
char cVar3;
|
||||
char cVar4;
|
||||
char cVar5;
|
||||
char cVar6;
|
||||
bool8 bVar4;
|
||||
EntityInfo *targetInfo;
|
||||
s32 effectiveness;
|
||||
s32 index;
|
||||
struct dumb_struct local_48;
|
||||
s32 local_38 [2];
|
||||
s32 local_2c;
|
||||
s32 local_28;
|
||||
EntityInfo *pokemonInfo;
|
||||
u8 weather;
|
||||
s32 temp;
|
||||
|
||||
bVar4 = FALSE;
|
||||
local_28 = FALSE;
|
||||
pokemonInfo = pokemon->info;
|
||||
targetInfo = target->info;
|
||||
sub_800A020(param_1,1);
|
||||
param_5->unkD = 0;
|
||||
param_5->unkE = 0;
|
||||
local_2c = FALSE;
|
||||
if (!EntityExists(target)) {
|
||||
return TRUE;
|
||||
}
|
||||
else {
|
||||
if ((type == TYPE_NORMAL) || (type == TYPE_FIGHTING)) {
|
||||
local_28 = TRUE;
|
||||
}
|
||||
if ((HasAbility(target, ABILITY_WONDER_GUARD)) && (type != TYPE_NONE)) {
|
||||
local_2c = TRUE;
|
||||
}
|
||||
param_5->unk8 = 2;
|
||||
for (index = 0; index < 2; index++) {
|
||||
local_48 = gUnknown_8106F54;
|
||||
if (sub_800A2A0(param_1) != '\0') break;
|
||||
if (((local_28) && (targetInfo->types[index] == TYPE_GHOST)) && (targetInfo->exposed == FALSE)) {
|
||||
effectiveness = EFFECTIVENESS_IMMUNE;
|
||||
gDungeon->pokemonExposed = TRUE;
|
||||
}
|
||||
else {
|
||||
effectiveness = gTypeEffectivenessChart[type][targetInfo->types[index]];
|
||||
}
|
||||
if (effectiveness != EFFECTIVENESS_NEUTRAL) {
|
||||
sub_800A34C(param_1,param_1,local_48.unk0[effectiveness]);
|
||||
}
|
||||
local_38[index] = effectiveness;
|
||||
gDungeon->unk13C[index] = effectiveness;
|
||||
}
|
||||
|
||||
param_5->unk8 = gUnknown_80F54B4[local_38[0]][local_38[1]];
|
||||
bVar4 = TRUE;
|
||||
if ((param_5->unk8 != 3) && (bVar4 = FALSE, local_2c != 0)) {
|
||||
temp = gUnknown_8106EFC[1];
|
||||
param_1[0] = gUnknown_8106EFC[0];
|
||||
param_1[1] = temp;
|
||||
}
|
||||
|
||||
if (((type == TYPE_FIRE) || (type == TYPE_ICE)) && (HasAbility(target,ABILITY_THICK_FAT))) {
|
||||
gDungeon->unk16D = TRUE;
|
||||
sub_800A34C(param_1,param_1,&gUnknown_8106F1C);
|
||||
}
|
||||
if ((type == TYPE_FIRE) && (GetFlashFireStatus(target) != '\0')) {
|
||||
gDungeon->fill16E[0] = TRUE;
|
||||
sub_800A020(param_1,0);
|
||||
param_5->unk8 = 0;
|
||||
param_5->unkD = 0;
|
||||
param_5->unkE = 1;
|
||||
bVar4 = '\0';
|
||||
}
|
||||
if ((type == TYPE_GROUND) && (HasAbility(target, ABILITY_LEVITATE))) {
|
||||
gDungeon->fill16E[1] = TRUE;
|
||||
sub_800A020(param_1,0);
|
||||
param_5->unk8 = 0;
|
||||
param_5->unkD = 0;
|
||||
param_5->unkE = 1;
|
||||
bVar4 = '\0';
|
||||
}
|
||||
if ((type == TYPE_WATER) && (HasAbility(pokemon, ABILITY_TORRENT))) {
|
||||
bVar1 = pokemonInfo->maxHPStat / 4 >= pokemonInfo->HP;
|
||||
cVar3 = SetVisualFlags(pokemonInfo,0x80,bVar1);
|
||||
if (bVar1) {
|
||||
gDungeon->fill16E[2] = TRUE;
|
||||
sub_800A34C(param_1,param_1,&gUnknown_8106F0C);
|
||||
}
|
||||
if (cVar3 != '\0') {
|
||||
sub_80428EC(pokemon);
|
||||
sub_80522F4(pokemon,target,*gUnknown_80FEDA8);
|
||||
}
|
||||
}
|
||||
if ((type == TYPE_GRASS) && (HasAbility(pokemon, ABILITY_OVERGROW))) {
|
||||
bVar2 = pokemonInfo->maxHPStat / 4 >= pokemonInfo->HP;
|
||||
cVar4 = SetVisualFlags(pokemonInfo,2,bVar2);
|
||||
if (bVar2) {
|
||||
gDungeon->fill16E[3] = TRUE;
|
||||
sub_800A34C(param_1,param_1,&gUnknown_8106F0C);
|
||||
}
|
||||
if (cVar4 != '\0') {
|
||||
sub_80428D8(pokemon);
|
||||
sub_80522F4(pokemon,target,*gUnknown_80FED88);
|
||||
}
|
||||
}
|
||||
if ((type == TYPE_BUG) && (HasAbility(pokemon, ABILITY_SWARM))) {
|
||||
bVar3 = pokemonInfo->maxHPStat / 4 >= pokemonInfo->HP;
|
||||
cVar5 = SetVisualFlags(pokemonInfo,0x10,bVar3);
|
||||
if (bVar3) {
|
||||
gDungeon->fill16E[4] = TRUE;
|
||||
sub_800A34C(param_1,param_1,&gUnknown_8106F0C);
|
||||
}
|
||||
if (cVar5 != '\0') {
|
||||
sub_8042978(pokemon);
|
||||
sub_80522F4(pokemon,target,*gUnknown_80FEDC8);
|
||||
}
|
||||
}
|
||||
if ((type == TYPE_FIRE) && (HasAbility(pokemon, ABILITY_BLAZE))) {
|
||||
bVar5 = pokemonInfo->maxHPStat / 4 >= pokemonInfo->HP;
|
||||
cVar6 = SetVisualFlags(pokemonInfo,0x20,bVar5);
|
||||
if (bVar5) {
|
||||
gDungeon->fill16E[5] = TRUE;
|
||||
sub_800A34C(param_1,param_1,&gUnknown_8106F0C);
|
||||
}
|
||||
if (cVar6 != '\0') {
|
||||
sub_804298C(pokemon);
|
||||
sub_80522F4(pokemon,target,*gUnknown_80FEDE8);
|
||||
}
|
||||
}
|
||||
if ((sub_800A2A0(param_1) == '\0') && (MonsterIsType(pokemon, type))) {
|
||||
gDungeon->fill16E[6] = TRUE;
|
||||
sub_800A34C(param_1,param_1,&gUnknown_8106F14);
|
||||
}
|
||||
weather = GetApparentWeather(pokemon);
|
||||
if (weather == WEATHER_SUNNY) {
|
||||
if (type == TYPE_FIRE) {
|
||||
gDungeon->unk16C = TRUE;
|
||||
sub_800A34C(param_1,param_1,&gUnknown_8106F14);
|
||||
}
|
||||
else if (type == TYPE_WATER) {
|
||||
gDungeon->unk16C = TRUE;
|
||||
sub_800A34C(param_1,param_1,&gUnknown_8106F1C);
|
||||
}
|
||||
}
|
||||
if (weather == WEATHER_RAIN) {
|
||||
if (type == TYPE_FIRE) {
|
||||
gDungeon->unk16B = TRUE;
|
||||
sub_800A34C(param_1,param_1,&gUnknown_8106F1C);
|
||||
}
|
||||
else if (type == TYPE_WATER) {
|
||||
gDungeon->unk16B = TRUE;
|
||||
sub_800A34C(param_1,param_1,&gUnknown_8106F14);
|
||||
}
|
||||
}
|
||||
if ((weather == WEATHER_CLOUDY) && (type != TYPE_NORMAL)) {
|
||||
sub_800A34C(param_1,param_1,&gUnknown_8106F64);
|
||||
gDungeon->unk16A = TRUE;
|
||||
}
|
||||
if (((gDungeon->mudSportTurns != 0) || (weather == WEATHER_FOG)) && (type == TYPE_ELECTRIC)) {
|
||||
gDungeon->fill16E[7] = TRUE;
|
||||
sub_800A34C(param_1,param_1,&gUnknown_8106F1C);
|
||||
}
|
||||
if ((gDungeon->waterSportTurns != 0) && (type == TYPE_FIRE)) {
|
||||
gDungeon->fill16E[8] = TRUE;
|
||||
sub_800A34C(param_1,param_1,&gUnknown_8106F1C);
|
||||
}
|
||||
if ((type == TYPE_ELECTRIC) && (pokemonInfo->charging.chargingStatus == STATUS_CHARGING)) {
|
||||
gDungeon->fill16E[9] = TRUE;
|
||||
sub_800A34C(param_1,param_1,&gUnknown_8106F0C);
|
||||
}
|
||||
}
|
||||
return bVar4;
|
||||
}
|
||||
|
||||
s32 WeightWeakTypePicker(Entity *user, Entity *target, u8 moveType)
|
||||
{
|
||||
s32 weight = 1;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user