From 85130570ed91771d0999f068e8d4e6824613ce19 Mon Sep 17 00:00:00 2001 From: Pokeglitch Date: Fri, 15 Jun 2018 20:22:20 -0400 Subject: Disassembled Fly and Dig --- engine/events/overworld.asm | 191 ++++++++++++++++++++++++++++++++++++-- engine/overworld/spawn_points.asm | 4 +- 2 files changed, 183 insertions(+), 12 deletions(-) (limited to 'engine') diff --git a/engine/events/overworld.asm b/engine/events/overworld.asm index a5b4553..ed86431 100755 --- a/engine/events/overworld.asm +++ b/engine/events/overworld.asm @@ -1,16 +1,187 @@ INCLUDE "constants.asm" -SECTION "TeleportFunction", ROMX[$52db], BANK[$03] +SECTION "FlyFunction", ROMX[$51af], BANK[$03] +; Sets wFieldMoveSucceeded to $f if successful, $0 if not +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_FLAG, a + jr nz, .finish + ld hl, .DigTable + call CallJumptable + jr .loop + +; Finish by returning only the low nibble +.finish + and $FF - SCRIPT_FINISHED_MASK + ld [wFieldMoveSucceeded], a + ret + +.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, a + bit SCRIPT_FINISHED_FLAG, a jr nz, .finish - ld hl, .JumpTable + ld hl, .TeleportTable call CallJumptable jr .loop @@ -20,7 +191,7 @@ TeleportFunction: ; 03:52db ld [wFieldMoveSucceeded], a ret -.JumpTable +.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 diff --git a/engine/overworld/spawn_points.asm b/engine/overworld/spawn_points.asm index 81b04b0..ca654fd 100755 --- a/engine/overworld/spawn_points.asm +++ b/engine/overworld/spawn_points.asm @@ -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 -- cgit v1.2.3