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

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

?? contigsc.c

?? Wolf 3D official source code.
?? C
?? 第 1 頁 / 共 2 頁
字號:
asm	mov	ax,[es:si]
asm	mov	WORD PTR ss:[linescale],ax	// call here to start scaling
asm	mov	si,[ds:bp+2]				// corrected top of shape for this segment
asm	add	bp,6						// next segment list

asm	mov	ax,SCREENSEG
asm	mov	es,ax
asm	mov	al,ss:[mask1]
asm	out	dx,al						// set map mask register
asm	call ss:[linescale]				// scale the segment of pixels
asm	inc	di
asm	mov	al,ss:[mask2]
asm	out	dx,al						// set map mask register
asm	call ss:[linescale]				// scale the segment of pixels
asm	inc	di
asm	mov	al,ss:[mask3]
asm	out	dx,al						// set map mask register
asm	call ss:[linescale]				// scale the segment of pixels
asm	dec	di
asm	dec	di

asm	mov	es,WORD PTR ss:[linescale+2] // segment of scaler
asm	mov	BYTE PTR es:[bx],cl			// unpatch the RETF
asm	jmp	scaletriple					// do the next segment


}


/*
=======================
=
= ScaleShape
=
= Draws a compiled shape at [scale] pixels high
=
= each vertical line of the shape has a pointer to segment data:
= 	end of segment pixel*2 (0 terminates line) used to patch rtl in scaler
= 	top of virtual line with segment in proper place
=	start of segment pixel*2, used to jsl into compiled scaler
=	<repeat>
=
= Setup for call
= --------------
= GC_MODE			read mode 1, write mode 2
= GC_COLORDONTCARE  set to 0, so all reads from video memory return 0xff
= GC_INDEX			pointing at GC_BITMASK
=
=======================
*/

static	long		longtemp;

void ScaleShape (int xcenter, int shapenum, unsigned height)
{
	t_compshape	_seg *shape;
	t_compscale far *comptable;
	unsigned	scale,srcx,stopx,tempx;
	int			t;
	unsigned	far *cmdptr;
	boolean		leftvis,rightvis;


	shape = PM_GetSpritePage (shapenum);

	scale = height>>3;						// low three bits are fractional
	if (!scale || scale>maxscale)
		return;								// too close or far away
	comptable = scaledirectory[scale];

	*(((unsigned *)&linescale)+1)=FP_SEG(comptable);	// seg of far call
	*(((unsigned *)&linecmds)+1)=(unsigned)shape;		// seg of shape

//
// scale to the left (from pixel 31 to shape->leftpix)
//
	srcx = 32;
	slinex = xcenter;
	stopx = shape->leftpix;
	cmdptr = &shape->dataofs[31-stopx];

	while ( --srcx >=stopx && slinex>0)
	{
		(unsigned)linecmds = *cmdptr--;
		if ( !(slinewidth = comptable->width[srcx]) )
			continue;

		if (slinewidth == 1)
		{
			slinex--;
			if (slinex<viewwidth)
			{
				if (wallheight[slinex] >= height)
					continue;		// obscured by closer wall
				ScaleLine ();
			}
			continue;
		}

		//
		// handle multi pixel lines
		//
		if (slinex>viewwidth)
		{
			slinex -= slinewidth;
			slinewidth = viewwidth-slinex;
			if (slinewidth<1)
				continue;		// still off the right side
		}
		else
		{
			if (slinewidth>slinex)
				slinewidth = slinex;
			slinex -= slinewidth;
		}


		leftvis = (wallheight[slinex] < height);
		rightvis = (wallheight[slinex+slinewidth-1] < height);

		if (leftvis)
		{
			if (rightvis)
				ScaleLine ();
			else
			{
				while (wallheight[slinex+slinewidth-1] >= height)
					slinewidth--;
				ScaleLine ();
			}
		}
		else
		{
			if (!rightvis)
				continue;		// totally obscured

			while (wallheight[slinex] >= height)
			{
				slinex++;
				slinewidth--;
			}
			ScaleLine ();
			break;			// the rest of the shape is gone
		}
	}


//
// scale to the right
//
	slinex = xcenter;
	stopx = shape->rightpix;
	if (shape->leftpix<31)
	{
		srcx = 31;
		cmdptr = &shape->dataofs[32-shape->leftpix];
	}
	else
	{
		srcx = shape->leftpix-1;
		cmdptr = &shape->dataofs[0];
	}
	slinewidth = 0;

	while ( ++srcx <= stopx && (slinex+=slinewidth)<viewwidth)
	{
		(unsigned)linecmds = *cmdptr++;
		if ( !(slinewidth = comptable->width[srcx]) )
			continue;

		if (slinewidth == 1)
		{
			if (slinex>=0 && wallheight[slinex] < height)
			{
				ScaleLine ();
			}
			continue;
		}

		//
		// handle multi pixel lines
		//
		if (slinex<0)
		{
			if (slinewidth <= -slinex)
				continue;		// still off the left edge

			slinewidth += slinex;
			slinex = 0;
		}
		else
		{
			if (slinex + slinewidth > viewwidth)
				slinewidth = viewwidth-slinex;
		}


		leftvis = (wallheight[slinex] < height);
		rightvis = (wallheight[slinex+slinewidth-1] < height);

		if (leftvis)
		{
			if (rightvis)
			{
				ScaleLine ();
			}
			else
			{
				while (wallheight[slinex+slinewidth-1] >= height)
					slinewidth--;
				ScaleLine ();
				break;			// the rest of the shape is gone
			}
		}
		else
		{
			if (rightvis)
			{
				while (wallheight[slinex] >= height)
				{
					slinex++;
					slinewidth--;
				}
				ScaleLine ();
			}
			else
				continue;		// totally obscured
		}
	}
}



/*
=======================
=
= SimpleScaleShape
=
= NO CLIPPING, height in pixels
=
= Draws a compiled shape at [scale] pixels high
=
= each vertical line of the shape has a pointer to segment data:
= 	end of segment pixel*2 (0 terminates line) used to patch rtl in scaler
= 	top of virtual line with segment in proper place
=	start of segment pixel*2, used to jsl into compiled scaler
=	<repeat>
=
= Setup for call
= --------------
= GC_MODE			read mode 1, write mode 2
= GC_COLORDONTCARE  set to 0, so all reads from video memory return 0xff
= GC_INDEX			pointing at GC_BITMASK
=
=======================
*/

void SimpleScaleShape (int xcenter, int shapenum, unsigned height)
{
	t_compshape	_seg *shape;
	t_compscale far *comptable;
	unsigned	scale,srcx,stopx,tempx;
	int			t;
	unsigned	far *cmdptr;
	boolean		leftvis,rightvis;


	shape = PM_GetSpritePage (shapenum);

	scale = height>>1;
	comptable = scaledirectory[scale];

	*(((unsigned *)&linescale)+1)=FP_SEG(comptable);	// seg of far call
	*(((unsigned *)&linecmds)+1)=(unsigned)shape;		// seg of shape

//
// scale to the left (from pixel 31 to shape->leftpix)
//
	srcx = 32;
	slinex = xcenter;
	stopx = shape->leftpix;
	cmdptr = &shape->dataofs[31-stopx];

	while ( --srcx >=stopx )
	{
		(unsigned)linecmds = *cmdptr--;
		if ( !(slinewidth = comptable->width[srcx]) )
			continue;

		slinex -= slinewidth;
		ScaleLine ();
	}


//
// scale to the right
//
	slinex = xcenter;
	stopx = shape->rightpix;
	if (shape->leftpix<31)
	{
		srcx = 31;
		cmdptr = &shape->dataofs[32-shape->leftpix];
	}
	else
	{
		srcx = shape->leftpix-1;
		cmdptr = &shape->dataofs[0];
	}
	slinewidth = 0;

	while ( ++srcx <= stopx )
	{
		(unsigned)linecmds = *cmdptr++;
		if ( !(slinewidth = comptable->width[srcx]) )
			continue;

		ScaleLine ();
		slinex+=slinewidth;
	}
}




//
// bit mask tables for drawing scaled strips up to eight pixels wide
//
// down here so the STUPID inline assembler doesn't get confused!
//


byte	mapmasks1[4][8] = {
{1 ,3 ,7 ,15,15,15,15,15},
{2 ,6 ,14,14,14,14,14,14},
{4 ,12,12,12,12,12,12,12},
{8 ,8 ,8 ,8 ,8 ,8 ,8 ,8} };

byte	mapmasks2[4][8] = {
{0 ,0 ,0 ,0 ,1 ,3 ,7 ,15},
{0 ,0 ,0 ,1 ,3 ,7 ,15,15},
{0 ,0 ,1 ,3 ,7 ,15,15,15},
{0 ,1 ,3 ,7 ,15,15,15,15} };

byte	mapmasks3[4][8] = {
{0 ,0 ,0 ,0 ,0 ,0 ,0 ,0},
{0 ,0 ,0 ,0 ,0 ,0 ,0 ,1},
{0 ,0 ,0 ,0 ,0 ,0 ,1 ,3},
{0 ,0 ,0 ,0 ,0 ,1 ,3 ,7} };


unsigned	wordmasks[8][8] = {
{0x0080,0x00c0,0x00e0,0x00f0,0x00f8,0x00fc,0x00fe,0x00ff},
{0x0040,0x0060,0x0070,0x0078,0x007c,0x007e,0x007f,0x807f},
{0x0020,0x0030,0x0038,0x003c,0x003e,0x003f,0x803f,0xc03f},
{0x0010,0x0018,0x001c,0x001e,0x001f,0x801f,0xc01f,0xe01f},
{0x0008,0x000c,0x000e,0x000f,0x800f,0xc00f,0xe00f,0xf00f},
{0x0004,0x0006,0x0007,0x8007,0xc007,0xe007,0xf007,0xf807},
{0x0002,0x0003,0x8003,0xc003,0xe003,0xf003,0xf803,0xfc03},
{0x0001,0x8001,0xc001,0xe001,0xf001,0xf801,0xfc01,0xfe01} };

int			slinex,slinewidth;
unsigned	far *linecmds;
long		linescale;
unsigned	maskword;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品三级在线观看| 国产精品素人视频| 日韩欧美123| 精品久久久久久无| 国产三级一区二区| 1024成人网| 五月天激情综合| 精品午夜久久福利影院 | 制服丝袜日韩国产| 777xxx欧美| 久久综合九色综合欧美98| 国产喂奶挤奶一区二区三区| 成人免费在线视频观看| 亚洲国产精品久久人人爱| 蜜桃视频第一区免费观看| 国产精选一区二区三区| 91日韩精品一区| 3d成人h动漫网站入口| 日韩精品一区二区三区老鸭窝| 国产偷v国产偷v亚洲高清| 亚洲色图在线播放| 视频一区在线视频| 国产91对白在线观看九色| 色哟哟一区二区| 欧美成人乱码一区二区三区| 国产精品第四页| 另类小说图片综合网| 97精品视频在线观看自产线路二| 欧美一区二区三区播放老司机| 久久精品人人做| 天堂一区二区在线| 成人a免费在线看| 99re这里只有精品首页| 欧美不卡一区二区三区四区| 18欧美乱大交hd1984| 蜜臀久久99精品久久久久久9| 成人av资源在线观看| 欧洲另类一二三四区| 国产三级一区二区三区| 麻豆国产精品一区二区三区 | 成人在线视频一区| 国产一区在线精品| 最近中文字幕一区二区三区| 狠狠色狠狠色综合日日91app| 欧洲中文字幕精品| 国产精品嫩草影院av蜜臀| 精品亚洲porn| 日韩午夜在线影院| 亚洲国产一区二区视频| 91免费视频网| 国产精品免费看片| 国产九九视频一区二区三区| 日韩一级片在线观看| 亚洲高清免费观看高清完整版在线观看| 亚洲图片欧美色图| 粉嫩av一区二区三区粉嫩 | 中文天堂在线一区| 国产在线一区二区综合免费视频| 欧美亚洲国产一区在线观看网站| 中文字幕亚洲不卡| 成人午夜在线免费| 国产人妖乱国产精品人妖| 久久精品国产999大香线蕉| 欧美色电影在线| 亚洲国产美国国产综合一区二区| 成人黄色软件下载| 国产精品的网站| 91在线高清观看| 亚洲美女视频在线| 色婷婷久久久久swag精品| 亚洲人吸女人奶水| 在线视频一区二区三区| 亚洲夂夂婷婷色拍ww47| 欧美调教femdomvk| 午夜激情综合网| 日韩欧美不卡在线观看视频| 精品一区二区三区免费视频| 久久久精品免费免费| 国产激情91久久精品导航| 国产精品丝袜在线| 在线免费观看成人短视频| 亚洲午夜精品在线| 日韩亚洲欧美高清| 激情欧美一区二区三区在线观看| 精品国产乱码久久久久久牛牛| 精品一区二区三区免费视频| 久久精品亚洲精品国产欧美kt∨| 成人小视频免费在线观看| 亚洲人成伊人成综合网小说| 欧美日韩国产综合一区二区| 亚洲男人都懂的| 色综合久久久久综合| 亚洲h在线观看| 欧美xxxxx牲另类人与| 国产sm精品调教视频网站| 日韩毛片视频在线看| 欧美精选一区二区| 国产高清不卡二三区| 一区二区三区在线观看网站| 欧美tickling网站挠脚心| 成人av手机在线观看| 亚洲6080在线| 国产日韩v精品一区二区| 91成人国产精品| 国产综合色在线视频区| 亚洲一区二区三区自拍| 精品国产一区二区三区四区四| 一二三区精品福利视频| 精品不卡在线视频| 91浏览器入口在线观看| 久久99国产精品尤物| 精品国产成人系列| 99久久久久久| 日本vs亚洲vs韩国一区三区 | 香蕉久久夜色精品国产使用方法 | 国产乱码精品一区二区三| 夜夜爽夜夜爽精品视频| 欧美国产日本韩| 欧美不卡一二三| 国产一区久久久| 天堂蜜桃一区二区三区| 椎名由奈av一区二区三区| 久久久久免费观看| 日韩视频免费观看高清在线视频| 91小视频在线免费看| 国产精品一区二区久久精品爱涩| 亚洲图片欧美综合| 亚洲精品久久久蜜桃| 久久精品水蜜桃av综合天堂| 91精品国产综合久久久久久久 | 国模冰冰炮一区二区| 欧美96一区二区免费视频| 亚洲免费视频中文字幕| 欧美激情综合在线| 精品裸体舞一区二区三区| 777a∨成人精品桃花网| 欧美日韩国产美| 日本高清不卡视频| 91在线视频播放| 成人av在线资源网| 成人免费视频视频在线观看免费| 久久99精品久久只有精品| 秋霞午夜av一区二区三区| 午夜精品福利视频网站| 精品第一国产综合精品aⅴ| av中文字幕在线不卡| 亚洲三级小视频| 欧美伊人久久久久久久久影院| 国产高清久久久久| 麻豆一区二区99久久久久| 亚洲精品成人悠悠色影视| 久久久久久久国产精品影院| 欧美一区二区福利在线| 在线视频你懂得一区| www.亚洲激情.com| 日韩av成人高清| 国产精品国产三级国产aⅴ入口| 精品福利在线导航| 精品国产自在久精品国产| 99久久久久久| 成人美女在线视频| 捆绑调教一区二区三区| 午夜视频一区二区三区| 亚洲免费看黄网站| 国产精品国产自产拍高清av王其| 精品国产亚洲一区二区三区在线观看| 国产精品综合久久| 麻豆精品视频在线观看| 91免费视频观看| 欧美激情综合网| 久久se精品一区二区| 91成人网在线| 亚洲特级片在线| 国产精品影视在线| 精品免费视频一区二区| 日韩精品色哟哟| 日本高清不卡视频| 综合欧美一区二区三区| 福利一区在线观看| 精品国产免费人成在线观看| 偷窥少妇高潮呻吟av久久免费| 91在线播放网址| 中文字幕制服丝袜一区二区三区| 国产真实乱对白精彩久久| 欧美成人精品3d动漫h| 午夜成人在线视频| 欧美四级电影网| 亚洲老司机在线| 91丝袜高跟美女视频| 日本一区二区不卡视频| 福利91精品一区二区三区| 久久久三级国产网站| 国产一区二区视频在线| 精品999在线播放| 久久超碰97中文字幕| 日韩欧美成人一区| 狠狠网亚洲精品| 久久久久久久久久久久久女国产乱| 久久 天天综合| 国产午夜精品一区二区三区嫩草 |