123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- HandleLedges:
- ld a, [wd736]
- bit 6, a ; already jumping down ledge
- ret nz
- ld a, [wCurMapTileset]
- and a ; OVERWORLD
- ret nz
- predef GetTileAndCoordsInFrontOfPlayer
- ld a, [wSpriteStateData1 + 9]
- ld b, a
- aCoord 8, 9
- ld c, a
- ld a, [wTileInFrontOfPlayer]
- ld d, a
- ld hl, LedgeTiles
- .loop
- ld a, [hli]
- cp $ff
- ret z
- cp b
- jr nz, .nextLedgeTile1
- ld a, [hli]
- cp c
- jr nz, .nextLedgeTile2
- ld a, [hli]
- cp d
- jr nz, .nextLedgeTile3
- ld a, [hl]
- ld e, a
- jr .foundMatch
- .nextLedgeTile1
- inc hl
- .nextLedgeTile2
- inc hl
- .nextLedgeTile3
- inc hl
- jr .loop
- .foundMatch
- ld a, [hJoyHeld]
- and e
- ret z
- ld a, $ff
- ld [wJoyIgnore], a
- ld hl, wd736
- set 6, [hl] ; jumping down ledge
- call StartSimulatingJoypadStates
- ld a, e
- ld [wSimulatedJoypadStatesEnd], a
- ld [wSimulatedJoypadStatesEnd + 1], a
- ld a, $2
- ld [wSimulatedJoypadStatesIndex], a
- call LoadHoppingShadowOAM
- ld a, SFX_LEDGE
- call PlaySound
- ret
- ; (player direction) (tile player standing on) (ledge tile) (input required)
- LedgeTiles:
- db SPRITE_FACING_DOWN, $2C,$37,D_DOWN
- db SPRITE_FACING_DOWN, $39,$36,D_DOWN
- db SPRITE_FACING_DOWN, $39,$37,D_DOWN
- db SPRITE_FACING_LEFT, $2C,$27,D_LEFT
- db SPRITE_FACING_LEFT, $39,$27,D_LEFT
- db SPRITE_FACING_RIGHT,$2C,$0D,D_RIGHT
- db SPRITE_FACING_RIGHT,$2C,$1D,D_RIGHT
- db SPRITE_FACING_RIGHT,$39,$0D,D_RIGHT
- db $FF
- LoadHoppingShadowOAM:
- ld hl, vChars1 + $7f0
- ld de, LedgeHoppingShadow
- lb bc, BANK(LedgeHoppingShadow), (LedgeHoppingShadowEnd - LedgeHoppingShadow) / $8
- call CopyVideoDataDouble
- ld a, $9
- lb bc, $54, $48 ; b, c = y, x coordinates of shadow
- ld de, LedgeHoppingShadowOAM
- call WriteOAMBlock
- ret
- LedgeHoppingShadow:
- INCBIN "gfx/ledge_hopping_shadow.1bpp"
- LedgeHoppingShadowEnd:
- LedgeHoppingShadowOAM:
- db $FF,$10,$FF,$20
- db $FF,$40,$FF,$60
|