mirror of
https://github.com/thornAvery/kep-hack.git
synced 2025-09-17 02:40:50 +12:00
395 lines
7.2 KiB
NASM
395 lines
7.2 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 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
|