kep-hack/scripts/VermilionDock.asm
May Evans 78ae4e9029 Move Mew, add Old Sea Chart, add wild data
I am 90% sure something will bug out, can't test the map right now for obvious reasons. Tested everything else, though.

Mostly copied data from Cinnabar Volcano while commenting out Vermillion Dock Mew info to move it.

Wild data has been added along with a fishing group, just dummied out slots.

Old Sea Chart is a clone of the Citrine Pass which is all it needs to be. It is obtainable near the truck.
2022-10-16 09:05:26 +01:00

396 lines
7.4 KiB
NASM

VermilionDock_Script:
call EnableAutoTextBoxDrawing
;ld hl, VermilionDockTrainerHeaders
ld de, VermilionDock_ScriptPointers
call ExecuteCurMapScriptInTable
;call TruckCheck
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 [wSpritePlayerStateData2MovementByte1], 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_ScriptPointers:
dw CheckFightingMapTrainers
dw DisplayEnemyTrainerTextAndStartBattle
dw EndTrainerBattle
VermilionDock_1db9b:
ld a, [wObtainedBadges]
bit 4, a ; after obtaining 4 badges the ship returns
ret nz
SetEventForceReuseHL EVENT_SS_ANNE_LEFT
ld a, SFX_STOP_ALL_MUSIC
ld [wJoyIgnore], a
ld [wNewSoundID], a
call PlaySound
ld c, BANK(Music_Surfing)
ld a, MUSIC_SURFING
call PlayMusic
farcall LoadSmokeTileFourTimes
xor a
ld [wSpritePlayerStateData1ImageIndex], a
ld c, 120
call DelayFrames
ld b, $9c
call CopyScreenTileBufferToVRAM
hlcoord 0, 10
ld bc, SCREEN_WIDTH * 6
ld a, $14 ; water tile
call FillMemory
ld a, 1
ldh [hAutoBGTransferEnabled], a
call Delay3
xor a
ldh [hAutoBGTransferEnabled], a
ld [wSSAnneSmokeDriftAmount], a
ldh [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, $2
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
ldh [rWY], a
ldh [hWY], a
call VermilionDock_EraseSSAnne
ld a, $90
ldh [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, wShadowOAMSprite04XCoord
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:
; tile id, attribute
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
ldh a, [rLY]
cp l
jr nz, .asm_1dc86
ld a, h
ldh [rSCX], a
.asm_1dc8e
ldh 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, wVermilionDockTileMapBufferEnd - wVermilionDockTileMapBuffer
ld a, $14 ; water tile
call FillMemory
hlbgcoord 0, 10
ld de, wVermilionDockTileMapBuffer
lb bc, BANK(wVermilionDockTileMapBuffer), 12
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.
hlowcoord 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
VermilionDock_TextPointers:
dw VermilionDockText1
dw PickUpItemText
;dw VermilionDockText2
VermilionDockText1:
text_far _VermilionDockText1
text_end
; this massive new set of scripts allows the truck to be pushed with Strength. Credit to Vortyne's pureRGB hack for figuring this out!
;VermilionDockTrainerHeaders:
; def_trainers
;MewTrainerHeader:
; trainer EVENT_ENCOUNTERED_MEW, 0, MewBattleText, MewBattleText, MewBattleText
; db -1 ; end
;VermilionDockText2:
; text_asm
; ld hl, MewTrainerHeader
; call TalkToTrainer
; jp TextScriptEnd
;MewBattleText:
; text_far _MewtwoBattleText ; Mew!
; text_asm
; ld a, MEW
; call PlayCry
; call WaitForSoundToFinish
; jp TextScriptEnd
;TruckOAMTable:
; db $50, $28, $C0, $10
; db $50, $30, $C1, $10
; db $50, $38, $C2, $10
; db $50, $40, $C3, $10
; db $58, $28, $C4, $10
; db $58, $30, $C5, $10
; db $58, $38, $C6, $10
; db $58, $40, $C7, $10
;RedLeftOAMTable:
; db $8,$0,$9,$0
; db $a,$2,$b,$3
;TruckSpriteGFX: INCBIN "gfx/sprites/truck_sprite.2bpp"
;TruckCheck:
; CheckEventHL EVENT_FOUND_MEW
; jp nz, ChangeTruckTile
; ld c, HS_MEW
; ld b, $2
; ld hl, wMissableObjectFlags
; predef FlagActionPredef
; ld a, c
; and a
; jr nz, .skiphidingmew
; ld a, HS_MEW
; ld [wMissableObjectIndex], a
; predef HideObject
;.skiphidingmew
; ld a, [wd728]
; bit 0, a ; using Strength?
; ret z
; ; the position for moving truck is $00, $15
; ld hl, wYCoord
; ld a, [hli]
; and a
; ret nz
; ld a, [hl]
; cp $16
; ret nz
; ; if the player is trying to walk left
; ld a, [wPlayerDirection]
; cp 2
; ret nz
; xor a
; ld [$ff8c], a
; ld a, $8
; ld [$ff8d], a
; call SetSpriteFacingDirection
; ld a, $ff
; ld [wJoyIgnore], a
; ld [wUpdateSpritesEnabled], a
; xor a
; ld bc, $4c48
; ld de, RedLeftOAMTable
; call WriteOAMBlock
; ld bc, (Bank(TruckSpriteGFX) << 8) | 8
; ld hl, vChars1 + $400
; ld de, TruckSpriteGFX
; call CopyVideoData
; ld hl, TruckOAMTable
; ld bc, $20
; ld de, wShadowOAM + $20
; call CopyData
; ld a, $c
; ld [wNewTileBlockID], a ; used to be wd09f
; ld bc, $a
; predef ReplaceTileBlock
; ; moving the truck
; ld a, SFX_PUSH_BOULDER
; call PlaySound
; ld b, 32
; ld de, 4
;.movingtruck
; ld hl, wShadowOAM + $21
; ld a, 8
;.movingtruck2
; dec [hl]
; add hl, de
; dec a
; jr nz, .movingtruck2
; ld c, 2
; call DelayFrames
; dec b
; jr nz, .movingtruck
; ld a, $3
; ld [wNewTileBlockID], a ; used to be wd09f
; ld bc, $9
; predef ReplaceTileBlock
; call ShowMew
; jp FinishShowMew
; ; show mew and print its dialogue
;ShowMew:
; ld a, 1
; ld [wUpdateSpritesEnabled], a
; ld a, HS_MEW
; ld [wMissableObjectIndex], a
; predef ShowObject
; ret
;FinishShowMew:
; ld c, 60
; call DelayFrames
; xor a
; ld [wJoyIgnore], a
; SetEvent EVENT_FOUND_MEW
; ret
;ChangeTruckTile:
; ld bc, $9
; call GetOWCoord
; ld a, [hl]
; cp $3
; ret z
; ld a, $3
; ld [hli], a
; ld a, $c
; ld [hl], a
; CheckEvent EVENT_ENCOUNTERED_MEW
; call z, ShowMew
; jpfar RedrawMapView
;
;GetOWCoord:
; ld hl, wOverworldMap + 2
; ld a, [wCurMapWidth]
; add $6
; ld e, a
; ld d, $0
; add hl, de
; add hl, de
; inc b
; inc c
;.bloop
; add hl, de
; dec b
; jr nz, .bloop
;.cloop
; inc hl
; dec c
; jr nz, .cloop
; ret