ref: 82591369114ea1d7723e433c7b9e49a639b4919b
dir: /event/overworld.asm/
FieldMoveJumptableReset: ; c6ea xor a ld hl, Buffer1 ld bc, 7 call ByteFill ret FieldMoveJumptable: ; c6f5 ld a, [Buffer1] rst JumpTable ld [Buffer1], a bit 7, a jr nz, .okay and a ret .okay and $7f scf ret GetPartyNick: ; c706 ; write CurPartyMon nickname to StringBuffer1-3 ld hl, PartyMonNicknames ld a, BOXMON ld [MonType], a ld a, [CurPartyMon] call GetNick call CopyName1 ; copy text from StringBuffer2 to StringBuffer3 ld de, StringBuffer2 ld hl, StringBuffer3 call CopyName2 ret CheckEngineFlag: ; c721 ; 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: ; c731 ; 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: ; c73d ; Sorry! A new BADGE ; is required. text_jump _BadgeRequiredText db "@" CheckPartyMove: ; c742 ; Check if a monster in your party has move d. ld e, 0 xor a ld [CurPartyMon], a .loop ld c, e ld b, 0 ld hl, PartySpecies 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, PartyMon1Moves 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 [CurPartyMon], a ; which mon has the move xor a ret .no scf ret FieldMoveFailed: ; c779 ld hl, .CantUseHere call MenuTextBoxBackup ret .CantUseHere: ; 0xc780 ; Can't use that here. text_jump UnknownText_0x1c05c8 db "@" CutFunction: ; c785 call FieldMoveJumptableReset .loop ld hl, .Jumptable call FieldMoveJumptable jr nc, .loop and $7f ld [wFieldMoveSucceeded], a ret .Jumptable: ; c796 (3:4796) dw .CheckAble dw .DoCut dw .FailCut .CheckAble: ; c79c (3:479c) 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: ; c7b2 (3:47b2) ld hl, Script_CutFromMenu call QueueScript ld a, $81 ret .FailCut: ; c7bb (3:47bb) ld hl, Text_NothingToCut call MenuTextBoxBackup ld a, $80 ret Text_UsedCut: ; 0xc7c4 ; used CUT! text_jump UnknownText_0x1c05dd db "@" Text_NothingToCut: ; 0xc7c9 ; There's nothing to CUT here. text_jump UnknownText_0x1c05ec db "@" CheckMapForSomethingToCut: ; c7ce ; 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 OverworldMap. 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 OverworldMap address to Buffer3 ld a, l ld [Buffer3], a ld a, h ld [Buffer4], a ; Back up the replacement tile to Buffer5 ld a, b ld [Buffer5], a ; Back up the animation index to Buffer6 ld a, c ld [Buffer6], a xor a ret .fail scf ret Script_CutFromMenu: ; c7fe reloadmappart special UpdateTimePals Script_Cut: ; 0xc802 callasm GetPartyNick writetext Text_UsedCut reloadmappart callasm CutDownTreeOrGrass closetext end CutDownTreeOrGrass: ; c810 ld hl, Buffer3 ; OverworldMapTile ld a, [hli] ld h, [hl] ld l, a ld a, [Buffer5] ; ReplacementTile ld [hl], a xor a ld [hBGMapMode], a call OverworldTextModeSwitch call UpdateSprites call DelayFrame ld a, [Buffer6] ; Animation type ld e, a farcall OWCutAnimation call BufferScreen call GetMovementPermissions call UpdateSprites call DelayFrame call LoadStandardFont ret CheckOverworldTileArrays: ; c840 ; 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, [wTileset] 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/field_move_blocks.asm" OWFlash: ; c8ac call .CheckUseFlash and $7f ld [wFieldMoveSucceeded], a ret .CheckUseFlash: ; c8b5 ; Flash ld de, ENGINE_ZEPHYRBADGE farcall CheckBadge jr c, .nozephyrbadge push hl farcall SpecialAerodactylChamber 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 UseFlash: ; c8e0 ld hl, Script_UseFlash jp QueueScript Script_UseFlash: ; 0xc8e6 reloadmappart special UpdateTimePals writetext UnknownText_0xc8f3 callasm BlindingFlash closetext end UnknownText_0xc8f3: ; 0xc8f3 text_jump UnknownText_0x1c0609 start_asm call WaitSFX ld de, SFX_FLASH call PlaySFX call WaitSFX ld hl, .BlankText ret .BlankText: ; 0xc908 db "@" SurfFunction: ; c909 call FieldMoveJumptableReset .loop ld hl, .Jumptable call FieldMoveJumptable jr nc, .loop and $7f ld [wFieldMoveSucceeded], a ret .Jumptable: ; c91a (3:491a) dw .TrySurf dw .DoSurf dw .FailSurf dw .AlreadySurfing .TrySurf: ; c922 (3:4922) ld de, ENGINE_FOGBADGE call CheckBadge jr c, .asm_c956 ld hl, BikeFlags bit 1, [hl] ; always on bike jr nz, .cannotsurf ld a, [PlayerState] cp PLAYER_SURF jr z, .alreadyfail cp PLAYER_SURF_PIKA jr z, .alreadyfail call GetFacingTileCoord call GetTileCollision cp WATERTILE jr nz, .cannotsurf call CheckDirection jr c, .cannotsurf farcall CheckFacingObject jr c, .cannotsurf ld a, $1 ret .asm_c956 ld a, $80 ret .alreadyfail ld a, $3 ret .cannotsurf ld a, $2 ret .DoSurf: ; c95f (3:495f) call GetSurfType ld [Buffer2], a call GetPartyNick ld hl, SurfFromMenuScript call QueueScript ld a, $81 ret .FailSurf: ; c971 (3:4971) ld hl, CantSurfText call MenuTextBoxBackup ld a, $80 ret .AlreadySurfing: ; c97a (3:497a) ld hl, AlreadySurfingText call MenuTextBoxBackup ld a, $80 ret SurfFromMenuScript: ; c983 special UpdateTimePals UsedSurfScript: ; c986 writetext UsedSurfText ; "used SURF!" waitbutton closetext callasm .empty_fn ; empty function copybytetovar Buffer2 writevarcode VAR_MOVEMENT special ReplaceKrisSprite special PlayMapMusic ; step into the water special Special_SurfStartStep ; (slow_step_x, step_end) applymovement PLAYER, MovementBuffer ; PLAYER, MovementBuffer end .empty_fn ; c9a2 farcall TrainerRankings_Surf ret UsedSurfText: ; c9a9 text_jump _UsedSurfText db "@" CantSurfText: ; c9ae text_jump _CantSurfText db "@" AlreadySurfingText: ; c9b3 text_jump _AlreadySurfingText db "@" GetSurfType: ; c9b8 ; Surfing on Pikachu uses an alternate sprite. ; This is done by using a separate movement type. ld a, [CurPartyMon] ld e, a ld d, 0 ld hl, PartySpecies add hl, de ld a, [hl] cp PIKACHU ld a, PLAYER_SURF_PIKA ret z ld a, PLAYER_SURF ret CheckDirection: ; c9cb ; Return carry if a tile permission prevents you ; from moving in the direction you're facing. ; Get player direction ld a, [PlayerDirection] 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, [TilePermissions] 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:: ; c9e7 ; Checking a tile in the overworld. ; Return carry if fail is allowed. ; Don't ask to surf if already fail. ld a, [PlayerState] cp PLAYER_SURF_PIKA jr z, .quit cp PLAYER_SURF jr z, .quit ; Must be facing water. ld a, [EngineBuffer1] call GetTileCollision cp WATERTILE 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, BikeFlags bit 1, [hl] ; always on bike (can't surf) jr nz, .quit call GetSurfType ld [Buffer2], a call GetPartyNick ld a, BANK(AskSurfScript) ld hl, AskSurfScript call CallScript scf ret .quit xor a ret AskSurfScript: ; ca2c opentext writetext AskSurfText yesorno iftrue UsedSurfScript closetext end AskSurfText: ; ca36 text_jump _AskSurfText ; The water is calm. db "@" ; Want to SURF? FlyFunction: ; ca3b 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: ; ca52 ; Fly ld de, ENGINE_STORMBADGE call CheckBadge jr c, .nostormbadge call GetMapEnvironment call CheckOutdoorMap jr z, .outdoors jr .indoors .outdoors xor a ld [hMapAnims], a call LoadStandardMenuDataHeader call ClearSprites farcall _FlyMap ld a, e cp -1 jr z, .illegal cp NUM_SPAWNS jr nc, .illegal ld [DefaultSpawnpoint], 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: ; ca94 ld hl, .FlyScript call QueueScript ld a, $81 ret .FailFly: ; ca9d call FieldMoveFailed ld a, $82 ret .FlyScript: ; 0xcaa3 reloadmappart callasm HideSprites special UpdateTimePals callasm FlyFromAnim farscall Script_AbortBugContest special WarpToSpawnPoint callasm DelayLoadingNewSprites writecode VAR_MOVEMENT, PLAYER_NORMAL newloadmap MAPSETUP_FLY callasm FlyToAnim special WaitSFX callasm .ReturnFromFly end .ReturnFromFly: ; cacb farcall Function561d call DelayFrame call ReplaceKrisSprite farcall LoadOverworldFont ret WaterfallFunction: ; cade call .TryWaterfall and $7f ld [wFieldMoveSucceeded], a ret .TryWaterfall: ; cae7 ; 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: ; cb07 ld a, [PlayerDirection] and $c cp FACE_UP jr nz, .failed ld a, [TileUp] call CheckWaterfallTile jr nz, .failed xor a ret .failed scf ret Script_WaterfallFromMenu: ; 0xcb1c reloadmappart special UpdateTimePals Script_UsedWaterfall: ; 0xcb20 callasm GetPartyNick writetext .Text_UsedWaterfall waitbutton closetext playsound SFX_BUBBLEBEAM .loop applymovement PLAYER, .WaterfallStep callasm .CheckContinueWaterfall iffalse .loop end .CheckContinueWaterfall: ; cb38 xor a ld [ScriptVar], a ld a, [PlayerStandingTile] call CheckWaterfallTile ret z farcall TrainerRankings_Waterfall ld a, $1 ld [ScriptVar], a ret .WaterfallStep: ; cb4f turn_waterfall UP step_end .Text_UsedWaterfall: ; 0xcb51 ; used WATERFALL! text_jump UnknownText_0x1c068e db "@" TryWaterfallOW:: ; cb56 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: ; 0xcb7e jumptext .Text_CantDoWaterfall .Text_CantDoWaterfall: ; 0xcb81 ; Wow, it's a huge waterfall. text_jump UnknownText_0x1c06a3 db "@" Script_AskWaterfall: ; 0xcb86 opentext writetext .AskUseWaterfall yesorno iftrue Script_UsedWaterfall closetext end .AskUseWaterfall: ; 0xcb90 ; Do you want to use WATERFALL? text_jump UnknownText_0x1c06bf db "@" EscapeRopeFunction: ; cb95 call FieldMoveJumptableReset ld a, $1 jr dig_incave DigFunction: ; cb9c call FieldMoveJumptableReset ld a, $2 dig_incave ld [Buffer2], a .loop ld hl, .DigTable call FieldMoveJumptable jr nc, .loop and $7f ld [wFieldMoveSucceeded], a ret .DigTable: ; cbb2 dw .CheckCanDig dw .DoDig dw .FailDig .CheckCanDig: ; cbb8 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: ; cbd8 ld hl, wDigWarpNumber ld de, wNextWarp ld bc, 3 call CopyBytes call GetPartyNick ld a, [Buffer2] 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: ; cc06 ld a, [Buffer2] cp $2 jr nz, .failescaperope ld hl, .Text_CantUseHere call MenuTextBox call WaitPressAorB_BlinkCursor call CloseWindow .failescaperope ld a, $80 ret .Text_UsedDig: ; 0xcc1c ; used DIG! text_jump UnknownText_0x1c06de db "@" .Text_UsedEscapeRope: ; 0xcc21 ; used an ESCAPE ROPE. text_jump UnknownText_0x1c06ed db "@" .Text_CantUseHere: ; 0xcc26 ; Can't use that here. text_jump UnknownText_0x1c0705 db "@" .UsedEscapeRopeScript: ; 0xcc2b reloadmappart special UpdateTimePals writetext .Text_UsedEscapeRope jump .UsedDigOrEscapeRopeScript .UsedDigScript: ; 0xcc35 reloadmappart special UpdateTimePals writetext .Text_UsedDig .UsedDigOrEscapeRopeScript: ; 0xcc3c waitbutton closetext playsound SFX_WARP_TO applymovement PLAYER, .DigOut farscall Script_AbortBugContest special WarpToSpawnPoint writecode VAR_MOVEMENT, PLAYER_NORMAL newloadmap MAPSETUP_DOOR playsound SFX_WARP_FROM applymovement PLAYER, .DigReturn end .DigOut: ; 0xcc59 step_dig 32 hide_object step_end .DigReturn: ; 0xcc5d show_object return_dig 32 step_end TeleportFunction: ; cc61 call FieldMoveJumptableReset .loop ld hl, .Jumptable call FieldMoveJumptable jr nc, .loop and $7f ld [wFieldMoveSucceeded], a ret .Jumptable: ; cc72 dw .TryTeleport dw .DoTeleport dw .FailTeleport .TryTeleport: ; cc78 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 [DefaultSpawnpoint], a ld a, $1 ret .nope ld a, $2 ret .DoTeleport: ; cc9c call GetPartyNick ld hl, .TeleportScript call QueueScript ld a, $81 ret .FailTeleport: ; cca8 ld hl, .Text_CantUseHere call MenuTextBoxBackup ld a, $80 ret .Text_ReturnToLastMonCenter: ; 0xccb1 ; Return to the last #MON CENTER. text_jump UnknownText_0x1c071a db "@" .Text_CantUseHere: ; 0xccb6 ; Can't use that here. text_jump UnknownText_0x1c073b db "@" .TeleportScript: ; 0xccbb reloadmappart special UpdateTimePals writetext .Text_ReturnToLastMonCenter pause 60 reloadmappart closetext playsound SFX_WARP_TO applymovement PLAYER, .TeleportFrom farscall Script_AbortBugContest special WarpToSpawnPoint writecode VAR_MOVEMENT, PLAYER_NORMAL newloadmap MAPSETUP_TELEPORT playsound SFX_WARP_FROM applymovement PLAYER, .TeleportTo end .TeleportFrom: ; cce1 teleport_from step_end .TeleportTo: ; cce3 teleport_to step_end StrengthFunction: ; cce5 call .TryStrength and $7f ld [wFieldMoveSucceeded], a ret .TryStrength: ; ccee ; Strength ld de, ENGINE_PLAINBADGE call CheckBadge jr c, .Failed jr .UseStrength .AlreadyUsing: ; unreferenced ld hl, .JumpText call MenuTextBoxBackup ld a, $80 ret .JumpText: ; 0xcd01 text_jump UnknownText_0x1c0751 db "@" .Failed: ; cd06 ld a, $80 ret .UseStrength: ; cd09 ld hl, Script_StrengthFromMenu call QueueScript ld a, $81 ret SetStrengthFlag: ; cd12 ld hl, BikeFlags set 0, [hl] ld a, [CurPartyMon] ld e, a ld d, 0 ld hl, PartySpecies add hl, de ld a, [hl] ld [Buffer6], a call GetPartyNick ret Script_StrengthFromMenu: ; 0xcd29 reloadmappart special UpdateTimePals Script_UsedStrength: ; 0xcd2d callasm SetStrengthFlag writetext .UsedStrength copybytetovar Buffer6 cry 0 pause 3 writetext .StrengthAllowedItToMoveBoulders closetext end .UsedStrength: ; 0xcd41 text_jump UnknownText_0x1c0774 db "@" .StrengthAllowedItToMoveBoulders: ; 0xcd46 text_jump UnknownText_0x1c0788 db "@" AskStrengthScript: callasm TryStrengthOW iffalse .AskStrength if_equal $1, .DontMeetRequirements jump .AlreadyUsedStrength .DontMeetRequirements: ; 0xcd59 jumptext UnknownText_0xcd73 .AlreadyUsedStrength: ; 0xcd5c jumptext UnknownText_0xcd6e .AskStrength: ; 0xcd5f opentext writetext UnknownText_0xcd69 yesorno iftrue Script_UsedStrength closetext end UnknownText_0xcd69: ; 0xcd69 ; A #MON may be able to move this. Want to use STRENGTH? text_jump UnknownText_0x1c07a0 db "@" UnknownText_0xcd6e: ; 0xcd6e ; Boulders may now be moved! text_jump UnknownText_0x1c07d8 db "@" UnknownText_0xcd73: ; 0xcd73 ; A #MON may be able to move this. text_jump UnknownText_0x1c07f4 db "@" TryStrengthOW: ; cd78 ld d, STRENGTH call CheckPartyMove jr c, .nope ld de, ENGINE_PLAINBADGE call CheckEngineFlag jr c, .nope ld hl, BikeFlags bit 0, [hl] jr z, .already_using ld a, 2 jr .done .nope ld a, 1 jr .done .already_using xor a jr .done .done ld [ScriptVar], a ret WhirlpoolFunction: ; cd9d call FieldMoveJumptableReset .loop ld hl, Jumptable_cdae call FieldMoveJumptable jr nc, .loop and $7f ld [wFieldMoveSucceeded], a ret Jumptable_cdae: ; cdae dw .TryWhirlpool dw .DoWhirlpool dw .FailWhirlpool .TryWhirlpool: ; cdb4 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: ; cdca ld hl, Script_WhirlpoolFromMenu call QueueScript ld a, $81 ret .FailWhirlpool: ; cdd3 call FieldMoveFailed ld a, $80 ret Text_UsedWhirlpool: ; 0xcdd9 ; used WHIRLPOOL! text_jump UnknownText_0x1c0816 db "@" TryWhirlpoolMenu: ; cdde 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 ld [Buffer3], a ld a, h ld [Buffer4], a ld a, b ld [Buffer5], a ld a, c ld [Buffer6], a xor a ret .failed scf ret Script_WhirlpoolFromMenu: ; 0xce0b reloadmappart special UpdateTimePals Script_UsedWhirlpool: ; 0xce0f callasm GetPartyNick writetext Text_UsedWhirlpool reloadmappart callasm DisappearWhirlpool closetext end DisappearWhirlpool: ; ce1d ld hl, Buffer3 ld a, [hli] ld h, [hl] ld l, a ld a, [Buffer5] ld [hl], a xor a ld [hBGMapMode], a call OverworldTextModeSwitch ld a, [Buffer6] ld e, a farcall PlayWhirlpoolSound call BufferScreen call GetMovementPermissions ret TryWhirlpoolOW:: ; ce3e 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: ; 0xce66 jumptext .MightyWhirlpoolText .MightyWhirlpoolText: ; 0xce69 text_jump UnknownText_0x1c082b db "@" Script_AskWhirlpoolOW: ; 0xce6e opentext writetext UnknownText_0xce78 yesorno iftrue Script_UsedWhirlpool closetext end UnknownText_0xce78: ; 0xce78 text_jump UnknownText_0x1c0864 db "@" HeadbuttFunction: ; ce7d call TryHeadbuttFromMenu and $7f ld [wFieldMoveSucceeded], a ret TryHeadbuttFromMenu: ; ce86 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: ; 0xce9d ; did a HEADBUTT! text_jump UnknownText_0x1c0897 db "@" UnknownText_0xcea2: ; 0xcea2 ; Nope. Nothing… text_jump UnknownText_0x1c08ac db "@" HeadbuttFromMenuScript: ; 0xcea7 reloadmappart special UpdateTimePals HeadbuttScript: ; 0xceab 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 TryHeadbuttOW:: ; cec9 ld d, HEADBUTT call CheckPartyMove jr c, .no ld a, BANK(AskHeadbuttScript) ld hl, AskHeadbuttScript call CallScript scf ret .no xor a ret AskHeadbuttScript: ; 0xcedc opentext writetext UnknownText_0xcee6 yesorno iftrue HeadbuttScript closetext end UnknownText_0xcee6: ; 0xcee6 ; A #MON could be in this tree. Want to HEADBUTT it? text_jump UnknownText_0x1c08bc db "@" RockSmashFunction: ; ceeb call TryRockSmashFromMenu and $7f ld [wFieldMoveSucceeded], a ret TryRockSmashFromMenu: ; cef4 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: ; cf0d farcall CheckFacingObject jr nc, .fail ld a, [hObjectStructIndexBuffer] call GetObjectStruct ld hl, OBJECT_MAP_OBJECT_INDEX add hl, bc ld a, [hl] ld [hLastTalked], a call GetMapObject ld hl, MAPOBJECT_MOVEMENT add hl, bc ld a, [hl] ld d, a and a ret .fail scf ret RockSmashFromMenuScript: ; 0xcf2e reloadmappart special UpdateTimePals RockSmashScript: ; cf32 callasm GetPartyNick writetext UnknownText_0xcf58 closetext special WaitSFX playsound SFX_STRENGTH earthquake 84 applymovement2 MovementData_0xcf55 disappear -2 callasm RockMonEncounter copybytetovar TempWildMonSpecies iffalse .done randomwildmon startbattle reloadmapafterbattle .done end MovementData_0xcf55: ; 0xcf55 rock_smash 10 step_end UnknownText_0xcf58: ; 0xcf58 text_jump UnknownText_0x1c08f0 db "@" AskRockSmashScript: ; 0xcf5d callasm HasRockSmash if_equal 1, .no opentext writetext UnknownText_0xcf77 yesorno iftrue RockSmashScript closetext end .no jumptext UnknownText_0xcf72 UnknownText_0xcf72: ; 0xcf72 ; Maybe a #MON can break this. text_jump UnknownText_0x1c0906 db "@" UnknownText_0xcf77: ; 0xcf77 ; This rock looks breakable. Want to use ROCK SMASH? text_jump UnknownText_0x1c0924 db "@" HasRockSmash: ; cf7c ld d, ROCK_SMASH call CheckPartyMove jr nc, .yes .no ld a, 1 jr .done .yes xor a jr .done .done ld [ScriptVar], a ret FishFunction: ; cf8e ld a, e push af call FieldMoveJumptableReset pop af ld [Buffer2], a .loop ld hl, .FishTable call FieldMoveJumptable jr nc, .loop and $7f ld [wFieldMoveSucceeded], a ret .FishTable: ; cfa5 dw .TryFish dw .FishNoBite dw .FishGotSomething dw .FailFish dw .FishNoFish .TryFish: ; cfaf ld a, [PlayerState] cp PLAYER_SURF jr z, .fail cp PLAYER_SURF_PIKA jr z, .fail call GetFacingTileCoord call GetTileCollision cp WATERTILE 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, [Buffer2] ld e, a farcall Fish ld a, d and a jr z, .nonibble ld [TempWildMonSpecies], a ld a, e ld [CurPartyLevel], a ld a, BATTLETYPE_FISH ld [BattleType], a ld a, $2 ret .nonibble ld a, $1 ret .FailFish: ; cff1 ld a, $80 ret .FishGotSomething: ; cff4 ld a, $1 ld [Buffer6], a ld hl, Script_GotABite call QueueScript ld a, $81 ret .FishNoBite: ; d002 ld a, $2 ld [Buffer6], a ld hl, Script_NotEvenANibble call QueueScript ld a, $81 ret .FishNoFish: ; d010 ld a, $0 ld [Buffer6], a ld hl, Script_NotEvenANibble2 call QueueScript ld a, $81 ret Script_NotEvenANibble: ; 0xd01e scall Script_FishCastRod writetext UnknownText_0xd0a9 jump Script_NotEvenANibble_FallThrough Script_NotEvenANibble2: ; 0xd027 scall Script_FishCastRod writetext UnknownText_0xd0a9 Script_NotEvenANibble_FallThrough: ; 0xd02d loademote EMOTE_SHADOW callasm PutTheRodAway closetext end Script_GotABite: ; 0xd035 scall Script_FishCastRod callasm Fishing_CheckFacingUp iffalse .NotFacingUp applymovement PLAYER, .Movement_FacingUp jump .FightTheHookedPokemon .NotFacingUp: ; 0xd046 applymovement PLAYER, .Movement_NotFacingUp .FightTheHookedPokemon: ; 0xd04a pause 40 applymovement PLAYER, .Movement_RestoreRod writetext UnknownText_0xd0a4 callasm PutTheRodAway closetext randomwildmon startbattle reloadmapafterbattle end .Movement_NotFacingUp: ; d05c fish_got_bite fish_got_bite fish_got_bite fish_got_bite show_emote step_end .Movement_FacingUp: ; d062 fish_got_bite fish_got_bite fish_got_bite fish_got_bite step_sleep 1 show_emote step_end .Movement_RestoreRod: ; d069 hide_emote fish_cast_rod step_end Fishing_CheckFacingUp: ; d06c ld a, [PlayerDirection] and $c cp OW_UP ld a, $1 jr z, .up xor a .up ld [ScriptVar], a ret Script_FishCastRod: ; 0xd07c reloadmappart loadvar hBGMapMode, $0 special UpdateTimePals loademote EMOTE_ROD callasm LoadFishingGFX loademote EMOTE_SHOCK applymovement PLAYER, MovementData_0xd093 pause 40 end MovementData_0xd093: ; d093 fish_cast_rod step_end PutTheRodAway: ; d095 xor a ld [hBGMapMode], a ld a, $1 ld [PlayerAction], a call UpdateSprites call ReplaceKrisSprite ret UnknownText_0xd0a4: ; 0xd0a4 ; Oh! A bite! text_jump UnknownText_0x1c0958 db "@" UnknownText_0xd0a9: ; 0xd0a9 ; Not even a nibble! text_jump UnknownText_0x1c0965 db "@" UnknownText_0xd0ae: ; unused ; Looks like there's nothing here. text_jump UnknownText_0x1c0979 db "@" BikeFunction: ; d0b3 call .TryBike and $7f ld [wFieldMoveSucceeded], a ret .TryBike: ; d0bc call .CheckEnvironment jr c, .CannotUseBike ld a, [PlayerState] 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 [MusicFade], 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, BikeFlags bit 1, [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: ; d119 ld a, [wUsingItemWithSelect] and a ret z ld h, d ld l, e ret .CheckEnvironment: ; d121 call GetMapEnvironment 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 jr nz, .nope xor a ret .nope scf ret Script_GetOnBike: ; 0xd13e reloadmappart special UpdateTimePals writecode VAR_MOVEMENT, PLAYER_BIKE writetext GotOnTheBikeText waitbutton closetext special ReplaceKrisSprite end Script_GetOnBike_Register: ; 0xd14e writecode VAR_MOVEMENT, PLAYER_BIKE closetext special ReplaceKrisSprite end ; XXX nop ret Script_GetOffBike: ; 0xd158 reloadmappart special UpdateTimePals writecode VAR_MOVEMENT, PLAYER_NORMAL writetext GotOffTheBikeText waitbutton FinishGettingOffBike: closetext special ReplaceKrisSprite special PlayMapMusic end Script_GetOffBike_Register: ; 0xd16b writecode VAR_MOVEMENT, PLAYER_NORMAL jump FinishGettingOffBike Script_CantGetOffBike: ; 0xd171 writetext .CantGetOffBikeText waitbutton closetext end .CantGetOffBikeText: ; 0xd177 ; You can't get off here! text_jump UnknownText_0x1c099a db "@" GotOnTheBikeText: ; 0xd17c ; got on the @ . text_jump UnknownText_0x1c09b2 db "@" GotOffTheBikeText: ; 0xd181 ; got off the @ . text_jump UnknownText_0x1c09c7 db "@" TryCutOW:: ; d186 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: ; 0xd1a9 opentext writetext UnknownText_0xd1c8 yesorno iffalse .script_d1b8 callasm .CheckMap iftrue Script_Cut .script_d1b8 closetext end .CheckMap: ; d1ba xor a ld [ScriptVar], a call CheckMapForSomethingToCut ret c ld a, TRUE ld [ScriptVar], a ret UnknownText_0xd1c8: ; 0xd1c8 text_jump UnknownText_0x1c09dd db "@" CantCutScript: ; 0xd1cd jumptext UnknownText_0xd1d0 UnknownText_0xd1d0: ; 0xd1d0 text_jump UnknownText_0x1c0a05 db "@"