mirror of
https://github.com/pret/pokediamond.git
synced 2026-03-21 17:54:29 -05:00
finish decomp of field_move
This commit is contained in:
parent
e080be835f
commit
af4d5207e1
|
|
@ -241,8 +241,7 @@ Static arm9
|
|||
Object unk_0206367C.o
|
||||
Object unk_02063888.o
|
||||
Object field_move.o
|
||||
Object field_move_s.o
|
||||
Object unk_0206439C.o
|
||||
Object field_move_environment.o
|
||||
Object unk_020643C0.o
|
||||
Object unk_020647A4.o
|
||||
Object unk_02064CA8.o
|
||||
|
|
|
|||
|
|
@ -1,878 +0,0 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.extern FieldMove_CreateUseEnvironment
|
||||
.extern FieldMove_DeleteUseEnvironment
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_02063CE0
|
||||
sub_02063CE0: ; 0x02063CE0
|
||||
push {r4, lr}
|
||||
add r4, r0, #0x0
|
||||
ldr r1, [r4, #0x4]
|
||||
ldr r0, [r1, #0x6c]
|
||||
sub r0, r0, #0x2
|
||||
cmp r0, #0x1
|
||||
bhi _02063CF2
|
||||
mov r0, #0x1
|
||||
pop {r4, pc}
|
||||
_02063CF2:
|
||||
ldr r0, [r1, #0xc]
|
||||
bl Save_PlayerData_GetProfile
|
||||
mov r1, #0x5
|
||||
bl PlayerProfile_TestBadgeFlag
|
||||
cmp r0, #0x0
|
||||
bne _02063D06
|
||||
mov r0, #0x2
|
||||
pop {r4, pc}
|
||||
_02063D06:
|
||||
ldrh r1, [r4, #0xc]
|
||||
mov r0, #0x8
|
||||
tst r0, r1
|
||||
beq _02063D12
|
||||
mov r0, #0x0
|
||||
pop {r4, pc}
|
||||
_02063D12:
|
||||
mov r0, #0x1
|
||||
pop {r4, pc}
|
||||
.balign 4
|
||||
|
||||
thumb_func_start sub_02063D18
|
||||
sub_02063D18: ; 0x02063D18
|
||||
push {r4-r6, lr}
|
||||
add r5, r0, #0x0
|
||||
ldr r0, [r5, #0x0]
|
||||
add r6, r1, #0x0
|
||||
bl TaskManager_GetEnvironment
|
||||
add r4, r0, #0x0
|
||||
add r0, r5, #0x0
|
||||
add r1, r6, #0x0
|
||||
bl FieldMove_CreateUseEnvironment
|
||||
add r5, r0, #0x0
|
||||
ldr r0, [r6, #0x4]
|
||||
bl FieldSystem_LoadFieldOverlay
|
||||
mov r0, #0x72
|
||||
ldr r1, _02063D48 ; =sub_02063D4C
|
||||
lsl r0, r0, #0x2
|
||||
str r1, [r4, r0]
|
||||
add r0, #0x30
|
||||
str r5, [r4, r0]
|
||||
mov r0, #0xa
|
||||
strh r0, [r4, #0x2a]
|
||||
pop {r4-r6, pc}
|
||||
.balign 4
|
||||
_02063D48: .word sub_02063D4C
|
||||
|
||||
thumb_func_start sub_02063D4C
|
||||
sub_02063D4C: ; 0x02063D4C
|
||||
push {r3-r6, lr}
|
||||
sub sp, #0x4
|
||||
add r5, r0, #0x0
|
||||
bl TaskManager_GetEnvironment
|
||||
add r4, r0, #0x0
|
||||
add r0, r5, #0x0
|
||||
bl TaskManager_GetFieldSystem
|
||||
add r6, r0, #0x0
|
||||
ldr r1, _02063D84 ; =0x0000271A
|
||||
ldr r2, [r4, #0x4]
|
||||
add r0, r5, #0x0
|
||||
bl StartScriptFromMenu
|
||||
mov r2, #0x0
|
||||
str r2, [sp, #0x0]
|
||||
ldrh r1, [r4, #0xc]
|
||||
add r0, r6, #0x0
|
||||
add r3, r2, #0x0
|
||||
bl FieldMove_SetArgs
|
||||
add r0, r4, #0x0
|
||||
bl FieldMove_DeleteUseEnvironment
|
||||
mov r0, #0x0
|
||||
add sp, #0x4
|
||||
pop {r3-r6, pc}
|
||||
.balign 4
|
||||
_02063D84: .word 0x0000271A
|
||||
|
||||
thumb_func_start sub_02063D88
|
||||
sub_02063D88: ; 0x02063D88
|
||||
push {r4, lr}
|
||||
add r4, r0, #0x0
|
||||
ldr r1, [r4, #0x4]
|
||||
ldr r0, [r1, #0x6c]
|
||||
sub r0, r0, #0x2
|
||||
cmp r0, #0x1
|
||||
bhi _02063D9A
|
||||
mov r0, #0x1
|
||||
pop {r4, pc}
|
||||
_02063D9A:
|
||||
ldr r0, [r1, #0xc]
|
||||
bl Save_PlayerData_GetProfile
|
||||
mov r1, #0x3
|
||||
bl PlayerProfile_TestBadgeFlag
|
||||
cmp r0, #0x0
|
||||
bne _02063DAE
|
||||
mov r0, #0x2
|
||||
pop {r4, pc}
|
||||
_02063DAE:
|
||||
ldrh r1, [r4, #0xc]
|
||||
mov r0, #0x10
|
||||
tst r0, r1
|
||||
beq _02063DBA
|
||||
mov r0, #0x0
|
||||
pop {r4, pc}
|
||||
_02063DBA:
|
||||
mov r0, #0x1
|
||||
pop {r4, pc}
|
||||
.balign 4
|
||||
|
||||
thumb_func_start sub_02063DC0
|
||||
sub_02063DC0: ; 0x02063DC0
|
||||
push {r4-r6, lr}
|
||||
add r5, r0, #0x0
|
||||
ldr r0, [r5, #0x0]
|
||||
add r6, r1, #0x0
|
||||
bl TaskManager_GetEnvironment
|
||||
add r4, r0, #0x0
|
||||
add r0, r5, #0x0
|
||||
add r1, r6, #0x0
|
||||
bl FieldMove_CreateUseEnvironment
|
||||
add r5, r0, #0x0
|
||||
ldr r0, [r6, #0x4]
|
||||
bl FieldSystem_LoadFieldOverlay
|
||||
mov r0, #0x72
|
||||
ldr r1, _02063DF0 ; =sub_02063DF4
|
||||
lsl r0, r0, #0x2
|
||||
str r1, [r4, r0]
|
||||
add r0, #0x30
|
||||
str r5, [r4, r0]
|
||||
mov r0, #0xa
|
||||
strh r0, [r4, #0x2a]
|
||||
pop {r4-r6, pc}
|
||||
.balign 4
|
||||
_02063DF0: .word sub_02063DF4
|
||||
|
||||
thumb_func_start sub_02063DF4
|
||||
sub_02063DF4: ; 0x02063DF4
|
||||
push {r3-r6, lr}
|
||||
sub sp, #0x4
|
||||
add r5, r0, #0x0
|
||||
bl TaskManager_GetEnvironment
|
||||
add r4, r0, #0x0
|
||||
add r0, r5, #0x0
|
||||
bl TaskManager_GetFieldSystem
|
||||
add r6, r0, #0x0
|
||||
ldr r1, _02063E2C ; =0x0000271E
|
||||
add r0, r5, #0x0
|
||||
mov r2, #0x0
|
||||
bl StartScriptFromMenu
|
||||
mov r2, #0x0
|
||||
str r2, [sp, #0x0]
|
||||
ldrh r1, [r4, #0xc]
|
||||
add r0, r6, #0x0
|
||||
add r3, r2, #0x0
|
||||
bl FieldMove_SetArgs
|
||||
add r0, r4, #0x0
|
||||
bl FieldMove_DeleteUseEnvironment
|
||||
mov r0, #0x0
|
||||
add sp, #0x4
|
||||
pop {r3-r6, pc}
|
||||
.balign 4
|
||||
_02063E2C: .word 0x0000271E
|
||||
|
||||
thumb_func_start sub_02063E30
|
||||
sub_02063E30: ; 0x02063E30
|
||||
push {r4, lr}
|
||||
add r4, r0, #0x0
|
||||
ldr r1, [r4, #0x4]
|
||||
ldr r0, [r1, #0x6c]
|
||||
sub r0, r0, #0x2
|
||||
cmp r0, #0x1
|
||||
bhi _02063E42
|
||||
mov r0, #0x1
|
||||
pop {r4, pc}
|
||||
_02063E42:
|
||||
ldr r0, [r1, #0xc]
|
||||
bl Save_PlayerData_GetProfile
|
||||
mov r1, #0x0
|
||||
bl PlayerProfile_TestBadgeFlag
|
||||
cmp r0, #0x0
|
||||
bne _02063E56
|
||||
mov r0, #0x2
|
||||
pop {r4, pc}
|
||||
_02063E56:
|
||||
ldrh r1, [r4, #0xc]
|
||||
mov r0, #0x20
|
||||
tst r0, r1
|
||||
beq _02063E62
|
||||
mov r0, #0x0
|
||||
pop {r4, pc}
|
||||
_02063E62:
|
||||
mov r0, #0x1
|
||||
pop {r4, pc}
|
||||
.balign 4
|
||||
|
||||
thumb_func_start sub_02063E68
|
||||
sub_02063E68: ; 0x02063E68
|
||||
push {r4-r6, lr}
|
||||
add r5, r0, #0x0
|
||||
ldr r0, [r5, #0x0]
|
||||
add r6, r1, #0x0
|
||||
bl TaskManager_GetEnvironment
|
||||
add r4, r0, #0x0
|
||||
add r0, r5, #0x0
|
||||
add r1, r6, #0x0
|
||||
bl FieldMove_CreateUseEnvironment
|
||||
add r5, r0, #0x0
|
||||
ldr r0, [r6, #0x4]
|
||||
bl FieldSystem_LoadFieldOverlay
|
||||
mov r0, #0x72
|
||||
ldr r1, _02063E98 ; =sub_02063E9C
|
||||
lsl r0, r0, #0x2
|
||||
str r1, [r4, r0]
|
||||
add r0, #0x30
|
||||
str r5, [r4, r0]
|
||||
mov r0, #0xa
|
||||
strh r0, [r4, #0x2a]
|
||||
pop {r4-r6, pc}
|
||||
.balign 4
|
||||
_02063E98: .word sub_02063E9C
|
||||
|
||||
thumb_func_start sub_02063E9C
|
||||
sub_02063E9C: ; 0x02063E9C
|
||||
push {r3-r6, lr}
|
||||
sub sp, #0x4
|
||||
add r5, r0, #0x0
|
||||
bl TaskManager_GetEnvironment
|
||||
add r4, r0, #0x0
|
||||
add r0, r5, #0x0
|
||||
bl TaskManager_GetFieldSystem
|
||||
add r6, r0, #0x0
|
||||
ldr r1, _02063ED4 ; =0x00002719
|
||||
ldr r2, [r4, #0x4]
|
||||
add r0, r5, #0x0
|
||||
bl StartScriptFromMenu
|
||||
mov r2, #0x0
|
||||
str r2, [sp, #0x0]
|
||||
ldrh r1, [r4, #0xc]
|
||||
add r0, r6, #0x0
|
||||
add r3, r2, #0x0
|
||||
bl FieldMove_SetArgs
|
||||
add r0, r4, #0x0
|
||||
bl FieldMove_DeleteUseEnvironment
|
||||
mov r0, #0x0
|
||||
add sp, #0x4
|
||||
pop {r3-r6, pc}
|
||||
.balign 4
|
||||
_02063ED4: .word 0x00002719
|
||||
|
||||
thumb_func_start sub_02063ED8
|
||||
sub_02063ED8: ; 0x02063ED8
|
||||
push {r4, lr}
|
||||
add r4, r0, #0x0
|
||||
ldr r1, [r4, #0x4]
|
||||
ldr r0, [r1, #0x6c]
|
||||
sub r0, r0, #0x2
|
||||
cmp r0, #0x1
|
||||
bhi _02063EEA
|
||||
mov r0, #0x1
|
||||
pop {r4, pc}
|
||||
_02063EEA:
|
||||
ldr r0, [r1, #0xc]
|
||||
bl Save_PlayerData_GetProfile
|
||||
mov r1, #0x7
|
||||
bl PlayerProfile_TestBadgeFlag
|
||||
cmp r0, #0x0
|
||||
bne _02063EFE
|
||||
mov r0, #0x2
|
||||
pop {r4, pc}
|
||||
_02063EFE:
|
||||
ldrh r1, [r4, #0xc]
|
||||
mov r0, #0x40
|
||||
tst r0, r1
|
||||
beq _02063F0A
|
||||
mov r0, #0x0
|
||||
pop {r4, pc}
|
||||
_02063F0A:
|
||||
mov r0, #0x1
|
||||
pop {r4, pc}
|
||||
.balign 4
|
||||
|
||||
thumb_func_start sub_02063F10
|
||||
sub_02063F10: ; 0x02063F10
|
||||
push {r4-r6, lr}
|
||||
add r5, r0, #0x0
|
||||
ldr r0, [r5, #0x0]
|
||||
add r6, r1, #0x0
|
||||
bl TaskManager_GetEnvironment
|
||||
add r4, r0, #0x0
|
||||
add r0, r5, #0x0
|
||||
add r1, r6, #0x0
|
||||
bl FieldMove_CreateUseEnvironment
|
||||
add r5, r0, #0x0
|
||||
ldr r0, [r6, #0x4]
|
||||
bl FieldSystem_LoadFieldOverlay
|
||||
mov r0, #0x72
|
||||
ldr r1, _02063F40 ; =sub_02063F44
|
||||
lsl r0, r0, #0x2
|
||||
str r1, [r4, r0]
|
||||
add r0, #0x30
|
||||
str r5, [r4, r0]
|
||||
mov r0, #0xa
|
||||
strh r0, [r4, #0x2a]
|
||||
pop {r4-r6, pc}
|
||||
.balign 4
|
||||
_02063F40: .word sub_02063F44
|
||||
|
||||
thumb_func_start sub_02063F44
|
||||
sub_02063F44: ; 0x02063F44
|
||||
push {r3-r6, lr}
|
||||
sub sp, #0x4
|
||||
add r5, r0, #0x0
|
||||
bl TaskManager_GetEnvironment
|
||||
add r4, r0, #0x0
|
||||
add r0, r5, #0x0
|
||||
bl TaskManager_GetFieldSystem
|
||||
add r6, r0, #0x0
|
||||
ldr r1, _02063F7C ; =0x0000271D
|
||||
add r0, r5, #0x0
|
||||
mov r2, #0x0
|
||||
bl StartScriptFromMenu
|
||||
mov r2, #0x0
|
||||
str r2, [sp, #0x0]
|
||||
ldrh r1, [r4, #0xc]
|
||||
add r0, r6, #0x0
|
||||
add r3, r2, #0x0
|
||||
bl FieldMove_SetArgs
|
||||
add r0, r4, #0x0
|
||||
bl FieldMove_DeleteUseEnvironment
|
||||
mov r0, #0x0
|
||||
add sp, #0x4
|
||||
pop {r3-r6, pc}
|
||||
.balign 4
|
||||
_02063F7C: .word 0x0000271D
|
||||
|
||||
thumb_func_start sub_02063F80
|
||||
sub_02063F80: ; 0x02063F80
|
||||
push {r4, lr}
|
||||
add r4, r0, #0x0
|
||||
ldr r1, [r4, #0x4]
|
||||
ldr r0, [r1, #0x6c]
|
||||
sub r0, r0, #0x2
|
||||
cmp r0, #0x1
|
||||
bhi _02063F92
|
||||
mov r0, #0x1
|
||||
pop {r4, pc}
|
||||
_02063F92:
|
||||
ldr r0, [r1, #0xc]
|
||||
bl Save_PlayerData_GetProfile
|
||||
mov r1, #0x6
|
||||
bl PlayerProfile_TestBadgeFlag
|
||||
cmp r0, #0x0
|
||||
bne _02063FA6
|
||||
mov r0, #0x2
|
||||
pop {r4, pc}
|
||||
_02063FA6:
|
||||
ldrh r1, [r4, #0xc]
|
||||
mov r0, #0x80
|
||||
tst r0, r1
|
||||
bne _02063FB2
|
||||
mov r0, #0x1
|
||||
pop {r4, pc}
|
||||
_02063FB2:
|
||||
ldr r0, [r4, #0x4]
|
||||
ldr r0, [r0, #0xc]
|
||||
bl Save_VarsFlags_Get
|
||||
bl Save_VarsFlags_CheckHaveFollower
|
||||
cmp r0, #0x1
|
||||
bne _02063FC6
|
||||
mov r0, #0x3
|
||||
pop {r4, pc}
|
||||
_02063FC6:
|
||||
mov r0, #0x0
|
||||
pop {r4, pc}
|
||||
.balign 4
|
||||
|
||||
thumb_func_start sub_02063FCC
|
||||
sub_02063FCC: ; 0x02063FCC
|
||||
push {r4-r6, lr}
|
||||
add r5, r0, #0x0
|
||||
ldr r0, [r5, #0x0]
|
||||
add r6, r1, #0x0
|
||||
bl TaskManager_GetEnvironment
|
||||
add r4, r0, #0x0
|
||||
add r0, r5, #0x0
|
||||
add r1, r6, #0x0
|
||||
bl FieldMove_CreateUseEnvironment
|
||||
add r5, r0, #0x0
|
||||
ldr r0, [r6, #0x4]
|
||||
bl FieldSystem_LoadFieldOverlay
|
||||
mov r0, #0x72
|
||||
ldr r1, _02063FFC ; =sub_02064000
|
||||
lsl r0, r0, #0x2
|
||||
str r1, [r4, r0]
|
||||
add r0, #0x30
|
||||
str r5, [r4, r0]
|
||||
mov r0, #0xa
|
||||
strh r0, [r4, #0x2a]
|
||||
pop {r4-r6, pc}
|
||||
.balign 4
|
||||
_02063FFC: .word sub_02064000
|
||||
|
||||
thumb_func_start sub_02064000
|
||||
sub_02064000: ; 0x02064000
|
||||
push {r3-r6, lr}
|
||||
sub sp, #0x4
|
||||
add r5, r0, #0x0
|
||||
bl TaskManager_GetEnvironment
|
||||
add r4, r0, #0x0
|
||||
add r0, r5, #0x0
|
||||
bl TaskManager_GetFieldSystem
|
||||
add r6, r0, #0x0
|
||||
ldr r1, _02064038 ; =0x0000271B
|
||||
add r0, r5, #0x0
|
||||
mov r2, #0x0
|
||||
bl StartScriptFromMenu
|
||||
mov r2, #0x0
|
||||
str r2, [sp, #0x0]
|
||||
ldrh r1, [r4, #0xc]
|
||||
add r0, r6, #0x0
|
||||
add r3, r2, #0x0
|
||||
bl FieldMove_SetArgs
|
||||
add r0, r4, #0x0
|
||||
bl FieldMove_DeleteUseEnvironment
|
||||
mov r0, #0x0
|
||||
add sp, #0x4
|
||||
pop {r3-r6, pc}
|
||||
.balign 4
|
||||
_02064038: .word 0x0000271B
|
||||
|
||||
thumb_func_start sub_0206403C
|
||||
sub_0206403C: ; 0x0206403C
|
||||
ldr r1, [r0, #0x4]
|
||||
ldr r1, [r1, #0x6c]
|
||||
sub r1, r1, #0x2
|
||||
cmp r1, #0x1
|
||||
bhi _0206404A
|
||||
mov r0, #0x1
|
||||
bx lr
|
||||
_0206404A:
|
||||
ldrh r1, [r0, #0xc]
|
||||
mov r0, #0x1
|
||||
lsl r0, r0, #0x8
|
||||
tst r0, r1
|
||||
beq _02064058
|
||||
mov r0, #0x0
|
||||
bx lr
|
||||
_02064058:
|
||||
mov r0, #0x1
|
||||
bx lr
|
||||
|
||||
thumb_func_start sub_0206405C
|
||||
sub_0206405C: ; 0x0206405C
|
||||
push {r4-r6, lr}
|
||||
add r5, r0, #0x0
|
||||
ldr r0, [r5, #0x0]
|
||||
add r6, r1, #0x0
|
||||
bl TaskManager_GetEnvironment
|
||||
add r4, r0, #0x0
|
||||
add r0, r5, #0x0
|
||||
add r1, r6, #0x0
|
||||
bl FieldMove_CreateUseEnvironment
|
||||
add r5, r0, #0x0
|
||||
ldr r0, [r6, #0x4]
|
||||
bl FieldSystem_LoadFieldOverlay
|
||||
mov r0, #0x72
|
||||
ldr r1, _0206408C ; =sub_02064090
|
||||
lsl r0, r0, #0x2
|
||||
str r1, [r4, r0]
|
||||
add r0, #0x30
|
||||
str r5, [r4, r0]
|
||||
mov r0, #0xa
|
||||
strh r0, [r4, #0x2a]
|
||||
pop {r4-r6, pc}
|
||||
.balign 4
|
||||
_0206408C: .word sub_02064090
|
||||
|
||||
thumb_func_start sub_02064090
|
||||
sub_02064090: ; 0x02064090
|
||||
push {r3-r6, lr}
|
||||
sub sp, #0x4
|
||||
add r5, r0, #0x0
|
||||
bl TaskManager_GetEnvironment
|
||||
add r4, r0, #0x0
|
||||
add r0, r5, #0x0
|
||||
bl TaskManager_GetFieldSystem
|
||||
add r6, r0, #0x0
|
||||
ldr r1, _020640C8 ; =0x0000271F
|
||||
add r0, r5, #0x0
|
||||
mov r2, #0x0
|
||||
bl StartScriptFromMenu
|
||||
mov r2, #0x0
|
||||
str r2, [sp, #0x0]
|
||||
ldrh r1, [r4, #0xc]
|
||||
add r0, r6, #0x0
|
||||
add r3, r2, #0x0
|
||||
bl FieldMove_SetArgs
|
||||
add r0, r4, #0x0
|
||||
bl FieldMove_DeleteUseEnvironment
|
||||
mov r0, #0x0
|
||||
add sp, #0x4
|
||||
pop {r3-r6, pc}
|
||||
.balign 4
|
||||
_020640C8: .word 0x0000271F
|
||||
|
||||
thumb_func_start sub_020640CC
|
||||
sub_020640CC: ; 0x020640CC
|
||||
push {r4, lr}
|
||||
add r4, r0, #0x0
|
||||
ldr r0, [r4, #0x4]
|
||||
ldr r0, [r0, #0x6c]
|
||||
sub r0, r0, #0x2
|
||||
cmp r0, #0x1
|
||||
bhi _020640DE
|
||||
mov r0, #0x1
|
||||
pop {r4, pc}
|
||||
_020640DE:
|
||||
ldr r0, [r4, #0x0]
|
||||
bl MapHeader_IsOutdoorNotTown
|
||||
cmp r0, #0x0
|
||||
bne _020640EC
|
||||
mov r0, #0x1
|
||||
pop {r4, pc}
|
||||
_020640EC:
|
||||
ldr r0, [r4, #0x4]
|
||||
ldr r0, [r0, #0xc]
|
||||
bl Save_VarsFlags_Get
|
||||
bl Save_VarsFlags_CheckHaveFollower
|
||||
cmp r0, #0x1
|
||||
bne _02064100
|
||||
mov r0, #0x3
|
||||
pop {r4, pc}
|
||||
_02064100:
|
||||
ldr r0, [r4, #0x4]
|
||||
ldr r0, [r0, #0xc]
|
||||
bl Save_VarsFlags_Get
|
||||
bl Save_VarsFlags_CheckSafariSysFlag
|
||||
cmp r0, #0x1
|
||||
beq _02064120
|
||||
ldr r0, [r4, #0x4]
|
||||
ldr r0, [r0, #0xc]
|
||||
bl Save_VarsFlags_Get
|
||||
bl Save_VarsFlags_CheckPalParkSysFlag
|
||||
cmp r0, #0x1
|
||||
bne _02064124
|
||||
_02064120:
|
||||
mov r0, #0x1
|
||||
b _02064126
|
||||
_02064124:
|
||||
mov r0, #0x0
|
||||
_02064126:
|
||||
cmp r0, #0x1
|
||||
bne _0206412E
|
||||
mov r0, #0x1
|
||||
pop {r4, pc}
|
||||
_0206412E:
|
||||
mov r0, #0x0
|
||||
pop {r4, pc}
|
||||
.balign 4
|
||||
|
||||
thumb_func_start sub_02064134
|
||||
sub_02064134: ; 0x02064134
|
||||
push {r4-r6, lr}
|
||||
add r5, r0, #0x0
|
||||
ldr r0, [r5, #0x0]
|
||||
bl TaskManager_GetFieldSystem
|
||||
add r6, r0, #0x0
|
||||
ldr r0, [r5, #0x0]
|
||||
bl TaskManager_GetEnvironment
|
||||
add r4, r0, #0x0
|
||||
add r0, r6, #0x0
|
||||
bl FieldSystem_LoadFieldOverlay
|
||||
ldrh r1, [r5, #0x4]
|
||||
ldr r2, [r6, #0xc]
|
||||
mov r0, #0xb
|
||||
lsl r1, r1, #0x18
|
||||
lsr r1, r1, #0x18
|
||||
bl sub_0206439C
|
||||
mov r1, #0x72
|
||||
ldr r2, _02064170 ; =sub_02064174
|
||||
lsl r1, r1, #0x2
|
||||
str r2, [r4, r1]
|
||||
add r1, #0x30
|
||||
str r0, [r4, r1]
|
||||
mov r0, #0xa
|
||||
strh r0, [r4, #0x2a]
|
||||
pop {r4-r6, pc}
|
||||
nop
|
||||
_02064170: .word sub_02064174
|
||||
|
||||
thumb_func_start sub_02064174
|
||||
sub_02064174: ; 0x02064174
|
||||
push {r4-r6, lr}
|
||||
add r5, r0, #0x0
|
||||
bl TaskManager_GetFieldSystem
|
||||
add r6, r0, #0x0
|
||||
add r0, r5, #0x0
|
||||
bl TaskManager_GetEnvironment
|
||||
add r4, r0, #0x0
|
||||
ldr r1, [r4, #0x0]
|
||||
add r0, r6, #0x0
|
||||
mov r2, #0x4
|
||||
bl ov06_0224CB30
|
||||
add r6, r0, #0x0
|
||||
add r0, r4, #0x0
|
||||
bl FreeToHeap
|
||||
ldr r1, _020641A8 ; =ov06_0224CB54
|
||||
add r0, r5, #0x0
|
||||
add r2, r6, #0x0
|
||||
bl TaskManager_Jump
|
||||
mov r0, #0x0
|
||||
pop {r4-r6, pc}
|
||||
nop
|
||||
_020641A8: .word ov06_0224CB54
|
||||
|
||||
thumb_func_start sub_020641AC
|
||||
sub_020641AC: ; 0x020641AC
|
||||
push {r4, lr}
|
||||
add r4, r0, #0x0
|
||||
ldr r0, [r4, #0x4]
|
||||
ldr r0, [r0, #0x6c]
|
||||
sub r0, r0, #0x2
|
||||
cmp r0, #0x1
|
||||
bhi _020641BE
|
||||
mov r0, #0x1
|
||||
pop {r4, pc}
|
||||
_020641BE:
|
||||
ldr r0, [r4, #0x0]
|
||||
bl MapHeader_IsCave
|
||||
cmp r0, #0x1
|
||||
bne _020641D2
|
||||
ldr r0, [r4, #0x0]
|
||||
bl MapHeader_IsEscapeRopeAllowed
|
||||
cmp r0, #0x1
|
||||
beq _020641D6
|
||||
_020641D2:
|
||||
mov r0, #0x1
|
||||
pop {r4, pc}
|
||||
_020641D6:
|
||||
ldr r0, [r4, #0x4]
|
||||
ldr r0, [r0, #0xc]
|
||||
bl Save_VarsFlags_Get
|
||||
bl Save_VarsFlags_CheckHaveFollower
|
||||
cmp r0, #0x1
|
||||
bne _020641EA
|
||||
mov r0, #0x3
|
||||
pop {r4, pc}
|
||||
_020641EA:
|
||||
mov r0, #0x0
|
||||
pop {r4, pc}
|
||||
.balign 4
|
||||
|
||||
thumb_func_start sub_020641F0
|
||||
sub_020641F0: ; 0x020641F0
|
||||
push {r4-r6, lr}
|
||||
add r5, r0, #0x0
|
||||
ldr r0, [r5, #0x0]
|
||||
bl TaskManager_GetFieldSystem
|
||||
add r6, r0, #0x0
|
||||
ldr r0, [r5, #0x0]
|
||||
bl TaskManager_GetEnvironment
|
||||
add r4, r0, #0x0
|
||||
add r0, r6, #0x0
|
||||
bl FieldSystem_LoadFieldOverlay
|
||||
ldrh r1, [r5, #0x4]
|
||||
ldr r2, [r6, #0xc]
|
||||
mov r0, #0xb
|
||||
lsl r1, r1, #0x18
|
||||
lsr r1, r1, #0x18
|
||||
bl sub_0206439C
|
||||
mov r1, #0x72
|
||||
ldr r2, _0206422C ; =sub_02064230
|
||||
lsl r1, r1, #0x2
|
||||
str r2, [r4, r1]
|
||||
add r1, #0x30
|
||||
str r0, [r4, r1]
|
||||
mov r0, #0xa
|
||||
strh r0, [r4, #0x2a]
|
||||
pop {r4-r6, pc}
|
||||
nop
|
||||
_0206422C: .word sub_02064230
|
||||
|
||||
thumb_func_start sub_02064230
|
||||
sub_02064230: ; 0x02064230
|
||||
push {r3-r7, lr}
|
||||
add r5, r0, #0x0
|
||||
bl TaskManager_GetFieldSystem
|
||||
add r4, r0, #0x0
|
||||
add r0, r5, #0x0
|
||||
bl TaskManager_GetEnvironment
|
||||
add r6, r0, #0x0
|
||||
ldr r1, [r6, #0x0]
|
||||
add r0, r4, #0x0
|
||||
mov r2, #0xb
|
||||
bl ov06_0224CA88
|
||||
ldr r1, [r4, #0x1c]
|
||||
add r7, r0, #0x0
|
||||
ldr r1, [r1, #0x0]
|
||||
mov r0, #0xa
|
||||
lsl r1, r1, #0x10
|
||||
lsr r1, r1, #0x10
|
||||
mov r2, #0x4
|
||||
bl sub_0202914C
|
||||
add r4, #0x98
|
||||
add r1, r0, #0x0
|
||||
ldr r0, [r4, #0x0]
|
||||
mov r2, #0x1
|
||||
bl sub_02028AD4
|
||||
add r0, r6, #0x0
|
||||
bl FreeToHeap
|
||||
ldr r1, _02064280 ; =ov06_0224CAAC
|
||||
add r0, r5, #0x0
|
||||
add r2, r7, #0x0
|
||||
bl TaskManager_Jump
|
||||
mov r0, #0x0
|
||||
pop {r3-r7, pc}
|
||||
nop
|
||||
_02064280: .word ov06_0224CAAC
|
||||
|
||||
thumb_func_start sub_02064284
|
||||
sub_02064284: ; 0x02064284
|
||||
push {r3, lr}
|
||||
ldr r1, [r0, #0x4]
|
||||
ldr r0, [r1, #0x6c]
|
||||
sub r0, r0, #0x2
|
||||
cmp r0, #0x1
|
||||
bhi _02064294
|
||||
mov r0, #0x1
|
||||
pop {r3, pc}
|
||||
_02064294:
|
||||
ldr r0, [r1, #0xc]
|
||||
bl Save_VarsFlags_Get
|
||||
bl Save_VarsFlags_CheckPalParkSysFlag
|
||||
cmp r0, #0x1
|
||||
bne _020642A6
|
||||
mov r0, #0x1
|
||||
b _020642A8
|
||||
_020642A6:
|
||||
mov r0, #0x0
|
||||
_020642A8:
|
||||
cmp r0, #0x1
|
||||
bne _020642B0
|
||||
mov r0, #0x1
|
||||
pop {r3, pc}
|
||||
_020642B0:
|
||||
mov r0, #0x0
|
||||
pop {r3, pc}
|
||||
|
||||
thumb_func_start sub_020642B4
|
||||
sub_020642B4: ; 0x020642B4
|
||||
push {r4-r6, lr}
|
||||
add r6, r0, #0x0
|
||||
ldr r0, [r6, #0x0]
|
||||
bl TaskManager_GetFieldSystem
|
||||
add r5, r0, #0x0
|
||||
ldr r0, [r6, #0x0]
|
||||
bl TaskManager_GetEnvironment
|
||||
ldrh r1, [r6, #0x4]
|
||||
add r4, r0, #0x0
|
||||
ldr r2, [r5, #0xc]
|
||||
lsl r1, r1, #0x18
|
||||
mov r0, #0xb
|
||||
lsr r1, r1, #0x18
|
||||
bl sub_0206439C
|
||||
add r6, r0, #0x0
|
||||
add r0, r5, #0x0
|
||||
bl FieldSystem_LoadFieldOverlay
|
||||
mov r0, #0x72
|
||||
ldr r1, _0206430C ; =ov05_021F6360
|
||||
lsl r0, r0, #0x2
|
||||
str r1, [r4, r0]
|
||||
add r0, #0x30
|
||||
str r6, [r4, r0]
|
||||
mov r0, #0xa
|
||||
strh r0, [r4, #0x2a]
|
||||
ldr r1, [r5, #0x1c]
|
||||
mov r0, #0xb
|
||||
ldr r1, [r1, #0x0]
|
||||
add r2, r0, #0x0
|
||||
lsl r1, r1, #0x10
|
||||
lsr r1, r1, #0x10
|
||||
bl sub_0202914C
|
||||
add r5, #0x98
|
||||
add r1, r0, #0x0
|
||||
ldr r0, [r5, #0x0]
|
||||
mov r2, #0x1
|
||||
bl sub_02028AD4
|
||||
pop {r4-r6, pc}
|
||||
.balign 4
|
||||
_0206430C: .word ov05_021F6360
|
||||
|
||||
thumb_func_start sub_02064310
|
||||
sub_02064310: ; 0x02064310
|
||||
ldr r0, [r0, #0x4]
|
||||
ldr r0, [r0, #0x6c]
|
||||
sub r0, r0, #0x2
|
||||
cmp r0, #0x1
|
||||
bhi _0206431E
|
||||
mov r0, #0x1
|
||||
bx lr
|
||||
_0206431E:
|
||||
mov r0, #0x0
|
||||
bx lr
|
||||
.balign 4
|
||||
|
||||
thumb_func_start sub_02064324
|
||||
sub_02064324: ; 0x02064324
|
||||
push {r3-r7, lr}
|
||||
add r5, r0, #0x0
|
||||
ldr r0, [r5, #0x0]
|
||||
add r6, r1, #0x0
|
||||
bl TaskManager_GetFieldSystem
|
||||
add r7, r0, #0x0
|
||||
ldr r0, [r5, #0x0]
|
||||
bl TaskManager_GetEnvironment
|
||||
add r4, r0, #0x0
|
||||
add r0, r5, #0x0
|
||||
add r1, r6, #0x0
|
||||
bl FieldMove_CreateUseEnvironment
|
||||
add r5, r0, #0x0
|
||||
add r0, r7, #0x0
|
||||
bl FieldSystem_LoadFieldOverlay
|
||||
mov r0, #0x72
|
||||
ldr r1, _0206435C ; =sub_02064360
|
||||
lsl r0, r0, #0x2
|
||||
str r1, [r4, r0]
|
||||
add r0, #0x30
|
||||
str r5, [r4, r0]
|
||||
mov r0, #0xa
|
||||
strh r0, [r4, #0x2a]
|
||||
pop {r3-r7, pc}
|
||||
.balign 4
|
||||
_0206435C: .word sub_02064360
|
||||
|
||||
thumb_func_start sub_02064360
|
||||
sub_02064360: ; 0x02064360
|
||||
push {r3-r6, lr}
|
||||
sub sp, #0x4
|
||||
add r5, r0, #0x0
|
||||
bl TaskManager_GetEnvironment
|
||||
add r4, r0, #0x0
|
||||
add r0, r5, #0x0
|
||||
bl TaskManager_GetFieldSystem
|
||||
add r6, r0, #0x0
|
||||
ldr r1, _02064398 ; =0x000022C4
|
||||
add r0, r5, #0x0
|
||||
mov r2, #0x0
|
||||
bl StartScriptFromMenu
|
||||
mov r2, #0x0
|
||||
str r2, [sp, #0x0]
|
||||
ldrh r1, [r4, #0xc]
|
||||
add r0, r6, #0x0
|
||||
add r3, r2, #0x0
|
||||
bl FieldMove_SetArgs
|
||||
add r0, r4, #0x0
|
||||
bl FieldMove_DeleteUseEnvironment
|
||||
mov r0, #0x0
|
||||
add sp, #0x4
|
||||
pop {r3-r6, pc}
|
||||
.balign 4
|
||||
_02064398: .word 0x000022C4
|
||||
|
|
@ -2508,7 +2508,7 @@
|
|||
.extern MapHeader_IsEscapeRopeAllowed
|
||||
.extern MapHeader_IsFlyAllowed
|
||||
.extern MapHeader_IsBikeAllowed
|
||||
.extern MapHeader_IsOutdoorNotTown
|
||||
.extern MapHeader_IsTeleportAllowed
|
||||
.extern MapHeader_MapIsOnMainMatrix
|
||||
.extern MapHeader_IsCave
|
||||
.extern MapHeader_IsBuilding
|
||||
|
|
@ -4691,7 +4691,7 @@
|
|||
.extern sub_020638BC
|
||||
.extern FieldMove_GetMoveFunc
|
||||
.extern FieldMove_InitCheckData
|
||||
.extern sub_0206439C
|
||||
.extern FieldMove_CreateEnvironment
|
||||
.extern sub_020643C0
|
||||
.extern sub_020643F0
|
||||
.extern sub_020644E4
|
||||
|
|
@ -6954,7 +6954,7 @@
|
|||
.extern ov05_021F6234
|
||||
.extern ov05_021F6240
|
||||
.extern ov05_021F6254
|
||||
.extern ov05_021F6360
|
||||
.extern Task_UseSweetScentInField
|
||||
.extern ov06_02239944
|
||||
.extern ov06_02239AAC
|
||||
.extern ov06_0223BA04
|
||||
|
|
@ -7166,10 +7166,10 @@
|
|||
.extern ov06_0224C8C8
|
||||
.extern ov06_0224C8E8
|
||||
.extern ov06_0224CA58
|
||||
.extern ov06_0224CA88
|
||||
.extern ov06_0224CAAC
|
||||
.extern ov06_0224CB30
|
||||
.extern ov06_0224CB54
|
||||
.extern FieldMoveTask_CreateDigEnvironment
|
||||
.extern Task_FieldDig
|
||||
.extern FieldMoveTask_CreateTeleportEnvironment
|
||||
.extern Task_FieldTeleport
|
||||
.extern ov06_0224CBB0
|
||||
.extern ov06_0224CC24
|
||||
.extern ov06_0224CE30
|
||||
|
|
@ -9168,8 +9168,8 @@
|
|||
.extern ov18_02244DB0
|
||||
.extern ov18_02247544
|
||||
.extern ov18_0224A7C8
|
||||
.extern ov06_0224CAAC
|
||||
.extern ov06_0224CB54
|
||||
.extern Task_FieldDig
|
||||
.extern Task_FieldTeleport
|
||||
.extern gSineTable
|
||||
.extern CARDi_IdentifyBackupCore
|
||||
.extern CARDi_InitCommon
|
||||
|
|
|
|||
|
|
@ -3,8 +3,8 @@
|
|||
.section .text
|
||||
.balign 4, 0
|
||||
|
||||
thumb_func_start ov05_021F6360
|
||||
ov05_021F6360: ; 0x021F6360
|
||||
thumb_func_start Task_UseSweetScentInField
|
||||
Task_UseSweetScentInField: ; 0x021F6360
|
||||
push {r3, r4, r5, r6, r7, lr}
|
||||
add r7, r0, #0
|
||||
bl TaskManager_GetFieldSystem
|
||||
|
|
|
|||
|
|
@ -39524,8 +39524,8 @@ _0224CA78:
|
|||
mov r0, #2
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start ov06_0224CA88
|
||||
ov06_0224CA88: ; 0x0224CA88
|
||||
thumb_func_start FieldMoveTask_CreateDigEnvironment
|
||||
FieldMoveTask_CreateDigEnvironment: ; 0x0224CA88
|
||||
push {r4, r5, r6, lr}
|
||||
add r5, r0, #0
|
||||
add r6, r1, #0
|
||||
|
|
@ -39543,8 +39543,8 @@ ov06_0224CA88: ; 0x0224CA88
|
|||
add r0, r4, #0
|
||||
pop {r4, r5, r6, pc}
|
||||
|
||||
thumb_func_start ov06_0224CAAC
|
||||
ov06_0224CAAC: ; 0x0224CAAC
|
||||
thumb_func_start Task_FieldDig
|
||||
Task_FieldDig: ; 0x0224CAAC
|
||||
push {r3, r4, r5, r6, r7, lr}
|
||||
add r6, r0, #0
|
||||
bl TaskManager_GetFieldSystem
|
||||
|
|
@ -39613,8 +39613,8 @@ _0224CB1E:
|
|||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start ov06_0224CB30
|
||||
ov06_0224CB30: ; 0x0224CB30
|
||||
thumb_func_start FieldMoveTask_CreateTeleportEnvironment
|
||||
FieldMoveTask_CreateTeleportEnvironment: ; 0x0224CB30
|
||||
push {r4, r5, r6, lr}
|
||||
add r5, r0, #0
|
||||
add r6, r1, #0
|
||||
|
|
@ -39632,8 +39632,8 @@ ov06_0224CB30: ; 0x0224CB30
|
|||
add r0, r4, #0
|
||||
pop {r4, r5, r6, pc}
|
||||
|
||||
thumb_func_start ov06_0224CB54
|
||||
ov06_0224CB54: ; 0x0224CB54
|
||||
thumb_func_start Task_FieldTeleport
|
||||
Task_FieldTeleport: ; 0x0224CB54
|
||||
push {r3, r4, r5, r6, r7, lr}
|
||||
add r6, r0, #0
|
||||
bl TaskManager_GetFieldSystem
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@
|
|||
|
||||
#include "field_system.h"
|
||||
|
||||
typedef struct FieldMoveTaskEnvironment FieldMoveTaskEnvironment;
|
||||
|
||||
enum MartType {
|
||||
MART_ITEMS = 0,
|
||||
MART_GOODS,
|
||||
|
|
|
|||
|
|
@ -9,16 +9,18 @@
|
|||
#include "constants/std_script.h"
|
||||
#include "constants/weather.h"
|
||||
|
||||
#include "field_move_environment.h"
|
||||
#include "map_header.h"
|
||||
#include "map_object.h"
|
||||
#include "overlay_06.h"
|
||||
#include "player_data.h"
|
||||
#include "save_local_field_data.h"
|
||||
#include "start_menu.h"
|
||||
#include "unk_0205EC84.h"
|
||||
#include "unk_0205F7A0.h"
|
||||
|
||||
/*static*/ FieldUseMoveEnvironment *FieldMove_CreateUseEnvironment(FieldMoveUseData *useData, const FieldMoveCheckData *checkData);
|
||||
/*static*/ void FieldMove_DeleteUseEnvironment(FieldUseMoveEnvironment *environment);
|
||||
static FieldUseMoveEnvironment *FieldMove_CreateUseEnvironment(FieldMoveUseData *useData, const FieldMoveCheckData *checkData);
|
||||
static void FieldMove_DeleteUseEnvironment(FieldUseMoveEnvironment *environment);
|
||||
static u32 FieldMove_CheckCut(const FieldMoveCheckData *checkData);
|
||||
static void FieldMove_UseCut(FieldMoveUseData *useData, const FieldMoveCheckData *checkData);
|
||||
static BOOL Task_UseCutInField(TaskManager *taskManager);
|
||||
|
|
@ -27,27 +29,36 @@ static void FieldMove_UseFly(FieldMoveUseData *useData, const FieldMoveCheckData
|
|||
static u32 FieldMove_CheckSurf(const FieldMoveCheckData *checkData);
|
||||
static void FieldMove_UseSurf(FieldMoveUseData *useData, const FieldMoveCheckData *checkData);
|
||||
static BOOL Task_UseSurfInField(TaskManager *taskManager);
|
||||
static u32 FieldMove_CheckStrength(const FieldMoveCheckData *checkData);
|
||||
static void FieldMove_UseStrength(FieldMoveUseData *useData, const FieldMoveCheckData *checkData);
|
||||
static BOOL Task_UseStrengthInField(TaskManager *taskManager);
|
||||
static u32 FieldMove_CheckDefog(const FieldMoveCheckData *checkData);
|
||||
static void FieldMove_UseDefog(FieldMoveUseData *useData, const FieldMoveCheckData *checkData);
|
||||
static BOOL Task_UseDefogInField(TaskManager *taskManager);
|
||||
static u32 FieldMove_CheckRockSmash(const FieldMoveCheckData *checkData);
|
||||
static void FieldMove_UseRockSmash(FieldMoveUseData *useData, const FieldMoveCheckData *checkData);
|
||||
static BOOL Task_UseRockSmashInField(TaskManager *taskManager);
|
||||
static u32 FieldMove_CheckWaterfall(const FieldMoveCheckData *checkData);
|
||||
static void FieldMove_UseWaterfall(FieldMoveUseData *useData, const FieldMoveCheckData *checkData);
|
||||
static BOOL Task_UseWaterfallInField(TaskManager *taskManager);
|
||||
static u32 FieldMove_CheckRockClimb(const FieldMoveCheckData *checkData);
|
||||
static void FieldMove_UseRockClimb(FieldMoveUseData *useData, const FieldMoveCheckData *checkData);
|
||||
static BOOL Task_UseRockClimbInField(TaskManager *taskManager);
|
||||
static u32 FieldMove_CheckFlash(const FieldMoveCheckData *checkData);
|
||||
static void FieldMove_UseFlash(FieldMoveUseData *useData, const FieldMoveCheckData *checkData);
|
||||
static BOOL Task_UseFlashInField(TaskManager *taskManager);
|
||||
static u32 FieldMove_CheckTeleport(const FieldMoveCheckData *checkData);
|
||||
static void FieldMove_UseTeleport(FieldMoveUseData *useData, const FieldMoveCheckData *checkData);
|
||||
static BOOL Task_UseTeleportInField(TaskManager *taskManager);
|
||||
static u32 FieldMove_CheckDig(const FieldMoveCheckData *checkData);
|
||||
static void FieldMove_UseDig(FieldMoveUseData *useData, const FieldMoveCheckData *checkData);
|
||||
static BOOL Task_UseDigInField(TaskManager *taskManager);
|
||||
static u32 FieldMove_CheckSweetScent(const FieldMoveCheckData *checkData);
|
||||
static void FieldMove_UseSweetScent(FieldMoveUseData *useData, const FieldMoveCheckData *checkData);
|
||||
static u32 FieldMove_CheckChatter(const FieldMoveCheckData *checkData);
|
||||
static void FieldMove_UseChatter(FieldMoveUseData *useData, const FieldMoveCheckData *checkData);
|
||||
static BOOL Task_UseChatterInField(TaskManager *taskManager);
|
||||
|
||||
extern void sub_02063D18(FieldMoveUseData *useData, const FieldMoveCheckData *checkData);
|
||||
extern u32 sub_02063CE0(const FieldMoveCheckData *checkData);
|
||||
extern void sub_02063DC0(FieldMoveUseData *useData, const FieldMoveCheckData *checkData);
|
||||
extern u32 sub_02063D88(const FieldMoveCheckData *checkData);
|
||||
extern void sub_02063E68(FieldMoveUseData *useData, const FieldMoveCheckData *checkData);
|
||||
extern u32 sub_02063E30(const FieldMoveCheckData *checkData);
|
||||
extern void sub_02063F10(FieldMoveUseData *useData, const FieldMoveCheckData *checkData);
|
||||
extern u32 sub_02063ED8(const FieldMoveCheckData *checkData);
|
||||
extern void sub_02063FCC(FieldMoveUseData *useData, const FieldMoveCheckData *checkData);
|
||||
extern u32 sub_02063F80(const FieldMoveCheckData *checkData);
|
||||
extern void sub_0206405C(FieldMoveUseData *useData, const FieldMoveCheckData *checkData);
|
||||
extern u32 sub_0206403C(const FieldMoveCheckData *checkData);
|
||||
extern void sub_02064134(FieldMoveUseData *useData, const FieldMoveCheckData *checkData);
|
||||
extern u32 sub_020640CC(const FieldMoveCheckData *checkData);
|
||||
extern void sub_020641F0(FieldMoveUseData *useData, const FieldMoveCheckData *checkData);
|
||||
extern u32 sub_020641AC(const FieldMoveCheckData *checkData);
|
||||
extern void sub_020642B4(FieldMoveUseData *useData, const FieldMoveCheckData *checkData);
|
||||
extern u32 sub_02064284(const FieldMoveCheckData *checkData);
|
||||
extern void sub_02064324(FieldMoveUseData *useData, const FieldMoveCheckData *checkData);
|
||||
extern u32 sub_02064310(const FieldMoveCheckData *checkData);
|
||||
extern void FieldSystem_GetFacingObject(FieldSystem *fieldSystem, LocalMapObject **object);
|
||||
extern u16 GetPlayerXCoord(PlayerAvatar *playerAvatar);
|
||||
extern u16 GetPlayerZCoord(PlayerAvatar *playerAvatar);
|
||||
|
|
@ -66,21 +77,28 @@ extern void TownMap_Init(FieldSystem *fieldSystem, TownMapAppData *townMap, u32
|
|||
extern void TownMap_Show(FieldSystem *fieldSystem, TownMapAppData *townMap);
|
||||
extern void StartMenu_SetExitTaskFunc(StartMenuTaskData *startMenu, TaskFunc taskFunc);
|
||||
extern u32 PlayerAvatar_GetState(PlayerAvatar *avatar);
|
||||
extern FieldMoveTaskEnvironment *FieldMoveTask_CreateTeleportEnvironment(FieldSystem *fieldSystem, Pokemon *mon, HeapID heapId);
|
||||
extern BOOL Task_FieldTeleport(TaskManager *taskManager);
|
||||
extern FieldMoveTaskEnvironment *FieldMoveTask_CreateDigEnvironment(FieldSystem *fieldSystem, Pokemon *mon, HeapID heapId);
|
||||
extern BOOL Task_FieldDig(TaskManager *taskManager);
|
||||
extern void *sub_0202914C(u32 param0, u16 mapId, u32 param2);
|
||||
extern void sub_02028AD4(u32 *param0, void *param1, u32 param2);
|
||||
extern BOOL Task_UseSweetScentInField(TaskManager *taskManager);
|
||||
|
||||
static const FieldMoveFuncData sFieldMoveFuncTable[] = {
|
||||
{ FieldMove_UseCut, FieldMove_CheckCut },
|
||||
{ FieldMove_UseFly, FieldMove_CheckFly },
|
||||
{ FieldMove_UseSurf, FieldMove_CheckSurf },
|
||||
{ sub_02063D18, sub_02063CE0 },
|
||||
{ sub_02063DC0, sub_02063D88 },
|
||||
{ sub_02063E68, sub_02063E30 },
|
||||
{ sub_02063F10, sub_02063ED8 },
|
||||
{ sub_02063FCC, sub_02063F80 },
|
||||
{ sub_0206405C, sub_0206403C },
|
||||
{ sub_02064134, sub_020640CC },
|
||||
{ sub_020641F0, sub_020641AC },
|
||||
{ sub_020642B4, sub_02064284 },
|
||||
{ sub_02064324, sub_02064310 }
|
||||
{ FieldMove_UseCut, FieldMove_CheckCut },
|
||||
{ FieldMove_UseFly, FieldMove_CheckFly },
|
||||
{ FieldMove_UseSurf, FieldMove_CheckSurf },
|
||||
{ FieldMove_UseStrength, FieldMove_CheckStrength },
|
||||
{ FieldMove_UseDefog, FieldMove_CheckDefog },
|
||||
{ FieldMove_UseRockSmash, FieldMove_CheckRockSmash },
|
||||
{ FieldMove_UseWaterfall, FieldMove_CheckWaterfall },
|
||||
{ FieldMove_UseRockClimb, FieldMove_CheckRockClimb },
|
||||
{ FieldMove_UseFlash, FieldMove_CheckFlash },
|
||||
{ FieldMove_UseTeleport, FieldMove_CheckTeleport },
|
||||
{ FieldMove_UseDig, FieldMove_CheckDig },
|
||||
{ FieldMove_UseSweetScent, FieldMove_CheckSweetScent },
|
||||
{ FieldMove_UseChatter, FieldMove_CheckChatter }
|
||||
};
|
||||
|
||||
static inline BOOL FieldMove_CheckSafariOrPalPark(const FieldMoveCheckData *checkData) {
|
||||
|
|
@ -91,6 +109,22 @@ static inline BOOL FieldMove_CheckSafariOrPalPark(const FieldMoveCheckData *chec
|
|||
}
|
||||
}
|
||||
|
||||
static inline BOOL FieldMove_CheckPalPark(const FieldMoveCheckData *checkData) {
|
||||
if (Save_VarsFlags_CheckPalParkSysFlag(Save_VarsFlags_Get(checkData->fieldSystem->saveData)) == TRUE) {
|
||||
return TRUE;
|
||||
} else {
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
static inline BOOL FieldMove_CheckFlag(const FieldMoveCheckData *checkData, u32 flag) {
|
||||
if (checkData->flag & flag) {
|
||||
return TRUE;
|
||||
} else {
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
void *FieldMove_GetMoveFunc(FieldMoveFuncType funcType, u16 fieldMoveIndex) {
|
||||
if (funcType == FIELD_MOVE_FUNC_USE) {
|
||||
return sFieldMoveFuncTable[fieldMoveIndex].use;
|
||||
|
|
@ -149,7 +183,7 @@ void FieldMove_InitCheckData(FieldSystem *fieldSystem, FieldMoveCheckData *check
|
|||
}
|
||||
}
|
||||
|
||||
/*static*/ FieldUseMoveEnvironment *FieldMove_CreateUseEnvironment(FieldMoveUseData *useData, const FieldMoveCheckData *checkData) {
|
||||
static FieldUseMoveEnvironment *FieldMove_CreateUseEnvironment(FieldMoveUseData *useData, const FieldMoveCheckData *checkData) {
|
||||
FieldUseMoveEnvironment *environment = AllocFromHeap(HEAP_ID_32, sizeof(FieldUseMoveEnvironment));
|
||||
environment->magic = 0x19740205;
|
||||
environment->facingObject = checkData->facingObject;
|
||||
|
|
@ -157,7 +191,7 @@ void FieldMove_InitCheckData(FieldSystem *fieldSystem, FieldMoveCheckData *check
|
|||
return environment;
|
||||
}
|
||||
|
||||
/*static*/ void FieldMove_DeleteUseEnvironment(FieldUseMoveEnvironment *environment) {
|
||||
static void FieldMove_DeleteUseEnvironment(FieldUseMoveEnvironment *environment) {
|
||||
GF_ASSERT(environment->magic == 0x19740205);
|
||||
FreeToHeap(environment);
|
||||
}
|
||||
|
|
@ -169,7 +203,7 @@ static u32 FieldMove_CheckCut(const FieldMoveCheckData *checkData) {
|
|||
if (!PlayerProfile_TestBadgeFlag(Save_PlayerData_GetProfile(checkData->fieldSystem->saveData), BADGE_FOREST)) {
|
||||
return FIELD_MOVE_RESPONSE_NEED_BADGE;
|
||||
}
|
||||
if (checkData->flag & FIELD_MOVE_CHECK_TREE) {
|
||||
if (FieldMove_CheckFlag(checkData, FIELD_MOVE_CHECK_TREE)) {
|
||||
return FIELD_MOVE_RESPONSE_OK;
|
||||
}
|
||||
|
||||
|
|
@ -237,7 +271,7 @@ static u32 FieldMove_CheckSurf(const FieldMoveCheckData *checkData) {
|
|||
if (PlayerAvatar_GetState(checkData->fieldSystem->playerAvatar) == PLAYER_STATE_SURFING) {
|
||||
return FIELD_MOVE_RESPONSE_ALREADY_SURFING;
|
||||
}
|
||||
if (!(checkData->flag & FIELD_MOVE_CHECK_WATER)) {
|
||||
if (!FieldMove_CheckFlag(checkData, FIELD_MOVE_CHECK_WATER)) {
|
||||
return FIELD_MOVE_RESPONSE_NOT_HERE;
|
||||
}
|
||||
if (Save_VarsFlags_CheckHaveFollower(Save_VarsFlags_Get(checkData->fieldSystem->saveData)) == TRUE) {
|
||||
|
|
@ -264,3 +298,314 @@ static BOOL Task_UseSurfInField(TaskManager *taskManager) {
|
|||
FieldMove_DeleteUseEnvironment(useMoveEnvironment);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static u32 FieldMove_CheckStrength(const FieldMoveCheckData *checkData) {
|
||||
if (checkData->fieldSystem->unk6C == 2 || checkData->fieldSystem->unk6C == 3) {
|
||||
return FIELD_MOVE_RESPONSE_NOT_HERE;
|
||||
}
|
||||
if (!PlayerProfile_TestBadgeFlag(Save_PlayerData_GetProfile(checkData->fieldSystem->saveData), BADGE_MINE)) {
|
||||
return FIELD_MOVE_RESPONSE_NEED_BADGE;
|
||||
}
|
||||
if (FieldMove_CheckFlag(checkData, FIELD_MOVE_CHECK_ROCK)) {
|
||||
return FIELD_MOVE_RESPONSE_OK;
|
||||
}
|
||||
|
||||
return FIELD_MOVE_RESPONSE_NOT_HERE;
|
||||
}
|
||||
|
||||
static void FieldMove_UseStrength(FieldMoveUseData *useData, const FieldMoveCheckData *checkData) {
|
||||
StartMenuTaskData *startMenu = TaskManager_GetEnvironment(useData->taskManager);
|
||||
FieldUseMoveEnvironment *useMoveEnvironment = FieldMove_CreateUseEnvironment(useData, checkData);
|
||||
FieldSystem_LoadFieldOverlay(checkData->fieldSystem);
|
||||
startMenu->exitTaskFunc = Task_UseStrengthInField;
|
||||
startMenu->exitTaskEnvironment = useMoveEnvironment;
|
||||
startMenu->state = START_MENU_STATE_10;
|
||||
}
|
||||
|
||||
static BOOL Task_UseStrengthInField(TaskManager *taskManager) {
|
||||
FieldUseMoveEnvironment *useMoveEnvironment = TaskManager_GetEnvironment(taskManager);
|
||||
FieldSystem *fieldSystem = TaskManager_GetFieldSystem(taskManager);
|
||||
StartScriptFromMenu(taskManager, std_menu_strength, useMoveEnvironment->facingObject);
|
||||
FieldMove_SetArgs(fieldSystem, useMoveEnvironment->useData.partySlot, 0, 0, 0);
|
||||
FieldMove_DeleteUseEnvironment(useMoveEnvironment);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static u32 FieldMove_CheckDefog(const FieldMoveCheckData *checkData) {
|
||||
if (checkData->fieldSystem->unk6C == 2 || checkData->fieldSystem->unk6C == 3) {
|
||||
return FIELD_MOVE_RESPONSE_NOT_HERE;
|
||||
}
|
||||
if (!PlayerProfile_TestBadgeFlag(Save_PlayerData_GetProfile(checkData->fieldSystem->saveData), BADGE_FEN)) {
|
||||
return FIELD_MOVE_RESPONSE_NEED_BADGE;
|
||||
}
|
||||
if (FieldMove_CheckFlag(checkData, FIELD_MOVE_CHECK_DEFOG)) {
|
||||
return FIELD_MOVE_RESPONSE_OK;
|
||||
}
|
||||
|
||||
return FIELD_MOVE_RESPONSE_NOT_HERE;
|
||||
}
|
||||
|
||||
static void FieldMove_UseDefog(FieldMoveUseData *useData, const FieldMoveCheckData *checkData) {
|
||||
StartMenuTaskData *startMenu = TaskManager_GetEnvironment(useData->taskManager);
|
||||
FieldUseMoveEnvironment *useMoveEnvironment = FieldMove_CreateUseEnvironment(useData, checkData);
|
||||
FieldSystem_LoadFieldOverlay(checkData->fieldSystem);
|
||||
startMenu->exitTaskFunc = Task_UseDefogInField;
|
||||
startMenu->exitTaskEnvironment = useMoveEnvironment;
|
||||
startMenu->state = START_MENU_STATE_10;
|
||||
}
|
||||
|
||||
static BOOL Task_UseDefogInField(TaskManager *taskManager) {
|
||||
FieldUseMoveEnvironment *useMoveEnvironment = TaskManager_GetEnvironment(taskManager);
|
||||
FieldSystem *fieldSystem = TaskManager_GetFieldSystem(taskManager);
|
||||
StartScriptFromMenu(taskManager, std_menu_defog, NULL);
|
||||
FieldMove_SetArgs(fieldSystem, useMoveEnvironment->useData.partySlot, 0, 0, 0);
|
||||
FieldMove_DeleteUseEnvironment(useMoveEnvironment);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static u32 FieldMove_CheckRockSmash(const FieldMoveCheckData *checkData) {
|
||||
if (checkData->fieldSystem->unk6C == 2 || checkData->fieldSystem->unk6C == 3) {
|
||||
return FIELD_MOVE_RESPONSE_NOT_HERE;
|
||||
}
|
||||
if (!PlayerProfile_TestBadgeFlag(Save_PlayerData_GetProfile(checkData->fieldSystem->saveData), BADGE_COAL)) {
|
||||
return FIELD_MOVE_RESPONSE_NEED_BADGE;
|
||||
}
|
||||
if (FieldMove_CheckFlag(checkData, FIELD_MOVE_CHECK_BREAKROCK)) {
|
||||
return FIELD_MOVE_RESPONSE_OK;
|
||||
}
|
||||
|
||||
return FIELD_MOVE_RESPONSE_NOT_HERE;
|
||||
}
|
||||
|
||||
static void FieldMove_UseRockSmash(FieldMoveUseData *useData, const FieldMoveCheckData *checkData) {
|
||||
StartMenuTaskData *startMenu = TaskManager_GetEnvironment(useData->taskManager);
|
||||
FieldUseMoveEnvironment *useMoveEnvironment = FieldMove_CreateUseEnvironment(useData, checkData);
|
||||
FieldSystem_LoadFieldOverlay(checkData->fieldSystem);
|
||||
startMenu->exitTaskFunc = Task_UseRockSmashInField;
|
||||
startMenu->exitTaskEnvironment = useMoveEnvironment;
|
||||
startMenu->state = START_MENU_STATE_10;
|
||||
}
|
||||
|
||||
static BOOL Task_UseRockSmashInField(TaskManager *taskManager) {
|
||||
FieldUseMoveEnvironment *useMoveEnvironment = TaskManager_GetEnvironment(taskManager);
|
||||
FieldSystem *fieldSystem = TaskManager_GetFieldSystem(taskManager);
|
||||
StartScriptFromMenu(taskManager, std_menu_rock_smash, useMoveEnvironment->facingObject);
|
||||
FieldMove_SetArgs(fieldSystem, useMoveEnvironment->useData.partySlot, 0, 0, 0);
|
||||
FieldMove_DeleteUseEnvironment(useMoveEnvironment);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static u32 FieldMove_CheckWaterfall(const FieldMoveCheckData *checkData) {
|
||||
if (checkData->fieldSystem->unk6C == 2 || checkData->fieldSystem->unk6C == 3) {
|
||||
return FIELD_MOVE_RESPONSE_NOT_HERE;
|
||||
}
|
||||
if (!PlayerProfile_TestBadgeFlag(Save_PlayerData_GetProfile(checkData->fieldSystem->saveData), BADGE_BEACON)) {
|
||||
return FIELD_MOVE_RESPONSE_NEED_BADGE;
|
||||
}
|
||||
if (FieldMove_CheckFlag(checkData, FIELD_MOVE_CHECK_WATERFALL)) {
|
||||
return FIELD_MOVE_RESPONSE_OK;
|
||||
}
|
||||
|
||||
return FIELD_MOVE_RESPONSE_NOT_HERE;
|
||||
}
|
||||
|
||||
static void FieldMove_UseWaterfall(FieldMoveUseData *useData, const FieldMoveCheckData *checkData) {
|
||||
StartMenuTaskData *startMenu = TaskManager_GetEnvironment(useData->taskManager);
|
||||
FieldUseMoveEnvironment *useMoveEnvironment = FieldMove_CreateUseEnvironment(useData, checkData);
|
||||
FieldSystem_LoadFieldOverlay(checkData->fieldSystem);
|
||||
startMenu->exitTaskFunc = Task_UseWaterfallInField;
|
||||
startMenu->exitTaskEnvironment = useMoveEnvironment;
|
||||
startMenu->state = START_MENU_STATE_10;
|
||||
}
|
||||
|
||||
static BOOL Task_UseWaterfallInField(TaskManager *taskManager) {
|
||||
FieldUseMoveEnvironment *useMoveEnvironment = TaskManager_GetEnvironment(taskManager);
|
||||
FieldSystem *fieldSystem = TaskManager_GetFieldSystem(taskManager);
|
||||
StartScriptFromMenu(taskManager, std_menu_waterfall, NULL);
|
||||
FieldMove_SetArgs(fieldSystem, useMoveEnvironment->useData.partySlot, 0, 0, 0);
|
||||
FieldMove_DeleteUseEnvironment(useMoveEnvironment);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static u32 FieldMove_CheckRockClimb(const FieldMoveCheckData *checkData) {
|
||||
if (checkData->fieldSystem->unk6C == 2 || checkData->fieldSystem->unk6C == 3) {
|
||||
return FIELD_MOVE_RESPONSE_NOT_HERE;
|
||||
}
|
||||
if (!PlayerProfile_TestBadgeFlag(Save_PlayerData_GetProfile(checkData->fieldSystem->saveData), BADGE_ICICLE)) {
|
||||
return FIELD_MOVE_RESPONSE_NEED_BADGE;
|
||||
}
|
||||
if (!FieldMove_CheckFlag(checkData, FIELD_MOVE_CHECK_ROCKCLIMB)) {
|
||||
return FIELD_MOVE_RESPONSE_NOT_HERE;
|
||||
}
|
||||
if (Save_VarsFlags_CheckHaveFollower(Save_VarsFlags_Get(checkData->fieldSystem->saveData)) == TRUE) {
|
||||
return FIELD_MOVE_RESPONSE_HAVE_FOLLOWER;
|
||||
}
|
||||
|
||||
return FIELD_MOVE_RESPONSE_OK;
|
||||
}
|
||||
|
||||
static void FieldMove_UseRockClimb(FieldMoveUseData *useData, const FieldMoveCheckData *checkData) {
|
||||
StartMenuTaskData *startMenu = TaskManager_GetEnvironment(useData->taskManager);
|
||||
FieldUseMoveEnvironment *useMoveEnvironment = FieldMove_CreateUseEnvironment(useData, checkData);
|
||||
FieldSystem_LoadFieldOverlay(checkData->fieldSystem);
|
||||
startMenu->exitTaskFunc = Task_UseRockClimbInField;
|
||||
startMenu->exitTaskEnvironment = useMoveEnvironment;
|
||||
startMenu->state = START_MENU_STATE_10;
|
||||
}
|
||||
|
||||
static BOOL Task_UseRockClimbInField(TaskManager *taskManager) {
|
||||
FieldUseMoveEnvironment *useMoveEnvironment = TaskManager_GetEnvironment(taskManager);
|
||||
FieldSystem *fieldSystem = TaskManager_GetFieldSystem(taskManager);
|
||||
StartScriptFromMenu(taskManager, std_menu_rock_climb, NULL);
|
||||
FieldMove_SetArgs(fieldSystem, useMoveEnvironment->useData.partySlot, 0, 0, 0);
|
||||
FieldMove_DeleteUseEnvironment(useMoveEnvironment);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static u32 FieldMove_CheckFlash(const FieldMoveCheckData *checkData) {
|
||||
if (checkData->fieldSystem->unk6C == 2 || checkData->fieldSystem->unk6C == 3) {
|
||||
return FIELD_MOVE_RESPONSE_NOT_HERE;
|
||||
}
|
||||
if (FieldMove_CheckFlag(checkData, FIELD_MOVE_CHECK_FLASH)) {
|
||||
return FIELD_MOVE_RESPONSE_OK;
|
||||
}
|
||||
|
||||
return FIELD_MOVE_RESPONSE_NOT_HERE;
|
||||
}
|
||||
|
||||
static void FieldMove_UseFlash(FieldMoveUseData *useData, const FieldMoveCheckData *checkData) {
|
||||
StartMenuTaskData *startMenu = TaskManager_GetEnvironment(useData->taskManager);
|
||||
FieldUseMoveEnvironment *useMoveEnvironment = FieldMove_CreateUseEnvironment(useData, checkData);
|
||||
FieldSystem_LoadFieldOverlay(checkData->fieldSystem);
|
||||
startMenu->exitTaskFunc = Task_UseFlashInField;
|
||||
startMenu->exitTaskEnvironment = useMoveEnvironment;
|
||||
startMenu->state = START_MENU_STATE_10;
|
||||
}
|
||||
|
||||
static BOOL Task_UseFlashInField(TaskManager *taskManager) {
|
||||
FieldUseMoveEnvironment *useMoveEnvironment = TaskManager_GetEnvironment(taskManager);
|
||||
FieldSystem *fieldSystem = TaskManager_GetFieldSystem(taskManager);
|
||||
StartScriptFromMenu(taskManager, std_menu_flash, NULL);
|
||||
FieldMove_SetArgs(fieldSystem, useMoveEnvironment->useData.partySlot, 0, 0, 0);
|
||||
FieldMove_DeleteUseEnvironment(useMoveEnvironment);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static u32 FieldMove_CheckTeleport(const FieldMoveCheckData *checkData) {
|
||||
if (checkData->fieldSystem->unk6C == 2 || checkData->fieldSystem->unk6C == 3) {
|
||||
return FIELD_MOVE_RESPONSE_NOT_HERE;
|
||||
}
|
||||
if (!MapHeader_IsTeleportAllowed(checkData->mapId)) {
|
||||
return FIELD_MOVE_RESPONSE_NOT_HERE;
|
||||
}
|
||||
if (Save_VarsFlags_CheckHaveFollower(Save_VarsFlags_Get(checkData->fieldSystem->saveData)) == TRUE) {
|
||||
return FIELD_MOVE_RESPONSE_HAVE_FOLLOWER;
|
||||
}
|
||||
if (FieldMove_CheckSafariOrPalPark(checkData) == TRUE) {
|
||||
return FIELD_MOVE_RESPONSE_NOT_HERE;
|
||||
}
|
||||
|
||||
return FIELD_MOVE_RESPONSE_OK;
|
||||
}
|
||||
|
||||
static void FieldMove_UseTeleport(FieldMoveUseData *useData, const FieldMoveCheckData *checkData) {
|
||||
FieldSystem *fieldSystem = TaskManager_GetFieldSystem(useData->taskManager);
|
||||
StartMenuTaskData *startMenu = TaskManager_GetEnvironment(useData->taskManager);
|
||||
FieldSystem_LoadFieldOverlay(fieldSystem);
|
||||
FieldMoveEnvironment *fieldMoveEnvironment = FieldMove_CreateEnvironment(HEAP_ID_FIELD, useData->partySlot, fieldSystem->saveData);
|
||||
startMenu->exitTaskFunc = Task_UseTeleportInField;
|
||||
startMenu->exitTaskEnvironment = fieldMoveEnvironment;
|
||||
startMenu->state = START_MENU_STATE_10;
|
||||
}
|
||||
|
||||
static BOOL Task_UseTeleportInField(TaskManager *taskManager) {
|
||||
FieldSystem *fieldSystem = TaskManager_GetFieldSystem(taskManager);
|
||||
FieldMoveEnvironment *fieldMoveEnvironment = TaskManager_GetEnvironment(taskManager);
|
||||
FieldMoveTaskEnvironment *fieldMoveTaskEnvironment = FieldMoveTask_CreateTeleportEnvironment(fieldSystem, fieldMoveEnvironment->mon, HEAP_ID_4);
|
||||
FreeToHeap(fieldMoveEnvironment);
|
||||
TaskManager_Jump(taskManager, Task_FieldTeleport, fieldMoveTaskEnvironment);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static u32 FieldMove_CheckDig(const FieldMoveCheckData *checkData) {
|
||||
if (checkData->fieldSystem->unk6C == 2 || checkData->fieldSystem->unk6C == 3) {
|
||||
return FIELD_MOVE_RESPONSE_NOT_HERE;
|
||||
}
|
||||
if (MapHeader_IsCave(checkData->mapId) != TRUE || MapHeader_IsEscapeRopeAllowed(checkData->mapId) != TRUE) {
|
||||
return FIELD_MOVE_RESPONSE_NOT_HERE;
|
||||
}
|
||||
if (Save_VarsFlags_CheckHaveFollower(Save_VarsFlags_Get(checkData->fieldSystem->saveData)) == TRUE) {
|
||||
return FIELD_MOVE_RESPONSE_HAVE_FOLLOWER;
|
||||
}
|
||||
|
||||
return FIELD_MOVE_RESPONSE_OK;
|
||||
}
|
||||
|
||||
static void FieldMove_UseDig(FieldMoveUseData *useData, const FieldMoveCheckData *checkData) {
|
||||
FieldSystem *fieldSystem = TaskManager_GetFieldSystem(useData->taskManager);
|
||||
StartMenuTaskData *startMenu = TaskManager_GetEnvironment(useData->taskManager);
|
||||
FieldSystem_LoadFieldOverlay(fieldSystem);
|
||||
FieldMoveEnvironment *fieldMoveEnvironment = FieldMove_CreateEnvironment(HEAP_ID_FIELD, useData->partySlot, fieldSystem->saveData);
|
||||
startMenu->exitTaskFunc = Task_UseDigInField;
|
||||
startMenu->exitTaskEnvironment = fieldMoveEnvironment;
|
||||
startMenu->state = START_MENU_STATE_10;
|
||||
}
|
||||
|
||||
static BOOL Task_UseDigInField(TaskManager *taskManager) {
|
||||
FieldSystem *fieldSystem = TaskManager_GetFieldSystem(taskManager);
|
||||
FieldMoveEnvironment *fieldMoveEnvironment = TaskManager_GetEnvironment(taskManager);
|
||||
FieldMoveTaskEnvironment *fieldMoveTaskEnvironment = FieldMoveTask_CreateDigEnvironment(fieldSystem, fieldMoveEnvironment->mon, HEAP_ID_FIELD);
|
||||
sub_02028AD4(fieldSystem->unk98, sub_0202914C(10, fieldSystem->location->mapId, 4), 1);
|
||||
FreeToHeap(fieldMoveEnvironment);
|
||||
TaskManager_Jump(taskManager, Task_FieldDig, fieldMoveTaskEnvironment);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static u32 FieldMove_CheckSweetScent(const FieldMoveCheckData *checkData) {
|
||||
if (checkData->fieldSystem->unk6C == 2 || checkData->fieldSystem->unk6C == 3) {
|
||||
return FIELD_MOVE_RESPONSE_NOT_HERE;
|
||||
}
|
||||
if (FieldMove_CheckPalPark(checkData) == TRUE) {
|
||||
return FIELD_MOVE_RESPONSE_NOT_HERE;
|
||||
}
|
||||
|
||||
return FIELD_MOVE_RESPONSE_OK;
|
||||
}
|
||||
|
||||
static void FieldMove_UseSweetScent(FieldMoveUseData *useData, const FieldMoveCheckData *checkData) {
|
||||
FieldSystem *fieldSystem = TaskManager_GetFieldSystem(useData->taskManager);
|
||||
StartMenuTaskData *startMenu = TaskManager_GetEnvironment(useData->taskManager);
|
||||
FieldMoveEnvironment *fieldMoveEnvironment = FieldMove_CreateEnvironment(HEAP_ID_FIELD, useData->partySlot, fieldSystem->saveData);
|
||||
FieldSystem_LoadFieldOverlay(fieldSystem);
|
||||
startMenu->exitTaskFunc = Task_UseSweetScentInField;
|
||||
startMenu->exitTaskEnvironment = fieldMoveEnvironment;
|
||||
startMenu->state = START_MENU_STATE_10;
|
||||
sub_02028AD4(fieldSystem->unk98, sub_0202914C(11, fieldSystem->location->mapId, 11), 1);
|
||||
}
|
||||
|
||||
static u32 FieldMove_CheckChatter(const FieldMoveCheckData *checkData) {
|
||||
if (checkData->fieldSystem->unk6C == 2 || checkData->fieldSystem->unk6C == 3) {
|
||||
return FIELD_MOVE_RESPONSE_NOT_HERE;
|
||||
}
|
||||
|
||||
return FIELD_MOVE_RESPONSE_OK;
|
||||
}
|
||||
|
||||
static void FieldMove_UseChatter(FieldMoveUseData *useData, const FieldMoveCheckData *checkData) {
|
||||
FieldSystem *fieldSystem = TaskManager_GetFieldSystem(useData->taskManager);
|
||||
StartMenuTaskData *startMenu = TaskManager_GetEnvironment(useData->taskManager);
|
||||
FieldUseMoveEnvironment *useMoveEnvironment = FieldMove_CreateUseEnvironment(useData, checkData);
|
||||
FieldSystem_LoadFieldOverlay(fieldSystem);
|
||||
startMenu->exitTaskFunc = Task_UseChatterInField;
|
||||
startMenu->exitTaskEnvironment = useMoveEnvironment;
|
||||
startMenu->state = START_MENU_STATE_10;
|
||||
}
|
||||
|
||||
static BOOL Task_UseChatterInField(TaskManager *taskManager) {
|
||||
FieldUseMoveEnvironment *useMoveEnvironment = TaskManager_GetEnvironment(taskManager);
|
||||
FieldSystem *fieldSystem = TaskManager_GetFieldSystem(taskManager);
|
||||
StartScriptFromMenu(taskManager, std_menu_chatter, NULL);
|
||||
FieldMove_SetArgs(fieldSystem, useMoveEnvironment->useData.partySlot, 0, 0, 0);
|
||||
FieldMove_DeleteUseEnvironment(useMoveEnvironment);
|
||||
return FALSE;
|
||||
}
|
||||
|
|
|
|||
14
arm9/src/field_move_environment.c
Normal file
14
arm9/src/field_move_environment.c
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
#include "field_move_environment.h"
|
||||
|
||||
#include "global.h"
|
||||
|
||||
#include "heap.h"
|
||||
#include "party.h"
|
||||
#include "save.h"
|
||||
|
||||
FieldMoveEnvironment *FieldMove_CreateEnvironment(HeapID heapId, u8 slotNo, SaveData *saveData) {
|
||||
FieldMoveEnvironment *environment = AllocFromHeapAtEnd(heapId, sizeof(FieldMoveEnvironment));
|
||||
environment->mon = Party_GetMonByIndex(SaveArray_Party_Get(saveData), slotNo);
|
||||
environment->moveData = NULL;
|
||||
return environment;
|
||||
}
|
||||
|
|
@ -751,7 +751,7 @@ u8 MapHeader_GetMapType(u32 mapno) {
|
|||
return sMapHeaders[mapno].map_type;
|
||||
}
|
||||
|
||||
BOOL MapHeader_IsOutdoorNotTown(u32 mapno) {
|
||||
BOOL MapHeader_IsTeleportAllowed(u32 mapno) {
|
||||
if (!MapHeader_IsFlyAllowed(mapno)) {
|
||||
return FALSE;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,17 +0,0 @@
|
|||
#include "unk_0206439C.h"
|
||||
|
||||
#include "global.h"
|
||||
|
||||
#include "heap.h"
|
||||
#include "party.h"
|
||||
#include "save.h"
|
||||
|
||||
UnkStruct_0206439C *sub_0206439C(HeapID heapId, u8 mon_idx, SaveData *save) {
|
||||
UnkStruct_0206439C *ret = AllocFromHeapAtEnd(heapId, sizeof(UnkStruct_0206439C));
|
||||
Party *party = SaveArray_Party_Get(save);
|
||||
|
||||
ret->pokemon = Party_GetMonByIndex(party, mon_idx);
|
||||
ret->unk4 = NULL;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
@ -1,7 +1,15 @@
|
|||
#ifndef POKEDIAMOND_CONSTANTS_STD_SCRIPT_H
|
||||
#define POKEDIAMOND_CONSTANTS_STD_SCRIPT_H
|
||||
|
||||
#define std_menu_cut 10008
|
||||
#define std_menu_surf 10012
|
||||
#define std_menu_chatter 8900
|
||||
|
||||
#define std_menu_cut 10008
|
||||
#define std_menu_rock_smash 10009
|
||||
#define std_menu_strength 10010
|
||||
#define std_menu_rock_climb 10011
|
||||
#define std_menu_surf 10012
|
||||
#define std_menu_waterfall 10013
|
||||
#define std_menu_defog 10014
|
||||
#define std_menu_flash 10015
|
||||
|
||||
#endif // POKEDIAMOND_CONSTANTS_STD_SCRIPT_H
|
||||
|
|
|
|||
19
include/field_move_environment.h
Normal file
19
include/field_move_environment.h
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
#ifndef POKEDIAMOND_FIELD_MOVE_ENVIRONMENT_H
|
||||
#define POKEDIAMOND_FIELD_MOVE_ENVIRONMENT_H
|
||||
|
||||
#include "heap.h"
|
||||
#include "pokemon.h"
|
||||
#include "save.h"
|
||||
|
||||
typedef struct FieldMoveData {
|
||||
u32 partySlot;
|
||||
} FieldMoveData;
|
||||
|
||||
typedef struct FieldMoveEnvironment {
|
||||
Pokemon *mon;
|
||||
FieldMoveData *moveData;
|
||||
} FieldMoveEnvironment;
|
||||
|
||||
FieldMoveEnvironment *FieldMove_CreateEnvironment(HeapID heapId, u8 slotNo, SaveData *saveData);
|
||||
|
||||
#endif // POKEDIAMOND_FIELD_MOVE_ENVIRONMENT_H
|
||||
|
|
@ -44,7 +44,7 @@ u8 MapHeader_IsEscapeRopeAllowed(u32 mapno);
|
|||
u8 MapHeader_IsFlyAllowed(u32 mapno);
|
||||
u8 MapHeader_IsBikeAllowed(u32 mapno);
|
||||
u8 MapHeader_GetMapType(u32 mapno);
|
||||
BOOL MapHeader_IsOutdoorNotTown(u32 mapno);
|
||||
BOOL MapHeader_IsTeleportAllowed(u32 mapno);
|
||||
BOOL MapHeader_MapIsOnMainMatrix(u32 mapno);
|
||||
BOOL MapHeader_IsPokemonCenter(u32 mapno);
|
||||
BOOL MapHeader_IsCave(u32 mapno);
|
||||
|
|
|
|||
|
|
@ -39,8 +39,4 @@ typedef struct StartMenuTaskData {
|
|||
u8 filler3[0x4];
|
||||
} StartMenuTaskData;
|
||||
|
||||
typedef struct FieldMoveData {
|
||||
u32 partySlot;
|
||||
} FieldMoveData;
|
||||
|
||||
#endif // POKEDIAMOND_START_MENU_H
|
||||
|
|
|
|||
|
|
@ -1,15 +0,0 @@
|
|||
#ifndef POKEDIAMOND_UNK_0206439C_H
|
||||
#define POKEDIAMOND_UNK_0206439C_H
|
||||
|
||||
#include "heap.h"
|
||||
#include "pokemon.h"
|
||||
#include "save.h"
|
||||
|
||||
typedef struct UnkStruct_0206439C {
|
||||
Pokemon *pokemon;
|
||||
void *unk4;
|
||||
} UnkStruct_0206439C;
|
||||
|
||||
UnkStruct_0206439C *sub_0206439C(HeapID heapId, u8 mon_idx, SaveData *save);
|
||||
|
||||
#endif
|
||||
2
m2ctx.sh
2
m2ctx.sh
|
|
@ -4,7 +4,7 @@ OUT_FILE=ctx.c
|
|||
|
||||
GCC=gcc
|
||||
FLAGS="-E -P -dD -undef"
|
||||
INCLUDES="-Iinclude -Iinclude/constants -Iinclude/nitro -Iinclude-mw -Ifiles -Iarm9/lib/NitroSDK/include -Iarm9/lib/MSL_C/include -Iarm9/lib/libnns/include -Iarm9/overlays/21/include -Iarm9/overlays/52/include -Iarm9/overlays/59/include"
|
||||
INCLUDES="-Iinclude -Iinclude/constants -Iinclude/nitro -Iinclude-mw -Ifiles -Iarm9/lib/NitroSDK/include -Iarm9/lib/MSL_C/include -Iarm9/lib/libnns/include -Iarm9/overlays/06/include -Iarm9/overlays/21/include -Iarm9/overlays/52/include -Iarm9/overlays/59/include"
|
||||
DEFINES="-DDIAMOND"
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user