mirror of
https://gitlab.com/xCrystal/pokecrystal-board.git
synced 2024-11-16 11:27:33 -08:00
1815 lines
26 KiB
NASM
1815 lines
26 KiB
NASM
FieldMoveJumptableReset:
|
|
xor a
|
|
ld hl, wFieldMoveData
|
|
ld bc, wFieldMoveDataEnd - wFieldMoveData
|
|
call ByteFill
|
|
ret
|
|
|
|
FieldMoveJumptable:
|
|
ld a, [wFieldMoveJumptableIndex]
|
|
rst JumpTable
|
|
ld [wFieldMoveJumptableIndex], a
|
|
bit 7, a
|
|
jr nz, .okay
|
|
and a
|
|
ret
|
|
|
|
.okay
|
|
and $7f
|
|
scf
|
|
ret
|
|
|
|
GetPartyNick:
|
|
; write wCurPartyMon nickname to wStringBuffer1-3
|
|
ld hl, wPartyMonNicknames
|
|
ld a, BOXMON
|
|
ld [wMonType], a
|
|
ld a, [wCurPartyMon]
|
|
call GetNick
|
|
call CopyName1
|
|
; copy text from wStringBuffer2 to wStringBuffer3
|
|
ld de, wStringBuffer2
|
|
ld hl, wStringBuffer3
|
|
call CopyName2
|
|
ret
|
|
|
|
CheckEngineFlag:
|
|
; Check engine flag de
|
|
; Return carry if flag is not set
|
|
ld b, CHECK_FLAG
|
|
farcall EngineFlagAction
|
|
ld a, c
|
|
and a
|
|
jr nz, .isset
|
|
scf
|
|
ret
|
|
.isset
|
|
xor a
|
|
ret
|
|
|
|
CheckBadge:
|
|
; Check engine flag a (ENGINE_ZEPHYRBADGE thru ENGINE_EARTHBADGE)
|
|
; Display "Badge required" text and return carry if the badge is not owned
|
|
call CheckEngineFlag
|
|
ret nc
|
|
ld hl, .BadgeRequiredText
|
|
call MenuTextboxBackup ; push text to queue
|
|
scf
|
|
ret
|
|
|
|
.BadgeRequiredText:
|
|
text_far _BadgeRequiredText
|
|
text_end
|
|
|
|
CheckPartyMove:
|
|
; Check if a monster in your party has move d.
|
|
|
|
ld e, 0
|
|
xor a
|
|
ld [wCurPartyMon], a
|
|
.loop
|
|
ld c, e
|
|
ld b, 0
|
|
ld hl, wPartySpecies
|
|
add hl, bc
|
|
ld a, [hl]
|
|
and a
|
|
jr z, .no
|
|
cp -1
|
|
jr z, .no
|
|
cp EGG
|
|
jr z, .next
|
|
|
|
ld bc, PARTYMON_STRUCT_LENGTH
|
|
ld hl, wPartyMon1Moves
|
|
ld a, e
|
|
call AddNTimes
|
|
ld b, NUM_MOVES
|
|
.check
|
|
ld a, [hli]
|
|
cp d
|
|
jr z, .yes
|
|
dec b
|
|
jr nz, .check
|
|
|
|
.next
|
|
inc e
|
|
jr .loop
|
|
|
|
.yes
|
|
ld a, e
|
|
ld [wCurPartyMon], a ; which mon has the move
|
|
xor a
|
|
ret
|
|
.no
|
|
scf
|
|
ret
|
|
|
|
FieldMoveFailed:
|
|
ld hl, .CantUseItemText
|
|
call MenuTextboxBackup
|
|
ret
|
|
|
|
.CantUseItemText:
|
|
text_far _CantUseItemText
|
|
text_end
|
|
|
|
CutFunction:
|
|
call FieldMoveJumptableReset
|
|
.loop
|
|
ld hl, .Jumptable
|
|
call FieldMoveJumptable
|
|
jr nc, .loop
|
|
and $7f
|
|
ld [wFieldMoveSucceeded], a
|
|
ret
|
|
|
|
.Jumptable:
|
|
dw .CheckAble
|
|
dw .DoCut
|
|
dw .FailCut
|
|
|
|
.CheckAble:
|
|
ld de, ENGINE_HIVEBADGE
|
|
call CheckBadge
|
|
jr c, .nohivebadge
|
|
call CheckMapForSomethingToCut
|
|
jr c, .nothingtocut
|
|
ld a, $1
|
|
ret
|
|
|
|
.nohivebadge
|
|
ld a, $80
|
|
ret
|
|
|
|
.nothingtocut
|
|
ld a, $2
|
|
ret
|
|
|
|
.DoCut:
|
|
ld hl, Script_CutFromMenu
|
|
call QueueScript
|
|
ld a, $81
|
|
ret
|
|
|
|
.FailCut:
|
|
ld hl, CutNothingText
|
|
call MenuTextboxBackup
|
|
ld a, $80
|
|
ret
|
|
|
|
UseCutText:
|
|
text_far _UseCutText
|
|
text_end
|
|
|
|
CutNothingText:
|
|
text_far _CutNothingText
|
|
text_end
|
|
|
|
CheckMapForSomethingToCut:
|
|
; Does the collision data of the facing tile permit cutting?
|
|
call GetFacingTileCoord
|
|
ld c, a
|
|
push de
|
|
farcall CheckCutCollision
|
|
pop de
|
|
jr nc, .fail
|
|
; Get the location of the current block in wOverworldMapBlocks.
|
|
call GetBlockLocation
|
|
ld c, [hl]
|
|
; See if that block contains something that can be cut.
|
|
push hl
|
|
ld hl, CutTreeBlockPointers
|
|
call CheckOverworldTileArrays
|
|
pop hl
|
|
jr nc, .fail
|
|
; Save the Cut field move data
|
|
ld a, l
|
|
ld [wCutWhirlpoolOverworldBlockAddr], a
|
|
ld a, h
|
|
ld [wCutWhirlpoolOverworldBlockAddr + 1], a
|
|
ld a, b
|
|
ld [wCutWhirlpoolReplacementBlock], a
|
|
ld a, c
|
|
ld [wCutWhirlpoolAnimationType], a
|
|
xor a
|
|
ret
|
|
|
|
.fail
|
|
scf
|
|
ret
|
|
|
|
Script_CutFromMenu:
|
|
reloadmappart
|
|
special UpdateTimePals
|
|
|
|
Script_Cut:
|
|
callasm GetPartyNick
|
|
writetext UseCutText
|
|
reloadmappart
|
|
callasm CutDownTreeOrGrass
|
|
closetext
|
|
end
|
|
|
|
CutDownTreeOrGrass:
|
|
ld hl, wCutWhirlpoolOverworldBlockAddr
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
ld a, [wCutWhirlpoolReplacementBlock]
|
|
ld [hl], a
|
|
xor a
|
|
ldh [hBGMapMode], a
|
|
call OverworldTextModeSwitch
|
|
call UpdateSprites
|
|
call DelayFrame
|
|
ld a, [wCutWhirlpoolAnimationType]
|
|
ld e, a
|
|
farcall OWCutAnimation
|
|
call BufferScreen
|
|
call GetMovementPermissions
|
|
call UpdateSprites
|
|
call DelayFrame
|
|
call LoadStandardFont
|
|
ret
|
|
|
|
CheckOverworldTileArrays:
|
|
; Input: c contains the tile you're facing
|
|
; Output: Replacement tile in b and effect on wild encounters in c, plus carry set.
|
|
; Carry is not set if the facing tile cannot be replaced, or if the tileset
|
|
; does not contain a tile you can replace.
|
|
|
|
; Dictionary lookup for pointer to tile replacement table
|
|
push bc
|
|
ld a, [wMapTileset]
|
|
ld de, 3
|
|
call IsInArray
|
|
pop bc
|
|
jr nc, .nope
|
|
; Load the pointer
|
|
inc hl
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
; Look up the tile you're facing
|
|
ld de, 3
|
|
ld a, c
|
|
call IsInArray
|
|
jr nc, .nope
|
|
; Load the replacement to b
|
|
inc hl
|
|
ld b, [hl]
|
|
; Load the animation type parameter to c
|
|
inc hl
|
|
ld c, [hl]
|
|
scf
|
|
ret
|
|
|
|
.nope
|
|
xor a
|
|
ret
|
|
|
|
INCLUDE "data/collision/field_move_blocks.asm"
|
|
|
|
FlashFunction:
|
|
call .CheckUseFlash
|
|
and $7f
|
|
ld [wFieldMoveSucceeded], a
|
|
ret
|
|
|
|
.CheckUseFlash:
|
|
; Flash
|
|
ld de, ENGINE_ZEPHYRBADGE
|
|
farcall CheckBadge
|
|
jr c, .nozephyrbadge
|
|
push hl
|
|
farcall SpecialAerodactylChamber
|
|
pop hl
|
|
jr c, .useflash
|
|
ld a, [wTimeOfDayPalset]
|
|
cp DARKNESS_PALSET
|
|
jr nz, .notadarkcave
|
|
.useflash
|
|
call UseFlash
|
|
ld a, $81
|
|
ret
|
|
|
|
.notadarkcave
|
|
call FieldMoveFailed
|
|
ld a, $80
|
|
ret
|
|
|
|
.nozephyrbadge
|
|
ld a, $80
|
|
ret
|
|
|
|
UseFlash:
|
|
ld hl, Script_UseFlash
|
|
jp QueueScript
|
|
|
|
Script_UseFlash:
|
|
reloadmappart
|
|
special UpdateTimePals
|
|
writetext UseFlashTextScript
|
|
callasm BlindingFlash
|
|
closetext
|
|
end
|
|
|
|
UseFlashTextScript:
|
|
text_far _BlindingFlashText
|
|
text_asm
|
|
call WaitSFX
|
|
ld de, SFX_FLASH
|
|
call PlaySFX
|
|
call WaitSFX
|
|
ld hl, .BlankText
|
|
ret
|
|
|
|
.BlankText:
|
|
text_end
|
|
|
|
SurfFunction:
|
|
call FieldMoveJumptableReset
|
|
.loop
|
|
ld hl, .Jumptable
|
|
call FieldMoveJumptable
|
|
jr nc, .loop
|
|
and $7f
|
|
ld [wFieldMoveSucceeded], a
|
|
ret
|
|
|
|
.Jumptable:
|
|
dw .TrySurf
|
|
dw .DoSurf
|
|
dw .FailSurf
|
|
dw .AlreadySurfing
|
|
|
|
.TrySurf:
|
|
ld de, ENGINE_FOGBADGE
|
|
call CheckBadge
|
|
jr c, .nofogbadge
|
|
ld hl, wBikeFlags
|
|
bit BIKEFLAGS_ALWAYS_ON_BIKE_F, [hl]
|
|
jr nz, .cannotsurf
|
|
ld a, [wPlayerState]
|
|
cp PLAYER_SURF
|
|
jr z, .alreadyfail
|
|
cp PLAYER_SURF_PIKA
|
|
jr z, .alreadyfail
|
|
call GetFacingTileCoord
|
|
call GetTileCollision
|
|
cp WATER_TILE
|
|
jr nz, .cannotsurf
|
|
call CheckDirection
|
|
jr c, .cannotsurf
|
|
farcall CheckFacingObject
|
|
jr c, .cannotsurf
|
|
ld a, $1
|
|
ret
|
|
.nofogbadge
|
|
ld a, $80
|
|
ret
|
|
.alreadyfail
|
|
ld a, $3
|
|
ret
|
|
.cannotsurf
|
|
ld a, $2
|
|
ret
|
|
|
|
.DoSurf:
|
|
call GetSurfType
|
|
ld [wSurfingPlayerState], a
|
|
call GetPartyNick
|
|
ld hl, SurfFromMenuScript
|
|
call QueueScript
|
|
ld a, $81
|
|
ret
|
|
|
|
.FailSurf:
|
|
ld hl, CantSurfText
|
|
call MenuTextboxBackup
|
|
ld a, $80
|
|
ret
|
|
|
|
.AlreadySurfing:
|
|
ld hl, AlreadySurfingText
|
|
call MenuTextboxBackup
|
|
ld a, $80
|
|
ret
|
|
|
|
SurfFromMenuScript:
|
|
special UpdateTimePals
|
|
|
|
UsedSurfScript:
|
|
writetext UsedSurfText ; "used SURF!"
|
|
waitbutton
|
|
closetext
|
|
|
|
callasm .stubbed_fn
|
|
|
|
readmem wSurfingPlayerState
|
|
writevar VAR_MOVEMENT
|
|
|
|
special UpdatePlayerSprite
|
|
special PlayMapMusic
|
|
; step into the water (slow_step DIR, step_end)
|
|
special SurfStartStep
|
|
applymovement PLAYER, wMovementBuffer
|
|
end
|
|
|
|
.stubbed_fn
|
|
farcall StubbedTrainerRankings_Surf
|
|
ret
|
|
|
|
UsedSurfText:
|
|
text_far _UsedSurfText
|
|
text_end
|
|
|
|
CantSurfText:
|
|
text_far _CantSurfText
|
|
text_end
|
|
|
|
AlreadySurfingText:
|
|
text_far _AlreadySurfingText
|
|
text_end
|
|
|
|
GetSurfType:
|
|
; Surfing on Pikachu uses an alternate sprite.
|
|
; This is done by using a separate movement type.
|
|
|
|
ld a, [wCurPartyMon]
|
|
ld e, a
|
|
ld d, 0
|
|
ld hl, wPartySpecies
|
|
add hl, de
|
|
|
|
ld a, [hl]
|
|
cp PIKACHU
|
|
ld a, PLAYER_SURF_PIKA
|
|
ret z
|
|
ld a, PLAYER_SURF
|
|
ret
|
|
|
|
CheckDirection:
|
|
; Return carry if a tile permission prevents you
|
|
; from moving in the direction you're facing.
|
|
|
|
; Get player direction
|
|
ld a, [wPlayerDirection]
|
|
and %00001100 ; bits 2 and 3 contain direction
|
|
rrca
|
|
rrca
|
|
ld e, a
|
|
ld d, 0
|
|
ld hl, .Directions
|
|
add hl, de
|
|
|
|
; Can you walk in this direction?
|
|
ld a, [wTilePermissions]
|
|
and [hl]
|
|
jr nz, .quit
|
|
xor a
|
|
ret
|
|
|
|
.quit
|
|
scf
|
|
ret
|
|
|
|
.Directions:
|
|
db FACE_DOWN
|
|
db FACE_UP
|
|
db FACE_LEFT
|
|
db FACE_RIGHT
|
|
|
|
TrySurfOW::
|
|
; Checking a tile in the overworld.
|
|
; Return carry if fail is allowed.
|
|
|
|
; Don't ask to surf if already fail.
|
|
ld a, [wPlayerState]
|
|
cp PLAYER_SURF_PIKA
|
|
jr z, .quit
|
|
cp PLAYER_SURF
|
|
jr z, .quit
|
|
|
|
; Must be facing water.
|
|
ld a, [wFacingTileID]
|
|
call GetTileCollision
|
|
cp WATER_TILE
|
|
jr nz, .quit
|
|
|
|
; Check tile permissions.
|
|
call CheckDirection
|
|
jr c, .quit
|
|
|
|
ld de, ENGINE_FOGBADGE
|
|
call CheckEngineFlag
|
|
jr c, .quit
|
|
|
|
ld d, SURF
|
|
call CheckPartyMove
|
|
jr c, .quit
|
|
|
|
ld hl, wBikeFlags
|
|
bit BIKEFLAGS_ALWAYS_ON_BIKE_F, [hl]
|
|
jr nz, .quit
|
|
|
|
call GetSurfType
|
|
ld [wSurfingPlayerState], a
|
|
call GetPartyNick
|
|
|
|
ld a, BANK(AskSurfScript)
|
|
ld hl, AskSurfScript
|
|
call CallScript
|
|
|
|
scf
|
|
ret
|
|
|
|
.quit
|
|
xor a
|
|
ret
|
|
|
|
AskSurfScript:
|
|
opentext
|
|
writetext AskSurfText
|
|
yesorno
|
|
iftrue UsedSurfScript
|
|
closetext
|
|
end
|
|
|
|
AskSurfText:
|
|
text_far _AskSurfText
|
|
text_end
|
|
|
|
FlyFunction:
|
|
call FieldMoveJumptableReset
|
|
.loop
|
|
ld hl, .Jumptable
|
|
call FieldMoveJumptable
|
|
jr nc, .loop
|
|
and $7f
|
|
ld [wFieldMoveSucceeded], a
|
|
ret
|
|
|
|
.Jumptable:
|
|
dw .TryFly
|
|
dw .DoFly
|
|
dw .FailFly
|
|
|
|
.TryFly:
|
|
; Fly
|
|
ld de, ENGINE_STORMBADGE
|
|
call CheckBadge
|
|
jr c, .nostormbadge
|
|
call GetMapEnvironment
|
|
call CheckOutdoorMap
|
|
jr z, .outdoors
|
|
jr .indoors
|
|
|
|
.outdoors
|
|
xor a
|
|
ldh [hMapAnims], a
|
|
call LoadStandardMenuHeader
|
|
call ClearSprites
|
|
farcall _FlyMap
|
|
ld a, e
|
|
cp -1
|
|
jr z, .illegal
|
|
cp NUM_SPAWNS
|
|
jr nc, .illegal
|
|
|
|
ld [wDefaultSpawnpoint], a
|
|
call CloseWindow
|
|
ld a, $1
|
|
ret
|
|
|
|
.nostormbadge
|
|
ld a, $82
|
|
ret
|
|
|
|
.indoors
|
|
ld a, $2
|
|
ret
|
|
|
|
.illegal
|
|
call CloseWindow
|
|
call WaitBGMap
|
|
ld a, $80
|
|
ret
|
|
|
|
.DoFly:
|
|
ld hl, .FlyScript
|
|
call QueueScript
|
|
ld a, $81
|
|
ret
|
|
|
|
.FailFly:
|
|
call FieldMoveFailed
|
|
ld a, $82
|
|
ret
|
|
|
|
.FlyScript:
|
|
reloadmappart
|
|
callasm HideSprites
|
|
special UpdateTimePals
|
|
callasm FlyFromAnim
|
|
farscall Script_AbortBugContest
|
|
special WarpToSpawnPoint
|
|
callasm SkipUpdateMapSprites
|
|
loadvar VAR_MOVEMENT, PLAYER_NORMAL
|
|
newloadmap MAPSETUP_FLY
|
|
callasm FlyToAnim
|
|
special WaitSFX
|
|
callasm .ReturnFromFly
|
|
end
|
|
|
|
.ReturnFromFly:
|
|
farcall RespawnPlayer
|
|
call DelayFrame
|
|
call UpdatePlayerSprite
|
|
farcall LoadOverworldFont
|
|
ret
|
|
|
|
WaterfallFunction:
|
|
call .TryWaterfall
|
|
and $7f
|
|
ld [wFieldMoveSucceeded], a
|
|
ret
|
|
|
|
.TryWaterfall:
|
|
; Waterfall
|
|
ld de, ENGINE_RISINGBADGE
|
|
farcall CheckBadge
|
|
ld a, $80
|
|
ret c
|
|
call CheckMapCanWaterfall
|
|
jr c, .failed
|
|
ld hl, Script_WaterfallFromMenu
|
|
call QueueScript
|
|
ld a, $81
|
|
ret
|
|
|
|
.failed
|
|
call FieldMoveFailed
|
|
ld a, $80
|
|
ret
|
|
|
|
CheckMapCanWaterfall:
|
|
ld a, [wPlayerDirection]
|
|
and $c
|
|
cp FACE_UP
|
|
jr nz, .failed
|
|
ld a, [wTileUp]
|
|
call CheckWaterfallTile
|
|
jr nz, .failed
|
|
xor a
|
|
ret
|
|
|
|
.failed
|
|
scf
|
|
ret
|
|
|
|
Script_WaterfallFromMenu:
|
|
reloadmappart
|
|
special UpdateTimePals
|
|
|
|
Script_UsedWaterfall:
|
|
callasm GetPartyNick
|
|
writetext .UseWaterfallText
|
|
waitbutton
|
|
closetext
|
|
playsound SFX_BUBBLEBEAM
|
|
.loop
|
|
applymovement PLAYER, .WaterfallStep
|
|
callasm .CheckContinueWaterfall
|
|
iffalse .loop
|
|
end
|
|
|
|
.CheckContinueWaterfall:
|
|
xor a
|
|
ld [wScriptVar], a
|
|
ld a, [wPlayerStandingTile]
|
|
call CheckWaterfallTile
|
|
ret z
|
|
farcall StubbedTrainerRankings_Waterfall
|
|
ld a, $1
|
|
ld [wScriptVar], a
|
|
ret
|
|
|
|
.WaterfallStep:
|
|
turn_waterfall UP
|
|
step_end
|
|
|
|
.UseWaterfallText:
|
|
text_far _UseWaterfallText
|
|
text_end
|
|
|
|
TryWaterfallOW::
|
|
ld d, WATERFALL
|
|
call CheckPartyMove
|
|
jr c, .failed
|
|
ld de, ENGINE_RISINGBADGE
|
|
call CheckEngineFlag
|
|
jr c, .failed
|
|
call CheckMapCanWaterfall
|
|
jr c, .failed
|
|
ld a, BANK(Script_AskWaterfall)
|
|
ld hl, Script_AskWaterfall
|
|
call CallScript
|
|
scf
|
|
ret
|
|
|
|
.failed
|
|
ld a, BANK(Script_CantDoWaterfall)
|
|
ld hl, Script_CantDoWaterfall
|
|
call CallScript
|
|
scf
|
|
ret
|
|
|
|
Script_CantDoWaterfall:
|
|
jumptext .HugeWaterfallText
|
|
|
|
.HugeWaterfallText:
|
|
text_far _HugeWaterfallText
|
|
text_end
|
|
|
|
Script_AskWaterfall:
|
|
opentext
|
|
writetext .AskWaterfallText
|
|
yesorno
|
|
iftrue Script_UsedWaterfall
|
|
closetext
|
|
end
|
|
|
|
.AskWaterfallText:
|
|
text_far _AskWaterfallText
|
|
text_end
|
|
|
|
EscapeRopeFunction:
|
|
call FieldMoveJumptableReset
|
|
ld a, $1
|
|
jr EscapeRopeOrDig
|
|
|
|
DigFunction:
|
|
call FieldMoveJumptableReset
|
|
ld a, $2
|
|
|
|
EscapeRopeOrDig:
|
|
ld [wEscapeRopeOrDigType], a
|
|
.loop
|
|
ld hl, .DigTable
|
|
call FieldMoveJumptable
|
|
jr nc, .loop
|
|
and $7f
|
|
ld [wFieldMoveSucceeded], a
|
|
ret
|
|
|
|
.DigTable:
|
|
dw .CheckCanDig
|
|
dw .DoDig
|
|
dw .FailDig
|
|
|
|
.CheckCanDig:
|
|
call GetMapEnvironment
|
|
cp CAVE
|
|
jr z, .incave
|
|
cp DUNGEON
|
|
jr z, .incave
|
|
.fail
|
|
ld a, $2
|
|
ret
|
|
|
|
.incave
|
|
ld hl, wDigWarpNumber
|
|
ld a, [hli]
|
|
and a
|
|
jr z, .fail
|
|
ld a, [hli]
|
|
and a
|
|
jr z, .fail
|
|
ld a, [hl]
|
|
and a
|
|
jr z, .fail
|
|
ld a, $1
|
|
ret
|
|
|
|
.DoDig:
|
|
ld hl, wDigWarpNumber
|
|
ld de, wNextWarp
|
|
ld bc, 3
|
|
call CopyBytes
|
|
call GetPartyNick
|
|
ld a, [wEscapeRopeOrDigType]
|
|
cp $2
|
|
jr nz, .escaperope
|
|
ld hl, .UsedDigScript
|
|
call QueueScript
|
|
ld a, $81
|
|
ret
|
|
|
|
.escaperope
|
|
farcall SpecialKabutoChamber
|
|
ld hl, .UsedEscapeRopeScript
|
|
call QueueScript
|
|
ld a, $81
|
|
ret
|
|
|
|
.FailDig:
|
|
ld a, [wEscapeRopeOrDigType]
|
|
cp $2
|
|
jr nz, .failescaperope
|
|
ld hl, .CantUseDigText
|
|
call MenuTextbox
|
|
call WaitPressAorB_BlinkCursor
|
|
call CloseWindow
|
|
|
|
.failescaperope
|
|
ld a, $80
|
|
ret
|
|
|
|
.UseDigText:
|
|
text_far _UseDigText
|
|
text_end
|
|
|
|
.UseEscapeRopeText:
|
|
text_far _UseEscapeRopeText
|
|
text_end
|
|
|
|
.CantUseDigText:
|
|
text_far _CantUseDigText
|
|
text_end
|
|
|
|
.UsedEscapeRopeScript:
|
|
reloadmappart
|
|
special UpdateTimePals
|
|
writetext .UseEscapeRopeText
|
|
sjump .UsedDigOrEscapeRopeScript
|
|
|
|
.UsedDigScript:
|
|
reloadmappart
|
|
special UpdateTimePals
|
|
writetext .UseDigText
|
|
|
|
.UsedDigOrEscapeRopeScript:
|
|
waitbutton
|
|
closetext
|
|
playsound SFX_WARP_TO
|
|
applymovement PLAYER, .DigOut
|
|
farscall Script_AbortBugContest
|
|
special WarpToSpawnPoint
|
|
loadvar VAR_MOVEMENT, PLAYER_NORMAL
|
|
newloadmap MAPSETUP_DOOR
|
|
playsound SFX_WARP_FROM
|
|
applymovement PLAYER, .DigReturn
|
|
end
|
|
|
|
.DigOut:
|
|
step_dig 32
|
|
hide_object
|
|
step_end
|
|
|
|
.DigReturn:
|
|
show_object
|
|
return_dig 32
|
|
step_end
|
|
|
|
TeleportFunction:
|
|
call FieldMoveJumptableReset
|
|
.loop
|
|
ld hl, .Jumptable
|
|
call FieldMoveJumptable
|
|
jr nc, .loop
|
|
and $7f
|
|
ld [wFieldMoveSucceeded], a
|
|
ret
|
|
|
|
.Jumptable:
|
|
dw .TryTeleport
|
|
dw .DoTeleport
|
|
dw .FailTeleport
|
|
|
|
.TryTeleport:
|
|
call GetMapEnvironment
|
|
call CheckOutdoorMap
|
|
jr z, .CheckIfSpawnPoint
|
|
jr .nope
|
|
|
|
.CheckIfSpawnPoint:
|
|
ld a, [wLastSpawnMapGroup]
|
|
ld d, a
|
|
ld a, [wLastSpawnMapNumber]
|
|
ld e, a
|
|
farcall IsSpawnPoint
|
|
jr nc, .nope
|
|
ld a, c
|
|
ld [wDefaultSpawnpoint], a
|
|
ld a, $1
|
|
ret
|
|
|
|
.nope
|
|
ld a, $2
|
|
ret
|
|
|
|
.DoTeleport:
|
|
call GetPartyNick
|
|
ld hl, .TeleportScript
|
|
call QueueScript
|
|
ld a, $81
|
|
ret
|
|
|
|
.FailTeleport:
|
|
ld hl, .CantUseTeleportText
|
|
call MenuTextboxBackup
|
|
ld a, $80
|
|
ret
|
|
|
|
.TeleportReturnText:
|
|
text_far _TeleportReturnText
|
|
text_end
|
|
|
|
.CantUseTeleportText:
|
|
text_far _CantUseTeleportText
|
|
text_end
|
|
|
|
.TeleportScript:
|
|
reloadmappart
|
|
special UpdateTimePals
|
|
writetext .TeleportReturnText
|
|
pause 60
|
|
reloadmappart
|
|
closetext
|
|
playsound SFX_WARP_TO
|
|
applymovement PLAYER, .TeleportFrom
|
|
farscall Script_AbortBugContest
|
|
special WarpToSpawnPoint
|
|
loadvar VAR_MOVEMENT, PLAYER_NORMAL
|
|
newloadmap MAPSETUP_TELEPORT
|
|
playsound SFX_WARP_FROM
|
|
applymovement PLAYER, .TeleportTo
|
|
end
|
|
|
|
.TeleportFrom:
|
|
teleport_from
|
|
step_end
|
|
|
|
.TeleportTo:
|
|
teleport_to
|
|
step_end
|
|
|
|
StrengthFunction:
|
|
call .TryStrength
|
|
and $7f
|
|
ld [wFieldMoveSucceeded], a
|
|
ret
|
|
|
|
.TryStrength:
|
|
; Strength
|
|
ld de, ENGINE_PLAINBADGE
|
|
call CheckBadge
|
|
jr c, .Failed
|
|
jr .UseStrength
|
|
|
|
.AlreadyUsingStrength: ; unreferenced
|
|
ld hl, .AlreadyUsingStrengthText
|
|
call MenuTextboxBackup
|
|
ld a, $80
|
|
ret
|
|
|
|
.AlreadyUsingStrengthText:
|
|
text_far _AlreadyUsingStrengthText
|
|
text_end
|
|
|
|
.Failed:
|
|
ld a, $80
|
|
ret
|
|
|
|
.UseStrength:
|
|
ld hl, Script_StrengthFromMenu
|
|
call QueueScript
|
|
ld a, $81
|
|
ret
|
|
|
|
SetStrengthFlag:
|
|
ld hl, wBikeFlags
|
|
set BIKEFLAGS_STRENGTH_ACTIVE_F, [hl]
|
|
ld a, [wCurPartyMon]
|
|
ld e, a
|
|
ld d, 0
|
|
ld hl, wPartySpecies
|
|
add hl, de
|
|
ld a, [hl]
|
|
ld [wStrengthSpecies], a
|
|
call GetPartyNick
|
|
ret
|
|
|
|
Script_StrengthFromMenu:
|
|
reloadmappart
|
|
special UpdateTimePals
|
|
|
|
Script_UsedStrength:
|
|
callasm SetStrengthFlag
|
|
writetext .UseStrengthText
|
|
readmem wStrengthSpecies
|
|
cry 0 ; plays [wStrengthSpecies] cry
|
|
pause 3
|
|
writetext .MoveBoulderText
|
|
closetext
|
|
end
|
|
|
|
.UseStrengthText:
|
|
text_far _UseStrengthText
|
|
text_end
|
|
|
|
.MoveBoulderText:
|
|
text_far _MoveBoulderText
|
|
text_end
|
|
|
|
AskStrengthScript:
|
|
callasm TryStrengthOW
|
|
iffalse .AskStrength
|
|
ifequal $1, .DontMeetRequirements
|
|
sjump .AlreadyUsedStrength
|
|
|
|
.DontMeetRequirements:
|
|
jumptext BouldersMayMoveText
|
|
|
|
.AlreadyUsedStrength:
|
|
jumptext BouldersMoveText
|
|
|
|
.AskStrength:
|
|
opentext
|
|
writetext AskStrengthText
|
|
yesorno
|
|
iftrue Script_UsedStrength
|
|
closetext
|
|
end
|
|
|
|
AskStrengthText:
|
|
text_far _AskStrengthText
|
|
text_end
|
|
|
|
BouldersMoveText:
|
|
text_far _BouldersMoveText
|
|
text_end
|
|
|
|
BouldersMayMoveText:
|
|
text_far _BouldersMayMoveText
|
|
text_end
|
|
|
|
TryStrengthOW:
|
|
ld d, STRENGTH
|
|
call CheckPartyMove
|
|
jr c, .nope
|
|
|
|
ld de, ENGINE_PLAINBADGE
|
|
call CheckEngineFlag
|
|
jr c, .nope
|
|
|
|
ld hl, wBikeFlags
|
|
bit BIKEFLAGS_STRENGTH_ACTIVE_F, [hl]
|
|
jr z, .already_using
|
|
|
|
ld a, 2
|
|
jr .done
|
|
|
|
.nope
|
|
ld a, 1
|
|
jr .done
|
|
|
|
.already_using
|
|
xor a
|
|
jr .done
|
|
|
|
.done
|
|
ld [wScriptVar], a
|
|
ret
|
|
|
|
WhirlpoolFunction:
|
|
call FieldMoveJumptableReset
|
|
.loop
|
|
ld hl, .Jumptable
|
|
call FieldMoveJumptable
|
|
jr nc, .loop
|
|
and $7f
|
|
ld [wFieldMoveSucceeded], a
|
|
ret
|
|
|
|
.Jumptable:
|
|
dw .TryWhirlpool
|
|
dw .DoWhirlpool
|
|
dw .FailWhirlpool
|
|
|
|
.TryWhirlpool:
|
|
ld de, ENGINE_GLACIERBADGE
|
|
call CheckBadge
|
|
jr c, .noglacierbadge
|
|
call TryWhirlpoolMenu
|
|
jr c, .failed
|
|
ld a, $1
|
|
ret
|
|
|
|
.failed
|
|
ld a, $2
|
|
ret
|
|
|
|
.noglacierbadge
|
|
ld a, $80
|
|
ret
|
|
|
|
.DoWhirlpool:
|
|
ld hl, Script_WhirlpoolFromMenu
|
|
call QueueScript
|
|
ld a, $81
|
|
ret
|
|
|
|
.FailWhirlpool:
|
|
call FieldMoveFailed
|
|
ld a, $80
|
|
ret
|
|
|
|
UseWhirlpoolText:
|
|
text_far _UseWhirlpoolText
|
|
text_end
|
|
|
|
TryWhirlpoolMenu:
|
|
call GetFacingTileCoord
|
|
ld c, a
|
|
push de
|
|
call CheckWhirlpoolTile
|
|
pop de
|
|
jr c, .failed
|
|
call GetBlockLocation
|
|
ld c, [hl]
|
|
push hl
|
|
ld hl, WhirlpoolBlockPointers
|
|
call CheckOverworldTileArrays
|
|
pop hl
|
|
jr nc, .failed
|
|
; Save the Whirlpool field move data
|
|
ld a, l
|
|
ld [wCutWhirlpoolOverworldBlockAddr], a
|
|
ld a, h
|
|
ld [wCutWhirlpoolOverworldBlockAddr + 1], a
|
|
ld a, b
|
|
ld [wCutWhirlpoolReplacementBlock], a
|
|
ld a, c
|
|
ld [wCutWhirlpoolAnimationType], a
|
|
xor a
|
|
ret
|
|
|
|
.failed
|
|
scf
|
|
ret
|
|
|
|
Script_WhirlpoolFromMenu:
|
|
reloadmappart
|
|
special UpdateTimePals
|
|
|
|
Script_UsedWhirlpool:
|
|
callasm GetPartyNick
|
|
writetext UseWhirlpoolText
|
|
reloadmappart
|
|
callasm DisappearWhirlpool
|
|
closetext
|
|
end
|
|
|
|
DisappearWhirlpool:
|
|
ld hl, wCutWhirlpoolOverworldBlockAddr
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
ld a, [wCutWhirlpoolReplacementBlock]
|
|
ld [hl], a
|
|
xor a
|
|
ldh [hBGMapMode], a
|
|
call OverworldTextModeSwitch
|
|
ld a, [wCutWhirlpoolAnimationType]
|
|
ld e, a
|
|
farcall PlayWhirlpoolSound
|
|
call BufferScreen
|
|
call GetMovementPermissions
|
|
ret
|
|
|
|
TryWhirlpoolOW::
|
|
ld d, WHIRLPOOL
|
|
call CheckPartyMove
|
|
jr c, .failed
|
|
ld de, ENGINE_GLACIERBADGE
|
|
call CheckEngineFlag
|
|
jr c, .failed
|
|
call TryWhirlpoolMenu
|
|
jr c, .failed
|
|
ld a, BANK(Script_AskWhirlpoolOW)
|
|
ld hl, Script_AskWhirlpoolOW
|
|
call CallScript
|
|
scf
|
|
ret
|
|
|
|
.failed
|
|
ld a, BANK(Script_MightyWhirlpool)
|
|
ld hl, Script_MightyWhirlpool
|
|
call CallScript
|
|
scf
|
|
ret
|
|
|
|
Script_MightyWhirlpool:
|
|
jumptext .MayPassWhirlpoolText
|
|
|
|
.MayPassWhirlpoolText:
|
|
text_far _MayPassWhirlpoolText
|
|
text_end
|
|
|
|
Script_AskWhirlpoolOW:
|
|
opentext
|
|
writetext AskWhirlpoolText
|
|
yesorno
|
|
iftrue Script_UsedWhirlpool
|
|
closetext
|
|
end
|
|
|
|
AskWhirlpoolText:
|
|
text_far _AskWhirlpoolText
|
|
text_end
|
|
|
|
HeadbuttFunction:
|
|
call TryHeadbuttFromMenu
|
|
and $7f
|
|
ld [wFieldMoveSucceeded], a
|
|
ret
|
|
|
|
TryHeadbuttFromMenu:
|
|
call GetFacingTileCoord
|
|
call CheckHeadbuttTreeTile
|
|
jr nz, .no_tree
|
|
|
|
ld hl, HeadbuttFromMenuScript
|
|
call QueueScript
|
|
ld a, $81
|
|
ret
|
|
|
|
.no_tree
|
|
call FieldMoveFailed
|
|
ld a, $80
|
|
ret
|
|
|
|
UseHeadbuttText:
|
|
text_far _UseHeadbuttText
|
|
text_end
|
|
|
|
HeadbuttNothingText:
|
|
text_far _HeadbuttNothingText
|
|
text_end
|
|
|
|
HeadbuttFromMenuScript:
|
|
reloadmappart
|
|
special UpdateTimePals
|
|
|
|
HeadbuttScript:
|
|
callasm GetPartyNick
|
|
writetext UseHeadbuttText
|
|
|
|
reloadmappart
|
|
callasm ShakeHeadbuttTree
|
|
|
|
callasm TreeMonEncounter
|
|
iffalse .no_battle
|
|
closetext
|
|
randomwildmon
|
|
startbattle
|
|
reloadmapafterbattle
|
|
end
|
|
|
|
.no_battle
|
|
writetext HeadbuttNothingText
|
|
waitbutton
|
|
closetext
|
|
end
|
|
|
|
TryHeadbuttOW::
|
|
ld d, HEADBUTT
|
|
call CheckPartyMove
|
|
jr c, .no
|
|
|
|
ld a, BANK(AskHeadbuttScript)
|
|
ld hl, AskHeadbuttScript
|
|
call CallScript
|
|
scf
|
|
ret
|
|
|
|
.no
|
|
xor a
|
|
ret
|
|
|
|
AskHeadbuttScript:
|
|
opentext
|
|
writetext AskHeadbuttText
|
|
yesorno
|
|
iftrue HeadbuttScript
|
|
closetext
|
|
end
|
|
|
|
AskHeadbuttText:
|
|
text_far _AskHeadbuttText
|
|
text_end
|
|
|
|
RockSmashFunction:
|
|
call TryRockSmashFromMenu
|
|
and $7f
|
|
ld [wFieldMoveSucceeded], a
|
|
ret
|
|
|
|
TryRockSmashFromMenu:
|
|
call GetFacingObject
|
|
jr c, .no_rock
|
|
ld a, d
|
|
cp $18
|
|
jr nz, .no_rock
|
|
|
|
ld hl, RockSmashFromMenuScript
|
|
call QueueScript
|
|
ld a, $81
|
|
ret
|
|
|
|
.no_rock
|
|
call FieldMoveFailed
|
|
ld a, $80
|
|
ret
|
|
|
|
GetFacingObject:
|
|
farcall CheckFacingObject
|
|
jr nc, .fail
|
|
|
|
ldh a, [hObjectStructIndex]
|
|
call GetObjectStruct
|
|
ld hl, OBJECT_MAP_OBJECT_INDEX
|
|
add hl, bc
|
|
ld a, [hl]
|
|
ldh [hLastTalked], a
|
|
call GetMapObject
|
|
ld hl, MAPOBJECT_MOVEMENT
|
|
add hl, bc
|
|
ld a, [hl]
|
|
ld d, a
|
|
and a
|
|
ret
|
|
|
|
.fail
|
|
scf
|
|
ret
|
|
|
|
RockSmashFromMenuScript:
|
|
reloadmappart
|
|
special UpdateTimePals
|
|
|
|
RockSmashScript:
|
|
callasm GetPartyNick
|
|
writetext UseRockSmashText
|
|
closetext
|
|
special WaitSFX
|
|
playsound SFX_STRENGTH
|
|
earthquake 84
|
|
applymovementlasttalked MovementData_RockSmash
|
|
disappear -2
|
|
|
|
callasm RockMonEncounter
|
|
readmem wTempWildMonSpecies
|
|
iffalse .done
|
|
randomwildmon
|
|
startbattle
|
|
reloadmapafterbattle
|
|
.done
|
|
end
|
|
|
|
MovementData_RockSmash:
|
|
rock_smash 10
|
|
step_end
|
|
|
|
UseRockSmashText:
|
|
text_far _UseRockSmashText
|
|
text_end
|
|
|
|
AskRockSmashScript:
|
|
callasm HasRockSmash
|
|
ifequal 1, .no
|
|
|
|
opentext
|
|
writetext AskRockSmashText
|
|
yesorno
|
|
iftrue RockSmashScript
|
|
closetext
|
|
end
|
|
.no
|
|
jumptext MaySmashText
|
|
|
|
MaySmashText:
|
|
text_far _MaySmashText
|
|
text_end
|
|
|
|
AskRockSmashText:
|
|
text_far _AskRockSmashText
|
|
text_end
|
|
|
|
HasRockSmash:
|
|
ld d, ROCK_SMASH
|
|
call CheckPartyMove
|
|
jr nc, .yes
|
|
; no
|
|
ld a, 1
|
|
jr .done
|
|
.yes
|
|
xor a
|
|
jr .done
|
|
.done
|
|
ld [wScriptVar], a
|
|
ret
|
|
|
|
FishFunction:
|
|
ld a, e
|
|
push af
|
|
call FieldMoveJumptableReset
|
|
pop af
|
|
ld [wFishingRodUsed], a
|
|
.loop
|
|
ld hl, .FishTable
|
|
call FieldMoveJumptable
|
|
jr nc, .loop
|
|
and $7f
|
|
ld [wFieldMoveSucceeded], a
|
|
ret
|
|
|
|
.FishTable:
|
|
dw .TryFish
|
|
dw .FishNoBite
|
|
dw .FishGotSomething
|
|
dw .FailFish
|
|
dw .FishNoFish
|
|
|
|
.TryFish:
|
|
ld a, [wPlayerState]
|
|
cp PLAYER_SURF
|
|
jr z, .fail
|
|
cp PLAYER_SURF_PIKA
|
|
jr z, .fail
|
|
call GetFacingTileCoord
|
|
call GetTileCollision
|
|
cp WATER_TILE
|
|
jr z, .facingwater
|
|
.fail
|
|
ld a, $3
|
|
ret
|
|
|
|
.facingwater
|
|
call GetFishingGroup
|
|
and a
|
|
jr nz, .goodtofish
|
|
ld a, $4
|
|
ret
|
|
|
|
.goodtofish
|
|
ld d, a
|
|
ld a, [wFishingRodUsed]
|
|
ld e, a
|
|
farcall Fish
|
|
ld a, d
|
|
and a
|
|
jr z, .nonibble
|
|
ld [wTempWildMonSpecies], a
|
|
ld a, e
|
|
ld [wCurPartyLevel], a
|
|
ld a, BATTLETYPE_FISH
|
|
ld [wBattleType], a
|
|
ld a, $2
|
|
ret
|
|
|
|
.nonibble
|
|
ld a, $1
|
|
ret
|
|
|
|
.FailFish:
|
|
ld a, $80
|
|
ret
|
|
|
|
.FishGotSomething:
|
|
ld a, $1
|
|
ld [wFishingResult], a
|
|
ld hl, Script_GotABite
|
|
call QueueScript
|
|
ld a, $81
|
|
ret
|
|
|
|
.FishNoBite:
|
|
ld a, $2
|
|
ld [wFishingResult], a
|
|
ld hl, Script_NotEvenANibble
|
|
call QueueScript
|
|
ld a, $81
|
|
ret
|
|
|
|
.FishNoFish:
|
|
ld a, $0
|
|
ld [wFishingResult], a
|
|
ld hl, Script_NotEvenANibble2
|
|
call QueueScript
|
|
ld a, $81
|
|
ret
|
|
|
|
Script_NotEvenANibble:
|
|
scall Script_FishCastRod
|
|
writetext RodNothingText
|
|
sjump Script_NotEvenANibble_FallThrough
|
|
|
|
Script_NotEvenANibble2:
|
|
scall Script_FishCastRod
|
|
writetext RodNothingText
|
|
|
|
Script_NotEvenANibble_FallThrough:
|
|
loademote EMOTE_SHADOW
|
|
callasm PutTheRodAway
|
|
closetext
|
|
end
|
|
|
|
Script_GotABite:
|
|
scall Script_FishCastRod
|
|
callasm Fishing_CheckFacingUp
|
|
iffalse .NotFacingUp
|
|
applymovement PLAYER, .Movement_FacingUp
|
|
sjump .FightTheHookedPokemon
|
|
|
|
.NotFacingUp:
|
|
applymovement PLAYER, .Movement_NotFacingUp
|
|
|
|
.FightTheHookedPokemon:
|
|
pause 40
|
|
applymovement PLAYER, .Movement_RestoreRod
|
|
writetext RodBiteText
|
|
callasm PutTheRodAway
|
|
closetext
|
|
randomwildmon
|
|
startbattle
|
|
reloadmapafterbattle
|
|
end
|
|
|
|
.Movement_NotFacingUp:
|
|
fish_got_bite
|
|
fish_got_bite
|
|
fish_got_bite
|
|
fish_got_bite
|
|
show_emote
|
|
step_end
|
|
|
|
.Movement_FacingUp:
|
|
fish_got_bite
|
|
fish_got_bite
|
|
fish_got_bite
|
|
fish_got_bite
|
|
step_sleep 1
|
|
show_emote
|
|
step_end
|
|
|
|
.Movement_RestoreRod:
|
|
hide_emote
|
|
fish_cast_rod
|
|
step_end
|
|
|
|
Fishing_CheckFacingUp:
|
|
ld a, [wPlayerDirection]
|
|
and $c
|
|
cp OW_UP
|
|
ld a, $1
|
|
jr z, .up
|
|
xor a
|
|
|
|
.up
|
|
ld [wScriptVar], a
|
|
ret
|
|
|
|
Script_FishCastRod:
|
|
reloadmappart
|
|
loadmem hBGMapMode, $0
|
|
special UpdateTimePals
|
|
loademote EMOTE_ROD
|
|
callasm LoadFishingGFX
|
|
loademote EMOTE_SHOCK
|
|
applymovement PLAYER, MovementData_CastRod
|
|
pause 40
|
|
end
|
|
|
|
MovementData_CastRod:
|
|
fish_cast_rod
|
|
step_end
|
|
|
|
PutTheRodAway:
|
|
xor a
|
|
ldh [hBGMapMode], a
|
|
ld a, $1
|
|
ld [wPlayerAction], a
|
|
call UpdateSprites
|
|
call UpdatePlayerSprite
|
|
ret
|
|
|
|
RodBiteText:
|
|
text_far _RodBiteText
|
|
text_end
|
|
|
|
RodNothingText:
|
|
text_far _RodNothingText
|
|
text_end
|
|
|
|
UnusedNothingHereText: ; unreferenced
|
|
text_far _UnusedNothingHereText
|
|
text_end
|
|
|
|
BikeFunction:
|
|
call .TryBike
|
|
and $7f
|
|
ld [wFieldMoveSucceeded], a
|
|
ret
|
|
|
|
.TryBike:
|
|
call .CheckEnvironment
|
|
jr c, .CannotUseBike
|
|
ld a, [wPlayerState]
|
|
cp PLAYER_NORMAL
|
|
jr z, .GetOnBike
|
|
cp PLAYER_BIKE
|
|
jr z, .GetOffBike
|
|
jr .CannotUseBike
|
|
|
|
.GetOnBike:
|
|
ld hl, Script_GetOnBike
|
|
ld de, Script_GetOnBike_Register
|
|
call .CheckIfRegistered
|
|
call QueueScript
|
|
xor a
|
|
ld [wMusicFade], a
|
|
ld de, MUSIC_NONE
|
|
call PlayMusic
|
|
call DelayFrame
|
|
call MaxVolume
|
|
ld de, MUSIC_BICYCLE
|
|
ld a, e
|
|
ld [wMapMusic], a
|
|
call PlayMusic
|
|
ld a, $1
|
|
ret
|
|
|
|
.GetOffBike:
|
|
ld hl, wBikeFlags
|
|
bit BIKEFLAGS_ALWAYS_ON_BIKE_F, [hl]
|
|
jr nz, .CantGetOffBike
|
|
ld hl, Script_GetOffBike
|
|
ld de, Script_GetOffBike_Register
|
|
call .CheckIfRegistered
|
|
ld a, BANK(Script_GetOffBike)
|
|
jr .done
|
|
|
|
.CantGetOffBike:
|
|
ld hl, Script_CantGetOffBike
|
|
jr .done
|
|
|
|
.CannotUseBike:
|
|
ld a, $0
|
|
ret
|
|
|
|
.done
|
|
call QueueScript
|
|
ld a, $1
|
|
ret
|
|
|
|
.CheckIfRegistered:
|
|
ld a, [wUsingItemWithSelect]
|
|
and a
|
|
ret z
|
|
ld h, d
|
|
ld l, e
|
|
ret
|
|
|
|
.CheckEnvironment:
|
|
call GetMapEnvironment
|
|
call CheckOutdoorMap
|
|
jr z, .ok
|
|
cp CAVE
|
|
jr z, .ok
|
|
cp GATE
|
|
jr z, .ok
|
|
jr .nope
|
|
|
|
.ok
|
|
call GetPlayerStandingTile
|
|
and $f ; lo nybble only
|
|
jr nz, .nope ; not FLOOR_TILE
|
|
xor a
|
|
ret
|
|
|
|
.nope
|
|
scf
|
|
ret
|
|
|
|
Script_GetOnBike:
|
|
reloadmappart
|
|
special UpdateTimePals
|
|
loadvar VAR_MOVEMENT, PLAYER_BIKE
|
|
writetext GotOnBikeText
|
|
waitbutton
|
|
closetext
|
|
special UpdatePlayerSprite
|
|
end
|
|
|
|
Script_GetOnBike_Register:
|
|
loadvar VAR_MOVEMENT, PLAYER_BIKE
|
|
closetext
|
|
special UpdatePlayerSprite
|
|
end
|
|
|
|
Overworld_DummyFunction: ; unreferenced
|
|
nop
|
|
ret
|
|
|
|
Script_GetOffBike:
|
|
reloadmappart
|
|
special UpdateTimePals
|
|
loadvar VAR_MOVEMENT, PLAYER_NORMAL
|
|
writetext GotOffBikeText
|
|
waitbutton
|
|
|
|
FinishGettingOffBike:
|
|
closetext
|
|
special UpdatePlayerSprite
|
|
special PlayMapMusic
|
|
end
|
|
|
|
Script_GetOffBike_Register:
|
|
loadvar VAR_MOVEMENT, PLAYER_NORMAL
|
|
sjump FinishGettingOffBike
|
|
|
|
Script_CantGetOffBike:
|
|
writetext .CantGetOffBikeText
|
|
waitbutton
|
|
closetext
|
|
end
|
|
|
|
.CantGetOffBikeText:
|
|
text_far _CantGetOffBikeText
|
|
text_end
|
|
|
|
GotOnBikeText:
|
|
text_far _GotOnBikeText
|
|
text_end
|
|
|
|
GotOffBikeText:
|
|
text_far _GotOffBikeText
|
|
text_end
|
|
|
|
TryCutOW::
|
|
ld d, CUT
|
|
call CheckPartyMove
|
|
jr c, .cant_cut
|
|
|
|
ld de, ENGINE_HIVEBADGE
|
|
call CheckEngineFlag
|
|
jr c, .cant_cut
|
|
|
|
ld a, BANK(AskCutScript)
|
|
ld hl, AskCutScript
|
|
call CallScript
|
|
scf
|
|
ret
|
|
|
|
.cant_cut
|
|
ld a, BANK(CantCutScript)
|
|
ld hl, CantCutScript
|
|
call CallScript
|
|
scf
|
|
ret
|
|
|
|
AskCutScript:
|
|
opentext
|
|
writetext AskCutText
|
|
yesorno
|
|
iffalse .declined
|
|
callasm .CheckMap
|
|
iftrue Script_Cut
|
|
.declined
|
|
closetext
|
|
end
|
|
|
|
.CheckMap:
|
|
xor a
|
|
ld [wScriptVar], a
|
|
call CheckMapForSomethingToCut
|
|
ret c
|
|
ld a, TRUE
|
|
ld [wScriptVar], a
|
|
ret
|
|
|
|
AskCutText:
|
|
text_far _AskCutText
|
|
text_end
|
|
|
|
CantCutScript:
|
|
jumptext CanCutText
|
|
|
|
CanCutText:
|
|
text_far _CanCutText
|
|
text_end
|