summaryrefslogtreecommitdiff
path: root/audio/pikapcm.asm
blob: 6b4bbfe024ebc1408a27d2684ca55f3c91c123a5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
PlayPikachuSoundClip: ; 0x50000
; Plays the pcm (pulse-code modulation) sound clip of one of the pikachu noises.
	sla a
	ld c, a
	ld b, $0
	ld hl, PikachuSoundClipPointers
	add hl, bc
	ld a, [hli]
	ld h, [hl]
	ld l, a
	push hl
	di
	ld b, $4
.asm_50010
	ld a, [rLY]
	and a
	jr nz, .asm_50010
	dec b
	jr nz, .asm_50010
	xor a
	ld [rNR50], a
	ld [rNR51], a
	ld a, $80
	ld [rNR52], a
	xor a
	ld [rNR30], a
	ld hl, wd84b
	ld c, $30
	ld b, $10
.asm_5002b
	ld a, [$ff00+c]
	ld [hli], a
	ld a, $ff
	ld [$ff00+c], a
	inc c
	dec b
	jr nz, .asm_5002b
	ld a, $80
	ld [rNR30], a
	ld a, $ff
	ld [rNR31], a
	ld a, $20
	ld [rNR32], a
	ld a, $ff
	ld [rNR33], a
	ld a, $87
	ld [rNR34], a
	ld a, $77
	ld [rNR50], a
	ld a, $44
	ld [rNR51], a
	pop hl
	call PlayPikachuPCM
	xor a
	ld [rNR50], a
	ld [rNR51], a
	ld [rNR52], a
	ld hl, wd84b
	ld c, $30
	ld b, $10
.asm_50062
	ld a, [hli]
	ld [$ff00+c], a
	inc c
	dec b
	jr nz, .asm_50062
	ld a, $77
	ld [rNR50], a
	ld a, $ff
	ld [rNR51], a
	ld a, $80
	ld [rNR52], a
	ei
	ret

PikachuSoundClipPointers: ; 0x50076
	dw PikachuBillboardBonusSoundClip
	dw PikachuThundershockSoundClip

PikachuBillboardBonusSoundClip:  ; 0x5007a
	dw $caf  ; length of the pcm data (todo: there is probably a way to do this dynamically with rgbds)
	INCBIN "audio/sound_clips/pi_ka_chu.pcm"

	db $1f  ; unused

PikachuThundershockSoundClip:  ; 0x50d2c
	dw $1227  ; length of the pcm data (todo: there is probably a way to do this dynamically with rgbds)
	INCBIN "audio/sound_clips/piiiiikaaaa.pcm"

	db $f0, $00, $00  ; unused

PlayPikachuPCM: ; 0x51f56
; Plays the audio PCM at [hl]
	ld a, [hli]
	ld c, a
	ld a, [hli]
	ld b, a
	; bc = number of bytes in the sound clip's PCM (pulse-code modulation)
.loop
	ld a, [hli]
	ld d, a
	ld a, $3
.playSingleSample
	dec a
	jr nz, .playSingleSample
	call LoadNextSoundClipSample
	call PlaySoundClipSample
	call LoadNextSoundClipSample
	call PlaySoundClipSample
	call LoadNextSoundClipSample
	call PlaySoundClipSample
	call LoadNextSoundClipSample
	call PlaySoundClipSample
	call LoadNextSoundClipSample
	call PlaySoundClipSample
	call LoadNextSoundClipSample
	call PlaySoundClipSample
	call LoadNextSoundClipSample
	call PlaySoundClipSample
	call LoadNextSoundClipSample
	dec bc
	ld a, c
	or b
	jr nz, .loop
	ret

LoadNextSoundClipSample: ; 0x51f94
	ld a, d
	and $80
	srl a
	srl a
	ld [rNR32], a
	sla d
	ret

PlaySoundClipSample: ; 0x51fa0
	ld a, $3
.loop
	dec a
	jr nz, .loop
	ret