Disassembled Fly and Dig

This commit is contained in:
Pokeglitch 2018-06-15 20:22:20 -04:00
parent 5b559fd49b
commit 85130570ed
6 changed files with 201 additions and 19 deletions

View File

@ -12,5 +12,7 @@
const_value = -1
const SPAWN_N_A
NUM_SPAWNS EQU 18
; size of each spawn point data
SPAWN_POINT_SIZE EQU 4

View File

@ -7,9 +7,10 @@
const SCRIPT_ID_03 ; 03
; Flags
SCRIPT_FINISHED EQU 7
SCRIPT_FINISHED_FLAG EQU 7
; Masks/Return Values
SCRIPT_FINISHED_MASK = 1 << SCRIPT_FINISHED
SCRIPT_SUCCESS EQU SCRIPT_FINISHED_MASK | $f
SCRIPT_FAIL EQU SCRIPT_FINISHED_MASK | 0
SCRIPT_FINISHED_MASK EQU 1 << SCRIPT_FINISHED_FLAG
SCRIPT_SUCCESS EQU $f
SCRIPT_FAIL EQU 0
SCRIPT_FINISHED EQU $FF

View File

@ -1,16 +1,112 @@
INCLUDE "constants.asm"
SECTION "TeleportFunction", ROMX[$52db], BANK[$03]
SECTION "FlyFunction", ROMX[$51af], BANK[$03]
; Sets wFieldMoveSucceeded to $f if successful, $0 if not
TeleportFunction: ; 03:52db
FlyFunction: ; 03:51af
call .reset
.loop
call .next
jr nc, .loop
ld [wFieldMoveSucceeded], a
ret
.reset
xor a
ld [wFieldMoveScriptID], a
ret
.next
ld a, [wFieldMoveScriptID]
ld hl, .FlyTable
jp CallJumptable
.FlyTable ; 03:51c9
dw .TryFly
dw .ShowFlyMap
dw .DoFly
dw .FailFly
.TryFly: ; 03:51d1
call GetMapEnvironment
cp TOWN
jr z, .success
cp ROUTE
jr z, .success
ld a, SCRIPT_ID_03
ld [wFieldMoveScriptID], a
xor a
ret
.success: ; 03:51e3
ld a, SCRIPT_ID_01
ld [wFieldMoveScriptID], a
xor a
ret
.ShowFlyMap: ; 03:51ea
call LoadStandardMenuHeader
call ClearSprites
callab FlyMap
call ClearPalettes
call GetMemSGBLayout
call ExitMenu
ld a, [wFlyDestination]
cp -1
jr z, .dont_fly
cp NUM_SPAWNS
jr nc, .dont_fly
ld a, SCRIPT_ID_02
ld [wFieldMoveScriptID], a
xor a
ret
.dont_fly: ; 03:5213
call UpdateTimePals
ld a, SCRIPT_FINISHED
ld [wFieldMoveScriptID], a
scf
ld a, SCRIPT_FAIL
ret
.DoFly: ; 03:521f
ld a, [wFlyDestination]
inc a
ld [wDefaultSpawnPoint], a
ldh a, [hROMBank]
ld hl, .FlyScript
call QueueScript
ld a, -1
ld [wFieldMoveScriptID], a
scf
ld a, SCRIPT_SUCCESS
ret
.FailFly: ; 03:5237
ld hl, .Text_CantUseFlyHere
call MenuTextBoxBackup
ld a, SCRIPT_FINISHED
ld [wFieldMoveScriptID], a
scf
ld a, SCRIPT_FAIL
ret
.Text_CantUseFlyHere: ; 03:5246
text "ここでは つかえません!"
prompt
.FlyScript: ; 03:5254
ld a, MAPSETUP_TELEPORT
ldh [hMapEntryMethod], a
jpab Functionfcc24
; Sets wFieldMoveSucceeded to $f if successful, $0 if not
DigFunction: ; 03:5260
call .reset
.loop
ld a, [wFieldMoveScriptID]
bit SCRIPT_FINISHED, a
bit SCRIPT_FINISHED_FLAG, a
jr nz, .finish
ld hl, .JumpTable
ld hl, .DigTable
call CallJumptable
jr .loop
@ -20,7 +116,82 @@ TeleportFunction: ; 03:52db
ld [wFieldMoveSucceeded], a
ret
.JumpTable
.reset
xor a
ld [wFieldMoveScriptID], a
ret
.DigTable: ; 03:527D
dw .CheckCanDig
dw .DoDig
dw .FailDig
.CheckCanDig: ; 03:5283
call GetMapEnvironment
cp INDOOR
jr z, .fail
cp CAVE
jr z, .fail
ld a, SCRIPT_ID_02
ld [wFieldMoveScriptID], a
ret
.fail
ld a, SCRIPT_ID_01
ld [wFieldMoveScriptID], a
ret
.DoDig: ; 03:529a
ld hl, .DigScript
ldh a, [hROMBank]
call QueueScript
ld a, SCRIPT_FINISHED_MASK | SCRIPT_SUCCESS
ld [wFieldMoveScriptID], a
ret
.FailDig: ; 03:52a8
ld hl, .Text_CantUseDigHere
call MenuTextBoxBackup
ld a, SCRIPT_FINISHED_MASK | SCRIPT_FAIL
ld [wFieldMoveScriptID], a
ret
.Text_CantUseDigHere: ; 03:52b4
text "ここでは つかえません!"
prompt
.DigScript: ; 03:52c2
ld hl, wDigWarpNumber
ld de, wNextWarp
ld bc, 3
call CopyBytes
ld a, MAPSETUP_WARP
ldh [hMapEntryMethod], a
jpab Functionfcc24
EmptyFunctiond2da: ; 03:52da
ret
; Sets wFieldMoveSucceeded to $f if successful, $0 if not
TeleportFunction: ; 03:52db
xor a
ld [wFieldMoveScriptID], a
.loop
ld a, [wFieldMoveScriptID]
bit SCRIPT_FINISHED_FLAG, a
jr nz, .finish
ld hl, .TeleportTable
call CallJumptable
jr .loop
; Finish by returning only the low nibble
.finish
and $FF - SCRIPT_FINISHED_MASK
ld [wFieldMoveSucceeded], a
ret
.TeleportTable
dw .TryTeleport
dw .DoTeleport
dw .FailTeleport
@ -49,12 +220,12 @@ TeleportFunction: ; 03:52db
jr c, .not_spawn
ld hl, .Text_CantFindDestination
call MenuTextBoxBackup
ld a, SCRIPT_FAIL
ld a, SCRIPT_FINISHED_MASK | SCRIPT_FAIL
ld [wFieldMoveScriptID], a
ret
.not_spawn
ld a, c
ld [wDefaultSpawnpoint], a
ld [wDefaultSpawnPoint], a
ld a, SCRIPT_ID_01
ld [wFieldMoveScriptID], a
ret
@ -68,19 +239,19 @@ TeleportFunction: ; 03:52db
ldh a, [hROMBank]
ld hl, .TeleportScript
call QueueScript
ld a, SCRIPT_SUCCESS
ld a, SCRIPT_FINISHED_MASK | SCRIPT_SUCCESS
ld [wFieldMoveScriptID], a
ret
.FailTeleport: ; 03:5359
ld hl, .Text_CantUseHere
ld hl, .Text_CantUseTeleportHere
call MenuTextBoxBackup
ld a, SCRIPT_FAIL
ld a, SCRIPT_FINISHED_MASK | SCRIPT_FAIL
ld [wFieldMoveScriptID], a
scf
ret
.Text_CantUseHere: ; 03:5366
.Text_CantUseTeleportHere: ; 03:5366
text "ここでは つかえません!"
para
done

View File

@ -3,10 +3,10 @@ INCLUDE "constants.asm"
SECTION "LoadSpawnPoint", ROMX[$4791], BANK[$03]
LoadSpawnPoint: ; 03:4791
; loads the spawn point in wDefaultSpawnpoint
; loads the spawn point in wDefaultSpawnPoint
push hl
push de
ld a, [wDefaultSpawnpoint]
ld a, [wDefaultSpawnPoint]
and a
jr z, .skip
dec a

View File

@ -48,6 +48,7 @@
02:43E8 Function83e8
02:45DF QueueFollowerFirstStep
02:462E Function862e
02:46CB FlyMap
02:4786 Function8786
02:4856 DecompTownMapTilemap
02:48DA DecompTownMapTilemap.tilemap

View File

@ -228,7 +228,10 @@ wCurSpecies:: db ; cb5b
wNamedObjectTypeBuffer:: db ; cb5c
SECTION "CB5E", WRAM0[$CB5E]
wJumptableIndex:: ds 4
wJumptableIndex:: db ; cb5e
wFlyDestination:: db ; cb5f
ds 2
SECTION "CB62", WRAM0[$CB62]
@ -331,7 +334,7 @@ wcc38::
wTitleSequenceOpeningType:: ; cc38
db
wDefaultSpawnpoint:: ; cc39
wDefaultSpawnPoint:: ; cc39
db
wMovementBufferCount:: db ; cc3a
@ -713,6 +716,10 @@ wJoypadFlags:: db ; d4ab
; |\------- joypad sync mtx
; \-------- joypad disabled
SECTION "wDigWarpNumber", WRAM0[$D4B2]
wDigWarpNumber:: db ; d4b2
SECTION "Warp data", WRAM0[$D514]