mirror of
https://github.com/thornAvery/kep-hack.git
synced 2025-09-16 18:30:50 +12:00

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.
220 lines
4.2 KiB
NASM
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
|