more decomp

This commit is contained in:
Seth Barberee
2022-11-02 22:05:20 -07:00
parent 5ecb84bfbc
commit e9f8c788da
46 changed files with 1854 additions and 3263 deletions

View File

@@ -10833,320 +10833,4 @@ _080243D6:
_080243E4: .4byte gUnknown_3001B60
thumb_func_end sub_802437C
thumb_func_start sub_80243E8
sub_80243E8:
push {r4,r5,lr}
sub sp, 0x3C
ldr r3, _08024448
ldr r0, _0802444C
ldr r0, [r0]
ldr r2, _08024450
adds r1, r0, r2
movs r4, 0
ldrsh r2, [r1, r4]
movs r4, 0xDD
lsls r4, 2
adds r1, r0, r4
movs r4, 0
ldrsh r1, [r1, r4]
muls r1, r2
movs r4, 0xDC
lsls r4, 2
adds r2, r0, r4
movs r4, 0
ldrsh r2, [r2, r4]
adds r1, r2
lsls r1, 1
adds r0, 0x1A
adds r0, r1
movs r2, 0
ldrsh r1, [r0, r2]
movs r0, 0x58
muls r0, r1
ldr r4, [r3]
adds r4, r0
add r5, sp, 0x28
adds r1, r4, 0
adds r1, 0x4C
adds r0, r5, 0
movs r2, 0xA
bl sub_80922B4
ldr r1, _08024454
mov r0, sp
adds r2, r5, 0
bl sprintf_2
adds r0, r4, 0
add sp, 0x3C
pop {r4,r5}
pop {r1}
bx r1
.align 2, 0
_08024448: .4byte gRecruitedPokemonRef
_0802444C: .4byte gUnknown_3001B60
_08024450: .4byte 0x00000376
_08024454: .4byte gUnknown_80DC9A4
thumb_func_end sub_80243E8
thumb_func_start sub_8024458
sub_8024458:
push {r4-r6,lr}
adds r4, r0, 0
adds r5, r1, 0
lsls r4, 16
asrs r4, 16
ldr r6, _080244DC
movs r0, 0xA6
lsls r0, 1
movs r1, 0x8
bl MemoryAlloc
str r0, [r6]
adds r1, r0, 0
adds r1, 0x48
strh r4, [r1]
adds r1, 0x98
str r5, [r1]
adds r2, r0, 0
adds r2, 0xE4
lsls r1, r5, 1
adds r1, r5
lsls r1, 3
adds r1, 0xE8
adds r1, r0, r1
str r1, [r2]
adds r0, 0xE8
bl sub_8006518
ldr r1, [r6]
adds r0, r1, 0
adds r0, 0xE0
ldr r2, [r0]
lsls r0, r2, 1
adds r0, r2
lsls r0, 3
adds r1, r0
adds r1, 0xE8
ldr r0, _080244E0
ldm r0!, {r2-r4}
stm r1!, {r2-r4}
ldm r0!, {r2-r4}
stm r1!, {r2-r4}
ldr r2, [r6]
adds r0, r2, 0
adds r0, 0xE4
ldr r1, [r0]
movs r3, 0xA4
lsls r3, 1
adds r0, r2, r3
str r0, [r1, 0x14]
movs r4, 0xA5
lsls r4, 1
adds r1, r2, r4
movs r0, 0xA
strb r0, [r1]
bl sub_8024604
bl sub_802452C
ldr r0, [r6]
bl sub_8013984
movs r0, 0x1
pop {r4-r6}
pop {r1}
bx r1
.align 2, 0
_080244DC: .4byte gUnknown_203B2AC
_080244E0: .4byte gUnknown_80DC9C8
thumb_func_end sub_8024458
thumb_func_start sub_80244E4
sub_80244E4:
push {r4,lr}
ldr r4, _08024500
ldr r0, [r4]
bl GetKeyPress
cmp r0, 0x1
beq _08024504
cmp r0, 0x2
bne _0802450E
movs r0, 0x1
bl PlayMenuSoundEffect
movs r0, 0x2
b _08024524
.align 2, 0
_08024500: .4byte gUnknown_203B2AC
_08024504:
movs r0, 0
bl PlayMenuSoundEffect
movs r0, 0x3
b _08024524
_0802450E:
ldr r0, [r4]
bl sub_8013938
lsls r0, 24
cmp r0, 0
bne _0802451E
movs r0, 0
b _08024524
_0802451E:
bl sub_802452C
movs r0, 0x1
_08024524:
pop {r4}
pop {r1}
bx r1
thumb_func_end sub_80244E4
thumb_func_start sub_802452C
sub_802452C:
push {lr}
bl sub_8024588
bl sub_80245D0
pop {r0}
bx r0
thumb_func_end sub_802452C
thumb_func_start sub_802453C
sub_802453C:
push {r4,r5,lr}
ldr r4, _08024580
ldr r2, [r4]
cmp r2, 0
beq _0802457A
adds r0, r2, 0
adds r0, 0xE0
ldr r0, [r0]
lsls r1, r0, 1
adds r1, r0
lsls r1, 3
adds r1, r2, r1
adds r1, 0xE8
ldr r0, _08024584
ldm r0!, {r2,r3,r5}
stm r1!, {r2,r3,r5}
ldm r0!, {r2,r3,r5}
stm r1!, {r2,r3,r5}
bl ResetUnusedInputStruct
ldr r0, [r4]
adds r0, 0xE8
movs r1, 0x1
movs r2, 0x1
bl sub_800641C
ldr r0, [r4]
bl MemoryFree
movs r0, 0
str r0, [r4]
_0802457A:
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_08024580: .4byte gUnknown_203B2AC
_08024584: .4byte gUnknown_80DC9B0
thumb_func_end sub_802453C
thumb_func_start sub_8024588
sub_8024588:
push {r4,lr}
ldr r4, _080245C4
ldr r0, [r4]
ldrh r1, [r0, 0x20]
movs r2, 0xA4
lsls r2, 1
adds r0, r2
movs r2, 0
strb r1, [r0]
ldr r0, [r4]
ldrh r1, [r0, 0x1E]
ldr r3, _080245C8
adds r0, r3
strb r1, [r0]
ldr r0, [r4]
ldr r1, _080245CC
adds r0, r1
strb r2, [r0]
bl ResetUnusedInputStruct
ldr r0, [r4]
adds r0, 0xE8
movs r1, 0x1
movs r2, 0x1
bl sub_800641C
pop {r4}
pop {r0}
bx r0
.align 2, 0
_080245C4: .4byte gUnknown_203B2AC
_080245C8: .4byte 0x00000149
_080245CC: .4byte 0x0000014b
thumb_func_end sub_8024588
thumb_func_start sub_80245D0
sub_80245D0:
push {r4,lr}
sub sp, 0x4
ldr r0, _08024600
ldr r4, [r0]
movs r0, 0x1E
ldrsh r1, [r4, r0]
lsls r2, r1, 2
adds r0, r4, 0
adds r0, 0x34
adds r0, r2
ldr r0, [r0]
adds r2, r4, 0
adds r2, 0x4C
adds r3, r4, 0
adds r3, 0xB0
adds r4, 0xE0
ldr r4, [r4]
str r4, [sp]
bl CreatePokemonInfoTabScreen
add sp, 0x4
pop {r4}
pop {r0}
bx r0
.align 2, 0
_08024600: .4byte gUnknown_203B2AC
thumb_func_end sub_80245D0
thumb_func_start sub_8024604
sub_8024604:
push {r4,r5,lr}
ldr r4, _08024654
ldr r0, [r4]
movs r1, 0x2
str r1, [r0, 0x34]
movs r1, 0x3
str r1, [r0, 0x38]
movs r1, 0x5
str r1, [r0, 0x3C]
adds r1, r0, 0
adds r1, 0xE0
ldr r3, [r1]
movs r1, 0x3
movs r2, 0x1
bl sub_8013818
ldr r0, [r4]
adds r5, r0, 0
adds r5, 0x4C
ldr r2, _08024658
adds r0, 0x48
movs r3, 0
ldrsh r1, [r0, r3]
movs r0, 0x58
muls r0, r1
ldr r4, [r2]
adds r4, r0
movs r0, 0x7
bl sub_80023E4
adds r2, r0, 0
lsls r2, 24
lsrs r2, 24
adds r0, r5, 0
adds r1, r4, 0
bl sub_808FF20
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_08024654: .4byte gUnknown_203B2AC
_08024658: .4byte gRecruitedPokemonRef
thumb_func_end sub_8024604
.align 2,0

View File

@@ -391,7 +391,7 @@ _0803D3C0:
bl xxx_init_struct_8094924_restore_809485C
adds r0, r4, 0
mov r1, r9
bl sub_80971EC
bl RestoreWonderMail
adds r0, r4, 0
bl nullsub_102
movs r0, 0x1
@@ -440,7 +440,7 @@ _0803D436:
bl xxx_init_struct_8094924_save_809486C
adds r0, r4, 0
adds r1, r6, 0
bl sub_8097270
bl SaveWonderMail
adds r0, r4, 0
bl nullsub_102
movs r2, 0x1

View File

@@ -4609,7 +4609,7 @@ _08054C88:
adds r1, r5, 0
mov r2, r8
mov r3, r9
bl sub_805BD70
bl ScannerOrbAction
bl _080554BA
_08054C98:
adds r0, r7, 0
@@ -4793,7 +4793,7 @@ _08054DFE:
adds r1, r5, 0
mov r2, r8
mov r3, r9
bl sub_805B5F4
bl LeechSeedMoveAction
b _080554BA
_08054E0C:
adds r0, r7, 0
@@ -4821,7 +4821,7 @@ _08054E36:
adds r1, r5, 0
mov r2, r8
mov r3, r9
bl sub_805BD7C
bl RadarOrbAction
b _080554BA
_08054E44:
adds r0, r7, 0
@@ -4982,7 +4982,7 @@ _08054F78:
adds r1, r5, 0
mov r2, r8
mov r3, r9
bl sub_805C474
bl StairsOrbAction
b _080554BA
_08054F86:
adds r0, r7, 0

View File

@@ -4,113 +4,6 @@
.syntax unified
.text
thumb_func_start sub_807049C
sub_807049C:
push {r4-r7,lr}
adds r6, r0, 0
adds r4, r1, 0
ldr r7, [r6, 0x70]
movs r1, 0
ldrsh r0, [r4, r1]
movs r2, 0x2
ldrsh r1, [r4, r2]
bl GetMapTile_1
adds r5, r0, 0
movs r1, 0
ldrsh r0, [r4, r1]
cmp r0, 0
blt _0807055A
movs r2, 0x2
ldrsh r1, [r4, r2]
cmp r1, 0
blt _0807055A
cmp r0, 0x37
bgt _0807055A
cmp r1, 0x1F
bgt _0807055A
ldrh r1, [r5]
movs r0, 0x10
ands r0, r1
cmp r0, 0
bne _0807055A
ldr r0, [r5, 0x10]
cmp r0, 0
beq _080704E2
bl GetEntityType
cmp r0, 0x1
bne _0807055A
_080704E2:
bl IsFixedDungeon
lsls r0, 24
cmp r0, 0
bne _08070504
adds r0, r7, 0
adds r0, 0xE4
ldrb r0, [r0]
cmp r0, 0x3
beq _08070552
adds r0, r6, 0
movs r1, 0x9
bl HasItem
lsls r0, 24
cmp r0, 0
bne _08070552
_08070504:
movs r1, 0x2
ldrsh r0, [r7, r1]
bl GetCrossableTerrain
lsls r0, 24
lsrs r4, r0, 24
ldrh r0, [r5]
movs r5, 0x3
ands r5, r0
adds r0, r6, 0
movs r1, 0xC
bl HasIQSkill
lsls r0, 24
cmp r0, 0
beq _08070526
movs r4, 0x2
_08070526:
adds r0, r6, 0
movs r1, 0xD
bl HasIQSkill
lsls r0, 24
cmp r0, 0
beq _08070536
movs r4, 0x3
_08070536:
cmp r4, 0x1
beq _0807054A
cmp r4, 0x1
bgt _08070544
cmp r4, 0
beq _0807054E
b _08070552
_08070544:
cmp r4, 0x2
beq _08070556
b _08070552
_0807054A:
cmp r5, 0x2
beq _08070552
_0807054E:
cmp r5, 0x1
bne _0807055A
_08070552:
movs r0, 0
b _0807055C
_08070556:
cmp r5, 0
bne _08070552
_0807055A:
movs r0, 0x1
_0807055C:
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end sub_807049C
thumb_func_start sub_8070564
sub_8070564:
@@ -189,305 +82,4 @@ _080705E8:
bx r1
thumb_func_end sub_8070564
thumb_func_start sub_80705F0
sub_80705F0:
push {r4-r7,lr}
adds r6, r0, 0
adds r4, r1, 0
ldr r7, [r6, 0x70]
movs r1, 0
ldrsh r0, [r4, r1]
movs r2, 0x2
ldrsh r1, [r4, r2]
bl GetMapTile_1
adds r5, r0, 0
movs r1, 0
ldrsh r0, [r4, r1]
cmp r0, 0
blt _0807069A
movs r2, 0x2
ldrsh r1, [r4, r2]
cmp r1, 0
blt _0807069A
cmp r0, 0x37
bgt _0807069A
cmp r1, 0x1F
bgt _0807069A
ldrh r1, [r5]
movs r0, 0x10
ands r0, r1
cmp r0, 0
bne _0807069A
ldr r0, [r5, 0x10]
cmp r0, 0
beq _08070636
bl GetEntityType
cmp r0, 0x1
bne _0807069A
_08070636:
bl IsFixedDungeon
lsls r0, 24
cmp r0, 0
bne _08070658
adds r0, r7, 0
adds r0, 0xE4
ldrb r0, [r0]
cmp r0, 0x3
beq _08070696
adds r0, r6, 0
movs r1, 0x9
bl HasItem
lsls r0, 24
cmp r0, 0
bne _08070696
_08070658:
movs r1, 0x2
ldrsh r0, [r7, r1]
bl GetCrossableTerrain
lsls r0, 24
lsrs r4, r0, 24
ldrh r0, [r5]
movs r5, 0x3
ands r5, r0
adds r0, r6, 0
movs r1, 0xC
bl HasIQSkill
lsls r0, 24
cmp r0, 0
beq _0807067A
movs r4, 0x2
_0807067A:
adds r0, r6, 0
movs r1, 0xD
bl HasIQSkill
lsls r0, 24
cmp r0, 0
beq _0807068A
movs r4, 0x3
_0807068A:
cmp r4, 0
blt _08070696
cmp r4, 0x2
bgt _08070696
cmp r5, 0
beq _0807069A
_08070696:
movs r0, 0
b _0807069C
_0807069A:
movs r0, 0x1
_0807069C:
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end sub_80705F0
thumb_func_start sub_80706A4
sub_80706A4:
push {r4-r7,lr}
adds r7, r0, 0
adds r4, r1, 0
ldr r6, [r7, 0x70]
movs r1, 0
ldrsh r0, [r4, r1]
movs r2, 0x2
ldrsh r1, [r4, r2]
bl GetMapTile_1
adds r5, r0, 0
movs r1, 0
ldrsh r0, [r4, r1]
cmp r0, 0
blt _0807076A
movs r2, 0x2
ldrsh r1, [r4, r2]
cmp r1, 0
blt _0807076A
cmp r0, 0x37
bgt _0807076A
cmp r1, 0x1F
bgt _0807076A
ldrh r1, [r5]
movs r0, 0x10
ands r0, r1
cmp r0, 0
bne _0807076A
ldr r0, [r5, 0x10]
cmp r0, 0
beq _080706F2
bl GetEntityType
cmp r0, 0x1
bne _0807076A
ldr r0, [r5, 0x10]
ldr r0, [r0, 0x70]
cmp r0, r6
bne _0807076A
_080706F2:
bl IsFixedDungeon
lsls r0, 24
cmp r0, 0
bne _08070714
adds r0, r6, 0
adds r0, 0xE4
ldrb r0, [r0]
cmp r0, 0x3
beq _08070762
adds r0, r7, 0
movs r1, 0x9
bl HasItem
lsls r0, 24
cmp r0, 0
bne _08070762
_08070714:
movs r1, 0x2
ldrsh r0, [r6, r1]
bl GetCrossableTerrain
lsls r0, 24
lsrs r4, r0, 24
ldrh r0, [r5]
movs r5, 0x3
ands r5, r0
adds r0, r7, 0
movs r1, 0xC
bl HasIQSkill
lsls r0, 24
cmp r0, 0
beq _08070736
movs r4, 0x2
_08070736:
adds r0, r7, 0
movs r1, 0xD
bl HasIQSkill
lsls r0, 24
cmp r0, 0
beq _08070746
movs r4, 0x3
_08070746:
cmp r4, 0x1
beq _0807075A
cmp r4, 0x1
bgt _08070754
cmp r4, 0
beq _0807075E
b _08070762
_08070754:
cmp r4, 0x2
beq _08070766
b _08070762
_0807075A:
cmp r5, 0x2
beq _08070762
_0807075E:
cmp r5, 0x1
bne _0807076A
_08070762:
movs r0, 0
b _0807076C
_08070766:
cmp r5, 0
bne _08070762
_0807076A:
movs r0, 0x1
_0807076C:
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end sub_80706A4
thumb_func_start GetMovementSpeed
GetMovementSpeed:
push {r4-r6,lr}
adds r6, r0, 0
ldr r5, [r6, 0x70]
movs r4, 0
movs r0, 0x84
lsls r0, 1
adds r1, r5, r0
movs r2, 0x4
_08070784:
ldrb r0, [r1, 0x5]
cmp r0, 0
beq _0807078C
subs r4, 0x1
_0807078C:
ldrb r0, [r1]
cmp r0, 0
beq _08070794
adds r4, 0x1
_08070794:
adds r1, 0x1
subs r2, 0x1
cmp r2, 0
bge _08070784
adds r0, r5, 0
adds r0, 0xAC
ldrb r0, [r0]
cmp r0, 0x4
bne _080707A8
subs r4, 0x1
_080707A8:
movs r1, 0x2
ldrsh r0, [r5, r1]
bl GetMoveSpeed
adds r4, r0
adds r0, r6, 0
movs r1, 0x6
bl HasType
lsls r0, 24
cmp r0, 0
beq _080707D0
adds r0, r6, 0
bl GetWeather
lsls r0, 24
lsrs r0, 24
cmp r0, 0x7
bne _080707D0
adds r4, 0x1
_080707D0:
movs r0, 0x4
ldrsh r1, [r5, r0]
ldr r0, _0807081C
cmp r1, r0
bne _080707DC
adds r4, 0x1
_080707DC:
movs r0, 0x2
ldrsh r1, [r5, r0]
movs r0, 0xBE
lsls r0, 1
cmp r1, r0
bne _080707FE
ldrb r0, [r5, 0x6]
cmp r0, 0
beq _080707FE
ldr r0, _08070820
ldr r0, [r0]
ldr r1, _08070824
adds r0, r1
ldrb r0, [r0]
cmp r0, 0
beq _080707FE
adds r4, 0x1
_080707FE:
cmp r4, 0
bge _08070804
movs r4, 0
_08070804:
cmp r4, 0x4
ble _0807080A
movs r4, 0x4
_0807080A:
movs r1, 0x82
lsls r1, 1
adds r0, r5, r1
str r4, [r0]
adds r0, r4, 0
pop {r4-r6}
pop {r1}
bx r1
.align 2, 0
_0807081C: .4byte 0x000001a3
_08070820: .4byte gDungeonGlobalData
_08070824: .4byte 0x0000066e
thumb_func_end GetMovementSpeed
.align 2, 0

View File

@@ -5,591 +5,6 @@
.text
thumb_func_start HealTargetHP
HealTargetHP:
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x4
mov r9, r0
adds r5, r1, 0
mov r10, r2
mov r8, r3
ldr r0, [sp, 0x24]
lsls r0, 24
lsrs r0, 24
str r0, [sp]
adds r0, r5, 0
bl EntityExists
lsls r0, 24
cmp r0, 0
bne _08077C6E
b _08077DC8
_08077C6E:
ldr r4, [r5, 0x70]
movs r0, 0x10
ldrsh r7, [r4, r0]
movs r1, 0xE
ldrsh r6, [r4, r1]
ldrh r2, [r4, 0xE]
adds r0, r6, 0
ldrh r1, [r4, 0x10]
mov r12, r1
adds r1, r7, 0
cmp r0, r1
bne _08077C8C
mov r0, r8
cmp r0, 0
bgt _08077C92
_08077C8C:
mov r3, r10
cmp r3, 0
bne _08077CD0
_08077C92:
ldrh r1, [r4, 0x10]
add r1, r8
strh r1, [r4, 0x10]
ldrh r0, [r4, 0xE]
add r0, r8
strh r0, [r4, 0xE]
lsls r1, 16
asrs r1, 16
ldr r0, _08077CCC
cmp r1, r0
ble _08077CAA
strh r0, [r4, 0x10]
_08077CAA:
movs r1, 0xE
ldrsh r0, [r4, r1]
movs r3, 0x10
ldrsh r2, [r4, r3]
ldrh r1, [r4, 0x10]
cmp r0, r2
ble _08077CBA
strh r1, [r4, 0xE]
_08077CBA:
movs r1, 0xE
ldrsh r0, [r4, r1]
cmp r0, r2
bne _08077CC4
adds r6, r0, 0
_08077CC4:
adds r0, r5, 0
bl sub_8041C94
b _08077CE8
.align 2, 0
_08077CCC: .4byte 0x000003e7
_08077CD0:
mov r3, r10
adds r0, r2, r3
strh r0, [r4, 0xE]
lsls r0, 16
asrs r0, 16
cmp r0, r1
ble _08077CE2
mov r0, r12
strh r0, [r4, 0xE]
_08077CE2:
adds r0, r5, 0
bl sub_8041CA8
_08077CE8:
movs r1, 0x10
ldrsh r0, [r4, r1]
subs r7, r0, r7
movs r2, 0xE
ldrsh r0, [r4, r2]
subs r6, r0, r6
adds r0, r5, 0
bl DungeonEntityUpdateStatusSprites
ldr r0, _08077D1C
str r6, [r0]
str r7, [r0, 0x4]
ldr r0, _08077D20
adds r1, r5, 0
movs r2, 0
bl SetMessageArgument
cmp r6, 0
bne _08077D28
cmp r7, 0
bne _08077D28
ldr r3, [sp]
cmp r3, 0
beq _08077DC8
ldr r0, _08077D24
b _08077D3A
.align 2, 0
_08077D1C: .4byte gUnknown_202DE30
_08077D20: .4byte gAvailablePokemonNames
_08077D24: .4byte gUnknown_80FB204
_08077D28:
mov r0, r8
cmp r0, 0
bne _08077D4C
cmp r6, 0
bne _08077D4C
ldr r1, [sp]
cmp r1, 0
beq _08077DC8
ldr r0, _08077D48
_08077D3A:
ldr r2, [r0]
mov r0, r9
adds r1, r5, 0
bl sub_80522F4
b _08077DC8
.align 2, 0
_08077D48: .4byte gUnknown_80FB21C
_08077D4C:
movs r2, 0
mov r8, r2
cmp r7, 0
beq _08077D6E
adds r0, r5, 0
bl sub_8045888
lsls r0, 24
cmp r0, 0
beq _08077D62
mov r8, r7
_08077D62:
ldr r0, _08077DA0
ldr r2, [r0]
mov r0, r9
adds r1, r5, 0
bl sub_80522F4
_08077D6E:
cmp r6, 0
beq _08077DB4
adds r0, r5, 0
bl sub_8045888
lsls r0, 24
cmp r0, 0
beq _08077D80
mov r8, r6
_08077D80:
mov r3, r10
cmp r3, 0
beq _08077DB4
movs r0, 0x10
ldrsh r1, [r4, r0]
movs r2, 0xE
ldrsh r0, [r4, r2]
cmp r1, r0
bne _08077DA8
ldr r0, _08077DA4
ldr r2, [r0]
mov r0, r9
adds r1, r5, 0
bl sub_80522F4
b _08077DB4
.align 2, 0
_08077DA0: .4byte gUnknown_80FB240
_08077DA4: .4byte gUnknown_80FB1E0
_08077DA8:
ldr r0, _08077DD8
ldr r2, [r0]
mov r0, r9
adds r1, r5, 0
bl sub_80522F4
_08077DB4:
mov r3, r8
cmp r3, 0
beq _08077DC8
movs r3, 0x1
negs r3, r3
mov r0, r8
adds r1, r5, 0
movs r2, 0x1
bl sub_803ED30
_08077DC8:
add sp, 0x4
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_08077DD8: .4byte gUnknown_80FB1C4
thumb_func_end HealTargetHP
thumb_func_start sub_8077DDC
sub_8077DDC:
push {r4,r5,lr}
adds r5, r0, 0
adds r4, r1, 0
adds r0, r4, 0
bl EntityExists
lsls r0, 24
cmp r0, 0
beq _08077E3C
ldr r0, [r4, 0x70]
adds r1, r0, 0
adds r1, 0xF1
ldrb r0, [r1]
cmp r0, 0
beq _08077E0C
ldr r0, _08077E08
ldr r2, [r0]
adds r0, r5, 0
adds r1, r4, 0
bl sub_80522F4
b _08077E3C
.align 2, 0
_08077E08: .4byte gUnknown_80FAEF0
_08077E0C:
movs r0, 0x1
strb r0, [r1]
adds r0, r4, 0
bl nullsub_75
ldr r0, _08077E44
adds r1, r4, 0
movs r2, 0
bl SetMessageArgument
ldr r0, _08077E48
ldr r2, [r0]
adds r0, r5, 0
adds r1, r4, 0
bl sub_80522F4
movs r0, 0
bl sub_803F580
bl sub_8040A84
adds r0, r4, 0
bl DungeonEntityUpdateStatusSprites
_08077E3C:
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_08077E44: .4byte gAvailablePokemonNames
_08077E48: .4byte gUnknown_80FAEA0
thumb_func_end sub_8077DDC
thumb_func_start sub_8077E4C
sub_8077E4C:
push {r4,r5,lr}
adds r5, r0, 0
adds r4, r1, 0
adds r0, r4, 0
bl EntityExists
lsls r0, 24
cmp r0, 0
beq _08077EC0
bl sub_8043D10
lsls r0, 24
cmp r0, 0
beq _08077E70
ldr r0, _08077E6C
b _08077E7E
.align 2, 0
_08077E6C: .4byte gUnknown_80FAF3C
_08077E70:
ldr r0, [r4, 0x70]
adds r1, r0, 0
adds r1, 0xF2
ldrb r0, [r1]
cmp r0, 0
beq _08077E90
ldr r0, _08077E8C
_08077E7E:
ldr r2, [r0]
adds r0, r5, 0
adds r1, r4, 0
bl sub_80522F4
b _08077EC0
.align 2, 0
_08077E8C: .4byte gUnknown_80FAF1C
_08077E90:
movs r0, 0x1
strb r0, [r1]
adds r0, r4, 0
bl nullsub_76
ldr r0, _08077EC8
adds r1, r4, 0
movs r2, 0
bl SetMessageArgument
ldr r0, _08077ECC
ldr r2, [r0]
adds r0, r5, 0
adds r1, r4, 0
bl sub_80522F4
movs r0, 0
bl sub_803F580
bl sub_8040A84
adds r0, r4, 0
bl DungeonEntityUpdateStatusSprites
_08077EC0:
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_08077EC8: .4byte gAvailablePokemonNames
_08077ECC: .4byte gUnknown_80FAEC8
thumb_func_end sub_8077E4C
thumb_func_start sub_8077ED0
sub_8077ED0:
push {r4,r5,lr}
adds r5, r0, 0
adds r4, r1, 0
adds r0, r4, 0
bl EntityExists
lsls r0, 24
cmp r0, 0
beq _08077F30
ldr r0, [r4, 0x70]
adds r1, r0, 0
adds r1, 0xF0
ldrb r0, [r1]
cmp r0, 0
beq _08077F00
ldr r0, _08077EFC
ldr r2, [r0]
adds r0, r5, 0
adds r1, r4, 0
bl sub_80522F4
b _08077F30
.align 2, 0
_08077EFC: .4byte gUnknown_80FAFD0
_08077F00:
movs r0, 0x1
strb r0, [r1]
adds r0, r4, 0
bl nullsub_77
ldr r0, _08077F38
adds r1, r4, 0
movs r2, 0
bl SetMessageArgument
ldr r0, _08077F3C
ldr r2, [r0]
adds r0, r5, 0
adds r1, r4, 0
bl sub_80522F4
movs r0, 0
bl sub_803F580
bl sub_8040A84
adds r0, r4, 0
bl DungeonEntityUpdateStatusSprites
_08077F30:
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_08077F38: .4byte gAvailablePokemonNames
_08077F3C: .4byte gUnknown_80FAFAC
thumb_func_end sub_8077ED0
thumb_func_start sub_8077F40
sub_8077F40:
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
adds r5, r0, 0
adds r4, r1, 0
lsls r2, 24
lsrs r6, r2, 24
mov r9, r6
adds r0, r4, 0
bl EntityExists
lsls r0, 24
cmp r0, 0
bne _08077F62
b _08078068
_08077F62:
adds r0, r5, 0
bl GetEntityType
mov r10, r0
cmp r0, 0x1
beq _08077F70
b _08078068
_08077F70:
ldr r7, [r4, 0x70]
cmp r5, r4
bne _08077F88
cmp r6, 0
beq _08078068
ldr r0, _08077F84
ldr r2, [r0]
adds r0, r4, 0
b _08078022
.align 2, 0
_08077F84: .4byte gPtrCantLeechSeedSelfMessage
_08077F88:
adds r0, r5, 0
adds r1, r4, 0
mov r2, r9
bl HasSafeguardStatus
lsls r0, 24
cmp r0, 0
bne _08078068
ldr r0, _08077FC0
adds r1, r4, 0
movs r2, 0
bl SetMessageArgument
adds r0, r4, 0
movs r1, 0x4
bl HasType
lsls r0, 24
lsrs r0, 24
mov r8, r0
cmp r0, 0
beq _08077FC8
mov r0, r9
cmp r0, 0
beq _08078068
ldr r0, _08077FC4
b _0807801E
.align 2, 0
_08077FC0: .4byte gAvailablePokemonNames
_08077FC4: .4byte gPtrCantLeechSeedMonMessage
_08077FC8:
adds r6, r7, 0
adds r6, 0xD0
ldrb r0, [r6]
cmp r0, 0x1
beq _0807801C
cmp r0, 0x2
bne _08077FE2
ldr r0, _08078014
ldr r2, [r0]
adds r0, r5, 0
adds r1, r4, 0
bl sub_80522F4
_08077FE2:
mov r1, r10
strb r1, [r6]
ldr r1, _08078018
adds r0, r4, 0
movs r2, 0x1
bl CalculateStatusTurns
adds r0, 0x1
adds r1, r7, 0
adds r1, 0xD9
strb r0, [r1]
adds r0, r7, 0
adds r0, 0xDA
mov r6, r8
strb r6, [r0]
adds r0, r4, 0
bl nullsub_78
adds r1, r7, 0
adds r1, 0xD8
movs r0, 0xFF
strb r0, [r1]
movs r2, 0
adds r3, r1, 0
b _08078030
.align 2, 0
_08078014: .4byte gUnknown_80FAA8C
_08078018: .4byte gUnknown_80F4EB0
_0807801C:
ldr r0, _0807802C
_0807801E:
ldr r2, [r0]
adds r0, r5, 0
_08078022:
adds r1, r4, 0
bl sub_80522F4
b _08078068
.align 2, 0
_0807802C: .4byte gUnknown_80FAE7C
_08078030:
ldr r0, _08078078
ldr r0, [r0]
lsls r1, r2, 2
ldr r6, _0807807C
adds r0, r6
adds r0, r1
ldr r0, [r0]
cmp r5, r0
bne _08078050
strb r2, [r3]
ldr r0, [r5, 0x70]
adds r1, r7, 0
adds r1, 0xD4
adds r0, 0x98
ldr r0, [r0]
str r0, [r1]
_08078050:
adds r2, 0x1
cmp r2, 0x13
ble _08078030
ldr r0, _08078080
ldr r2, [r0]
adds r0, r5, 0
adds r1, r4, 0
bl sub_80522F4
adds r0, r4, 0
bl DungeonEntityUpdateStatusSprites
_08078068:
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_08078078: .4byte gDungeonGlobalData
_0807807C: .4byte 0x000135cc
_08078080: .4byte gUnknown_80FAE58
thumb_func_end sub_8077F40
thumb_func_start sub_8078084
sub_8078084:
push {r4-r6,lr}
ldr r6, [r0, 0x70]
movs r5, 0
_0807808A:
ldr r0, _080780DC
ldr r0, [r0]
lsls r1, r5, 2
ldr r2, _080780E0
adds r0, r2
adds r0, r1
ldr r4, [r0]
adds r0, r4, 0
bl EntityExists
lsls r0, 24
cmp r0, 0
beq _080780D0
ldr r1, [r4, 0x70]
adds r3, r1, 0
adds r3, 0xD0
ldrb r0, [r3]
subs r0, 0x1
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
bhi _080780D0
adds r0, r1, 0
adds r0, 0xD4
adds r1, r6, 0
adds r1, 0x98
ldr r2, [r0]
ldr r0, [r1]
cmp r2, r0
bne _080780D0
movs r0, 0
strb r0, [r3]
adds r0, r4, 0
bl DungeonEntityUpdateStatusSprites
_080780D0:
adds r5, 0x1
cmp r5, 0x13
ble _0807808A
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_080780DC: .4byte gDungeonGlobalData
_080780E0: .4byte 0x000135cc
thumb_func_end sub_8078084
thumb_func_start DestinyBondStatusTarget
DestinyBondStatusTarget:
push {r4-r7,lr}

View File

@@ -5,222 +5,6 @@
.text
thumb_func_start sub_80833E8
sub_80833E8:
push {r4,r5,lr}
adds r5, r0, 0
adds r4, r1, 0
movs r1, 0
ldrsh r0, [r5, r1]
movs r2, 0x2
ldrsh r1, [r5, r2]
bl GetMapTile_1
adds r1, r0, 0
ldr r0, _08083438
ldr r3, [r0]
ldr r2, _0808343C
adds r0, r3, r2
ldrb r2, [r0]
cmp r2, 0
bne _0808340C
movs r2, 0x2
_0808340C:
ldrb r0, [r1, 0x9]
cmp r0, 0xFF
bne _08083440
movs r1, 0
ldrsh r0, [r5, r1]
subs r0, r2
str r0, [r4]
movs r1, 0
ldrsh r0, [r5, r1]
adds r0, r2
adds r0, 0x1
str r0, [r4, 0x8]
movs r1, 0x2
ldrsh r0, [r5, r1]
subs r0, r2
str r0, [r4, 0x4]
movs r1, 0x2
ldrsh r0, [r5, r1]
adds r0, r2
adds r0, 0x1
b _0808346A
.align 2, 0
_08083438: .4byte gDungeonGlobalData
_0808343C: .4byte 0x00018209
_08083440:
lsls r1, r0, 3
subs r1, r0
lsls r1, 2
ldr r2, _08083474
adds r1, r2
adds r1, r3, r1
movs r2, 0x2
ldrsh r0, [r1, r2]
subs r0, 0x1
str r0, [r4]
movs r2, 0x6
ldrsh r0, [r1, r2]
adds r0, 0x2
str r0, [r4, 0x8]
movs r2, 0x4
ldrsh r0, [r1, r2]
subs r0, 0x1
str r0, [r4, 0x4]
movs r2, 0x8
ldrsh r0, [r1, r2]
adds r0, 0x2
_0808346A:
str r0, [r4, 0xC]
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_08083474: .4byte 0x000104c4
thumb_func_end sub_80833E8
thumb_func_start IsTargetTwoTilesAway
IsTargetTwoTilesAway:
push {r4-r7,lr}
sub sp, 0x4
adds r3, r0, 0
adds r6, r1, 0
movs r0, 0
ldrsh r1, [r3, r0]
movs r2, 0
ldrsh r0, [r6, r2]
subs r1, r0
cmp r1, 0
bge _08083490
negs r1, r1
_08083490:
cmp r1, 0x1
bgt _080834A8
movs r5, 0x2
ldrsh r1, [r3, r5]
movs r2, 0x2
ldrsh r0, [r6, r2]
subs r1, r0
cmp r1, 0
bge _080834A4
negs r1, r1
_080834A4:
cmp r1, 0x1
ble _0808355A
_080834A8:
movs r5, 0
ldrsh r4, [r3, r5]
movs r1, 0
ldrsh r0, [r6, r1]
subs r2, r4, r0
cmp r2, 0
bge _080834B8
negs r2, r2
_080834B8:
movs r5, 0x2
ldrsh r1, [r3, r5]
movs r5, 0x2
ldrsh r0, [r6, r5]
subs r0, r1, r0
cmp r0, 0
bge _080834C8
negs r0, r0
_080834C8:
cmp r0, r2
bge _080834CE
adds r0, r2, 0
_080834CE:
cmp r0, 0x2
bne _0808355E
adds r5, r4, 0
adds r4, r1, 0
movs r7, 0
_080834D8:
movs r1, 0
ldrsh r0, [r6, r1]
cmp r5, r0
bge _080834E2
adds r5, 0x1
_080834E2:
cmp r5, r0
ble _080834E8
subs r5, 0x1
_080834E8:
movs r2, 0x2
ldrsh r0, [r6, r2]
cmp r4, r0
bge _080834F2
adds r4, 0x1
_080834F2:
cmp r4, r0
ble _080834F8
subs r4, 0x1
_080834F8:
adds r0, r5, 0
adds r1, r4, 0
str r3, [sp]
bl GetMapTile_1
ldrh r1, [r0]
movs r0, 0x3
ands r0, r1
ldr r3, [sp]
cmp r0, 0
beq _0808355E
adds r7, 0x1
cmp r7, 0x1
ble _080834D8
movs r0, 0
ldrsh r5, [r6, r0]
movs r1, 0x2
ldrsh r4, [r6, r1]
movs r7, 0
_0808351E:
movs r2, 0
ldrsh r0, [r3, r2]
cmp r5, r0
bge _08083528
adds r5, 0x1
_08083528:
cmp r5, r0
ble _0808352E
subs r5, 0x1
_0808352E:
movs r1, 0x2
ldrsh r0, [r3, r1]
cmp r4, r0
bge _08083538
adds r4, 0x1
_08083538:
cmp r4, r0
ble _0808353E
subs r4, 0x1
_0808353E:
adds r0, r5, 0
adds r1, r4, 0
str r3, [sp]
bl GetMapTile_1
ldrh r1, [r0]
movs r0, 0x3
ands r0, r1
ldr r3, [sp]
cmp r0, 0
beq _0808355E
adds r7, 0x1
cmp r7, 0x1
ble _0808351E
_0808355A:
movs r0, 0x1
b _08083560
_0808355E:
movs r0, 0
_08083560:
add sp, 0x4
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end IsTargetTwoTilesAway
thumb_func_start sub_8083568
sub_8083568:
push {r4,r5,lr}
@@ -296,4 +80,4 @@ _080835FA:
bx r1
thumb_func_end sub_8083568
.align 2, 0
.align 2, 0

View File

@@ -804,80 +804,4 @@ _08084846:
_08084850: .4byte 0x000003e6
thumb_func_end sub_80847D4
thumb_func_start sub_8084854
sub_8084854:
push {r4,r5,lr}
adds r4, r0, 0
ldr r5, _08084874
ldr r2, [r5]
movs r1, 0xCF
lsls r1, 3
adds r0, r2, r1
ldrb r0, [r0]
cmp r0, 0
beq _0808487C
ldrb r1, [r4, 0x5]
ldr r3, _08084878
adds r0, r2, r3
strb r1, [r0]
b _080848C8
.align 2, 0
_08084874: .4byte gDungeonGlobalData
_08084878: .4byte 0x00003a0d
_0808487C:
ldrb r0, [r4, 0x4]
bl sub_8098100
lsls r0, 24
cmp r0, 0
beq _08084898
ldr r0, [r5]
ldrb r1, [r4, 0x5]
ldr r2, _08084894
adds r0, r2
strb r1, [r0]
b _080848C8
.align 2, 0
_08084894: .4byte 0x00003a0d
_08084898:
ldrb r0, [r4, 0x2]
bl sub_8098100
lsls r0, 24
cmp r0, 0
beq _080848B4
ldr r0, [r5]
ldrb r1, [r4, 0x3]
ldr r3, _080848B0
adds r0, r3
strb r1, [r0]
b _080848C8
.align 2, 0
_080848B0: .4byte 0x00003a0d
_080848B4:
ldr r0, [r5]
ldrb r1, [r4, 0x1]
ldr r2, _080848E0
adds r0, r2
strb r1, [r0]
ldrb r0, [r4, 0x2]
cmp r0, 0x40
beq _080848C8
bl sub_8097FA8
_080848C8:
ldr r0, _080848E4
ldr r0, [r0]
ldr r3, _080848E8
adds r0, r3
movs r1, 0x1
strb r1, [r0]
movs r0, 0
bl sub_807E5E4
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_080848E0: .4byte 0x00003a0d
_080848E4: .4byte gDungeonGlobalData
_080848E8: .4byte 0x00000675
thumb_func_end sub_8084854
.align 2,0

View File

@@ -5,67 +5,6 @@
.text
thumb_func_start sub_809733C
sub_809733C:
push {r4-r6,lr}
lsls r0, 16
asrs r4, r0, 16
lsls r1, 24
lsrs r6, r1, 24
cmp r4, 0xD
beq _0809737C
lsls r0, r4, 16
lsrs r5, r0, 16
movs r0, 0
movs r1, 0x2C
adds r2, r5, 0
bl sub_8001784
cmp r0, 0
bne _0809737C
movs r0, 0
movs r1, 0x2B
adds r2, r5, 0
adds r3, r6, 0
bl sub_800199C
cmp r6, 0
beq _0809737C
cmp r4, 0xE
blt _0809737C
cmp r4, 0xF
ble _08097378
cmp r4, 0x1C
bne _0809737C
_08097378:
bl sub_809674C
_0809737C:
pop {r4-r6}
pop {r0}
bx r0
thumb_func_end sub_809733C
thumb_func_start sub_8097384
sub_8097384:
push {lr}
lsls r0, 16
asrs r0, 16
cmp r0, 0xD
bne _08097392
movs r0, 0
b _080973A4
_08097392:
lsls r2, r0, 16
lsrs r2, 16
movs r0, 0
movs r1, 0x2C
bl sub_8001784
cmp r0, 0
beq _080973A4
movs r0, 0x1
_080973A4:
pop {r1}
bx r1
thumb_func_end sub_8097384
thumb_func_start sub_80973A8
sub_80973A8:
push {r4-r6,lr}

View File

@@ -706,113 +706,4 @@ _080908CE:
bx r0
thumb_func_end sub_8090888
thumb_func_start sub_80908D8
sub_80908D8:
push {lr}
adds r2, r0, 0
ldrb r0, [r2]
cmp r0, 0x3E
bhi _08090908
ldr r0, _08090900
ldrb r3, [r2]
adds r0, r3, r0
ldrb r1, [r2, 0x1]
ldrb r0, [r0]
cmp r1, r0
bcs _08090908
ldr r1, _08090904
lsls r0, r3, 2
adds r0, r1
ldrb r1, [r2, 0x1]
ldr r0, [r0]
adds r0, r1
ldrb r0, [r0]
b _0809090A
.align 2, 0
_08090900: .4byte gDungeonFloorCount
_08090904: .4byte gUnknown_8108084
_08090908:
movs r0, 0x1
_0809090A:
pop {r1}
bx r1
thumb_func_end sub_80908D8
thumb_func_start sub_8090910
sub_8090910:
push {r4-r7,lr}
adds r5, r0, 0
adds r7, r1, 0
ldr r4, _0809094C
adds r0, r4, 0
bl RandomCapped
adds r6, r0, 0
adds r0, r4, 0
bl RandomCapped
adds r2, r0, 0
ldrb r0, [r5]
cmp r0, 0x3E
bhi _08090954
ldr r0, _08090950
ldrb r1, [r5]
adds r1, r0
ldrb r0, [r5, 0x1]
ldrb r1, [r1]
cmp r0, r1
bcs _08090954
adds r0, r7, 0
adds r1, r6, 0
bl sub_8091E94
lsls r0, 24
lsrs r0, 24
b _08090956
.align 2, 0
_0809094C: .4byte 0x0000270f
_08090950: .4byte gDungeonFloorCount
_08090954:
movs r0, 0x46
_08090956:
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end sub_8090910
thumb_func_start sub_809095C
sub_809095C:
push {r4,lr}
lsls r0, 24
lsrs r3, r0, 24
cmp r3, 0x3E
bls _0809096A
_08090966:
movs r0, 0x1
b _0809098C
_0809096A:
movs r2, 0
ldr r0, _08090994
ldrb r1, [r0]
adds r4, r0, 0
cmp r1, 0x3F
beq _0809098A
adds r1, r4, 0
_08090978:
adds r0, r2, r1
ldrb r0, [r0]
cmp r0, r3
beq _08090966
adds r2, 0x1
adds r0, r2, r4
ldrb r0, [r0]
cmp r0, 0x3F
bne _08090978
_0809098A:
movs r0, 0
_0809098C:
pop {r4}
pop {r1}
bx r1
.align 2, 0
_08090994: .4byte gUnknown_810A350
thumb_func_end sub_809095C
.align 2,0

View File

@@ -4,205 +4,6 @@
.syntax unified
.text
thumb_func_start GroundMap_ExecuteEvent
GroundMap_ExecuteEvent:
push {r4,r5,lr}
sub sp, 0xC
adds r4, r0, 0
adds r5, r1, 0
lsls r4, 16
asrs r4, 16
lsls r5, 24
lsrs r5, 24
ldr r1, _080A4C44
movs r0, 0
adds r2, r4, 0
adds r3, r5, 0
bl Log
movs r0, 0
mov r1, sp
adds r2, r4, 0
bl sub_809D710
cmp r5, 0
beq _080A4C2C
mov r1, sp
movs r0, 0x5
strh r0, [r1, 0x4]
_080A4C2C:
ldr r0, _080A4C48
ldr r0, [r0]
ldr r3, _080A4C4C
movs r1, 0
mov r2, sp
bl GroundScript_ExecutePP
add sp, 0xC
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_080A4C44: .4byte gUnknown_8117594
_080A4C48: .4byte gUnknown_3001B6C
_080A4C4C: .4byte gUnknown_81175E0
thumb_func_end GroundMap_ExecuteEvent
thumb_func_start GroundMap_ExecuteStation
GroundMap_ExecuteStation:
push {r4-r6,lr}
mov r6, r8
push {r6}
sub sp, 0x14
adds r4, r0, 0
adds r5, r1, 0
adds r6, r2, 0
mov r8, r3
lsls r4, 16
asrs r4, 16
lsls r5, 16
asrs r5, 16
lsls r6, 24
asrs r6, 24
mov r0, r8
lsls r0, 24
lsrs r0, 24
mov r8, r0
ldr r1, _080A4CB8
str r6, [sp]
str r0, [sp, 0x4]
movs r0, 0
adds r2, r4, 0
adds r3, r5, 0
bl Log
add r0, sp, 0x8
adds r1, r4, 0
adds r2, r5, 0
adds r3, r6, 0
bl GroundMap_GetStationScript
mov r0, r8
cmp r0, 0
beq _080A4C9C
add r1, sp, 0x8
movs r0, 0x5
strh r0, [r1, 0x4]
_080A4C9C:
ldr r0, _080A4CBC
ldr r0, [r0]
ldr r3, _080A4CC0
movs r1, 0
add r2, sp, 0x8
bl GroundScript_ExecutePP
add sp, 0x14
pop {r3}
mov r8, r3
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_080A4CB8: .4byte gUnknown_81175EC
_080A4CBC: .4byte gUnknown_3001B6C
_080A4CC0: .4byte gUnknown_8117644
thumb_func_end GroundMap_ExecuteStation
thumb_func_start GroundMap_ExecuteEnter
GroundMap_ExecuteEnter:
push {r4,lr}
sub sp, 0xC
adds r4, r0, 0
lsls r4, 16
asrs r4, 16
ldr r1, _080A4D08
movs r0, 0
adds r2, r4, 0
bl Log
mov r0, sp
adds r1, r4, 0
bl sub_80A4BE8
mov r1, sp
movs r3, 0
movs r2, 0
movs r0, 0x2
strh r0, [r1, 0x4]
mov r0, sp
strh r2, [r0, 0x6]
strb r3, [r0, 0x8]
ldr r0, _080A4D0C
ldr r0, [r0]
ldr r3, _080A4D10
movs r1, 0
mov r2, sp
bl GroundScript_ExecutePP
add sp, 0xC
pop {r4}
pop {r0}
bx r0
.align 2, 0
_080A4D08: .4byte gUnknown_8117650
_080A4D0C: .4byte gUnknown_3001B6C
_080A4D10: .4byte gUnknown_8117698
thumb_func_end GroundMap_ExecuteEnter
thumb_func_start sub_80A4D14
sub_80A4D14:
push {lr}
ldr r0, _080A4D28
ldr r0, [r0]
bl sub_809D678
lsls r0, 24
lsrs r0, 24
pop {r1}
bx r1
.align 2, 0
_080A4D28: .4byte gUnknown_3001B6C
thumb_func_end sub_80A4D14
thumb_func_start sub_80A4D2C
sub_80A4D2C:
push {lr}
adds r1, r0, 0
lsls r1, 16
asrs r1, 16
ldr r0, _080A4D44
ldr r0, [r0]
bl sub_809D968
lsls r0, 24
lsrs r0, 24
pop {r1}
bx r1
.align 2, 0
_080A4D44: .4byte gUnknown_3001B6C
thumb_func_end sub_80A4D2C
thumb_func_start sub_80A4D48
sub_80A4D48:
push {lr}
lsls r0, 16
asrs r2, r0, 16
movs r0, 0x1
negs r0, r0
cmp r2, r0
beq _080A4D74
ldr r1, _080A4D70
lsls r0, r2, 1
adds r0, r2
lsls r0, 2
adds r0, r1
movs r1, 0
ldrsh r0, [r0, r1]
cmp r0, 0x5
beq _080A4D6C
cmp r0, 0x8
bne _080A4D74
_080A4D6C:
movs r0, 0
b _080A4D76
.align 2, 0
_080A4D70: .4byte gUnknown_811BAF4
_080A4D74:
movs r0, 0x1
_080A4D76:
pop {r1}
bx r1
thumb_func_end sub_80A4D48
thumb_func_start sub_80A4D7C
sub_80A4D7C:

View File

@@ -5,220 +5,6 @@
.text
thumb_func_start sub_809D8EC
sub_809D8EC:
push {r4,r5,lr}
adds r4, r0, 0
lsls r1, 16
asrs r5, r1, 16
cmp r5, 0
bne _0809D910
bl sub_809A750
lsls r0, 24
cmp r0, 0
bne _0809D910
adds r0, r4, 0
movs r1, 0
bl sub_80A2460
str r0, [r4, 0x28]
movs r0, 0
b _0809D922
_0809D910:
adds r0, r4, 0
adds r0, 0x46
strh r5, [r0]
movs r0, 0x2
strh r0, [r4, 0x26]
ldr r1, _0809D928
movs r0, 0x1
strb r0, [r1]
movs r0, 0x1
_0809D922:
pop {r4,r5}
pop {r1}
bx r1
.align 2, 0
_0809D928: .4byte gUnknown_2039A36
thumb_func_end sub_809D8EC
thumb_func_start sub_809D92C
sub_809D92C:
push {lr}
ldr r1, _0809D93C
bl sub_809D770
lsls r0, 24
lsrs r0, 24
pop {r1}
bx r1
.align 2, 0
_0809D93C: .4byte gUnknown_81165C8
thumb_func_end sub_809D92C
thumb_func_start sub_809D940
sub_809D940:
push {r4,lr}
bl sub_80A8B74
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
bl sub_80AC378
orrs r4, r0
lsls r4, 24
lsrs r4, 24
bl sub_80AD290
orrs r4, r0
lsls r4, 24
lsrs r4, 24
adds r0, r4, 0
pop {r4}
pop {r1}
bx r1
thumb_func_end sub_809D940
thumb_func_start sub_809D968
sub_809D968:
push {r4-r6,lr}
adds r5, r0, 0
lsls r1, 16
asrs r6, r1, 16
movs r4, 0
adds r2, r5, 0
adds r2, 0x46
ldrh r1, [r2]
movs r0, 0
ldrsh r3, [r2, r0]
movs r0, 0x1
negs r0, r0
cmp r3, r0
beq _0809D98E
cmp r3, r6
bne _0809D98E
ldr r0, _0809D9B4
strh r0, [r2]
movs r4, 0x1
_0809D98E:
adds r2, r5, 0
adds r2, 0xA6
ldrh r1, [r2]
movs r0, 0
ldrsh r3, [r2, r0]
movs r0, 0x1
negs r0, r0
cmp r3, r0
beq _0809D9AA
cmp r3, r6
bne _0809D9AA
ldr r0, _0809D9B4
strh r0, [r2]
movs r4, 0x1
_0809D9AA:
adds r0, r4, 0
pop {r4-r6}
pop {r1}
bx r1
.align 2, 0
_0809D9B4: .4byte 0x0000ffff
thumb_func_end sub_809D968
thumb_func_start sub_809D9B8
sub_809D9B8:
lsls r0, 16
asrs r0, 16
ldr r1, _0809D9D4
adds r1, r0, r1
movs r3, 0
movs r2, 0x1
strb r2, [r1]
ldr r1, _0809D9D8
lsls r0, 2
adds r0, r1
str r3, [r0]
ldr r0, _0809D9DC
strb r2, [r0]
bx lr
.align 2, 0
_0809D9D4: .4byte gUnknown_2039A38
_0809D9D8: .4byte gUnknown_2039B48
_0809D9DC: .4byte gUnknown_2039A36
thumb_func_end sub_809D9B8
thumb_func_start sub_809D9E0
sub_809D9E0:
lsls r0, 16
asrs r0, 16
ldr r2, _0809D9FC
adds r2, r0, r2
movs r3, 0x1
strb r3, [r2]
ldr r2, _0809DA00
lsls r0, 2
adds r0, r2
str r1, [r0]
ldr r0, _0809DA04
strb r3, [r0]
bx lr
.align 2, 0
_0809D9FC: .4byte gUnknown_2039A38
_0809DA00: .4byte gUnknown_2039B48
_0809DA04: .4byte gUnknown_2039A36
thumb_func_end sub_809D9E0
thumb_func_start sub_809DA08
sub_809DA08:
push {r4,r5,lr}
adds r5, r0, 0
lsls r1, 16
asrs r4, r1, 16
ldr r1, _0809DA2C
lsls r0, r4, 2
adds r0, r1
str r2, [r0]
cmp r4, 0
bne _0809DA38
bl sub_809A750
lsls r0, 24
cmp r0, 0
bne _0809DA30
movs r0, 0
b _0809DA5E
.align 2, 0
_0809DA2C: .4byte gUnknown_2039B48
_0809DA30:
adds r0, r5, 0
adds r0, 0x46
strh r4, [r0]
b _0809DA52
_0809DA38:
movs r1, 0x80
adds r2, r5, 0
adds r2, 0x46
adds r0, r4, 0
orrs r0, r1
strh r0, [r2]
ldr r0, _0809DA64
adds r0, r4, r0
movs r1, 0x1
strb r1, [r0]
ldr r0, _0809DA68
adds r0, r4, r0
strb r1, [r0]
_0809DA52:
movs r0, 0x2
strh r0, [r5, 0x26]
ldr r1, _0809DA6C
movs r0, 0x1
strb r0, [r1]
movs r0, 0x1
_0809DA5E:
pop {r4,r5}
pop {r1}
bx r1
.align 2, 0
_0809DA64: .4byte gUnknown_2039A38
_0809DA68: .4byte gUnknown_2039AC0
_0809DA6C: .4byte gUnknown_2039A36
thumb_func_end sub_809DA08
thumb_func_start HandleAction
HandleAction:
push {r4-r7,lr}
@@ -8928,28 +8714,4 @@ _080A257C:
bx r0
thumb_func_end sub_80A2558
thumb_func_start sub_80A2584
sub_80A2584:
push {lr}
lsls r1, 16
asrs r1, 16
lsls r0, 16
asrs r0, 16
bl sub_809ABB4
pop {r0}
bx r0
thumb_func_end sub_80A2584
thumb_func_start sub_80A2598
sub_80A2598:
push {lr}
lsls r1, 16
asrs r1, 16
lsls r0, 16
asrs r0, 16
bl sub_809AC18
pop {r0}
bx r0
thumb_func_end sub_80A2598
.align 2,0

View File

@@ -294,443 +294,4 @@ _0802D7C8: .4byte gUnknown_80D4928
_0802D7CC: .4byte gUnknown_80E014C
thumb_func_end sub_802D73C
thumb_func_start sub_802D7D0
sub_802D7D0:
push {lr}
sub sp, 0x4
mov r0, sp
bl sub_80144A4
cmp r0, 0
bne _0802D826
ldr r1, [sp]
cmp r1, 0x1
beq _0802D7EA
ldr r0, _0802D800
ldr r0, [r0]
str r1, [r0, 0x70]
_0802D7EA:
ldr r0, [sp]
cmp r0, 0x3
beq _0802D804
cmp r0, 0x3
ble _0802D820
cmp r0, 0x4
beq _0802D820
cmp r0, 0x6
beq _0802D80C
b _0802D820
.align 2, 0
_0802D800: .4byte gUnknown_203B2F8
_0802D804:
movs r0, 0x2
bl sub_802D1A0
b _0802D826
_0802D80C:
ldr r0, _0802D81C
ldr r1, [r0]
movs r0, 0x1
str r0, [r1, 0x4]
movs r0, 0x10
bl sub_802D1A0
b _0802D826
.align 2, 0
_0802D81C: .4byte gUnknown_203B2F8
_0802D820:
movs r0, 0
bl sub_802D1A0
_0802D826:
add sp, 0x4
pop {r0}
bx r0
thumb_func_end sub_802D7D0
thumb_func_start sub_802D82C
sub_802D82C:
push {lr}
sub sp, 0x4
mov r0, sp
bl sub_80144A4
cmp r0, 0
bne _0802D8C6
ldr r1, [sp]
cmp r1, 0x1
beq _0802D846
ldr r0, _0802D858
ldr r0, [r0]
str r1, [r0, 0x74]
_0802D846:
ldr r0, [sp]
subs r0, 0x1
cmp r0, 0x6
bhi _0802D8C0
lsls r0, 2
ldr r1, _0802D85C
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_0802D858: .4byte gUnknown_203B2F8
_0802D85C: .4byte _0802D860
.align 2, 0
_0802D860:
.4byte _0802D8C0
.4byte _0802D8C0
.4byte _0802D87C
.4byte _0802D8C0
.4byte _0802D8C0
.4byte _0802D898
.4byte _0802D8AC
_0802D87C:
ldr r0, _0802D894
ldr r0, [r0]
ldrb r0, [r0, 0x10]
bl sub_8096C3C
bl sub_8096C80
movs r0, 0x8
bl sub_802D1A0
b _0802D8C6
.align 2, 0
_0802D894: .4byte gUnknown_203B2F8
_0802D898:
ldr r0, _0802D8A8
ldr r1, [r0]
movs r0, 0x9
str r0, [r1, 0x4]
movs r0, 0x10
bl sub_802D1A0
b _0802D8C6
.align 2, 0
_0802D8A8: .4byte gUnknown_203B2F8
_0802D8AC:
ldr r0, _0802D8BC
ldr r1, [r0]
movs r0, 0x9
str r0, [r1, 0x4]
movs r0, 0xF
bl sub_802D1A0
b _0802D8C6
.align 2, 0
_0802D8BC: .4byte gUnknown_203B2F8
_0802D8C0:
movs r0, 0x1
bl sub_802D1A0
_0802D8C6:
add sp, 0x4
pop {r0}
bx r0
thumb_func_end sub_802D82C
thumb_func_start sub_802D8CC
sub_802D8CC:
push {lr}
movs r0, 0x1
bl sub_802C598
cmp r0, 0x4
bhi _0802D93A
lsls r0, 2
ldr r1, _0802D8E4
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_0802D8E4: .4byte _0802D8E8
.align 2, 0
_0802D8E8:
.4byte _0802D93A
.4byte _0802D93A
.4byte _0802D930
.4byte _0802D8FC
.4byte _0802D914
_0802D8FC:
bl sub_802C620
ldr r1, _0802D910
ldr r1, [r1]
strb r0, [r1, 0x10]
movs r0, 0xD
bl sub_802D1A0
b _0802D93A
.align 2, 0
_0802D910: .4byte gUnknown_203B2F8
_0802D914:
bl sub_802C620
ldr r2, _0802D92C
ldr r1, [r2]
strb r0, [r1, 0x10]
ldr r1, [r2]
movs r0, 0xC
str r0, [r1, 0x4]
movs r0, 0xF
bl sub_802D1A0
b _0802D93A
.align 2, 0
_0802D92C: .4byte gUnknown_203B2F8
_0802D930:
bl sub_802C688
movs r0, 0x1
bl sub_802D1A0
_0802D93A:
pop {r0}
bx r0
thumb_func_end sub_802D8CC
thumb_func_start sub_802D940
sub_802D940:
push {r4,lr}
sub sp, 0x4
movs r0, 0
str r0, [sp]
bl sub_802C598
ldr r4, _0802D980
ldr r0, [r4]
adds r0, 0x78
bl sub_8012FD8
lsls r0, 24
cmp r0, 0
bne _0802D970
ldr r0, [r4]
adds r0, 0x78
mov r1, sp
bl sub_8013114
ldr r1, [sp]
cmp r1, 0x1
beq _0802D970
ldr r0, [r4]
str r1, [r0, 0x6C]
_0802D970:
ldr r0, [sp]
cmp r0, 0x2
beq _0802D98A
cmp r0, 0x2
bgt _0802D984
cmp r0, 0x1
beq _0802D9E0
b _0802D9E6
.align 2, 0
_0802D980: .4byte gUnknown_203B2F8
_0802D984:
cmp r0, 0x5
beq _0802D9CC
b _0802D9E6
_0802D98A:
ldr r0, _0802D9BC
ldr r3, [r0]
ldrb r0, [r3, 0x9]
cmp r0, 0
beq _0802D9C4
ldr r2, _0802D9C0
ldrb r1, [r3, 0x10]
lsls r0, r1, 2
adds r0, r1
lsls r0, 2
adds r0, 0xF0
ldr r1, [r2]
adds r1, r0
ldrb r0, [r1]
cmp r0, 0x5
bls _0802D9C4
ldrb r0, [r3, 0xA]
ldrb r1, [r1, 0x4]
cmp r0, r1
bne _0802D9C4
movs r0, 0x7
bl sub_802D1A0
b _0802D9E6
.align 2, 0
_0802D9BC: .4byte gUnknown_203B2F8
_0802D9C0: .4byte gUnknown_203B490
_0802D9C4:
movs r0, 0xE
bl sub_802D1A0
b _0802D9E6
_0802D9CC:
ldr r0, _0802D9DC
ldr r1, [r0]
movs r0, 0xC
str r0, [r1, 0x4]
movs r0, 0xF
bl sub_802D1A0
b _0802D9E6
.align 2, 0
_0802D9DC: .4byte gUnknown_203B2F8
_0802D9E0:
movs r0, 0xC
bl sub_802D1A0
_0802D9E6:
add sp, 0x4
pop {r4}
pop {r0}
bx r0
thumb_func_end sub_802D940
thumb_func_start sub_802D9F0
sub_802D9F0:
push {r4,lr}
sub sp, 0x4
movs r0, 0
str r0, [sp]
bl sub_802C598
ldr r4, _0802DA30
ldr r0, [r4]
adds r0, 0x78
bl sub_8012FD8
ldr r0, [r4]
adds r0, 0xC8
bl sub_8012FD8
lsls r0, 24
cmp r0, 0
bne _0802DA1E
ldr r0, [r4]
adds r0, 0xC8
mov r1, sp
bl sub_8013114
_0802DA1E:
ldr r0, [sp]
cmp r0, 0x3
beq _0802DA40
cmp r0, 0x3
bgt _0802DA34
cmp r0, 0x1
beq _0802DA38
b _0802DA56
.align 2, 0
_0802DA30: .4byte gUnknown_203B2F8
_0802DA34:
cmp r0, 0x4
bne _0802DA56
_0802DA38:
movs r0, 0xC
bl sub_802D1A0
b _0802DA56
_0802DA40:
bl sub_802C688
ldr r0, [r4]
ldrb r0, [r0, 0x10]
bl sub_8096C3C
bl sub_8096C80
movs r0, 0x8
bl sub_802D1A0
_0802DA56:
add sp, 0x4
pop {r4}
pop {r0}
bx r0
thumb_func_end sub_802D9F0
thumb_func_start sub_802DA60
sub_802DA60:
push {lr}
bl sub_802DEE0
cmp r0, 0x1
bls _0802DA7C
cmp r0, 0x3
bhi _0802DA7C
bl sub_802DF24
ldr r0, _0802DA80
ldr r0, [r0]
ldr r0, [r0, 0x4]
bl sub_802D1A0
_0802DA7C:
pop {r0}
bx r0
.align 2, 0
_0802DA80: .4byte gUnknown_203B2F8
thumb_func_end sub_802DA60
thumb_func_start sub_802DA84
sub_802DA84:
push {lr}
sub sp, 0x4
mov r0, sp
bl sub_80144A4
cmp r0, 0
bne _0802DA9C
ldr r0, _0802DAA4
ldr r0, [r0]
ldr r0, [r0, 0x4]
bl sub_802D1A0
_0802DA9C:
add sp, 0x4
pop {r0}
bx r0
.align 2, 0
_0802DAA4: .4byte gUnknown_203B2F8
thumb_func_end sub_802DA84
thumb_func_start sub_802DAA8
sub_802DAA8:
push {r4,lr}
ldr r4, _0802DAD0
ldr r0, [r4]
ldrb r0, [r0, 0x10]
bl GetJobSlotInfo
adds r1, r0, 0
ldr r4, [r4]
ldrb r0, [r4, 0x9]
cmp r0, 0
beq _0802DAD4
ldrb r0, [r1]
cmp r0, 0x5
beq _0802DAD4
ldrb r0, [r4, 0xA]
ldrb r1, [r1, 0x4]
cmp r0, r1
bne _0802DAD4
movs r0, 0
b _0802DAD6
.align 2, 0
_0802DAD0: .4byte gUnknown_203B2F8
_0802DAD4:
movs r0, 0x1
_0802DAD6:
pop {r4}
pop {r1}
bx r1
thumb_func_end sub_802DAA8
thumb_func_start sub_802DADC
sub_802DADC:
push {r4,lr}
ldr r3, _0802DAEC
ldr r0, [r3]
ldrb r0, [r0, 0x9]
cmp r0, 0
bne _0802DAF0
_0802DAE8:
movs r0, 0x1
b _0802DB1C
.align 2, 0
_0802DAEC: .4byte gUnknown_203B2F8
_0802DAF0:
ldr r0, _0802DB24
ldr r0, [r0]
adds r1, r0, 0
adds r1, 0xF0
movs r2, 0
_0802DAFA:
ldrb r0, [r1]
cmp r0, 0
beq _0802DAE8
cmp r0, 0x5
beq _0802DAE8
cmp r0, 0x5
bls _0802DB12
ldr r0, [r3]
ldrb r0, [r0, 0xA]
ldrb r4, [r1, 0x4]
cmp r0, r4
bne _0802DAE8
_0802DB12:
adds r1, 0x14
adds r2, 0x1
cmp r2, 0x7
ble _0802DAFA
movs r0, 0
_0802DB1C:
pop {r4}
pop {r1}
bx r1
.align 2, 0
_0802DB24: .4byte gUnknown_203B490
thumb_func_end sub_802DADC
.align 2,0

View File

@@ -661,99 +661,4 @@ sub_802CF5C:
_0802CFCC: .4byte gUnknown_203B2F4
thumb_func_end sub_802CF5C
thumb_func_start sub_802CFD0
sub_802CFD0:
push {r4-r6,lr}
sub sp, 0x60
ldr r6, _0802D02C
ldr r0, [r6]
ldr r0, [r0, 0x34]
bl sub_8008C54
ldr r0, [r6]
ldr r0, [r0, 0x34]
bl sub_80073B8
ldr r0, [r6]
movs r1, 0x1E
ldrsh r4, [r0, r1]
lsls r4, 3
adds r5, r4, 0
adds r5, 0xA
ldr r2, _0802D030
ldr r3, [r0, 0x34]
movs r0, 0
str r0, [sp]
adds r0, r5, 0
movs r1, 0
bl xxx_call_draw_string
adds r4, 0x4
ldr r1, [r6]
adds r0, r1, 0
adds r0, 0x9E
ldrb r0, [r0]
lsls r0, 3
adds r5, r4, r0
movs r0, 0x1E
ldrsh r2, [r1, r0]
adds r2, 0x1
movs r0, 0x7
str r0, [sp]
ldr r0, [r1, 0x34]
str r0, [sp, 0x4]
adds r0, r5, 0
movs r1, 0
movs r3, 0x2
bl sub_8012BC4
movs r5, 0
b _0802D076
.align 2, 0
_0802D02C: .4byte gUnknown_203B2F4
_0802D030: .4byte gUnknown_80DFDBC
_0802D034:
ldr r0, [r6]
movs r2, 0x1E
ldrsh r1, [r0, r2]
movs r2, 0x1C
ldrsh r0, [r0, r2]
muls r0, r1
adds r0, r5
lsls r0, 24
lsrs r0, 24
bl sub_803B344
adds r4, r0, 0
ldr r0, [r6]
ldr r1, [r0, 0x34]
str r1, [sp, 0x8]
adds r1, r5, 0
bl sub_8013800
str r0, [sp, 0x50]
adds r0, r4, 0
add r1, sp, 0x8
bl sub_803B35C
mov r1, sp
adds r1, 0x4B
movs r0, 0x1
strb r0, [r1]
ldr r0, [r4, 0x14]
str r0, [sp, 0x54]
add r0, sp, 0x8
bl CreateRescueTitle
adds r5, 0x1
_0802D076:
ldr r0, [r6]
movs r1, 0x1A
ldrsh r0, [r0, r1]
cmp r5, r0
blt _0802D034
ldr r0, _0802D094
ldr r0, [r0]
ldr r0, [r0, 0x34]
bl sub_80073E0
add sp, 0x60
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_0802D094: .4byte gUnknown_203B2F4
thumb_func_end sub_802CFD0
.align 2,0

24
include/code_80958E8.h Normal file
View File

@@ -0,0 +1,24 @@
struct subStruct_203B490
{
// size: 0xC
u8 dungeon;
u8 unk1;
u32 unk4;
u32 unk8;
};
struct unkStruct_203B490
{
// size: 0x330?
struct WonderMail unk0[4];
struct WonderMail unk50[8];
struct WonderMail unkF0[8];
u8 unk190[0x28];
u8 unk1B8[0x78];
struct subStruct_203B490 unk230[16];
u8 unk2F0[0x38];
u8 unk328;
};
extern struct unkStruct_203B490 *gUnknown_203B490;

View File

@@ -28,5 +28,8 @@ struct Dungeon
extern struct Dungeon gDungeons[];
extern struct DungeonName gDungeonNames[];
const u8 *GetDungeonName1(u8 dungeon);
u32 sub_80908D8(struct DungeonLocation *dungeon);
u8 sub_8090910(struct DungeonLocation *dungeon, u32 param_2);
bool8 sub_809095C(u8 dungeon);
#endif //GUARD_DUNGEON_H

View File

@@ -99,7 +99,8 @@ struct DungeonEntityData
/* 0x8C */ u8 IQSkillsSelected[4]; // IQ skills selected in the IQ skills menu.
/* 0x90 */ u8 IQSkillsEnabled[4];
/* 0x94 */ u8 tactic;
u8 fill95[0x9C - 0x95];
u8 fill95[0x98 - 0x95];
/* 0x98 */ u32 unk98;
/* 0x9C */ u32 unk9C;
/* 0xA0 */ u32 unkA0;
/* 0xA4 */ u8 clientType;
@@ -135,7 +136,8 @@ struct DungeonEntityData
/* 0xCC */ u8 cursedDamageTimer;
u8 fillCD[0xD0 - 0xCD];
/* 0xD0 */ u8 linkedStatus;
u8 fillD1[0xD8 - 0xD1];
u8 fillD1[0xD4 - 0xD1];
/* 0xD4 */ u32 unkD4;
/* 0xD8 */ u8 unkD8;
/* 0xD9 */ u8 linkedStatusTurnsLeft;
/* 0xDA */ u8 linkedStatusDamageTimer;

View File

@@ -66,7 +66,9 @@ struct DungeonGlobalData
u8 unk674;
u8 unk675;
/* 0x676 */ bool8 itemHoldersIdentified;
u8 unk677[0x68A - 0x677];
u8 unk677;
u8 unk678;
u8 unk679[0x68A - 0x679];
/* 0x68A */ u8 unk68A;
u8 fill68B[0x363C - 0x68B];
/* 0x363C */ u8 expYieldRankings[NUM_SPECIES];

46
include/ground_script.h Normal file
View File

@@ -0,0 +1,46 @@
struct GroundScript_ExecutePP_3
{
// size: 0xC
u32 unk0;
s16 scriptType;
s16 unk6;
u8 unk8;
};
struct GroundScript_ExecutePP_1_sub
{
// size: 0x60
/* 0x0 */ s16 scriptType;
/* 0x2 */ s16 unk2;
/* 0x4 */ u32 unk4;
/* 0x8 */ u32 unk8;
/* 0xC */ u16 unkC;
/* 0xE */ u8 unkE;
/* 0xF */ u8 fillF;
/* 0x10 */ u32 unk10;
/* 0x14 */ u32 unk14;
/* 0x18 */ u8 fill18[0x22 - 0x18];
/* 0x22 */ u16 unk22;
/* 0x24 */ u16 unk24;
/* 0x26 */ u32 unk26;
u8 fill50[0x60 - 0x2A];
} __attribute__((packed));
typedef void (*Callback)(u32, void *);
struct GroundScript_ExecutePP_1_sub2
{
Callback callbacks[10]; // IDK the size..
};
struct GroundScript_ExecutePP_1
{
struct GroundScript_ExecutePP_1_sub2 *unk0;
u32 unk4;
u32 fill8;
u32 unkC;
u32 fill10;
u8 fill18[0x24 - 0x14];
struct GroundScript_ExecutePP_1_sub unk24;
struct GroundScript_ExecutePP_1_sub unk84;
u16 unkE4;
};

View File

@@ -19,5 +19,10 @@ void sub_8077910(struct DungeonEntity * pokemon, struct DungeonEntity * target,
void sub_80779F0(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 param_3, bool8 displayMessage);
void sub_8077AE4(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 displayMessage);
void sub_8077BB4(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 displayMessage);
void HealTargetHP(struct DungeonEntity *pokemon, struct DungeonEntity *target, s32 param_3, s32 param_4, u32 displayMessage);
void HandleScannerOrb(struct DungeonEntity* pokemon, struct DungeonEntity* target);
void HandleStairsOrb(struct DungeonEntity* pokemon, struct DungeonEntity* target);
void HandleRadarOrb(struct DungeonEntity* pokemon, struct DungeonEntity* target);
void HandleLeechSeed(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 displayMessage);
#endif

View File

@@ -23,8 +23,8 @@ bool8 CleanseOrbAction(struct DungeonEntity *pokemon,struct DungeonEntity *targe
bool8 sub_805BC70(struct DungeonEntity *pokemon, struct DungeonEntity *target);
bool8 sub_805BC98(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, s32 param_4);
bool8 SilenceOrbAction(struct DungeonEntity *pokemon,struct DungeonEntity *target);
bool8 sub_805BD70(struct DungeonEntity *pokemon, struct DungeonEntity *target);
bool8 sub_805BD7C(struct DungeonEntity *pokemon, struct DungeonEntity *target);
bool8 ScannerOrbAction(struct DungeonEntity *pokemon, struct DungeonEntity *target);
bool8 RadarOrbAction(struct DungeonEntity *pokemon, struct DungeonEntity *target);
bool8 TransferOrbAction(struct DungeonEntity *pokemon,struct DungeonEntity *target);
bool8 sub_805BE90(struct DungeonEntity *pokemon, struct DungeonEntity *target);
bool8 LuminousOrbAction(struct DungeonEntity *pokemon,struct DungeonEntity *target);
@@ -49,7 +49,7 @@ bool8 sub_805C3DC(struct DungeonEntity *pokemon, struct DungeonEntity *target);
bool8 sub_805C3F8(struct DungeonEntity *pokemon, struct DungeonEntity *target);
bool8 sub_805C45C(struct DungeonEntity *pokemon, struct DungeonEntity *target);
bool8 sub_805C468(struct DungeonEntity *pokemon, struct DungeonEntity *target);
bool8 sub_805C474(struct DungeonEntity *pokemon, struct DungeonEntity *target);
bool8 StairsOrbAction(struct DungeonEntity *pokemon, struct DungeonEntity *target);
bool8 sub_805C480(struct DungeonEntity *pokemon, struct DungeonEntity *target);
bool8 sub_805C48C(struct DungeonEntity *pokemon, struct DungeonEntity *target);
bool8 CanUseOnSelfWithStatusChecker(struct DungeonEntity *pokemon, struct PokemonMove *move);

View File

@@ -2,6 +2,7 @@
#define GUARD_WONDER_MAIL_H
#include "file_system.h"
#include "global.h"
#include "text.h"
#include "item.h"
#include "pokemon.h"
@@ -29,8 +30,7 @@ struct WonderMail
/* 0x1 */ u8 missionType; // mission type
/* 0x2 */ u8 unk2;
/* 0x3 */ u8 unk3;
/* 0x4 */ u8 dungeon; // dungeon
/* 0x5 */ u8 floor; // floor
/* 0x4 */ struct DungeonLocation dungeon;
/* 0x8 */ u32 unk8;
/* 0xC */ s16 clientSpecies; // client pokemon
/* 0xE */ s16 targetSpecies; // target

79
include/wonder_mail_3.h Normal file
View File

@@ -0,0 +1,79 @@
struct unkStruct_203B2F4
{
u8 fill0[0x1A];
s16 unk1A;
s16 unk1C;
s16 unk1E;
u8 fill20[0x34 - 0x20];
u32 unk34;
u32 unk38;
struct UnkTextStruct2 unk3C[4];
u8 unk9C[4];
};
extern struct unkStruct_203B2F4 *gUnknown_203B2F4;
struct unkStruct_802C39C
{
/* 0x0 */ u32 unk0[2];
/* 0x8 */ struct DungeonLocation *unk8;
/* 0xC */ u8 *unkC;
/* 0x10 */ s16 unk10;
/* 0x12 */ s16 unk12;
/* 0x14 */ u8 unk14;
/* 0x15 */ u8 fill15[0x1B];
/* 0x34 */ u8 fill34[2];
/* 0x36 */ u8 fill36[0x3C - 0x36];
/* 0x3C */ u8 unk3C[0xC];
/* 0x48 */ u8 fill48[4];
/* 0x4C */ u32 unk4C;
/* 0x50 */ u8 *unk50[3];
};
struct unkStruct_803B344
{
// size: 0xB4
struct WonderMail unk0;
u8* unk14;
u8* unk18;
u8 fill1C[0x3C - 0x1C];
u8 unk3C[0x78];
};
struct unkSubStruct_203B2F8
{
struct WonderMail wonderMail;
u8 *unk14;
u8 *unk18;
};
struct unkStruct_203B2F8
{
// size: 0x208
s32 state; // state
s32 fallbackState;
u8 unk8;
u8 unk9;
u8 unkA;
u8 unkB;
struct unkSubStruct_203B2F8 *unkC;
u8 unk10;
u8 fill11[0x14 - 0x11];
u32 unk14;
u8 fill18[0x58 - 0x18];
u8 unk58;
u8 fill59[0x64 - 0x59];
u8 *unk64;
u32 unk68;
u32 unk6C;
u32 unk70;
u32 unk74;
u8 unk78[0xC8 - 0x78];
u8 unkC8[4];
u8 fillCC[0x118 - 0xCC];
struct MenuItem unk118[8];
struct MenuItem unk158[8];
u16 unk198[8];
struct UnkTextStruct2 unk1A8[4];
u32 unk1E4;
};
extern struct unkStruct_203B2F8 *gUnknown_203B2F8;

View File

@@ -116,6 +116,7 @@ SECTIONS {
asm/gulpin_shop.o(.text);
src/gulpin_shop_1.o(.text);
asm/code_801EE10.o(.text);
src/code_801EE10.o(.text);
src/luminous_cave.o(.text);
src/friend_list_menu_1.o(.text);
asm/friend_list_menu.o(.text);
@@ -292,6 +293,7 @@ SECTIONS {
asm/dungeon.o(.text);
src/dungeon_2.o(.text);
asm/dungeon_2.o(.text);
src/dungeon_2_1.o(.text);
src/items.o(.text);
src/rescue_team_info.o(.text);
src/text_util.o(.text);

157
src/code_801EE10.c Normal file
View File

@@ -0,0 +1,157 @@
#include "global.h"
#include "code_800D090.h"
#include "pokemon.h"
#include "input.h"
#include "memory.h"
#include "text.h"
struct unkStruct_203B2AC
{
u8 unk0[0x1E];
s16 unk1E;
s16 unk20;
u8 unk22[0x34 - 0x22];
u32 unk34[3];
u8 unk40[0x48 - 0x40];
s16 unk48;
u32 unk4C;
u8 unk50[0xB0 - 0x50];
u32 unkB0;
u8 fillB4[0xE0 - 0xB4];
u32 unkE0;
struct UnkTextStruct2 *unkE4;
struct UnkTextStruct2 unkE8[4];
u8 unk148[4];
};
extern struct unkStruct_203B2AC *gUnknown_203B2AC;
struct unkStruct_3001B60
{
u8 fill0[0x1A];
s16 unk1A[2];
u8 fill1C[0x370 - 0x1E];
s16 unk370;
s16 unk372;
s16 unk374;
s16 unk376;
};
extern struct unkStruct_3001B60 *gUnknown_3001B60;
extern struct UnkTextStruct2 gUnknown_80DC9B0;
extern struct UnkTextStruct2 gUnknown_80DC9C8;
extern void sub_8013818(void *, u32, u32, u32);
extern u8 sub_80023E4(u32);
extern void sub_808FF20(u32 *, struct PokemonStruct *, u8);
extern void CreatePokemonInfoTabScreen(u32, s16, u32 *, u32 *, u32);
extern s32 GetKeyPress(void *);
extern bool8 sub_8013938(void *);
extern void sub_802452C(void);
extern void PlayMenuSoundEffect(u32);
extern void sub_8013984(void *);
void sub_80922B4(u8 *buffer, u8 *string, s32 size);
void sub_8024588(void);
void sub_80245D0(void);
void sub_8024604(void);
extern u8 gUnknown_80DC9A4[];
struct PokemonStruct *sub_80243E8(void)
{
u8 buffer [40];
u8 nameBuffer [20];
struct PokemonStruct *pokeStruct = &gRecruitedPokemonRef->pokemon[gUnknown_3001B60->unk1A[gUnknown_3001B60->unk376 * gUnknown_3001B60->unk374 + gUnknown_3001B60->unk370]];
sub_80922B4(nameBuffer, pokeStruct->name, POKEMON_NAME_LENGTH);
sprintf_2(buffer, gUnknown_80DC9A4,nameBuffer); // %s
return pokeStruct;
}
bool8 sub_8024458(s16 param_1, s32 param_2)
{
s32 param_1_s32 = param_1;
gUnknown_203B2AC = MemoryAlloc(sizeof(struct unkStruct_203B2AC), 8);
gUnknown_203B2AC->unk48 = param_1_s32;
gUnknown_203B2AC->unkE0 = param_2;
gUnknown_203B2AC->unkE4 = &gUnknown_203B2AC->unkE8[param_2];
sub_8006518(gUnknown_203B2AC->unkE8);
gUnknown_203B2AC->unkE8[gUnknown_203B2AC->unkE0] = gUnknown_80DC9C8;
gUnknown_203B2AC->unkE4->unk14 = gUnknown_203B2AC->unk148;
gUnknown_203B2AC->unk148[2] = 10;
sub_8024604();
sub_802452C();
sub_8013984(gUnknown_203B2AC);
return TRUE;
}
u8 sub_80244E4(void)
{
switch(GetKeyPress(gUnknown_203B2AC))
{
case 2:
PlayMenuSoundEffect(1);
return 2;
case 1:
PlayMenuSoundEffect(0);
return 3;
default:
if (sub_8013938(gUnknown_203B2AC) != 0) {
sub_802452C();
return 1;
}
else {
return 0;
}
}
}
void sub_802452C(void)
{
sub_8024588();
sub_80245D0();
}
void sub_802453C(void)
{
if(gUnknown_203B2AC)
{
gUnknown_203B2AC->unkE8[gUnknown_203B2AC->unkE0] = gUnknown_80DC9B0;
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B2AC->unkE8, 1, 1);
MemoryFree(gUnknown_203B2AC);
gUnknown_203B2AC = NULL;
}
}
void sub_8024588(void)
{
gUnknown_203B2AC->unk148[0] = gUnknown_203B2AC->unk20;
gUnknown_203B2AC->unk148[1] = gUnknown_203B2AC->unk1E;
gUnknown_203B2AC->unk148[3] = 0;
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B2AC->unkE8,1,1);
}
void sub_80245D0(void)
{
CreatePokemonInfoTabScreen
(gUnknown_203B2AC->unk34[gUnknown_203B2AC->unk1E],
gUnknown_203B2AC->unk1E,&gUnknown_203B2AC->unk4C,
&gUnknown_203B2AC->unkB0,gUnknown_203B2AC->unkE0);
}
void sub_8024604(void)
{
struct PokemonStruct *pokeStruct;
u32 *iVar3;
gUnknown_203B2AC->unk34[0] = 2;
gUnknown_203B2AC->unk34[1] = 3;
gUnknown_203B2AC->unk34[2] = 5;
sub_8013818(gUnknown_203B2AC,3,1,gUnknown_203B2AC->unkE0);
iVar3 = &gUnknown_203B2AC->unk4C;
pokeStruct = &gRecruitedPokemonRef->pokemon[gUnknown_203B2AC->unk48];
sub_808FF20(iVar3,pokeStruct,sub_80023E4(7));
}

View File

@@ -1,11 +1,10 @@
#include "global.h"
#include "dungeon.h"
extern s32 sub_80908D8(u32);
s32 sub_803C1B4(s32 r0, u8 r1)
u32 sub_803C1B4(struct DungeonLocation *dungeon, u8 r1)
{
s32 temp;
temp = sub_80908D8(r0);
temp = sub_80908D8(dungeon);
if(r1 == 2)
{
temp += 2;

View File

@@ -13,43 +13,43 @@ struct unkStruct_80420E8
};
extern void sub_803ED30(u8, struct DungeonEntity *r0, u8, u8);
extern void sub_804151C(struct DungeonEntity *r0, u32 r1, u8 r2);
extern void sub_80416E0(struct DungeonEntity *r0, u32, u32);
extern u8 sub_8042768(struct DungeonEntity *r0);
extern void sub_806CDD4(struct DungeonEntity *r0, u8, u32);
extern void sub_803ED30(u8, struct DungeonEntity *pokemon, u8, u8);
extern void sub_804151C(struct DungeonEntity *pokemon, u32 r1, u8 r2);
extern void sub_80416E0(struct DungeonEntity *pokemon, u32, u32);
extern u8 sub_8042768(struct DungeonEntity *pokemon);
extern void sub_806CDD4(struct DungeonEntity *pokemon, u8, u32);
extern u32 sub_806F62C(u32);
extern void PlaySoundEffect(u32);
extern u8 sub_803F428(struct DungeonEntity *r0);
extern void sub_8041550(struct DungeonEntity *r0, u32, u32, u32, u32, u32);
extern u8 sub_803F428(struct DungeonEntity *pokemon);
extern void sub_8041550(struct DungeonEntity *pokemon, u32, u32, u32, u32, u32);
void sub_80421C0(struct DungeonEntity *r0, u16 r1);
void sub_80421C0(struct DungeonEntity *pokemon, u16 r1);
void sub_8041AD0(struct DungeonEntity *r0)
void sub_8041AD0(struct DungeonEntity *pokemon)
{
sub_804151C(r0, 0xA2 << 1, 1);
sub_804151C(pokemon, 0xA2 << 1, 1);
}
void sub_8041AE0(struct DungeonEntity *r0)
void sub_8041AE0(struct DungeonEntity *pokemon)
{
sub_804151C(r0, 0x143, 1);
sub_804151C(pokemon, 0x143, 1);
}
void sub_8041AF4(struct DungeonEntity *r0)
void sub_8041AF4(struct DungeonEntity *pokemon)
{
sub_804151C(r0, 0x25, 1);
sub_80421C0(r0, 0x197);
sub_804151C(pokemon, 0x25, 1);
sub_80421C0(pokemon, 0x197);
}
void nullsub_57(void)
{
}
void sub_8041B18(struct DungeonEntity *r0)
void sub_8041B18(struct DungeonEntity *pokemon)
{
sub_804151C(r0, 0x141, 1);
sub_804151C(pokemon, 0x141, 1);
}
void nullsub_58(void)
@@ -60,36 +60,36 @@ void nullsub_59(void)
{
}
void sub_8041B34(struct DungeonEntity *r0)
void sub_8041B34(struct DungeonEntity *pokemon)
{
sub_804151C(r0, 7, 1);
sub_804151C(pokemon, 7, 1);
}
void nullsub_60(void)
{
}
void sub_8041B48(struct DungeonEntity *r0)
void sub_8041B48(struct DungeonEntity *pokemon)
{
sub_804151C(r0, 4, 0);
sub_804151C(pokemon, 4, 0);
}
void nullsub_61(void)
{
}
void sub_8041B5C(struct DungeonEntity *r0)
void sub_8041B5C(struct DungeonEntity *pokemon)
{
sub_804151C(r0, 0x171, 1);
sub_804151C(pokemon, 0x171, 1);
}
void nullsub_62(struct DungeonEntity *r0)
void nullsub_62(struct DungeonEntity *pokemon)
{
}
void sub_8041B74(struct DungeonEntity *r0)
void sub_8041B74(struct DungeonEntity *pokemon)
{
sub_804151C(r0, 0x171, 0);
sub_804151C(pokemon, 0x171, 0);
}
void nullsub_63(void)
@@ -100,9 +100,9 @@ void nullsub_64(void)
{
}
void sub_8041B90(struct DungeonEntity *r0)
void sub_8041B90(struct DungeonEntity *pokemon)
{
sub_804151C(r0, 0xD6 << 1, 0);
sub_804151C(pokemon, 0xD6 << 1, 0);
}
void nullsub_65(void)
@@ -113,60 +113,60 @@ void nullsub_66(void)
{
}
void sub_8041BA8(struct DungeonEntity *r0)
void sub_8041BA8(struct DungeonEntity *pokemon)
{
sub_804151C(r0, 4, 1);
sub_804151C(pokemon, 4, 1);
}
void nullsub_67(void)
{
}
void sub_8041BBC(struct DungeonEntity *r0)
void sub_8041BBC(struct DungeonEntity *pokemon)
{
sub_804151C(r0, 0xD4 << 1, 1);
sub_804151C(pokemon, 0xD4 << 1, 1);
}
void nullsub_68(void)
{
}
void sub_8041BD0(struct DungeonEntity *r0, u8 r1)
void sub_8041BD0(struct DungeonEntity *pokemon, u8 r1)
{
if(r1 == 0)
{
return;
}
sub_80421C0(r0, 0x1a5);
sub_80421C0(pokemon, 0x1a5);
}
void sub_8041BE8(struct DungeonEntity *r0)
void sub_8041BE8(struct DungeonEntity *pokemon)
{
sub_80421C0(r0, 0xCB << 1);
sub_80421C0(pokemon, 0xCB << 1);
}
void sub_8041BF8(struct DungeonEntity *r0)
void sub_8041BF8(struct DungeonEntity *pokemon)
{
sub_806CDD4(r0, 0xA, NUM_DIRECTIONS);
sub_806CDD4(pokemon, 0xA, NUM_DIRECTIONS);
}
void sub_8041C08(struct DungeonEntity *r0)
void sub_8041C08(struct DungeonEntity *pokemon)
{
sub_804151C(r0, 0x1a7, 1);
sub_804151C(pokemon, 0x1a7, 1);
}
void sub_8041C1C(struct DungeonEntity *r0)
void sub_8041C1C(struct DungeonEntity *pokemon)
{
sub_804151C(r0, 0x1a7, 1);
sub_804151C(pokemon, 0x1a7, 1);
}
void nullsub_69(void)
{
}
void sub_8041C34(struct DungeonEntity *r0)
void sub_8041C34(struct DungeonEntity *pokemon)
{
sub_804151C(r0, 0x4C, 1);
sub_804151C(pokemon, 0x4C, 1);
}
void nullsub_70(void)
@@ -177,24 +177,24 @@ void nullsub_71(void)
{
}
void sub_8041C4C(struct DungeonEntity *r0, u32 r1)
void sub_8041C4C(struct DungeonEntity *pokemon, u32 r1)
{
sub_804151C(r0, r1, 1);
sub_804151C(pokemon, r1, 1);
}
void sub_8041C58(struct DungeonEntity *r0)
void sub_8041C58(struct DungeonEntity *pokemon)
{
sub_804151C(r0, 0x1a9, 1);
sub_804151C(pokemon, 0x1a9, 1);
}
void sub_8041C6C(struct DungeonEntity *r0)
void sub_8041C6C(struct DungeonEntity *pokemon)
{
sub_804151C(r0, 0x9D << 1, 1);
sub_804151C(pokemon, 0x9D << 1, 1);
}
void sub_8041C7C(struct DungeonEntity *r0)
void sub_8041C7C(struct DungeonEntity *pokemon)
{
sub_804151C(r0, 0x9D << 1, 1);
sub_804151C(pokemon, 0x9D << 1, 1);
}
void nullsub_72(void)
@@ -205,96 +205,96 @@ void nullsub_73(void)
{
}
void sub_8041C94(struct DungeonEntity *r0)
void sub_8041C94(struct DungeonEntity *pokemon)
{
sub_804151C(r0, 0x171, 1);
sub_804151C(pokemon, 0x171, 1);
}
void sub_8041CA8(struct DungeonEntity *r0)
void sub_8041CA8(struct DungeonEntity *pokemon)
{
sub_804151C(r0, 7, 1);
sub_804151C(pokemon, 7, 1);
}
void sub_8041CB8(struct DungeonEntity *r0)
void sub_8041CB8(struct DungeonEntity *pokemon)
{
sub_804151C(r0, 0x18b, 1);
sub_804151C(pokemon, 0x18b, 1);
}
void sub_8041CCC(struct DungeonEntity *r0)
void sub_8041CCC(struct DungeonEntity *pokemon)
{
sub_804151C(r0, 0xC5 << 1, 1);
sub_804151C(pokemon, 0xC5 << 1, 1);
}
void sub_8041CDC(struct DungeonEntity *r0)
void sub_8041CDC(struct DungeonEntity *pokemon)
{
sub_804151C(r0, 5, 1);
sub_804151C(pokemon, 5, 1);
}
void sub_8041CEC(struct DungeonEntity *r0)
void sub_8041CEC(struct DungeonEntity *pokemon)
{
sub_80421C0(r0, 0x19d);
sub_80421C0(pokemon, 0x19d);
}
void nullsub_74(void)
{
}
void sub_8041D00(struct DungeonEntity *r0, struct DungeonEntity *r1)
void sub_8041D00(struct DungeonEntity *pokemon, struct DungeonEntity *target)
{
sub_804151C(r1, 0x2F, 1);
sub_804151C(r0, 0x30, 1);
sub_804151C(target, 0x2F, 1);
sub_804151C(pokemon, 0x30, 1);
}
void nullsub_75(void)
void nullsub_75(struct DungeonEntity *pokemon)
{
}
void nullsub_76(void)
void nullsub_76(struct DungeonEntity *pokemon)
{
}
void nullsub_77(void)
void nullsub_77(struct DungeonEntity *pokemon)
{
}
void nullsub_78(void)
void nullsub_78(struct DungeonEntity *pokemon)
{
}
void nullsub_79(void)
void nullsub_79(struct DungeonEntity *pokemon)
{
}
void nullsub_80(void)
void nullsub_80(struct DungeonEntity *pokemon)
{
}
void sub_8041D38(struct DungeonEntity * r0)
void sub_8041D38(struct DungeonEntity * pokemon)
{
sub_804151C(r0, 0x21, 1);
sub_804151C(pokemon, 0x21, 1);
}
void sub_8041D48(struct DungeonEntity * r0)
void sub_8041D48(struct DungeonEntity * pokemon)
{
sub_80421C0(r0, 0x191);
sub_80421C0(pokemon, 0x191);
}
void nullsub_81(void)
{
}
void sub_8041D5C(struct DungeonEntity *r0)
void sub_8041D5C(struct DungeonEntity *pokemon)
{
if(sub_8042768(r0) == 0)
if(sub_8042768(pokemon) == 0)
{
return;
}
sub_803ED30(r0->entityData->stockpileCount, r0, 1, 0xB);
sub_803ED30(pokemon->entityData->stockpileCount, pokemon, 1, 0xB);
}
void sub_8041D84(struct DungeonEntity * r0)
void sub_8041D84(struct DungeonEntity *pokemon)
{
sub_80421C0(r0, 0x19f);
sub_80421C0(pokemon, 0x19f);
}
void nullsub_82(void)
@@ -305,14 +305,14 @@ void nullsub_83(void)
{
}
void sub_8041D9C(struct DungeonEntity * r0)
void sub_8041D9C(struct DungeonEntity *pokemon)
{
sub_804151C(r0, 0x131, 1);
sub_804151C(pokemon, 0x131, 1);
}
void sub_8041DB0(struct DungeonEntity * r0)
void sub_8041DB0(struct DungeonEntity *pokemon)
{
sub_804151C(r0, 0x30, 1);
sub_804151C(pokemon, 0x30, 1);
}
void nullsub_84(void)
@@ -339,257 +339,257 @@ void nullsub_88(void)
{
}
void sub_8041DD8(struct DungeonEntity *r0, s16 r1)
void sub_8041DD8(struct DungeonEntity *pokemon, s16 r1)
{
u32 temp;
temp = r1;
if(HasType(r0, TYPE_GHOST) != 0)
sub_804151C(r0, temp, 1);
if(HasType(pokemon, TYPE_GHOST) != 0)
sub_804151C(pokemon, temp, 1);
else
sub_804151C(r0, TYPE_GHOST, 1);
sub_804151C(pokemon, TYPE_GHOST, 1);
}
void nullsub_89(void)
{
}
void sub_8041E0C(struct DungeonEntity *r0)
void sub_8041E0C(struct DungeonEntity *pokemon)
{
sub_804151C(r0, 0x41, 1);
sub_804151C(pokemon, 0x41, 1);
}
void sub_8041E1C(struct DungeonEntity *r0)
void sub_8041E1C(struct DungeonEntity *pokemon)
{
sub_804151C(r0, 0x8F << 1, 1);
sub_80421C0(r0, 0xCE << 1);
sub_804151C(pokemon, 0x8F << 1, 1);
sub_80421C0(pokemon, 0xCE << 1);
}
void sub_8041E3C(struct DungeonEntity *r0)
void sub_8041E3C(struct DungeonEntity *pokemon)
{
sub_804151C(r0, 0xD7 << 1, 1);
sub_804151C(pokemon, 0xD7 << 1, 1);
}
void sub_8041E4C(struct DungeonEntity *r0)
void sub_8041E4C(struct DungeonEntity *pokemon)
{
sub_804151C(r0, 0x1b1, 1);
sub_804151C(pokemon, 0x1b1, 1);
}
void sub_8041E60(struct DungeonEntity *r0)
void sub_8041E60(struct DungeonEntity *pokemon)
{
sub_804151C(r0, 0x1a9, 1);
sub_804151C(pokemon, 0x1a9, 1);
}
void sub_8041E74(struct DungeonEntity *r0)
void sub_8041E74(struct DungeonEntity *pokemon)
{
sub_804151C(r0, 0xC9 << 1, 1);
sub_804151C(pokemon, 0xC9 << 1, 1);
}
void sub_8041E84(struct DungeonEntity *r0)
void sub_8041E84(struct DungeonEntity *pokemon)
{
sub_804151C(r0, 0xC7 << 1, 1);
sub_804151C(pokemon, 0xC7 << 1, 1);
}
void sub_8041E94(struct DungeonEntity *r0)
void sub_8041E94(struct DungeonEntity *pokemon)
{
sub_804151C(r0, 0xC8 << 1, 1);
sub_804151C(pokemon, 0xC8 << 1, 1);
}
void sub_8041EA4(struct DungeonEntity *r0)
void sub_8041EA4(struct DungeonEntity *pokemon)
{
sub_804151C(r0, 0x15, 1);
sub_804151C(pokemon, 0x15, 1);
}
void sub_8041EB4(struct DungeonEntity *r0)
void sub_8041EB4(struct DungeonEntity *pokemon)
{
sub_804151C(r0, 0x171, 1);
sub_804151C(pokemon, 0x171, 1);
}
void sub_8041EC8(struct DungeonEntity *r0)
void sub_8041EC8(struct DungeonEntity *pokemon)
{
sub_80421C0(r0, 0x197);
sub_80421C0(pokemon, 0x197);
}
void sub_8041ED8(struct DungeonEntity *r0)
void sub_8041ED8(struct DungeonEntity *pokemon)
{
sub_80421C0(r0, 0x197);
sub_80421C0(pokemon, 0x197);
}
void sub_8041EE8(struct DungeonEntity *r0)
void sub_8041EE8(struct DungeonEntity *pokemon)
{
sub_804151C(r0, 0x15, 1);
sub_804151C(pokemon, 0x15, 1);
}
void sub_8041EF8(struct DungeonEntity *r0)
void sub_8041EF8(struct DungeonEntity *pokemon)
{
sub_804151C(r0, 0xF, 1);
sub_804151C(pokemon, 0xF, 1);
}
void sub_8041F08(struct DungeonEntity *r0)
void sub_8041F08(struct DungeonEntity *pokemon)
{
sub_8041550(r0, 0x15, 1, 3, 2, 0);
sub_8041550(pokemon, 0x15, 1, 3, 2, 0);
}
void nullsub_90(void)
{
}
void sub_8041F28(struct DungeonEntity *r0, u32 r1)
void sub_8041F28(struct DungeonEntity *pokemon, u32 r1)
{
if(r1 == 0)
{
sub_804151C(r0, 0xCA << 1, 1);
sub_804151C(pokemon, 0xCA << 1, 1);
}
else
{
sub_804151C(r0, 0x193, 1);
sub_804151C(pokemon, 0x193, 1);
}
}
void sub_8041F4C(struct DungeonEntity *r0, u32 r1)
void sub_8041F4C(struct DungeonEntity *pokemon, u32 r1)
{
if(r1 == 0)
{
sub_804151C(r0, 0x18f, 1);
sub_804151C(pokemon, 0x18f, 1);
}
else
{
sub_804151C(r0, 0x191, 1);
sub_804151C(pokemon, 0x191, 1);
}
}
void sub_8041F70(struct DungeonEntity *r0, u32 r1)
void sub_8041F70(struct DungeonEntity *pokemon, u32 r1)
{
if(r1 == 0)
{
sub_804151C(r0, 0x1a9, 1);
sub_804151C(pokemon, 0x1a9, 1);
}
else
{
sub_804151C(r0, 0xC9 << 1, 1);
sub_804151C(pokemon, 0xC9 << 1, 1);
}
}
void sub_8041F94(struct DungeonEntity *r0, u32 r1)
void sub_8041F94(struct DungeonEntity *pokemon, u32 r1)
{
if(r1 == 0)
{
sub_804151C(r0, 0xC7 << 1, 1);
sub_804151C(pokemon, 0xC7 << 1, 1);
}
else
{
sub_804151C(r0, 0xC8 << 1, 1);
sub_804151C(pokemon, 0xC8 << 1, 1);
}
}
void sub_8041FB4(struct DungeonEntity *r0, u32 r1)
void sub_8041FB4(struct DungeonEntity *pokemon, u32 r1)
{
if(r1 == 0)
{
sub_804151C(r0, 0x1a9, 1);
sub_804151C(pokemon, 0x1a9, 1);
}
else
{
sub_804151C(r0, 0xC9 << 1, 1);
sub_804151C(pokemon, 0xC9 << 1, 1);
}
}
void sub_8041FD8(struct DungeonEntity *r0, u32 r1)
void sub_8041FD8(struct DungeonEntity *pokemon, u32 r1)
{
if(r1 == 0)
{
sub_804151C(r0, 0xCA << 1, 1);
sub_804151C(pokemon, 0xCA << 1, 1);
}
else
{
sub_804151C(r0, 0x193, 1);
sub_804151C(pokemon, 0x193, 1);
}
}
void sub_8041FFC(struct DungeonEntity *r0, u32 r1)
void sub_8041FFC(struct DungeonEntity *pokemon, u32 r1)
{
if(r1 == 0)
{
sub_804151C(r0, 0xC7 << 1, 1);
sub_804151C(pokemon, 0xC7 << 1, 1);
}
else
{
sub_804151C(r0, 0xC8 << 1, 1);
sub_804151C(pokemon, 0xC8 << 1, 1);
}
}
void sub_804201C(struct DungeonEntity *r0, u32 r1)
void sub_804201C(struct DungeonEntity *pokemon, u32 r1)
{
if(r1 == 0)
{
sub_804151C(r0, 0x18f, 1);
sub_804151C(pokemon, 0x18f, 1);
}
else
{
sub_804151C(r0, 0x191, 1);
sub_804151C(pokemon, 0x191, 1);
}
}
void sub_8042040(struct DungeonEntity *r0, u32 r1)
void sub_8042040(struct DungeonEntity *pokemon, u32 r1)
{
if(r1 == 0)
{
sub_804151C(r0, 0xC6 << 1, 1);
sub_804151C(pokemon, 0xC6 << 1, 1);
}
else
{
sub_804151C(r0, 0xD, 1);
sub_804151C(pokemon, 0xD, 1);
}
}
void sub_8042060(struct DungeonEntity *r0, u32 r1)
void sub_8042060(struct DungeonEntity *pokemon, u32 r1)
{
if(r1 == 0)
{
sub_804151C(r0, 0x18d, 1);
sub_804151C(pokemon, 0x18d, 1);
}
else
{
sub_804151C(r0, 0xE, 1);
sub_804151C(pokemon, 0xE, 1);
}
}
void sub_8042080(struct DungeonEntity *r0, u32 r1)
void sub_8042080(struct DungeonEntity *pokemon, u32 r1)
{
if(r1 == 0)
{
sub_804151C(r0, 0xC6 << 1, 1);
sub_804151C(pokemon, 0xC6 << 1, 1);
}
else
{
sub_804151C(r0, 0xD, 1);
sub_804151C(pokemon, 0xD, 1);
}
}
void sub_80420A0(struct DungeonEntity *r0, u32 r1)
void sub_80420A0(struct DungeonEntity *pokemon, u32 r1)
{
sub_804151C(r0, 0x143, 1);
sub_804151C(pokemon, 0x143, 1);
}
void nullsub_91(void)
{
}
void sub_80420B8(struct DungeonEntity *r0, u32 r1)
void sub_80420B8(struct DungeonEntity *pokemon, u32 r1)
{
sub_804151C(r0, 0x19, 1);
sub_804151C(pokemon, 0x19, 1);
}
void sub_80420C8(struct DungeonEntity *r0)
void sub_80420C8(struct DungeonEntity *pokemon)
{
sub_8041550(r0, 0x15, 1, 3, 2, 0);
sub_8041550(pokemon, 0x15, 1, 3, 2, 0);
}
void nullsub_92(void)
{
}
void sub_80420E8(struct DungeonEntity *r0, struct unkStruct_80420E8 *r1)
void sub_80420E8(struct DungeonEntity *pokemon, struct unkStruct_80420E8 *r1)
{
u32 temp;
u32 arg;
@@ -612,58 +612,58 @@ void sub_80420E8(struct DungeonEntity *r0, struct unkStruct_80420E8 *r1)
arg = 11;
break;
}
sub_8041550(r0, arg, 1, 3, 0, 1);
sub_8041550(pokemon, arg, 1, 3, 0, 1);
}
void sub_8042148(struct DungeonEntity *r0)
void sub_8042148(struct DungeonEntity *pokemon)
{
sub_80421C0(r0, 0x1a7);
sub_804151C(r0, 0x9F << 1, 1);
sub_80421C0(pokemon, 0x1a7);
sub_804151C(pokemon, 0x9F << 1, 1);
}
void nullsub_93()
{
}
void sub_804216C(u32 r0, struct DungeonEntity *r1, u32 r2)
void sub_804216C(struct DungeonEntity *pokemon, struct DungeonEntity *target, u32 r2)
{
if(r2 == 1)
sub_804151C(r1, 0xF8, 1);
sub_804151C(target, 0xF8, 1);
else
sub_804151C(r1, 0xF9, 1);
sub_804151C(target, 0xF9, 1);
}
void sub_804218C(u32 r0, struct DungeonEntity *r1)
void sub_804218C(struct DungeonEntity *pokemon, struct DungeonEntity *target)
{
sub_804151C(r1, 0x2A, 1);
sub_804151C(target, 0x2A, 1);
}
void sub_804219C(struct DungeonEntity *r0)
void sub_804219C(struct DungeonEntity *pokemon)
{
sub_80416E0(r0, 0x90, 1);
sub_80416E0(pokemon, 0x90, 1);
}
void sub_80421AC(u32 r0, struct DungeonEntity * r1)
void sub_80421AC(struct DungeonEntity *pokemon, struct DungeonEntity * target)
{
sub_804151C(r1, 0x167, 1);
sub_804151C(target, 0x167, 1);
}
void sub_80421C0(struct DungeonEntity *r0, u16 r1)
void sub_80421C0(struct DungeonEntity *pokemon, u16 r1)
{
if(r0 == NULL)
if(pokemon == NULL)
PlaySoundEffect(r1);
else
if(sub_8042768(r0) != 0)
if(sub_8042768(pokemon) != 0)
PlaySoundEffect(r1);
}
void sub_80421EC(struct DungeonEntity *r0, u16 r1)
void sub_80421EC(struct DungeonEntity *pokemon, u16 r1)
{
if(sub_803F428(r0) != 0)
if(sub_803F428(pokemon) != 0)
PlaySoundEffect(r1);
}
void sub_8042208(struct DungeonEntity *r0, u8 r1)
void sub_8042208(struct DungeonEntity *pokemon, u8 r1)
{
if(r1 == 0)
PlaySoundEffect(0x152);
@@ -673,9 +673,9 @@ void sub_8042208(struct DungeonEntity *r0, u8 r1)
PlaySoundEffect(0x150);
}
void sub_8042238(u32 r0, struct DungeonEntity *r1)
void sub_8042238(struct DungeonEntity *pokemon, struct DungeonEntity *target)
{
if(r1->entityData->isEnemy)
if(target->entityData->isEnemy)
PlaySoundEffect(0x157);
else
PlaySoundEffect(0x156);

View File

@@ -47,28 +47,28 @@ extern u8 sub_8092364(u8);
extern void sub_803E46C(u32);
extern void sub_803E708(u32 r0, u32 r1);
void sub_8069E0C(struct DungeonEntity *param_1)
void sub_8069E0C(struct DungeonEntity *pokemon)
{
s32 index;
struct DungeonEntityData *iVar4;
struct DungeonEntityData *entityData;
iVar4 = param_1->entityData;
if (HasAbility(param_1, ABILITY_FORECAST)) {
iVar4->types[0] = gUnknown_80F520C[GetWeather(param_1)].unk0;
iVar4->types[1] = TYPE_NONE;
entityData = pokemon->entityData;
if (HasAbility(pokemon, ABILITY_FORECAST)) {
entityData->types[0] = gUnknown_80F520C[GetWeather(pokemon)].unk0;
entityData->types[1] = TYPE_NONE;
}
else {
for(index = 0; index < 2; index++)
iVar4->types[index] = GetPokemonType(iVar4->entityID, index);
entityData->types[index] = GetPokemonType(entityData->entityID, index);
}
for(index = 0; index < 2; index++)
iVar4->abilities[index] = GetPokemonAbility(iVar4->entityID, index);
entityData->abilities[index] = GetPokemonAbility(entityData->entityID, index);
gDungeonGlobalData->unkC = 1;
}
void TriggerWeatherAbilities(void)
{
struct DungeonEntity *uVar4;
struct DungeonEntity *entity;
s32 iVar5;
if (gDungeonGlobalData->unkC != 0) {
@@ -77,18 +77,18 @@ void TriggerWeatherAbilities(void)
for(iVar5 = 0; iVar5 < DUNGEON_MAX_POKEMON; iVar5++)
{
uVar4 = gDungeonGlobalData->allPokemon[iVar5];
if (EntityExists(uVar4)) {
if (HasAbility(uVar4, ABILITY_DRIZZLE)) {
entity = gDungeonGlobalData->allPokemon[iVar5];
if (EntityExists(entity)) {
if (HasAbility(entity, ABILITY_DRIZZLE)) {
gDungeonGlobalData->startingWeather[WEATHER_RAIN] = 1;
}
else if (HasAbility(uVar4, ABILITY_SAND_STREAM)) {
else if (HasAbility(entity, ABILITY_SAND_STREAM)) {
gDungeonGlobalData->startingWeather[WEATHER_SANDSTORM] = 1;
}
else if (HasAbility(uVar4, ABILITY_DROUGHT)) {
else if (HasAbility(entity, ABILITY_DROUGHT)) {
gDungeonGlobalData->startingWeather[WEATHER_SUNNY] = 1;
}
if ((HasAbility(uVar4, ABILITY_AIR_LOCK)) || (HasAbility(uVar4, ABILITY_CLOUD_NINE))) {
if ((HasAbility(entity, ABILITY_AIR_LOCK)) || (HasAbility(entity, ABILITY_CLOUD_NINE))) {
gDungeonGlobalData->negateWeatherEffects = TRUE;
}
}
@@ -96,11 +96,11 @@ void TriggerWeatherAbilities(void)
}
}
s32 sub_8069F54(struct DungeonEntity *param_1, s16 param_2)
s32 sub_8069F54(struct DungeonEntity *pokemon, s16 param_2)
{
if ((((param_2 * 0x10000) + 0xfe880000U) >> 0x10) < 4) {
if (HasAbility(param_1, ABILITY_FORECAST)) {
return gUnknown_80F520C[GetWeather(param_1)].unk2;
if (HasAbility(pokemon, ABILITY_FORECAST)) {
return gUnknown_80F520C[GetWeather(pokemon)].unk2;
}
else {
return 0x178;
@@ -109,14 +109,14 @@ s32 sub_8069F54(struct DungeonEntity *param_1, s16 param_2)
return param_2;
}
static inline u8 sub_8069F9C_sub(struct DungeonEntity *param_1)
static inline u8 sub_8069F9C_sub(struct DungeonEntity *pokemon)
{
u32 uVar3;
uVar3 = GetWeather(param_1);
return gUnknown_80F51E4[uVar3];
u32 weather;
weather = GetWeather(pokemon);
return gUnknown_80F51E4[weather];
}
void sub_8069F9C(struct DungeonEntity *param_1,struct DungeonEntity * param_2,struct PokemonMove *param_3)
void sub_8069F9C(struct DungeonEntity *pokemon,struct DungeonEntity * target,struct PokemonMove *move)
{
u8 type;
u8 ability;
@@ -129,19 +129,19 @@ void sub_8069F9C(struct DungeonEntity *param_1,struct DungeonEntity * param_2,st
struct DungeonEntityData *iVar8;
u8 local_20 [4];
if (!EntityExists(param_1)) {
if (!EntityExists(pokemon)) {
return;
}
if (!EntityExists(param_2)) {
if (!EntityExists(target)) {
return;
}
if (param_1 == param_2) {
if (pokemon == target) {
return;
}
iVar7 = param_1->entityData;
iVar7 = pokemon->entityData;
iVar8 = iVar7;
iVar6 = param_2->entityData;
iVar6 = target->entityData;
abilityIndex = -1;
if (iVar6->abilities[0] == ABILITY_TRACE) {
abilityIndex = 0;
@@ -171,112 +171,112 @@ void sub_8069F9C(struct DungeonEntity *param_1,struct DungeonEntity * param_2,st
}
iVar6->abilities[abilityIndex] = local_20[randomIndex];
gDungeonGlobalData->unkC = 1;
SetMessageArgument(gAvailablePokemonNames,param_2,0);
sub_80522F4(param_1,param_2,*gUnknown_80FCC7C);
sub_8042900(param_2);
sub_806ABAC(param_1,param_2);
SetMessageArgument(gAvailablePokemonNames,target,0);
sub_80522F4(pokemon,target,*gUnknown_80FCC7C);
sub_8042900(target);
sub_806ABAC(pokemon,target);
}
}
_0806A068:
if (iVar6->unk15A != 0) {
iVar6->unk15A = 0;
if (HasAbility(param_2, ABILITY_COLOR_CHANGE)) {
type = GetMoveTypeForPokemon(param_1,param_3);
if (param_3->moveID == MOVE_WEATHER_BALL) {
type = sub_8069F9C_sub(param_1);
if (HasAbility(target, ABILITY_COLOR_CHANGE)) {
type = GetMoveTypeForPokemon(pokemon,move);
if (move->moveID == MOVE_WEATHER_BALL) {
type = sub_8069F9C_sub(pokemon);
}
if ((type != TYPE_NONE) && (!HasType(param_2,type))) {
if ((type != TYPE_NONE) && (!HasType(target,type))) {
iVar6->types[0] = type;
iVar6->types[1] = TYPE_NONE;
iVar6->isColorChanged = TRUE;
SetMessageArgument(gAvailablePokemonNames,param_2,0);
SetMessageArgument(gAvailablePokemonNames,target,0);
__src = GetUnformattedTypeString(iVar6->types[0]);
strcpy(gUnknown_202DE58,__src);
sub_80522F4(param_1,param_2,*gUnknown_80FCCAC);
sub_8042968(param_2);
sub_80522F4(pokemon,target,*gUnknown_80FCCAC);
sub_8042968(target);
}
}
}
}
void sub_806A120(struct DungeonEntity * param_1, struct DungeonEntity * param_2, struct PokemonMove* move)
void sub_806A120(struct DungeonEntity * pokemon, struct DungeonEntity * target, struct PokemonMove* move)
{
u32 uVar2_u32;
u8 uVar2;
const char *__src;
struct DungeonEntityData *iVar3;
u8 moveType;
const char *typeString;
struct DungeonEntityData *entityData;
if ((((EntityExists(param_1)) && (EntityExists(param_2))) && (param_1 != param_2))
&& (iVar3 = param_2->entityData, iVar3->protectionStatus == 0xC)) {
uVar2 = GetMoveTypeForPokemon(param_1, move);
uVar2_u32 = sub_8092364(uVar2);
if ((((EntityExists(pokemon)) && (EntityExists(target))) && (pokemon != target))
&& (entityData = target->entityData, entityData->protectionStatus == 0xC)) {
moveType = GetMoveTypeForPokemon(pokemon, move);
uVar2_u32 = sub_8092364(moveType);
if (uVar2_u32 != TYPE_NONE) {
iVar3->types[0] = uVar2_u32;
iVar3->types[1] = 0;
sub_8041BBC(param_2);
SetMessageArgument(gAvailablePokemonNames,param_2,0);
__src = GetUnformattedTypeString(uVar2_u32);
strcpy(gUnknown_202DE58,__src);
sub_80522F4(param_1,param_2,*gUnknown_80FDCC8);
entityData->types[0] = uVar2_u32;
entityData->types[1] = 0;
sub_8041BBC(target);
SetMessageArgument(gAvailablePokemonNames,target,0);
typeString = GetUnformattedTypeString(uVar2_u32);
strcpy(gUnknown_202DE58,typeString);
sub_80522F4(pokemon,target,*gUnknown_80FDCC8);
}
}
}
void sub_806A1B0(struct DungeonEntity *param_1)
void sub_806A1B0(struct DungeonEntity *pokemon)
{
if ((EntityExists(param_1)) && (HasAbility(param_1,0x2a))) {
sub_8076090(param_1,param_1,0,1,0);
if ((EntityExists(pokemon)) && (HasAbility(pokemon, ABILITY_TRUANT))) {
sub_8076090(pokemon,pokemon,0,1,0);
}
}
void sub_806A1E8(struct DungeonEntity *param_1)
void sub_806A1E8(struct DungeonEntity *pokemon)
{
bool8 bVar3;
struct DungeonEntityData *iVar1;
bVar3 = FALSE;
if (EntityExists(param_1)) {
if (GetEntityType(param_1) == ENTITY_POKEMON) {
iVar1 = param_1->entityData;
if (EntityExists(pokemon)) {
if (GetEntityType(pokemon) == ENTITY_POKEMON) {
iVar1 = pokemon->entityData;
bVar3 = (!iVar1->isEnemy);
}
if (gUnknown_203B46C->unk1 == '\0') {
bVar3 = FALSE;
}
if (bVar3 && (sub_8045888(param_1) == '\0')) {
sub_806A2BC(param_1,1);
if (bVar3 && (sub_8045888(pokemon) == '\0')) {
sub_806A2BC(pokemon,1);
}
}
}
void sub_806A240(struct DungeonEntity *param_1, struct DungeonEntity *param_2)
void sub_806A240(struct DungeonEntity *pokemon, struct DungeonEntity *target)
{
bool8 bVar3;
struct DungeonEntityData *iVar1;
bool8 isEnemy;
struct DungeonEntityData *entityData;
bVar3 = FALSE;
if (EntityExists(param_1)){
if (GetEntityType(param_1) == ENTITY_POKEMON) {
iVar1 = param_1->entityData;
bVar3 = (!iVar1->isEnemy);
isEnemy = FALSE;
if (EntityExists(pokemon)){
if (GetEntityType(pokemon) == ENTITY_POKEMON) {
entityData = pokemon->entityData;
isEnemy = (!entityData->isEnemy);
}
if (bVar3 && (sub_8045888(param_1) == '\0')) {
sub_806A2BC(param_1,1);
if (isEnemy && (sub_8045888(pokemon) == '\0')) {
sub_806A2BC(pokemon,1);
return;
}
else if (GetEntityType(param_2) == ENTITY_POKEMON) {
iVar1 = param_2->entityData;
bVar3 = (!iVar1->isEnemy);
else if (GetEntityType(target) == ENTITY_POKEMON) {
entityData = target->entityData;
isEnemy = (!entityData->isEnemy);
}
if (bVar3 && (sub_8045888(param_2) == '\0')) {
sub_806A2BC(param_2,1);
if (isEnemy && (sub_8045888(target) == '\0')) {
sub_806A2BC(target,1);
}
}
}
void sub_806A2BC(struct DungeonEntity *param_1, u8 param_2)
void sub_806A2BC(struct DungeonEntity *pokemon, u8 param_2)
{
if ((EntityExists(param_1)) && (GetEntityType(param_1) == ENTITY_POKEMON) && (gDungeonGlobalData->leader != param_1)) {
if ((EntityExists(pokemon)) && (GetEntityType(pokemon) == ENTITY_POKEMON) && (gDungeonGlobalData->leader != pokemon)) {
if (param_2 != '\0') {
sub_804178C(1);
while (gDungeonGlobalData->unk12 < 0x3c) {
@@ -284,8 +284,8 @@ void sub_806A2BC(struct DungeonEntity *param_1, u8 param_2)
}
}
sub_803E708(4,0x44);
sub_803F508(param_1);
sub_804AC20(&param_1->posWorld);
sub_803F508(pokemon);
sub_804AC20(&pokemon->posWorld);
gDungeonGlobalData->unk12 = 0;
}
}

View File

@@ -145,6 +145,38 @@ extern void sub_808CBB0(void);
extern void sub_808CD44(void);
extern void sub_8097FF8(void);
extern u8 sub_8098100(u8);
extern void sub_8097FA8(void);
extern void sub_807E5E4(u32);
void sub_8084854(u8 *param_1)
{
if (gDungeonGlobalData->unk678 != 0) {
gDungeonGlobalData->unk3A0D = param_1[5];
}
else
{
if (sub_8098100(param_1[4]) != 0) {
gDungeonGlobalData->unk3A0D = param_1[5];
}
else
{
if (sub_8098100(param_1[2]) != 0) {
gDungeonGlobalData->unk3A0D = param_1[3];
}
else
{
gDungeonGlobalData->unk3A0D = param_1[1];
if (param_1[2] != 0x40) {
sub_8097FA8();
}
}
}
}
gDungeonGlobalData->unk675 = 1;
sub_807E5E4(0);
}
u32 sub_80848EC(void)
{
return 1;

View File

@@ -6,36 +6,15 @@
#include "sub_8095228.h"
#include "wonder_mail.h"
#include "constants/wonder_mail.h"
struct subStruct_203B490
{
// size: 0xC
u8 unk0;
u8 unk1;
u32 unk4;
u32 unk8;
};
struct unkStruct_203B490
{
// size: 0x330?
u8 fill0[0x190];
u8 unk190[0x28];
u8 unk1B8[0x78];
struct subStruct_203B490 unk230[16];
u8 unk2F0[0x38];
u8 unk328;
};
#include "dungeon.h"
#include "code_80958E8.h"
extern bool8 sub_809095C(u8);
extern s32 GetDungeonFloorCount(u8);
extern bool8 sub_809017C(u8 *);
extern bool8 sub_809017C(struct DungeonLocation *);
extern s16 GetBaseSpecies(s16);
extern bool8 IsInvalidItemReward(u8);
extern u8 sub_803C1D0(u8 *, u8);
extern u8 sub_803C1D0(struct DungeonLocation *, u8);
extern bool8 IsNotMoneyOrUsedTMItem(u8);
extern u8 xxx_bit_lut_lookup_8091E50(u8 ,u8 );
extern u32 GetMaxItemCount(u8);
@@ -82,7 +61,7 @@ void sub_8095900(void)
MemoryClear8(gUnknown_203B490->unk1B8, sizeof(gUnknown_203B490->unk1B8));
for(iVar2 = 0; iVar2 < 16; iVar2++)
{
gUnknown_203B490->unk230[iVar2].unk0 = 99;
gUnknown_203B490->unk230[iVar2].dungeon = 99;
gUnknown_203B490->unk230[iVar2].unk1 = 1;
gUnknown_203B490->unk230[iVar2].unk4 = 0;
gUnknown_203B490->unk230[iVar2].unk8 = 0;
@@ -111,17 +90,17 @@ bool8 ValidateWonderMail(struct WonderMail *data)
return FALSE;
else
{
if(data->missionType == WONDER_MAIL_MISSION_TYPE_DELIVER_ITEM && GetMaxItemCount(data->dungeon) == 0)
if(data->missionType == WONDER_MAIL_MISSION_TYPE_DELIVER_ITEM && GetMaxItemCount(data->dungeon.dungeonIndex) == 0)
return FALSE;
if(data->unk2 > 9)
return FALSE;
if(sub_809095C(data->dungeon))
if(sub_809095C(data->dungeon.dungeonIndex))
return FALSE;
if(data->floor >= GetDungeonFloorCount(data->dungeon))
if(data->dungeon.dungeonFloor >= GetDungeonFloorCount(data->dungeon.dungeonIndex))
return FALSE;
if(sub_809017C(&(data->dungeon)))
if(sub_809017C(&data->dungeon))
return FALSE;
if(data->clientSpecies == SPECIES_NONE)
@@ -153,7 +132,7 @@ bool8 ValidateWonderMail(struct WonderMail *data)
return FALSE;
// Item finding
if(data->missionType == WONDER_MAIL_MISSION_TYPE_FIND_ITEM && xxx_bit_lut_lookup_8091E50(data->dungeon, data->targetItem) == 0)
if(data->missionType == WONDER_MAIL_MISSION_TYPE_FIND_ITEM && xxx_bit_lut_lookup_8091E50(data->dungeon.dungeonIndex, data->targetItem) == 0)
return FALSE;
if(data->rewardType == BLANK_4 || data->rewardType == END_REWARDS || data->rewardType > END_REWARDS)
@@ -170,7 +149,7 @@ bool8 ValidateWonderMail(struct WonderMail *data)
{
if(GetFriendAreaUnlockCondition(data->friendAreaReward) != UNLOCK_WONDER_MAIL)
return FALSE;
if(sub_803C1D0(&(data->dungeon), data->missionType) == 0)
if(sub_803C1D0(&data->dungeon, data->missionType) == 0)
return FALSE;
}
return TRUE;

View File

@@ -2,42 +2,21 @@
#include "pokemon.h"
#include "wonder_mail.h"
extern void SaveDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*);
extern void RestoreDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*);
extern void sub_80015C0(u32, u32);
extern u32 sub_8001784(u32, u32, u16);
struct unkStruct_8097270
{
u8 unk0;
u8 unk1;
u8 unk2;
struct DungeonLocation unk4;
u32 unk8;
u16 unkC;
u16 unkE;
u8 unk10;
u8 unk11;
u8 unk12;
u8 unk13;
};
struct subStruct_203B490
{
// size: 0xC
struct DungeonLocation unk0;
struct DungeonLocation dungeon;
u32 unk4;
u32 unk8;
};
struct unkStruct_203B490
{
// size: 0x330?
struct unkStruct_8097270 unk0[4];
struct unkStruct_8097270 unk50[8];
struct unkStruct_8097270 unkF0[8];
struct WonderMail unk0[4];
struct WonderMail unk50[8];
struct WonderMail unkF0[8];
u8 unk190[0x28];
u8 unk1B8[0x78];
struct subStruct_203B490 unk230[16];
@@ -46,9 +25,15 @@ struct unkStruct_203B490
};
extern struct unkStruct_203B490 *gUnknown_203B490;
void sub_8097270(struct unkStruct_8094924 *a, struct unkStruct_8097270 *b);
void sub_80971EC(struct unkStruct_8094924 *a, struct unkStruct_8097270 *b);
void SaveWonderMail(struct unkStruct_8094924 *a, struct WonderMail *b);
void RestoreWonderMail(struct unkStruct_8094924 *a, struct WonderMail *b);
extern s32 sub_8096EB0(void);
extern void SaveDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*);
extern void RestoreDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*);
extern void sub_80015C0(u32, u32);
extern u32 sub_8001784(u32, u32, u16);
extern void sub_809674C();
extern void sub_800199C(u32, s32, u32, s32);
bool8 sub_8096F50(struct WonderMail *r0)
{
@@ -62,8 +47,8 @@ bool8 sub_8096F50(struct WonderMail *r0)
for(index = 0; index < 0x10; index++)
{
temp = &gUnknown_203B490->unk230[index];
if(temp->unk0.dungeonIndex == r0->dungeon)
if(temp->unk0.dungeonFloor == r0->floor)
if(temp->dungeon.dungeonIndex == r0->dungeon.dungeonIndex)
if(temp->dungeon.dungeonFloor == r0->dungeon.dungeonFloor)
if(temp->unk4 == r0->unk8)
if(temp->unk8 == temp2)
return TRUE;
@@ -80,15 +65,15 @@ u32 sub_8096FA0(u8 *r0, u32 size)
xxx_init_struct_8094924_restore_809485C(&backup, r0, size);
for(index = 0; index < 4; index++)
{
sub_80971EC(&backup, &gUnknown_203B490->unk0[index]);
RestoreWonderMail(&backup, &gUnknown_203B490->unk0[index]);
}
for(index = 0; index < 8; index++)
{
sub_80971EC(&backup, &gUnknown_203B490->unk50[index]);
RestoreWonderMail(&backup, &gUnknown_203B490->unk50[index]);
}
for(index = 0; index < 8; index++)
{
sub_80971EC(&backup, &gUnknown_203B490->unkF0[index]);
RestoreWonderMail(&backup, &gUnknown_203B490->unkF0[index]);
}
for(index = 0; index < 0x38; index++)
{
@@ -110,7 +95,7 @@ u32 sub_8096FA0(u8 *r0, u32 size)
{
RestoreIntegerBits(&backup, &gUnknown_203B490->unk230[index].unk8, 0x20);
RestoreIntegerBits(&backup, &gUnknown_203B490->unk230[index].unk4, 0x18);
RestoreDungeonLocation(&backup, &gUnknown_203B490->unk230[index].unk0);
RestoreDungeonLocation(&backup, &gUnknown_203B490->unk230[index].dungeon);
}
nullsub_102(&backup);
return backup.unk8;
@@ -125,15 +110,15 @@ u32 sub_80970D8(u8 *r0, u32 size)
xxx_init_struct_8094924_save_809486C(&backup, r0, size);
for(index = 0; index < 4; index++)
{
sub_8097270(&backup, &gUnknown_203B490->unk0[index]);
SaveWonderMail(&backup, &gUnknown_203B490->unk0[index]);
}
for(index = 0; index < 8; index++)
{
sub_8097270(&backup, &gUnknown_203B490->unk50[index]);
SaveWonderMail(&backup, &gUnknown_203B490->unk50[index]);
}
for(index = 0; index < 8; index++)
{
sub_8097270(&backup, &gUnknown_203B490->unkF0[index]);
SaveWonderMail(&backup, &gUnknown_203B490->unkF0[index]);
}
for(index = 0; index < 0x38; index++)
{
@@ -154,40 +139,40 @@ u32 sub_80970D8(u8 *r0, u32 size)
{
SaveIntegerBits(&backup, &gUnknown_203B490->unk230[index].unk8, 0x20);
SaveIntegerBits(&backup, &gUnknown_203B490->unk230[index].unk4, 0x18);
SaveDungeonLocation(&backup, &gUnknown_203B490->unk230[index].unk0);
SaveDungeonLocation(&backup, &gUnknown_203B490->unk230[index].dungeon);
}
nullsub_102(&backup);
return backup.unk8;
}
void sub_80971EC(struct unkStruct_8094924 *a, struct unkStruct_8097270 *b)
void RestoreWonderMail(struct unkStruct_8094924 *a, struct WonderMail *b)
{
RestoreIntegerBits(a, &b->unk0, 4);
RestoreIntegerBits(a, &b->unk1, 3);
RestoreIntegerBits(a, &b->mailType, 4);
RestoreIntegerBits(a, &b->missionType, 3);
RestoreIntegerBits(a, &b->unk2, 4);
RestoreIntegerBits(a, &b->unkC, 9);
RestoreIntegerBits(a, &b->unkE, 9);
RestoreIntegerBits(a, &b->unk10, 8);
RestoreIntegerBits(a, &b->unk11, 4);
RestoreIntegerBits(a, &b->unk12, 8);
RestoreIntegerBits(a, &b->unk13, 6);
RestoreIntegerBits(a, &b->clientSpecies, 9);
RestoreIntegerBits(a, &b->targetSpecies, 9);
RestoreIntegerBits(a, &b->targetItem, 8);
RestoreIntegerBits(a, &b->rewardType, 4);
RestoreIntegerBits(a, &b->itemReward, 8);
RestoreIntegerBits(a, &b->friendAreaReward, 6);
RestoreIntegerBits(a, &b->unk8, 0x18);
RestoreDungeonLocation(a, &b->unk4);
RestoreDungeonLocation(a, &b->dungeon);
}
void sub_8097270(struct unkStruct_8094924 *a, struct unkStruct_8097270 *b)
void SaveWonderMail(struct unkStruct_8094924 *a, struct WonderMail *b)
{
SaveIntegerBits(a, &b->unk0, 4);
SaveIntegerBits(a, &b->unk1, 3);
SaveIntegerBits(a, &b->mailType, 4);
SaveIntegerBits(a, &b->missionType, 3);
SaveIntegerBits(a, &b->unk2, 4);
SaveIntegerBits(a, &b->unkC, 9);
SaveIntegerBits(a, &b->unkE, 9);
SaveIntegerBits(a, &b->unk10, 8);
SaveIntegerBits(a, &b->unk11, 4);
SaveIntegerBits(a, &b->unk12, 8);
SaveIntegerBits(a, &b->unk13, 6);
SaveIntegerBits(a, &b->clientSpecies, 9);
SaveIntegerBits(a, &b->targetSpecies, 9);
SaveIntegerBits(a, &b->targetItem, 8);
SaveIntegerBits(a, &b->rewardType, 4);
SaveIntegerBits(a, &b->itemReward, 8);
SaveIntegerBits(a, &b->friendAreaReward, 6);
SaveIntegerBits(a, &b->unk8, 0x18);
SaveDungeonLocation(a, &b->unk4);
SaveDungeonLocation(a, &b->dungeon);
}
void sub_80972F4(void)
@@ -218,3 +203,43 @@ s32 sub_8097318(s16 param_1)
}
return iVar1;
}
void sub_809733C(short param_1,u32 param_2)
{
s32 uVar2;
u8 param_2_u8;
u16 uVar2_u16;
uVar2 = param_1;
param_2_u8 = param_2;
if (uVar2 != 0xd) {
uVar2_u16 = uVar2;
if ((((sub_8001784(0,0x2c,uVar2_u16) == 0) && (sub_800199C(0,0x2b,uVar2_u16,param_2_u8), param_2_u8 != '\0')))){
switch(uVar2)
{
case 0xE:
case 0xF:
case 0x1C:
sub_809674C();
break;
}
}
}
}
bool32 sub_8097384(s16 param_1)
{
bool32 iVar1;
if (param_1 == 0xd) {
iVar1 = FALSE;
}
else {
iVar1 = sub_8001784(0,0x2c,param_1 & 0xffff);
if (iVar1 != 0) {
iVar1 = TRUE;
}
}
return iVar1;
}

View File

@@ -24,9 +24,11 @@ extern const char gUnknown_8115FE8;
struct unkStruct_811BAF4
{
u16 unk0;
s16 unk0;
s16 unk2;
u8 fill4[8];
s16 unk4;
s16 unk6;
u8 *text;
};
extern struct unkStruct_811BAF4 gUnknown_811BAF4[10];

View File

@@ -13,6 +13,23 @@ extern s16 gUnknown_8116F9A[];
extern s16 gUnknown_8116F24[];
extern const u8 *gUnknown_8117000[];
extern void sub_809AC18(s32, s32);
extern void sub_809ABB4(s32, s32);
void sub_80A2584(s16 r0, s16 r1)
{
s32 iVar2 = r1;
s32 iVar1 = r0;
sub_809ABB4(iVar1, iVar2);
}
void sub_80A2598(s16 r0, s16 r1)
{
s32 iVar2 = r1;
s32 iVar1 = r0;
sub_809AC18(iVar1, iVar2);
}
u32 sub_80A25AC(u16 param_1)
{
if (sub_8098F88() != 0) {

View File

@@ -48,7 +48,7 @@ void sub_80A7784(void)
}
}
u8 sub_80A77A0(s16 r0, u32 r1)
u8 sub_80A77A0(s16 r0)
{
s32 temp;
s32 temp2;

58
src/dungeon_2_1.c Normal file
View File

@@ -0,0 +1,58 @@
#include "global.h"
#include "dungeon.h"
#include "constants/dungeon.h"
#include "code_800D090.h"
#include "pokemon.h"
#include "random.h"
#include "code_8092334.h"
extern u8 gUnknown_810A350[];
extern u8 gDungeonFloorCount[];
extern u8 *gUnknown_8108084[];
s32 sub_8091E94(s32 a1, s32 a2, s32 a3); // items.c
u32 sub_80908D8(struct DungeonLocation *dungeon)
{
if ((dungeon->dungeonIndex < DUNGEON_OUT_ON_RESCUE) && (dungeon->dungeonFloor < gDungeonFloorCount[dungeon->dungeonIndex])) {
return gUnknown_8108084[dungeon->dungeonIndex][dungeon->dungeonFloor];
}
else {
return 1;
}
}
u8 sub_8090910(struct DungeonLocation *dungeon, u32 param_2)
{
u32 rand1;
u32 rand2;
rand1 = RandomCapped(9999);
rand2 = RandomCapped(9999);
if ((dungeon->dungeonIndex < DUNGEON_OUT_ON_RESCUE) && (dungeon->dungeonFloor < gDungeonFloorCount[dungeon->dungeonIndex])) {
return sub_8091E94(param_2, rand1, rand2);
}
else {
return 0x46;
}
}
bool8 sub_809095C(u8 dungeon)
{
s32 counter;
if (dungeon >= DUNGEON_OUT_ON_RESCUE) {
return TRUE;
}
else
{
counter = 0;
if (gUnknown_810A350[0] != DUNGEON_OUT_ON_RESCUE) {
for(; gUnknown_810A350[counter] != DUNGEON_OUT_ON_RESCUE; counter++)
{
if (gUnknown_810A350[counter] == dungeon) return TRUE;
}
}
return FALSE;
}
}

View File

@@ -46,7 +46,7 @@ void RunDungeon(u8 param_1)
if (!sub_8044B28()) {
cVar2 = xxx_dungeon_80442D0(param_1);
if (!sub_8044B28()) {
if (cVar2 != '\0') {
if (cVar2 != 0) {
sub_807E378();
if (sub_8044B28()) {
return;
@@ -59,7 +59,7 @@ void RunDungeon(u8 param_1)
if (!sub_8044B28()) {
sub_8044AB4();
gDungeonGlobalData->speedTurnCounter++;
if ( (s16)gDungeonGlobalData->speedTurnCounter == 0x18) {
if (gDungeonGlobalData->speedTurnCounter == 24) {
gDungeonGlobalData->speedTurnCounter = 0;
}
}

View File

@@ -2,9 +2,15 @@
#include "dungeon_movement_1.h"
#include "constants/item.h"
#include "constants/iq_skill.h"
#include "constants/status.h"
#include "dungeon_engine.h"
#include "dungeon_items.h"
#include "dungeon_global_data.h"
#include "dungeon_movement.h"
#include "dungeon_map_access.h"
#include "dungeon_pokemon_attributes.h"
#include "dungeon_util.h"
#include "map.h"
bool8 CanCrossWalls(struct DungeonEntity *pokemon)
@@ -25,3 +31,43 @@ bool8 CanCrossWalls(struct DungeonEntity *pokemon)
}
return FALSE;
}
bool8 sub_807049C(struct DungeonEntity *pokemon, struct Position *pos)
{
s32 crossableTerrain;
struct MapTile *tile;
u16 tileFlags;
struct DungeonEntityData *entityData;
entityData = pokemon->entityData;
tile = GetMapTile_1(pos->x, pos->y);
if ((pos->x >= 0) && (pos->y >= 0) && (DUNGEON_MAX_SIZE_X > pos->x) &&
(DUNGEON_MAX_SIZE_Y > pos->y && ((tile->tileType & TILE_TYPE_MAP_EDGE) == 0)) &&
(tile->pokemon == NULL || (GetEntityType(tile->pokemon) == ENTITY_POKEMON))) {
if (IsFixedDungeon() || (entityData->transformStatus != TRANSFORM_STATUS_MOBILE && !HasItem(pokemon, ITEM_ID_MOBILE_SCARF))) {
crossableTerrain = GetCrossableTerrain(entityData->entityID);
tileFlags = tile->tileType & (TILE_TYPE_FLOOR | TILE_TYPE_LIQUID);
if (HasIQSkill(pokemon, IQ_SKILL_ALL_TERRAIN_HIKER)) {
crossableTerrain = CROSSABLE_TERRAIN_CREVICE;
}
if (HasIQSkill(pokemon, IQ_SKILL_SUPER_MOBILE)) {
crossableTerrain = CROSSABLE_TERRAIN_WALL;
}
switch(crossableTerrain)
{
case CROSSABLE_TERRAIN_LIQUID:
if(tileFlags == TILE_TYPE_LIQUID) return FALSE;
case CROSSABLE_TERRAIN_REGULAR:
if(tileFlags == TILE_TYPE_FLOOR) return FALSE;
break;
case CROSSABLE_TERRAIN_WALL:
default:
return FALSE;
case CROSSABLE_TERRAIN_CREVICE:
if(tileFlags != 0) return FALSE;
}
}
else return FALSE;
}
return TRUE;
}

View File

@@ -98,3 +98,112 @@ returnFalse:
}
return TRUE;
}
void sub_80833E8(struct Position *param_1, s32 *param_2)
{
struct MapTile *tile;
struct MapRoom *room;
u32 visibility;
u32 roomIndex;
tile = GetMapTile_1(param_1->x, param_1->y);
visibility = gDungeonGlobalData->visibility;
if (visibility == 0) {
visibility = 2;
}
roomIndex = tile->roomIndex;
if (roomIndex == CORRIDOR_ROOM_INDEX) {
param_2[0] = param_1->x - visibility;
param_2[2] = param_1->x + visibility + 1;
param_2[1] = param_1->y - visibility;
param_2[3] = param_1->y + visibility + 1;
}
else {
room = &gDungeonGlobalData->roomData[roomIndex];
param_2[0] = room->startX - 1;
param_2[2] = room->endX + 2;
param_2[1] = room->startY - 1;
param_2[3] = room->endY + 2;
}
}
bool8 IsTargetTwoTilesAway(struct Position *pos1, struct Position *pos2)
{
s32 counter;
struct MapTile *tile;
s32 diff;
s32 yCoord;
s32 xCoord;
s32 xDiff;
s32 yDiff;
s32 yCoord_1;
s32 xCoord_1;
diff = pos1->x - pos2->x;
if (diff < 0) {
diff = -diff;
}
if (diff < 2) {
diff = pos1->y - pos2->y;
if (diff < 0) {
diff = -diff;
}
if (1 >= diff) return TRUE;
}
xDiff = pos1->x - pos2->x;
if (xDiff < 0) {
xDiff = -xDiff;
}
yDiff = pos1->y - pos2->y;
if (yDiff < 0) {
yDiff = -yDiff;
}
if (yDiff < xDiff) {
yDiff = xDiff;
}
if (yDiff == 2) {
xCoord = pos1->x;
yCoord = pos1->y;
for(counter = 0; counter < 2; counter++){
if (xCoord < pos2->x) {
xCoord = xCoord + 1;
}
if (xCoord > pos2->x) {
xCoord = xCoord - 1;
}
if (yCoord < pos2->y) {
yCoord = yCoord + 1;
}
if (yCoord > pos2->y) {
yCoord = yCoord -1;
}
tile = GetMapTile_1(xCoord,yCoord);
if ((tile->tileType & (TILE_TYPE_FLOOR | TILE_TYPE_LIQUID)) == 0) return FALSE;
}
xCoord_1 = pos2->x;
yCoord_1 = pos2->y;
for(counter = 0; counter < 2; counter++)
{
if (xCoord_1 < pos1->x) {
xCoord_1 = xCoord_1 + 1;
}
if (xCoord_1 > pos1->x) {
xCoord_1 = xCoord_1 - 1;
}
if (yCoord_1 < pos1->y) {
yCoord_1 = yCoord_1 + 1;
}
if (yCoord_1 > pos1->y) {
yCoord_1 = yCoord_1 - 1;
}
tile = GetMapTile_1(xCoord_1, yCoord_1);
if ((tile->tileType & (TILE_TYPE_FLOOR | TILE_TYPE_LIQUID)) == 0) return FALSE;
}
return TRUE;
}
return FALSE;
}

View File

@@ -1,18 +1,13 @@
#include "global.h"
#include "memory.h"
#include "debug.h"
#include "ground_script.h"
struct unkStruct_3001B6C
{
// size: 0x110
u8 fill0[0xE4];
u16 unkE4;
};
extern struct GroundScript_ExecutePP_1 *gUnknown_3001B6C;
extern struct unkStruct_3001B6C *gUnknown_3001B6C;
extern u8 gUnknown_811736C[];
extern struct DebugLocation gUnknown_8117538[];
extern u8 gUnknown_811736C[];
extern u8 *gUnknown_3001B70;
extern void sub_809D600(void *, u8 *, u32, u32, u32);

View File

@@ -1,8 +1,107 @@
#include "global.h"
#include "debug.h"
#include "ground_script.h"
extern void GroundMap_GetStationScript(u32, s16, u32, u32);
extern struct GroundScript_ExecutePP_1 *gUnknown_3001B6C;
void sub_80A4BE8(u32 r0, s16 r1)
struct unkStruct_811BAF4
{
GroundMap_GetStationScript(r0, r1, 0, 0);
}
s16 unk0;
s16 unk2;
s16 unk4;
s16 unk6;
u8 *text;
};
extern struct unkStruct_811BAF4 gUnknown_811BAF4[10];
extern struct DebugLocation gUnknown_8117698;
extern struct DebugLocation gUnknown_8117644;
extern struct DebugLocation gUnknown_81175E0;
extern u8 gUnknown_8117594[];
extern u8 gUnknown_81175EC[];
extern u8 gUnknown_8117650[];
extern void GroundMap_GetStationScript(struct GroundScript_ExecutePP_3 *, s16, u32, u32);
bool8 GroundScript_ExecutePP(struct GroundScript_ExecutePP_1 *param_1, s32 *param_2, struct GroundScript_ExecutePP_3 *param_3, struct DebugLocation *unused);
extern u8 sub_809D678(void *);
extern void sub_809D710(u32,struct GroundScript_ExecutePP_3 *, s32);
extern u8 sub_809D968(void *, s32);
void sub_80A4BE8(struct GroundScript_ExecutePP_3 *script, s16 r1)
{
GroundMap_GetStationScript(script, r1, 0, 0);
}
void GroundMap_ExecuteEvent(s16 param_1, u32 param_2)
{
struct GroundScript_ExecutePP_3 script;
s32 iVar1;
u8 iVar2;
iVar1 = param_1;
iVar2 = param_2;
Log(0,gUnknown_8117594,iVar1,iVar2); // "GroundMap ExecuteEvent %3d %d
sub_809D710(0,&script,iVar1);
if (iVar2 != 0) {
script.scriptType = 5;
}
GroundScript_ExecutePP(gUnknown_3001B6C,0,&script,&gUnknown_81175E0);
}
void GroundMap_ExecuteStation(s16 param_1, s16 param_2, s8 param_3, u32 param_4)
{
struct GroundScript_ExecutePP_3 script;
s32 iVar1;
s32 iVar2;
s32 iVar3;
u8 iVar4;
iVar1 = param_1;
iVar2 = param_2;
iVar3 = param_3;
iVar4 = param_4;
Log(0,gUnknown_81175EC,iVar1,iVar2,iVar3,iVar4); // GroundMap ExecuteStation %3d %3d %3d %d
GroundMap_GetStationScript(&script,iVar1,iVar2,iVar3);
if (iVar4 != 0) {
script.scriptType = 5;
}
GroundScript_ExecutePP(gUnknown_3001B6C,0,&script,&gUnknown_8117644);
}
void GroundMap_ExecuteEnter(s16 param_1)
{
struct GroundScript_ExecutePP_3 script;
s32 iVar1;
iVar1 = param_1;
Log(0,gUnknown_8117650,iVar1); // GroundMap ExecuteEnter %3d
sub_80A4BE8(&script, iVar1);
script.scriptType = 2;
script.unk6 = 0;
script.unk8 = 0;
GroundScript_ExecutePP(gUnknown_3001B6C,0,&script,&gUnknown_8117698);
}
u8 sub_80A4D14(void)
{
return sub_809D678(gUnknown_3001B6C);
}
u8 sub_80A4D2C(s16 param_1)
{
s32 iVar1 = param_1;
return sub_809D968(gUnknown_3001B6C,iVar1);
}
bool8 sub_80A4D48(s16 index)
{
if (index == -1) return TRUE;
else if(gUnknown_811BAF4[index].unk0 == 5) return FALSE;
else if(gUnknown_811BAF4[index].unk0 != 8) return TRUE;
else return FALSE;
}

View File

@@ -1,63 +1,30 @@
#include "global.h"
#include "debug.h"
#include "ground_script.h"
extern u8 gUnknown_2039A36;
extern u8 gUnknown_2039A38[];
extern u32 gUnknown_2039B48[];
extern u8 gUnknown_2039AC0[];
extern u32 gUnknown_8116588;
extern u32 gUnknown_8116538;
extern u32 gUnknown_8116560;
extern u8 gUnknown_8116594[];
extern u8 gUnknown_8116544[];
extern u8 gUnknown_811656C[];
extern struct DebugLocation gUnknown_81165C8;
struct GroundScript_ExecutePP_3
{
// size: 0xC
u32 unk0;
s16 scriptType;
s16 unk6;
u8 unk8;
};
struct GroundScript_ExecutePP_1_sub
{
// size: 0x60
/* 0x0 */ s16 scriptType;
/* 0x2 */ s16 unk2;
/* 0x4 */ u32 unk4;
/* 0x8 */ u32 unk8;
/* 0xC */ u16 unkC;
/* 0xE */ u8 unkE;
/* 0xF */ u8 fillF;
/* 0x10 */ u32 unk10;
/* 0x14 */ u32 unk14;
/* 0x18 */ u8 fill3C[0x26 - 0x18];
/* 0x26 */ u32 unk26;
u8 fill50[0x60 - 0x2A];
} __attribute__((packed));
typedef void (*Callback)(u32, void *);
struct GroundScript_ExecutePP_1_sub2
{
Callback callbacks[10]; // IDK the size..
};
struct GroundScript_ExecutePP_1
{
struct GroundScript_ExecutePP_1_sub2 *unk0;
u32 unk4;
u32 fill8;
u32 unkC;
u32 fill10;
u8 fill18[0x24 - 0x14];
struct GroundScript_ExecutePP_1_sub unk24;
struct GroundScript_ExecutePP_1_sub unk84;
};
extern u8 sub_809D770(struct GroundScript_ExecutePP_1 *param_1, struct DebugLocation *);
extern void sub_809D520(void *);
extern void sub_809D568(void *);
extern u8 sub_80AC378(void);
extern u8 sub_80AD290(void);
extern u8 sub_80A8B74(void);
extern void sub_809D6E4(struct GroundScript_ExecutePP_1 *, struct GroundScript_ExecutePP_3 *, s32);
extern u8 sub_809A750(void);
extern u32 sub_80A2460(struct GroundScript_ExecutePP_1 *param_1, u32);
void FatalError(u32 *, const char *, ...) __attribute__((noreturn));
bool8 GroundScript_ExecutePP(struct GroundScript_ExecutePP_1 *param_1, s32 *param_2, struct GroundScript_ExecutePP_3 *param_3, struct DebugLocation *unused)
@@ -69,7 +36,7 @@ bool8 GroundScript_ExecutePP(struct GroundScript_ExecutePP_1 *param_1, s32 *para
case 2:
case 3:
if (param_1->unk24.scriptType == 1) {
memcpy(&param_1->unk84, &param_1->unk24, 0x60);
memcpy(&param_1->unk84, &param_1->unk24, sizeof(struct GroundScript_ExecutePP_1_sub));
break;
}
if (param_1->unk24.scriptType == 5) {
@@ -85,11 +52,11 @@ bool8 GroundScript_ExecutePP(struct GroundScript_ExecutePP_1 *param_1, s32 *para
// "execute script type error C"
FatalError(&gUnknown_8116560, gUnknown_811656C);
}
memcpy(&param_1->unk84, &param_1->unk24, 0x60);
memcpy(&param_1->unk84, &param_1->unk24, sizeof(struct GroundScript_ExecutePP_1_sub));
break;
case 0:
if (param_1->unk24.scriptType != 1) goto _0809D84A;
memcpy(&param_1->unk84, &param_1->unk24, 0x60);
memcpy(&param_1->unk84, &param_1->unk24, sizeof(struct GroundScript_ExecutePP_1_sub));
break;
case 1:
_0809D84A:
@@ -128,3 +95,97 @@ bool8 sub_809D8C0(struct GroundScript_ExecutePP_1 *param_1, s32 *param_2, s16 pa
sub_809D6E4(param_1,&auStack28,param_3);
return GroundScript_ExecutePP(param_1, param_2, &auStack28, debug);
}
u8 sub_809D8EC(struct GroundScript_ExecutePP_1 *param_1, s16 param_2)
{
s32 param_2_s32;
param_2_s32 = param_2;
if ((param_2 == 0) && (sub_809A750() == 0)) {
param_1->unk24.unk4 = sub_80A2460(param_1,0);
return 0;
}
else {
param_1->unk24.unk22 = param_2_s32;
param_1->unk24.unk2 = 2;
gUnknown_2039A36 = 1;
return 1;
}
}
u8 sub_809D92C(struct GroundScript_ExecutePP_1 *r0)
{
return sub_809D770(r0, &gUnknown_81165C8);
}
u8 sub_809D940(void)
{
u8 ret;
ret = sub_80A8B74();
ret |= sub_80AC378();
ret |= sub_80AD290();
return ret;
}
bool8 sub_809D968(struct GroundScript_ExecutePP_1 * param_1, s16 param_2)
{
s16 sVar1;
s16 sVar2;
bool8 ret;
s32 param_2_s16 = param_2;
ret = FALSE;
sVar1 = param_1->unk24.unk22;
if ((sVar1 != -1) && (sVar1 == param_2_s16)) {
param_1->unk24.unk22 = -1;
ret = TRUE;
}
sVar2 = param_1->unk84.unk22;
if ((sVar2 != -1) && (sVar2 == param_2_s16)) {
param_1->unk84.unk22 = -1;
ret = TRUE;
}
return ret;
}
void sub_809D9B8(s16 index)
{
s32 index_s16 = index;
gUnknown_2039A38[index_s16] = 1;
gUnknown_2039B48[index_s16] = 0;
gUnknown_2039A36 = 1;
}
void sub_809D9E0(s16 index, s32 r1)
{
s32 index_s16 = index;
gUnknown_2039A38[index_s16] = 1;
gUnknown_2039B48[index_s16] = r1;
gUnknown_2039A36 = 1;
}
bool8 sub_809DA08(struct GroundScript_ExecutePP_1 *param_1, s16 index, u32 param_3)
{
s32 index_s32;
index_s32 = index;
gUnknown_2039B48[index_s32] = param_3;
if (index_s32 == 0) {
if (sub_809A750() == 0) {
return FALSE;
}
param_1->unk24.unk22 = index_s32;
}
else {
param_1->unk24.unk22 = index_s32 | 0x80;
gUnknown_2039A38[index_s32] = 1;
gUnknown_2039AC0[index_s32] = 1;
}
param_1->unk24.unk2 = 2;
gUnknown_2039A36 = 1;
return TRUE;
}

View File

@@ -635,11 +635,11 @@ void DisplayMissionObjectives(void)
for(jobSlotIdx = 0; jobSlotIdx < MAX_ACCEPTED_JOBS; jobSlotIdx++)
{
jobInfo = GetJobSlotInfo(jobSlotIdx);
if ((((jobInfo->dungeon == gUnknown_203B330->dungeonIndex) && (jobInfo->mailType != 0)
if ((((jobInfo->dungeon.dungeonIndex == gUnknown_203B330->dungeonIndex) && (jobInfo->mailType != 0)
) && (jobInfo->mailType != 5)) && (jobInfo->mailType != 7)) {
sub_803B6B0(10,yCoord,3,gUnknown_203B330->unk10);
if (jobInfo->missionType != WONDER_MAIL_MISSION_TYPE_FIND_ITEM) {
sprintf_2(auStack144,gUnknown_80E1F3C,jobInfo->floor);
sprintf_2(auStack144,gUnknown_80E1F3C,jobInfo->dungeon.dungeonFloor);
xxx_call_draw_string(21,yCoord,auStack144,gUnknown_203B330->unk10,0);
}
switch(jobInfo->missionType)

View File

@@ -1,9 +1,11 @@
#include "global.h"
#include "status.h"
#include "constants/status.h"
#include "constants/ability.h"
#include "constants/status.h"
#include "constants/type.h"
#include "dungeon_pokemon_attributes.h"
#include "dungeon_ai_targeting.h"
#include "dungeon_global_data.h"
#include "dungeon_map_access.h"
#include "dungeon_util.h"
#include "dungeon_items.h"
@@ -56,24 +58,52 @@ extern u8 *gUnknown_80FD500[];
extern s16 gUnknown_80F4ECC[];
extern u8 *gUnknown_80FB960[];
extern u8 *gUnknown_80FB940[];
extern u8 *gUnknown_80FB204[];
extern u8 *gUnknown_80FB240[];
extern u8 *gUnknown_80FB1E0[];
extern u8 *gUnknown_80FB1C4[];
extern u8 *gUnknown_80FB21C[];
extern u8 *gUnknown_80FAEA0[];
extern u8 *gUnknown_80FAEF0[];
extern u8 *gUnknown_80FAF3C[];
extern u8 *gUnknown_80FAEC8[];
extern u8 *gUnknown_80FAF1C[];
extern u8 *gUnknown_80FAFAC[];
extern u8 *gUnknown_80FAFD0[];
extern u8 *gPtrCantLeechSeedSelfMessage[];
extern u8 *gPtrCantLeechSeedMonMessage[];
extern u8 *gUnknown_80FAA8C[];
extern u8 *gUnknown_80FAE58[];
extern u8 *gUnknown_80FAE7C[];
extern s16 gUnknown_80F4EB0[];
extern s32 gUnknown_202DE30[10];
extern u8 sub_8043D10(void);
extern void nullsub_75(struct DungeonEntity *);
extern void nullsub_76(struct DungeonEntity *);
extern void nullsub_77(struct DungeonEntity *);
extern void nullsub_78(struct DungeonEntity *);
extern void sub_803F580(u32);
extern void sub_8040A84(void);
extern void sub_8041CA8(struct DungeonEntity *);
extern void sub_8041C94(struct DungeonEntity *);
extern u8 sub_8045888(struct DungeonEntity *r0);
extern void sub_803ED30(s32, struct DungeonEntity *r0, u8, s32);
extern void sub_8041BF8(struct DungeonEntity *);
extern void sub_8041BE8(struct DungeonEntity *);
extern void sub_8041CCC(struct DungeonEntity *);
extern void sub_8041CB8(struct DungeonEntity *r0);
extern void sub_8041C1C(struct DungeonEntity *r0);
extern s32 GetMovementSpeed(struct DungeonEntity *);
extern void sub_8042060(struct DungeonEntity *, s32);
extern bool8 sub_8071728(struct DungeonEntity * param_1, struct DungeonEntity * param_2, u8 param_3);
extern void sub_8041FB4(struct DungeonEntity *r0, u32 r1);
extern void sub_8041FD8(struct DungeonEntity *r0, u32 r1);
extern void sub_80522F4(struct DungeonEntity *r1, struct DungeonEntity *r2, u8 *);
extern s32 sub_8009DA4(s32, s32);
extern void sub_804201C(struct DungeonEntity *r0, u32 r1);
extern void sub_8041FFC(struct DungeonEntity *r0, u32 r1);
extern void SetMessageArgument(char[], struct DungeonEntity*, u32);
extern void SetMessageArgument_2(char[], struct DungeonEntityData*, u32);
extern void sub_8041C58(struct DungeonEntity *r0);
@@ -523,14 +553,14 @@ void sub_8077AE4(struct DungeonEntity * pokemon, struct DungeonEntity * target,
void sub_8077BB4(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 displayMessage)
{
struct DungeonEntityData *iVar3;
struct DungeonEntityData *entityData;
if ((EntityExists(target)) && (!HasSafeguardStatus(pokemon,target,displayMessage))) {
iVar3 = target->entityData;
entityData = target->entityData;
SetMessageArgument(gAvailablePokemonNames,target,0);
if (iVar3->volatileStatus != VOLATILE_STATUS_COWERING) {
iVar3->volatileStatus = VOLATILE_STATUS_COWERING;
iVar3->volatileStatusTurnsLeft = CalculateStatusTurns(target,gUnknown_80F4ECC,1) + 1;
if (entityData->volatileStatus != VOLATILE_STATUS_COWERING) {
entityData->volatileStatus = VOLATILE_STATUS_COWERING;
entityData->volatileStatusTurnsLeft = CalculateStatusTurns(target,gUnknown_80F4ECC,1) + 1;
sub_8041BF8(target);
sub_80522F4(pokemon,target,*gUnknown_80FB940);
}
@@ -540,3 +570,226 @@ void sub_8077BB4(struct DungeonEntity * pokemon, struct DungeonEntity * target,
DungeonEntityUpdateStatusSprites(target);
}
}
void HealTargetHP(struct DungeonEntity *pokemon, struct DungeonEntity *target, s32 param_3, s32 param_4, u32 displayMessage)
{
struct DungeonEntityData *entityData;
s32 HP;
s32 maxHP;
s32 r8;
u8 displayMessage_u8;
displayMessage_u8 = displayMessage;
if (!EntityExists(target)) {
return;
}
entityData = target->entityData;
maxHP = entityData->maxHP;
HP = entityData->HP;
if (((entityData->HP == entityData->maxHP) && (0 < param_4)) || (param_3 == 0)) {
entityData->maxHP += param_4;
entityData->HP += param_4;
if (entityData->maxHP > 999) {
entityData->maxHP = 999;
}
if (entityData->HP > entityData->maxHP) {
entityData->HP = entityData->maxHP;
}
if (entityData->HP == entityData->maxHP) {
HP = entityData->HP;
}
sub_8041C94(target);
}
else {
entityData->HP += param_3;
if (entityData->HP > entityData->maxHP) {
entityData->HP = entityData->maxHP;
}
sub_8041CA8(target);
}
maxHP = entityData->maxHP - maxHP;
HP = entityData->HP - HP;
DungeonEntityUpdateStatusSprites(target);
gUnknown_202DE30[0] = HP;
gUnknown_202DE30[1] = maxHP;
SetMessageArgument(gAvailablePokemonNames,target,0);
if ((HP == 0) && (maxHP == 0)) {
if (displayMessage_u8)
sub_80522F4(pokemon,target,*gUnknown_80FB204); // $m0's HP remained unchanged
}
else if ((param_4 == 0) && (HP == 0))
{
if (displayMessage_u8)
sub_80522F4(pokemon,target,*gUnknown_80FB21C); // $m0 has full HP
}
else
{
r8 = 0;
if (maxHP != 0) {
if (sub_8045888(target) != 0) {
r8 = maxHP;
}
sub_80522F4(pokemon,target,*gUnknown_80FB240); // m0$'s max HP rose by $d1
}
if (HP != 0) {
if (sub_8045888(target) != 0) {
r8 = HP;
}
if (param_3 != 0) {
if (entityData->maxHP == entityData->HP) {
sub_80522F4(pokemon,target,*gUnknown_80FB1E0); // $m0 was fully healed
}
else {
sub_80522F4(pokemon,target,*gUnknown_80FB1C4); // $m0 recovered $d0 HP
}
}
}
if (r8)
sub_803ED30(r8,target,1,-1);
}
}
void HandleScannerOrb(struct DungeonEntity* pokemon, struct DungeonEntity* target)
{
if (EntityExists(target)) {
if (target->entityData->scanningStatus) {
sub_80522F4(pokemon,target,*gUnknown_80FAEF0); // Item locations are already known
}
else
{
target->entityData->scanningStatus = TRUE;
nullsub_75(target);
SetMessageArgument(gAvailablePokemonNames, target, 0);
sub_80522F4(pokemon,target,*gUnknown_80FAEA0); // Item locations became evident
sub_803F580(0);
sub_8040A84();
DungeonEntityUpdateStatusSprites(target);
}
}
}
void HandleStairsOrb(struct DungeonEntity* pokemon, struct DungeonEntity* target)
{
if (EntityExists(target)) {
if(sub_8043D10())
{
sub_80522F4(pokemon,target,*gUnknown_80FAF3C);
}
else
{
if (target->entityData->stairSpotterStatus) {
sub_80522F4(pokemon,target,*gUnknown_80FAF1C);
}
else
{
target->entityData->stairSpotterStatus = TRUE;
nullsub_76(target);
SetMessageArgument(gAvailablePokemonNames,target,0);
sub_80522F4(pokemon,target,*gUnknown_80FAEC8);
sub_803F580(0);
sub_8040A84();
DungeonEntityUpdateStatusSprites(target);
}
}
}
}
void HandleRadarOrb(struct DungeonEntity* pokemon, struct DungeonEntity* target)
{
if (EntityExists(target)) {
if (target->entityData->radarStatus != 0) {
sub_80522F4(pokemon,target,*gUnknown_80FAFD0);
}
else
{
target->entityData->radarStatus = TRUE;
nullsub_77(target);
SetMessageArgument(gAvailablePokemonNames,target,0);
sub_80522F4(pokemon,target,*gUnknown_80FAFAC);
sub_803F580(0);
sub_8040A84();
DungeonEntityUpdateStatusSprites(target);
}
}
}
void HandleLeechSeed(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 displayMessage)
{
struct DungeonEntityData *entityData;
struct DungeonEntityData *entityData2;
s32 index;
if ((EntityExists(target)) && (GetEntityType(pokemon) == ENTITY_POKEMON)) {
entityData = target->entityData;
if (pokemon == target) {
pokemon = target;
if (displayMessage)
sub_80522F4(pokemon,target,*gPtrCantLeechSeedSelfMessage);
}
else {
if (HasSafeguardStatus(pokemon,target,displayMessage)) {
return;
}
SetMessageArgument(gAvailablePokemonNames,target,0);
if (HasType(target, TYPE_GRASS)) {
if (displayMessage)
sub_80522F4(pokemon,target,*gPtrCantLeechSeedMonMessage);
}
else
{
switch(entityData->linkedStatus)
{
case LINKED_STATUS_DESTINY_BOND:
sub_80522F4(pokemon,target,*gUnknown_80FAA8C);
default:
entityData->linkedStatus = LINKED_STATUS_LEECH_SEED;
entityData->linkedStatusTurnsLeft = CalculateStatusTurns(target, gUnknown_80F4EB0, TRUE) + 1;
entityData->linkedStatusDamageTimer = 0;
nullsub_78(target);
entityData->unkD8 = 0xff;
break;
case LINKED_STATUS_LEECH_SEED:
sub_80522F4(pokemon,target,*gUnknown_80FAE7C);
return;
}
for(index = 0; index < DUNGEON_MAX_POKEMON; index++)
{
if (pokemon == gDungeonGlobalData->allPokemon[index]) {
entityData->unkD8 = index;
entityData2 = pokemon->entityData;
entityData->unkD4 = entityData2->unk98;
}
}
sub_80522F4(pokemon,target,*gUnknown_80FAE58);
DungeonEntityUpdateStatusSprites(target);
}
}
}
}
void sub_8078084(struct DungeonEntity * pokemon)
{
struct DungeonEntityData *entityData;
struct DungeonEntityData *entityData2;
struct DungeonEntity *target;
s32 index;
entityData = pokemon->entityData;
for(index = 0; index < DUNGEON_MAX_POKEMON; index++)
{
target = gDungeonGlobalData->allPokemon[index];
if (EntityExists(target)) {
entityData2 = target->entityData;
if((u8)(entityData2->linkedStatus - 1) <= 1)
{
if(entityData2->unkD4 == entityData->unk98)
{
entityData2->linkedStatus = LINKED_STATUS_NONE;
DungeonEntityUpdateStatusSprites(target);
}
}
}
}
}

View File

@@ -32,7 +32,6 @@
extern void sub_807F43C(struct DungeonEntity *, struct DungeonEntity *);
extern void sub_8078F50(struct DungeonEntity *, struct DungeonEntity *);
extern void sub_8077E4C(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);
@@ -64,8 +63,6 @@ extern void sub_807DA14(struct DungeonEntity *, struct DungeonEntity *, s32);
extern s16 sub_803D970(u32);
extern u8 sub_806AA0C(s32, u32);
extern void sub_806BB6C(struct DungeonEntity *, s32);
extern void sub_8077DDC(struct DungeonEntity *, struct DungeonEntity *);
extern void sub_8077ED0(struct DungeonEntity *, struct DungeonEntity *);
extern void sub_8075C58(struct DungeonEntity *, struct DungeonEntity *, s32, s32);
extern void sub_807E254(struct DungeonEntity *, struct DungeonEntity *, u32);
extern bool8 sub_805727C(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 chance);
@@ -78,9 +75,7 @@ extern u8 sub_8057308(struct DungeonEntity *, u32);
extern void sub_8076F80(struct DungeonEntity *, struct DungeonEntity *, u32, u32, u32, u32);
extern void sub_8077084(struct DungeonEntity *, struct DungeonEntity *, u32, u32);
extern void sub_8078678(struct DungeonEntity *, struct DungeonEntity *);
extern void HealTargetHP(struct DungeonEntity *pokemon, struct DungeonEntity *r1, s32, s16, u32);
extern void sub_806F324(struct DungeonEntity *, s32, u32, u32);
extern void sub_8077F40(struct DungeonEntity *, struct DungeonEntity *, u32);
extern void sub_8077160(struct DungeonEntity *, struct DungeonEntity *, u32, u32);
extern bool8 sub_805755C(struct DungeonEntity* pokemon,u16 moveID);
extern void sub_807614C(struct DungeonEntity *, struct DungeonEntity *, u32);
@@ -349,25 +344,25 @@ bool8 sub_805B214(struct DungeonEntity * pokemon,struct DungeonEntity * target,s
return TRUE;
}
bool8 TrapperOrbAction(struct DungeonEntity * param_1,struct DungeonEntity * param_2)
bool8 TrapperOrbAction(struct DungeonEntity * pokemon, struct DungeonEntity * target)
{
bool8 trapLaid;
u8 uVar2;
bool8 isEnemy;
trapLaid = FALSE;
isEnemy = param_1->entityData->isEnemy;
isEnemy = pokemon->entityData->isEnemy;
uVar2 = 1;
if (isEnemy) {
uVar2 = 2;
}
if (sub_807FCD4(&param_1->posWorld,0x13,uVar2) != 0) {
if (sub_807FCD4(&pokemon->posWorld,0x13,uVar2) != 0) {
trapLaid = TRUE;
}
else
{
sub_80522F4(param_1,param_2,*gUnknown_80FC5A8); // A trap can't be laid here!
sub_80522F4(pokemon,target,*gUnknown_80FC5A8); // A trap can't be laid here!
}
sub_8049ED4();
return trapLaid;
@@ -558,9 +553,9 @@ _0805B598:
return local_24;
}
bool8 sub_805B5F4(struct DungeonEntity * pokemon, struct DungeonEntity * target)
bool8 LeechSeedMoveAction(struct DungeonEntity * pokemon, struct DungeonEntity * target)
{
sub_8077F40(pokemon, target, 1);
HandleLeechSeed(pokemon, target, TRUE);
if (pokemon->entityData->unkFB == 0) {
pokemon->entityData->unkFB = 1;
}
@@ -975,15 +970,15 @@ bool8 SilenceOrbAction(struct DungeonEntity * pokemon, struct DungeonEntity * ta
return TRUE;
}
bool8 sub_805BD70(struct DungeonEntity * pokemon, struct DungeonEntity * target)
bool8 ScannerOrbAction(struct DungeonEntity * pokemon, struct DungeonEntity * target)
{
sub_8077DDC(pokemon, target);
HandleScannerOrb(pokemon, target);
return TRUE;
}
bool8 sub_805BD7C(struct DungeonEntity * pokemon, struct DungeonEntity * target)
bool8 RadarOrbAction(struct DungeonEntity * pokemon, struct DungeonEntity * target)
{
sub_8077ED0(pokemon, target);
HandleRadarOrb(pokemon, target);
return TRUE;
}
@@ -1136,11 +1131,11 @@ bool8 TrapbustOrbAction(struct DungeonEntity * pokemon,struct DungeonEntity * ta
return foundTrap;
}
bool8 sub_805C080(struct DungeonEntity * pokemon, struct DungeonEntity *param_2)
bool8 sub_805C080(struct DungeonEntity * pokemon, struct DungeonEntity *target)
{
struct DungeonEntity **possibleTargets;
s32 numPossibleTargets;
struct DungeonEntity *target;
struct DungeonEntity *targetEntity;
bool8 foundTarget;
s32 index;
@@ -1154,15 +1149,15 @@ bool8 sub_805C080(struct DungeonEntity * pokemon, struct DungeonEntity *param_2)
numPossibleTargets = MAX_TEAM_MEMBERS;
}
for(index = 0; index < numPossibleTargets; index++){
target = possibleTargets[index];
if (((EntityExists(target)) && (pokemon != target)) &&
(CanTarget(pokemon,target,1,FALSE) == 0)) {
sub_807D148(pokemon,target,2,&pokemon->posWorld);
targetEntity = possibleTargets[index];
if (((EntityExists(targetEntity)) && (pokemon != targetEntity)) &&
(CanTarget(pokemon,targetEntity,1,FALSE) == 0)) {
sub_807D148(pokemon,targetEntity,2,&pokemon->posWorld);
foundTarget = TRUE;
}
}
if (!foundTarget) {
sub_80522F4(pokemon,param_2,*gUnknown_81004F0);
sub_80522F4(pokemon,target,*gUnknown_81004F0);
}
return foundTarget;
}
@@ -1329,9 +1324,9 @@ bool8 sub_805C468(struct DungeonEntity *pokemon, struct DungeonEntity *target)
return TRUE;
}
bool8 sub_805C474(struct DungeonEntity *pokemon, struct DungeonEntity *target)
bool8 StairsOrbAction(struct DungeonEntity *pokemon, struct DungeonEntity *target)
{
sub_8077E4C(pokemon, target);
HandleStairsOrb(pokemon, target);
return TRUE;
}

View File

@@ -2,10 +2,16 @@
#include "status_checks_1.h"
#include "constants/ability.h"
#include "constants/iq_skill.h"
#include "constants/status.h"
#include "constants/type.h"
#include "constants/weather.h"
#include "dungeon_engine.h"
#include "dungeon_global_data.h"
#include "dungeon_items.h"
#include "dungeon_movement.h"
#include "dungeon_pokemon_attributes.h"
#include "dungeon_map_access.h"
#include "dungeon_util.h"
#include "code_800D090.h"
#include "code_80521D0.h"
@@ -21,6 +27,128 @@ extern u8 *gUnknown_80F8968[];
extern u8 *gUnknown_80F8988[];
extern u8 gUnknown_8106FA4[];
bool8 sub_80705F0(struct DungeonEntity *pokemon, struct Position *pos)
{
s32 crossableTerrain;
struct MapTile *tile;
u16 tileFlags;
struct DungeonEntityData *entityData;
entityData = pokemon->entityData;
tile = GetMapTile_1(pos->x, pos->y);
if ((pos->x >= 0) && (pos->y >= 0) && (DUNGEON_MAX_SIZE_X > pos->x) &&
(DUNGEON_MAX_SIZE_Y > pos->y && ((tile->tileType & TILE_TYPE_MAP_EDGE) == 0)) &&
((tile->pokemon == NULL) || ((GetEntityType(tile->pokemon) == ENTITY_POKEMON)))) {
if (IsFixedDungeon() || (entityData->transformStatus != TRANSFORM_STATUS_MOBILE && !HasItem(pokemon, ITEM_ID_MOBILE_SCARF))) {
crossableTerrain = GetCrossableTerrain(entityData->entityID);
tileFlags = tile->tileType & (TILE_TYPE_FLOOR | TILE_TYPE_LIQUID);
if (HasIQSkill(pokemon, IQ_SKILL_ALL_TERRAIN_HIKER)) {
crossableTerrain = CROSSABLE_TERRAIN_CREVICE;
}
if (HasIQSkill(pokemon, IQ_SKILL_SUPER_MOBILE)) {
crossableTerrain = CROSSABLE_TERRAIN_WALL;
}
switch(crossableTerrain)
{
case CROSSABLE_TERRAIN_WALL:
default:
return FALSE;
case CROSSABLE_TERRAIN_REGULAR:
case CROSSABLE_TERRAIN_LIQUID:
case CROSSABLE_TERRAIN_CREVICE:
if(tileFlags != 0) return FALSE;
}
}
else return FALSE;
}
return TRUE;
}
bool8 sub_80706A4(struct DungeonEntity *pokemon, struct Position *pos)
{
s32 crossableTerrain;
struct MapTile *tile;
u16 tileFlags;
struct DungeonEntityData *entityData;
entityData = pokemon->entityData;
tile = GetMapTile_1(pos->x, pos->y);
if ((pos->x >= 0) && (pos->y >= 0) && (DUNGEON_MAX_SIZE_X > pos->x) &&
(DUNGEON_MAX_SIZE_Y > pos->y && ((tile->tileType & TILE_TYPE_MAP_EDGE) == 0)) &&
((tile->pokemon == NULL) || ((GetEntityType(tile->pokemon) == ENTITY_POKEMON) && (tile->pokemon->entityData == entityData)))) {
if (IsFixedDungeon() || (entityData->transformStatus != TRANSFORM_STATUS_MOBILE && !HasItem(pokemon, ITEM_ID_MOBILE_SCARF))) {
crossableTerrain = GetCrossableTerrain(entityData->entityID);
tileFlags = tile->tileType & (TILE_TYPE_FLOOR | TILE_TYPE_LIQUID);
if (HasIQSkill(pokemon, IQ_SKILL_ALL_TERRAIN_HIKER)) {
crossableTerrain = CROSSABLE_TERRAIN_CREVICE;
}
if (HasIQSkill(pokemon, IQ_SKILL_SUPER_MOBILE)) {
crossableTerrain = CROSSABLE_TERRAIN_WALL;
}
switch(crossableTerrain)
{
case CROSSABLE_TERRAIN_LIQUID:
if(tileFlags == TILE_TYPE_LIQUID) return FALSE;
case CROSSABLE_TERRAIN_REGULAR:
if(tileFlags == TILE_TYPE_FLOOR) return FALSE;
break;
case CROSSABLE_TERRAIN_WALL:
default:
return FALSE;
case CROSSABLE_TERRAIN_CREVICE:
if(tileFlags != 0) return FALSE;
}
}
else return FALSE;
}
return TRUE;
}
u32 GetMovementSpeed(struct DungeonEntity *pokemon)
{
s32 index;
s32 speed;
struct DungeonEntityData * entityData;
entityData = pokemon->entityData;
speed = 0;
for(index = 0; index < NUM_SPEED_TURN_COUNTERS; index++)
{
if (entityData->speedUpTurnsLeft[index + NUM_SPEED_TURN_COUNTERS] != 0) {
speed--;
}
if (entityData->speedUpTurnsLeft[index] != 0) {
speed++;
}
}
if (entityData->nonVolatileStatus == NON_VOLATILE_STATUS_PARALYZED) {
speed--;
}
speed += GetMoveSpeed(entityData->entityID);
if ((HasType(pokemon, TYPE_ICE)) && (GetWeather(pokemon) == WEATHER_SNOW)) {
speed++;
}
if (entityData->transformSpecies == SPECIES_DEOXYS_SPEED) {
speed++;
}
if ((entityData->entityID == SPECIES_KECLEON) && entityData->isEnemy &&
gDungeonGlobalData->unk66E) {
speed++;
}
if (speed < 0) {
speed = 0;
}
if (MAX_MOVEMENT_SPEED < speed) {
speed = MAX_MOVEMENT_SPEED;
}
entityData->movementSpeed = speed;
return speed;
}
u8 sub_8070828(struct DungeonEntity *pokemon, bool8 displayMessage)
{
bool8 flag;

View File

@@ -6,45 +6,7 @@
#include "menu.h"
#include "constants/dungeon.h"
#include "wonder_mail.h"
struct unkSubStruct_203B2F8
{
struct WonderMail wonderMail;
u8 *unk14;
u8 *unk18;
};
struct unkStruct_203B2F8
{
// size: 0x208
s32 state; // state
u32 unk4;
u8 unk8;
u8 unk9;
u8 unkA;
u8 unkB;
struct unkSubStruct_203B2F8 *unkC;
u8 unk10;
u8 fill11[0x14 - 0x11];
u32 unk14;
u8 fill18[0x58 - 0x18];
u8 unk58;
u8 fill59[0x64 - 0x59];
u8 *unk64;
u32 unk68;
u32 unk6C;
u32 unk70;
u32 unk74;
u8 unk78[0xC8 - 0x78];
u8 unkC8[4];
u8 fillCC[0x118 - 0xCC];
struct MenuItem unk118[8];
struct MenuItem unk158[8];
u16 unk198[8];
struct UnkTextStruct2 unk1A8[4];
u32 unk1E4;
};
extern struct unkStruct_203B2F8 *gUnknown_203B2F8;
#include "wonder_mail_3.h"
const struct UnkTextStruct2 gUnknown_80DFDD4 =
{
@@ -141,7 +103,6 @@ ALIGNED(4) const u8 gUnknown_80E014C[] = "New Mail";
ALIGNED(4) const u8 gUnknown_80E0158[] = "Old Mail";
static const u8 wonder_mail_3_fill[] = "pksdir0";
extern void sub_8012CAC(struct UnkTextStruct2 *, struct MenuItem *);
extern void sub_802D63C(void);
extern void sub_802D5A4(void);
@@ -185,8 +146,51 @@ extern void sub_8012D60(u8 *, struct MenuItem *, u32, u16 *, u32, u32);
extern u8 *sub_8096DE8(void);
extern void sub_8096A78(struct unkSubStruct_203B2F8 *);
extern void sub_8014248(const char *text, u32, u32, struct MenuItem *r0, u32, u32, u32, u32, u32);
struct unkStruct_803B344 *sub_803B344(u8);
extern void xxx_call_draw_string(u32, u32, const u8 *, u32, u32);
extern void sub_8012BC4(u32 x, u32 y, u32, u32, u32, u32);
extern void sub_8008C54(u32);
extern void sub_80073B8(u32);
extern void sub_80073E0(u32);
extern void CreateRescueTitle(void *);
extern s32 sub_8013800(void *, u32);
extern void sub_803B35C(void *, u32*);
extern u8 gUnknown_80DFDBC[];
void sub_802CFD0(void)
{
struct unkStruct_802C39C local;
struct unkStruct_803B344 *iVar1;
s32 r5;
s32 r4;
sub_8008C54(gUnknown_203B2F4->unk34);
sub_80073B8(gUnknown_203B2F4->unk34);
r5 = r4 = gUnknown_203B2F4->unk1E * 8 + 10;
xxx_call_draw_string(r5,0,gUnknown_80DFDBC,gUnknown_203B2F4->unk34,0); // RESCUE EVENT
r4 -= 6;
r5 = r4 + (gUnknown_203B2F4->unk9C[2] * 8);
sub_8012BC4(r5,0,gUnknown_203B2F4->unk1E + 1,2,7,gUnknown_203B2F4->unk34);
r5 = 0;
if(r5 < gUnknown_203B2F4->unk1A)
{
while(r5 < gUnknown_203B2F4->unk1A) {
iVar1 = sub_803B344(gUnknown_203B2F4->unk1E * gUnknown_203B2F4->unk1C + r5);
local.unk0[0] = gUnknown_203B2F4->unk34;
local.unk4C = sub_8013800(gUnknown_203B2F4,r5);
sub_803B35C(iVar1,local.unk0);
local.unk3C[11] = 1;
local.unk50[0] = iVar1->unk14;
CreateRescueTitle(&local);
r5++;
}
}
sub_80073E0(gUnknown_203B2F4->unk34);
}
u32 sub_802D098(struct unkSubStruct_203B2F8 *param_1)
{
gUnknown_203B2F8 = MemoryAlloc(0x208,8);
@@ -324,23 +328,23 @@ void sub_802D2A8(void)
sub_8014248(gUnknown_80DFE4C,0,gUnknown_203B2F8->unk70,gUnknown_203B2F8->unk158,0,4,0,0,0);
break;
case 3:
gUnknown_203B2F8->unk4 = 2;
gUnknown_203B2F8->fallbackState = 2;
sub_80141B4(gUnknown_80DFE9C,0,0,0x101);
break;
case 4:
gUnknown_203B2F8->unk4 = 2;
gUnknown_203B2F8->fallbackState = 2;
sub_80141B4(gUnknown_80DFED0,0,0,0x101);
break;
case 5:
gUnknown_203B2F8->unk4 = 2;
gUnknown_203B2F8->fallbackState = 2;
sub_80141B4(gUnknown_80DFF2C,0,0,0x101);
break;
case 6:
gUnknown_203B2F8->unk4 = 2;
gUnknown_203B2F8->fallbackState = 2;
sub_80141B4(gUnknown_80DFFA4,0,0,0x101);
break;
case 7:
gUnknown_203B2F8->unk4 = 0xc;
gUnknown_203B2F8->fallbackState = 0xc;
sub_80141B4(gUnknown_80E0010,0,0,0x101);
break;
case 8:
@@ -352,7 +356,7 @@ void sub_802D2A8(void)
MemoryCopy8(sub_8096DD8(),gUnknown_203B2F8->unkC->unk14,0x28);
MemoryCopy8(sub_8096DE8(),gUnknown_203B2F8->unkC->unk18,0x78);
}
switch(gUnknown_203B2F8->unkC->wonderMail.dungeon)
switch(gUnknown_203B2F8->unkC->wonderMail.dungeon.dungeonIndex)
{
// NOTE: subtract 1 from each of the case as the input??
case DUNGEON_ODDITY_CAVE: // 0x2B
@@ -368,7 +372,7 @@ void sub_802D2A8(void)
sub_8097418(0x2D, 1);
break;
}
gUnknown_203B2F8->unk4 = 2;
gUnknown_203B2F8->fallbackState = 2;
sub_80141B4(gUnknown_80E0074,0,0,0x101);
break;
case 9:
@@ -376,7 +380,7 @@ void sub_802D2A8(void)
sub_8014248(gUnknown_80E0094,0,gUnknown_203B2F8->unk74,gUnknown_203B2F8->unk158,0,4,0,0,0);
break;
case 10:
gUnknown_203B2F8->unk4 = 0xb;
gUnknown_203B2F8->fallbackState = 0xb;
sub_80141B4(gUnknown_80E0108,0,0,0x101);
break;
case 0xb:

View File

@@ -3,8 +3,11 @@
#include "input.h"
#include "item.h"
#include "memory.h"
#include "menu.h"
#include "text.h"
#include "wonder_mail.h"
#include "wonder_mail_3.h"
#include "code_80958E8.h"
struct unkStruct_203B2FC
{
@@ -119,6 +122,13 @@ struct WonderMail *GetJobSlotInfo(u8);
extern void sub_8096AF8(u8 *, u32, u32);
extern void sub_8096EEC(void);
extern void sub_803C21C(struct WonderMail *, u32 *);
extern u8 sub_8012FD8(u8 *);
extern void sub_8013114(u8 *r0, s32 *r1);
extern u32 sub_802C598(s32);
extern void sub_802C688(void);
extern void sub_8096C80(void);
extern void sub_8096C3C(u8);
extern u8 sub_802C620(void);
void sub_802DE44(void);
void sub_802DE60(void);
@@ -126,6 +136,207 @@ void sub_802DF6C(void);
void sub_802DF88(void);
void sub_802DF14(void);
void sub_801317C(void);
void sub_802D1A0(u32);
u32 sub_802DEE0(void);
void sub_802DF24(void);
void sub_802D7D0(void)
{
s32 menuAction;
if (sub_80144A4(&menuAction) == 0) {
if (menuAction != 1) {
gUnknown_203B2F8->unk70 = menuAction;
}
switch(menuAction) {
case 3:
sub_802D1A0(2);
break;
case 6:
gUnknown_203B2F8->fallbackState = 1;
sub_802D1A0(0x10);
break;
case 4:
case 2:
default:
sub_802D1A0(0);
break;
}
}
}
void sub_802D82C(void)
{
s32 menuAction;
if (sub_80144A4(&menuAction) == 0) {
if (menuAction != 1) {
gUnknown_203B2F8->unk74 = menuAction;
}
switch(menuAction) {
case 3:
sub_8096C3C(gUnknown_203B2F8->unk10);
sub_8096C80();
sub_802D1A0(8);
break;
case 6:
gUnknown_203B2F8->fallbackState = 9;
sub_802D1A0(0x10);
break;
case 7:
gUnknown_203B2F8->fallbackState = 9;
sub_802D1A0(0xf);
break;
default:
case 1:
case 2:
case 4:
sub_802D1A0(1);
break;
}
}
}
void sub_802D8CC(void)
{
switch(sub_802C598(1)) {
case 0:
case 1:
break;
case 3:
gUnknown_203B2F8->unk10 = sub_802C620();
sub_802D1A0(0xd);
break;
case 4:
gUnknown_203B2F8->unk10 = sub_802C620();
gUnknown_203B2F8->fallbackState = 0xc;
sub_802D1A0(0xf);
break;
case 2:
sub_802C688();
sub_802D1A0(1);
break;
}
}
void sub_802D940(void)
{
struct WonderMail *mail;
s32 menuAction;
menuAction = 0;
sub_802C598(0);
if ((sub_8012FD8(gUnknown_203B2F8->unk78) == 0) && (sub_8013114(gUnknown_203B2F8->unk78,&menuAction), menuAction != 1)) {
gUnknown_203B2F8->unk6C = menuAction;
}
switch(menuAction)
{
case 2:
if ((gUnknown_203B2F8->unk9 != 0) && (((mail = &gUnknown_203B490->unkF0[gUnknown_203B2F8->unk10]), mail->mailType > 5) && (gUnknown_203B2F8->unkA == mail->dungeon.dungeonIndex)))
{
sub_802D1A0(0x7);
}
else {
sub_802D1A0(0xE);
}
break;
case 5:
gUnknown_203B2F8->fallbackState = 0xc;
sub_802D1A0(0xf);
break;
case 1:
sub_802D1A0(0xc);
break;
}
}
void sub_802D9F0(void)
{
s32 menuAction;
menuAction = 0;
sub_802C598(0);
sub_8012FD8(gUnknown_203B2F8->unk78);
if (sub_8012FD8(gUnknown_203B2F8->unkC8) == 0) {
sub_8013114(gUnknown_203B2F8->unkC8,&menuAction);
}
switch(menuAction)
{
case 1:
case 4:
sub_802D1A0(0xc);
break;
case 3:
sub_802C688();
sub_8096C3C(gUnknown_203B2F8->unk10);
sub_8096C80();
sub_802D1A0(8);
break;
}
}
void sub_802DA60(void)
{
switch(sub_802DEE0())
{
case 2:
case 3:
sub_802DF24();
sub_802D1A0(gUnknown_203B2F8->fallbackState);
break;
case 0:
case 1:
break;
}
}
void sub_802DA84(void)
{
s32 temp;
if(sub_80144A4(&temp) == 0)
{
sub_802D1A0(gUnknown_203B2F8->fallbackState);
}
}
bool8 sub_802DAA8(void)
{
struct WonderMail *mail;
mail = GetJobSlotInfo(gUnknown_203B2F8->unk10);
if (gUnknown_203B2F8->unk9 == 0) {
return 1;
}
else {
if ( (mail->mailType != WONDER_MAIL_TYPE_THANK_YOU) && (gUnknown_203B2F8->unkA == mail->dungeon.dungeonIndex)) return 0;
return 1;
}
}
bool8 sub_802DADC(void)
{
u8 mailType;
struct WonderMail *mail;
s32 counter;
if (gUnknown_203B2F8->unk9 == 0) {
_0802DAE8:
return 1;
}
else {
for( mail = &gUnknown_203B490->unkF0[0], counter = 0; counter < 8; mail++, counter++)
{
mailType = mail->mailType;
if (((mailType == 0) || (mailType == WONDER_MAIL_TYPE_THANK_YOU)) ||
((WONDER_MAIL_TYPE_THANK_YOU < mailType && (gUnknown_203B2F8->unkA != mail->dungeon.dungeonIndex)))) goto _0802DAE8;
}
return 0;
}
}
// TODO: merge above with wonder_mail_3.c
bool8 sub_802DB28(u8 jobSlot, u8 param_2)
{