mirror of
https://github.com/thornAvery/kep-hack.git
synced 2025-09-17 02:40:50 +12:00

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.
396 lines
7.4 KiB
NASM
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
|