亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? sn_sonix.c

?? 魔法師傳奇源代碼
?? C
字號:
//**************************************************************************//**//** sn_sonix.c : Heretic 2 : Raven Software, Corp.//**//** $RCSfile: sn_sonix.c,v $//** $Revision: 1.17 $//** $Date: 95/10/05 18:25:44 $//** $Author: paul $//**//**************************************************************************// HEADER FILES ------------------------------------------------------------#include <string.h>#include "h2def.h"#include "soundst.h"// MACROS ------------------------------------------------------------------#define SS_MAX_SCRIPTS	64#define SS_TEMPBUFFER_SIZE	1024#define SS_SEQUENCE_NAME_LENGTH 32#define SS_SCRIPT_NAME "SNDSEQ"#define SS_STRING_PLAY			"play"#define SS_STRING_PLAYUNTILDONE "playuntildone"#define SS_STRING_PLAYTIME		"playtime"#define SS_STRING_PLAYREPEAT	"playrepeat"#define SS_STRING_DELAY			"delay"#define SS_STRING_DELAYRAND		"delayrand"#define SS_STRING_VOLUME		"volume"#define SS_STRING_END			"end"#define SS_STRING_STOPSOUND		"stopsound"// TYPES -------------------------------------------------------------------typedef enum{	SS_CMD_NONE,	SS_CMD_PLAY,	SS_CMD_WAITUNTILDONE, // used by PLAYUNTILDONE	SS_CMD_PLAYTIME,	SS_CMD_PLAYREPEAT,	SS_CMD_DELAY,	SS_CMD_DELAYRAND,	SS_CMD_VOLUME,	SS_CMD_STOPSOUND,	SS_CMD_END} sscmds_t;// EXTERNAL FUNCTION PROTOTYPES --------------------------------------------// PUBLIC FUNCTION PROTOTYPES ----------------------------------------------// PRIVATE FUNCTION PROTOTYPES ---------------------------------------------static void VerifySequencePtr(int *base, int *ptr);static int GetSoundOffset(char *name);// EXTERNAL DATA DECLARATIONS ----------------------------------------------extern sfxinfo_t S_sfx[];// PUBLIC DATA DEFINITIONS -------------------------------------------------// PRIVATE DATA DEFINITIONS ------------------------------------------------static struct{	char name[SS_SEQUENCE_NAME_LENGTH];	int scriptNum;	int stopSound;} SequenceTranslate[SEQ_NUMSEQ] ={	{ "Platform", 0, 0 },	{ "Platform", 0, 0 },   	// a 'heavy' platform is just a platform	{ "PlatformMetal", 0, 0 }, 		{ "Platform", 0, 0 },		// same with a 'creak' platform	{ "Silence", 0, 0 },	{ "Lava", 0, 0 },	{ "Water", 0, 0 },	{ "Ice", 0, 0 },	{ "Earth", 0, 0 },	{ "PlatformMetal2", 0, 0 },	{ "DoorNormal", 0, 0 },	{ "DoorHeavy", 0, 0 },	{ "DoorMetal", 0, 0 },	{ "DoorCreak", 0, 0 },	{ "Silence", 0, 0 },	{ "Lava", 0, 0 },	{ "Water", 0, 0},	{ "Ice", 0, 0 },	{ "Earth", 0, 0},	{ "DoorMetal2", 0, 0 },	{ "Wind", 0, 0 }};static int *SequenceData[SS_MAX_SCRIPTS];int ActiveSequences;seqnode_t *SequenceListHead;// CODE --------------------------------------------------------------------//==========================================================================//// VerifySequencePtr////   Verifies the integrity of the temporary ptr, and ensures that the ptr// 		isn't exceeding the size of the temporary buffer//==========================================================================static void VerifySequencePtr(int *base, int *ptr){	if(ptr-base > SS_TEMPBUFFER_SIZE)	{		I_Error("VerifySequencePtr:  tempPtr >= %d\n", SS_TEMPBUFFER_SIZE);	}}//==========================================================================//// GetSoundOffset////==========================================================================static int GetSoundOffset(char *name){	int i;		for(i = 0; i < NUMSFX; i++)	{		if(!strcasecmp(name, S_sfx[i].tagName))		{			return i;		}	}	SC_ScriptError("GetSoundOffset:  Unknown sound name\n");	return 0;}//==========================================================================//// SN_InitSequenceScript////==========================================================================void SN_InitSequenceScript(void){	int i, j;	int inSequence;	int *tempDataStart;	int *tempDataPtr;	inSequence = -1;	ActiveSequences = 0;	for(i = 0; i < SS_MAX_SCRIPTS; i++)	{		SequenceData[i] = NULL;	} 	SC_Open(SS_SCRIPT_NAME);	while(SC_GetString())	{		if(*sc_String == ':')		{			if(inSequence != -1)			{				SC_ScriptError("SN_InitSequenceScript:  Nested Script Error");			}			tempDataStart = (int *)Z_Malloc(SS_TEMPBUFFER_SIZE, 				PU_STATIC, NULL);			memset(tempDataStart, 0, SS_TEMPBUFFER_SIZE);			tempDataPtr = tempDataStart;			for(i = 0; i < SS_MAX_SCRIPTS; i++)			{				if(SequenceData[i] == NULL)				{					break;				}			}			if(i == SS_MAX_SCRIPTS)			{				I_Error("Number of SS Scripts >= SS_MAX_SCRIPTS");			}			for(j = 0; j < SEQ_NUMSEQ; j++)			{				if(!strcasecmp(SequenceTranslate[j].name, sc_String+1))				{					SequenceTranslate[j].scriptNum = i;					inSequence = j;					break;				}			}								continue; // parse the next command		}		if(inSequence == -1)		{			continue;		}		if(SC_Compare(SS_STRING_PLAYUNTILDONE))		{			VerifySequencePtr(tempDataStart, tempDataPtr);			SC_MustGetString();			*tempDataPtr++ = SS_CMD_PLAY;			*tempDataPtr++ = GetSoundOffset(sc_String);			*tempDataPtr++ = SS_CMD_WAITUNTILDONE;				}		else if(SC_Compare(SS_STRING_PLAY))		{			VerifySequencePtr(tempDataStart, tempDataPtr);			SC_MustGetString();			*tempDataPtr++ = SS_CMD_PLAY;			*tempDataPtr++ = GetSoundOffset(sc_String);		}		else if(SC_Compare(SS_STRING_PLAYTIME))		{			VerifySequencePtr(tempDataStart, tempDataPtr);			SC_MustGetString();			*tempDataPtr++ = SS_CMD_PLAY;			*tempDataPtr++ = GetSoundOffset(sc_String);			SC_MustGetNumber();			*tempDataPtr++ = SS_CMD_DELAY;				*tempDataPtr++ = sc_Number;		}		else if(SC_Compare(SS_STRING_PLAYREPEAT))		{			VerifySequencePtr(tempDataStart, tempDataPtr);			SC_MustGetString();			*tempDataPtr++ = SS_CMD_PLAYREPEAT;			*tempDataPtr++ = GetSoundOffset(sc_String);		}		else if(SC_Compare(SS_STRING_DELAY))		{			VerifySequencePtr(tempDataStart, tempDataPtr);			*tempDataPtr++ = SS_CMD_DELAY;			SC_MustGetNumber();			*tempDataPtr++ = sc_Number;		}		else if(SC_Compare(SS_STRING_DELAYRAND))		{			VerifySequencePtr(tempDataStart, tempDataPtr);			*tempDataPtr++ = SS_CMD_DELAYRAND;			SC_MustGetNumber();			*tempDataPtr++ = sc_Number;			SC_MustGetNumber();			*tempDataPtr++ = sc_Number;		}		else if(SC_Compare(SS_STRING_VOLUME))		{			VerifySequencePtr(tempDataStart, tempDataPtr);			*tempDataPtr++ = SS_CMD_VOLUME;			SC_MustGetNumber();			*tempDataPtr++ = sc_Number;		}		else if(SC_Compare(SS_STRING_END))		{			int dataSize;			*tempDataPtr++ = SS_CMD_END;			dataSize = (tempDataPtr-tempDataStart)*sizeof(int);			SequenceData[i] = (int *)Z_Malloc(dataSize, PU_STATIC,				NULL);			memcpy(SequenceData[i], tempDataStart, dataSize);			Z_Free(tempDataStart);			inSequence = -1;		}		else if(SC_Compare(SS_STRING_STOPSOUND))		{			SC_MustGetString();			SequenceTranslate[inSequence].stopSound =				GetSoundOffset(sc_String);			*tempDataPtr++ = SS_CMD_STOPSOUND;		}		else		{			SC_ScriptError("SN_InitSequenceScript:  Unknown commmand.\n");		}	}}//==========================================================================////  SN_StartSequence////==========================================================================void SN_StartSequence(mobj_t *mobj, int sequence){	seqnode_t *node;		SN_StopSequence(mobj); // Stop any previous sequence	node = (seqnode_t *)Z_Malloc(sizeof(seqnode_t), PU_STATIC, NULL);	node->sequencePtr = SequenceData[SequenceTranslate[sequence].scriptNum];	node->sequence = sequence;	node->mobj = mobj;	node->delayTics = 0;	node->stopSound = SequenceTranslate[sequence].stopSound;	node->volume = 127; // Start at max volume	if(!SequenceListHead)	{		SequenceListHead = node;		node->next = node->prev = NULL;	}	else	{		SequenceListHead->prev = node;		node->next = SequenceListHead;		node->prev = NULL;		SequenceListHead = node;	}	ActiveSequences++;	return;}//==========================================================================////  SN_StartSequenceName////==========================================================================void SN_StartSequenceName(mobj_t *mobj, char *name){	int i;	for(i = 0; i < SEQ_NUMSEQ; i++)	{		if(!strcmp(name, SequenceTranslate[i].name))		{			SN_StartSequence(mobj, i);			return;		}	}}//==========================================================================////  SN_StopSequence////==========================================================================void SN_StopSequence(mobj_t *mobj){	seqnode_t *node;	for(node = SequenceListHead; node; node = node->next)	{		if(node->mobj == mobj)		{			S_StopSound(mobj);			if(node->stopSound)			{				S_StartSoundAtVolume(mobj, node->stopSound, node->volume);			}			if(SequenceListHead == node)			{				SequenceListHead = node->next;			}			if(node->prev)			{				node->prev->next = node->next;			}			if(node->next)			{				node->next->prev = node->prev;			}			Z_Free(node);			ActiveSequences--;		}	}}//==========================================================================////  SN_UpdateActiveSequences////==========================================================================void SN_UpdateActiveSequences(void){	seqnode_t *node;	boolean sndPlaying;	if(!ActiveSequences || paused)	{ // No sequences currently playing/game is paused		return;	}	for(node = SequenceListHead; node; node = node->next)	{		if(node->delayTics)		{			node->delayTics--;			continue;		}		sndPlaying = S_GetSoundPlayingInfo(node->mobj, node->currentSoundID);		switch(*node->sequencePtr)		{			case SS_CMD_PLAY:				if(!sndPlaying)				{					node->currentSoundID = *(node->sequencePtr+1);					S_StartSoundAtVolume(node->mobj, node->currentSoundID,						node->volume);				}				node->sequencePtr += 2;				break;			case SS_CMD_WAITUNTILDONE:				if(!sndPlaying)				{					node->sequencePtr++;					node->currentSoundID = 0;				}				break;			case SS_CMD_PLAYREPEAT:				if(!sndPlaying)				{					node->currentSoundID = *(node->sequencePtr+1);					S_StartSoundAtVolume(node->mobj, node->currentSoundID,						node->volume);				}				break;			case SS_CMD_DELAY:				node->delayTics = *(node->sequencePtr+1);				node->sequencePtr += 2;				node->currentSoundID = 0;				break;			case SS_CMD_DELAYRAND:				node->delayTics = *(node->sequencePtr+1)+					M_Random()%(*(node->sequencePtr+2)-*(node->sequencePtr+1));				node->sequencePtr += 2;				node->currentSoundID = 0;				break;			case SS_CMD_VOLUME:				node->volume = (127*(*(node->sequencePtr+1)))/100;				node->sequencePtr += 2;				break;			case SS_CMD_STOPSOUND:				// Wait until something else stops the sequence				break;			case SS_CMD_END:				SN_StopSequence(node->mobj);				break;			default:					break;		}	}}//==========================================================================////  SN_StopAllSequences////==========================================================================void SN_StopAllSequences(void){	seqnode_t *node;	for(node = SequenceListHead; node; node = node->next)	{		node->stopSound = 0; // don't play any stop sounds		SN_StopSequence(node->mobj);	}}	//==========================================================================////  SN_GetSequenceOffset////==========================================================================int SN_GetSequenceOffset(int sequence, int *sequencePtr){	return (sequencePtr-SequenceData[SequenceTranslate[sequence].scriptNum]);}//==========================================================================////  SN_ChangeNodeData//// 	nodeNum zero is the first node//==========================================================================void SN_ChangeNodeData(int nodeNum, int seqOffset, int delayTics, int volume,	int currentSoundID){	int i;	seqnode_t *node;	i = 0;	node = SequenceListHead;	while(node && i < nodeNum)	{		node = node->next;		i++;	}	if(!node)	{ // reach the end of the list before finding the nodeNum-th node		return;	}	node->delayTics = delayTics;	node->volume = volume;	node->sequencePtr += seqOffset;	node->currentSoundID = currentSoundID;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色综合一个色综合亚洲| 国产精品资源在线看| 成人激情电影免费在线观看| 欧美日韩一区久久| 国产精品久久久久久久久动漫| 日韩avvvv在线播放| 日本丰满少妇一区二区三区| 国产精品网站一区| 黑人巨大精品欧美黑白配亚洲| 欧美日韩精品免费观看视频| 亚洲欧洲精品成人久久奇米网| 国产一区二区视频在线| 欧美一级专区免费大片| 一区二区三区加勒比av| 91麻豆精品国产自产在线| 亚洲欧洲国产日韩| 国产成人精品亚洲日本在线桃色| 欧美久久久久久蜜桃| 亚洲综合一区二区| 99精品视频免费在线观看| 精品久久久久久亚洲综合网 | 欧美日韩精品欧美日韩精品一| 国产精品女主播av| 国产99久久久久| 久久久亚洲午夜电影| 久久福利资源站| 日韩欧美久久久| 青青草国产成人av片免费| 制服.丝袜.亚洲.中文.综合| 亚洲r级在线视频| 欧美无乱码久久久免费午夜一区 | 国产精品久久毛片a| 国产一区二区三区四区五区美女| 日韩午夜av电影| 蜜乳av一区二区| 欧美一区二区三区视频免费播放| 午夜精品一区二区三区免费视频 | 久久尤物电影视频在线观看| 免费的国产精品| 日韩一区二区高清| 日韩av网站在线观看| 日韩视频一区在线观看| 伦理电影国产精品| 久久这里只有精品6| 国产精一区二区三区| 国产日韩精品一区二区三区| 国产精品99久久久久久久vr| 中文字幕av一区二区三区高| 成人av网址在线| 亚洲欧洲国产日韩| 91久久久免费一区二区| 一区二区三区精品久久久| 欧美日韩免费电影| 日本美女一区二区三区| 欧美一卡2卡三卡4卡5免费| 久久精品av麻豆的观看方式| 久久色中文字幕| 成人av免费网站| 亚洲精品成人a在线观看| 欧美午夜不卡在线观看免费| 蜜臀av性久久久久蜜臀aⅴ流畅| 日韩美女在线视频| 国产jizzjizz一区二区| 综合电影一区二区三区| 欧美视频日韩视频| 捆绑紧缚一区二区三区视频| 国产欧美日韩在线视频| 日本乱人伦aⅴ精品| 日本不卡中文字幕| 国产亚洲精品bt天堂精选| 99精品视频在线观看免费| 亚洲大片一区二区三区| 欧美电影免费观看高清完整版在| 成人综合在线网站| 亚洲午夜激情av| 欧美tickle裸体挠脚心vk| 波多野结衣的一区二区三区| 亚洲国产综合在线| 久久综合色婷婷| 91亚洲大成网污www| 日韩成人dvd| 中文字幕精品三区| 欧美日韩精品一区二区天天拍小说 | 日本aⅴ亚洲精品中文乱码| 精品欧美一区二区在线观看| 91在线精品一区二区| 日韩不卡手机在线v区| 欧美国产成人精品| 制服丝袜亚洲精品中文字幕| 成人一区二区三区视频在线观看 | 欧美一区二区三区四区高清| 高清免费成人av| 亚洲v精品v日韩v欧美v专区| 久久精品免视看| 亚洲三级免费观看| 日韩一级视频免费观看在线| 99国内精品久久| 美国三级日本三级久久99| 亚洲视频香蕉人妖| 欧美精品一区二| 欧日韩精品视频| 高清在线观看日韩| 日本伊人色综合网| 亚洲免费观看高清完整版在线| 欧美xxxxx裸体时装秀| 91高清视频免费看| 国产盗摄视频一区二区三区| 亚洲444eee在线观看| 1区2区3区国产精品| 2021久久国产精品不只是精品 | 国内精品伊人久久久久影院对白| 亚洲美女一区二区三区| 国产亚洲欧美在线| 欧美一区二区视频在线观看2022| 色综合天天综合网天天看片| 国产激情偷乱视频一区二区三区 | 专区另类欧美日韩| 久久精品这里都是精品| 欧美老女人在线| 日本乱码高清不卡字幕| 成人中文字幕合集| 国产毛片精品视频| 蜜桃视频在线观看一区二区| 亚洲综合色自拍一区| 国产精品色婷婷久久58| 精品国产乱码久久| 91精品国产麻豆| 欧美午夜精品一区二区蜜桃| 99久久婷婷国产| 国产91高潮流白浆在线麻豆 | 狠狠色狠狠色综合日日91app| 亚洲风情在线资源站| 亚洲女与黑人做爰| 成人免费在线视频观看| 亚洲国产精品ⅴa在线观看| 久久综合狠狠综合久久激情| 日韩三级免费观看| 欧美二区三区91| 欧美精品在线观看播放| 欧美中文字幕不卡| 91黄视频在线| 91丨porny丨国产| 成人av电影免费观看| 成人午夜电影久久影院| 国产精品996| 国产 日韩 欧美大片| 国产宾馆实践打屁股91| 国产suv精品一区二区6| 国产成人av影院| 国产91色综合久久免费分享| 懂色av一区二区夜夜嗨| 国产酒店精品激情| 国产精品18久久久久| 国产精品66部| 不卡一区二区在线| 日韩一区二区三区免费看 | 日本高清免费不卡视频| 自拍av一区二区三区| 91在线观看高清| 艳妇臀荡乳欲伦亚洲一区| 久久天天做天天爱综合色| 国内精品第一页| 日韩一区二区在线观看| 国产成人av资源| 在线观看三级视频欧美| 99久久久久免费精品国产 | 亚洲午夜在线电影| 亚洲一区二区影院| 天天综合天天综合色| 日本视频一区二区三区| 日本不卡一二三| 久久超碰97中文字幕| 国产传媒日韩欧美成人| 91丝袜国产在线播放| 色www精品视频在线观看| 欧美午夜精品久久久久久超碰 | 国产1区2区3区精品美女| av中文一区二区三区| 在线免费观看视频一区| 欧美日韩成人在线一区| 欧美va亚洲va国产综合| 中文字幕第一区第二区| 亚洲自拍偷拍网站| 免费观看日韩电影| 国产风韵犹存在线视精品| 色乱码一区二区三区88| 欧美一区二区三区视频免费播放| 久久久久久久久久久久久久久99| 国产精品久久99| 亚洲一区二区三区四区在线免费观看| 日韩精品一二三区| 国产一区二区美女诱惑| 91麻豆蜜桃一区二区三区| 91精品国产综合久久久蜜臀粉嫩 | 欧美国产精品久久| 一区二区三区在线视频观看58| 天天爽夜夜爽夜夜爽精品视频 | 亚洲午夜精品网| 精品一区二区三区欧美| 97se亚洲国产综合自在线观|