kep-hack/scripts/VermilionDock.asm
Llinos Evans 83483f035b The Great Constant Compression of June 2023
This is a large-scale compression of KEP's current hide/show constants. RBY's works extremely oddly and is limited to 256 entries.

The problem with how RBY's hide/show stuff works, is that even though there are tons of unused constants, you...can't actually remove them. The constant list is tied to the hide/show data entries, so if you replace it with something else, well, now you just have two objects tied to the same constant. If you made the Route 2 item a boss, and someone picked up the item on Route 2, the boss would also disappear, and vice versa. So, we have to get creative.

I have reduced what we have to 248, but I think I miscounted when doing the funny list somewhere in the actual list when making sure the hex stuff is ok. Either that, or there's an error somewhere that Martha will, by some obscene miracle of humanity, discover. Anyway, this was achieved by turning multiple current overworld items into hidden ones, keeping them in the game whilst keeping to that all-important limit.

I also removed the items in Pokemon Tower 4F for this, just needed a little boost. Well, as you can see by the number, I technically didn't, I just miscounted like 20 times. Look, it's 10:11 PM, my stomach is in pain from an insane injection, and I don't even know if that map will come back, cut me some slack. Or add it back. You definitely can.
2023-06-27 22:17:07 +01:00

220 lines
4.2 KiB
NASM

VermilionDock_Script:
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 [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_1db9b:
ld a, [wObtainedBadges]
bit 5, a ; after obtaining the marsh badge 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, 0 ; 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
VermilionDockText1:
text_far _VermilionDockText1
text_end