mirror of
https://github.com/pret/pokered.git
synced 2024-10-23 06:58:24 +00:00
9878f01e29
While doing so I replaced the StopAllMusic macro with a SFX_STOP_ALL_MUSIC constant and applied it throughout the code.
186 lines
4.1 KiB
NASM
Executable file
186 lines
4.1 KiB
NASM
Executable file
audio_header: MACRO
|
|
db (_NARG - 2) << 6 | \2
|
|
dw \1_\2
|
|
IF _NARG > 2
|
|
db \3
|
|
dw \1_\3
|
|
ENDC
|
|
IF _NARG > 3
|
|
db \4
|
|
dw \1_\4
|
|
ENDC
|
|
IF _NARG > 4
|
|
db \5
|
|
dw \1_\5
|
|
ENDC
|
|
ENDM
|
|
|
|
; arguments: length [0, 7], pitch change [-7, 7]
|
|
; length: length of time between pitch shifts
|
|
; sometimes used with a value >7 in which case the MSB is ignored
|
|
; pitch change: positive value means increase in pitch, negative value means decrease in pitch
|
|
; small magnitude means quick change, large magnitude means slow change
|
|
; in signed magnitude representation, so a value of 8 is the same as (negative) 0
|
|
pitch_sweep: MACRO
|
|
db $10
|
|
IF \2 < 0
|
|
db (\1 << 4) | (%1000 | (\2 * -1))
|
|
ELSE
|
|
db (\1 << 4) | \2
|
|
ENDC
|
|
ENDM
|
|
|
|
; arguments: length [0, 15], volume [0, 15], fade [-7, 7], frequency
|
|
; fade: positive value means decrease in volume, negative value means increase in volume
|
|
; small magnitude means quick change, large magnitude means slow change
|
|
; in signed magnitude representation, so a value of 8 is the same as (negative) 0
|
|
square_note: MACRO
|
|
db $20 | \1
|
|
IF \3 < 0
|
|
db (\2 << 4) | (%1000 | (\3 * -1))
|
|
ELSE
|
|
db (\2 << 4) | \3
|
|
ENDC
|
|
dw \4
|
|
ENDM
|
|
|
|
; arguments: length [0, 15], volume [0, 15], fade [-7, 7], frequency
|
|
; fade: positive value means decrease in volume, negative value means increase in volume
|
|
; small magnitude means quick change, large magnitude means slow change
|
|
; in signed magnitude representation, so a value of 8 is the same as (negative) 0
|
|
noise_note: MACRO
|
|
db $20 | \1
|
|
IF \3 < 0
|
|
db (\2 << 4) | (%1000 | (\3 * -1))
|
|
ELSE
|
|
db (\2 << 4) | \3
|
|
ENDC
|
|
db \4
|
|
ENDM
|
|
|
|
; arguments: pitch, length [1, 16]
|
|
note: MACRO
|
|
db (\1 << 4) | (\2 - 1)
|
|
ENDM
|
|
|
|
; arguments: instrument [1, 19], length [1, 16]
|
|
drum_note: MACRO
|
|
db $B0 | (\2 - 1)
|
|
db \1
|
|
ENDM
|
|
|
|
; arguments: instrument, length [1, 16]
|
|
; like drum_note but one 1 byte instead of 2
|
|
; can only be used with instruments 1-10, excluding 2
|
|
; unused
|
|
drum_note_short: MACRO
|
|
db (\1 << 4) | (\2 - 1)
|
|
ENDM
|
|
|
|
; arguments: length [1, 16]
|
|
rest: MACRO
|
|
db $C0 | (\1 - 1)
|
|
ENDM
|
|
|
|
; arguments: speed [0, 15], volume [0, 15], fade [-7, 7]
|
|
; fade: positive value means decrease in volume, negative value means increase in volume
|
|
; small magnitude means quick change, large magnitude means slow change
|
|
; in signed magnitude representation, so a value of 8 is the same as (negative) 0
|
|
note_type: MACRO
|
|
db $D0 | \1
|
|
IF \3 < 0
|
|
db (\2 << 4) | (%1000 | (\3 * -1))
|
|
ELSE
|
|
db (\2 << 4) | \3
|
|
ENDC
|
|
ENDM
|
|
|
|
; arguments: speed [0, 15]
|
|
drum_speed: MACRO
|
|
db $D0 | \1
|
|
ENDM
|
|
|
|
; arguments: octave [1, 8]
|
|
octave: MACRO
|
|
db $E8 - \1
|
|
ENDM
|
|
|
|
; when enabled, effective frequency used is incremented by 1
|
|
toggle_perfect_pitch: MACRO
|
|
db $E8
|
|
ENDM
|
|
|
|
; arguments: delay [0, 255], depth [0, 15], rate [0, 15]
|
|
; delay: time delay until vibrato effect begins
|
|
; depth: amplitude of vibrato wave
|
|
; rate: frequency of vibrato wave
|
|
vibrato: MACRO
|
|
db $EA
|
|
db \1
|
|
db (\2 << 4) | \3
|
|
ENDM
|
|
|
|
; arguments: length [1, 256], octave [1, 8], pitch
|
|
pitch_slide: MACRO
|
|
db $EB
|
|
db \1 - 1
|
|
db ((8 - \2) << 4) | \3
|
|
ENDM
|
|
|
|
; arguments: duty cycle [0, 3] (12.5%, 25%, 50%, 75%)
|
|
duty_cycle: MACRO
|
|
db $EC
|
|
db \1
|
|
ENDM
|
|
|
|
; arguments: tempo [0, $ffff]
|
|
; used to calculate note delay counters
|
|
; so a smaller value means music plays faster
|
|
; ideally should be set to $100 or less to guarantee no overflow
|
|
; if larger than $100, large note speed or note length values might cause overflow
|
|
; stored in big endian
|
|
tempo: MACRO
|
|
db $ED
|
|
db \1 / $100
|
|
db \1 % $100
|
|
ENDM
|
|
|
|
; arguments: left output enable mask, right output enable mask
|
|
stereo_panning: MACRO
|
|
db $EE
|
|
db (\1 << 4) | \2
|
|
ENDM
|
|
|
|
; arguments: left master volume [0, 7], right master volume [0, 7]
|
|
volume: MACRO
|
|
db $F0
|
|
db (\1 << 4) | \2
|
|
ENDM
|
|
|
|
; when enabled, the sfx data is interpreted as music data
|
|
execute_music: MACRO
|
|
db $F8
|
|
ENDM
|
|
|
|
; arguments: duty cycle 1, duty cycle 2, duty cycle 3, duty cycle 4
|
|
duty_cycle_pattern: MACRO
|
|
db $FC
|
|
db \1 << 6 | \2 << 4 | \3 << 2 | \4
|
|
ENDM
|
|
|
|
; arguments: address
|
|
sound_call: MACRO
|
|
db $FD
|
|
dw \1
|
|
ENDM
|
|
|
|
; arguments: count, address
|
|
sound_loop: MACRO
|
|
db $FE
|
|
db \1
|
|
dw \2
|
|
ENDM
|
|
|
|
sound_ret: MACRO
|
|
db $FF
|
|
ENDM
|