pokecrystal-board/engine/events/overworld.asm

1845 lines
27 KiB
NASM
Raw Normal View History

2018-06-24 07:09:41 -07:00
FieldMoveJumptableReset:
2016-03-27 09:47:28 -07:00
xor a
2018-01-23 14:39:09 -08:00
ld hl, wBuffer1
2016-03-27 09:47:28 -07:00
ld bc, 7
call ByteFill
ret
2018-06-24 07:09:41 -07:00
FieldMoveJumptable:
2018-01-23 14:39:09 -08:00
ld a, [wBuffer1]
2016-03-27 09:47:28 -07:00
rst JumpTable
2018-01-23 14:39:09 -08:00
ld [wBuffer1], a
2016-03-27 09:47:28 -07:00
bit 7, a
jr nz, .okay
and a
ret
.okay
and $7f
scf
ret
2018-06-24 07:09:41 -07:00
GetPartyNick:
2018-01-23 14:39:09 -08:00
; write wCurPartyMon nickname to wStringBuffer1-3
ld hl, wPartyMonNicknames
2016-03-27 09:47:28 -07:00
ld a, BOXMON
2018-01-23 14:39:09 -08:00
ld [wMonType], a
ld a, [wCurPartyMon]
2016-03-27 09:47:28 -07:00
call GetNick
call CopyName1
2018-01-23 14:39:09 -08:00
; copy text from wStringBuffer2 to wStringBuffer3
ld de, wStringBuffer2
ld hl, wStringBuffer3
2016-03-27 09:47:28 -07:00
call CopyName2
ret
2018-06-24 07:09:41 -07:00
CheckEngineFlag:
2016-03-27 09:47:28 -07:00
; Check engine flag de
; Return carry if flag is not set
ld b, CHECK_FLAG
2017-12-24 09:47:30 -08:00
farcall EngineFlagAction
2016-03-27 09:47:28 -07:00
ld a, c
and a
jr nz, .isset
scf
ret
.isset
xor a
ret
2018-06-24 07:09:41 -07:00
CheckBadge:
2016-03-27 09:47:28 -07:00
; 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
2019-04-08 05:15:10 -07:00
call MenuTextboxBackup ; push text to queue
2016-03-27 09:47:28 -07:00
scf
ret
2018-06-24 07:09:41 -07:00
.BadgeRequiredText:
2016-03-27 09:47:28 -07:00
; Sorry! A new BADGE
; is required.
text_far _BadgeRequiredText
text_end
2016-03-27 09:47:28 -07:00
2018-06-24 07:09:41 -07:00
CheckPartyMove:
2016-03-27 09:47:28 -07:00
; Check if a monster in your party has move d.
ld e, 0
xor a
2018-01-23 14:39:09 -08:00
ld [wCurPartyMon], a
2016-03-27 09:47:28 -07:00
.loop
ld c, e
ld b, 0
2018-01-23 14:39:09 -08:00
ld hl, wPartySpecies
2016-03-27 09:47:28 -07:00
add hl, bc
ld a, [hl]
and a
jr z, .no
cp -1
2016-03-27 09:47:28 -07:00
jr z, .no
cp EGG
2016-03-27 09:47:28 -07:00
jr z, .next
ld bc, PARTYMON_STRUCT_LENGTH
2018-01-23 14:39:09 -08:00
ld hl, wPartyMon1Moves
2016-03-27 09:47:28 -07:00
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
2018-01-23 14:39:09 -08:00
ld [wCurPartyMon], a ; which mon has the move
2016-03-27 09:47:28 -07:00
xor a
ret
.no
scf
ret
2018-06-24 07:09:41 -07:00
FieldMoveFailed:
2016-03-27 09:47:28 -07:00
ld hl, .CantUseHere
2019-04-08 05:15:10 -07:00
call MenuTextboxBackup
2016-03-27 09:47:28 -07:00
ret
.CantUseHere:
2016-03-27 09:47:28 -07:00
; Can't use that here.
text_far UnknownText_0x1c05c8
text_end
2016-03-27 09:47:28 -07:00
2018-06-24 07:09:41 -07:00
CutFunction:
2016-03-27 09:47:28 -07:00
call FieldMoveJumptableReset
.loop
ld hl, .Jumptable
call FieldMoveJumptable
jr nc, .loop
and $7f
ld [wFieldMoveSucceeded], a
ret
2018-06-24 07:09:41 -07:00
.Jumptable:
2016-03-27 09:47:28 -07:00
dw .CheckAble
dw .DoCut
dw .FailCut
2018-06-24 07:09:41 -07:00
.CheckAble:
2016-03-27 09:47:28 -07:00
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
2018-06-24 07:09:41 -07:00
.DoCut:
2016-03-27 09:47:28 -07:00
ld hl, Script_CutFromMenu
call QueueScript
ld a, $81
ret
2018-06-24 07:09:41 -07:00
.FailCut:
2016-03-27 09:47:28 -07:00
ld hl, Text_NothingToCut
2019-04-08 05:15:10 -07:00
call MenuTextboxBackup
2016-03-27 09:47:28 -07:00
ld a, $80
ret
Text_UsedCut:
2016-03-27 09:47:28 -07:00
; used CUT!
text_far UnknownText_0x1c05dd
text_end
2016-03-27 09:47:28 -07:00
Text_NothingToCut:
2016-03-27 09:47:28 -07:00
; There's nothing to CUT here.
text_far UnknownText_0x1c05ec
text_end
2016-03-27 09:47:28 -07:00
2018-06-24 07:09:41 -07:00
CheckMapForSomethingToCut:
2016-03-27 09:47:28 -07:00
; Does the collision data of the facing tile permit cutting?
call GetFacingTileCoord
ld c, a
push de
2017-12-24 09:47:30 -08:00
farcall CheckCutCollision
2016-03-27 09:47:28 -07:00
pop de
jr nc, .fail
; Get the location of the current block in wOverworldMapBlocks.
2016-03-27 09:47:28 -07:00
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
; Back up the wOverworldMapBlocks address to wBuffer3
2016-03-27 09:47:28 -07:00
ld a, l
2018-01-23 14:39:09 -08:00
ld [wBuffer3], a
2016-03-27 09:47:28 -07:00
ld a, h
2018-01-23 14:39:09 -08:00
ld [wBuffer4], a
; Back up the replacement tile to wBuffer5
2016-03-27 09:47:28 -07:00
ld a, b
2018-01-23 14:39:09 -08:00
ld [wBuffer5], a
; Back up the animation index to wBuffer6
2016-03-27 09:47:28 -07:00
ld a, c
2018-01-23 14:39:09 -08:00
ld [wBuffer6], a
2016-03-27 09:47:28 -07:00
xor a
ret
.fail
scf
ret
2018-06-24 07:09:41 -07:00
Script_CutFromMenu:
2016-03-27 09:47:28 -07:00
reloadmappart
2018-01-02 09:49:25 -08:00
special UpdateTimePals
2016-03-27 09:47:28 -07:00
Script_Cut:
2016-03-27 09:47:28 -07:00
callasm GetPartyNick
writetext Text_UsedCut
reloadmappart
callasm CutDownTreeOrGrass
closetext
end
2018-06-24 07:09:41 -07:00
CutDownTreeOrGrass:
2018-01-23 14:39:09 -08:00
ld hl, wBuffer3 ; OverworldMapTile
2016-03-27 09:47:28 -07:00
ld a, [hli]
ld h, [hl]
ld l, a
2018-01-23 14:39:09 -08:00
ld a, [wBuffer5] ; ReplacementTile
2016-03-27 09:47:28 -07:00
ld [hl], a
xor a
ldh [hBGMapMode], a
2016-03-27 09:47:28 -07:00
call OverworldTextModeSwitch
call UpdateSprites
call DelayFrame
2018-01-23 14:39:09 -08:00
ld a, [wBuffer6] ; Animation type
2016-03-27 09:47:28 -07:00
ld e, a
2017-12-24 09:47:30 -08:00
farcall OWCutAnimation
2016-03-27 09:47:28 -07:00
call BufferScreen
call GetMovementPermissions
call UpdateSprites
call DelayFrame
call LoadStandardFont
ret
2018-06-24 07:09:41 -07:00
CheckOverworldTileArrays:
2016-03-27 09:47:28 -07:00
; 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
2018-01-23 14:39:09 -08:00
ld a, [wMapTileset]
2016-03-27 09:47:28 -07:00
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
2018-01-25 19:19:24 -08:00
INCLUDE "data/events/field_move_blocks.asm"
2018-06-24 07:09:41 -07:00
OWFlash:
2016-03-27 09:47:28 -07:00
call .CheckUseFlash
and $7f
ld [wFieldMoveSucceeded], a
ret
2018-06-24 07:09:41 -07:00
.CheckUseFlash:
2016-03-27 09:47:28 -07:00
; Flash
ld de, ENGINE_ZEPHYRBADGE
2017-12-24 09:47:30 -08:00
farcall CheckBadge
2016-03-27 09:47:28 -07:00
jr c, .nozephyrbadge
push hl
2017-12-24 09:47:30 -08:00
farcall SpecialAerodactylChamber
2016-03-27 09:47:28 -07:00
pop hl
jr c, .useflash
ld a, [wTimeOfDayPalset]
cp %11111111 ; 3, 3, 3, 3
jr nz, .notadarkcave
.useflash
call UseFlash
ld a, $81
ret
.notadarkcave
call FieldMoveFailed
ld a, $80
ret
.nozephyrbadge
ld a, $80
ret
2018-06-24 07:09:41 -07:00
UseFlash:
2016-03-27 09:47:28 -07:00
ld hl, Script_UseFlash
jp QueueScript
Script_UseFlash:
2016-03-27 09:47:28 -07:00
reloadmappart
2018-01-02 09:49:25 -08:00
special UpdateTimePals
2016-03-27 09:47:28 -07:00
writetext UnknownText_0xc8f3
callasm BlindingFlash
closetext
end
UnknownText_0xc8f3:
text_far UnknownText_0x1c0609
text_asm
2016-03-27 09:47:28 -07:00
call WaitSFX
ld de, SFX_FLASH
call PlaySFX
call WaitSFX
ld hl, .BlankText
ret
.BlankText:
text_end
2016-03-27 09:47:28 -07:00
2018-06-24 07:09:41 -07:00
SurfFunction:
2016-03-27 09:47:28 -07:00
call FieldMoveJumptableReset
.loop
ld hl, .Jumptable
call FieldMoveJumptable
jr nc, .loop
and $7f
ld [wFieldMoveSucceeded], a
ret
2018-06-24 07:09:41 -07:00
.Jumptable:
2016-03-27 09:47:28 -07:00
dw .TrySurf
dw .DoSurf
dw .FailSurf
dw .AlreadySurfing
2018-06-24 07:09:41 -07:00
.TrySurf:
2016-03-27 09:47:28 -07:00
ld de, ENGINE_FOGBADGE
call CheckBadge
jr c, .asm_c956
ld hl, wBikeFlags
2018-01-22 10:57:44 -08:00
bit BIKEFLAGS_ALWAYS_ON_BIKE_F, [hl]
2016-03-27 09:47:28 -07:00
jr nz, .cannotsurf
2018-01-23 14:39:09 -08:00
ld a, [wPlayerState]
2016-03-27 09:47:28 -07:00
cp PLAYER_SURF
jr z, .alreadyfail
cp PLAYER_SURF_PIKA
jr z, .alreadyfail
call GetFacingTileCoord
call GetTileCollision
cp WATERTILE
2016-03-27 09:47:28 -07:00
jr nz, .cannotsurf
call CheckDirection
jr c, .cannotsurf
2017-12-24 09:47:30 -08:00
farcall CheckFacingObject
2016-03-27 09:47:28 -07:00
jr c, .cannotsurf
ld a, $1
ret
.asm_c956
ld a, $80
ret
.alreadyfail
ld a, $3
ret
.cannotsurf
ld a, $2
ret
2018-06-24 07:09:41 -07:00
.DoSurf:
2016-03-27 09:47:28 -07:00
call GetSurfType
2018-01-23 14:39:09 -08:00
ld [wBuffer2], a
2016-03-27 09:47:28 -07:00
call GetPartyNick
ld hl, SurfFromMenuScript
call QueueScript
ld a, $81
ret
2018-06-24 07:09:41 -07:00
.FailSurf:
2016-03-27 09:47:28 -07:00
ld hl, CantSurfText
2019-04-08 05:15:10 -07:00
call MenuTextboxBackup
2016-03-27 09:47:28 -07:00
ld a, $80
ret
2018-06-24 07:09:41 -07:00
.AlreadySurfing:
2016-03-27 09:47:28 -07:00
ld hl, AlreadySurfingText
2019-04-08 05:15:10 -07:00
call MenuTextboxBackup
2016-03-27 09:47:28 -07:00
ld a, $80
ret
2018-06-24 07:09:41 -07:00
SurfFromMenuScript:
2018-01-02 09:49:25 -08:00
special UpdateTimePals
2016-03-27 09:47:28 -07:00
2018-06-24 07:09:41 -07:00
UsedSurfScript:
2016-03-27 09:47:28 -07:00
writetext UsedSurfText ; "used SURF!"
waitbutton
closetext
callasm .empty_fn ; empty function
readmem wBuffer2
writevar VAR_MOVEMENT
2016-03-27 09:47:28 -07:00
special ReplaceKrisSprite
special PlayMapMusic
Merge branch 'master' of https://github.com/pret/pokecrystal # Conflicts: # audio/engine.asm # constants/gfx_constants.asm # constants/map_data_constants.asm # constants/pokemon_data_constants.asm # constants/sprite_constants.asm # constants/wram_constants.asm # data/maps/data.asm # engine/battle/ai/scoring.asm # engine/battle/core.asm # engine/battle/effect_commands.asm # engine/battle/misc.asm # engine/battle_anims/getpokeballwobble.asm # engine/breeding.asm # engine/buy_sell_toss.asm # engine/decorations.asm # engine/events/battle_tower/battle_tower.asm # engine/events/battle_tower/rules.asm # engine/events/buena.asm # engine/events/bug_contest/contest_2.asm # engine/events/daycare.asm # engine/events/dratini.asm # engine/events/halloffame.asm # engine/events/happiness_egg.asm # engine/events/kurt.asm # engine/events/lucky_number.asm # engine/events/magnet_train.asm # engine/events/overworld.asm # engine/events/pokerus/pokerus.asm # engine/events/print_unown.asm # engine/events/print_unown_2.asm # engine/events/unown_walls.asm # engine/item_effects.asm # engine/link.asm # engine/mon_menu.asm # engine/player_object.asm # engine/routines/playslowcry.asm # engine/scripting.asm # engine/search.asm # engine/search2.asm # engine/specials.asm # engine/start_menu.asm # engine/timeset.asm # home/battle_vars.asm # home/map.asm # maps/GoldenrodUndergroundSwitchRoomEntrances.asm # maps/IlexForest.asm # maps/KrissHouse2F.asm # maps/Route39Barn.asm # mobile/mobile_12_2.asm # mobile/mobile_40.asm # mobile/mobile_5f.asm # wram.asm
2018-02-03 15:21:53 -08:00
; step into the water (slow_step DIR, step_end)
special SurfStartStep
applymovement PLAYER, wMovementBuffer
2016-03-27 09:47:28 -07:00
end
2018-06-24 07:09:41 -07:00
.empty_fn
farcall StubbedTrainerRankings_Surf
2016-03-27 09:47:28 -07:00
ret
2018-06-24 07:09:41 -07:00
UsedSurfText:
text_far _UsedSurfText
text_end
2016-03-27 09:47:28 -07:00
2018-06-24 07:09:41 -07:00
CantSurfText:
text_far _CantSurfText
text_end
2016-03-27 09:47:28 -07:00
2018-06-24 07:09:41 -07:00
AlreadySurfingText:
text_far _AlreadySurfingText
text_end
2016-03-27 09:47:28 -07:00
2018-06-24 07:09:41 -07:00
GetSurfType:
2016-03-27 09:47:28 -07:00
; Surfing on Pikachu uses an alternate sprite.
; This is done by using a separate movement type.
2018-01-23 14:39:09 -08:00
ld a, [wCurPartyMon]
2016-03-27 09:47:28 -07:00
ld e, a
ld d, 0
2018-01-23 14:39:09 -08:00
ld hl, wPartySpecies
2016-03-27 09:47:28 -07:00
add hl, de
ld a, [hl]
cp PIKACHU
ld a, PLAYER_SURF_PIKA
ret z
ld a, PLAYER_SURF
ret
2018-06-24 07:09:41 -07:00
CheckDirection:
2016-03-27 09:47:28 -07:00
; Return carry if a tile permission prevents you
; from moving in the direction you're facing.
; Get player direction
2018-01-23 14:39:09 -08:00
ld a, [wPlayerDirection]
and %00001100 ; bits 2 and 3 contain direction
2016-03-27 09:47:28 -07:00
rrca
rrca
ld e, a
ld d, 0
ld hl, .Directions
add hl, de
; Can you walk in this direction?
2018-01-23 14:39:09 -08:00
ld a, [wTilePermissions]
2016-03-27 09:47:28 -07:00
and [hl]
jr nz, .quit
xor a
ret
.quit
scf
ret
.Directions:
2016-03-27 09:47:28 -07:00
db FACE_DOWN
db FACE_UP
db FACE_LEFT
db FACE_RIGHT
2018-06-24 07:09:41 -07:00
TrySurfOW::
2016-03-27 09:47:28 -07:00
; Checking a tile in the overworld.
; Return carry if fail is allowed.
; Don't ask to surf if already fail.
2018-01-23 14:39:09 -08:00
ld a, [wPlayerState]
2016-03-27 09:47:28 -07:00
cp PLAYER_SURF_PIKA
jr z, .quit
cp PLAYER_SURF
jr z, .quit
; Must be facing water.
ld a, [wFacingTileID]
2016-03-27 09:47:28 -07:00
call GetTileCollision
cp WATERTILE
2016-03-27 09:47:28 -07:00
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
2018-01-22 10:57:44 -08:00
bit BIKEFLAGS_ALWAYS_ON_BIKE_F, [hl]
2016-03-27 09:47:28 -07:00
jr nz, .quit
call GetSurfType
2018-01-23 14:39:09 -08:00
ld [wBuffer2], a
2016-03-27 09:47:28 -07:00
call GetPartyNick
ld a, BANK(AskSurfScript)
ld hl, AskSurfScript
call CallScript
scf
ret
.quit
xor a
ret
2018-06-24 07:09:41 -07:00
AskSurfScript:
2016-03-27 09:47:28 -07:00
opentext
writetext AskSurfText
yesorno
iftrue UsedSurfScript
closetext
end
2018-06-24 07:09:41 -07:00
AskSurfText:
; The water is calm. Want to SURF?
text_far _AskSurfText
text_end
2016-03-27 09:47:28 -07:00
2018-06-24 07:09:41 -07:00
FlyFunction:
2016-03-27 09:47:28 -07:00
call FieldMoveJumptableReset
.loop
ld hl, .Jumptable
call FieldMoveJumptable
jr nc, .loop
and $7f
ld [wFieldMoveSucceeded], a
ret
.Jumptable:
2016-03-27 09:47:28 -07:00
dw .TryFly
dw .DoFly
dw .FailFly
2018-06-24 07:09:41 -07:00
.TryFly:
2016-03-27 09:47:28 -07:00
; Fly
ld de, ENGINE_STORMBADGE
call CheckBadge
jr c, .nostormbadge
call GetMapEnvironment
2016-03-27 09:47:28 -07:00
call CheckOutdoorMap
jr z, .outdoors
jr .indoors
.outdoors
xor a
ldh [hMapAnims], a
call LoadStandardMenuHeader
2016-03-27 09:47:28 -07:00
call ClearSprites
2017-12-24 09:47:30 -08:00
farcall _FlyMap
2016-03-27 09:47:28 -07:00
ld a, e
cp -1
jr z, .illegal
cp NUM_SPAWNS
jr nc, .illegal
2018-01-23 14:39:09 -08:00
ld [wDefaultSpawnpoint], a
2016-03-27 09:47:28 -07:00
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
2018-06-24 07:09:41 -07:00
.DoFly:
2016-03-27 09:47:28 -07:00
ld hl, .FlyScript
call QueueScript
ld a, $81
ret
2018-06-24 07:09:41 -07:00
.FailFly:
2016-03-27 09:47:28 -07:00
call FieldMoveFailed
ld a, $82
ret
.FlyScript:
2016-03-27 09:47:28 -07:00
reloadmappart
callasm HideSprites
2018-01-02 09:49:25 -08:00
special UpdateTimePals
2016-03-27 09:47:28 -07:00
callasm FlyFromAnim
farscall Script_AbortBugContest
special WarpToSpawnPoint
2016-03-27 09:47:28 -07:00
callasm DelayLoadingNewSprites
loadvar VAR_MOVEMENT, PLAYER_NORMAL
2016-03-27 09:47:28 -07:00
newloadmap MAPSETUP_FLY
callasm FlyToAnim
special WaitSFX
callasm .ReturnFromFly
end
2018-06-24 07:09:41 -07:00
.ReturnFromFly:
2017-12-24 09:47:30 -08:00
farcall Function561d
2016-03-27 09:47:28 -07:00
call DelayFrame
call ReplaceKrisSprite
2017-12-24 09:47:30 -08:00
farcall LoadOverworldFont
2016-03-27 09:47:28 -07:00
ret
2018-06-24 07:09:41 -07:00
WaterfallFunction:
2016-03-27 09:47:28 -07:00
call .TryWaterfall
and $7f
ld [wFieldMoveSucceeded], a
ret
2018-06-24 07:09:41 -07:00
.TryWaterfall:
2016-03-27 09:47:28 -07:00
; Waterfall
ld de, ENGINE_RISINGBADGE
2017-12-24 09:47:30 -08:00
farcall CheckBadge
2016-03-27 09:47:28 -07:00
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
2018-06-24 07:09:41 -07:00
CheckMapCanWaterfall:
2018-01-23 14:39:09 -08:00
ld a, [wPlayerDirection]
2016-03-27 09:47:28 -07:00
and $c
cp FACE_UP
jr nz, .failed
2018-01-23 14:39:09 -08:00
ld a, [wTileUp]
2016-03-27 09:47:28 -07:00
call CheckWaterfallTile
jr nz, .failed
xor a
ret
.failed
scf
ret
Script_WaterfallFromMenu:
2016-03-27 09:47:28 -07:00
reloadmappart
2018-01-02 09:49:25 -08:00
special UpdateTimePals
2016-03-27 09:47:28 -07:00
Script_UsedWaterfall:
2016-03-27 09:47:28 -07:00
callasm GetPartyNick
writetext .Text_UsedWaterfall
waitbutton
closetext
playsound SFX_BUBBLEBEAM
.loop
applymovement PLAYER, .WaterfallStep
callasm .CheckContinueWaterfall
iffalse .loop
end
2018-06-24 07:09:41 -07:00
.CheckContinueWaterfall:
2016-03-27 09:47:28 -07:00
xor a
2018-01-23 14:39:09 -08:00
ld [wScriptVar], a
ld a, [wPlayerStandingTile]
2016-03-27 09:47:28 -07:00
call CheckWaterfallTile
ret z
farcall StubbedTrainerRankings_Waterfall
2016-03-27 09:47:28 -07:00
ld a, $1
2018-01-23 14:39:09 -08:00
ld [wScriptVar], a
2016-03-27 09:47:28 -07:00
ret
2018-06-24 07:09:41 -07:00
.WaterfallStep:
2016-05-14 10:46:14 -07:00
turn_waterfall UP
2016-03-27 09:47:28 -07:00
step_end
.Text_UsedWaterfall:
2016-03-27 09:47:28 -07:00
; used WATERFALL!
text_far UnknownText_0x1c068e
text_end
2016-03-27 09:47:28 -07:00
2018-06-24 07:09:41 -07:00
TryWaterfallOW::
2016-03-27 09:47:28 -07:00
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:
2016-03-27 09:47:28 -07:00
jumptext .Text_CantDoWaterfall
.Text_CantDoWaterfall:
2016-03-27 09:47:28 -07:00
; Wow, it's a huge waterfall.
text_far UnknownText_0x1c06a3
text_end
2016-03-27 09:47:28 -07:00
Script_AskWaterfall:
2016-03-27 09:47:28 -07:00
opentext
writetext .AskUseWaterfall
yesorno
iftrue Script_UsedWaterfall
closetext
end
.AskUseWaterfall:
2016-03-27 09:47:28 -07:00
; Do you want to use WATERFALL?
text_far UnknownText_0x1c06bf
text_end
2016-03-27 09:47:28 -07:00
2018-06-24 07:09:41 -07:00
EscapeRopeFunction:
2016-03-27 09:47:28 -07:00
call FieldMoveJumptableReset
ld a, $1
jr dig_incave
2018-06-24 07:09:41 -07:00
DigFunction:
2016-03-27 09:47:28 -07:00
call FieldMoveJumptableReset
ld a, $2
dig_incave
2018-01-23 14:39:09 -08:00
ld [wBuffer2], a
2016-03-27 09:47:28 -07:00
.loop
ld hl, .DigTable
call FieldMoveJumptable
jr nc, .loop
and $7f
ld [wFieldMoveSucceeded], a
ret
2018-06-24 07:09:41 -07:00
.DigTable:
2016-03-27 09:47:28 -07:00
dw .CheckCanDig
dw .DoDig
dw .FailDig
2018-06-24 07:09:41 -07:00
.CheckCanDig:
call GetMapEnvironment
2016-03-27 09:47:28 -07:00
cp CAVE
jr z, .incave
cp DUNGEON
jr z, .incave
.fail
ld a, $2
ret
.incave
2017-12-09 16:41:03 -08:00
ld hl, wDigWarpNumber
2016-03-27 09:47:28 -07:00
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
2018-06-24 07:09:41 -07:00
.DoDig:
2017-12-09 16:41:03 -08:00
ld hl, wDigWarpNumber
2016-03-27 09:47:28 -07:00
ld de, wNextWarp
ld bc, 3
call CopyBytes
call GetPartyNick
2018-01-23 14:39:09 -08:00
ld a, [wBuffer2]
2016-03-27 09:47:28 -07:00
cp $2
jr nz, .escaperope
ld hl, .UsedDigScript
call QueueScript
ld a, $81
ret
.escaperope
2017-12-24 09:47:30 -08:00
farcall SpecialKabutoChamber
2016-03-27 09:47:28 -07:00
ld hl, .UsedEscapeRopeScript
call QueueScript
ld a, $81
ret
2018-06-24 07:09:41 -07:00
.FailDig:
2018-01-23 14:39:09 -08:00
ld a, [wBuffer2]
2016-03-27 09:47:28 -07:00
cp $2
jr nz, .failescaperope
ld hl, .Text_CantUseHere
2019-04-08 05:15:10 -07:00
call MenuTextbox
2016-03-27 09:47:28 -07:00
call WaitPressAorB_BlinkCursor
call CloseWindow
.failescaperope
ld a, $80
ret
.Text_UsedDig:
2016-03-27 09:47:28 -07:00
; used DIG!
text_far UnknownText_0x1c06de
text_end
2016-03-27 09:47:28 -07:00
.Text_UsedEscapeRope:
2016-03-27 09:47:28 -07:00
; used an ESCAPE ROPE.
text_far UnknownText_0x1c06ed
text_end
2016-03-27 09:47:28 -07:00
.Text_CantUseHere:
2016-03-27 09:47:28 -07:00
; Can't use that here.
text_far UnknownText_0x1c0705
text_end
2016-03-27 09:47:28 -07:00
.UsedEscapeRopeScript:
2016-03-27 09:47:28 -07:00
reloadmappart
2018-01-02 09:49:25 -08:00
special UpdateTimePals
2016-03-27 09:47:28 -07:00
writetext .Text_UsedEscapeRope
sjump .UsedDigOrEscapeRopeScript
2016-03-27 09:47:28 -07:00
.UsedDigScript:
2016-03-27 09:47:28 -07:00
reloadmappart
2018-01-02 09:49:25 -08:00
special UpdateTimePals
2016-03-27 09:47:28 -07:00
writetext .Text_UsedDig
.UsedDigOrEscapeRopeScript:
2016-03-27 09:47:28 -07:00
waitbutton
closetext
playsound SFX_WARP_TO
applymovement PLAYER, .DigOut
farscall Script_AbortBugContest
special WarpToSpawnPoint
loadvar VAR_MOVEMENT, PLAYER_NORMAL
2016-03-27 09:47:28 -07:00
newloadmap MAPSETUP_DOOR
playsound SFX_WARP_FROM
applymovement PLAYER, .DigReturn
end
.DigOut:
2016-03-27 09:47:28 -07:00
step_dig 32
hide_object
2016-03-27 09:47:28 -07:00
step_end
.DigReturn:
show_object
2016-03-27 09:47:28 -07:00
return_dig 32
step_end
2018-06-24 07:09:41 -07:00
TeleportFunction:
2016-03-27 09:47:28 -07:00
call FieldMoveJumptableReset
.loop
ld hl, .Jumptable
call FieldMoveJumptable
jr nc, .loop
and $7f
ld [wFieldMoveSucceeded], a
ret
2018-06-24 07:09:41 -07:00
.Jumptable:
2016-03-27 09:47:28 -07:00
dw .TryTeleport
dw .DoTeleport
dw .FailTeleport
2018-06-24 07:09:41 -07:00
.TryTeleport:
call GetMapEnvironment
2016-03-27 09:47:28 -07:00
call CheckOutdoorMap
jr z, .CheckIfSpawnPoint
jr .nope
.CheckIfSpawnPoint:
2016-03-27 09:47:28 -07:00
ld a, [wLastSpawnMapGroup]
ld d, a
ld a, [wLastSpawnMapNumber]
ld e, a
2017-12-24 09:47:30 -08:00
farcall IsSpawnPoint
2016-03-27 09:47:28 -07:00
jr nc, .nope
ld a, c
2018-01-23 14:39:09 -08:00
ld [wDefaultSpawnpoint], a
2016-03-27 09:47:28 -07:00
ld a, $1
ret
.nope
ld a, $2
ret
2018-06-24 07:09:41 -07:00
.DoTeleport:
2016-03-27 09:47:28 -07:00
call GetPartyNick
ld hl, .TeleportScript
call QueueScript
ld a, $81
ret
2018-06-24 07:09:41 -07:00
.FailTeleport:
2016-03-27 09:47:28 -07:00
ld hl, .Text_CantUseHere
2019-04-08 05:15:10 -07:00
call MenuTextboxBackup
2016-03-27 09:47:28 -07:00
ld a, $80
ret
.Text_ReturnToLastMonCenter:
2016-03-27 09:47:28 -07:00
; Return to the last #MON CENTER.
text_far UnknownText_0x1c071a
text_end
2016-03-27 09:47:28 -07:00
.Text_CantUseHere:
2016-03-27 09:47:28 -07:00
; Can't use that here.
text_far UnknownText_0x1c073b
text_end
2016-03-27 09:47:28 -07:00
.TeleportScript:
2016-03-27 09:47:28 -07:00
reloadmappart
2018-01-02 09:49:25 -08:00
special UpdateTimePals
2016-03-27 09:47:28 -07:00
writetext .Text_ReturnToLastMonCenter
pause 60
reloadmappart
closetext
playsound SFX_WARP_TO
applymovement PLAYER, .TeleportFrom
farscall Script_AbortBugContest
special WarpToSpawnPoint
loadvar VAR_MOVEMENT, PLAYER_NORMAL
2016-03-27 09:47:28 -07:00
newloadmap MAPSETUP_TELEPORT
playsound SFX_WARP_FROM
applymovement PLAYER, .TeleportTo
end
2018-06-24 07:09:41 -07:00
.TeleportFrom:
2016-03-27 09:47:28 -07:00
teleport_from
step_end
2018-06-24 07:09:41 -07:00
.TeleportTo:
2016-03-27 09:47:28 -07:00
teleport_to
step_end
2018-06-24 07:09:41 -07:00
StrengthFunction:
2016-03-27 09:47:28 -07:00
call .TryStrength
and $7f
ld [wFieldMoveSucceeded], a
ret
2018-06-24 07:09:41 -07:00
.TryStrength:
2016-03-27 09:47:28 -07:00
; Strength
ld de, ENGINE_PLAINBADGE
call CheckBadge
jr c, .Failed
jr .UseStrength
2018-01-02 07:04:21 -08:00
.Unreferenced_AlreadyUsing:
2016-03-27 09:47:28 -07:00
ld hl, .JumpText
2019-04-08 05:15:10 -07:00
call MenuTextboxBackup
2016-03-27 09:47:28 -07:00
ld a, $80
ret
.JumpText:
text_far UnknownText_0x1c0751
text_end
2016-03-27 09:47:28 -07:00
2018-06-24 07:09:41 -07:00
.Failed:
2016-03-27 09:47:28 -07:00
ld a, $80
ret
2018-06-24 07:09:41 -07:00
.UseStrength:
2016-03-27 09:47:28 -07:00
ld hl, Script_StrengthFromMenu
call QueueScript
ld a, $81
ret
2018-06-24 07:09:41 -07:00
SetStrengthFlag:
ld hl, wBikeFlags
2018-01-22 10:57:44 -08:00
set BIKEFLAGS_STRENGTH_ACTIVE_F, [hl]
2018-01-23 14:39:09 -08:00
ld a, [wCurPartyMon]
2016-03-27 09:47:28 -07:00
ld e, a
ld d, 0
2018-01-23 14:39:09 -08:00
ld hl, wPartySpecies
2016-03-27 09:47:28 -07:00
add hl, de
ld a, [hl]
2018-01-23 14:39:09 -08:00
ld [wBuffer6], a
2016-03-27 09:47:28 -07:00
call GetPartyNick
ret
Script_StrengthFromMenu:
2016-03-27 09:47:28 -07:00
reloadmappart
2018-01-02 09:49:25 -08:00
special UpdateTimePals
2016-03-27 09:47:28 -07:00
Script_UsedStrength:
2016-03-27 09:47:28 -07:00
callasm SetStrengthFlag
writetext .UsedStrength
readmem wBuffer6
2016-03-27 09:47:28 -07:00
cry 0
pause 3
writetext .StrengthAllowedItToMoveBoulders
closetext
end
.UsedStrength:
text_far UnknownText_0x1c0774
text_end
2016-03-27 09:47:28 -07:00
.StrengthAllowedItToMoveBoulders:
text_far UnknownText_0x1c0788
text_end
2016-03-27 09:47:28 -07:00
AskStrengthScript:
callasm TryStrengthOW
iffalse .AskStrength
2018-02-02 18:09:17 -08:00
ifequal $1, .DontMeetRequirements
sjump .AlreadyUsedStrength
2016-03-27 09:47:28 -07:00
.DontMeetRequirements:
2016-03-27 09:47:28 -07:00
jumptext UnknownText_0xcd73
.AlreadyUsedStrength:
2016-03-27 09:47:28 -07:00
jumptext UnknownText_0xcd6e
.AskStrength:
2016-03-27 09:47:28 -07:00
opentext
writetext UnknownText_0xcd69
yesorno
iftrue Script_UsedStrength
closetext
end
UnknownText_0xcd69:
2016-03-27 09:47:28 -07:00
; A #MON may be able to move this. Want to use STRENGTH?
text_far UnknownText_0x1c07a0
text_end
2016-03-27 09:47:28 -07:00
UnknownText_0xcd6e:
2016-03-27 09:47:28 -07:00
; Boulders may now be moved!
text_far UnknownText_0x1c07d8
text_end
2016-03-27 09:47:28 -07:00
UnknownText_0xcd73:
2016-03-27 09:47:28 -07:00
; A #MON may be able to move this.
text_far UnknownText_0x1c07f4
text_end
2016-03-27 09:47:28 -07:00
2018-06-24 07:09:41 -07:00
TryStrengthOW:
2016-03-27 09:47:28 -07:00
ld d, STRENGTH
call CheckPartyMove
jr c, .nope
ld de, ENGINE_PLAINBADGE
call CheckEngineFlag
jr c, .nope
ld hl, wBikeFlags
2018-01-22 10:57:44 -08:00
bit BIKEFLAGS_STRENGTH_ACTIVE_F, [hl]
2016-03-27 09:47:28 -07:00
jr z, .already_using
ld a, 2
jr .done
.nope
ld a, 1
jr .done
.already_using
xor a
jr .done
.done
2018-01-23 14:39:09 -08:00
ld [wScriptVar], a
2016-03-27 09:47:28 -07:00
ret
2018-06-24 07:09:41 -07:00
WhirlpoolFunction:
2016-03-27 09:47:28 -07:00
call FieldMoveJumptableReset
.loop
ld hl, Jumptable_cdae
call FieldMoveJumptable
jr nc, .loop
and $7f
ld [wFieldMoveSucceeded], a
ret
2018-06-24 07:09:41 -07:00
Jumptable_cdae:
2016-03-27 09:47:28 -07:00
dw .TryWhirlpool
dw .DoWhirlpool
dw .FailWhirlpool
2018-06-24 07:09:41 -07:00
.TryWhirlpool:
2016-03-27 09:47:28 -07:00
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
2018-06-24 07:09:41 -07:00
.DoWhirlpool:
2016-03-27 09:47:28 -07:00
ld hl, Script_WhirlpoolFromMenu
call QueueScript
ld a, $81
ret
2018-06-24 07:09:41 -07:00
.FailWhirlpool:
2016-03-27 09:47:28 -07:00
call FieldMoveFailed
ld a, $80
ret
Text_UsedWhirlpool:
2016-03-27 09:47:28 -07:00
; used WHIRLPOOL!
text_far UnknownText_0x1c0816
text_end
2016-03-27 09:47:28 -07:00
2018-06-24 07:09:41 -07:00
TryWhirlpoolMenu:
2016-03-27 09:47:28 -07:00
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
ld a, l
2018-01-23 14:39:09 -08:00
ld [wBuffer3], a
2016-03-27 09:47:28 -07:00
ld a, h
2018-01-23 14:39:09 -08:00
ld [wBuffer4], a
2016-03-27 09:47:28 -07:00
ld a, b
2018-01-23 14:39:09 -08:00
ld [wBuffer5], a
2016-03-27 09:47:28 -07:00
ld a, c
2018-01-23 14:39:09 -08:00
ld [wBuffer6], a
2016-03-27 09:47:28 -07:00
xor a
ret
.failed
scf
ret
Script_WhirlpoolFromMenu:
2016-03-27 09:47:28 -07:00
reloadmappart
2018-01-02 09:49:25 -08:00
special UpdateTimePals
2016-03-27 09:47:28 -07:00
Script_UsedWhirlpool:
2016-03-27 09:47:28 -07:00
callasm GetPartyNick
writetext Text_UsedWhirlpool
reloadmappart
callasm DisappearWhirlpool
closetext
end
2018-06-24 07:09:41 -07:00
DisappearWhirlpool:
2018-01-23 14:39:09 -08:00
ld hl, wBuffer3
2016-03-27 09:47:28 -07:00
ld a, [hli]
ld h, [hl]
ld l, a
2018-01-23 14:39:09 -08:00
ld a, [wBuffer5]
2016-03-27 09:47:28 -07:00
ld [hl], a
xor a
ldh [hBGMapMode], a
2016-03-27 09:47:28 -07:00
call OverworldTextModeSwitch
2018-01-23 14:39:09 -08:00
ld a, [wBuffer6]
2016-03-27 09:47:28 -07:00
ld e, a
2017-12-24 09:47:30 -08:00
farcall PlayWhirlpoolSound
2016-03-27 09:47:28 -07:00
call BufferScreen
call GetMovementPermissions
ret
2018-06-24 07:09:41 -07:00
TryWhirlpoolOW::
2016-03-27 09:47:28 -07:00
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:
2016-03-27 09:47:28 -07:00
jumptext .MightyWhirlpoolText
.MightyWhirlpoolText:
text_far UnknownText_0x1c082b
text_end
2016-03-27 09:47:28 -07:00
Script_AskWhirlpoolOW:
2016-03-27 09:47:28 -07:00
opentext
writetext UnknownText_0xce78
yesorno
iftrue Script_UsedWhirlpool
closetext
end
UnknownText_0xce78:
text_far UnknownText_0x1c0864
text_end
2016-03-27 09:47:28 -07:00
2018-06-24 07:09:41 -07:00
HeadbuttFunction:
2016-03-27 09:47:28 -07:00
call TryHeadbuttFromMenu
and $7f
ld [wFieldMoveSucceeded], a
ret
2018-06-24 07:09:41 -07:00
TryHeadbuttFromMenu:
2016-03-27 09:47:28 -07:00
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
UnknownText_0xce9d:
2016-03-27 09:47:28 -07:00
; did a HEADBUTT!
text_far UnknownText_0x1c0897
text_end
2016-03-27 09:47:28 -07:00
UnknownText_0xcea2:
2016-03-27 09:47:28 -07:00
; Nope. Nothing…
text_far UnknownText_0x1c08ac
text_end
2016-03-27 09:47:28 -07:00
HeadbuttFromMenuScript:
2016-03-27 09:47:28 -07:00
reloadmappart
2018-01-02 09:49:25 -08:00
special UpdateTimePals
2016-03-27 09:47:28 -07:00
HeadbuttScript:
2016-03-27 09:47:28 -07:00
callasm GetPartyNick
writetext UnknownText_0xce9d
reloadmappart
callasm ShakeHeadbuttTree
callasm TreeMonEncounter
iffalse .no_battle
closetext
randomwildmon
startbattle
reloadmapafterbattle
end
.no_battle
writetext UnknownText_0xcea2
waitbutton
closetext
end
2018-06-24 07:09:41 -07:00
TryHeadbuttOW::
2016-03-27 09:47:28 -07:00
ld d, HEADBUTT
call CheckPartyMove
jr c, .no
ld a, BANK(AskHeadbuttScript)
ld hl, AskHeadbuttScript
call CallScript
scf
ret
.no
xor a
ret
AskHeadbuttScript:
2016-03-27 09:47:28 -07:00
opentext
writetext UnknownText_0xcee6
yesorno
iftrue HeadbuttScript
closetext
end
UnknownText_0xcee6:
2016-03-27 09:47:28 -07:00
; A #MON could be in this tree. Want to HEADBUTT it?
text_far UnknownText_0x1c08bc
text_end
2016-03-27 09:47:28 -07:00
2018-06-24 07:09:41 -07:00
RockSmashFunction:
2016-03-27 09:47:28 -07:00
call TryRockSmashFromMenu
and $7f
ld [wFieldMoveSucceeded], a
ret
2018-06-24 07:09:41 -07:00
TryRockSmashFromMenu:
2016-03-27 09:47:28 -07:00
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
2018-06-24 07:09:41 -07:00
GetFacingObject:
2017-12-24 09:47:30 -08:00
farcall CheckFacingObject
2016-03-27 09:47:28 -07:00
jr nc, .fail
ldh a, [hObjectStructIndexBuffer]
2016-03-27 09:47:28 -07:00
call GetObjectStruct
ld hl, OBJECT_MAP_OBJECT_INDEX
add hl, bc
ld a, [hl]
ldh [hLastTalked], a
2016-03-27 09:47:28 -07:00
call GetMapObject
ld hl, MAPOBJECT_MOVEMENT
add hl, bc
ld a, [hl]
ld d, a
and a
ret
.fail
scf
ret
RockSmashFromMenuScript:
2016-03-27 09:47:28 -07:00
reloadmappart
2018-01-02 09:49:25 -08:00
special UpdateTimePals
2016-03-27 09:47:28 -07:00
2018-06-24 07:09:41 -07:00
RockSmashScript:
2016-03-27 09:47:28 -07:00
callasm GetPartyNick
writetext UnknownText_0xcf58
closetext
special WaitSFX
playsound SFX_STRENGTH
earthquake 84
applymovementlasttalked MovementData_0xcf55
2016-03-27 09:47:28 -07:00
disappear -2
callasm RockMonEncounter
readmem wTempWildMonSpecies
2016-03-27 09:47:28 -07:00
iffalse .done
randomwildmon
startbattle
reloadmapafterbattle
.done
end
MovementData_0xcf55:
2016-03-27 09:47:28 -07:00
rock_smash 10
step_end
UnknownText_0xcf58:
text_far UnknownText_0x1c08f0
text_end
2016-03-27 09:47:28 -07:00
AskRockSmashScript:
2016-03-27 09:47:28 -07:00
callasm HasRockSmash
2018-02-02 18:09:17 -08:00
ifequal 1, .no
2016-03-27 09:47:28 -07:00
opentext
writetext UnknownText_0xcf77
yesorno
iftrue RockSmashScript
closetext
end
.no
jumptext UnknownText_0xcf72
UnknownText_0xcf72:
2016-03-27 09:47:28 -07:00
; Maybe a #MON can break this.
text_far UnknownText_0x1c0906
text_end
2016-03-27 09:47:28 -07:00
UnknownText_0xcf77:
2016-03-27 09:47:28 -07:00
; This rock looks breakable. Want to use ROCK SMASH?
text_far UnknownText_0x1c0924
text_end
2016-03-27 09:47:28 -07:00
2018-06-24 07:09:41 -07:00
HasRockSmash:
2016-03-27 09:47:28 -07:00
ld d, ROCK_SMASH
call CheckPartyMove
jr nc, .yes
.no
ld a, 1
jr .done
.yes
xor a
jr .done
.done
2018-01-23 14:39:09 -08:00
ld [wScriptVar], a
2016-03-27 09:47:28 -07:00
ret
2018-06-24 07:09:41 -07:00
FishFunction:
2016-03-27 09:47:28 -07:00
ld a, e
push af
call FieldMoveJumptableReset
pop af
2018-01-23 14:39:09 -08:00
ld [wBuffer2], a
2016-03-27 09:47:28 -07:00
.loop
ld hl, .FishTable
call FieldMoveJumptable
jr nc, .loop
and $7f
ld [wFieldMoveSucceeded], a
ret
2018-06-24 07:09:41 -07:00
.FishTable:
2016-03-27 09:47:28 -07:00
dw .TryFish
dw .FishNoBite
dw .FishGotSomething
dw .FailFish
dw .FishNoFish
2018-06-24 07:09:41 -07:00
.TryFish:
2018-01-23 14:39:09 -08:00
ld a, [wPlayerState]
2016-03-27 09:47:28 -07:00
cp PLAYER_SURF
jr z, .fail
cp PLAYER_SURF_PIKA
jr z, .fail
call GetFacingTileCoord
call GetTileCollision
cp WATERTILE
2016-03-27 09:47:28 -07:00
jr z, .facingwater
.fail
ld a, $3
ret
.facingwater
call GetFishingGroup
and a
jr nz, .goodtofish
ld a, $4
ret
.goodtofish
ld d, a
2018-01-23 14:39:09 -08:00
ld a, [wBuffer2]
2016-03-27 09:47:28 -07:00
ld e, a
2017-12-24 09:47:30 -08:00
farcall Fish
2016-03-27 09:47:28 -07:00
ld a, d
and a
jr z, .nonibble
2018-01-23 14:39:09 -08:00
ld [wTempWildMonSpecies], a
2016-03-27 09:47:28 -07:00
ld a, e
2018-01-23 14:39:09 -08:00
ld [wCurPartyLevel], a
2016-03-27 09:47:28 -07:00
ld a, BATTLETYPE_FISH
2018-01-23 14:39:09 -08:00
ld [wBattleType], a
2016-03-27 09:47:28 -07:00
ld a, $2
ret
.nonibble
ld a, $1
ret
2018-06-24 07:09:41 -07:00
.FailFish:
2016-03-27 09:47:28 -07:00
ld a, $80
ret
2018-06-24 07:09:41 -07:00
.FishGotSomething:
2016-03-27 09:47:28 -07:00
ld a, $1
2018-01-23 14:39:09 -08:00
ld [wBuffer6], a
2016-03-27 09:47:28 -07:00
ld hl, Script_GotABite
call QueueScript
ld a, $81
ret
2018-06-24 07:09:41 -07:00
.FishNoBite:
2016-03-27 09:47:28 -07:00
ld a, $2
2018-01-23 14:39:09 -08:00
ld [wBuffer6], a
2016-03-27 09:47:28 -07:00
ld hl, Script_NotEvenANibble
call QueueScript
ld a, $81
ret
2018-06-24 07:09:41 -07:00
.FishNoFish:
2016-03-27 09:47:28 -07:00
ld a, $0
2018-01-23 14:39:09 -08:00
ld [wBuffer6], a
2016-03-27 09:47:28 -07:00
ld hl, Script_NotEvenANibble2
call QueueScript
ld a, $81
ret
Script_NotEvenANibble:
2016-03-27 09:47:28 -07:00
scall Script_FishCastRod
writetext UnknownText_0xd0a9
sjump Script_NotEvenANibble_FallThrough
2016-03-27 09:47:28 -07:00
Script_NotEvenANibble2:
2016-03-27 09:47:28 -07:00
scall Script_FishCastRod
writetext UnknownText_0xd0a9
Script_NotEvenANibble_FallThrough:
2016-03-27 09:47:28 -07:00
loademote EMOTE_SHADOW
callasm PutTheRodAway
closetext
end
Script_GotABite:
2016-03-27 09:47:28 -07:00
scall Script_FishCastRod
callasm Fishing_CheckFacingUp
iffalse .NotFacingUp
applymovement PLAYER, .Movement_FacingUp
sjump .FightTheHookedPokemon
2016-03-27 09:47:28 -07:00
.NotFacingUp:
2016-03-27 09:47:28 -07:00
applymovement PLAYER, .Movement_NotFacingUp
.FightTheHookedPokemon:
2016-03-27 09:47:28 -07:00
pause 40
applymovement PLAYER, .Movement_RestoreRod
writetext UnknownText_0xd0a4
callasm PutTheRodAway
closetext
randomwildmon
startbattle
reloadmapafterbattle
end
2018-06-24 07:09:41 -07:00
.Movement_NotFacingUp:
2016-03-27 09:47:28 -07:00
fish_got_bite
fish_got_bite
fish_got_bite
fish_got_bite
show_emote
step_end
2018-06-24 07:09:41 -07:00
.Movement_FacingUp:
2016-03-27 09:47:28 -07:00
fish_got_bite
fish_got_bite
fish_got_bite
fish_got_bite
2016-05-14 09:28:00 -07:00
step_sleep 1
2016-03-27 09:47:28 -07:00
show_emote
step_end
2018-06-24 07:09:41 -07:00
.Movement_RestoreRod:
2016-03-27 09:47:28 -07:00
hide_emote
fish_cast_rod
step_end
2018-06-24 07:09:41 -07:00
Fishing_CheckFacingUp:
2018-01-23 14:39:09 -08:00
ld a, [wPlayerDirection]
2016-03-27 09:47:28 -07:00
and $c
cp OW_UP
ld a, $1
jr z, .up
xor a
.up
2018-01-23 14:39:09 -08:00
ld [wScriptVar], a
2016-03-27 09:47:28 -07:00
ret
Script_FishCastRod:
2016-03-27 09:47:28 -07:00
reloadmappart
loadmem hBGMapMode, $0
2018-01-02 09:49:25 -08:00
special UpdateTimePals
2016-03-27 09:47:28 -07:00
loademote EMOTE_ROD
callasm LoadFishingGFX
loademote EMOTE_SHOCK
applymovement PLAYER, MovementData_0xd093
pause 40
end
2018-06-24 07:09:41 -07:00
MovementData_0xd093:
2016-03-27 09:47:28 -07:00
fish_cast_rod
step_end
2018-06-24 07:09:41 -07:00
PutTheRodAway:
2016-03-27 09:47:28 -07:00
xor a
ldh [hBGMapMode], a
2016-03-27 09:47:28 -07:00
ld a, $1
2018-01-23 14:39:09 -08:00
ld [wPlayerAction], a
2016-03-27 09:47:28 -07:00
call UpdateSprites
call ReplaceKrisSprite
ret
UnknownText_0xd0a4:
2016-03-27 09:47:28 -07:00
; Oh! A bite!
text_far UnknownText_0x1c0958
text_end
2016-03-27 09:47:28 -07:00
UnknownText_0xd0a9:
2016-03-27 09:47:28 -07:00
; Not even a nibble!
text_far UnknownText_0x1c0965
text_end
2016-03-27 09:47:28 -07:00
UnknownText_0xd0ae: ; unused
; Looks like there's nothing here.
text_far UnknownText_0x1c0979
text_end
2016-03-27 09:47:28 -07:00
2018-06-24 07:09:41 -07:00
BikeFunction:
2016-03-27 09:47:28 -07:00
call .TryBike
and $7f
ld [wFieldMoveSucceeded], a
ret
2018-06-24 07:09:41 -07:00
.TryBike:
2016-03-27 09:47:28 -07:00
call .CheckEnvironment
jr c, .CannotUseBike
2018-01-23 14:39:09 -08:00
ld a, [wPlayerState]
2016-03-27 09:47:28 -07:00
cp PLAYER_NORMAL
jr z, .GetOnBike
cp PLAYER_BIKE
jr z, .GetOffBike
jr .CannotUseBike
.GetOnBike:
2016-03-27 09:47:28 -07:00
ld hl, Script_GetOnBike
ld de, Script_GetOnBike_Register
call .CheckIfRegistered
call QueueScript
xor a
2018-01-23 14:39:09 -08:00
ld [wMusicFade], a
2016-03-27 09:47:28 -07:00
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
2018-01-22 10:57:44 -08:00
bit BIKEFLAGS_ALWAYS_ON_BIKE_F, [hl]
2016-03-27 09:47:28 -07:00
jr nz, .CantGetOffBike
ld hl, Script_GetOffBike
ld de, Script_GetOffBike_Register
call .CheckIfRegistered
ld a, BANK(Script_GetOffBike)
jr .done
.CantGetOffBike:
2016-03-27 09:47:28 -07:00
ld hl, Script_CantGetOffBike
jr .done
.CannotUseBike:
2016-03-27 09:47:28 -07:00
ld a, $0
ret
.done
call QueueScript
ld a, $1
ret
2018-06-24 07:09:41 -07:00
.CheckIfRegistered:
2016-03-27 09:47:28 -07:00
ld a, [wUsingItemWithSelect]
and a
ret z
ld h, d
ld l, e
ret
2018-06-24 07:09:41 -07:00
.CheckEnvironment:
call GetMapEnvironment
2016-03-27 09:47:28 -07:00
call CheckOutdoorMap
jr z, .ok
cp CAVE
jr z, .ok
cp GATE
jr z, .ok
jr .nope
.ok
call GetPlayerStandingTile
and WALLTILE | WATERTILE ; can't use our bike in a wall or on water
2016-03-27 09:47:28 -07:00
jr nz, .nope
xor a
ret
.nope
scf
ret
Script_GetOnBike:
2016-03-27 09:47:28 -07:00
reloadmappart
2018-01-02 09:49:25 -08:00
special UpdateTimePals
loadvar VAR_MOVEMENT, PLAYER_BIKE
2016-03-27 09:47:28 -07:00
writetext GotOnTheBikeText
waitbutton
closetext
special ReplaceKrisSprite
end
Script_GetOnBike_Register:
loadvar VAR_MOVEMENT, PLAYER_BIKE
2016-03-27 09:47:28 -07:00
closetext
special ReplaceKrisSprite
end
; unused
2016-03-27 09:47:28 -07:00
nop
ret
Script_GetOffBike:
2016-03-27 09:47:28 -07:00
reloadmappart
2018-01-02 09:49:25 -08:00
special UpdateTimePals
loadvar VAR_MOVEMENT, PLAYER_NORMAL
2016-03-27 09:47:28 -07:00
writetext GotOffTheBikeText
waitbutton
FinishGettingOffBike:
closetext
special ReplaceKrisSprite
special PlayMapMusic
end
Script_GetOffBike_Register:
loadvar VAR_MOVEMENT, PLAYER_NORMAL
sjump FinishGettingOffBike
2016-03-27 09:47:28 -07:00
Script_CantGetOffBike:
2016-03-27 09:47:28 -07:00
writetext .CantGetOffBikeText
waitbutton
closetext
end
.CantGetOffBikeText:
2016-03-27 09:47:28 -07:00
; You can't get off here!
text_far UnknownText_0x1c099a
text_end
2016-03-27 09:47:28 -07:00
GotOnTheBikeText:
2016-03-27 09:47:28 -07:00
; got on the @ .
text_far UnknownText_0x1c09b2
text_end
2016-03-27 09:47:28 -07:00
GotOffTheBikeText:
2016-03-27 09:47:28 -07:00
; got off the @ .
text_far UnknownText_0x1c09c7
text_end
2016-03-27 09:47:28 -07:00
2018-06-24 07:09:41 -07:00
TryCutOW::
2016-03-27 09:47:28 -07:00
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:
2016-03-27 09:47:28 -07:00
opentext
writetext UnknownText_0xd1c8
yesorno
iffalse .script_d1b8
callasm .CheckMap
iftrue Script_Cut
.script_d1b8
closetext
end
2018-06-24 07:09:41 -07:00
.CheckMap:
2016-03-27 09:47:28 -07:00
xor a
2018-01-23 14:39:09 -08:00
ld [wScriptVar], a
2016-03-27 09:47:28 -07:00
call CheckMapForSomethingToCut
ret c
ld a, TRUE
2018-01-23 14:39:09 -08:00
ld [wScriptVar], a
2016-03-27 09:47:28 -07:00
ret
UnknownText_0xd1c8:
text_far UnknownText_0x1c09dd
text_end
2016-03-27 09:47:28 -07:00
CantCutScript:
2016-03-27 09:47:28 -07:00
jumptext UnknownText_0xd1d0
UnknownText_0xd1d0:
text_far UnknownText_0x1c0a05
text_end