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

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

?? oldscale.c

?? wolf3d游戲源代碼!非常不錯(cuò)! 與大家共享! 如果大家又相關(guān)資料還請(qǐng)多多上傳!
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
// 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

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产三级三级三级精品8ⅰ区| 中文字幕中文字幕中文字幕亚洲无线| 亚洲国产一区二区视频| 粉嫩一区二区三区性色av| 精品国产乱码久久久久久牛牛| 亚洲电影在线播放| 在线视频中文字幕一区二区| 国产精品第四页| 粉嫩一区二区三区性色av| 国产香蕉久久精品综合网| 黄色小说综合网站| 精品国产一区二区国模嫣然| 麻豆精品视频在线| 欧美岛国在线观看| 韩国在线一区二区| 久久久夜色精品亚洲| 国产精品亚洲一区二区三区妖精| 久久免费精品国产久精品久久久久| 狠狠色丁香久久婷婷综合丁香| 精品人在线二区三区| 久久97超碰色| 日本麻豆一区二区三区视频| 欧美日韩在线三区| 日韩国产精品91| 日韩区在线观看| 国产一区欧美一区| 国产精品久久久久久久久久免费看 | 日日摸夜夜添夜夜添国产精品| 欧美人xxxx| 麻豆成人久久精品二区三区红| 精品国产不卡一区二区三区| 国产乱码精品一区二区三区忘忧草 | 日本福利一区二区| 亚洲一区二区精品视频| 欧美日韩亚洲另类| 麻豆久久一区二区| 欧美激情一区在线观看| 99久久伊人网影院| 亚洲国产精品久久久久秋霞影院 | 一区二区三区日韩| 在线观看91av| 国产在线播放一区三区四| 亚洲国产成人一区二区三区| 99re成人在线| 天天av天天翘天天综合网色鬼国产 | 91丨九色丨国产丨porny| 亚洲一区影音先锋| 日韩精品一区二区三区四区| 国产成人小视频| 亚洲乱码精品一二三四区日韩在线| 欧美系列日韩一区| 九九**精品视频免费播放| 国产精品人成在线观看免费 | 精品免费国产一区二区三区四区| 国产精品66部| 一区二区视频免费在线观看| 日韩午夜在线影院| av亚洲精华国产精华精| 亚洲成年人网站在线观看| 精品福利在线导航| 色综合久久66| 久久国产精品露脸对白| 国产精品国产三级国产| 正在播放亚洲一区| 懂色av一区二区三区免费观看| 亚洲电影第三页| 中文av一区二区| 欧美人狂配大交3d怪物一区| 国产激情一区二区三区四区| 亚洲一级电影视频| 欧美极品另类videosde| 欧美日韩和欧美的一区二区| 激情综合网天天干| 亚洲一本大道在线| 亚洲国产激情av| 欧美一区二区国产| 日本道精品一区二区三区| 久久av资源网| 亚洲国产美女搞黄色| 国产日韩精品一区| 91.com在线观看| 91亚洲精品乱码久久久久久蜜桃| 韩国三级在线一区| 亚洲不卡在线观看| 亚洲欧洲精品天堂一级 | 欧美人妇做爰xxxⅹ性高电影| 丁香婷婷综合色啪| 蜜臀久久久久久久| 亚洲一区二区五区| 中文字幕视频一区| 久久久午夜精品理论片中文字幕| 4438x亚洲最大成人网| 99国产精品一区| 国产高清不卡二三区| 日本最新不卡在线| 亚洲午夜久久久久久久久电影院| 国产精品日日摸夜夜摸av| 精品国产髙清在线看国产毛片| 欧美色图激情小说| 91亚洲精品乱码久久久久久蜜桃| 国产东北露脸精品视频| 久热成人在线视频| 日日夜夜免费精品视频| 一区二区三区在线观看欧美| 中日韩免费视频中文字幕| 久久精品综合网| 日韩精品一区二区三区中文不卡| 欧美日韩国产精品自在自线| 91色porny| 白白色 亚洲乱淫| 成人少妇影院yyyy| 国产成人aaaa| 国产麻豆成人传媒免费观看| 麻豆91在线观看| 免费av网站大全久久| 日韩福利视频网| 日韩国产成人精品| 香蕉成人啪国产精品视频综合网 | 亚洲狠狠丁香婷婷综合久久久| 国产精品免费久久久久| 中文字幕av不卡| 国产精品久久久久久久浪潮网站 | 欧美国产成人精品| 国产色91在线| 国产三级精品在线| 欧美国产视频在线| 中文在线一区二区| 国产精品久久久久久久久免费相片 | 欧美在线free| 欧美性大战久久久| 欧美麻豆精品久久久久久| 欧美日韩黄视频| 日韩一区二区在线看| 欧美一级日韩免费不卡| 精品国产制服丝袜高跟| 久久青草国产手机看片福利盒子| www成人在线观看| 久久久久久久久久久久久久久99 | 91精品国产丝袜白色高跟鞋| 欧美欧美午夜aⅴ在线观看| 欧美高清激情brazzers| 欧美一区二视频| 日韩欧美高清dvd碟片| 精品国产亚洲在线| 中文字幕不卡三区| 亚洲欧美二区三区| 亚洲国产日韩精品| 麻豆freexxxx性91精品| 国产乱人伦偷精品视频免下载| 成人免费视频播放| 色综合视频在线观看| 欧美日韩国产一区| 欧美v亚洲v综合ⅴ国产v| 久久综合中文字幕| 国产精品美女久久久久aⅴ国产馆| 国产精品不卡一区| 亚洲va天堂va国产va久| 另类综合日韩欧美亚洲| 国产福利91精品一区二区三区| 91美女片黄在线观看| 欧美区视频在线观看| 精品久久一区二区| 国产精品入口麻豆九色| 亚洲综合久久av| 美女免费视频一区二区| 国产成人免费av在线| av成人免费在线观看| 欧美日韩综合不卡| 欧美zozo另类异族| 国产精品福利电影一区二区三区四区| 亚洲一区视频在线| 国产一区二区影院| 色天使久久综合网天天| 这里是久久伊人| 国产精品乱人伦| 午夜电影一区二区| 国产成人免费在线视频| 在线精品视频免费观看| 精品日韩欧美一区二区| 亚洲欧美综合色| 日本麻豆一区二区三区视频| 成人免费视频caoporn| 精品视频资源站| 国产日韩亚洲欧美综合| 亚洲成年人网站在线观看| 国产成人夜色高潮福利影视| 欧美日韩三级在线| 久久九九久久九九| 亚洲国产精品久久久久秋霞影院| 国产一区二区福利| 欧美性色黄大片| 久久免费午夜影院| 亚洲一区日韩精品中文字幕| 国产一区亚洲一区| 欧美三级日韩在线| 国产精品免费丝袜| 另类中文字幕网| 在线观看av一区二区| 国产香蕉久久精品综合网| 午夜欧美2019年伦理 |