mirror of
https://github.com/pret/pmd-red.git
synced 2026-08-25 02:04:55 -05:00
finish out all jirachi funcs.. thx jiang for JirachiWish match
This commit is contained in:
@@ -1,660 +0,0 @@
|
||||
#include "asm/constants/gba_constants.inc"
|
||||
#include "asm/macros.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start JirachiWish
|
||||
JirachiWish:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r10
|
||||
mov r6, r9
|
||||
mov r5, r8
|
||||
push {r5-r7}
|
||||
sub sp, 0x78
|
||||
movs r0, 0x1A
|
||||
bl GetEntityFromClientType
|
||||
adds r6, r0, 0
|
||||
ldr r0, _0808B82C
|
||||
ldr r1, _0808B830
|
||||
bl CopySpeciesNametoBuffer
|
||||
ldr r4, _0808B834
|
||||
adds r0, r4, 0
|
||||
bl sub_80855E4
|
||||
adds r0, r6, 0
|
||||
bl _call_via_r4
|
||||
movs r0, 0
|
||||
bl sub_8041888
|
||||
ldr r0, [r6, 0x70]
|
||||
movs r1, 0xAE
|
||||
lsls r1, 1
|
||||
adds r0, r1
|
||||
movs r1, 0
|
||||
movs r4, 0x1
|
||||
strb r4, [r0]
|
||||
ldr r0, [r6, 0x70]
|
||||
movs r2, 0xAF
|
||||
lsls r2, 1
|
||||
adds r0, r2
|
||||
strb r1, [r0]
|
||||
adds r0, r6, 0
|
||||
movs r1, 0xE
|
||||
movs r2, 0
|
||||
bl sub_80861B8
|
||||
ldr r0, _0808B838
|
||||
bl sub_80855E4
|
||||
ldr r0, _0808B83C
|
||||
ldr r0, [r0]
|
||||
ldr r1, _0808B840
|
||||
adds r0, r1
|
||||
strb r4, [r0]
|
||||
movs r0, 0x1E
|
||||
bl sub_8083ED8
|
||||
movs r0, 0x1E
|
||||
movs r1, 0x46
|
||||
bl sub_803E708
|
||||
ldr r0, _0808B844
|
||||
bl DisplayDungeonDialogue
|
||||
movs r0, 0xA
|
||||
movs r1, 0x46
|
||||
bl sub_803E708
|
||||
ldr r0, _0808B848
|
||||
bl PlaySoundEffect
|
||||
movs r0, 0x96
|
||||
movs r1, 0x46
|
||||
bl sub_803E708
|
||||
adds r0, r6, 0
|
||||
bl sub_80862BC
|
||||
ldr r0, _0808B84C
|
||||
bl DisplayDungeonDialogue
|
||||
movs r0, 0x79
|
||||
bl sub_8083E88
|
||||
movs r0, 0xA
|
||||
movs r1, 0x46
|
||||
bl sub_803E708
|
||||
adds r0, r6, 0
|
||||
movs r1, 0
|
||||
bl sub_80856E0
|
||||
movs r0, 0xB5
|
||||
lsls r0, 1
|
||||
bl PlaySoundEffect
|
||||
ldr r0, _0808B850
|
||||
bl DisplayDungeonDialogue
|
||||
movs r0, 0xA
|
||||
movs r1, 0x46
|
||||
bl sub_803E708
|
||||
adds r0, r6, 0
|
||||
bl SpriteLookAroundEffect
|
||||
ldr r0, _0808B854
|
||||
bl DisplayDungeonDialogue
|
||||
movs r0, 0xA
|
||||
movs r1, 0x46
|
||||
bl sub_803E708
|
||||
_0808B690:
|
||||
ldr r4, _0808B858
|
||||
_0808B692:
|
||||
movs r0, 0
|
||||
ldr r1, [r4]
|
||||
ldr r2, _0808B85C
|
||||
ldr r3, _0808B860
|
||||
bl sub_8052C68
|
||||
mov r9, r0
|
||||
cmp r0, 0
|
||||
ble _0808B692
|
||||
movs r0, 0xA
|
||||
movs r1, 0x46
|
||||
bl sub_803E708
|
||||
mov r2, r9
|
||||
cmp r2, 0x1
|
||||
bne _0808B754
|
||||
ldr r0, _0808B864
|
||||
bl DisplayDungeonDialogue
|
||||
movs r0, 0xA
|
||||
movs r1, 0x46
|
||||
bl sub_803E708
|
||||
adds r0, r6, 0
|
||||
bl JirachiWishGrantDialogue
|
||||
movs r0, 0
|
||||
add r7, sp, 0x6C
|
||||
_0808B6CA:
|
||||
adds r0, 0x1
|
||||
mov r8, r0
|
||||
mov r4, sp
|
||||
movs r5, 0x8
|
||||
_0808B6D2:
|
||||
adds r0, r4, 0
|
||||
movs r1, 0x69
|
||||
movs r2, 0
|
||||
bl sub_8045C28
|
||||
adds r4, 0x4
|
||||
subs r5, 0x1
|
||||
cmp r5, 0
|
||||
bge _0808B6D2
|
||||
movs r0, 0x3
|
||||
bl DungeonRandomCapped
|
||||
ldrh r1, [r6, 0x4]
|
||||
adds r1, r0
|
||||
subs r1, 0x1
|
||||
lsls r1, 16
|
||||
lsrs r1, 16
|
||||
ldr r2, _0808B868
|
||||
ldr r0, [sp, 0x6C]
|
||||
ands r0, r2
|
||||
orrs r0, r1
|
||||
str r0, [sp, 0x6C]
|
||||
movs r0, 0x3
|
||||
bl DungeonRandomCapped
|
||||
ldrh r2, [r6, 0x6]
|
||||
adds r2, r0
|
||||
subs r2, 0x1
|
||||
lsls r2, 16
|
||||
ldr r0, _0808B86C
|
||||
ldr r1, [sp, 0x6C]
|
||||
ands r1, r0
|
||||
orrs r1, r2
|
||||
str r1, [sp, 0x6C]
|
||||
movs r2, 0
|
||||
ldrsh r0, [r7, r2]
|
||||
asrs r1, 16
|
||||
bl GetMapTile_2
|
||||
ldrh r1, [r0]
|
||||
movs r0, 0x3
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _0808B744
|
||||
movs r0, 0xA6
|
||||
lsls r0, 1
|
||||
bl PlaySoundEffect
|
||||
adds r0, r7, 0
|
||||
bl sub_808BB3C
|
||||
adds r0, r6, 0
|
||||
adds r1, r7, 0
|
||||
mov r2, sp
|
||||
movs r3, 0x9
|
||||
bl sub_8046860
|
||||
_0808B744:
|
||||
mov r0, r8
|
||||
cmp r0, 0x5
|
||||
ble _0808B6CA
|
||||
ldr r0, [r6, 0x70]
|
||||
ldr r2, _0808B870
|
||||
adds r1, r0, r2
|
||||
movs r0, 0
|
||||
strb r0, [r1]
|
||||
_0808B754:
|
||||
mov r0, r9
|
||||
cmp r0, 0x2
|
||||
bne _0808B80A
|
||||
ldr r0, _0808B874
|
||||
bl DisplayDungeonDialogue
|
||||
movs r0, 0xA
|
||||
movs r1, 0x46
|
||||
bl sub_803E708
|
||||
adds r0, r6, 0
|
||||
bl JirachiWishGrantDialogue
|
||||
movs r0, 0
|
||||
add r1, sp, 0x24
|
||||
mov r8, r1
|
||||
add r7, sp, 0x70
|
||||
_0808B776:
|
||||
adds r0, 0x1
|
||||
mov r10, r0
|
||||
mov r4, r8
|
||||
movs r5, 0x8
|
||||
_0808B77E:
|
||||
movs r0, 0
|
||||
bl sub_803D73C
|
||||
adds r1, r0, 0
|
||||
lsls r1, 24
|
||||
lsrs r1, 24
|
||||
adds r0, r4, 0
|
||||
movs r2, 0
|
||||
bl sub_8045C28
|
||||
adds r4, 0x4
|
||||
subs r5, 0x1
|
||||
cmp r5, 0
|
||||
bge _0808B77E
|
||||
movs r0, 0x3
|
||||
bl DungeonRandomCapped
|
||||
ldrh r1, [r6, 0x4]
|
||||
adds r1, r0
|
||||
subs r1, 0x1
|
||||
lsls r1, 16
|
||||
lsrs r1, 16
|
||||
ldr r2, _0808B868
|
||||
ldr r0, [sp, 0x70]
|
||||
ands r0, r2
|
||||
orrs r0, r1
|
||||
str r0, [sp, 0x70]
|
||||
movs r0, 0x3
|
||||
bl DungeonRandomCapped
|
||||
ldrh r2, [r6, 0x6]
|
||||
adds r2, r0
|
||||
subs r2, 0x1
|
||||
lsls r2, 16
|
||||
ldr r0, _0808B86C
|
||||
ldr r1, [sp, 0x70]
|
||||
ands r1, r0
|
||||
orrs r1, r2
|
||||
str r1, [sp, 0x70]
|
||||
movs r2, 0
|
||||
ldrsh r0, [r7, r2]
|
||||
asrs r1, 16
|
||||
bl GetMapTile_2
|
||||
ldrh r1, [r0]
|
||||
movs r0, 0x3
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _0808B7FA
|
||||
movs r0, 0xC8
|
||||
lsls r0, 1
|
||||
bl PlaySoundEffect
|
||||
adds r0, r7, 0
|
||||
bl sub_808BB3C
|
||||
adds r0, r6, 0
|
||||
adds r1, r7, 0
|
||||
mov r2, r8
|
||||
movs r3, 0x9
|
||||
bl sub_8046860
|
||||
_0808B7FA:
|
||||
mov r0, r10
|
||||
cmp r0, 0x5
|
||||
ble _0808B776
|
||||
ldr r0, [r6, 0x70]
|
||||
ldr r2, _0808B870
|
||||
adds r1, r0, r2
|
||||
movs r0, 0
|
||||
strb r0, [r1]
|
||||
_0808B80A:
|
||||
mov r0, r9
|
||||
cmp r0, 0x3
|
||||
bne _0808B8CA
|
||||
bl JirachiFriendAreaSearch
|
||||
lsls r0, 24
|
||||
lsrs r4, r0, 24
|
||||
cmp r4, 0x3A
|
||||
bne _0808B87C
|
||||
ldr r0, _0808B878
|
||||
bl DisplayDungeonDialogue
|
||||
movs r0, 0xA
|
||||
movs r1, 0x46
|
||||
bl sub_803E708
|
||||
b _0808B690
|
||||
.align 2, 0
|
||||
_0808B82C: .4byte gUnknown_202E038
|
||||
_0808B830: .4byte 0x0000019d
|
||||
_0808B834: .4byte sub_808BBA8
|
||||
_0808B838: .4byte sub_80861A8
|
||||
_0808B83C: .4byte gDungeonGlobalData
|
||||
_0808B840: .4byte 0x0001356c
|
||||
_0808B844: .4byte gUnknown_8105668
|
||||
_0808B848: .4byte 0x000001a7
|
||||
_0808B84C: .4byte gUnknown_8105674
|
||||
_0808B850: .4byte gUnknown_81056B8
|
||||
_0808B854: .4byte gUnknown_81056DC
|
||||
_0808B858: .4byte gUnknown_8105798
|
||||
_0808B85C: .4byte gUnknown_810579C
|
||||
_0808B860: .4byte 0x00000705
|
||||
_0808B864: .4byte gUnknown_810581C
|
||||
_0808B868: .4byte 0xffff0000
|
||||
_0808B86C: .4byte 0x0000ffff
|
||||
_0808B870: .4byte 0x0000015d
|
||||
_0808B874: .4byte gUnknown_8105974
|
||||
_0808B878: .4byte gUnknown_8105A08
|
||||
_0808B87C:
|
||||
ldr r0, _0808BA30
|
||||
bl DisplayDungeonDialogue
|
||||
movs r0, 0xA
|
||||
movs r1, 0x46
|
||||
bl sub_803E708
|
||||
adds r0, r6, 0
|
||||
bl JirachiWishGrantDialogue
|
||||
ldr r0, [r6, 0x70]
|
||||
ldr r2, _0808BA34
|
||||
adds r1, r0, r2
|
||||
movs r0, 0
|
||||
strb r0, [r1]
|
||||
ldr r0, _0808BA38
|
||||
bl DisplayDungeonDialogue
|
||||
adds r0, r4, 0
|
||||
bl UnlockFriendArea
|
||||
movs r0, 0xD4
|
||||
bl PlaySoundEffect
|
||||
bl GetLeaderEntity
|
||||
adds r1, r0, 0
|
||||
ldr r0, _0808BA3C
|
||||
movs r2, 0
|
||||
bl SetMessageArgument
|
||||
ldr r0, _0808BA40
|
||||
adds r1, r4, 0
|
||||
movs r2, 0
|
||||
bl sub_8092578
|
||||
ldr r0, _0808BA44
|
||||
bl DisplayDungeonDialogue
|
||||
_0808B8CA:
|
||||
mov r0, r9
|
||||
cmp r0, 0x4
|
||||
bne _0808B98E
|
||||
ldr r0, _0808BA48
|
||||
bl DisplayDungeonDialogue
|
||||
movs r0, 0xA
|
||||
movs r1, 0x46
|
||||
bl sub_803E708
|
||||
adds r0, r6, 0
|
||||
bl JirachiWishGrantDialogue
|
||||
movs r0, 0
|
||||
add r1, sp, 0x48
|
||||
mov r8, r1
|
||||
add r7, sp, 0x74
|
||||
_0808B8EC:
|
||||
adds r0, 0x1
|
||||
mov r10, r0
|
||||
mov r4, r8
|
||||
movs r5, 0x3
|
||||
_0808B8F4:
|
||||
movs r0, 0x8
|
||||
bl DungeonRandomCapped
|
||||
ldr r2, _0808BA4C
|
||||
adds r0, r2
|
||||
ldrb r1, [r0]
|
||||
adds r0, r4, 0
|
||||
movs r2, 0
|
||||
bl sub_8045C28
|
||||
adds r4, 0x4
|
||||
subs r5, 0x1
|
||||
cmp r5, 0
|
||||
bge _0808B8F4
|
||||
movs r0, 0x3
|
||||
bl DungeonRandomCapped
|
||||
ldrh r1, [r6, 0x4]
|
||||
adds r1, r0
|
||||
subs r1, 0x1
|
||||
lsls r1, 16
|
||||
lsrs r1, 16
|
||||
ldr r2, _0808BA50
|
||||
ldr r0, [sp, 0x74]
|
||||
ands r0, r2
|
||||
orrs r0, r1
|
||||
str r0, [sp, 0x74]
|
||||
movs r0, 0x3
|
||||
bl DungeonRandomCapped
|
||||
ldrh r2, [r6, 0x6]
|
||||
adds r2, r0
|
||||
subs r2, 0x1
|
||||
lsls r2, 16
|
||||
ldr r0, _0808BA54
|
||||
ldr r1, [sp, 0x74]
|
||||
ands r1, r0
|
||||
orrs r1, r2
|
||||
str r1, [sp, 0x74]
|
||||
movs r2, 0
|
||||
ldrsh r0, [r7, r2]
|
||||
asrs r1, 16
|
||||
bl GetMapTile_2
|
||||
ldrh r1, [r0]
|
||||
movs r0, 0x3
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _0808B970
|
||||
movs r0, 0xC8
|
||||
lsls r0, 1
|
||||
bl PlaySoundEffect
|
||||
adds r0, r7, 0
|
||||
bl sub_808BB3C
|
||||
adds r0, r6, 0
|
||||
adds r1, r7, 0
|
||||
mov r2, r8
|
||||
movs r3, 0x4
|
||||
bl sub_8046860
|
||||
_0808B970:
|
||||
mov r0, r10
|
||||
cmp r0, 0x4
|
||||
ble _0808B8EC
|
||||
ldr r0, [r6, 0x70]
|
||||
ldr r2, _0808BA34
|
||||
adds r1, r0, r2
|
||||
movs r0, 0
|
||||
strb r0, [r1]
|
||||
ldr r0, _0808BA58
|
||||
bl DisplayDungeonDialogue
|
||||
movs r0, 0xA
|
||||
movs r1, 0x46
|
||||
bl sub_803E708
|
||||
_0808B98E:
|
||||
mov r0, r9
|
||||
cmp r0, 0x5
|
||||
bne _0808B9F8
|
||||
ldr r0, _0808BA5C
|
||||
bl DisplayDungeonDialogue
|
||||
movs r0, 0xA
|
||||
movs r1, 0x46
|
||||
bl sub_803E708
|
||||
adds r0, r6, 0
|
||||
bl JirachiWishGrantDialogue
|
||||
ldr r0, [r6, 0x70]
|
||||
ldr r2, _0808BA34
|
||||
adds r1, r0, r2
|
||||
movs r0, 0
|
||||
strb r0, [r1]
|
||||
ldr r0, _0808BA60
|
||||
bl DisplayDungeonDialogue
|
||||
movs r0, 0xA
|
||||
movs r1, 0x46
|
||||
bl sub_803E708
|
||||
bl GetLeaderEntity
|
||||
adds r1, r0, 0
|
||||
adds r1, 0x4
|
||||
adds r0, r6, 0x4
|
||||
bl CalculateFacingDir
|
||||
adds r1, r0, 0
|
||||
adds r0, r6, 0
|
||||
bl SetFacingDirection
|
||||
movs r0, 0xA
|
||||
movs r1, 0x46
|
||||
bl sub_803E708
|
||||
ldr r0, _0808BA64
|
||||
bl DisplayDungeonDialogue
|
||||
movs r0, 0xA
|
||||
movs r1, 0x46
|
||||
bl sub_803E708
|
||||
ldr r0, _0808BA68
|
||||
ldr r0, [r0]
|
||||
ldr r1, _0808BA6C
|
||||
adds r0, r1
|
||||
movs r1, 0x1
|
||||
strb r1, [r0]
|
||||
_0808B9F8:
|
||||
ldr r0, _0808BA70
|
||||
bl DisplayDungeonDialogue
|
||||
adds r0, r6, 0
|
||||
bl JirachiSpinEffect
|
||||
movs r0, 0xA
|
||||
movs r1, 0x46
|
||||
bl sub_803E708
|
||||
ldr r0, _0808BA74
|
||||
bl DisplayDungeonDialogue
|
||||
movs r0, 0xA
|
||||
movs r1, 0x46
|
||||
bl sub_803E708
|
||||
bl sub_808BD38
|
||||
add sp, 0x78
|
||||
pop {r3-r5}
|
||||
mov r8, r3
|
||||
mov r9, r4
|
||||
mov r10, r5
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_0808BA30: .4byte gUnknown_8105AD4
|
||||
_0808BA34: .4byte 0x0000015d
|
||||
_0808BA38: .4byte gUnknown_8105B20
|
||||
_0808BA3C: .4byte gAvailablePokemonNames
|
||||
_0808BA40: .4byte gUnknown_202DE58
|
||||
_0808BA44: .4byte gUnknown_8105B68
|
||||
_0808BA48: .4byte gUnknown_8105BA8
|
||||
_0808BA4C: .4byte gUnknown_81074FC
|
||||
_0808BA50: .4byte 0xffff0000
|
||||
_0808BA54: .4byte 0x0000ffff
|
||||
_0808BA58: .4byte gUnknown_8105BF4
|
||||
_0808BA5C: .4byte gUnknown_8105D2C
|
||||
_0808BA60: .4byte gUnknown_8105D80
|
||||
_0808BA64: .4byte gUnknown_8105D9C
|
||||
_0808BA68: .4byte gDungeonGlobalData
|
||||
_0808BA6C: .4byte 0x00000674
|
||||
_0808BA70: .4byte gUnknown_81058E0
|
||||
_0808BA74: .4byte gUnknown_810593C
|
||||
thumb_func_end JirachiWish
|
||||
|
||||
thumb_func_start JirachiReFightDialogue
|
||||
JirachiReFightDialogue:
|
||||
push {lr}
|
||||
ldr r0, _0808BA94
|
||||
bl HasRecruitedMon
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _0808BA9C
|
||||
bl sub_8086448
|
||||
ldr r0, _0808BA98
|
||||
bl sub_80866C4
|
||||
b _0808BAA0
|
||||
.align 2, 0
|
||||
_0808BA94: .4byte 0x0000019d
|
||||
_0808BA98: .4byte gJirachiReFightDialogue_1
|
||||
_0808BA9C:
|
||||
bl JirachiPreFightDialogue
|
||||
_0808BAA0:
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end JirachiReFightDialogue
|
||||
|
||||
thumb_func_start JirachiWishGrantFlash
|
||||
JirachiWishGrantFlash:
|
||||
push {r4,r5,lr}
|
||||
sub sp, 0x4
|
||||
ldr r0, _0808BB34
|
||||
bl PlaySoundEffect
|
||||
ldr r1, _0808BB38
|
||||
movs r0, 0x1F
|
||||
str r0, [r1]
|
||||
movs r4, 0xFA
|
||||
movs r5, 0x1
|
||||
_0808BAB8:
|
||||
str r5, [sp]
|
||||
adds r0, r4, 0
|
||||
adds r1, r4, 0
|
||||
adds r2, r4, 0
|
||||
movs r3, 0x1
|
||||
bl SetDungeonBGColorRGB
|
||||
movs r0, 0x46
|
||||
bl sub_803E46C
|
||||
subs r4, 0xA
|
||||
cmp r4, 0x95
|
||||
bgt _0808BAB8
|
||||
movs r0, 0xA
|
||||
movs r1, 0x46
|
||||
bl sub_803E708
|
||||
movs r4, 0xFA
|
||||
movs r5, 0x1
|
||||
_0808BADE:
|
||||
str r5, [sp]
|
||||
adds r0, r4, 0
|
||||
adds r1, r4, 0
|
||||
adds r2, r4, 0
|
||||
movs r3, 0x1
|
||||
bl SetDungeonBGColorRGB
|
||||
movs r0, 0x46
|
||||
bl sub_803E46C
|
||||
subs r4, 0xA
|
||||
cmp r4, 0xC7
|
||||
bgt _0808BADE
|
||||
movs r0, 0xA
|
||||
movs r1, 0x46
|
||||
bl sub_803E708
|
||||
movs r4, 0xFA
|
||||
movs r5, 0x1
|
||||
_0808BB04:
|
||||
str r5, [sp]
|
||||
adds r0, r4, 0
|
||||
adds r1, r4, 0
|
||||
adds r2, r4, 0
|
||||
movs r3, 0x1
|
||||
bl SetDungeonBGColorRGB
|
||||
movs r0, 0x46
|
||||
bl sub_803E46C
|
||||
subs r4, 0xA
|
||||
cmp r4, 0
|
||||
bge _0808BB04
|
||||
movs r0, 0xA
|
||||
movs r1, 0x46
|
||||
bl sub_803E708
|
||||
bl sub_8085EB0
|
||||
add sp, 0x4
|
||||
pop {r4,r5}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_0808BB34: .4byte 0x000002c1
|
||||
_0808BB38: .4byte gUnknown_202EDC8
|
||||
thumb_func_end JirachiWishGrantFlash
|
||||
|
||||
thumb_func_start sub_808BB3C
|
||||
sub_808BB3C:
|
||||
push {lr}
|
||||
sub sp, 0x8
|
||||
adds r3, r0, 0
|
||||
movs r0, 0
|
||||
ldrsh r1, [r3, r0]
|
||||
lsls r0, r1, 1
|
||||
adds r0, r1
|
||||
lsls r0, 11
|
||||
movs r1, 0xC0
|
||||
lsls r1, 4
|
||||
adds r0, r1
|
||||
cmp r0, 0
|
||||
bge _0808BB58
|
||||
adds r0, 0xFF
|
||||
_0808BB58:
|
||||
lsls r0, 8
|
||||
lsrs r0, 16
|
||||
ldr r1, _0808BBA0
|
||||
ldr r2, [sp, 0x4]
|
||||
ands r2, r1
|
||||
orrs r2, r0
|
||||
str r2, [sp, 0x4]
|
||||
movs r0, 0x2
|
||||
ldrsh r1, [r3, r0]
|
||||
lsls r0, r1, 1
|
||||
adds r0, r1
|
||||
lsls r0, 11
|
||||
movs r1, 0x80
|
||||
lsls r1, 5
|
||||
adds r0, r1
|
||||
cmp r0, 0
|
||||
bge _0808BB7C
|
||||
adds r0, 0xFF
|
||||
_0808BB7C:
|
||||
lsls r0, 8
|
||||
lsrs r0, 16
|
||||
lsls r0, 16
|
||||
ldr r1, _0808BBA4
|
||||
ands r2, r1
|
||||
orrs r2, r0
|
||||
str r2, [sp, 0x4]
|
||||
movs r0, 0
|
||||
str r0, [sp]
|
||||
movs r0, 0x64
|
||||
movs r1, 0
|
||||
movs r2, 0
|
||||
add r3, sp, 0x4
|
||||
bl sub_8085EC8
|
||||
add sp, 0x8
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_0808BBA0: .4byte 0xffff0000
|
||||
_0808BBA4: .4byte 0x0000ffff
|
||||
thumb_func_end sub_808BB3C
|
||||
|
||||
.align 2,0
|
||||
17
include/code_80A26CC.h
Normal file
17
include/code_80A26CC.h
Normal file
@@ -0,0 +1,17 @@
|
||||
struct unkStruct_80A2608
|
||||
{
|
||||
/* 0x0 */ s16 unk0;
|
||||
/* 0x2 */ s16 unk2;
|
||||
/* 0x4 */ s16 unk4;
|
||||
/* 0x6 */ u16 unk6;
|
||||
/* 0x8 */ u16 unk8;
|
||||
/* 0xA */ u16 unkA;
|
||||
/* 0xC */ u8 unkC;
|
||||
/* 0xD */ u8 unkD;
|
||||
/* 0xE */ s16 unkE;
|
||||
/* 0x10 */ u8 unk10;
|
||||
/* 0x11 */ u8 unk11;
|
||||
};
|
||||
|
||||
struct unkStruct_80A2608 *sub_80A2608(s16 r0);
|
||||
struct unkStruct_80A2608 *sub_80A2620(s16 r0);
|
||||
@@ -58,7 +58,8 @@ struct DungeonGlobalData
|
||||
u8 fill66C[0x671 - 0x66C];
|
||||
/* 0x671 */ bool8 monsterHouseActive;
|
||||
/* 0x672 */ u8 unk672;
|
||||
u8 fill673[0x675 - 0x673];
|
||||
u8 fill673[0x674 - 0x673];
|
||||
u8 unk674;
|
||||
u8 unk675;
|
||||
u8 unk676[0x68A - 0x676];
|
||||
/* 0x68A */ u8 unk68A;
|
||||
|
||||
@@ -274,7 +274,6 @@ SECTIONS {
|
||||
src/code_8086A3C.o(.text);
|
||||
asm/code_8086A3C.o(.text);
|
||||
src/code_8057824_1.o(.text);
|
||||
asm/jirachi_wish.o(.text);
|
||||
src/code_80521D0_1.o(.text);
|
||||
src/pokemon.o(.text);
|
||||
asm/pokemon.o(.text);
|
||||
|
||||
@@ -141,9 +141,9 @@ extern void sub_8086A54(struct DungeonEntity *);
|
||||
|
||||
extern void sub_806BFC0(struct DungeonEntityData *, u32);
|
||||
|
||||
void sub_808BBA8(struct DungeonEntity *param_1)
|
||||
void sub_808BBA8(struct DungeonEntity *jirachiEntity)
|
||||
{
|
||||
sub_806BFC0(param_1->entityData,0);
|
||||
sub_806BFC0(jirachiEntity->entityData,0);
|
||||
}
|
||||
|
||||
void JirachiDropInEffect(struct DungeonEntity *jirachiEntity)
|
||||
|
||||
@@ -1,16 +1,22 @@
|
||||
#include "global.h"
|
||||
#include "constants/direction.h"
|
||||
#include "constants/friend_area.h"
|
||||
#include "constants/weather.h"
|
||||
#include "dungeon_global_data.h"
|
||||
#include "dungeon_entity.h"
|
||||
#include "dungeon_map_access.h"
|
||||
#include "dungeon_random.h"
|
||||
#include "dungeon_util.h"
|
||||
#include "dungeon_util_1.h"
|
||||
#include "friend_area.h"
|
||||
#include "item.h"
|
||||
#include "pokemon.h"
|
||||
#include "position_util.h"
|
||||
|
||||
extern u32 gUnknown_202EDC8;
|
||||
extern u8 gUnknown_202E038[0x50];
|
||||
extern u8 gAvailablePokemonNames[0x58];
|
||||
extern u8 gUnknown_202DE58[];
|
||||
|
||||
extern s16 gUnknown_80F57CA;
|
||||
extern s16 gUnknown_80F57D2;
|
||||
@@ -219,6 +225,29 @@ extern u32 gZapdosPostStoryPreFightDialogue_3;
|
||||
extern u32 gZapdosPostStoryPreFightDialogue_4;
|
||||
extern u32 gZapdosPostStoryPreFightDialogue_5;
|
||||
extern u32 gZapdosPostStoryPreFightDialogue_6;
|
||||
extern u32 gUnknown_8105668;
|
||||
extern u32 gUnknown_8105674;
|
||||
extern u32 gUnknown_81056B8;
|
||||
extern u32 gUnknown_81056DC;
|
||||
extern u32 gUnknown_810579C;
|
||||
extern u32 gUnknown_8105974;
|
||||
extern u32 gUnknown_810581C;
|
||||
|
||||
extern u32 gUnknown_8105BF4;
|
||||
extern u32 gUnknown_8105D2C;
|
||||
extern u32 gUnknown_8105D80;
|
||||
extern u32 gUnknown_8105D9C;
|
||||
extern u32 gUnknown_81058E0;
|
||||
extern u32 gUnknown_810593C;
|
||||
extern u32 gUnknown_8105A08;
|
||||
extern u32 gUnknown_8105AD4;
|
||||
extern u32 gUnknown_8105B20;
|
||||
extern u32 gUnknown_8105B68;
|
||||
extern u32 gUnknown_8105BA8;
|
||||
extern u8 *gUnknown_8105798[];
|
||||
extern u32 gJirachiReFightDialogue_1;
|
||||
|
||||
extern u8 gUnknown_81074FC[];
|
||||
|
||||
extern struct DungeonEntity *xxx_call_GetLeaderEntity(void);
|
||||
extern struct DungeonEntity *GetEntityFromClientType(u32);
|
||||
@@ -231,6 +260,7 @@ extern void sub_803E708(u32, u32);
|
||||
extern void DisplayDungeonDialogue(u32 *r0);
|
||||
extern void sub_8083E88(u32);
|
||||
extern void JirachiSpinEffect(struct DungeonEntity *);
|
||||
extern void JirachiWishGrantDialogue(struct DungeonEntity *jirachiEntity);
|
||||
|
||||
extern void sub_80862BC(struct DungeonEntity *);
|
||||
extern void sub_8086448();
|
||||
@@ -251,7 +281,7 @@ extern void SetFacingDirection(struct DungeonEntity *, u32);
|
||||
extern void sub_8049ED4();
|
||||
extern void sub_8085860(s32 r0, u32 r1);
|
||||
extern void sub_806CE68(struct DungeonEntity *, u32);
|
||||
|
||||
extern void sub_8092578(u8 *buffer, u8 index, u8 r2);
|
||||
extern void sub_8052D44(u8 *, struct DungeonEntity *, struct DungeonEntity *);
|
||||
extern void sub_8097FD0(u32);
|
||||
extern void SetMessageArgument(u8 *, struct DungeonEntity *, u32);
|
||||
@@ -363,7 +393,14 @@ extern u32 gUnknown_81015A0;
|
||||
extern u32 gZapdosReFightDialogue_2;
|
||||
extern u32 gZapdosReFightDialogue_3;
|
||||
extern u32 gZapdosReFightDialogue_4;
|
||||
|
||||
extern s32 sub_8052C68(u32, u8 *, u32 *, u32);
|
||||
extern void sub_80861A8(void);
|
||||
extern void sub_8045C28(struct ItemSlot *, u8 , u8 *);
|
||||
extern void sub_808BD38(void);
|
||||
extern u8 JirachiFriendAreaSearch(void);
|
||||
extern void sub_808BB3C(s16 *);
|
||||
extern void sub_8046860(struct DungeonEntity *, s32 *, struct ItemSlot *, u32);
|
||||
extern u32 sub_803D73C(u32);
|
||||
|
||||
void ZapdosReFightDialogue(void)
|
||||
{
|
||||
@@ -1909,7 +1946,7 @@ void sub_8089620(struct DungeonEntity *param_1)
|
||||
PlaySoundEffect(0x1f8);
|
||||
while( 1 ) {
|
||||
iVar2 = iVar2 - iVar1;
|
||||
iVar1 = iVar1 -= 0x18;
|
||||
iVar1 -= 0x18;
|
||||
if (iVar1 < 0x14) {
|
||||
iVar1 = 0x14;
|
||||
}
|
||||
@@ -3557,3 +3594,280 @@ void sub_808B50C(void)
|
||||
sub_803E708(10,70);
|
||||
gDungeonGlobalData->unk2 = 1;
|
||||
}
|
||||
|
||||
void JirachiWish(void)
|
||||
{
|
||||
u8 friendArea;
|
||||
struct DungeonEntity *JirachiEntity;
|
||||
struct Position *LeaderPos;
|
||||
struct DungeonEntity *LeaderEntity;
|
||||
s32 wishChoice;
|
||||
s32 iVar4;
|
||||
u32 uVar6;
|
||||
s32 iVar9;
|
||||
struct ItemSlot auStack152 [9];
|
||||
struct ItemSlot auStack116 [9];
|
||||
struct ItemSlot auStack80 [9];
|
||||
s32 local_2c;
|
||||
s32 local_28;
|
||||
s32 local_24;
|
||||
s32 temp;
|
||||
s32 temp2;
|
||||
s32 temp3;
|
||||
|
||||
JirachiEntity = GetEntityFromClientType(0x1a);
|
||||
CopySpeciesNametoBuffer(gUnknown_202E038,0x19d); // SPECIES_JIRACHI
|
||||
sub_80855E4(sub_808BBA8);
|
||||
sub_808BBA8(JirachiEntity);
|
||||
sub_8041888(0);
|
||||
JirachiEntity->entityData->unk15C = 1;
|
||||
JirachiEntity->entityData->unk15E = 0;
|
||||
sub_80861B8(JirachiEntity,0xe,0);
|
||||
sub_80855E4(sub_80861A8);
|
||||
gDungeonGlobalData->unk1356C = 1;
|
||||
sub_8083ED8(0x1e);
|
||||
sub_803E708(0x1e,0x46);
|
||||
DisplayDungeonDialogue(&gUnknown_8105668);
|
||||
sub_803E708(10,0x46);
|
||||
PlaySoundEffect(0x1a7);
|
||||
sub_803E708(0x96,0x46);
|
||||
sub_80862BC(JirachiEntity);
|
||||
DisplayDungeonDialogue(&gUnknown_8105674);
|
||||
sub_8083E88(0x79);
|
||||
sub_803E708(10,0x46);
|
||||
sub_80856E0(JirachiEntity,0);
|
||||
PlaySoundEffect(0x16a);
|
||||
DisplayDungeonDialogue(&gUnknown_81056B8);
|
||||
sub_803E708(10,0x46);
|
||||
SpriteLookAroundEffect(JirachiEntity);
|
||||
DisplayDungeonDialogue(&gUnknown_81056DC);
|
||||
sub_803E708(10,0x46);
|
||||
while( 1 ) {
|
||||
while (1) {
|
||||
#ifndef NONMATCHING
|
||||
register s32 r0 asm("r0");
|
||||
asm("mov\t%0, #0":"=r"(r0));
|
||||
#else
|
||||
s32 r0 = 0;
|
||||
#endif
|
||||
wishChoice = sub_8052C68(r0,*gUnknown_8105798,&gUnknown_810579C,0x705);
|
||||
if (wishChoice >= 1) break;
|
||||
}
|
||||
sub_803E708(10,0x46);
|
||||
if (wishChoice == 1) {
|
||||
s32 r8;
|
||||
// Lots of Money
|
||||
DisplayDungeonDialogue(&gUnknown_810581C);
|
||||
sub_803E708(10,0x46);
|
||||
JirachiWishGrantDialogue(JirachiEntity);
|
||||
|
||||
for(iVar4 = 0; iVar4 < 6; iVar4 = r8)
|
||||
{
|
||||
r8 = iVar4 + 1;
|
||||
for(iVar9 = 0; iVar9 < 9; iVar9++)
|
||||
{
|
||||
sub_8045C28(&auStack152[iVar9], 0x69, 0);
|
||||
}
|
||||
temp = (u16)(((((u16)JirachiEntity->posWorld.x + DungeonRandomCapped(3)) - 1) << 16) >> 16);
|
||||
local_2c &= 0xffff0000;
|
||||
local_2c |= temp;
|
||||
|
||||
temp = ((u16)JirachiEntity->posWorld.y + DungeonRandomCapped(3) + -1) * 0x10000;
|
||||
local_2c &= 0xffff;
|
||||
local_2c |= temp;
|
||||
if ((GetMapTile_2((s16)local_2c, local_2c >> 16)->tileType & 3) != 0) {
|
||||
PlaySoundEffect(0x14c);
|
||||
sub_808BB3C((s16 *)&local_2c);
|
||||
sub_8046860(JirachiEntity,&local_2c,auStack152,9);
|
||||
}
|
||||
}
|
||||
JirachiEntity->entityData->unk15D = 0;
|
||||
}
|
||||
if (wishChoice == 2) {
|
||||
// Lots of Items
|
||||
DisplayDungeonDialogue(&gUnknown_8105974);
|
||||
sub_803E708(10,0x46);
|
||||
JirachiWishGrantDialogue(JirachiEntity);
|
||||
|
||||
for(iVar4 = 0; iVar4 < 6; iVar4++)
|
||||
{
|
||||
#ifndef NONMATCHING
|
||||
asm("":::"sl");
|
||||
#endif
|
||||
for(iVar9 = 0; iVar9 < 9; iVar9++)
|
||||
{
|
||||
sub_8045C28(&auStack116[iVar9], sub_803D73C(0),0);
|
||||
}
|
||||
temp2 = (u16)(((((u16)JirachiEntity->posWorld.x + DungeonRandomCapped(3)) - 1) << 16) >> 16);
|
||||
local_28 &= 0xffff0000;
|
||||
local_28 |= temp2;
|
||||
|
||||
temp2 = ((u16)JirachiEntity->posWorld.y + DungeonRandomCapped(3) + -1) * 0x10000;
|
||||
local_28 &= 0xffff;
|
||||
local_28 |= temp2;
|
||||
if ((GetMapTile_2((s16)local_28, local_28 >> 16)->tileType & 3) != 0) {
|
||||
PlaySoundEffect(400);
|
||||
sub_808BB3C((s16 *)&local_28);
|
||||
sub_8046860(JirachiEntity,&local_28,auStack116,9);
|
||||
}
|
||||
}
|
||||
JirachiEntity->entityData->unk15D = 0;
|
||||
}
|
||||
|
||||
if (wishChoice == 3)
|
||||
{
|
||||
// A Friend Area
|
||||
friendArea = JirachiFriendAreaSearch();
|
||||
if (friendArea == NUM_FRIEND_AREAS)
|
||||
{
|
||||
// You want a friend area? But you already have many friend areas...
|
||||
DisplayDungeonDialogue(&gUnknown_8105A08);
|
||||
sub_803E708(10,0x46);
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
// You want a friend area? As you wish..
|
||||
DisplayDungeonDialogue(&gUnknown_8105AD4);
|
||||
sub_803E708(10,0x46);
|
||||
JirachiWishGrantDialogue(JirachiEntity);
|
||||
JirachiEntity->entityData->unk15D = 0;
|
||||
DisplayDungeonDialogue(&gUnknown_8105B20);
|
||||
UnlockFriendArea(friendArea);
|
||||
PlaySoundEffect(0xd4);
|
||||
LeaderEntity = GetLeaderEntity();
|
||||
SetMessageArgument(gAvailablePokemonNames,LeaderEntity,0);
|
||||
sub_8092578(gUnknown_202DE58,friendArea,0);
|
||||
// Obtained the friend area!
|
||||
DisplayDungeonDialogue(&gUnknown_8105B68);
|
||||
}
|
||||
}
|
||||
if (wishChoice == 4) {
|
||||
// More Strength..
|
||||
DisplayDungeonDialogue(&gUnknown_8105BA8);
|
||||
sub_803E708(10,0x46);
|
||||
JirachiWishGrantDialogue(JirachiEntity);
|
||||
|
||||
for(iVar4 = 0; iVar4 < 5; iVar4++)
|
||||
{
|
||||
|
||||
for(iVar9 = 0; iVar9 < 4; iVar9++)
|
||||
{
|
||||
sub_8045C28(&auStack80[iVar9],gUnknown_81074FC[DungeonRandomCapped(8)],0);
|
||||
}
|
||||
temp3 = (u16)(((((u16)JirachiEntity->posWorld.x + DungeonRandomCapped(3)) - 1) << 16) >> 16);
|
||||
local_24 &= 0xffff0000;
|
||||
local_24 |= temp3;
|
||||
|
||||
temp3 = ((u16)JirachiEntity->posWorld.y + DungeonRandomCapped(3) + -1) * 0x10000;
|
||||
local_24 &= 0xffff;
|
||||
local_24 |= temp3;
|
||||
if ((GetMapTile_2((s16)local_24, local_24 >> 16)->tileType & 3) != 0) {
|
||||
PlaySoundEffect(400);
|
||||
sub_808BB3C((s16 *)&local_24);
|
||||
sub_8046860(JirachiEntity,&local_24,auStack80,4);
|
||||
}
|
||||
}
|
||||
JirachiEntity->entityData->unk15D = 0;
|
||||
DisplayDungeonDialogue(&gUnknown_8105BF4);
|
||||
sub_803E708(10,0x46);
|
||||
}
|
||||
if (wishChoice == 5) {
|
||||
// Something Good...
|
||||
DisplayDungeonDialogue(&gUnknown_8105D2C);
|
||||
sub_803E708(10,0x46);
|
||||
JirachiWishGrantDialogue(JirachiEntity);
|
||||
JirachiEntity->entityData->unk15D = 0;
|
||||
DisplayDungeonDialogue(&gUnknown_8105D80);
|
||||
sub_803E708(10,0x46);
|
||||
LeaderPos = &GetLeaderEntity()->posWorld;
|
||||
uVar6 = CalculateFacingDir(&JirachiEntity->posWorld,LeaderPos);
|
||||
SetFacingDirection(JirachiEntity,uVar6);
|
||||
sub_803E708(10,0x46);
|
||||
DisplayDungeonDialogue(&gUnknown_8105D9C);
|
||||
sub_803E708(10,0x46);
|
||||
gDungeonGlobalData->unk674 = 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
DisplayDungeonDialogue(&gUnknown_81058E0);
|
||||
JirachiSpinEffect(JirachiEntity);
|
||||
sub_803E708(10,0x46);
|
||||
DisplayDungeonDialogue(&gUnknown_810593C);
|
||||
sub_803E708(10,0x46);
|
||||
sub_808BD38();
|
||||
}
|
||||
|
||||
void JirachiReFightDialogue(void)
|
||||
{
|
||||
if(HasRecruitedMon(SPECIES_JIRACHI))
|
||||
{
|
||||
sub_8086448();
|
||||
sub_80866C4(&gJirachiReFightDialogue_1);
|
||||
}
|
||||
else
|
||||
{
|
||||
JirachiPreFightDialogue();
|
||||
}
|
||||
}
|
||||
|
||||
void JirachiWishGrantFlash(void)
|
||||
{
|
||||
s32 iVar1;
|
||||
|
||||
PlaySoundEffect(0x2c1);
|
||||
gUnknown_202EDC8 = 0x1f;
|
||||
|
||||
for(iVar1 = 0xFA; iVar1 > 0x95; iVar1 -= 10)
|
||||
{
|
||||
SetDungeonBGColorRGB(iVar1,iVar1,iVar1,1,1);
|
||||
sub_803E46C(0x46);
|
||||
}
|
||||
sub_803E708(10,0x46);
|
||||
|
||||
for(iVar1 = 0xFA; iVar1 > 0xC7; iVar1 -= 10)
|
||||
{
|
||||
SetDungeonBGColorRGB(iVar1,iVar1,iVar1,1,1);
|
||||
sub_803E46C(0x46);
|
||||
}
|
||||
sub_803E708(10,0x46);
|
||||
|
||||
for(iVar1 = 0xFA; iVar1 >= 0; iVar1 -= 10)
|
||||
{
|
||||
SetDungeonBGColorRGB(iVar1,iVar1,iVar1,1,1);
|
||||
sub_803E46C(0x46);
|
||||
}
|
||||
sub_803E708(10,0x46);
|
||||
sub_8085EB0();
|
||||
}
|
||||
|
||||
void sub_808BB3C(s16 *param_1)
|
||||
{
|
||||
register s32 iVar1 asm("r0");
|
||||
s32 uVar2;
|
||||
u32 local_8;
|
||||
|
||||
iVar1 = param_1[0] * 0x1800 + 0xc00;
|
||||
if (iVar1 < 0) {
|
||||
iVar1 += 0xff;
|
||||
}
|
||||
|
||||
iVar1 <<= 8;
|
||||
iVar1 = (u16)(iVar1 >> 16);
|
||||
|
||||
uVar2 = (local_8 & 0xffff0000) | iVar1;
|
||||
local_8 = uVar2;
|
||||
|
||||
iVar1 = param_1[1] * 0x1800 + 0x1000;
|
||||
if (iVar1 < 0) {
|
||||
iVar1 += 0xff;
|
||||
}
|
||||
|
||||
iVar1 <<= 8;
|
||||
iVar1 = (u16)(iVar1 >> 0x10);
|
||||
iVar1 <<= 0x10;
|
||||
|
||||
local_8 = (iVar1) | (uVar2 & 0x0000ffff);
|
||||
sub_8085EC8(100,0,0,&local_8,0);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user