diff options
author | Pokeglitch <pokeglitchx@gmail.com> | 2018-06-15 20:22:20 -0400 |
---|---|---|
committer | Pokeglitch <pokeglitchx@gmail.com> | 2018-06-15 20:22:20 -0400 |
commit | 85130570ed91771d0999f068e8d4e6824613ce19 (patch) | |
tree | 68c314cfbfb9595d26267cab2d9f36d2ef2fa1fa | |
parent | 5b559fd49b42e0c959f5a6373640b0734e3fd602 (diff) |
Disassembled Fly and Dig
-rw-r--r-- | constants/map_data_constants.asm | 2 | ||||
-rwxr-xr-x | constants/script_constants.asm | 9 | ||||
-rwxr-xr-x | engine/events/overworld.asm | 191 | ||||
-rwxr-xr-x | engine/overworld/spawn_points.asm | 4 | ||||
-rw-r--r-- | shim.sym | 1 | ||||
-rw-r--r-- | wram.asm | 11 |
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
@@ -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 @@ -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] |