Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pret
GitHub Repository: pret/pokered
Path: blob/master/engine/overworld/push_boulder.asm
1271 views
1
TryPushingBoulder::
2
ld a, [wStatusFlags1]
3
bit BIT_STRENGTH_ACTIVE, a
4
ret z
5
ld a, [wMiscFlags]
6
bit BIT_BOULDER_DUST, a
7
ret nz
8
xor a
9
ldh [hSpriteIndex], a
10
call IsSpriteInFrontOfPlayer
11
ldh a, [hSpriteIndex]
12
ld [wBoulderSpriteIndex], a
13
and a
14
jp z, ResetBoulderPushFlags
15
ld hl, wSpritePlayerStateData1MovementStatus
16
ld d, $0
17
ldh a, [hSpriteIndex]
18
swap a
19
ld e, a
20
add hl, de
21
res BIT_FACE_PLAYER, [hl]
22
call GetSpriteMovementByte2Pointer
23
ld a, [hl]
24
cp BOULDER_MOVEMENT_BYTE_2
25
jp nz, ResetBoulderPushFlags
26
ld hl, wMiscFlags
27
bit BIT_TRIED_PUSH_BOULDER, [hl]
28
set BIT_TRIED_PUSH_BOULDER, [hl]
29
ret z ; the player must try pushing twice before the boulder will move
30
ldh a, [hJoyHeld]
31
and PAD_CTRL_PAD
32
ret z
33
predef CheckForCollisionWhenPushingBoulder
34
ld a, [wTileInFrontOfBoulderAndBoulderCollisionResult]
35
and a ; was there a collision?
36
jp nz, ResetBoulderPushFlags
37
ldh a, [hJoyHeld]
38
ld b, a
39
ld a, [wSpritePlayerStateData1FacingDirection]
40
cp SPRITE_FACING_UP
41
jr z, .pushBoulderUp
42
cp SPRITE_FACING_LEFT
43
jr z, .pushBoulderLeft
44
cp SPRITE_FACING_RIGHT
45
jr z, .pushBoulderRight
46
.pushBoulderDown
47
bit B_PAD_DOWN, b
48
ret z
49
ld de, PushBoulderDownMovementData
50
jr .done
51
.pushBoulderUp
52
bit B_PAD_UP, b
53
ret z
54
ld de, PushBoulderUpMovementData
55
jr .done
56
.pushBoulderLeft
57
bit B_PAD_LEFT, b
58
ret z
59
ld de, PushBoulderLeftMovementData
60
jr .done
61
.pushBoulderRight
62
bit B_PAD_RIGHT, b
63
ret z
64
ld de, PushBoulderRightMovementData
65
.done
66
call MoveSprite
67
ld a, SFX_PUSH_BOULDER
68
call PlaySound
69
ld hl, wMiscFlags
70
set BIT_BOULDER_DUST, [hl]
71
ret
72
73
PushBoulderUpMovementData:
74
db NPC_MOVEMENT_UP
75
db -1 ; end
76
77
PushBoulderDownMovementData:
78
db NPC_MOVEMENT_DOWN
79
db -1 ; end
80
81
PushBoulderLeftMovementData:
82
db NPC_MOVEMENT_LEFT
83
db -1 ; end
84
85
PushBoulderRightMovementData:
86
db NPC_MOVEMENT_RIGHT
87
db -1 ; end
88
89
DoBoulderDustAnimation::
90
ld a, [wStatusFlags5]
91
bit BIT_SCRIPTED_NPC_MOVEMENT, a
92
ret nz
93
callfar AnimateBoulderDust
94
call DiscardButtonPresses
95
ld [wJoyIgnore], a
96
call ResetBoulderPushFlags
97
set BIT_PUSHED_BOULDER, [hl]
98
ld a, [wBoulderSpriteIndex]
99
ldh [hSpriteIndex], a
100
call GetSpriteMovementByte2Pointer
101
ld [hl], $10
102
ld a, SFX_CUT
103
jp PlaySound
104
105
ResetBoulderPushFlags:
106
ld hl, wMiscFlags
107
res BIT_BOULDER_DUST, [hl]
108
res BIT_TRIED_PUSH_BOULDER, [hl]
109
ret
110
111