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

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

?? oldscale.c

?? Wolf 3D official source code.
?? C
?? 第 1 頁 / 共 2 頁
字號:
// WL_SCALE.C

#include "WL_DEF.H"
#pragma hdrstop

#define OP_RETF	0xcb

/*
=============================================================================

						  GLOBALS

=============================================================================
*/

t_compscale _seg *scaledirectory[MAXSCALEHEIGHT+1];
long			fullscalefarcall[MAXSCALEHEIGHT+1];

int			maxscale,maxscaleshl2;

/*
=============================================================================

						  LOCALS

=============================================================================
*/

t_compscale 	_seg *work;
unsigned BuildCompScale (int height, memptr *finalspot);

int			stepbytwo;

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

/*
==============
=
= BadScale
=
==============
*/

void far BadScale (void)
{
	Quit ("BadScale called!");
}


/*
==========================
=
= SetupScaling
=
==========================
*/

void SetupScaling (int maxscaleheight)
{
	int		i,x,y;
	byte	far *dest;

	maxscaleheight/=2;			// one scaler every two pixels

	maxscale = maxscaleheight-1;
	maxscaleshl2 = maxscale<<2;

//
// free up old scalers
//
	for (i=1;i<MAXSCALEHEIGHT;i++)
	{
		if (scaledirectory[i])
			MM_FreePtr (&(memptr)scaledirectory[i]);
		if (i>=stepbytwo)
			i += 2;
	}
	memset (scaledirectory,0,sizeof(scaledirectory));

	MM_SortMem ();

//
// build the compiled scalers
//
	stepbytwo = viewheight/2;	// save space by double stepping
	MM_GetPtr (&(memptr)work,20000);
	if (mmerror)
		return;

	for (i=1;i<=maxscaleheight;i++)
	{
		BuildCompScale (i*2,&(memptr)scaledirectory[i]);
		if (mmerror)
		{
			MM_FreePtr (&(memptr)work);
			return;
		}
		if (i>=stepbytwo)
			i+= 2;
	}
	MM_FreePtr (&(memptr)work);

//
// compact memory and lock down scalers
//
	MM_SortMem ();
	for (i=1;i<=maxscaleheight;i++)
	{
		MM_SetLock (&(memptr)scaledirectory[i],true);
		fullscalefarcall[i] = (unsigned)scaledirectory[i];
		fullscalefarcall[i] <<=16;
		fullscalefarcall[i] += scaledirectory[i]->codeofs[0];
		if (i>=stepbytwo)
		{
			scaledirectory[i+1] = scaledirectory[i];
			fullscalefarcall[i+1] = fullscalefarcall[i];
			scaledirectory[i+2] = scaledirectory[i];
			fullscalefarcall[i+2] = fullscalefarcall[i];
			i+=2;
		}
	}
	scaledirectory[0] = scaledirectory[1];
	fullscalefarcall[0] = fullscalefarcall[1];

//
// check for oversize wall drawing
//
	for (i=maxscaleheight;i<MAXSCALEHEIGHT;i++)
		fullscalefarcall[i] = (long)BadScale;

}

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

/*
========================
=
= BuildCompScale
=
= Builds a compiled scaler object that will scale a 64 tall object to
= the given height (centered vertically on the screen)
=
= height should be even
=
= Call with
= ---------
= DS:SI		Source for scale
= ES:DI		Dest for scale
=
= Calling the compiled scaler only destroys AL
=
========================
*/

unsigned BuildCompScale (int height, memptr *finalspot)
{
	byte		far *code;

	int			i;
	long		fix,step;
	unsigned	src,totalscaled,totalsize;
	int			startpix,endpix,toppix;


	step = ((long)height<<16) / 64;
	code = &work->code[0];
	toppix = (viewheight-height)/2;
	fix = 0;

	for (src=0;src<=64;src++)
	{
		startpix = fix>>16;
		fix += step;
		endpix = fix>>16;

		if (endpix>startpix)
			work->width[src] = endpix-startpix;
		else
			work->width[src] = 0;

//
// mark the start of the code
//
		work->codeofs[src] = FP_OFF(code);

//
// compile some code if the source pixel generates any screen pixels
//
		startpix+=toppix;
		endpix+=toppix;

		if (startpix == endpix || endpix < 0 || startpix >= viewheight || src == 64)
			continue;

	//
	// mov al,[si+src]
	//
		*code++ = 0x8a;
		*code++ = 0x44;
		*code++ = src;

		for (;startpix<endpix;startpix++)
		{
			if (startpix >= viewheight)
				break;						// off the bottom of the view area
			if (startpix < 0)
				continue;					// not into the view area

		//
		// mov [es:di+heightofs],al
		//
			*code++ = 0x26;
			*code++ = 0x88;
			*code++ = 0x85;
			*((unsigned far *)code)++ = startpix*SCREENBWIDE;
		}

	}

//
// retf
//
	*code++ = 0xcb;

	totalsize = FP_OFF(code);
	MM_GetPtr (finalspot,totalsize);
	if (mmerror)
		return 0;
	_fmemcpy ((byte _seg *)(*finalspot),(byte _seg *)work,totalsize);

	return totalsize;
}


/*
=======================
=
= ScaleLine
=
= linescale should have the high word set to the segment of the scaler
=
=======================
*/

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

byte	mask1,mask2,mask3;


void near ScaleLine (void)
{
asm	mov	cx,WORD PTR [linescale+2]
asm	mov	es,cx						// segment of scaler

asm	mov bp,WORD PTR [linecmds]
asm	mov	dx,SC_INDEX+1				// to set SC_MAPMASK

asm	mov	bx,[slinex]
asm	mov	di,bx
asm	shr	di,2						// X in bytes
asm	add	di,[bufferofs]
asm	and	bx,3
asm	shl	bx,3
asm	add	bx,[slinewidth]				// bx = (pixel*8+pixwidth)
asm	mov	al,BYTE [mapmasks3-1+bx]	// -1 because pixwidth of 1 is first
asm	mov	ds,WORD PTR [linecmds+2]
asm	or	al,al
asm	jz	notthreebyte				// scale across three bytes
asm	jmp	threebyte
notthreebyte:
asm	mov	al,BYTE PTR ss:[mapmasks2-1+bx]	// -1 because pixwidth of 1 is first
asm	or	al,al
asm	jnz	twobyte						// scale across two bytes

//
// one byte scaling
//
asm	mov	al,BYTE PTR ss:[mapmasks1-1+bx]	// -1 because pixwidth of 1 is first
asm	out	dx,al						// set map mask register

scalesingle:

asm	mov	bx,[ds:bp]					// table location of rtl to patch
asm	or	bx,bx
asm	jz	linedone					// 0 signals end of segment list
asm	mov	bx,[es:bx]
asm	mov	dl,[es:bx]					// save old value
asm	mov	BYTE PTR es:[bx],OP_RETF	// patch a RETF in
asm	mov	si,[ds:bp+4]				// table location of entry spot
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	call ss:[linescale]				// scale the segment of pixels

asm	mov	es,cx						// segment of scaler
asm	mov	BYTE PTR es:[bx],dl			// unpatch the RETF
asm	jmp	scalesingle					// do the next segment


//
// done
//
linedone:
asm	mov	ax,ss
asm	mov	ds,ax
return;

//
// two byte scaling
//
twobyte:
asm	mov	ss:[mask2],al
asm	mov	al,BYTE PTR ss:[mapmasks1-1+bx]	// -1 because pixwidth of 1 is first
asm	mov	ss:[mask1],al

scaledouble:

asm	mov	bx,[ds:bp]					// table location of rtl to patch
asm	or	bx,bx
asm	jz	linedone					// 0 signals end of segment list
asm	mov	bx,[es:bx]
asm	mov	cl,[es:bx]					// save old value
asm	mov	BYTE PTR es:[bx],OP_RETF	// patch a RETF in
asm	mov	si,[ds:bp+4]				// table location of entry spot
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	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	scaledouble					// do the next segment


//
// three byte scaling
//
threebyte:
asm	mov	ss:[mask3],al
asm	mov	al,BYTE PTR ss:[mapmasks2-1+bx]	// -1 because pixwidth of 1 is first
asm	mov	ss:[mask2],al
asm	mov	al,BYTE PTR ss:[mapmasks1-1+bx]	// -1 because pixwidth of 1 is first
asm	mov	ss:[mask1],al

scaletriple:

asm	mov	bx,[ds:bp]					// table location of rtl to patch
asm	or	bx,bx
asm	jz	linedone					// 0 signals end of segment list
asm	mov	bx,[es:bx]
asm	mov	cl,[es:bx]					// save old value

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人精品视频一区二区三区尤物| 麻豆精品在线观看| 欧美久久久久久久久久| 国产福利一区在线观看| 亚洲韩国精品一区| 国产精品久久久久影院色老大| 欧美精品一级二级| 91蜜桃婷婷狠狠久久综合9色| 热久久免费视频| 亚洲乱码中文字幕| 久久九九全国免费| 欧美一级夜夜爽| 欧美在线视频日韩| 99国产精品久久久久| 国产乱子轮精品视频| 奇米综合一区二区三区精品视频| 国产精品久久国产精麻豆99网站| 精品国产制服丝袜高跟| 欧美日本视频在线| 91福利视频在线| av一区二区三区四区| 国产成人精品三级麻豆| 久久精品国产99国产精品| 亚洲一区中文在线| 亚洲日本va在线观看| 国产三级欧美三级日产三级99| 日韩欧美在线观看一区二区三区| 欧美日韩在线不卡| 欧美无人高清视频在线观看| 99久久国产综合精品麻豆| 国产精品资源在线| 九九精品一区二区| 日韩国产在线一| 亚洲成va人在线观看| 亚洲综合一二区| 亚洲国产精品天堂| 性感美女极品91精品| 一片黄亚洲嫩模| 一区二区三区不卡视频在线观看 | 色老综合老女人久久久| av不卡免费在线观看| 懂色av噜噜一区二区三区av| 韩国三级中文字幕hd久久精品| 蜜桃视频在线观看一区二区| 日本怡春院一区二区| 亚洲韩国一区二区三区| 亚洲线精品一区二区三区| 亚洲无人区一区| 亚洲妇熟xx妇色黄| 无吗不卡中文字幕| 日韩av电影天堂| 麻豆精品精品国产自在97香蕉| 久久精品二区亚洲w码| 国产在线一区观看| 不卡的av电影| 91老师片黄在线观看| 欧美色精品天天在线观看视频| 欧美日韩一区二区欧美激情| 777精品伊人久久久久大香线蕉| 69成人精品免费视频| 欧美成人性战久久| 久久久亚洲国产美女国产盗摄| 国产亚洲成aⅴ人片在线观看| 欧美国产精品v| 亚洲天堂2014| 日本亚洲欧美天堂免费| 狠狠色综合色综合网络| 成人国产精品免费观看动漫| 色欧美日韩亚洲| 欧美一级搡bbbb搡bbbb| 久久久久久久一区| 国产精品久久久久久久第一福利| 一区二区三区在线不卡| 免费成人在线影院| 成人性生交大片免费看视频在线| 91看片淫黄大片一级在线观看| 欧美色男人天堂| 久久久国产精品麻豆| 亚洲男人的天堂在线aⅴ视频 | 日韩中文字幕一区二区三区| 久久99国产精品免费| 97久久精品人人爽人人爽蜜臀| 欧美三级日韩在线| 亚洲精品一区二区三区四区高清| 一区二区中文字幕在线| 日韩电影免费在线看| 成人国产电影网| 欧美一区二区在线看| 国产精品视频第一区| 日韩精品视频网| 成人97人人超碰人人99| 91精品国产综合久久久蜜臀图片| 欧美国产丝袜视频| 丝袜脚交一区二区| 波多野结衣欧美| 日韩一区二区三区电影| 亚洲视频电影在线| 久久国产成人午夜av影院| 在线视频一区二区免费| 久久青草国产手机看片福利盒子| 亚洲一区二区偷拍精品| 99国产精品久久久| 久久综合色婷婷| 性欧美大战久久久久久久久| www.欧美精品一二区| 日韩一区二区三区四区五区六区| 亚洲美女视频在线| 国产成人在线观看| 91精品国产综合久久国产大片| 亚洲精品成a人| 国产成人精品亚洲777人妖 | 国产乱色国产精品免费视频| 欧美视频在线播放| 亚洲精品久久久蜜桃| av激情综合网| 欧美—级在线免费片| 国产精品亚洲成人| 精品处破学生在线二十三| 偷窥少妇高潮呻吟av久久免费| 在线一区二区三区做爰视频网站| 国产精品久久久久7777按摩| 丁香五精品蜜臀久久久久99网站| 久久综合色一综合色88| 经典三级视频一区| 日韩欧美一区二区视频| 日韩精品欧美精品| 欧美日韩中文字幕精品| 一区二区三区国产精品| 色噜噜夜夜夜综合网| 亚洲免费在线视频一区 二区| eeuss国产一区二区三区| 久久精品一区四区| 国产成人aaa| 日本一区二区免费在线观看视频 | 久久精品国产在热久久| 91.com视频| 免费在线观看日韩欧美| 日韩欧美国产精品一区| 美女www一区二区| 日韩三级在线观看| 久88久久88久久久| 精品成人佐山爱一区二区| 国产揄拍国内精品对白| 精品国产成人系列| 国产黄色精品网站| 中文字幕国产精品一区二区| 97成人超碰视| 亚洲一区在线免费观看| 制服丝袜在线91| 久久国产人妖系列| 国产亚洲一区二区三区| 成人午夜看片网址| 亚洲视频香蕉人妖| 欧美日韩视频专区在线播放| 蜜桃视频在线观看一区二区| 久久久99精品免费观看不卡| av亚洲产国偷v产偷v自拍| 一级女性全黄久久生活片免费| 欧美日韩精品一区二区三区四区 | 成人免费三级在线| 中文字幕日韩一区| 欧美日韩三级一区| 狠狠色丁香婷婷综合久久片| 欧美国产视频在线| 欧美日韩一区二区在线观看视频| 日本特黄久久久高潮| 国产人久久人人人人爽| 色综合久久88色综合天天6 | 免费成人性网站| 国产欧美日韩综合精品一区二区| 91影院在线观看| 蜜臀av性久久久久蜜臀aⅴ | 日韩一区二区三区av| 国产乱子伦一区二区三区国色天香| 亚洲婷婷综合色高清在线| 91精品国产综合久久精品麻豆| 国产成人亚洲综合a∨猫咪| 一区二区三区在线播| 精品国产污污免费网站入口 | 久久国产剧场电影| 国产精品剧情在线亚洲| 欧美久久久久久久久| 国产a视频精品免费观看| 舔着乳尖日韩一区| 久久久久国产精品免费免费搜索| 色综合天天综合狠狠| 日本特黄久久久高潮| 亚洲色图.com| 久久午夜国产精品| 欧美偷拍一区二区| 国产精品自拍网站| 日韩专区在线视频| 中文字幕一区三区| 欧美电影免费提供在线观看| 91无套直看片红桃| 国产精品18久久久久久久网站| 亚洲午夜羞羞片| 国产精品久久久久久久午夜片| 日韩写真欧美这视频| 在线观看中文字幕不卡|