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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? id_ca.c

?? Wolf 3D official source code.
?? C
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
	}

	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);
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩一二三| 一区二区三区欧美日韩| 欧美一区二区在线视频| 在线影院国内精品| 在线看不卡av| 欧美少妇xxx| 欧美在线不卡视频| 欧美在线不卡视频| 在线播放中文一区| 欧美日韩国产另类一区| 91精品欧美一区二区三区综合在 | 一区二区三区中文字幕电影 | 亚洲成av人片www| 婷婷综合另类小说色区| 日韩成人午夜电影| 久久国产人妖系列| 国产激情91久久精品导航 | 91日韩一区二区三区| 色av综合在线| 欧美日本韩国一区二区三区视频| 欧美日韩不卡在线| 欧美mv和日韩mv国产网站| 久久精品一区二区| 一区视频在线播放| 亚洲国产欧美在线| 麻豆91在线观看| 国产传媒一区在线| 99久久精品国产麻豆演员表| 欧美在线|欧美| 日韩免费在线观看| 日本一区二区三区视频视频| 中文字幕一区二区不卡| 午夜伊人狠狠久久| 久久99这里只有精品| 高清国产一区二区| 日本精品免费观看高清观看| 日韩午夜电影在线观看| 精品福利一二区| 中文字幕亚洲一区二区va在线| 亚洲狠狠爱一区二区三区| 美腿丝袜在线亚洲一区| av激情综合网| 欧美剧在线免费观看网站| 精品久久国产97色综合| 亚洲欧美视频在线观看| 日韩中文字幕区一区有砖一区 | 日本不卡一区二区三区| 成人性色生活片| 欧美麻豆精品久久久久久| 久久久久久久一区| 亚洲夂夂婷婷色拍ww47 | 91麻豆自制传媒国产之光| 日韩一区二区在线免费观看| 欧美极品少妇xxxxⅹ高跟鞋| 亚洲超碰97人人做人人爱| 国产成人综合亚洲网站| 欧美美女喷水视频| 国产精品初高中害羞小美女文| 亚洲超碰精品一区二区| 成人黄色大片在线观看| 日韩视频在线永久播放| 亚洲视频综合在线| 精品一区中文字幕| 欧日韩精品视频| 日本一区二区视频在线观看| 午夜精品免费在线| jlzzjlzz国产精品久久| 日韩精品一区二区在线| 一区二区三区国产豹纹内裤在线| 国内外成人在线视频| 在线观看亚洲精品| 国产精品视频一二三区| 麻豆视频一区二区| 欧美色视频在线观看| 国产精品麻豆久久久| 久久精品99久久久| 欧美日韩大陆一区二区| 亚洲丝袜精品丝袜在线| 国产成人自拍网| 欧美一区二区三区四区高清| 一区二区三区在线播| 成人免费视频app| 日韩美女一区二区三区四区| 亚洲成人三级小说| 色94色欧美sute亚洲13| 国产精品国产自产拍在线| 国内精品自线一区二区三区视频| 欧美日韩国产电影| 亚洲一区二区三区四区五区中文| 91视频在线观看| 欧美韩国一区二区| 夫妻av一区二区| 久久精品欧美日韩精品| 精品一区二区三区不卡| 91精品国产欧美一区二区成人| 亚洲综合色视频| 91麻豆福利精品推荐| 国产精品久久久久三级| 成人黄色免费短视频| 欧美国产激情二区三区| 成人在线一区二区三区| 国产欧美日韩久久| 国产一区二区三区免费播放| 精品盗摄一区二区三区| 久久精品国产99国产精品| 日韩亚洲国产中文字幕欧美| 美女脱光内衣内裤视频久久网站 | 国产午夜精品一区二区三区嫩草| 久久精品国产免费| 精品国产乱码久久久久久久| 久久成人免费网| 久久亚洲精品小早川怜子| 久久99精品视频| 欧美精品一区二区久久久| 国精产品一区一区三区mba视频| 精品国产伦一区二区三区免费| 久草在线在线精品观看| 国产亚洲一区二区三区在线观看 | 色噜噜狠狠色综合欧洲selulu| 亚洲精品欧美激情| 色婷婷av一区二区三区软件| 一区二区免费在线播放| 在线观看免费一区| 日韩制服丝袜先锋影音| 日韩视频免费观看高清完整版在线观看| 青青草国产成人av片免费| 精品福利一区二区三区免费视频| 国产一区免费电影| 国产精品―色哟哟| 91搞黄在线观看| 蜜臀va亚洲va欧美va天堂| 久久尤物电影视频在线观看| 国产大陆亚洲精品国产| 亚洲三级在线播放| 欧美日韩国产高清一区二区三区 | 日韩亚洲国产中文字幕欧美| 国产精品资源在线看| 国产精品家庭影院| 欧美色电影在线| 久久精品国产免费看久久精品| 日本一区二区三区在线不卡| 色婷婷av一区二区| 捆绑调教美女网站视频一区| 国产精品毛片久久久久久| 精品视频一区 二区 三区| 麻豆成人久久精品二区三区小说| 中文字幕精品一区二区三区精品| 欧美中文字幕不卡| 国产一区二区三区免费播放 | av动漫一区二区| 五月婷婷另类国产| 中日韩av电影| 5月丁香婷婷综合| av电影天堂一区二区在线| 五月婷婷激情综合网| 亚洲国产精品精华液2区45| 欧美日韩三级在线| 成熟亚洲日本毛茸茸凸凹| 午夜视频一区二区| 欧美国产激情二区三区| 555夜色666亚洲国产免| 懂色av中文字幕一区二区三区| 亚洲地区一二三色| 中文字幕国产一区| 日韩欧美一区在线| 在线观看视频91| 成人免费不卡视频| 免费在线欧美视频| 亚洲精品国产第一综合99久久| 精品乱人伦小说| 欧美色图12p| 99re成人精品视频| 国产一区二区三区久久悠悠色av| 亚洲成a人片综合在线| 国产精品高清亚洲| 久久综合色婷婷| 欧美人狂配大交3d怪物一区| 成人网男人的天堂| 久久99热这里只有精品| 亚洲成人av一区二区三区| 国产精品国产成人国产三级| 精品99一区二区| 欧美福利视频一区| 91老司机福利 在线| 成人精品免费看| 国内精品免费**视频| 日本欧美加勒比视频| 亚洲国产一区二区a毛片| 中文字幕一区日韩精品欧美| 国产欧美日韩另类视频免费观看| 欧美sm美女调教| 日韩三级高清在线| 欧美巨大另类极品videosbest| 在线亚洲高清视频| 色婷婷激情综合| 91亚洲精品一区二区乱码| 成人爱爱电影网址| 成人a区在线观看| 国产成人福利片| 国产一区二区三区精品欧美日韩一区二区三区 |