summaryrefslogtreecommitdiff
path: root/engine
diff options
context:
space:
mode:
authorIIMarckus <iimarckus@gmail.com>2018-08-17 10:32:38 -0600
committerIIMarckus <iimarckus@gmail.com>2018-08-17 10:32:38 -0600
commitfc8ef52b371b1a7eee26710517aa2d8f72b273d1 (patch)
tree0d4f0f3132d05f6d92957b6d72b9b68f6a828a34 /engine
parent1ac9752db0bb5c7804c95982ffe0fa3c3dd41f5e (diff)
Shuffle files around to closer match pokecrystal.
Diffstat (limited to 'engine')
-rwxr-xr-xengine/color.asm6
-rwxr-xr-xengine/events/haircut.asm81
-rwxr-xr-xengine/events/happiness_egg.asm217
-rwxr-xr-xengine/events/overworld.asm1758
-rwxr-xr-xengine/events/shuckle.asm114
5 files changed, 2173 insertions, 3 deletions
diff --git a/engine/color.asm b/engine/color.asm
index 0f73ff99..b379cdc1 100755
--- a/engine/color.asm
+++ b/engine/color.asm
@@ -1499,13 +1499,13 @@ Pointers_b6ce:
db $18, $19, $1a, $1b, $1c, $1d, $1e, $1f ; dark
TilesetBGPalette: ; b75e
-INCLUDE "tilesets/bg.pal"
+INCLUDE "gfx/tilesets/bg.pal"
MapObjectPals:: ; b8ae
-INCLUDE "tilesets/ob.pal"
+INCLUDE "gfx/tilesets/ob.pal"
RoofPals: ; b9ae
-INCLUDE "tilesets/roof.pal"
+INCLUDE "gfx/tilesets/roof.pal"
Palettes_ba86:
RGB 27, 31, 27
diff --git a/engine/events/haircut.asm b/engine/events/haircut.asm
new file mode 100755
index 00000000..2365e74f
--- /dev/null
+++ b/engine/events/haircut.asm
@@ -0,0 +1,81 @@
+BillsGrandfather:
+ callba Function50000
+ jr c, .asm_74e2
+ ld a, [wd004]
+ ld [wScriptVar], a
+ ld [wd151], a
+ call GetPokemonName
+ jp Function7542
+
+.asm_74e2
+ xor a
+ ld [wScriptVar], a
+ ret
+
+Function74e7:
+ ld hl, Data_752d
+ jr asm_74f4
+
+Function74ec:
+ ld hl, Data_7536
+ jr asm_74f4
+
+Function74f1:
+ ld hl, Data_753f
+asm_74f4
+ push hl
+ callba Function50000
+ pop hl
+ jr c, .asm_7522
+ ld a, [wCurPartySpecies]
+ cp EGG
+ jr z, .asm_7527
+ push hl
+ call GetCurNick
+ call Function7542
+ pop hl
+ call Random
+.asm_7510
+ sub [hl]
+ jr c, .asm_7518
+ inc hl
+ inc hl
+ inc hl
+ jr .asm_7510
+
+.asm_7518
+ inc hl
+ ld a, [hli]
+ ld [wScriptVar], a
+ ld c, [hl]
+ call ChangeHappiness
+ ret
+
+.asm_7522
+ xor a
+ ld [wScriptVar], a
+ ret
+
+.asm_7527
+ ld a, $1
+ ld [wScriptVar], a
+ ret
+
+Data_752d:
+ db $4c, $02, $09
+ db $80, $03, $0a
+ db $ff, $04, $0b
+
+Data_7536:
+ db $9a, $02, $0c
+ db $4c, $03, $0d
+ db $ff, $04, $0e
+
+Data_753f:
+ db $ff, $02, $12
+
+Function7542: ; 7542 (1:7542)
+ ld hl, wStringBuffer1
+ ld de, wStringBuffer3
+ ld bc, MON_NAME_LENGTH
+ jp CopyBytes
diff --git a/engine/events/happiness_egg.asm b/engine/events/happiness_egg.asm
new file mode 100755
index 00000000..5a7a8ba3
--- /dev/null
+++ b/engine/events/happiness_egg.asm
@@ -0,0 +1,217 @@
+GetFirstPokemonHappiness:
+ ld hl, wPartyMon1Happiness
+ ld bc, $30
+ ld de, wPartySpecies
+.asm_7275
+ ld a, [de]
+ cp EGG
+ jr nz, .asm_727e
+ inc de
+ add hl, bc
+ jr .asm_7275
+
+.asm_727e
+ ld [wd151], a
+ ld a, [hl]
+ ld [wScriptVar], a
+ call GetPokemonName
+ jp Function7542
+
+CheckFirstMonIsEgg:
+ ld a, [wPartySpecies]
+ ld [wd151], a
+ cp EGG
+ ld a, $1
+ jr z, .asm_7298
+ xor a
+.asm_7298
+ ld [wScriptVar], a
+ call GetPokemonName
+ jp Function7542
+
+ChangeHappiness: ; 72a1 (1:72a1)
+ ld a, [wd005]
+ inc a
+ ld e, a
+ ld d, $0
+ ld hl, wPartyCount
+ add hl, de
+ ld a, [hl]
+ cp $fd
+ ret z
+ push bc
+ ld hl, wPartyMon1Happiness
+ ld bc, $30
+ ld a, [wd005]
+ call AddNTimes
+ pop bc
+ ld d, h
+ ld e, l
+ push de
+ ld a, [de]
+ cp $64
+ ld e, $0
+ jr c, .asm_72ce
+ inc e
+ cp $c8
+ jr c, .asm_72ce
+ inc e
+.asm_72ce
+ dec c
+ ld b, $0
+ ld hl, .Actions
+ add hl, bc
+ add hl, bc
+ add hl, bc
+ ld d, $0
+ add hl, de
+ ld a, [hl]
+ cp $64
+ pop de
+ ld a, [de]
+ jr nc, .asm_72e8
+ add [hl]
+ jr nc, .asm_72ec
+ ld a, $ff
+ jr .asm_72ec
+
+.asm_72e8
+ add [hl]
+ jr c, .asm_72ec
+ xor a
+.asm_72ec
+ ld [de], a
+ ld a, [wBattleMode]
+ and a
+ ret z
+ ld a, [wd005]
+ ld b, a
+ ld a, [wPartyMenuCursor]
+ cp b
+ ret nz
+ ld a, [de]
+ ld [wBattleMonHappiness], a
+ ret
+
+.Actions:
+ db +5, +3, +2 ; Gained a level
+ db +5, +3, +2 ; Vitamin
+ db +1, +1, +0 ; X Item
+ db +3, +2, +1 ; Battled a Gym Leader
+ db +1, +1, +0 ; Learned a move
+ db -1, -1, -1 ; Lost to an enemy
+ db -5, -5, -10 ; Fainted due to poison
+ db -5, -5, -10 ; Lost to a much stronger enemy
+ db +1, +1, +1 ; Haircut (Y1)
+ db +3, +3, +1 ; Haircut (Y2)
+ db +5, +5, +2 ; Haircut (Y3)
+ db +1, +1, +1 ; Haircut (O1)
+ db +3, +3, +1 ; Haircut (O2)
+ db +10, +10, +4 ; Haircut (O3)
+ db -5, -5, -10 ; Used Heal Powder or Energypowder (bitter)
+ db -10, -10, -15 ; Used Energy Root (bitter)
+ db -15, -15, -20 ; Used Revival Herb (bitter)
+ db +3, +3, +1 ; Grooming
+
+StepHappiness::
+ ld hl, wd9c1
+ ld a, [hl]
+ inc a
+ and $1
+ ld [hl], a
+ ret nz
+ ld de, wPartyCount
+ ld a, [de]
+ and a
+ ret z
+ ld c, a
+ ld hl, wPartyMon1Happiness
+.asm_7349
+ inc de
+ ld a, [de]
+ cp EGG
+ jr z, .asm_7354
+ inc [hl]
+ jr nz, .asm_7354
+ ld [hl], $ff
+.asm_7354
+ push de
+ ld de, $30
+ add hl, de
+ pop de
+ dec c
+ jr nz, .asm_7349
+ ret
+
+MAX_EXP EQU 5242880
+
+DaycareStep::
+ CheckFlag ENGINE_DAY_CARE_MAN_HAS_MON
+ jr z, .daycare_lady
+ ld a, [wBreedMon1Level]
+ cp MAX_LEVEL
+ jr nc, .daycare_lady
+ ld hl, wBreedMon1Exp + 2
+ inc [hl]
+ jr nz, .daycare_lady
+ dec hl
+ inc [hl]
+ jr nz, .daycare_lady
+ dec hl
+ inc [hl]
+ ld a, [hl]
+ cp MAX_EXP / $10000
+ jr c, .daycare_lady
+ ld a, MAX_EXP / $10000
+ ld [hl], a
+.daycare_lady
+ CheckFlag ENGINE_DAY_CARE_LADY_HAS_MON
+ jr z, .check_egg
+ ld a, [wBreedMon2Level]
+ cp MAX_LEVEL
+ jr nc, .check_egg
+ ld hl, wBreedMon2Exp + 2
+ inc [hl]
+ jr nz, .check_egg
+ dec hl
+ inc [hl]
+ jr nz, .check_egg
+ dec hl
+ inc [hl]
+ ld a, [hl]
+ cp MAX_EXP / $10000
+ jr c, .check_egg
+ ld a, MAX_EXP / $10000
+ ld [hl], a
+.check_egg
+ ld hl, wDayCareMan
+ bit 5, [hl]
+ ret z
+ ld hl, wStepsToEgg
+ dec [hl]
+ ret nz
+
+ call Random
+ ld [hl], a
+ callab Function171d1
+ ld a, [wd151]
+ cp 230
+ ld b, -1 + 32 percent
+ jr nc, .okay
+ ld a, [wd151]
+ cp 170
+ ld b, 16 percent
+ jr nc, .okay
+ ld a, [wd151]
+ cp 110
+ ld b, 12 percent
+ jr nc, .okay
+ ld b, 4 percent
+.okay
+ call Random
+ cp b
+ ret nc
+ ld hl, wDayCareMan
+ res 5, [hl]
+ SetFlagForceReuseHL ENGINE_DAY_CARE_MAN_HAS_EGG
+ ret
diff --git a/engine/events/overworld.asm b/engine/events/overworld.asm
new file mode 100755
index 00000000..fc9a1102
--- /dev/null
+++ b/engine/events/overworld.asm
@@ -0,0 +1,1758 @@
+FieldMoveBufferReset: ; c72f (3:472f)
+ xor a
+ ld hl, wBuffer1
+ ld bc, $7
+ call ByteFill
+ ret
+
+DoFieldMoveAction: ; c73a (3:473a)
+ ld a, [wBuffer1]
+ rst JumpTable
+ ld [wBuffer1], a
+ bit 7, a
+ jr nz, .asm_c747
+ and a
+ ret
+
+.asm_c747
+ and $7f
+ scf
+ ret
+
+FieldMoveGetPartyNick: ; c74b (3:474b)
+ ld hl, wPartyMon1Nickname
+ ld a, $2
+ ld [wMonType], a
+ ld a, [wd005]
+ call GetNick
+ call Function317b
+ ld de, wStringBuffer2
+ ld hl, wStringBuffer3
+ call CopyName2
+ ret
+
+FieldMoveEngineFlagCheck: ; c766 (3:4766)
+ ld b, CHECK_FLAG
+ callba EngineFlagAction ; same bank
+ ld a, c
+ and a
+ jr nz, .asm_c774
+ scf
+ ret
+
+.asm_c774
+ xor a
+ ret
+
+FieldMoveBadgeCheck: ; c776 (3:4776)
+ call FieldMoveEngineFlagCheck
+ ret nc
+ ld hl, .BadgeRequiredText
+ call MenuTextBoxBackup
+ scf
+ ret
+
+.BadgeRequiredText:
+ text_jump BadgeRequiredText_
+ db "@"
+
+FieldMovePartyCheck: ; c787 (3:4787)
+ ld e, $0
+ xor a
+ ld [wd005], a
+.asm_c78d
+ ld c, e
+ ld b, $0
+ ld hl, wPartySpecies
+ add hl, bc
+ ld a, [hl]
+ and a
+ jr z, .asm_c7bc
+ cp -1
+ jr z, .asm_c7bc
+ cp EGG
+ jr z, .asm_c7b3
+ ld bc, PARTYMON_STRUCT_LENGTH
+ ld hl, wPartyMon1Moves
+ ld a, e
+ call AddNTimes
+ ld b, NUM_MOVES
+.asm_c7ac
+ ld a, [hli]
+ cp d
+ jr z, .asm_c7b6
+ dec b
+ jr nz, .asm_c7ac
+.asm_c7b3
+ inc e
+ jr .asm_c78d
+
+.asm_c7b6
+ ld a, e
+ ld [wd005], a
+ xor a
+ ret
+
+.asm_c7bc
+ scf
+ ret
+
+FieldMoveFailed: ; c7be (3:47be)
+ ld hl, .CantUseHereText
+ call MenuTextBoxBackup
+ ret
+
+.CantUseHereText:
+ text_jump CantUseFieldMoveHereText_
+ db "@"
+
+CutFunction::
+ call FieldMoveBufferReset
+.asm_c7cd
+ ld hl, .Jumptable
+ call DoFieldMoveAction
+ jr nc, .asm_c7cd
+ and $7f
+ ld [wFieldMoveSucceeded], a
+ ret
+
+.Jumptable:
+ dw CheckAbleToCut
+ dw CutTreeOrGrass
+ dw FailToCut
+
+CheckAbleToCut:
+ ld de, ENGINE_HIVEBADGE
+ call FieldMoveBadgeCheck
+ jr c, .asm_c7f1
+ call CheckMapForSomethingToCut
+ jr c, .asm_c7f4
+ ld a, $1
+ ret
+
+.asm_c7f1
+ ld a, $80
+ ret
+
+.asm_c7f4
+ ld a, $2
+ ret
+
+CutTreeOrGrass:
+ ld hl, Script_CutFromMenu
+ call QueueScript
+ ld a, $81
+ ret
+
+FailToCut:
+ ld hl, Text_NothingToCut
+ call MenuTextBoxBackup
+ ld a, $80
+ ret
+
+Text_UsedCut:
+ text_jump Text_UsedCut_
+ db "@"
+
+Text_NothingToCut:
+ text_jump Text_NothingToCut_
+ db "@"
+
+CheckMapForSomethingToCut: ; c813 (3:4813)
+ call GetFacingTileCoord
+ ld c, a
+ push de
+ callba CheckCutCollision
+ pop de
+ jr nc, .asm_c841
+ call GetBlockLocation
+ ld c, [hl]
+ push hl
+ ld hl, CutTreeBlockPointers
+ call CheckOverworldTileArrays
+ pop hl
+ jr nc, .asm_c841
+ ld a, l
+ ld [wBuffer3], a
+ ld a, h
+ ld [wBuffer4], a
+ ld a, b
+ ld [wBuffer5], a
+ ld a, c
+ ld [wBuffer6], a
+ xor a
+ ret
+
+.asm_c841
+ scf
+ ret
+
+Script_CutFromMenu:
+ reloadmappart
+ special UpdateTimePals
+Script_Cut:
+ callasm FieldMoveGetPartyNick
+ writetext Text_UsedCut
+ reloadmappart
+ callasm CutDownTreeOrGrass
+ closetext
+ end
+
+CutDownTreeOrGrass:
+ ld hl, wBuffer3
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld a, [wBuffer5]
+ ld [hl], a
+ xor a
+ ld [hBGMapMode], a
+ call OverworldTextModeSwitch
+ call UpdateSprites
+ call DelayFrame
+ ld a, [wBuffer6]
+ ld e, a
+ callba OWCutAnimation
+ call BufferScreen
+ call GetMovementPermissions
+ ret
+
+CheckOverworldTileArrays: ; c87c (3:487c)
+ push bc
+ ld a, [wd082]
+ ld de, $3
+ call IsInArray
+ pop bc
+ jr nc, .asm_c89c
+ inc hl
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld de, $3
+ ld a, c
+ call IsInArray
+ jr nc, .asm_c89c
+ inc hl
+ ld b, [hl]
+ inc hl
+ ld c, [hl]
+ scf
+ ret
+
+.asm_c89c
+ xor a
+ ret
+
+CutTreeBlockPointers:
+ dbw TILESET_JOHTO_1, .johto1
+ dbw TILESET_JOHTO_2, .johto2
+ dbw TILESET_KANTO, .kanto
+ dbw TILESET_PARK, .park
+ dbw TILESET_ILEX_FOREST, .ilex
+ db -1
+
+.johto1
+ db $03, $02, $01 ; grass
+ db $5b, $3c, $00 ; tree
+ db $5f, $3d, $00 ; tree
+ db $63, $3f, $00 ; tree
+ db $67, $3e, $00 ; tree
+ db -1
+
+.johto2
+ db $03, $02, $01 ; grass
+ db -1
+
+.kanto
+ db $0b, $0a, $01 ; grass
+ db $32, $6d, $00 ; tree
+ db $33, $6c, $00 ; tree
+ db $34, $6f, $00 ; tree
+ db $35, $4c, $00 ; tree
+ db $60, $6e, $00 ; tree
+ db -1
+
+.park
+ db $13, $03, $01 ; grass
+ db $03, $04, $01 ; grass
+ db -1
+
+.ilex
+ db $0f, $17, $00
+ db -1
+
+WhirlpoolBlockPointers:
+ dbw TILESET_JOHTO_1, .johto
+ db -1
+
+.johto
+ db $07, $36, $00
+ db -1
+
+FlashFunction:
+ call CheckUseFlash
+ and $7f
+ ld [wFieldMoveSucceeded], a
+ ret
+
+CheckUseFlash: ; c8f1 (3:48f1)
+ ld de, ENGINE_ZEPHYRBADGE
+ callba FieldMoveBadgeCheck ; same bank
+ jr c, .asm_c90f
+ ld a, [wd56e]
+ cp $ff
+ jr nz, .asm_c909
+ call UseFlash
+ ld a, $81
+ ret
+
+.asm_c909
+ call FieldMoveFailed
+ ld a, $80
+ ret
+
+.asm_c90f
+ ld a, $80
+ ret
+
+UseFlash: ; c912 (3:4912)
+ ld hl, Script_UseFlash
+ jp QueueScript
+
+Script_UseFlash:
+ reloadmappart
+ special UpdateTimePals
+ writetext Text_UsedFlash
+ callasm BlindingFlash
+ closetext
+ end
+
+Text_UsedFlash:
+ text_jump Text_UsedFlash_
+ start_asm
+ call WaitSFX
+ ld de, SFX_FLASH
+ call PlaySFX
+ call WaitSFX
+ ld hl, .end
+ ret
+.end db "@"
+
+SurfFunction:
+ call FieldMoveBufferReset
+.asm_c93e
+ ld hl, .Jumptable
+ call DoFieldMoveAction
+ jr nc, .asm_c93e
+ and $7f
+ ld [wFieldMoveSucceeded], a
+ ret
+
+.Jumptable:
+ dw CheckAbleToSurf
+ dw StartSurfing
+ dw CantSurf
+ dw AlreadySurfing
+
+CheckAbleToSurf:
+ ld de, ENGINE_FOGBADGE
+ call FieldMoveBadgeCheck
+ jr c, .asm_c980
+ CheckFlagHL ENGINE_ALWAYS_ON_BIKE
+ jr nz, .asm_c986
+ ld a, [wPlayerBikeSurfState]
+ cp PLAYER_SURF
+ jr z, .asm_c983
+ cp PLAYER_SURF_PIKA
+ jr z, .asm_c983
+ call GetFacingTileCoord
+ call GetTileCollision
+ cp $1
+ jr nz, .asm_c986
+ call GetSurfDirection
+ jr c, .asm_c986
+ ld a, $1
+ ret
+
+.asm_c980
+ ld a, $80
+ ret
+
+.asm_c983
+ ld a, $3
+ ret
+
+.asm_c986
+ ld a, $2
+ ret
+
+StartSurfing:
+ call GetSurfType
+ ld [wBuffer2], a
+ call FieldMoveGetPartyNick
+ ld hl, SurfFromMenuScript
+ call QueueScript
+ ld a, $81
+ ret
+
+CantSurf:
+ 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
+ waitbutton
+ closetext
+ copybytetovar wBuffer2
+ writevarcode VAR_MOVEMENT
+ special ReplacePlayerSprite
+ special PlayMapMusic
+ special SurfStartStep
+ applymovement 0, wMovementBuffer
+ end
+
+UsedSurfText:
+ text_jump UsedSurfText_
+ db "@"
+
+CantSurfText:
+ text_jump CantSurfText_
+ db "@"
+
+AlreadySurfingText:
+ text_jump AlreadySurfingText_
+ db "@"
+
+GetSurfType: ; c9d7 (3:49d7)
+ ld a, [wd005]
+ 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
+
+GetSurfDirection: ; c9ea (3:49ea)
+ ld a, [wPlayerDirection]
+ and $c
+ rrca
+ rrca
+ ld e, a
+ ld d, $0
+ ld hl, .Directions
+ add hl, de
+ ld a, [wTilePermissions]
+ and [hl]
+ jr nz, .asm_ca00
+ xor a
+ ret
+
+.asm_ca00
+ scf
+ ret
+
+.Directions:
+ db FACE_DOWN
+ db FACE_UP
+ db FACE_LEFT
+ db FACE_RIGHT
+
+TrySurfOW::
+ ld a, [wPlayerBikeSurfState]
+ cp PLAYER_SURF_PIKA
+ jr z, .quit
+ cp PLAYER_SURF
+ jr z, .quit
+ ld a, [wcf29]
+ call GetTileCollision
+ cp $1
+ jr nz, .quit
+ call GetSurfDirection
+ jr c, .quit
+ ld de, ENGINE_FOGBADGE
+ call FieldMoveEngineFlagCheck
+ jr c, .quit
+ ld d, SURF
+ call FieldMovePartyCheck
+ jr c, .quit
+ CheckFlagHL ENGINE_ALWAYS_ON_BIKE
+ jr nz, .quit
+ call GetSurfType
+ ld [wBuffer2], a
+ call FieldMoveGetPartyNick
+ 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_jump AskSurfText_
+ db "@"
+
+FlyFunction:
+ call FieldMoveBufferReset
+.asm_ca5d
+ ld hl, .Jumptable
+ call DoFieldMoveAction
+ jr nc, .asm_ca5d
+ and $7f
+ ld [wFieldMoveSucceeded], a
+ ret
+
+.Jumptable
+ dw TryToFly
+ dw RunFlyScript
+ dw FailToFly
+
+TryToFly:
+ ld de, ENGINE_STORMBADGE
+ call FieldMoveBadgeCheck
+ jr c, .asm_caa4
+ call GetMapPermission
+ call CheckOutdoorMap
+ jr z, .asm_ca83
+ jr .asm_caa7
+
+.asm_ca83
+ xor a
+ ld [hMapAnims], a
+ call LoadStandardMenuDataHeader
+ call ClearSprites
+ ld a, $24
+ ld hl, $5a61
+ rst FarCall
+ ld a, e
+ cp $ff
+ jr z, .asm_caaa
+ cp $1c
+ jr nc, .asm_caaa
+ ld [wceec], a
+ call CloseWindow
+ ld a, $1
+ ret
+
+.asm_caa4
+ ld a, $82
+ ret
+
+.asm_caa7
+ ld a, $2
+ ret
+
+.asm_caaa
+ call CloseWindow
+ call WaitBGMap
+ ld a, $80
+ ret
+
+RunFlyScript:
+ ld hl, FlyScript
+ call QueueScript
+ ld a, $81
+ ret
+
+FailToFly:
+ call FieldMoveFailed
+ ld a, $82
+ ret
+
+FlyScript:
+ reloadmappart
+ callasm HideSprites
+ special UpdateTimePals
+ callasm FlyFromAnimation
+ farscall AbortBugCatchingContest
+ special WarpToSpawnPoint
+ callasm DelayLoadingNewSprites ; 1560c
+ writecode VAR_MOVEMENT, PLAYER_NORMAL
+ newloadmap MAPSETUP_TELEPORT
+ callasm FlyToAnimation
+ special WaitSFX
+ special ReplacePlayerSprite
+ callasm Function1415c
+ end
+
+WaterfallFunction: ; caed
+ call TryWaterfall
+ and $7f
+ ld [wFieldMoveSucceeded], a
+ ret
+
+TryWaterfall: ; caf6 (3:4af6)
+ ld de, ENGINE_RISINGBADGE
+ callba FieldMoveBadgeCheck ; same bank
+ ld a, $80
+ ret c
+ call CheckMapCanWaterfall
+ jr c, .asm_cb10
+ ld hl, Script_WaterfallFromMenu
+ call QueueScript
+ ld a, $81
+ ret
+
+.asm_cb10
+ call FieldMoveFailed
+ ld a, $80
+ ret
+
+CheckMapCanWaterfall: ; cb16 (3:4b16)
+ ld a, [wPlayerDirection]
+ and $c
+ cp FACE_UP
+ jr nz, .asm_cb29
+ ld a, [wTileUp]
+ call CheckWaterfallTile
+ jr nz, .asm_cb29
+ xor a
+ ret
+
+.asm_cb29
+ scf
+ ret
+
+Script_WaterfallFromMenu: ;cb2b
+ reloadmappart
+ special UpdateTimePals
+Script_UsedWaterfall:
+ callasm FieldMoveGetPartyNick
+ writetext Text_UsedWaterfall
+ waitbutton
+ closetext
+ playsound SFX_BUBBLEBEAM
+.loop
+ applymovement 0, WaterfallStep
+ callasm CheckContinueWaterfall
+ iffalse .loop
+ end
+
+WaterfallStep:
+ turn_waterfall UP
+ step_end
+
+CheckContinueWaterfall: ;cb49
+ xor a
+ ld [wScriptVar], a
+ ld a, [wPlayerStandingTile]
+ call CheckWaterfallTile
+ ret z
+ ld a, $1
+ ld [wScriptVar], a
+ ret
+
+Text_UsedWaterfall:
+ text_jump Text_UsedWaterfall_
+ db "@"
+
+TryWaterfallOW:
+ ld d, WATERFALL
+ call FieldMovePartyCheck
+ jr c, .asm_cb7d
+ ld de, ENGINE_RISINGBADGE
+ call FieldMoveEngineFlagCheck
+ jr c, .asm_cb7d
+ call CheckMapCanWaterfall
+ jr c, .asm_cb7d
+ ld a, BANK(Script_AskWaterfall)
+ ld hl, Script_AskWaterfall
+ call CallScript
+ scf
+ ret
+
+.asm_cb7d
+ ld a, BANK(Script_CantDoWaterfall)
+ ld hl, Script_CantDoWaterfall
+ call CallScript
+ scf
+ ret
+
+Script_CantDoWaterfall:;cb87
+ jumptext Text_CantDoWaterfall
+
+Text_CantDoWaterfall:
+ text_jump Text_CantDoWaterfall_
+ db "@"
+
+Script_AskWaterfall:
+ opentext
+ writetext Text_AskUseWaterfall
+ yesorno
+ iftrue Script_UsedWaterfall
+ closetext
+ end
+
+Text_AskUseWaterfall:
+ text_jump Text_AskUseWaterfall_
+ db "@"
+
+EscapeRopeFunction:
+ call FieldMoveBufferReset
+ ld a, $1
+ jr asm_cbaa
+
+DigFunction:
+ call FieldMoveBufferReset
+ ld a, $2
+asm_cbaa
+ ld [wBuffer2], a
+.asm_cbad
+ ld hl, .Jumptable
+ call DoFieldMoveAction
+ jr nc, .asm_cbad
+ and $7f
+ ld [wFieldMoveSucceeded], a
+ ret
+
+.Jumptable:
+ dw TryEscapeFromDungeon
+ dw EscapeFromDungeon
+ dw FailToEscapeFromDungeon
+
+TryEscapeFromDungeon:
+ call GetMapPermission
+ cp CAVE
+ jr z, .asm_cbcf
+ cp DUNGEON
+ jr z, .asm_cbcf
+.asm_cbcc
+ ld a, $2
+ ret
+
+.asm_cbcf
+ ld hl, wDigWarpNumber
+ ld a, [hli]
+ and a
+ jr z, .asm_cbcc
+ ld a, [hli]
+ and a
+ jr z, .asm_cbcc
+ ld a, [hl]
+ and a
+ jr z, .asm_cbcc
+ ld a, $1
+ ret
+
+EscapeFromDungeon:
+ ld hl, wDigWarpNumber
+ ld de, wLastWarpNumber
+ ld bc, $3
+ call CopyBytes
+ call FieldMoveGetPartyNick
+ ld a, [wBuffer2]
+ cp $2
+ jr nz, .asm_cc00
+ ld hl, UsedDigScript
+ call QueueScript
+ ld a, $81
+ ret
+
+.asm_cc00
+ ld hl, UsedEscapeRopeScript
+ call QueueScript
+ ld a, $81
+ ret
+
+FailToEscapeFromDungeon:
+ ld a, [wBuffer2]
+ cp $2
+ jr nz, .asm_cc1c
+ ld hl, Text_CantUseDigEscapeRopeHere ; $4c29
+ call MenuTextBox
+ call WaitPressAorB_BlinkCursor
+ call CloseWindow
+.asm_cc1c
+ ld a, $80
+ ret
+
+Text_UsedDig: ; cc1f
+ text_jump Text_UsedDig_
+ db "@"
+
+Text_UsedEscapeRope:
+ text_jump Text_UsedEscapeRope_
+ db "@"
+
+Text_CantUseDigEscapeRopeHere:
+ text_jump Text_CantUseDigEscapeRopeHere_
+ db "@"
+
+UsedEscapeRopeScript: ; cc2e reloadmappart
+ reloadmappart
+ special UpdateTimePals
+ writetext Text_UsedEscapeRope ; cc24
+ jump ContinueDigEscapeRopeScript
+
+UsedDigScript:
+ reloadmappart
+ special UpdateTimePals
+ writetext Text_UsedDig
+ContinueDigEscapeRopeScript:
+ waitbutton
+ closetext
+ playsound SFX_WARP_TO
+ applymovement PLAYER, DigOutMovementData
+ farscall AbortBugCatchingContest
+ special WarpToSpawnPoint
+ writecode VAR_MOVEMENT, PLAYER_NORMAL
+ newloadmap MAPSETUP_DOOR
+ playsound SFX_WARP_FROM
+ applymovement PLAYER, DigReturnMovementData
+ end
+
+DigOutMovementData:
+ step_dig 32
+ hide_person
+ step_end
+
+DigReturnMovementData:
+ show_person
+ return_dig 32
+ step_end
+
+ call FieldMoveBufferReset
+.asm_cc67
+ ld hl, .Jumptable
+ call DoFieldMoveAction
+ jr nc, .asm_cc67
+ and $7f
+ ld [wFieldMoveSucceeded], a
+ ret
+
+.Jumptable:
+ dw TryTeleport
+ dw DoTeleport
+ dw FailTeleport
+
+TryTeleport:
+ call GetMapPermission
+ call CheckOutdoorMap
+ jr z, .asm_cc85
+ jr .asm_cc9c
+
+.asm_cc85
+ ld a, [wd9fb]
+ ld d, a
+ ld a, [wd9fc]
+ ld e, a
+ ld a, $5
+ ld hl, $5465
+ rst FarCall
+ jr nc, .asm_cc9c
+ ld a, c
+ ld [wceec], a
+ ld a, $1
+ ret
+
+.asm_cc9c
+ ld a, $2
+ ret
+
+DoTeleport:
+ call FieldMoveGetPartyNick
+ ld hl, TeleportScript
+ call QueueScript
+ ld a, $81
+ ret
+
+FailTeleport:
+ ld hl, Text_CantUseTeleportHere
+ call MenuTextBoxBackup
+ ld a, $80
+ ret
+
+Text_ReturnToLastMonCenter:
+ text_jump Text_ReturnToLastMonCenter_
+ db "@"
+
+Text_CantUseTeleportHere:
+ text_jump Text_CantUseTeleportHere_
+ db "@"
+
+TeleportScript: ; ccbe
+ reloadmappart
+ special UpdateTimePals
+ writetext Text_ReturnToLastMonCenter
+ pause 60
+ reloadmappart
+ closetext
+ playsound SFX_WARP_TO
+ applymovement PLAYER, TeleportFromMovementData
+ farscall AbortBugCatchingContest
+ special WarpToSpawnPoint
+ writecode VAR_MOVEMENT, PLAYER_NORMAL
+ newloadmap MAPSETUP_TELEPORT
+ playsound SFX_WARP_FROM
+ applymovement PLAYER, TeleportToMovementData
+ end
+
+TeleportFromMovementData: ; cce4
+ teleport_from
+ step_end
+
+TeleportToMovementData:
+ teleport_to
+ step_end
+
+StrengthFunction:
+ call Functionccf1
+ and $7f
+ ld [wFieldMoveSucceeded], a
+ ret
+
+Functionccf1: ; ccf1 (3:4cf1)
+ ld de, ENGINE_PLAINBADGE
+ call FieldMoveBadgeCheck
+ jr c, asm_cd09
+ jr asm_cd0c
+
+ ld hl, Text_AlreadyUsingStrength
+ call MenuTextBoxBackup
+ ld a, $80
+ ret
+
+Text_AlreadyUsingStrength:
+ text_jump Text_AlreadyUsingStrength_
+ db "@"
+
+asm_cd09
+ ld a, $80
+ ret
+
+asm_cd0c
+ ld hl, Script_StrengthFromMenu
+ call QueueScript
+ ld a, $81
+ ret
+
+GetStrengthUserSpeciesAndSetFlag:
+ SetFlag ENGINE_STRENGTH_ACTIVE
+ ld a, [wd005]
+ ld e, a
+ ld d, $0
+ ld hl, wPartySpecies
+ add hl, de
+ ld a, [hl]
+ ld [wBuffer6], a
+ call FieldMoveGetPartyNick
+ ret
+
+Script_StrengthFromMenu: ; cd2c
+ reloadmappart
+ special UpdateTimePals
+Script_UsedStrength:
+ callasm GetStrengthUserSpeciesAndSetFlag
+ writetext Text_UsedStrength
+ copybytetovar wBuffer6
+ cry 0
+ pause 3
+ writetext Text_AllowedToMoveBoulders
+ closetext
+ end
+
+Text_UsedStrength: ; cd44
+ text_jump Text_UsedStrength_
+ db "@"
+
+Text_AllowedToMoveBoulders:
+ text_jump Text_AllowedToMoveBoulders_
+ db "@"
+
+AskStrengthScript: ; cd4e
+ callasm TryStrengthOW
+ iffalse .ask
+ ifequal 1, .not_able
+ jump .already_active
+
+.not_able
+ jumptext Text_MonMayBeAbleToMove
+
+.already_active
+ jumptext Text_BouldersMayNowBeMoved
+
+.ask
+ opentext
+ writetext Text_AskStrength
+ yesorno
+ iftrue Script_UsedStrength
+ closetext
+ end
+
+Text_AskStrength:
+ text_jump Text_AskStrength_
+ db "@"
+
+Text_BouldersMayNowBeMoved:
+ text_jump Text_BouldersMayNowBeMoved_
+ db "@"
+
+Text_MonMayBeAbleToMove:
+ text_jump Text_MonMayBeAbleToMove_
+ db "@"
+
+TryStrengthOW:
+ ld d, STRENGTH
+ call FieldMovePartyCheck
+ jr c, .asm_cd95
+ ld de, ENGINE_PLAINBADGE
+ call FieldMoveEngineFlagCheck
+ jr c, .asm_cd95
+ CheckFlagHL ENGINE_STRENGTH_ACTIVE
+ jr z, .asm_cd99
+ ld a, $2
+ jr .asm_cd9c
+
+.asm_cd95
+ ld a, $1
+ jr .asm_cd9c
+
+.asm_cd99
+ xor a
+ jr .asm_cd9c
+
+.asm_cd9c
+ ld [wScriptVar], a
+ ret
+
+WhirlpoolFunction:
+ call FieldMoveBufferReset
+.asm_cda3
+ ld hl, .Jumptable
+ call DoFieldMoveAction
+ jr nc, .asm_cda3
+ and $7f
+ ld [wFieldMoveSucceeded], a
+ ret
+
+.Jumptable
+ dw TryWhirlpool
+ dw DoWhirlpool
+ dw FailWhirlpool
+
+TryWhirlpool:
+ ld de, ENGINE_GLACIERBADGE
+ call FieldMoveBadgeCheck
+ jr c, .asm_cdca
+ call TryWhirlpoolMenu
+ jr c, .asm_cdc7
+ ld a, $1
+ ret
+
+.asm_cdc7
+ ld a, $2
+ ret
+
+.asm_cdca
+ ld a, $80
+ ret
+
+DoWhirlpool:
+ ld hl, Script_WhirlpoolFromMenu
+ call QueueScript
+ ld a, $81
+ ret
+
+FailWhirlpool:
+ call FieldMoveFailed
+ ld a, $80
+ ret
+
+Text_UsedWhirlpool:
+ text_jump Text_UsedWhirlpool_
+ db "@"
+
+TryWhirlpoolMenu: ; cde1 (3:4de1)
+ call GetFacingTileCoord
+ ld c, a
+ push de
+ call CheckWhirlpoolTile
+ pop de
+ jr c, .asm_ce0c
+ call GetBlockLocation
+ ld c, [hl]
+ push hl
+ ld hl, WhirlpoolBlockPointers
+ call CheckOverworldTileArrays
+ pop hl
+ jr nc, .asm_ce0c
+ ld a, l
+ ld [wBuffer3], a
+ ld a, h
+ ld [wBuffer4], a
+ ld a, b
+ ld [wBuffer5], a
+ ld a, c
+ ld [wBuffer6], a
+ xor a
+ ret
+
+.asm_ce0c
+ scf
+ ret
+
+Script_WhirlpoolFromMenu: ; 4e0e
+ reloadmappart
+ special UpdateTimePals
+Script_UsedWhirlpool:
+ callasm FieldMoveGetPartyNick
+ writetext Text_UsedWhirlpool
+ reloadmappart
+ callasm DisappearWhirlpool
+ closetext
+ end
+
+DisappearWhirlpool: ; 4e20
+ ld hl, wBuffer3
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld a, [wBuffer5]
+ ld [hl], a
+ xor a
+ ld [hBGMapMode], a
+ call OverworldTextModeSwitch
+ ld a, [wBuffer6]
+ ld e, a
+ callba PlayWhirlpoolSound
+ call BufferScreen
+ call GetMovementPermissions
+ ret
+
+TryWhirlpoolOW:
+ ld d, WHIRLPOOL
+ call FieldMovePartyCheck
+ jr c, .asm_ce5f
+ ld de, ENGINE_GLACIERBADGE
+ call FieldMoveEngineFlagCheck
+ jr c, .asm_ce5f
+ call TryWhirlpoolMenu
+ jr c, .asm_ce5f
+ ld a, BANK(Script_AskWhirlpoolOW)
+ ld hl, Script_AskWhirlpoolOW ; $4e71
+ call CallScript
+ scf
+ ret
+
+.asm_ce5f
+ ld a, BANK(Script_MightyWhirlpool)
+ ld hl, Script_MightyWhirlpool ; $4e69
+ call CallScript
+ scf
+ ret
+
+Script_MightyWhirlpool:
+ jumptext Text_MightyWhirlpool
+
+Text_MightyWhirlpool:
+ text_jump Text_MightyWhirlpool_
+ db "@"
+
+Script_AskWhirlpoolOW: ; ce71
+ opentext
+ writetext Text_AskWhirlpool
+ yesorno
+ iftrue Script_UsedWhirlpool
+ closetext
+ end
+
+Text_AskWhirlpool: ; ce7b
+ text_jump Text_AskWhirlpool_
+ db "@"
+
+HeadbuttFunction:
+ call TryHeadbuttFromMenu
+ and $7f
+ ld [wFieldMoveSucceeded], a
+ ret
+
+TryHeadbuttFromMenu: ; ce89 (3:4e89)
+ call GetFacingTileCoord
+ call CheckHeadbuttTreeTile
+ jr nz, .asm_ce9a
+ ld hl, HeadbuttFromMenuScript ; $4eaa
+ call QueueScript
+ ld a, $81
+ ret
+
+.asm_ce9a
+ call FieldMoveFailed
+ ld a, $80
+ ret
+
+; ceaa
+Text_DidAHeadbutt:
+ text_jump Text_DidAHeadbutt_
+ db "@"
+
+Text_NothingFromHeadbutt:
+ text_jump Text_NothingFromHeadbutt_
+ db "@"
+
+HeadbuttFromMenuScript:
+ reloadmappart
+ special UpdateTimePals
+HeadbuttScript:
+ callasm FieldMoveGetPartyNick
+ writetext Text_DidAHeadbutt
+ reloadmappart
+ callasm ShakeHeadbuttTree
+ callasm TreeMonEncounter
+ iffalse .nope_nothing
+ closetext
+ randomwildmon
+ startbattle
+ reloadmapafterbattle
+ end
+
+.nope_nothing:
+ writetext Text_NothingFromHeadbutt
+ waitbutton
+ closetext
+ end
+
+TryHeadbuttOW: ; cecc
+ ld d, HEADBUTT
+ call FieldMovePartyCheck
+ jr c, .asm_cedd
+ ld a, BANK(AskHeadbuttScript)
+ ld hl, AskHeadbuttScript ; $4edf
+ call CallScript
+ scf
+ ret
+
+.asm_cedd
+ xor a
+ ret
+
+AskHeadbuttScript:
+ opentext
+ writetext Text_AskHeadbutt
+ yesorno
+ iftrue HeadbuttScript
+ closetext
+ end
+
+Text_AskHeadbutt: ; cee9
+ text_jump Text_AskHeadbutt_
+ db "@"
+
+ call TryRockSmashFromMenu
+ and $7f
+ ld [wFieldMoveSucceeded], a
+ ret
+
+TryRockSmashFromMenu: ; cef7 (3:4ef7)
+ call GetFacingObject
+ jr c, .asm_cf0a
+ ld a, d
+ cp $18
+ jr nz, .asm_cf0a
+ ld hl, RockSmashFromMenuScript ; $4f31
+ call QueueScript
+ ld a, $81
+ ret
+
+.asm_cf0a
+ call FieldMoveFailed
+ ld a, $80
+ ret
+
+GetFacingObject: ; cf10 (3:4f10)
+ callba CheckFacingObject
+ jr nc, .asm_cf2f
+ ld a, [hObjectStructIndexBuffer]
+ call GetObjectStruct
+ ld hl, $1
+ add hl, bc
+ ld a, [hl]
+ ld [hLastTalked], a
+ call GetMapObject
+ ld hl, $4
+ add hl, bc
+ ld a, [hl]
+ ld d, a
+ and a
+ ret
+
+.asm_cf2f
+ scf
+ ret
+
+RockSmashFromMenuScript: ; cf31
+ reloadmappart
+ special UpdateTimePals
+RockSmashScript:
+ callasm FieldMoveGetPartyNick
+ writetext Text_UsedRockSmash
+ closetext
+ special WaitSFX
+ playsound SFX_STRENGTH
+ earthquake 84
+ applymovement2 RockSmashMovementData
+ disappear -2
+ callasm RockMonEncounter
+ copybytetovar wd117
+ iffalse .skip_battle
+ randomwildmon
+ startbattle
+ reloadmapafterbattle
+.skip_battle
+ end
+
+RockSmashMovementData:
+ rock_smash 10
+ step_end
+
+Text_UsedRockSmash:
+ text_jump Text_UsedRockSmash_
+ db "@"
+; cf60
+AskRockSmashScript:
+ callasm TryRockSmashOW
+ ifequal 1, .fail
+ opentext
+ writetext Text_AskRockSmash
+ yesorno
+ iftrue RockSmashScript
+ closetext
+ end
+.fail
+ jumptext Text_MayBeBreakable
+
+Text_MayBeBreakable:
+ text_jump Text_MayBeBreakable_
+ db "@"
+
+Text_AskRockSmash:
+ text_jump Text_AskRockSmash_
+ db "@"
+
+TryRockSmashOW: ; cf7f
+ ld d, ROCK_SMASH
+ call FieldMovePartyCheck
+ jr nc, .asm_cf8a
+ ld a, $1
+ jr .asm_cf8d
+
+.asm_cf8a
+ xor a
+ jr .asm_cf8d
+
+.asm_cf8d
+ ld [wScriptVar], a
+ ret
+
+FishingRodFunction: ; cf91
+ ld a, e
+ push af
+ call FieldMoveBufferReset
+ pop af
+ ld [wBuffer2], a
+.asm_cf9a
+ ld hl, .Jumptable ; $4fa8
+ call DoFieldMoveAction
+ jr nc, .asm_cf9a
+ and $7f
+ ld [wFieldMoveSucceeded], a
+ ret
+
+.Jumptable
+ dw Fish_CheckMap ; 3:4fb2
+ dw Fish_NoBite ; 3:5005
+ dw Fish_GotSomething ; 3:4ff7
+ dw Fish_Failed ; 3:4ff4
+ dw Fish_NoFish ; 3:5013
+
+Fish_CheckMap:
+ ld a, [wPlayerBikeSurfState]
+ cp PLAYER_SURF
+ jr z, .asm_cfc7
+ cp PLAYER_SURF_PIKA
+ jr z, .asm_cfc7
+ call GetFacingTileCoord
+ call GetTileCollision
+ cp $1
+ jr z, .asm_cfca
+.asm_cfc7
+ ld a, $3
+ ret
+
+.asm_cfca
+ call GetFishingGroup
+ and a
+ jr nz, .asm_cfd3
+ ld a, $4
+ ret
+
+.asm_cfd3
+ ld d, a
+ ld a, [wBuffer2]
+ ld e, a
+ ld a, $24
+ ld hl, $697a
+ rst FarCall
+ ld a, d
+ and a
+ jr z, .asm_cff1
+ ld [wd117], a
+ ld a, e
+ ld [wCurPartyLevel], a
+ ld a, $4
+ ld [wBattleType], a
+ ld a, $2
+ ret
+
+.asm_cff1
+ ld a, $1
+ ret
+
+Fish_Failed:
+ ld a, $80
+ ret
+
+Fish_GotSomething:
+ ld a, $1
+ ld [wBuffer6], a
+ ld hl, Script_GotABite
+ call QueueScript
+ ld a, $81
+ ret
+
+Fish_NoBite:
+ ld a, $2
+ ld [wBuffer6], a
+ ld hl, Script_NotEvenANibble
+ call QueueScript
+ ld a, $81
+ ret
+
+Fish_NoFish:
+ ld a, $0
+ ld [wBuffer6], a
+ ld hl, Script_NotEvenANibble2
+ call QueueScript
+ ld a, $81
+ ret
+
+Script_NotEvenANibble: ; d021
+ scall Script_FishCastRod
+ writetext Text_NotEvenANibble
+ jump Script_NotEvenANibble_Continue
+
+Script_NotEvenANibble2:
+ scall Script_FishCastRod
+ writetext Text_NotEvenANibble
+Script_NotEvenANibble_Continue:
+ callasm PutTheRodAway
+ closetext
+ end
+
+Script_GotABite:
+ scall Script_FishCastRod
+ callasm Fish_CheckFacingUp
+ iffalse .not_facing_up
+ applymovement 0, Movement_Fishing_BiteFacingUp
+ jump .continue
+
+.not_facing_up
+ applymovement 0, Movement_Fishing_BiteNotFacingUp
+.continue
+ pause 40
+ applymovement 0, Movement_Fishing_RestoreRod
+ writetext Text_OhABite
+ callasm PutTheRodAway
+ closetext
+ randomwildmon
+ startbattle
+ reloadmapafterbattle
+ end
+
+
+Movement_Fishing_BiteNotFacingUp:
+ fish_got_bite
+ fish_got_bite
+ fish_got_bite
+ fish_got_bite
+ show_emote
+ step_end
+
+Movement_Fishing_BiteFacingUp:
+ fish_got_bite
+ fish_got_bite
+ fish_got_bite
+ fish_got_bite
+ step_sleep 1
+ show_emote
+ step_end
+
+Movement_Fishing_RestoreRod:
+ hide_emote
+ fish_cast_rod
+ step_end
+
+Fish_CheckFacingUp: ; d06d
+ ld a, [wPlayerDirection]
+ and $c
+ cp OW_UP
+ ld a, $1
+ jr z, .asm_d079
+ xor a
+.asm_d079
+ ld [wScriptVar], a
+ ret
+
+Script_FishCastRod: ; d07d
+ reloadmappart
+ loadvar hBGMapMode, 0
+ special UpdateTimePals
+ loademote EMOTE_ROD
+ callasm LoadFishingGFX
+ loademote EMOTE_SHOCK
+ applymovement PLAYER, Movement_CastRod
+ pause 40
+ end
+
+Movement_CastRod:
+ fish_cast_rod
+ step_end
+
+PutTheRodAway: ; d096
+ hlcoord 1, 14
+ lb bc, $3, $12
+ call ClearBox
+ call WaitBGMap
+ xor a
+ ld [hBGMapMode], a
+ ld a, $1
+ ld [wPlayerAction], a
+ call UpdateSprites
+ call ReplacePlayerSprite
+ ret
+
+Text_OhABite:
+ text_jump Text_OhABite_
+ db "@"
+
+Text_NotEvenANibble:
+ text_jump Text_NotEvenANibble_
+ db "@"
+
+Text_NothingHereToFish:
+ text_jump Text_NothingHereToFish_
+ db "@"
+
+BicycleFunction:
+ call Functiond0c9
+ and $7f
+ ld [wFieldMoveSucceeded], a
+ ret
+
+Functiond0c9: ; d0c9 (3:50c9)
+ call CheckBikePermission
+ jr c, .cant_bike
+ ld a, [wPlayerBikeSurfState]
+ cp PLAYER_NORMAL
+ jr z, .get_on_bike
+ cp PLAYER_BIKE
+ jr z, .get_off_bike
+ jr .cant_bike
+
+.get_on_bike
+ ld hl, Script_GetOnBike
+ ld de, Script_GetOnBike_Register
+ call ChooseScriptBasedOnWhetherBikeIsRegistered
+ 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
+
+.get_off_bike
+ ld hl, wBikeFlags
+ bit 1, [hl]
+ jr nz, .asm_d118
+ ld hl, Script_GetOffBike
+ ld de, Script_GetOffBike_Register
+ call ChooseScriptBasedOnWhetherBikeIsRegistered
+ ld a, $3
+ jr .queue_off
+
+.asm_d118
+ ld hl, Script_CantGetOffBike
+ jr .queue_off
+
+.cant_bike
+ ld a, $0
+ ret
+
+.queue_off
+ call QueueScript
+ ld a, $1
+ ret
+
+ChooseScriptBasedOnWhetherBikeIsRegistered: ; d126 (3:5126)
+ ld a, [wUsingItemWithSelect]
+ and a
+ ret z
+ ld h, d
+ ld l, e
+ ret
+
+CheckBikePermission: ; d12e (3:512e)
+ call GetMapPermission
+ call CheckOutdoorMap
+ jr z, .asm_d140
+ cp CAVE
+ jr z, .asm_d140
+ cp GATE
+ jr z, .asm_d140
+ jr .asm_d149
+
+.asm_d140
+ call GetPlayerStandingTile
+ and $f
+ jr nz, .asm_d149
+ xor a
+ ret
+
+.asm_d149
+ scf
+ ret
+
+Script_GetOnBike: ; d14b
+ reloadmappart
+ special UpdateTimePals
+ writecode VAR_MOVEMENT, PLAYER_BIKE
+ writetext Text_GotOnTheBike
+ waitbutton
+ closetext
+ special ReplacePlayerSprite
+ end
+
+Script_GetOnBike_Register:
+ writecode VAR_MOVEMENT, PLAYER_BIKE
+ closetext
+ special ReplacePlayerSprite
+ end
+
+ nop
+ ret
+
+Script_GetOffBike:
+ reloadmappart
+ special UpdateTimePals
+ writecode VAR_MOVEMENT, PLAYER_NORMAL
+ writetext Text_GotOffTheBike
+ waitbutton
+FinishGettingOffBike:
+ closetext
+ special ReplacePlayerSprite
+ special PlayMapMusic
+ end
+
+Script_GetOffBike_Register:
+ writecode VAR_MOVEMENT, PLAYER_NORMAL
+ jump FinishGettingOffBike
+
+Script_CantGetOffBike: ; d17e
+ writetext Text_CantGetOffBike
+ waitbutton
+ closetext
+ end
+
+Text_CantGetOffBike:
+ text_jump Text_CantGetOffBike_
+ db "@"
+
+Text_GotOnTheBike:
+ text_jump Text_GotOnTheBike_
+ db "@"
+
+Text_GotOffTheBike:
+ text_jump Text_GotOffTheBike_
+ db "@"
+
+
+TryCutOW: ; d193
+ ld d, CUT
+ call FieldMovePartyCheck
+ jr c, .asm_d1ac
+ ld de, ENGINE_HIVEBADGE
+ call FieldMoveEngineFlagCheck
+ jr c, .asm_d1ac
+ ld a, BANK(AskCutScript)
+ ld hl, AskCutScript
+ call CallScript
+ scf
+ ret
+
+.asm_d1ac
+ ld a, BANK(CantCutScript)
+ ld hl, CantCutScript
+ call CallScript
+ scf
+ ret
+
+AskCutScript: ; d1b6
+ opentext
+ writetext Text_AskCut
+ yesorno
+ iffalse .declined
+ callasm CheckMapForSomethingToCut_
+ iftrue Script_Cut
+.declined:
+ closetext
+ end
+
+CheckMapForSomethingToCut_: ; d1c7
+ xor a
+ ld [wScriptVar], a
+ call CheckMapForSomethingToCut
+ ret c
+ ld a, $1
+ ld [wScriptVar], a
+ ret
+
+Text_AskCut:
+ text_jump Text_AskCut_
+ db "@"
+
+CantCutScript: ; d1da
+ jumptext Text_MonCanCutThis
+
+Text_MonCanCutThis:
+ text_jump Text_MonCanCutThis_
+ db "@"
diff --git a/engine/events/shuckle.asm b/engine/events/shuckle.asm
new file mode 100755
index 00000000..82d0427e
--- /dev/null
+++ b/engine/events/shuckle.asm
@@ -0,0 +1,114 @@
+GiveShuckle:
+ xor a
+ ld [wMonType], a
+ ld a, SHUCKLE
+ ld [wd004], a
+ ld a, $f
+ ld [wCurPartyLevel], a
+ predef TryAddMonToParty
+ jr nc, .asm_743f
+ ld bc, $30
+ ld a, [wPokemonData]
+ dec a
+ push af
+ push bc
+ ld hl, wPartyMon1Item
+ call AddNTimes
+ ld [hl], BERRY
+ pop bc
+ pop af
+ ld hl, wPartyMon1ID
+ call AddNTimes
+ ld a, $2
+ ld [hli], a
+ ld [hl], $6
+ ld a, [wPokemonData]
+ dec a
+ ld hl, wPartyMonNicknames
+ call SkipNames
+ ld de, ShuckieName
+ call CopyName2
+ ld a, [wPartyCount]
+ dec a
+ ld hl, wPartyMon6StatsEnd
+ call SkipNames
+ ld de, ManiaName
+ call CopyName2
+ SetFlag ENGINE_SHUCKLE_GIVEN
+ ld a, $1
+ ld [wScriptVar], a
+ ret
+
+.asm_743f
+ xor a
+ ld [wScriptVar], a
+ ret
+
+ManiaName:
+ db "MANIA@"
+ShuckieName:
+ db "SHUCKIE@"
+
+ReturnShuckle:
+ callba Function50000
+ jr c, .asm_74ba
+ ld a, [wd004]
+ cp SHUCKLE
+ jr nz, .asm_74c0
+ ld a, [wd005]
+ ld hl, wPartyMon1ID
+ ld bc, $30
+ call AddNTimes
+ ld a, [hli]
+ cp $2
+ jr nz, .asm_74c0
+ ld a, [hl]
+ cp $6
+ jr nz, .asm_74c0
+ ld a, [wd005]
+ ld hl, wPartyMonOT
+ call SkipNames
+ ld de, ManiaName
+.asm_7483
+ ld a, [de]
+ cp [hl]
+ jr nz, .asm_74c0
+ cp "@"
+ jr z, .asm_748f
+ inc de
+ inc hl
+ jr .asm_7483
+
+.asm_748f
+ callba CheckCurPartyMonFainted
+ jr c, .asm_74c5
+ ld a, [wd005]
+ ld hl, wPartyMon1Happiness
+ ld bc, $30
+ call AddNTimes
+ ld a, [hl]
+ cp $96
+ ld a, $3
+ jr nc, .asm_74b6
+ xor a
+ ld [wd008], a
+ callab RemoveMonFromPartyOrBox
+ ld a, $2
+.asm_74b6
+ ld [wScriptVar], a
+ ret
+
+.asm_74ba
+ ld a, $1
+ ld [wScriptVar], a
+ ret
+
+.asm_74c0
+ xor a
+ ld [wScriptVar], a
+ ret
+
+.asm_74c5
+ ld a, $4
+ ld [wScriptVar], a
+ ret