コード例 #1
0
ファイル: sound.cs プロジェクト: ChrisJamesSadler/IL2CPU
        }/* 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 */