}/* end_of_sound */ /* * z_sound_effect, load / play / stop / discard a sound effect. * * zargs[0] = number of bleep (1 or 2) or sample * zargs[1] = operation to perform (samples only) * zargs[2] = repeats and volume (play sample only) * zargs[3] = end-of-sound routine (play sample only, optional) * * Note: Volumes range from 1 to 8, volume 255 is the default volume. * Repeats are stored in the high byte, 255 is infinite loop. * */ internal static void z_sound_effect() { zword number = Process.zargs[0]; zword effect = Process.zargs[1]; zword volume = Process.zargs[2]; if (Process.zargc < 1) { number = 0; } if (Process.zargc < 2) { effect = EFFECT_PLAY; } if (Process.zargc < 3) { volume = 8; } if (number >= 3 || number == 0) { locked = true; if (main.story_id == Story.LURKING_HORROR && (number == 9 || number == 16)) { if (effect == EFFECT_PLAY) { next_sample = number; next_volume = volume; locked = false; if (!playing) { start_next_sample(); } } else { locked = false; } return; } playing = false; switch (effect) { case EFFECT_PREPARE: os_.prepare_sample(number); break; case EFFECT_PLAY: start_sample(number, FastMem.LO(volume), FastMem.HI(volume), (zword)((Process.zargc == 4) ? Process.zargs[3] : 0)); break; case EFFECT_STOP: os_.stop_sample(number); break; case EFFECT_FINISH_WITH: os_.finish_with_sample(number); break; } locked = false; } else { os_.beep(number); } }/* z_sound_effect */