diff options
Diffstat (limited to 'audio')
-rwxr-xr-x | audio/engine_0f.asm | 2733 | ||||
-rwxr-xr-x | audio/engine_10.asm | 19 | ||||
-rwxr-xr-x | audio/engine_11.asm | 17 | ||||
-rwxr-xr-x | audio/engine_12.asm | 17 | ||||
-rwxr-xr-x | audio/engine_13.asm | 13 | ||||
-rwxr-xr-x | audio/pikapcm.asm | 141 |
6 files changed, 2940 insertions, 0 deletions
diff --git a/audio/engine_0f.asm b/audio/engine_0f.asm new file mode 100755 index 0000000..50dbd6e --- /dev/null +++ b/audio/engine_0f.asm @@ -0,0 +1,2733 @@ +Func_3c000: ; 0x3c000 + push hl + push de + push bc + push af + call Func_3cb1b + ld hl, wdd01 + ld de, $01af +.clearLoop + xor a + ld [hli], a + dec de + ld a, e + or d + jr nz, .clearLoop + ld hl, rNR50 + xor a + ld [hli], a + ld [hli], a + ld a, $80 + ld [hli], a + ld hl, rNR10 + ld e, $4 +.asm_3c022 + xor a + ld [hli], a + ld [hli], a + ld a, $8 + ld [hli], a + xor a + ld [hli], a + ld a, $80 + ld [hli], a + dec e + jr nz, .asm_3c022 + ld a, $8 + ld [wde9a], a + ld a, $77 + ld [wde98], a + call Func_3cb15 + pop af + pop bc + pop de + pop hl + ret + +Func_3c042: ; 0x3c042 + ld a, [de] + inc de + and $7 + ld [wdeae], a + ld c, a + ld b, $0 + ld hl, WRAMPointerTable_3cc92 + add hl, bc + add hl, bc + ld c, [hl] + inc hl + ld b, [hl] + ld hl, $0002 + add hl, bc + res 0, [hl] + push de + xor a + ld hl, $0000 + add hl, bc + ld e, $32 +.loop + ld [hli], a + dec e + jr nz, .loop + ld hl, $0017 + add hl, bc + xor a + ld [hli], a + inc a + ld [hl], a + ld hl, $0028 + add hl, bc + ld [hl], a + pop de + ld hl, $0005 + add hl, bc + ld a, [de] + ld [hli], a + inc de + ld a, [de] + ld [hl], a + inc de + ld hl, $0000 + add hl, bc + ld a, [wde9b] + ld [hli], a + ld a, [wde9c] + ld [hl], a + ret + + dr $3c08b, $3c090 + +PlaySong_BankF: ; 0x3c090 + push de + call Func_3c000 + pop de + call Func_3cb1b + ld hl, wde9b + ld [hl], e + inc hl + ld [hl], d + ld hl, SongHeaderPointers0F + add hl, de + add hl, de + ld e, [hl] + inc hl + ld d, [hl] + ld a, [de] + rlca + rlca + and $3 + inc a +.asm_3c0ac + push af + call Func_3c042 + call Func_3cadf + pop af + dec a + jr nz, .asm_3c0ac + call Func_3cb15 + ret + + dr $3c0bb, $3c0c0 + +PlaySoundEffect_BankF: ; 0x3c0c0 + call Func_3cb1b + ld hl, wde9b + ld [hl], e + inc hl + ld [hl], d + ld hl, PointerTable_3e3ce + add hl, de + add hl, de + ld e, [hl] + inc hl + ld d, [hl] + ld a, [de] + rlca + rlca + and $3 + inc a +.asm_3c0d7 + push af + call Func_3c042 + ld hl, $0002 + add hl, bc + set 3, [hl] + call Func_3cadf + pop af + dec a + jr nz, .asm_3c0d7 + call Func_3cb15 + ret + + dr $3c0ec, $3c0f0 + +PlayCry_BankF: ; 0x3c0f0 +; Plays a Pokemon cry. +; Input: e = mon id + call Func_3cb1b + ld a, e + and a + ret z + dec e + ld d, $0 + ld hl, CryData + add hl, de + add hl, de + add hl, de + add hl, de + add hl, de + add hl, de + ld e, [hl] + inc hl + ld d, [hl] ; de = base cry id + inc hl + ld a, [hli] + ld [wdea8], a + ld a, [hli] + ld [wdea9], a ; dea8 = cry pitch + ld a, [hli] + ld [wdeaa], a + ld a, [hl] + ld [wdeab], a ; deaa = cry length + ld hl, wde9b + ld [hl], e + inc hl + ld [hl], d + ld hl, CryBasePointers + add hl, de + add hl, de + ld e, [hl] + inc hl + ld d, [hl] + ld a, [de] + rlca + rlca + and $3 + inc a +.asm_3c12a + push af + call Func_3c042 + ld hl, $0002 + add hl, bc + set 5, [hl] + ld hl, $0003 + add hl, bc + set 4, [hl] + ld hl, $0026 + add hl, bc + ld a, [wdea8] + ld [hli], a + ld a, [wdea9] + ld [hl], a + ld a, [wde97] + and $3 + cp $3 + jr nc, .asm_3c15b + ld hl, $0017 + add hl, bc + ld a, [wdeaa] + ld [hli], a + ld a, [wdeab] + ld [hl], a +.asm_3c15b + call Func_3cadf + pop af + dec a + jr nz, .asm_3c12a + ld a, [wdeac] + and a + jr nz, .asm_3c173 + ld a, [wde98] + ld [wdeac], a + ld a, $77 + ld [wde98], a +.asm_3c173 + ld a, $1 + ld [wdead], a + call Func_3cb15 + ret + + dr $3c17c, $3c180 + +Func_3c180: ; 0x3c180 + ld a, [wdd00] + and a + ret z + xor a + ld [wde97], a + ld [wde99], a + ld bc, wdd01 +.asm_3c18f + ld hl, $0002 + add hl, bc + bit 0, [hl] + jp z, .asm_3c22d + ld hl, $0014 + add hl, bc + ld a, [hl] + cp $2 + jr c, .asm_3c1a4 + dec [hl] + jr .asm_3c1c1 + +.asm_3c1a4 + ld hl, $001c + add hl, bc + ld a, [hl] + ld hl, $001b + add hl, bc + ld [hl], a + ld hl, $0025 + add hl, bc + ld a, [hl] + ld hl, $0024 + add hl, bc + ld [hl], a + ld hl, $0003 + add hl, bc + res 1, [hl] + call Func_3c670 +.asm_3c1c1 + ld hl, $000d + add hl, bc + ld a, [hli] + ld [wde91], a + ld a, [hli] + ld [wde92], a + ld a, [hli] + ld [wde93], a + ld a, [hl] + ld [wde94], a + call Func_3c4f0 + call Func_3c632 + ld a, [wdead] + and a + jr z, .asm_3c20a + ld a, [wde97] + cp $4 + jr nc, .asm_3c219 + ld hl, wddcb + bit 0, [hl] + jr nz, .asm_3c204 + ld hl, wddfd + bit 0, [hl] + jr nz, .asm_3c204 + ld hl, wde2f + bit 0, [hl] + jr nz, .asm_3c204 + ld hl, wde61 + bit 0, [hl] + jr z, .asm_3c20a +.asm_3c204 + ld hl, $000b + add hl, bc + set 5, [hl] +.asm_3c20a + ld a, [wde97] + cp $4 + jr nc, .asm_3c219 + ld hl, $00ca + add hl, bc + bit 0, [hl] + jr nz, .asm_3c227 +.asm_3c219 + call Func_3c24d + ld hl, $0019 + add hl, bc + ld a, [wde99] + or [hl] + ld [wde99], a +.asm_3c227 + ld hl, $000b + add hl, bc + xor a + ld [hl], a +.asm_3c22d + ld hl, $0032 + add hl, bc + ld c, l + ld b, h + ld a, [wde97] + inc a + ld [wde97], a + cp $8 + jp nz, .asm_3c18f + call Func_3c40d + ld a, [wde98] + ld [rNR50], a + ld a, [wde99] + ld [rNR51], a + ret + +Func_3c24d: ; 0x3c24d + ld hl, PointerTable_3c25e + ld a, [wde97] + and $7 + add a + ld e, a + ld d, $0 + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] + +PointerTable_3c25e: ; 0x3c25e + dw Func_3c26e + dw Func_3c2e0 + dw Func_3c349 + dw Func_3c3cf + dw Func_3c26e + dw Func_3c2e0 + dw Func_3c349 + dw Func_3c3cf + +Func_3c26e: ; 0x3c26e + ld hl, $000b + add hl, bc + bit 3, [hl] + jr z, .asm_3c27b + ld a, [wde9a] + ld [rNR10], a +.asm_3c27b + bit 5, [hl] + jr nz, .asm_3c2ba + bit 4, [hl] + jr nz, .asm_3c2c6 + bit 6, [hl] + jr nz, .asm_3c2b4 + bit 1, [hl] + jr z, .asm_3c295 + ld a, [wde93] + ld [rNR13], a + ld a, [wde94] + ld [rNR14], a +.asm_3c295 + bit 2, [hl] + jr z, .asm_3c2a5 + ld a, [wde92] + ld [rNR12], a + ld a, [wde94] + or $80 + ld [rNR14], a +.asm_3c2a5 + bit 0, [hl] + ret z + ld a, [wde91] + ld d, a + ld a, [rNR11] + and $3f + or d + ld [rNR11], a + ret + +.asm_3c2b4 + ld a, [wde93] + ld [rNR13], a + ret + +.asm_3c2ba + ld a, $8 + ld [rNR12], a + ld a, [wde94] + or $80 + ld [rNR14], a + ret + +.asm_3c2c6 + ld hl, wde91 + ld a, $3f + or [hl] + ld [rNR11], a + ld a, [wde92] + ld [rNR12], a + ld a, [wde93] + ld [rNR13], a + ld a, [wde94] + or $80 + ld [rNR14], a + ret + +Func_3c2e0: ; 0x3c2e0 + ld hl, $000b + add hl, bc + bit 5, [hl] + jr nz, .asm_3c323 + bit 4, [hl] + jr nz, .asm_3c32f + bit 6, [hl] + jr nz, .asm_3c31d + bit 1, [hl] + jr z, .asm_3c2fe + ld a, [wde93] + ld [rNR23], a + ld a, [wde94] + ld [rNR24], a +.asm_3c2fe + bit 2, [hl] + jr z, .asm_3c30e + ld a, [wde92] + ld [rNR22], a + ld a, [wde94] + or $80 + ld [rNR24], a +.asm_3c30e + bit 0, [hl] + ret z + ld a, [wde91] + ld d, a + ld a, [rNR21] + and $3f + or d + ld [rNR21], a + ret + +.asm_3c31d + ld a, [wde93] + ld [rNR23], a + ret + +.asm_3c323 + ld a, $8 + ld [rNR22], a + ld a, [wde94] + or $80 + ld [rNR24], a + ret + +.asm_3c32f + ld hl, wde91 + ld a, $3f + or [hl] + ld [rNR21], a + ld a, [wde92] + ld [rNR22], a + ld a, [wde93] + ld [rNR23], a + ld a, [wde94] + or $80 + ld [rNR24], a + ret + +Func_3c349: ; 0x3c349 + ld hl, $000b + add hl, bc + bit 5, [hl] + jr nz, .asm_3c387 + bit 4, [hl] + jr nz, .asm_3c38b + bit 6, [hl] + jr nz, .asm_3c381 + bit 1, [hl] + jr z, .asm_3c367 + ld a, [wde93] + ld [rNR33], a + ld a, [wde94] + ld [rNR34], a +.asm_3c367 + bit 2, [hl] + ret z + xor a + ld [rNR30], a + call LoadWavePattern + ld a, $80 + ld [rNR30], a + ld a, [wde93] + ld [rNR33], a + ld a, [wde94] + or $80 + ld [rNR34], a + ret + +.asm_3c381 + ld a, [wde93] + ld [rNR33], a + ret + +.asm_3c387 + xor a + ld [rNR30], a + ret + +.asm_3c38b + ld a, $3f + ld [rNR31], a + xor a + ld [rNR30], a + call LoadWavePattern + ld a, $80 + ld [rNR30], a + ld a, [wde93] + ld [rNR33], a + ld a, [wde94] + or $80 + ld [rNR34], a + ret + +LoadWavePattern: ; 0x3c3a6 + push hl + ld a, [wde92] + and $f + ld l, a + ld h, $0 + add hl, hl + add hl, hl + add hl, hl + add hl, hl + ld de, WavePatterns_BankF + add hl, de + ld de, rWave_0 + push bc + ld b, $10 +.loop + ld a, [hli] + ld [de], a + inc de + dec b + jr nz, .loop + pop bc + pop hl + ld a, [wde92] + and $f0 + sla a + ld [rNR32], a ; set volume of wave channel + ret + +Func_3c3cf: ; 0x3c3cf + ld hl, $000b + add hl, bc + bit 5, [hl] + jr nz, .asm_3c3f1 + bit 4, [hl] + jr nz, .asm_3c3fa + bit 1, [hl] + jr z, .asm_3c3e4 + ld a, [wde93] + ld [rNR43], a +.asm_3c3e4 + bit 2, [hl] + ret z + ld a, [wde92] + ld [rNR42], a + ld a, $80 + ld [rNR44], a + ret + +.asm_3c3f1 + ld a, $8 + ld [rNR42], a + ld a, $80 + ld [rNR44], a + ret + +.asm_3c3fa + ld a, $3f + ld [rNR41], a + ld a, [wde92] + ld [rNR42], a + ld a, [wde93] + ld [rNR43], a + ld a, $80 + ld [rNR44], a + ret + +Func_3c40d: ; 0x3c40d + ld a, [wdea2] + and a + ret z + ld a, [wdea3] + and a + jr z, .asm_3c41d + dec a + ld [wdea3], a + ret + +.asm_3c41d + ld a, [wdea2] + ld d, a + and $7f + ld [wdea3], a + ld a, [wde98] + and $7 + bit 7, d + jr nz, .asm_3c448 + and a + jr z, .asm_3c435 + dec a + jr .asm_3c454 + +.asm_3c435 + ld a, [wdea4] + ld e, a + ld a, [wdea5] + ld d, a + push bc + call PlaySong_BankF + pop bc + ld hl, wdea2 + set 7, [hl] + ret + +.asm_3c448 + cp $7 + jr nc, .asm_3c44f + inc a + jr .asm_3c454 + +.asm_3c44f + xor a + ld [wdea2], a + ret + +.asm_3c454 + ld d, a + swap a + or d + ld [wde98], a + ret + +Func_3c45c: ; 0x3c45c + ld hl, $0003 + add hl, bc + bit 1, [hl] + ret z + ld hl, $0014 + add hl, bc + ld a, [hl] + ld hl, wde95 + sub [hl] + jr nc, .asm_3c470 + ld a, $1 +.asm_3c470 + ld [hl], a + ld hl, $000f + add hl, bc + ld e, [hl] + inc hl + ld d, [hl] + ld hl, $001f + add hl, bc + ld a, e + sub [hl] + ld e, a + ld a, d + sbc $0 + ld d, a + ld hl, $0020 + add hl, bc + sub [hl] + jr nc, .asm_3c4ab + ld hl, $0004 + add hl, bc + set 1, [hl] + ld hl, $000f + add hl, bc + ld e, [hl] + inc hl + ld d, [hl] + ld hl, $001f + add hl, bc + ld a, [hl] + sub e + ld e, a + ld a, d + sbc $0 + ld d, a + ld hl, $0020 + add hl, bc + ld a, [hl] + sub d + ld d, a + jr .asm_3c4c9 + +.asm_3c4ab + ld hl, $0004 + add hl, bc + res 1, [hl] + ld hl, $000f + add hl, bc + ld e, [hl] + inc hl + ld d, [hl] + ld hl, $001f + add hl, bc + ld a, e + sub [hl] + ld e, a + ld a, d + sbc $0 + ld d, a + ld hl, $0020 + add hl, bc + sub [hl] + ld d, a +.asm_3c4c9 + push bc + ld hl, wde95 + ld b, $0 +.asm_3c4cf + inc b + ld a, e + sub [hl] + ld e, a + jr nc, .asm_3c4cf + ld a, d + and a + jr z, .asm_3c4dc + dec d + jr .asm_3c4cf + +.asm_3c4dc + ld a, e + add [hl] + ld d, b + pop bc + ld hl, $0021 + add hl, bc + ld [hl], d + ld hl, $0022 + add hl, bc + ld [hl], a + ld hl, $0023 + add hl, bc + xor a + ld [hl], a + + ; fall through + +Func_3c4f0: ; 0x3c4f0 + ld hl, $0003 + add hl, bc + bit 2, [hl] + jr z, .asm_3c50b + ld hl, $001a + add hl, bc + ld a, [hl] + rlca + rlca + ld [hl], a + and $c0 + ld [wde91], a + ld hl, $000b + add hl, bc + set 0, [hl] +.asm_3c50b + ld hl, $0003 + add hl, bc + bit 4, [hl] + jr z, .asm_3c529 + ld hl, $0026 + add hl, bc + ld e, [hl] + inc hl + ld d, [hl] + ld hl, wde93 + ld a, [hli] + ld h, [hl] + ld l, a + add hl, de + ld e, l + ld d, h + ld hl, wde93 + ld [hl], e + inc hl + ld [hl], d +.asm_3c529 + ld hl, $0003 + add hl, bc + bit 1, [hl] + jp z, .asm_3c5c1 + ld hl, $000f + add hl, bc + ld e, [hl] + inc hl + ld d, [hl] + ld hl, $0004 + add hl, bc + bit 1, [hl] + jr z, .asm_3c574 + ld hl, $0021 + add hl, bc + ld l, [hl] + ld h, $0 + add hl, de + ld d, h + ld e, l + ld hl, $0022 + add hl, bc + ld a, [hl] + ld hl, $0023 + add hl, bc + add [hl] + ld [hl], a + ld a, $0 + adc e + ld e, a + ld a, $0 + adc d + ld d, a + ld hl, $0020 + add hl, bc + ld a, [hl] + cp d + jp c, .asm_3c5a1 + jr nz, .asm_3c5b4 + ld hl, $001f + add hl, bc + ld a, [hl] + cp e + jp c, .asm_3c5a1 + jr .asm_3c5b4 + +.asm_3c574 + ld a, e + ld hl, $0021 + add hl, bc + ld e, [hl] + sub e + ld e, a + ld a, d + sbc $0 + ld d, a + ld hl, $0022 + add hl, bc + ld a, [hl] + add a + ld [hl], a + ld a, e + sbc $0 + ld e, a + ld a, d + sbc $0 + ld d, a + ld hl, $0020 + add hl, bc + ld a, d + cp [hl] + jr c, .asm_3c5a1 + jr nz, .asm_3c5b4 + ld hl, $001f + add hl, bc + ld a, e + cp [hl] + jr nc, .asm_3c5b4 +.asm_3c5a1 + ld hl, $0003 + add hl, bc + res 1, [hl] + ld hl, $0004 + add hl, bc + res 1, [hl] + ld hl, $0020 + add hl, bc + ld e, [hl] + inc hl + ld d, [hl] +.asm_3c5b4 + ld hl, $000f + add hl, bc + ld [hl], e + inc hl + ld [hl], d + ld hl, $000b + add hl, bc + set 1, [hl] +.asm_3c5c1 + ld hl, $0003 + add hl, bc + bit 0, [hl] + jr z, .asm_3c61a + ld hl, $001b + add hl, bc + ld a, [hl] + and a + jr nz, .asm_3c5e3 + ld hl, $001d + add hl, bc + ld a, [hl] + and a + jr z, .asm_3c61a + ld d, a + ld hl, $001e + add hl, bc + ld a, [hl] + and $f + jr z, .asm_3c5e6 +.asm_3c5e3 + dec [hl] + jr .asm_3c61a + +.asm_3c5e6 + ld a, [hl] + swap [hl] + or [hl] + ld [hl], a + ld a, [wde93] + ld e, a + ld hl, $0004 + add hl, bc + bit 0, [hl] + jr z, .asm_3c605 + res 0, [hl] + ld a, d + and $f + ld d, a + ld a, e + sub d + jr nc, .asm_3c611 + ld a, $0 + jr .asm_3c611 + +.asm_3c605 + set 0, [hl] + ld a, d + and $f0 + swap a + add e + jr nc, .asm_3c611 + ld a, $ff +.asm_3c611 + ld [wde93], a + ld hl, $000b + add hl, bc + set 6, [hl] +.asm_3c61a + ld hl, $0003 + add hl, bc + bit 3, [hl] + ret z + ld hl, $0024 + add hl, bc + ld a, [hl] + and a + jr z, .asm_3c62b + dec [hl] + ret + +.asm_3c62b + ld hl, $000b + add hl, bc + set 5, [hl] + ret + +Func_3c632: ; 0x3c632 + ld hl, $0002 + add hl, bc + bit 4, [hl] + ret z + ld a, [wde9f] + and a + jr z, .asm_3c644 + dec a + ld [wde9f], a + ret + +.asm_3c644 + ld hl, wde9d + ld e, [hl] + inc hl + ld d, [hl] + ld a, [de] + inc de + cp $ff + ret z + and $f + inc a + ld [wde9f], a + ld a, [de] + inc de + ld [wde92], a + ld a, [de] + inc de + ld [wde93], a + xor a + ld [wde94], a + ld hl, wde9d + ld [hl], e + inc hl + ld [hl], d + ld hl, $000b + add hl, bc + set 4, [hl] + ret + +Func_3c670: ; 0x3c670 + call Func_3ca10 + cp $ff + jr z, .asm_3c6c9 + cp $d0 + jr c, .asm_3c680 +.asm_3c67b + call Func_3c786 + jr Func_3c670 + +.asm_3c680 + ld hl, $0002 + add hl, bc + bit 3, [hl] + jp nz, Func_3c723 + bit 5, [hl] + jp nz, Func_3c723 + bit 4, [hl] + jp nz, Func_3c750 + ld a, [wde96] + and $f + call Func_3ca5b + ld a, [wde96] + swap a + and $f + jr z, .asm_3c6c2 + ld hl, $0011 + add hl, bc + ld [hl], a + ld e, a + ld hl, $0012 + add hl, bc + ld d, [hl] + call Func_3ca2b + ld hl, $000f + add hl, bc + ld [hl], e + inc hl + ld [hl], d + ld hl, $000b + add hl, bc + set 4, [hl] + jp Func_3c45c + +.asm_3c6c2 + ld hl, $000b + add hl, bc + set 5, [hl] + ret + +.asm_3c6c9 + ld hl, $0002 + add hl, bc + bit 1, [hl] + jr nz, .asm_3c67b + ld a, [wde97] + cp $4 + jr nc, .asm_3c6e0 + ld hl, $00ca + add hl, bc + bit 0, [hl] + jr nz, .asm_3c6f6 +.asm_3c6e0 + ld hl, $0002 + add hl, bc + bit 5, [hl] + call nz, Func_3c704 + ld a, [wde97] + cp $4 + jr nz, .asm_3c6f6 + xor a + ld [rNR10], a + ld [wde9a], a +.asm_3c6f6 + ld hl, $0002 + add hl, bc + res 0, [hl] + ld hl, $0000 + add hl, bc + xor a + ld [hli], a + ld [hli], a + ret + +Func_3c704: ; 0x3c704 + ld a, [wde97] + cp $4 + ret nz + xor a + ld hl, wde21 + ld [hli], a + ld [hl], a + ld hl, wde85 + ld [hli], a + ld [hl], a + ld a, [wdeac] + ld [wde98], a + xor a + ld [wdeac], a + ld [wdead], a + ret + +Func_3c723: ; 0x3c723 + ld hl, $000b + add hl, bc + set 4, [hl] + ld a, [wde96] + call Func_3ca5b + call Func_3ca10 + ld hl, $000e + add hl, bc + ld [hl], a + call Func_3ca10 + ld hl, $000f + add hl, bc + ld [hl], a + ld a, [wde97] + and $3 + cp $3 + ret z + call Func_3ca10 + ld hl, $0010 + add hl, bc + ld [hl], a + ret + +Func_3c750: ; 0x3c750 + ld a, [wde97] + cp $3 + ret nz + ld a, [wde96] + and $f + call Func_3ca5b + ld a, [wdea1] + ld e, a + ld d, $0 + ld hl, $4ba2 + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [wde96] + swap a + and $f + ret z + ld e, a + ld d, $0 + add hl, de + add hl, de + ld a, [hli] + ld [wde9d], a + ld a, [hl] + ld [wde9e], a + xor a + ld [wde9f], a + ret + +Func_3c786: ; 0x3c786 + ld a, [wde96] + sub $d0 + ld e, a + ld d, $0 + ld hl, PointerTable_3c797 + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] + +PointerTable_3c797: ; 0x3c797 + dw Func_3c9b6 + dw Func_3c9b6 + dw Func_3c9b6 + dw Func_3c9b6 + dw Func_3c9b6 + dw Func_3c9b6 + dw Func_3c9b6 + dw Func_3c9b6 + dw Func_3c973 + dw Func_3c9c1 + dw Func_3c9aa + dw Func_3c994 + dw Func_3c9a1 + dw Func_3c987 + dw Func_3c939 + dw Func_3c951 + dw Func_3c8ff + dw Func_3c8c4 + dw Func_3c8b5 + dw Func_3c95f + dw Func_3c9ca + dw Func_3c9da + dw Func_3c926 + dw Func_3c7f7 + dw Func_3c7f7 + dw Func_3c9e9 + dw Func_3c7f7 + dw Func_3c7f7 + dw Func_3ca05 + dw Func_3ca0b + dw Func_3c7f7 + dw Func_3c7f7 + dw Func_3c7f7 + dw Func_3c7f7 + dw Func_3c7f7 + dw Func_3c7f7 + dw Func_3c7f7 + dw Func_3c7f7 + dw Func_3c7f7 + dw Func_3c7f7 + dw Func_3c7f7 + dw Func_3c7f7 + dw Func_3c885 + dw Func_3c88e + dw Func_3c833 + dw Func_3c843 + dw Func_3c80d + dw Func_3c7f8 + +Func_3c7f7: ; 0x3c7f7 + ret + +Func_3c7f8: ; 0x3c7f8 + ld hl, $0002 + add hl, bc + res 1, [hl] + ld hl, $0007 + add hl, bc + ld e, [hl] + inc hl + ld d, [hl] + ld hl, $0005 + add hl, bc + ld [hl], e + inc hl + ld [hl], d + ret + +Func_3c80d: ; 0x3c80d + call Func_3ca10 + ld e, a + call Func_3ca10 + ld d, a + push de + ld hl, $0005 + add hl, bc + ld e, [hl] + inc hl + ld d, [hl] + ld hl, $0007 + add hl, bc + ld [hl], e + inc hl + ld [hl], d + pop de + ld hl, $0005 + add hl, bc + ld [hl], e + inc hl + ld [hl], d + ld hl, $0002 + add hl, bc + set 1, [hl] + ret + +Func_3c833: ; 0x3c833 + call Func_3ca10 + ld e, a + call Func_3ca10 + ld d, a + ld hl, $0005 + add hl, bc + ld [hl], e + inc hl + ld [hl], d + ret + +Func_3c843: ; 0x3c843 + call Func_3ca10 + ld hl, $0002 + add hl, bc + bit 2, [hl] + jr nz, .asm_3c859 + and a + jr z, .asm_3c862 + dec a + set 2, [hl] + ld hl, $0016 + add hl, bc + ld [hl], a +.asm_3c859 + ld hl, $0016 + add hl, bc + ld a, [hl] + and a + jr z, .asm_3c872 + dec [hl] +.asm_3c862 + call Func_3ca10 + ld e, a + call Func_3ca10 + ld d, a + ld hl, $0005 + add hl, bc + ld [hl], e + inc hl + ld [hl], d + ret + +.asm_3c872 + ld hl, $0002 + add hl, bc + res 2, [hl] + ld hl, $0005 + add hl, bc + ld e, [hl] + inc hl + ld d, [hl] + inc de + inc de + ld [hl], d + dec hl + ld [hl], e + ret + +Func_3c885: ; 0x3c885 + call Func_3ca10 + ld hl, $000c + add hl, bc + ld [hl], a + ret + +Func_3c88e: ; 0x3c88e + call Func_3ca10 + ld hl, $000c + add hl, bc + cp [hl] + jr z, .asm_3c8a5 + ld hl, $0005 + add hl, bc + ld e, [hl] + inc hl + ld d, [hl] + inc de + inc de + ld [hl], d + dec hl + ld [hl], e + ret + +.asm_3c8a5 + call Func_3ca10 + ld e, a + call Func_3ca10 + ld d, a + ld hl, $0005 + add hl, bc + ld [hl], e + inc hl + ld [hl], d + ret + +Func_3c8b5: ; 0x3c8b5 + call Func_3ca10 + ld hl, $0025 + add hl, bc + ld [hl], a + ld hl, $0003 + add hl, bc + set 3, [hl] + ret + +Func_3c8c4: ; 0x3c8c4 + ld hl, $0003 + add hl, bc + set 0, [hl] + ld hl, $0004 + add hl, bc + res 0, [hl] + call Func_3ca10 + ld hl, $001c + add hl, bc + ld [hl], a + ld hl, $001b + add hl, bc + ld [hl], a + call Func_3ca10 + ld hl, $001d + add hl, bc + ld d, a + and $f0 + swap a + srl a + ld e, a + adc $0 + swap a + or e + ld [hl], a + ld hl, $001e + add hl, bc + ld a, d + and $f + ld d, a + swap a + or d + ld [hl], a + ret + +Func_3c8ff: ; 0x3c8ff + call Func_3ca10 + ld [wde95], a + call Func_3ca10 + ld d, a + and $f + ld e, a + ld a, d + swap a + and $f + ld d, a + call Func_3ca2b + ld hl, $001f + add hl, bc + ld [hl], e + ld hl, $0020 + add hl, bc + ld [hl], d + ld hl, $0003 + add hl, bc + set 1, [hl] + ret + +Func_3c926: ; 0x3c926 + ld hl, $0003 + add hl, bc + set 4, [hl] + ld hl, $0027 + add hl, bc + call Func_3ca10 + ld [hld], a + call Func_3ca10 + ld [hl], a + ret + +Func_3c939: ; 0x3c939 + ld hl, $0003 + add hl, bc + set 2, [hl] + call Func_3ca10 + rrca + rrca + ld hl, $001a + add hl, bc + ld [hl], a + and $c0 + ld hl, $000d + add hl, bc + ld [hl], a + ret + +Func_3c951: ; 0x3c951 + ld hl, $0002 + add hl, bc + bit 3, [hl] + jr z, .asm_3c95c + res 3, [hl] + ret + +.asm_3c95c + set 3, [hl] + ret + +Func_3c95f: ; 0x3c95f + ld hl, $0002 + add hl, bc + bit 4, [hl] + jr z, .asm_3c96a + res 4, [hl] + ret + +.asm_3c96a + set 4, [hl] + call Func_3ca10 + ld [wdea1], a + ret + +Func_3c973: ; 0x3c973 + call Func_3ca10 + ld hl, $0028 + add hl, bc + ld [hl], a + ld a, [wde97] + and $3 + cp $3 + ret z + call Func_3c9a1 + ret + +Func_3c987: ; 0x3c987 + call Func_3ca10 + ld [wde9a], a + ld hl, $000b + add hl, bc + set 3, [hl] + ret + +Func_3c994: ; 0x3c994 + call Func_3ca10 + rrca + rrca + and $c0 + ld hl, $000d + add hl, bc + ld [hl], a + ret + +Func_3c9a1: ; 0x3c9a1 + call Func_3ca10 + ld hl, $000e + add hl, bc + ld [hl], a + ret + +Func_3c9aa: ; 0x3c9aa + call Func_3ca10 + ld d, a + call Func_3ca10 + ld e, a + call Func_3ca95 + ret + +Func_3c9b6: ; 0x3c9b6 + ld hl, $0012 + add hl, bc + ld a, [wde96] + and $7 + ld [hl], a + ret + +Func_3c9c1: ; 0x3c9c1 + call Func_3ca10 + ld hl, $0013 + add hl, bc + ld [hl], a + ret + +Func_3c9ca: ; 0x3c9ca + ld a, [wde97] + call Func_3caf4 + call Func_3ca10 + ld hl, $0019 + add hl, bc + and [hl] + ld [hl], a + ret + +Func_3c9da: ; 0x3c9da + call Func_3ca10 + ld a, [wdea2] + and a + ret nz + ld a, [wde96] + ld [wde98], a + ret + +Func_3c9e9: ; 0x3c9e9 + call Func_3ca10 + ld e, a + cp $80 + jr nc, .asm_3c9f5 + ld d, $0 + jr .asm_3c9f7 + +.asm_3c9f5 + ld d, $ff +.asm_3c9f7 + ld hl, $0017 + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + add hl, de + ld e, l + ld d, h + call Func_3ca95 + ret + +Func_3ca05: ; 0x3ca05 + ld a, $1 + ld [wdead], a + ret + +Func_3ca0b: ; 0x3ca0b + xor a + ld [wdead], a + ret + +Func_3ca10: ; 0x3ca10 + push hl + push de + ld hl, $0005 + add hl, bc + ld e, [hl] + inc hl + ld d, [hl] + ld a, [de] + ld [wde96], a + inc de + ld hl, $0005 + add hl, bc + ld [hl], e + inc hl + ld [hl], d + pop de + pop hl + ld a, [wde96] + ret + +Func_3ca2b: ; 0x3ca2b + ld hl, $0013 + add hl, bc + ld a, [hl] + swap a + and $f + add d + push af + ld hl, $0013 + add hl, bc + ld a, [hl] + and $f + ld l, a + ld d, $0 + ld h, d + add hl, de + add hl, hl + ld de, $4b20 ; todo + add hl, de + ld e, [hl] + inc hl + ld d, [hl] + pop af +.asm_3ca4b + cp $7 + jr nc, .asm_3ca56 + sra d + rr e + inc a + jr .asm_3ca4b + +.asm_3ca56 + ld a, d + and $7 + ld d, a + ret + +Func_3ca5b: ; 0x3ca5b + inc a + ld e, a + ld d, $0 + ld hl, $0028 + add hl, bc + ld a, [hl] + ld l, $0 + call Func_3ca86 + ld a, l + ld hl, $0017 + add hl, bc + ld e, [hl] + inc hl + ld d, [hl] + ld hl, $0015 + add hl, bc + ld l, [hl] + call Func_3ca86 + ld e, l + ld d, h + ld hl, $0015 + add hl, bc + ld [hl], e + ld hl, $0014 + add hl, bc + ld [hl], d + ret + +Func_3ca86: ; 0x3ca86 + ld h, $0 +.asm_3ca88 + srl a + jr nc, .asm_3ca8d + add hl, de +.asm_3ca8d + sla e + rl d + and a + jr nz, .asm_3ca88 + ret + +Func_3ca95: ; 0x3ca95 + push bc + ld a, [wde97] + cp $4 + jr nc, .asm_3cab7 + ld bc, wdd01 + call Func_3cad1 + ld bc, wdd33 + call Func_3cad1 + ld bc, wdd65 + call Func_3cad1 + ld bc, wdd97 + call Func_3cad1 + jr .asm_3cacf + +.asm_3cab7 + ld bc, wddc9 + call Func_3cad1 + ld bc, wddfb + call Func_3cad1 + ld bc, wde2d + call Func_3cad1 + ld bc, wde5f + call Func_3cad1 +.asm_3cacf + pop bc + ret + +Func_3cad1: ; 0x3cad1 + ld hl, $0017 + add hl, bc + ld [hl], e + inc hl + ld [hl], d + xor a + ld hl, $0015 + add hl, bc + ld [hl], a + ret + +Func_3cadf: ; 0x3cadf + call Func_3cb06 + ld a, [wdeae] + jr .asm_3caea + + ld a, [wde97] +.asm_3caea + call Func_3caf4 + ld hl, $0002 + add hl, bc + set 0, [hl] + ret + +Func_3caf4: ; 0x3caf4 + push de + and $3 + ld e, a + ld d, $0 + ld hl, Data_3cc8e + add hl, de + ld a, [hl] + ld hl, $0019 + add hl, bc + ld [hl], a + pop de + ret + +Func_3cb06: ; 0x3cb06 + ld a, [wdeae] + and $3 + cp $0 + ret nz + xor a + ld [rNR10], a + ld [wde9a], a + ret + +Func_3cb15: ; 0x3cb15 + ld a, $1 + ld [wdd00], a + ret + +Func_3cb1b: ; 0x3cb1b + xor a + ld [wdd00], a + ret + + dr $3cb20, $3cb52 + +WavePatterns_BankF: +WavePattern0_BankF: ; 0x3cb52 + db $02, $46, $8A, $CE, $FF, $FE, $ED, $DC, $CB, $A9, $87, $65, $44, $33, $22, $11 +WavePattern1_BankF: ; 0x3cb62 + db $02, $46, $8A, $CE, $EF, $FF, $FE, $EE, $DD, $CB, $A9, $87, $65, $43, $22, $11 +WavePattern2_BankF: ; 0x3cb72 + db $01, $23, $43, $21, $FE, $CA, $8A, $CE, $01, $23, $43, $21, $FE, $CA, $8A, $CE +WavePattern3_BankF: ; 0x3cb82 + db $00, $11, $22, $33, $44, $33, $22, $11, $FF, $EE, $CC, $AA, $88, $AA, $CC, $EE +WavePattern4_BankF: ; 0x3cb92 + db $00, $11, $22, $33, $44, $33, $22, $11, $FF, $EE, $CC, $AA, $88, $AA, $CC, $EE + + dr $3cba2, $3cc8e + +Data_3cc8e: ; 0x3cc8e + db $11, $22, $44, $88 + +WRAMPointerTable_3cc92: ; 0x3cc92 + dw $DD01 + dw $DD33 + dw $DD65 + dw $DD97 + + dr $3cc9a, $3cca2 + +SongHeaderPointers0F: ; 0x3cca2 + dw Music_Nothing0F + dw Music_BlueField + dw Music_CatchEmRed + dw Music_HurryUpRed + dw Music_Pokedex + dw Music_GastlyInTheGraveyard + dw Music_HaunterInTheGraveyard + dw Music_GengarInTheGraveyard +; 0x3ccb2 + +INCLUDE "audio/music/nothing0f.asm" +INCLUDE "audio/music/bluefield.asm" +INCLUDE "audio/music/catchemred.asm" +INCLUDE "audio/music/pokedex.asm" +INCLUDE "audio/music/hurryupred.asm" +INCLUDE "audio/music/gastlyinthegraveyard.asm" +INCLUDE "audio/music/haunterinthegraveyard.asm" +INCLUDE "audio/music/gengarinthegraveyard.asm" + +PointerTable_3e3ce: ; 0x3e3ce + dw $646A + dw $6480 + dw $649A + dw $64BA + dw $64D0 + dw $64E0 + dw $64F0 + dw $6500 + dw $651A + dw $652E + dw $6544 + dw $6554 + dw $657C + dw $6589 + dw $659F + dw $65B5 + dw $65C5 + dw $65E2 + dw $65F4 + dw $6606 + dw $6618 + dw $662A + dw $663C + dw $664E + dw $6660 + dw $6672 + dw $6684 + dw $6696 + dw $66A8 + dw $66BA + dw $66CC + dw $66DE + dw $66F0 + dw $6702 + dw $671A + dw $675D + dw $6810 + dw $68AE + dw $696D + dw $6A25 + dw $6A68 + dw $6A82 + dw $6B17 + dw $6BF9 + dw $6C17 + dw $6C31 + dw $6C4B + dw $6C7D + dw $6C8F + dw $6CA7 + dw $6CB7 + dw $6CD1 + dw $6CE9 + dw $6CFF + dw $6D15 + dw $6D31 + dw $6D4D + dw $6D65 + dw $6D78 + dw $6D98 + dw $6DB0 + dw $6DC0 + dw $6DD0 + dw $6DE3 + dw $6DF3 + dw $6E1C + dw $6E32 + dw $6E48 + dw $6E5E + dw $6E78 + dw $6E92 + dw $6EAA + dw $6EC4 + dw $6ED4 + dw $6EEA + dw $6F00 + dw $6F16 + dw $6F27 + + dr $3e46a, $3ef63 + +CryBasePointers: ; 0x3ef63 + dw Cry_00_Header_BankF + dw Cry_01_Header_BankF + dw Cry_02_Header_BankF + dw Cry_03_Header_BankF + dw Cry_04_Header_BankF + dw Cry_05_Header_BankF + dw Cry_06_Header_BankF + dw Cry_07_Header_BankF + dw Cry_08_Header_BankF + dw Cry_09_Header_BankF + dw Cry_0A_Header_BankF + dw Cry_0B_Header_BankF + dw Cry_0C_Header_BankF + dw Cry_0D_Header_BankF + dw Cry_0E_Header_BankF + dw Cry_0F_Header_BankF + dw Cry_10_Header_BankF + dw Cry_11_Header_BankF + dw Cry_12_Header_BankF + dw Cry_13_Header_BankF + dw Cry_14_Header_BankF + dw Cry_15_Header_BankF + dw Cry_16_Header_BankF + dw Cry_17_Header_BankF + dw Cry_18_Header_BankF + dw Cry_19_Header_BankF + dw Cry_1A_Header_BankF + dw Cry_1B_Header_BankF + dw Cry_1C_Header_BankF + dw Cry_1D_Header_BankF + dw Cry_1E_Header_BankF + dw Cry_1F_Header_BankF + dw Cry_20_Header_BankF + dw Cry_21_Header_BankF + dw Cry_22_Header_BankF + dw Cry_23_Header_BankF + dw Cry_24_Header_BankF + dw Cry_25_Header_BankF + +CryData: ; 0x3efaf +; Each entry is in the following format: +; [base cry id], [pitch], [length + dw $000F, $0080, $0081 ; BULBASAUR + dw $000F, $0020, $0100 ; IVYSAUR + dw $000F, $0000, $0140 ; VENUSAUR + dw $0004, $0060, $00C0 ; CHARMANDER + dw $0004, $0020, $00C0 ; CHARMELEON + dw $0004, $0000, $0100 ; CHARIZARD + dw $001D, $0060, $00C0 ; SQUIRTLE + dw $001D, $0020, $00C0 ; WARTORTLE + dw $0013, $0000, $0100 ; BLASTOISE + dw $0016, $0080, $00A0 ; CATERPIE + dw $001C, $00CC, $0081 ; METAPOD + dw $0016, $0077, $00C0 ; BUTTERFREE + dw $0015, $00EE, $0081 ; WEEDLE + dw $0013, $00FF, $0081 ; KAKUNA + dw $0013, $0060, $0100 ; BEEDRILL + dw $000E, $00DF, $0084 ; PIDGEY + dw $0014, $0028, $0140 ; PIDGEOTTO + dw $0014, $0011, $017F ; PIDGEOT + dw $0022, $0000, $0100 ; RATTATA + dw $0022, $0020, $017F ; RATICATE + dw $0010, $0000, $0100 ; SPEAROW + dw $0018, $0040, $0120 ; FEAROW + dw $0017, $0012, $00C0 ; EKANS + dw $0017, $00E0, $0090 ; ARBOK + dw $000F, $00EE, $0081 ; PIKACHU + dw $0009, $00EE, $0088 ; RAICHU + dw $0000, $0020, $00C0 ; SANDSHREW + dw $0000, $00FF, $017F ; SANDSLASH + dw $0001, $0000, $0100 ; NIDORAN_F + dw $0001, $002C, $0160 ; NIDORINA + dw $000A, $0000, $0100 ; NIDOQUEEN + dw $0000, $0000, $0100 ; NIDORAN_M + dw $0000, $002C, $0140 ; NIDORINO + dw $0009, $0000, $0100 ; NIDOKING + dw $0019, $00CC, $0081 ; CLEFAIRY + dw $0019, $00AA, $00A0 ; CLEFABLE + dw $0024, $004F, $0090 ; VULPIX + dw $0024, $0088, $00E0 ; NINETALES + dw $000E, $00FF, $00B5 ; JIGGLYPUFF + dw $000E, $0068, $00E0 ; WIGGLYTUFF + dw $001D, $00E0, $0100 ; ZUBAT + dw $001D, $00FA, $0100 ; GOLBAT + dw $0008, $00DD, $0081 ; ODDISH + dw $0008, $00AA, $00C0 ; GLOOM + dw $0023, $0022, $017F ; VILEPLUME + dw $001E, $0020, $0160 ; PARAS + dw $001E, $0042, $017F ; PARASECT + dw $001A, $0044, $00C0 ; VENONAT + dw $001A, $0029, $0100 ; VENOMOTH + dw $000B, $00AA, $0081 ; DIGLETT + dw $000B, $002A, $0090 ; DUGTRIO + dw $0019, $0077, $0090 ; MEOWTH + dw $0019, $0099, $017F ; PERSIAN + dw $0021, $0020, $00E0 ; PSYDUCK + dw $0021, $00FF, $00C0 ; GOLDUCK + dw $000A, $00DD, $00E0 ; MANKEY + dw $000A, $00AF, $00C0 ; PRIMEAPE + dw $001F, $0020, $00C0 ; GROWLITHE + dw $0015, $0000, $0100 ; ARCANINE + dw $000E, $00FF, $017F ; POLIWAG + dw $000E, $0077, $00E0 ; POLIWHIRL + dw $000E, $0000, $017F ; POLIWRATH + dw $001C, $00C0, $0081 ; ABRA + dw $001C, $00A8, $0140 ; KADABRA + dw $001C, $0098, $017F ; ALAKAZAM + dw $001F, $00EE, $0081 ; MACHOP + dw $001F, $0048, $00E0 ; MACHOKE + dw $001F, $0008, $0140 ; MACHAMP + dw $0021, $0055, $0081 ; BELLSPROUT + dw $0025, $0044, $00A0 ; WEEPINBELL + dw $0025, $0066, $014C ; VICTREEBEL + dw $001A, $0000, $0100 ; TENTACOOL + dw $001A, $00EE, $017F ; TENTACRUEL + dw $0024, $00F0, $0090 ; GEODUDE + dw $0024, $0000, $0100 ; GRAVELER + dw $0012, $00E0, $00C0 ; GOLEM + dw $0025, $0000, $0100 ; PONYTA + dw $0025, $0020, $0140 ; RAPIDASH + dw $0002, $0000, $0100 ; SLOWPOKE + dw $001F, $0000, $0100 ; SLOWBRO + dw $001C, $0080, $00E0 ; MAGNEMITE + dw $001C, $0020, $0140 ; MAGNETON + dw $0010, $00DD, $0081 ; FARFETCH_D + dw $000B, $00BB, $0081 ; DODUO + dw $000B, $0099, $00A0 ; DODRIO + dw $000C, $0088, $0140 ; SEEL + dw $000C, $0023, $017F ; DEWGONG + dw $0005, $0000, $0100 ; GRIMER + dw $0007, $00EF, $017F ; MUK + dw $0018, $0000, $0100 ; SHELLDER + dw $0018, $006F, $0160 ; CLOYSTER + dw $001C, $0000, $0100 ; GASTLY + dw $001C, $0030, $00C0 ; HAUNTER + dw $0007, $0000, $017F ; GENGAR + dw $0017, $00FF, $0140 ; ONIX + dw $000D, $0088, $00A0 ; DROWZEE + dw $000D, $00EE, $00C0 ; HYPNO + dw $0020, $0020, $0160 ; KRABBY + dw $0020, $00EE, $0160 ; KINGLER + dw $0006, $00ED, $0100 ; VOLTORB + dw $0006, $00A8, $0110 ; ELECTRODE + dw $000B, $0000, $0100 ; EXEGGCUTE + dw $000D, $0000, $0100 ; EXEGGUTOR + dw $0019, $0000, $0100 ; CUBONE + dw $0008, $004F, $00E0 ; MAROWAK + dw $0012, $0080, $0140 ; HITMONLEE + dw $000C, $00EE, $0140 ; HITMONCHAN + dw $000C, $0000, $0100 ; LICKITUNG + dw $0012, $00E6, $015D ; KOFFING + dw $0012, $00FF, $017F ; WEEZING + dw $0004, $0000, $0100 ; RHYHORN + dw $0011, $0000, $0100 ; RHYDON + dw $0014, $000A, $0140 ; CHANSEY + dw $0012, $0000, $0100 ; TANGELA + dw $0003, $0000, $0100 ; KANGASKHAN + dw $0019, $0099, $0090 ; HORSEA + dw $0019, $003C, $0081 ; SEADRA + dw $0016, $0080, $00C0 ; GOLDEEN + dw $0016, $0010, $017F ; SEAKING + dw $001E, $0002, $00A0 ; STARYU + dw $001E, $0000, $0100 ; STARMIE + dw $0020, $0008, $00C0 ; MR_MIME + dw $0016, $0000, $0100 ; SCYTHER + dw $000D, $00FF, $017F ; JYNX + dw $0006, $008F, $017F ; ELECTABUZZ + dw $0004, $00FF, $00B0 ; MAGMAR + dw $0014, $0000, $0100 ; PINSIR + dw $001D, $0011, $00C0 ; TAUROS + dw $0017, $0080, $0080 ; MAGIKARP + dw $0017, $0000, $0100 ; GYARADOS + dw $001B, $0000, $0100 ; LAPRAS + dw $000E, $00FF, $017F ; DITTO + dw $001A, $0088, $00E0 ; EEVEE + dw $001A, $00AA, $017F ; VAPOREON + dw $001A, $003D, $0100 ; JOLTEON + dw $001A, $0010, $00A0 ; FLAREON + dw $0025, $00AA, $017F ; PORYGON + dw $001F, $00F0, $0081 ; OMANYTE + dw $001F, $00FF, $00C0 ; OMASTAR + dw $0016, $00BB, $00C0 ; KABUTO + dw $0018, $00EE, $0081 ; KABUTOPS + dw $0023, $0020, $0170 ; AERODACTYL + dw $0005, $0055, $0081 ; SNORLAX + dw $0009, $0080, $00C0 ; ARTICUNO + dw $0018, $00FF, $0100 ; ZAPDOS + dw $0009, $00F8, $00C0 ; MOLTRES + dw $000F, $0060, $00C0 ; DRATINI + dw $000F, $0040, $0100 ; DRAGONAIR + dw $000F, $003C, $0140 ; DRAGONITE + dw $001E, $0099, $017F ; MEWTWO + dw $001E, $00EE, $017F ; MEW + +Cry_00_Header_BankF: ; 0x3f339 + channelcount 3 + channel 4, Data_3f733 + channel 5, Data_3f742 + channel 7, Data_3f751 + +Cry_01_Header_BankF: ; 0x3f342 + channelcount 3 + channel 4, Data_3f943 + channel 5, Data_3f956 + channel 7, Data_3f969 + +Cry_02_Header_BankF: ; 0x3f34b + channelcount 3 + channel 4, Data_3f8b8 + channel 5, Data_3f8c7 + channel 7, Data_3f8d5 + +Cry_03_Header_BankF: ; 0x3f354 + channelcount 3 + channel 4, Data_3f652 + channel 5, Data_3f671 + channel 7, Data_3f690 + +Cry_04_Header_BankF: ; 0x3f35d + channelcount 3 + channel 4, Data_3fa01 + channel 5, Data_3fa20 + channel 7, Data_3fa3f + +Cry_05_Header_BankF: ; 0x3f366 + channelcount 3 + channel 4, Data_3f7e1 + channel 5, Data_3f7f4 + channel 7, Data_3f806 + +Cry_06_Header_BankF: ; 0x3f36f + channelcount 3 + channel 4, Data_3f78b + channel 5, Data_3f7a5 + channel 7, Data_3f7a6 + +Cry_07_Header_BankF: ; 0x3f378 + channelcount 3 + channel 4, Data_3f7b9 + channel 5, Data_3f7c8 + channel 7, Data_3f7d7 + +Cry_08_Header_BankF: ; 0x3f381 + channelcount 3 + channel 4, Data_3f9d1 + channel 5, Data_3f9e4 + channel 7, Data_3f9f7 + +Cry_09_Header_BankF: ; 0x3f38a + channelcount 3 + channel 4, Data_3f4db + channel 5, Data_3f4f8 + channel 7, Data_3f519 + +Cry_0A_Header_BankF: ; 0x3f393 + channelcount 3 + channel 4, Data_3f976 + channel 5, Data_3f995 + channel 7, Data_3f9b8 + +Cry_0B_Header_BankF: ; 0x3f39c + channelcount 3 + channel 4, Data_3f807 + channel 5, Data_3f832 + channel 7, Data_3f851 + +Cry_0C_Header_BankF: ; 0x3f3a5 + channelcount 3 + channel 4, Data_3f86a + channel 5, Data_3f891 + channel 7, Data_3f8b7 + +Cry_0D_Header_BankF: ; 0x3f3ae + channelcount 3 + channel 4, Data_3f8d6 + channel 5, Data_3f8f5 + channel 7, Data_3f924 + +Cry_0E_Header_BankF: ; 0x3f + channelcount 3 + channel 4, Data_3f75b + channel 5, Data_3f76e + channel 7, Data_3f781 + +Cry_0F_Header_BankF: ; 0x3f + channelcount 3 + channel 4, Data_3f69d + channel 5, Data_3f6b8 + channel 7, Data_3f6d3 + +Cry_10_Header_BankF: ; 0x3f3b7 + channelcount 3 + channel 4, Data_3f6e3 + channel 5, Data_3f706 + channel 7, Data_3f729 + +Cry_11_Header_BankF: ; 0x3f3c0 + channelcount 3 + channel 4, Data_3f5bf + channel 5, Data_3f5de + channel 7, Data_3f601 + +Cry_12_Header_BankF: ; 0x3f3c9 + channelcount 3 + channel 4, Data_3fad7 + channel 5, Data_3faea + channel 7, Data_3fafd + +Cry_13_Header_BankF: ; 0x3f3d2 + channelcount 3 + channel 4, Data_3fb0a + channel 5, Data_3fb25 + channel 7, Data_3fb40 + +Cry_14_Header_BankF: ; 0x3f3db + channelcount 3 + channel 4, Data_3fb53 + channel 5, Data_3fb62 + channel 7, Data_3fb71 + +Cry_15_Header_BankF: ; 0x3f3e4 + channelcount 3 + channel 4, Data_3fbe1 + channel 5, Data_3fbfc + channel 7, Data_3fc17 + +Cry_16_Header_BankF: ; 0x3f3ed + channelcount 3 + channel 4, Data_3fa74 + channel 5, Data_3fa83 + channel 7, Data_3fa92 + +Cry_17_Header_BankF: ; 0x3f3f6 + channelcount 3 + channel 4, Data_3fc2a + channel 5, Data_3fc3d + channel 7, Data_3fc50 + +Cry_18_Header_BankF: ; 0x3f3ff + channelcount 3 + channel 4, Data_3fd3a + channel 5, Data_3fd5d + channel 7, Data_3fd80 + +Cry_19_Header_BankF: ; 0x3f408 + channelcount 3 + channel 4, Data_3fa52 + channel 5, Data_3fa61 + channel 7, Data_3fa73 + +Cry_1A_Header_BankF: ; 0x3f411 + channelcount 3 + channel 4, Data_3fcab + channel 5, Data_3fcc6 + channel 7, Data_3fce1 + +Cry_1B_Header_BankF: ; 0x3f41a + channelcount 3 + channel 4, Data_3fa9c + channel 5, Data_3fab3 + channel 7, Data_3faca + +Cry_1C_Header_BankF: ; 0x3f423 + channelcount 3 + channel 4, Data_3fc5d + channel 5, Data_3fc80 + channel 7, Data_3fc9b + +Cry_1D_Header_BankF: ; 0x3f42c + channelcount 3 + channel 4, Data_3fcf4 + channel 5, Data_3fd0f + channel 7, Data_3fd2a + +Cry_1E_Header_BankF: ; 0x3f435 + channelcount 3 + channel 4, Data_3fb7b + channel 5, Data_3fb9e + channel 7, Data_3fbc5 + +Cry_1F_Header_BankF: ; 0x3f43e + channelcount 3 + channel 4, Data_3fd93 + channel 5, Data_3fda6 + channel 7, Data_3fdb9 + +Cry_20_Header_BankF: ; 0x3f447 + channelcount 3 + channel 4, Data_3fdc6 + channel 5, Data_3fdd9 + channel 7, Data_3fdec + +Cry_21_Header_BankF: ; 0x3f450 + channelcount 3 + channel 4, Data_3fdf9 + channel 5, Data_3fe1c + channel 7, Data_3fe3e + +Cry_22_Header_BankF: ; 0x3f459 + channelcount 3 + channel 4, Data_3fe3f + channel 5, Data_3fe52 + channel 7, Data_3fe65 + +Cry_23_Header_BankF: ; 0x3f462 + channelcount 3 + channel 4, Data_3f532 + channel 5, Data_3f549 + channel 7, Data_3f55c + +Cry_24_Header_BankF: ; 0x3f46b + channelcount 3 + channel 4, Data_3f569 + channel 5, Data_3f58c + channel 7, Data_3f5af + +Cry_25_Header_BankF: ; 0x3f474 + channelcount 3 + channel 4, Data_3f617 + channel 5, Data_3f62e + channel 7, Data_3f645 + + dr $3f48f, $3f4db + +Data_3f4db: + dr $3f4db, $3f4f8 + +Data_3f4f8: + dr $3f4f8, $3f519 + +Data_3f519: + dr $3f519, $3f532 + +Data_3f532: + dr $3f532, $3f549 + +Data_3f549: + dr $3f549, $3f55c + +Data_3f55c: + dr $3f55c, $3f569 + +Data_3f569: + dr $3f569, $3f58c + +Data_3f58c: + dr $3f58c, $3f5af + +Data_3f5af: + dr $3f5af, $3f5bf + +Data_3f5bf: + dr $3f5bf, $3f5de + +Data_3f5de: + dr $3f5de, $3f601 + +Data_3f601: + dr $3f601, $3f617 + +Data_3f617: + dr $3f617, $3f62e + +Data_3f62e: + dr $3f62e, $3f645 + +Data_3f645: + dr $3f645, $3f652 + +Data_3f652: + dr $3f652, $3f671 + +Data_3f671: + dr $3f671, $3f690 + +Data_3f690: + dr $3f690, $3f69d + +Data_3f69d: + dr $3f69d, $3f6b8 + +Data_3f6b8: + dr $3f6b8, $3f6d3 + +Data_3f6d3: + dr $3f6d3, $3f6e3 + +Data_3f6e3: + dr $3f6e3, $3f706 + +Data_3f706: + dr $3f706, $3f729 + +Data_3f729: + dr $3f729, $3f733 + +Data_3f733: + dr $3f733, $3f742 + +Data_3f742: + dr $3f742, $3f751 + +Data_3f751: + dr $3f751, $3f75b + +Data_3f75b: + dr $3f75b, $3f76e + +Data_3f76e: + dr $3f76e, $3f781 + +Data_3f781: + dr $3f781, $3f78b + +Data_3f78b: + dr $3f78b, $3f7a5 + +Data_3f7a5: + dr $3f7a5, $3f7a6 + +Data_3f7a6: + dr $3f7a6, $3f7b9 + +Data_3f7b9: + dr $3f7b9, $3f7c8 + +Data_3f7c8: + dr $3f7c8, $3f7d7 + +Data_3f7d7: + dr $3f7d7, $3f7e1 + +Data_3f7e1: + dr $3f7e1, $3f7f4 + +Data_3f7f4: + dr $3f7f4, $3f806 + +Data_3f806: + dr $3f806, $3f807 + +Data_3f807: + dr $3f807, $3f832 + +Data_3f832: + dr $3f832, $3f851 + +Data_3f851: + dr $3f851, $3f86a + +Data_3f86a: + dr $3f86a, $3f891 + +Data_3f891: + dr $3f891, $3f8b7 + +Data_3f8b7: + dr $3f8b7, $3f8b8 + +Data_3f8b8: + dr $3f8b8, $3f8c7 + +Data_3f8c7: + dr $3f8c7, $3f8d5 + +Data_3f8d5: + dr $3f8d5, $3f8d6 + +Data_3f8d6: + dr $3f8d6, $3f8f5 + +Data_3f8f5: + dr $3f8f5, $3f924 + +Data_3f924: + dr $3f924, $3f943 + +Data_3f943: + dr $3f943, $3f956 + +Data_3f956: + dr $3f956, $3f969 + +Data_3f969: + dr $3f969, $3f976 + +Data_3f976: + dr $3f976, $3f995 + +Data_3f995: + dr $3f995, $3f9b8 + +Data_3f9b8: + dr $3f9b8, $3f9d1 + +Data_3f9d1: + dr $3f9d1, $3f9e4 + +Data_3f9e4: + dr $3f9e4, $3f9f7 + +Data_3f9f7: + dr $3f9f7, $3fa01 + +Data_3fa01: + dr $3fa01, $3fa20 + +Data_3fa20: + dr $3fa20, $3fa3f + +Data_3fa3f: + dr $3fa3f, $3fa52 + +Data_3fa52: + dr $3fa52, $3fa61 + +Data_3fa61: + dr $3fa61, $3fa73 + +Data_3fa73: + dr $3fa73, $3fa74 + +Data_3fa74: + dr $3fa74, $3fa83 + +Data_3fa83: + dr $3fa83, $3fa92 + +Data_3fa92: + dr $3fa92, $3fa9c + +Data_3fa9c: + dr $3fa9c, $3fab3 + +Data_3fab3: + dr $3fab3, $3faca + +Data_3faca: + dr $3faca, $3fad7 + +Data_3fad7: + dr $3fad7, $3faea + +Data_3faea: + dr $3faea, $3fafd + +Data_3fafd: + dr $3fafd, $3fb0a + +Data_3fb0a: + dr $3fb0a, $3fb25 + +Data_3fb25: + dr $3fb25, $3fb40 + +Data_3fb40: + dr $3fb40, $3fb53 + +Data_3fb53: + dr $3fb53, $3fb62 + +Data_3fb62: + dr $3fb62, $3fb71 + +Data_3fb71: + dr $3fb71, $3fb7b + +Data_3fb7b: + dr $3fb7b, $3fb9e + +Data_3fb9e: + dr $3fb9e, $3fbc5 + +Data_3fbc5: + dr $3fbc5, $3fbe1 + +Data_3fbe1: + dr $3fbe1, $3fbfc + +Data_3fbfc: + dr $3fbfc, $3fc17 + +Data_3fc17: + dr $3fc17, $3fc2a + +Data_3fc2a: + dr $3fc2a, $3fc3d + +Data_3fc3d: + dr $3fc3d, $3fc50 + +Data_3fc50: + dr $3fc50, $3fc5d + +Data_3fc5d: + dr $3fc5d, $3fc80 + +Data_3fc80: + dr $3fc80, $3fc9b + +Data_3fc9b: + dr $3fc9b, $3fcab + +Data_3fcab: + dr $3fcab, $3fcc6 + +Data_3fcc6: + dr $3fcc6, $3fce1 + +Data_3fce1: + dr $3fce1, $3fcf4 + +Data_3fcf4: + dr $3fcf4, $3fd0f + +Data_3fd0f: + dr $3fd0f, $3fd2a + +Data_3fd2a: + dr $3fd2a, $3fd3a + +Data_3fd3a: + dr $3fd3a, $3fd5d + +Data_3fd5d: + dr $3fd5d, $3fd80 + +Data_3fd80: + dr $3fd80, $3fd93 + +Data_3fd93: + dr $3fd93, $3fda6 + +Data_3fda6: + dr $3fda6, $3fdb9 + +Data_3fdb9: + dr $3fdb9, $3fdc6 + +Data_3fdc6: + dr $3fdc6, $3fdd9 + +Data_3fdd9: + dr $3fdd9, $3fdec + +Data_3fdec: + dr $3fdec, $3fdf9 + +Data_3fdf9: + dr $3fdf9, $3fe1c + +Data_3fe1c: + dr $3fe1c, $3fe3e + +Data_3fe3e: + dr $3fe3e, $3fe3f + +Data_3fe3f: + dr $3fe3f, $3fe52 + +Data_3fe52: + dr $3fe52, $3fe65 + +Data_3fe65: + dr $3fe65, $3fe72 diff --git a/audio/engine_10.asm b/audio/engine_10.asm new file mode 100755 index 0000000..ad64e36 --- /dev/null +++ b/audio/engine_10.asm @@ -0,0 +1,19 @@ + dr $40000, $40ca2 + +SongHeaderPointers10: ; 0x40ca2 + dw Music_Nothing10 + dw Music_RedField + dw Music_CatchEmBlue + dw Music_HurryUpBlue + dw Music_HiScore + dw Music_GameOver +; 0x40cae + +INCLUDE "audio/music/nothing10.asm" +INCLUDE "audio/music/redfield.asm" +INCLUDE "audio/music/catchemblue.asm" +INCLUDE "audio/music/hiscore.asm" +INCLUDE "audio/music/gameover.asm" +INCLUDE "audio/music/hurryupblue.asm" + + dr $4255b, $44000 diff --git a/audio/engine_11.asm b/audio/engine_11.asm new file mode 100755 index 0000000..4c77c26 --- /dev/null +++ b/audio/engine_11.asm @@ -0,0 +1,17 @@ + dr $44000, $44ca2 + +SongHeaderPointers11: ; 0x44ca2 + dw Music_Nothing11 + dw Music_WhackTheDiglett + dw Music_WhackTheDugtrio + dw Music_SeelStage + dw Music_Title +; 0x44cac + +INCLUDE "audio/music/nothing11.asm" +INCLUDE "audio/music/whackthediglett.asm" +INCLUDE "audio/music/whackthedugtrio.asm" +INCLUDE "audio/music/seelstage.asm" +INCLUDE "audio/music/title.asm" + + dr $462d3, $48000 diff --git a/audio/engine_12.asm b/audio/engine_12.asm new file mode 100755 index 0000000..2f17123 --- /dev/null +++ b/audio/engine_12.asm @@ -0,0 +1,17 @@ + dr $48000, $48ca2 + +SongHeaderPointers12: ; 0x48ca2 + dw Music_Nothing12 + dw Music_MewtwoStage + dw Music_Options + dw Music_FieldSelect + dw Music_MeowthStage +; 0x48cac + +INCLUDE "audio/music/nothing12.asm" +INCLUDE "audio/music/mewtwostage.asm" +INCLUDE "audio/music/options.asm" +INCLUDE "audio/music/fieldselect.asm" +INCLUDE "audio/music/meowthstage.asm" + + dr $49c04, $4c000 diff --git a/audio/engine_13.asm b/audio/engine_13.asm new file mode 100755 index 0000000..2f6668a --- /dev/null +++ b/audio/engine_13.asm @@ -0,0 +1,13 @@ + dr $4c000, $4cca2 + +SongHeaderPointers13: ; 0x4cca2 + dw Music_Nothing13 + dw Music_EndCredits + dw Music_NameEntry +; 0x4cca8 + +INCLUDE "audio/music/nothing13.asm" +INCLUDE "audio/music/endcredits.asm" +INCLUDE "audio/music/nameentry.asm" + + dr $4def4, $50000 diff --git a/audio/pikapcm.asm b/audio/pikapcm.asm new file mode 100755 index 0000000..6b4bbfe --- /dev/null +++ b/audio/pikapcm.asm @@ -0,0 +1,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 |