summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPokeglitch <pokeglitchx@gmail.com>2018-06-15 20:22:20 -0400
committerPokeglitch <pokeglitchx@gmail.com>2018-06-15 20:22:20 -0400
commit85130570ed91771d0999f068e8d4e6824613ce19 (patch)
tree68c314cfbfb9595d26267cab2d9f36d2ef2fa1fa
parent5b559fd49b42e0c959f5a6373640b0734e3fd602 (diff)
Disassembled Fly and Dig
-rw-r--r--constants/map_data_constants.asm2
-rwxr-xr-xconstants/script_constants.asm9
-rwxr-xr-xengine/events/overworld.asm191
-rwxr-xr-xengine/overworld/spawn_points.asm4
-rw-r--r--shim.sym1
-rw-r--r--wram.asm11
6 files changed, 200 insertions, 18 deletions
diff --git a/constants/map_data_constants.asm b/constants/map_data_constants.asm
index ac9908a..e711e1d 100644
--- a/constants/map_data_constants.asm
+++ b/constants/map_data_constants.asm
@@ -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 \ No newline at end of file
diff --git a/constants/script_constants.asm b/constants/script_constants.asm
index 3aa19b5..57dfbdf 100755
--- a/constants/script_constants.asm
+++ b/constants/script_constants.asm
@@ -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 \ No newline at end of file
+SCRIPT_FINISHED_MASK EQU 1 << SCRIPT_FINISHED_FLAG
+SCRIPT_SUCCESS EQU $f
+SCRIPT_FAIL EQU 0
+SCRIPT_FINISHED EQU $FF \ No newline at end of file
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
diff --git a/shim.sym b/shim.sym
index 5b6e8f7..ae15054 100644
--- a/shim.sym
+++ b/shim.sym
@@ -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
diff --git a/wram.asm b/wram.asm
index cc5092e..975a8ea 100644
--- a/wram.asm
+++ b/wram.asm
@@ -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]