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

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

?? id_ca.c

?? wolf3d游戲源代碼!非常不錯! 與大家共享! 如果大家又相關資料還請多多上傳!
?? C
?? 第 1 頁 / 共 3 頁
字號:
	}

	expanded = *(long far *)source;
	source += 4;			// skip over length
	MM_GetPtr (&(memptr)audiosegs[chunk],expanded);
	if (mmerror)
		goto done;
	CAL_HuffExpand (source,audiosegs[chunk],expanded,audiohuffman,false);

done:
	if (compressed>BUFFERSIZE)
		MM_FreePtr(&bigbufferseg);
#endif
}

//===========================================================================

/*
======================
=
= CA_LoadAllSounds
=
= Purges all sounds, then loads all new ones (mode switch)
=
======================
*/

void CA_LoadAllSounds (void)
{
	unsigned	start,i;

	switch (oldsoundmode)
	{
	case sdm_Off:
		goto cachein;
	case sdm_PC:
		start = STARTPCSOUNDS;
		break;
	case sdm_AdLib:
		start = STARTADLIBSOUNDS;
		break;
	}

	for (i=0;i<NUMSOUNDS;i++,start++)
		if (audiosegs[start])
			MM_SetPurge (&(memptr)audiosegs[start],3);		// make purgable

cachein:

	switch (SoundMode)
	{
	case sdm_Off:
		return;
	case sdm_PC:
		start = STARTPCSOUNDS;
		break;
	case sdm_AdLib:
		start = STARTADLIBSOUNDS;
		break;
	}

	for (i=0;i<NUMSOUNDS;i++,start++)
		CA_CacheAudioChunk (start);

	oldsoundmode = SoundMode;
}

//===========================================================================


/*
======================
=
= CAL_ExpandGrChunk
=
= Does whatever is needed with a pointer to a compressed chunk
=
======================
*/

void CAL_ExpandGrChunk (int chunk, byte far *source)
{
	long	expanded;


	if (chunk >= STARTTILE8 && chunk < STARTEXTERNS)
	{
	//
	// expanded sizes of tile8/16/32 are implicit
	//

#define BLOCK		64
#define MASKBLOCK	128

		if (chunk<STARTTILE8M)			// tile 8s are all in one chunk!
			expanded = BLOCK*NUMTILE8;
		else if (chunk<STARTTILE16)
			expanded = MASKBLOCK*NUMTILE8M;
		else if (chunk<STARTTILE16M)	// all other tiles are one/chunk
			expanded = BLOCK*4;
		else if (chunk<STARTTILE32)
			expanded = MASKBLOCK*4;
		else if (chunk<STARTTILE32M)
			expanded = BLOCK*16;
		else
			expanded = MASKBLOCK*16;
	}
	else
	{
	//
	// everything else has an explicit size longword
	//
		expanded = *(long far *)source;
		source += 4;			// skip over length
	}

//
// allocate final space, decompress it, and free bigbuffer
// Sprites need to have shifts made and various other junk
//
	MM_GetPtr (&grsegs[chunk],expanded);
	if (mmerror)
		return;
	CAL_HuffExpand (source,grsegs[chunk],expanded,grhuffman,false);
}


/*
======================
=
= CA_CacheGrChunk
=
= Makes sure a given chunk is in memory, loadiing it if needed
=
======================
*/

void CA_CacheGrChunk (int chunk)
{
	long	pos,compressed;
	memptr	bigbufferseg;
	byte	far *source;
	int		next;

	grneeded[chunk] |= ca_levelbit;		// make sure it doesn't get removed
	if (grsegs[chunk])
	{
		MM_SetPurge (&grsegs[chunk],0);
		return;							// allready in memory
	}

//
// load the chunk into a buffer, either the miscbuffer if it fits, or allocate
// a larger buffer
//
	pos = GRFILEPOS(chunk);
	if (pos<0)							// $FFFFFFFF start is a sparse tile
	  return;

	next = chunk +1;
	while (GRFILEPOS(next) == -1)		// skip past any sparse tiles
		next++;

	compressed = GRFILEPOS(next)-pos;

	lseek(grhandle,pos,SEEK_SET);

	if (compressed<=BUFFERSIZE)
	{
		CA_FarRead(grhandle,bufferseg,compressed);
		source = bufferseg;
	}
	else
	{
		MM_GetPtr(&bigbufferseg,compressed);
		MM_SetLock (&bigbufferseg,true);
		CA_FarRead(grhandle,bigbufferseg,compressed);
		source = bigbufferseg;
	}

	CAL_ExpandGrChunk (chunk,source);

	if (compressed>BUFFERSIZE)
		MM_FreePtr(&bigbufferseg);
}



//==========================================================================

/*
======================
=
= CA_CacheScreen
=
= Decompresses a chunk from disk straight onto the screen
=
======================
*/

void CA_CacheScreen (int chunk)
{
	long	pos,compressed,expanded;
	memptr	bigbufferseg;
	byte	far *source;
	int		next;

//
// load the chunk into a buffer
//
	pos = GRFILEPOS(chunk);
	next = chunk +1;
	while (GRFILEPOS(next) == -1)		// skip past any sparse tiles
		next++;
	compressed = GRFILEPOS(next)-pos;

	lseek(grhandle,pos,SEEK_SET);

	MM_GetPtr(&bigbufferseg,compressed);
	MM_SetLock (&bigbufferseg,true);
	CA_FarRead(grhandle,bigbufferseg,compressed);
	source = bigbufferseg;

	expanded = *(long far *)source;
	source += 4;			// skip over length

//
// allocate final space, decompress it, and free bigbuffer
// Sprites need to have shifts made and various other junk
//
	CAL_HuffExpand (source,MK_FP(SCREENSEG,bufferofs),expanded,grhuffman,true);
	VW_MarkUpdateBlock (0,0,319,199);
	MM_FreePtr(&bigbufferseg);
}

//==========================================================================

/*
======================
=
= CA_CacheMap
=
= WOLF: This is specialized for a 64*64 map size
=
======================
*/

void CA_CacheMap (int mapnum)
{
	long	pos,compressed;
	int		plane;
	memptr	*dest,bigbufferseg;
	unsigned	size;
	unsigned	far	*source;
#ifdef CARMACIZED
	memptr	buffer2seg;
	long	expanded;
#endif

	mapon = mapnum;

//
// load the planes into the allready allocated buffers
//
	size = 64*64*2;

	for (plane = 0; plane<MAPPLANES; plane++)
	{
		pos = mapheaderseg[mapnum]->planestart[plane];
		compressed = mapheaderseg[mapnum]->planelength[plane];

		dest = &(memptr)mapsegs[plane];

		lseek(maphandle,pos,SEEK_SET);
		if (compressed<=BUFFERSIZE)
			source = bufferseg;
		else
		{
			MM_GetPtr(&bigbufferseg,compressed);
			MM_SetLock (&bigbufferseg,true);
			source = bigbufferseg;
		}

		CA_FarRead(maphandle,(byte far *)source,compressed);
#ifdef CARMACIZED
		//
		// unhuffman, then unRLEW
		// The huffman'd chunk has a two byte expanded length first
		// The resulting RLEW chunk also does, even though it's not really
		// needed
		//
		expanded = *source;
		source++;
		MM_GetPtr (&buffer2seg,expanded);
		CAL_CarmackExpand (source, (unsigned far *)buffer2seg,expanded);
		CA_RLEWexpand (((unsigned far *)buffer2seg)+1,*dest,size,
		((mapfiletype _seg *)tinf)->RLEWtag);
		MM_FreePtr (&buffer2seg);

#else
		//
		// unRLEW, skipping expanded length
		//
		CA_RLEWexpand (source+1, *dest,size,
		((mapfiletype _seg *)tinf)->RLEWtag);
#endif

		if (compressed>BUFFERSIZE)
			MM_FreePtr(&bigbufferseg);
	}
}

//===========================================================================

/*
======================
=
= CA_UpLevel
=
= Goes up a bit level in the needed lists and clears it out.
= Everything is made purgable
=
======================
*/

void CA_UpLevel (void)
{
	int	i;

	if (ca_levelnum==7)
		Quit ("CA_UpLevel: Up past level 7!");

	for (i=0;i<NUMCHUNKS;i++)
		if (grsegs[i])
			MM_SetPurge (&(memptr)grsegs[i],3);
	ca_levelbit<<=1;
	ca_levelnum++;
}

//===========================================================================

/*
======================
=
= CA_DownLevel
=
= Goes down a bit level in the needed lists and recaches
= everything from the lower level
=
======================
*/

void CA_DownLevel (void)
{
	if (!ca_levelnum)
		Quit ("CA_DownLevel: Down past level 0!");
	ca_levelbit>>=1;
	ca_levelnum--;
	CA_CacheMarks();
}

//===========================================================================

/*
======================
=
= CA_ClearMarks
=
= Clears out all the marks at the current level
=
======================
*/

void CA_ClearMarks (void)
{
	int i;

	for (i=0;i<NUMCHUNKS;i++)
		grneeded[i]&=~ca_levelbit;
}


//===========================================================================

/*
======================
=
= CA_ClearAllMarks
=
= Clears out all the marks on all the levels
=
======================
*/

void CA_ClearAllMarks (void)
{
	_fmemset (grneeded,0,sizeof(grneeded));
	ca_levelbit = 1;
	ca_levelnum = 0;
}


//===========================================================================


/*
======================
=
= CA_FreeGraphics
=
======================
*/


void CA_SetGrPurge (void)
{
	int i;

//
// free graphics
//
	CA_ClearMarks ();

	for (i=0;i<NUMCHUNKS;i++)
		if (grsegs[i])
			MM_SetPurge (&(memptr)grsegs[i],3);
}



/*
======================
=
= CA_SetAllPurge
=
= Make everything possible purgable
=
======================
*/

void CA_SetAllPurge (void)
{
	int i;


//
// free sounds
//
	for (i=0;i<NUMSNDCHUNKS;i++)
		if (audiosegs[i])
			MM_SetPurge (&(memptr)audiosegs[i],3);

//
// free graphics
//
	CA_SetGrPurge ();
}


//===========================================================================

/*
======================
=
= CA_CacheMarks
=
======================
*/
#define MAXEMPTYREAD	1024

void CA_CacheMarks (void)
{
	int 	i,next,numcache;
	long	pos,endpos,nextpos,nextendpos,compressed;
	long	bufferstart,bufferend;	// file position of general buffer
	byte	far *source;
	memptr	bigbufferseg;

	numcache = 0;
//
// go through and make everything not needed purgable
//
	for (i=0;i<NUMCHUNKS;i++)
		if (grneeded[i]&ca_levelbit)
		{
			if (grsegs[i])					// its allready in memory, make
				MM_SetPurge(&grsegs[i],0);	// sure it stays there!
			else
				numcache++;
		}
		else
		{
			if (grsegs[i])					// not needed, so make it purgeable
				MM_SetPurge(&grsegs[i],3);
		}

	if (!numcache)			// nothing to cache!
		return;


//
// go through and load in anything still needed
//
	bufferstart = bufferend = 0;		// nothing good in buffer now

	for (i=0;i<NUMCHUNKS;i++)
		if ( (grneeded[i]&ca_levelbit) && !grsegs[i])
		{
			pos = GRFILEPOS(i);
			if (pos<0)
				continue;

			next = i +1;
			while (GRFILEPOS(next) == -1)		// skip past any sparse tiles
				next++;

			compressed = GRFILEPOS(next)-pos;
			endpos = pos+compressed;

			if (compressed<=BUFFERSIZE)
			{
				if (bufferstart<=pos
				&& bufferend>= endpos)
				{
				// data is allready in buffer
					source = (byte _seg *)bufferseg+(pos-bufferstart);
				}
				else
				{
				// load buffer with a new block from disk
				// try to get as many of the needed blocks in as possible
					while ( next < NUMCHUNKS )
					{
						while (next < NUMCHUNKS &&
						!(grneeded[next]&ca_levelbit && !grsegs[next]))
							next++;
						if (next == NUMCHUNKS)
							continue;

						nextpos = GRFILEPOS(next);
						while (GRFILEPOS(++next) == -1)	// skip past any sparse tiles
							;
						nextendpos = GRFILEPOS(next);
						if (nextpos - endpos <= MAXEMPTYREAD
						&& nextendpos-pos <= BUFFERSIZE)
							endpos = nextendpos;
						else
							next = NUMCHUNKS;			// read pos to posend
					}

					lseek(grhandle,pos,SEEK_SET);
					CA_FarRead(grhandle,bufferseg,endpos-pos);
					bufferstart = pos;
					bufferend = endpos;
					source = bufferseg;
				}
			}
			else
			{
			// big chunk, allocate temporary buffer
				MM_GetPtr(&bigbufferseg,compressed);
				if (mmerror)
					return;
				MM_SetLock (&bigbufferseg,true);
				lseek(grhandle,pos,SEEK_SET);
				CA_FarRead(grhandle,bigbufferseg,compressed);
				source = bigbufferseg;
			}

			CAL_ExpandGrChunk (i,source);
			if (mmerror)
				return;

			if (compressed>BUFFERSIZE)
				MM_FreePtr(&bigbufferseg);

		}
}

void CA_CannotOpen(char *string)
{
 char str[30];

 strcpy(str,"Can't open ");
 strcat(str,string);
 strcat(str,"!\n");
 Quit (str);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区三区视频免费| 2024国产精品| 亚洲激情六月丁香| 国产成a人无v码亚洲福利| 精品国产3级a| 激情小说欧美图片| 欧美变态tickling挠脚心| 色诱亚洲精品久久久久久| 中文文精品字幕一区二区| 国产成人鲁色资源国产91色综| 26uuu亚洲| 国产福利91精品| 国产欧美日韩在线看| 懂色av一区二区三区免费看| 日本一区二区综合亚洲| 高清不卡一二三区| 国产精品久久久久久久蜜臀 | 天堂一区二区在线免费观看| 欧美最猛黑人xxxxx猛交| 亚洲一级电影视频| 欧美三级电影网站| 亚洲18影院在线观看| 欧美日韩国产首页| 青青草国产精品97视觉盛宴| 日韩欧美国产麻豆| 九九视频精品免费| 久久精品人人做| 不卡高清视频专区| 亚洲免费资源在线播放| 在线观看av不卡| 午夜伦理一区二区| 欧美一区二区三区日韩| 精品一区二区三区视频在线观看| 久久久久国产免费免费 | 国内外成人在线视频| 久久久一区二区| 成人久久视频在线观看| 亚洲色图第一区| 欧美日韩国产乱码电影| 开心九九激情九九欧美日韩精美视频电影 | 色综合 综合色| 亚洲va韩国va欧美va精品 | 欧美精品电影在线播放| 另类成人小视频在线| 国产人伦精品一区二区| 91麻豆蜜桃一区二区三区| 性做久久久久久久免费看| 欧美大尺度电影在线| 成人国产精品视频| 一区二区三区四区av| 日韩欧美专区在线| 成人激情午夜影院| 亚洲国产精品嫩草影院| 日本不卡中文字幕| 久久久国产一区二区三区四区小说| 成人综合婷婷国产精品久久| 一区二区国产盗摄色噜噜| 日韩欧美国产一区二区在线播放| 丁香啪啪综合成人亚洲小说 | 91丝袜国产在线播放| 丝袜诱惑制服诱惑色一区在线观看| 精品蜜桃在线看| 成人av在线资源网站| 五月婷婷欧美视频| 国产日产欧美一区二区三区| 欧美婷婷六月丁香综合色| 久久国产婷婷国产香蕉| 最新日韩av在线| 日韩欧美www| 91网站最新网址| 青青草成人在线观看| 日韩一区中文字幕| 日韩欧美美女一区二区三区| 91色|porny| 精品一区在线看| 一区二区三区欧美视频| 精品国产乱码久久久久久影片| 色综合天天狠狠| 激情文学综合丁香| 亚洲国产精品麻豆| 国产精品拍天天在线| 日韩午夜电影av| 色噜噜久久综合| 国产精品一区二区在线观看不卡| 亚洲成av人影院在线观看网| 欧美精彩视频一区二区三区| 欧美一区永久视频免费观看| 91视频观看视频| 国产一区二区三区不卡在线观看| 亚洲与欧洲av电影| 欧美激情一区在线观看| 日韩欧美卡一卡二| 欧美午夜理伦三级在线观看| 不卡一区二区三区四区| 精品影院一区二区久久久| 五月天激情小说综合| 亚洲色图丝袜美腿| 国产欧美日韩久久| 日韩欧美国产一区在线观看| 欧美日韩精品福利| 99久久精品国产毛片| 国产美女视频91| 另类小说欧美激情| 日韩av在线发布| 亚洲国产视频一区二区| 亚洲欧美日韩国产综合| 国产欧美日韩精品一区| 欧美精品一区二区不卡| 日韩一区二区三免费高清| 欧美无砖专区一中文字| 97久久精品人人做人人爽50路| 国产成人一区在线| 国产主播一区二区三区| 免费日韩伦理电影| 日韩精品乱码免费| 午夜不卡在线视频| 亚洲最大的成人av| 亚洲黄一区二区三区| 日韩毛片在线免费观看| 成人免费在线视频观看| 欧美国产精品久久| 国产免费成人在线视频| 国产欧美一区二区精品秋霞影院| 精品国产123| 精品国产91乱码一区二区三区| 欧美电影免费观看高清完整版在线 | 亚洲一二三四在线| 一区二区三区电影在线播| 亚洲精品ww久久久久久p站| 亚洲人快播电影网| 亚洲欧美福利一区二区| 亚洲欧洲三级电影| 日韩理论片网站| 亚洲色图欧洲色图| 一区二区欧美精品| 亚洲国产成人tv| 日韩电影免费在线看| 奇米精品一区二区三区在线观看| 日日骚欧美日韩| 麻豆专区一区二区三区四区五区| 美女视频黄频大全不卡视频在线播放| 日韩黄色一级片| 开心九九激情九九欧美日韩精美视频电影| 麻豆91在线观看| 国产精品资源在线看| 国产 欧美在线| 91在线丨porny丨国产| 欧美在线视频日韩| 91麻豆精品国产91久久久资源速度| 欧美一区二区三区免费大片 | 欧美一区二区三区视频免费| 精品剧情在线观看| 国产视频一区二区在线| 国产精品美女www爽爽爽| 亚洲精品久久久久久国产精华液| 亚洲一区免费在线观看| 日韩 欧美一区二区三区| 久久99国产精品久久99果冻传媒| 国产成人日日夜夜| 91丨九色丨蝌蚪丨老版| 欧美日韩精品欧美日韩精品 | 久久久91精品国产一区二区精品 | 91日韩在线专区| 91精品一区二区三区久久久久久| 日韩午夜在线观看视频| 久久久精品蜜桃| 伊人色综合久久天天人手人婷| 日韩av一级电影| 国产盗摄精品一区二区三区在线| 99国产麻豆精品| 69久久99精品久久久久婷婷| 精品成人佐山爱一区二区| 国产精品麻豆视频| 亚洲国产一区二区三区| 黄色日韩网站视频| 91麻豆精品在线观看| 日韩欧美在线网站| 中文字幕制服丝袜一区二区三区 | 亚洲欧美国产高清| 麻豆极品一区二区三区| 成人精品亚洲人成在线| 欧美色爱综合网| 久久婷婷一区二区三区| 亚洲黄一区二区三区| 精品在线播放免费| 色偷偷88欧美精品久久久| 日韩一区二区三区电影| 自拍偷拍亚洲激情| 美日韩一区二区| 91网址在线看| 亚洲精品在线一区二区| 亚洲人成精品久久久久久 | 韩国女主播成人在线| 一本色道久久加勒比精品| 欧美大片日本大片免费观看| 亚洲欧美成人一区二区三区| 麻豆国产一区二区| 欧洲生活片亚洲生活在线观看| 亚洲精品在线免费播放| 一区二区三区在线高清|