pokered/engine/overworld/cut.asm

259 lines
4.7 KiB
NASM
Raw Normal View History

2014-05-22 22:13:20 +00:00
UsedCut: ; ef54 (3:6f54)
xor a
ld [$cd6a], a
ld a, [W_CURMAPTILESET] ; $d367
and a ; OVERWORLD
jr z, .asm_ef6b
cp GYM
jr nz, .asm_ef77
ld a, [$cfc6]
cp $50 ; gym cut tree
jr nz, .asm_ef77
jr asm_ef82
.asm_ef6b
dec a
ld a, [$cfc6]
cp $3d ; cut tree
jr z, asm_ef82
cp $52 ; grass
jr z, asm_ef82
.asm_ef77
ld hl, NothingToCutText
jp PrintText
NothingToCutText: ; ef7d (3:6f7d)
TX_FAR _NothingToCutText
db "@"
asm_ef82: ; ef82 (3:6f82)
ld [$cd4d], a
ld a, $1
ld [$cd6a], a
ld a, [wWhichPokemon] ; $cf92
ld hl, W_PARTYMON1NAME ; $d2b5
call GetPartyMonName
ld hl, $d730
set 6, [hl]
call GBPalWhiteOutWithDelay3
call CleanLCD_OAM
call Func_3dbe
ld a, $90
ld [$ffb0], a
call Delay3
call LoadGBPal
call LoadCurrentMapView
call SaveScreenTilesToBuffer2
call Delay3
xor a
ld [$ffb0], a
ld hl, UsedCutText
call PrintText
call LoadScreenTilesFromBuffer2
ld hl, $d730
res 6, [hl]
ld a, $ff
ld [$cfcb], a
call AnimateCutTree
ld de, CutTreeBlockSwaps ; $7100
call Func_f09f
call Func_eedc
callba Func_79e96
ld a, $1
ld [$cfcb], a
ld a, (SFX_02_56 - SFX_Headers_02) / 3
call PlaySound
ld a, $90
ld [$ffb0], a
call UpdateSprites
jp Func_eedc
UsedCutText: ; eff2 (3:6ff2)
TX_FAR _UsedCutText
db "@"
AnimateCutTree: ; eff7 (3:6ff7)
xor a
ld [$cd50], a
ld a, $e4
ld [rOBP1], a ; $ff49
ld a, [$cd4d]
cp $52
jr z, .asm_f020
ld de, Overworld_GFX + $2d0 ; $42d0 ; cuttable tree sprite top row
ld hl, $8fc0
ld bc, (BANK(Overworld_GFX) << 8) + $02
call CopyVideoData
ld de, Overworld_GFX + $3d0 ; $43d0 ; cuttable tree sprite bottom row
ld hl, $8fe0
ld bc, (BANK(Overworld_GFX) << 8) + $02
call CopyVideoData
jr asm_f055
.asm_f020
ld hl, $8fc0
call LoadCutTreeOAM
ld hl, $8fd0
call LoadCutTreeOAM
ld hl, $8fe0
call LoadCutTreeOAM
ld hl, $8ff0
call LoadCutTreeOAM
call asm_f055
ld hl, $c393
ld de, $4
ld a, $30
ld c, e
.asm_f044
ld [hl], a
add hl, de
xor $60
dec c
jr nz, .asm_f044
ret
LoadCutTreeOAM: ; f04c (3:704c)
ld de, AnimationTileset2 + $60 ; $474e ; tile depicting a leaf
ld bc, (BANK(AnimationTileset2) << 8) + $01
jp CopyVideoData
asm_f055: ; f055 (3:7055)
call Func_f068
ld a, $9
ld de, CutTreeOAM ; $7060
jp WriteOAMBlock
CutTreeOAM: ; f060 (3:7060)
db $FC,$10,$FD,$10
db $FE,$10,$FF,$10
Func_f068: ; f068 (3:7068)
ld hl, $c104
ld a, [hli]
ld b, a
inc hl
ld a, [hli]
ld c, a ; bc holds ypos/xpos of player's sprite
inc hl
inc hl
ld a, [hl] ; a holds direction of player (00: down, 04: up, 08: left, 0C: right)
srl a
ld e, a
ld d, $0 ; de holds direction (00: down, 02: up, 04: left, 06: right)
ld a, [$cd50]
and a
ld hl, CutTreeAnimationOffsets ; $708f
jr z, .asm_f084
ld hl, CutTreeAnimationOffsets2 ; $7097
.asm_f084
add hl, de
ld e, [hl]
inc hl
ld d, [hl]
ld a, b
add d
ld b, a
ld a, c
add e
ld c, a
ret
CutTreeAnimationOffsets: ; f08f (3:708f)
; Each pair represents the x and y pixels offsets from the player of where the cut tree animation should be drawn
db 8, 36 ; player is facing down
db 8, 4 ; player is facing up
db -8, 20 ; player is facing left
db 24, 20 ; player is facing right
CutTreeAnimationOffsets2: ; f097 (3:7097)
; Not sure if these ever get used. CutTreeAnimationOffsets only seems to be used.
; Each pair represents the x and y pixels offsets from the player of where the cut tree animation should be drawn
; These offsets represent 2 blocks away from the player
db 8, 52 ; player is facing down
db 8, -12 ; player is facing up
db -24, 20 ; player is facing left
db 40, 20 ; player is facing right
Func_f09f: ; f09f (3:709f)
push de
ld a, [W_CURMAPWIDTH] ; $d369
add $6
ld c, a
ld b, $0
ld d, $0
ld hl, $d35f
ld a, [hli]
ld h, [hl]
ld l, a
add hl, bc
ld a, [$c109]
and a
jr z, .asm_f0c7
cp $4
jr z, .asm_f0cf
cp $8
jr z, .asm_f0d7
ld a, [W_XBLOCKCOORD] ; $d364
and a
jr z, .asm_f0e0
jr .asm_f0ec
.asm_f0c7
ld a, [W_YBLOCKCOORD] ; $d363
and a
jr z, .asm_f0e0
jr .asm_f0df
.asm_f0cf
ld a, [W_YBLOCKCOORD] ; $d363
and a
jr z, .asm_f0e1
jr .asm_f0e0
.asm_f0d7
ld a, [W_XBLOCKCOORD] ; $d364
and a
jr z, .asm_f0e6
jr .asm_f0e0
.asm_f0df
add hl, bc
.asm_f0e0
add hl, bc
.asm_f0e1
ld e, $2
add hl, de
jr .asm_f0f0
.asm_f0e6
ld e, $1
add hl, bc
add hl, de
jr .asm_f0f0
.asm_f0ec
ld e, $3
add hl, bc
add hl, de
.asm_f0f0
pop de
ld a, [hl]
ld c, a
.asm_f0f3
ld a, [de]
inc de
inc de
cp $ff
ret z
cp c
jr nz, .asm_f0f3
dec de
ld a, [de]
ld [hl], a
ret
CutTreeBlockSwaps: ; f100 (3:7100)
; first byte = tileset block containing the cut tree
; second byte = corresponding tileset block after the cut animation happens
db $32, $6D
db $33, $6C
db $34, $6F
db $35, $4C
db $60, $6E
db $0B, $0A
db $3C, $35
db $3F, $35
db $3D, $36
db $FF ; list terminator