Придумал вариант без всех этих наворотов:

Добавляем в файл utils.gs следующую функцию:
Код:
/////////////////////////////////////////////////////////////////////////////////
//
//			Stop a voices, played specified sample
//
/////////////////////////////////////////////////////////////////////////////////
func SampleStopByID(sid)
{
	for (i=SOUND_VOICES-1; i>=0; i--)		// Перебираем все голоса от 0 до SOUND_VOICES (по умолчанию 16)
	{
		if (SamplePlaying(i) == sid)		// Если в данном голосе звучит семпл с ID = sid, 
			SampleStop(i);			// то останавливаем его звучание
	}
}
Система проигрывания семплов на движке DizzyAge устроена следующим образом. Есть 16 голосов, по каждому из которых может играть свой семпл. Т.е. одновременно можно включить на проигрывание не более 16 перекрывающихся семплов. Если вы включили 17-й, а те 16 все еще играют, то будет ошибка.

Вышеприведенная функция работает очень просто. Перебираются все 16 голосов, и ищется, на каком из них играет семпл с заданным ID, и, соответствующие голоса (а их может быть несколько) выключаются.

---------- Post added at 15:08 ---------- Previous post was at 15:03 ----------

Цитата Сообщение от yuriy Посмотреть сообщение
Titus, а если в def.gs перенести, то конструкция будет правильной? (ну или приведи пример)
Нет, неправильной, т.к. все файлы с расширением .gs равнозначны.

---------- Post added at 15:15 ---------- Previous post was at 15:08 ----------

Цитата Сообщение от yuriy Посмотреть сообщение
Ну и наверное последнее, это SampleVolume( percent ). Можно ли как-то эту команду привязать только к одному спецэффекту, а не ко всем происходящим в игре сразу?
Как я понимаю, нельзя)