123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 |
- VermilionDockScript:
- call EnableAutoTextBoxDrawing
- CheckEventHL EVENT_STARTED_WALKING_OUT_OF_DOCK
- jr nz, .asm_1db8d
- CheckEventReuseHL EVENT_GOT_HM01
- ret z
- ld a, [wDestinationWarpID]
- cp $1
- ret nz
- CheckEventReuseHL EVENT_SS_ANNE_LEFT
- jp z, VermilionDock_1db9b
- SetEventReuseHL EVENT_STARTED_WALKING_OUT_OF_DOCK
- call Delay3
- ld hl, wd730
- set 7, [hl]
- ld hl, wSimulatedJoypadStatesEnd
- ld a, D_UP
- ld [hli], a
- ld [hli], a
- ld [hl], a
- ld a, $3
- ld [wSimulatedJoypadStatesIndex], a
- xor a
- ld [wSpriteStateData2 + $06], a
- ld [wOverrideSimulatedJoypadStatesMask], a
- dec a
- ld [wJoyIgnore], a
- ret
- .asm_1db8d
- CheckEventAfterBranchReuseHL EVENT_WALKED_OUT_OF_DOCK, EVENT_STARTED_WALKING_OUT_OF_DOCK
- ret nz
- ld a, [wSimulatedJoypadStatesIndex]
- and a
- ret nz
- ld [wJoyIgnore], a
- SetEventReuseHL EVENT_WALKED_OUT_OF_DOCK
- ret
- VermilionDock_1db9b:
- SetEventForceReuseHL EVENT_SS_ANNE_LEFT
- ld a, $ff
- ld [wJoyIgnore], a
- ld [wNewSoundID], a
- call PlaySound
- ld c, BANK(Music_Surfing)
- ld a, MUSIC_SURFING
- call PlayMusic
- callba LoadSmokeTileFourTimes
- xor a
- ld [wSpriteStateData1 + 2], a
- ld c, 120
- call DelayFrames
- ld b, $9c
- call CopyScreenTileBufferToVRAM
- coord hl, 0, 10
- ld bc, SCREEN_WIDTH * 6
- ld a, $14 ; water tile
- call FillMemory
- ld a, 1
- ld [H_AUTOBGTRANSFERENABLED], a
- call Delay3
- xor a
- ld [H_AUTOBGTRANSFERENABLED], a
- ld [wSSAnneSmokeDriftAmount], a
- ld [rOBP1], a
- ld a, 88
- ld [wSSAnneSmokeX], a
- ld hl, wMapViewVRAMPointer
- ld c, [hl]
- inc hl
- ld b, [hl]
- push bc
- push hl
- ld a, SFX_SS_ANNE_HORN
- call PlaySoundWaitForCurrent
- ld a, $ff
- ld [wUpdateSpritesEnabled], a
- ld d, $0
- ld e, $8
- .asm_1dbfa
- ld hl, $0002
- add hl, bc
- ld a, l
- ld [wMapViewVRAMPointer], a
- ld a, h
- ld [wMapViewVRAMPointer + 1], a
- push hl
- push de
- call ScheduleEastColumnRedraw
- call VermilionDock_EmitSmokePuff
- pop de
- ld b, $10
- .asm_1dc11
- call VermilionDock_AnimSmokePuffDriftRight
- ld c, $8
- .asm_1dc16
- call VermilionDock_1dc7c
- dec c
- jr nz, .asm_1dc16
- inc d
- dec b
- jr nz, .asm_1dc11
- pop bc
- dec e
- jr nz, .asm_1dbfa
- xor a
- ld [rWY], a
- ld [hWY], a
- call VermilionDock_EraseSSAnne
- ld a, $90
- ld [hWY], a
- ld a, $1
- ld [wUpdateSpritesEnabled], a
- pop hl
- pop bc
- ld [hl], b
- dec hl
- ld [hl], c
- call LoadPlayerSpriteGraphics
- ld hl, wNumberOfWarps
- dec [hl]
- ret
- VermilionDock_AnimSmokePuffDriftRight:
- push bc
- push de
- ld hl, wOAMBuffer + $11
- ld a, [wSSAnneSmokeDriftAmount]
- swap a
- ld c, a
- ld de, 4
- .loop
- inc [hl]
- inc [hl]
- add hl, de
- dec c
- jr nz, .loop
- pop de
- pop bc
- ret
- VermilionDock_EmitSmokePuff:
- ; new smoke puff above the S.S. Anne's front smokestack
- ld a, [wSSAnneSmokeX]
- sub 16
- ld [wSSAnneSmokeX], a
- ld c, a
- ld b, 100 ; Y
- ld a, [wSSAnneSmokeDriftAmount]
- inc a
- ld [wSSAnneSmokeDriftAmount], a
- ld a, $1
- ld de, VermilionDockOAMBlock
- call WriteOAMBlock
- ret
- VermilionDockOAMBlock:
- db $fc, $10
- db $fd, $10
- db $fe, $10
- db $ff, $10
- VermilionDock_1dc7c:
- ld h, d
- ld l, $50
- call .asm_1dc86
- ld h, $0
- ld l, $80
- .asm_1dc86
- ld a, [rLY]
- cp l
- jr nz, .asm_1dc86
- ld a, h
- ld [rSCX], a
- .asm_1dc8e
- ld a, [rLY]
- cp h
- jr z, .asm_1dc8e
- ret
- VermilionDock_EraseSSAnne:
- ; Fill the area the S.S. Anne occupies in BG map 0 with water tiles.
- ld hl, wVermilionDockTileMapBuffer
- ld bc, (5 * BG_MAP_WIDTH) + SCREEN_WIDTH
- ld a, $14 ; water tile
- call FillMemory
- ld hl, vBGMap0 + 10 * BG_MAP_WIDTH
- ld de, wVermilionDockTileMapBuffer
- ld bc, (6 * BG_MAP_WIDTH) / 16
- call CopyVideoData
- ; Replace the blocks of the lower half of the ship with water blocks. This
- ; leaves the upper half alone, but that doesn't matter because replacing any of
- ; the blocks is unnecessary because the blocks the ship occupies are south of
- ; the player and won't be redrawn when the player automatically walks north and
- ; exits the map. This code could be removed without affecting anything.
- overworldMapCoord hl, 5, 2, VERMILION_DOCK_WIDTH
- ld a, $d ; water block
- ld [hli], a
- ld [hli], a
- ld [hli], a
- ld [hl], a
- ld a, SFX_SS_ANNE_HORN
- call PlaySound
- ld c, 120
- call DelayFrames
- ret
- VermilionDockTextPointers:
- dw VermilionDockText1
- VermilionDockText1:
- TX_FAR _VermilionDockText1
- db "@"
|