コード例 #1
0
ファイル: _mqo.cpp プロジェクト: Github-J/WinGames
static	int		LABEL_GET(char *strOut,	char *strBuf)
{

	if(sys.bError) return 0;				// エラーが出ている場合は処理しない

	int	i, iLen	= 0;

	SPACE_DEL(strBuf, &iLen);				// 先頭の空白を削る
	for(i =	0;;	iLen++)						// strOut にラベルを取り出す
	{
		uchar	a =	strBuf[iLen];
		if((uchar)(a - '0')	<=	9){	strOut[i] =	a; i++;	continue;}	// 数字か?
		if((uchar)(a - 'a')	<  26){	strOut[i] =	a; i++;	continue;}	// 小文字か?
		if((uchar)(a - 'A')	<  26){	strOut[i] =	a; i++;	continue;}	// 大文字か?
		if((uchar)a		   == '_'){	strOut[i] =	a; i++;	continue;}	// アンダーバーか?
		if(ISKANJI(a))												// 全角?
		{
			strOut[i + 0] =	strBuf[iLen	+ 0];
			strOut[i + 1] =	strBuf[iLen	+ 1];
			i += 2,	iLen++;
			continue;
		}
		break;
	}
	strOut[i] =	NULL;
	return iLen;
}
コード例 #2
0
ファイル: dosio.c プロジェクト: josejl1987/neko-tracer
void
file_catname(OEMCHAR *path, const OEMCHAR *filename, int maxlen)
{

	for (; maxlen > 0; path++, maxlen--) {
		if (*path == '\0') {
			break;
		}
	}
	if (maxlen > 0) {
		milstr_ncpy(path, filename, maxlen);
		for (; *path != '\0'; path++) {
			if (!ISKANJI(*path)) {
				path++;
				if (*path == '\0') {
					break;
				}
			} else if (((*path - 0x41) & 0xff) < 26) {
				*path |= 0x20;
			} else if (*path == '\\') {
				*path = '/';
			}
		}
	}
}
コード例 #3
0
ファイル: _mqo.cpp プロジェクト: Github-J/WinGames
/*-----------------------------------------------------------------------------------------*
| <<< コマンド : Scene { >>>				※ シーンは全て読み飛ばされる
*-----------------------------------------------------------------------------------------*/
static	void	ComScene(void)
{
	while(MetaText[iMetaCount] != '}')
	{
		if(ISKANJI(MetaText[iMetaCount])){ iMetaCount++;}
		iMetaCount++;
	}
	iMetaCount++;
}
コード例 #4
0
ファイル: _mqo.cpp プロジェクト: Github-J/WinGames
/*-----------------------------------------------------------------------------------------*
| <<< コマンド : Material >>>
|	入力	bUV = false : uv のチェックを行わない(法線マップを作成する際に使用)
*-----------------------------------------------------------------------------------------*/
static	void	ComMaterial(BOOL bUV)
{
	float	a;

	iMetaCount	   += PARAM_GET(&a,	&MetaText[iMetaCount]);
	meta->iMatCount	= (int)a;				// マテリアル総数
	iMetaCount	   += 1;					// "{" 分移動
											// テクスチャーデータの書き込み位置を設定
	meta->pTex		= &meta->atex[meta->iMatID];
	//--- 各パラメータ抽出 ------------------------------------------
	while(MetaText[iMetaCount] != '}')
	{										// 改行を見つけたら、次へすすむ
		char	str[512];

		if(MetaText[iMetaCount]	== '\r'	&& MetaText[iMetaCount + 1]	== '\n')
		{
			meta->iMatID++;					// マテリアル読み込み終了なので、次へ進める
											// テクスチャーデータの書き込み位置を設定
			meta->pTex  = &meta->atex[meta->iMatID];

			iMetaCount += 2;
			//--- マテリアル名を得る --------------------------------
			int		i  = GET_STRING(str, &MetaText[iMetaCount]);

			if(meta_obj_name_func != NULL)	// オブジェ名を外部へ渡す
			{
				void(*func)(int iNum, char *str);
				func = (void(*)(int iNum, char *str))meta_obj_name_func;
				(*func)(meta->iMatID, str);
			}
			iMetaCount += i;
			//-------------------------------------------------------
		}

		//--- コマンドチェック --------------------------------------
		BOOL	bRet = CommandCheck(bUV);

		//--- 半角・全角チェック ------------------------------------
		if(!bRet)
		{
			//char	str[512];				// ダブルクォーテーション中に コマンドが入っているのを防ぐため、こうする。
			int		i   = GET_STRING(str, &MetaText[iMetaCount]);
			iMetaCount += i;
			if(i ==	0)
			{
				if(ISKANJI(MetaText[iMetaCount])){ iMetaCount += 2;}	// 全角
				else							 { iMetaCount += 1;}	// 半角
			}
		}
	}
	iMetaCount++;
	meta->pTex = NULL;						// テクスチャーデータの書き込み位置をクリアー
}
コード例 #5
0
ファイル: dosio.c プロジェクト: josejl1987/neko-tracer
static int
euckanji1st(const OEMCHAR *str, int pos)
{
	int ret;
	int c;

	for (ret = 0; pos >= 0; ret ^= 1) {
		c = (UINT8)str[pos--];
		if (!ISKANJI(c))
			break;
	}
	return ret;
}
コード例 #6
0
ファイル: dosio.c プロジェクト: josejl1987/neko-tracer
OEMCHAR *
file_getname(const OEMCHAR *path)
{
	const OEMCHAR *ret;

	for (ret = path; *path != '\0'; path++) {
		if (ISKANJI(*path)) {
			path++;
			if (*path == '\0') {
				break;
			}
		} else if (*path == '/') {
			ret = path + 1;
		}
	}
	return (OEMCHAR *)ret;
}
コード例 #7
0
ファイル: _mqo.cpp プロジェクト: Github-J/WinGames
/*------------------------------------------------------------------------------*
| <<< strBuf より文字列を得る >>>
|	※"(ダブルクォーテーション)で始まり、" で終了
|	入力	strBuf = 対象文字列
|	出力	strOut = 取り出した文字列
|	戻り値	取り出した文字数
*------------------------------------------------------------------------------*/
static	int		GET_STRING(char	*strOut, char *strBuf)
{
	
	if(sys.bError){ return 0;}				// エラーが出ている場合は処理しない

	int	i, iLen	= 0;

	//--- 先頭の " を探す -----------------------------------------
	SPACE_DEL(strBuf, &iLen);
	if(strBuf[iLen]	== '"') 
	{
		iLen +=	1;
	}
	else
	{
		return 0;
	}

	//--- 後ろの " を探す -----------------------------------------
	for(i =	0;;i++,	iLen +=	1)
	{
		if(strBuf[iLen]	== NULL)
		{
			return 0;
		}
		else if(strBuf[iLen] ==	'"')
		{
			iLen +=	1;
			break;
		}
		if(ISKANJI(strBuf[iLen]))
		{ 	strOut[i + 0] =	strBuf[iLen	+ 0];
			strOut[i + 1] =	strBuf[iLen	+ 1];
			i++, iLen += 1;
		}
		else
		{
			strOut[i + 0] =	strBuf[iLen];
		}
	}
	
	//--- NULL 処理	-----------------------------------------------
	if(iLen	> 0) strOut[i] = NULL; 
	return iLen;
}
コード例 #8
0
ファイル: dosio.cpp プロジェクト: FREEWING-JP/np2pi
void file_catname(char *path, const char *sjis, int maxlen) {

	char	*p;

	p = path + strlen(path);
	milstr_ncat(path, sjis, maxlen);
	while(1) {
		if (ISKANJI(*p)) {
			if (*(p+1) == '\0') {
				break;
			}
			p++;
		}
		else if ((*p == '/') || (*p == '\\')) {
			*p = ':';
		}
		else if (*p == '\0') {
			break;
		}
		p++;
	}
}
コード例 #9
0
ファイル: _mqo.cpp プロジェクト: Github-J/WinGames
/*-----------------------------------------------------------------------------------------*
| <<< テキストメイン >>>
|	入力	bUV = false : uv のチェックを行わない(法線マップを作成する際に使用)
*-----------------------------------------------------------------------------------------*/
static	void	TextMain_(BOOL bUV)
{

	while(MetaText[iMetaCount] != NULL)					// 文字列の終端ならば処理しない
	{
		//--- コマンドチェック --------------------------------------
		BOOL	bRet = CommandCheck(bUV);

		//--- 半角・全角チェック ------------------------------------
		if(!bRet)
		{
			char	str[4096];							// ダブルクォーテーション中に コマンドが入っているのを防ぐため、こうする。
			int		i   = GET_STRING(str, &MetaText[iMetaCount]);
			iMetaCount += i;
			if(i ==	0)
			{
				if(ISKANJI(MetaText[iMetaCount])){ iMetaCount += 2;}	// 全角
				else							 { iMetaCount += 1;}	// 半角
			}
		}
	}
}
コード例 #10
0
ファイル: _afont.cpp プロジェクト: Github-J/WinGames
/*------------------------------------------------------------------------------*
| <<< アンチフォントをテクスチャーに直書き >>>
|	入力	iID      = 管理番号
|			buf      = VRAM のアドレス
|			usX, usY = 文字の描画座標
|			*str     = 文字(シフトJIS or Ascii)
*------------------------------------------------------------------------------*/
static	void	AFontDraw(int iID, int iTexNum, DWORD *buf, ushort usX, ushort usY, char *str)
{

	AFONT_WORK	*a = &afont[iID];

	int			iW     = d3.fontInfo[a->cFontNum].Width;
	int			iH     = d3.fontInfo[a->cFontNum].Height;
	uint		uiSize = (iW * 2) * (iH * 2);
	TEXTMETRIC	tm;

	//--- 文字コードよりアンチフォントを得る ------------------------
	// a->pBuf に文字の情報が返ってきます
	if(!ISKANJI(str[0]))					// 半角
	{
		AFontPixelGet(iID, *str, &tm);
	}
	else									// 全角
	{
		AFontPixelGet(iID, (((uchar)str[0] << 8 | (uchar)str[1])), &tm);
	}

	//--- VRAM に直で書き込み ---------------------------------------
	uchar	*p   = a->pBuf;

	uint	x, y;
	uint	h         = (uint)  a->gmAnt.gmBlackBoxY;
	uint	w         = (uint)((a->gmAnt.gmBlackBoxX + 3) & 0xfffffffc);
	uint	uiAdr     = 0;

	uint	uiTexSize = (uint)(d3.texInfo[iTexNum].fWidth * d3.texInfo[iTexNum/*TEX_AFONT + iID*/].fHeight);

    for(y = 0; y < h; y++)
	{
        for(x = 0; x < w; x++, uiAdr++)
		{
			// 65 階調で値が返ってくるので、適当に加工する
			int	c = p[uiAdr];
			if(c <= 1){ continue;}
			c = (c - 2) * 4 + 3;
			// 微妙な文字の位置を補正しながら描画
			uint	uiAdr2 = AFONT_ADR(iID,
								  usX + x +				   a->gmAnt.gmptGlyphOrigin.x,
								  usY + y + (tm.tmAscent - a->gmAnt.gmptGlyphOrigin.y));
			if(uiAdr2 >= 0 && uiAdr2 < uiTexSize)
			{
				int		a_ = (uint)(((float)((a->dwCol >> 24) &0xff) * (float)c) / 255.f);
				int		r_ = (uint)(((float)((a->dwCol >> 16) &0xff) * (float)c) / 255.f);
				int		g_ = (uint)(((float)((a->dwCol >>  8) &0xff) * (float)c) / 255.f);
				int		b_ = (uint)(((float)((a->dwCol >>  0) &0xff) * (float)c) / 255.f);

				DWORD	dwCol0 = D3_COL(a_, r_, g_, b_);
				DWORD	dwCol1 = D3_COL(a_,  1,  1,  1);

				buf[uiAdr2] = dwCol0;
				
				// 影をつけてみる
				buf[uiAdr2 + 1] = dwCol1;

				if(buf[uiAdr2 - 1] == 0){ buf[uiAdr2 - 1] = dwCol1;}

				int	h = (int)d3.texInfo[TEX_AFONT + iID].fWidth;

				if(((int)uiAdr2 - (int)h) >= 0 && buf[uiAdr2 - h] == 0){ buf[uiAdr2 - h] = dwCol1;}
				buf[uiAdr2 + h] = dwCol1;
			}
		}
    }
コード例 #11
0
ファイル: _mqo.cpp プロジェクト: Github-J/WinGames
/*-----------------------------------------------------------------------------------------*
| <<< コマンド : Object	 >>>				※可視、不可視をチェックし、不可視なら読み飛ばす
*-----------------------------------------------------------------------------------------*/
static	void	ComObject(void)
{

	char	str[512];							// ダブルクォーテーション中に コマンドが入っているのを防ぐため、こうする。
	//--- 最初のカッコまで文字を進める ------------------------------
	//Text[iCount] = Text[iCount];
	while(MetaText[iMetaCount] != '{')
	{
		int		i   = GET_STRING(str, &MetaText[iMetaCount]);
		iMetaCount += i;
		if(i ==	0)
		{
			if(ISKANJI(MetaText[iMetaCount])){ iMetaCount += 2;}	// 全角
			else					         { iMetaCount += 1;}	// 半角
		}
		/*
		if(meta_obj_name_func != NULL)			// オブジェ名を外部へ渡す
		{
			void(*func)(int iNum, char *str);
			func = (void(*)(int iNum, char *str))meta_obj_name_func;
			(*func)(meta->iObjNum, str);
		}*/
	}
	iMetaCount++;

	//--- 最後のカッコまで文字を進める ------------------------------
	#ifdef	_DEBUG
		strcpy(meta->strName, str);
	#endif

	char	*a = strstr(&MetaText[iMetaCount], "visible");	// visible まで文字を進める
	iMetaCount += (a - &MetaText[iMetaCount]) + 8;
	//iCount += 11;

	if(meta_visible_func != NULL)							// 可視情報を外部へ渡す(現在、未動作)
	{
		void(*func)(int iNum, BOOL b);
		func = (void(*)(int iNum, BOOL b))meta_visible_func;
		//(*func)(meta->iObjNum, Text[iCount] != '0');
		(*func)(meta->iObjNum, true);						// 現在は必ず可視として渡す
	}

	if(!bVisibleSkip || MetaText[iMetaCount] != '0'){ return;}// visible	をチェックする

	iMetaCount++;
	for(;;)
	{
		char	str[512];							// ダブルクォーテーション中に コマンドが入っているのを防ぐため、こうする。
		int		i   = GET_STRING(str, &MetaText[iMetaCount]);
		iMetaCount += i;
		if(i ==	0)
		{											// 全角
			if(ISKANJI(MetaText[iMetaCount]))
			{
				iMetaCount += 2;
			}
			else
			{
				if(MetaText[iMetaCount]	== '\r'	&& MetaText[iMetaCount + 1]	== '\n'	&& MetaText[iMetaCount + 2]	== '}'){ break;}
				iMetaCount += 1;					// 半角
			}
		}
	}
	iMetaCount += 3;
}