コード例 #1
0
DWORD CBUtils::HSLtoRGB(BYTE InH, BYTE InS, BYTE InL)
{
	float H = InH / 255.0f;
	float S = InS / 255.0f;
	float L = InL / 255.0f;

	BYTE R, G, B;


	if ( S == 0 )
	{
		R = L * 255;
		G = L * 255;
		B = L * 255;
	}
	else
	{
		float var_1, var_2;

		if(L < 0.5) var_2 = L * (1.0 + S);
		else var_2 = (L + S) - (S * L);

		var_1 = 2.0f * L - var_2;

		R = 255 * Hue2RGB(var_1, var_2, H + (1.0f / 3.0f));
		G = 255 * Hue2RGB(var_1, var_2, H);
		B = 255 * Hue2RGB(var_1, var_2, H - (1.0f / 3.0f));
	}
	return DRGBA(255, R, G, B);
}
コード例 #2
0
HRESULT CPartParticle::Display(CPartEmitter* Emitter)
{
	if(!m_Sprite) return E_FAIL;
	if(m_IsDead) return S_OK;

	m_Sprite->GetCurrentFrame();
	return m_Sprite->Display(m_Pos.x, m_Pos.y,
							NULL,
							m_Scale, m_Scale,
							DRGBA(255, 255, 255, m_CurrentAlpha),
							m_Rotation,
							Emitter->m_BlendMode);
}
コード例 #3
0
ファイル: BFontTT.cpp プロジェクト: somaen/Wintermute-git
void CBFontTT::DrawText(byte  *Text, int X, int Y, int Width, TTextAlign Align, int MaxHeight, int MaxLength) {
	if (Text == NULL || strcmp((char *)Text, "") == 0) return;

	WideString text;

	if (Game->m_TextEncoding == TEXT_UTF8) text = StringUtil::Utf8ToWide((char *)Text);
	else text = StringUtil::AnsiToWide((char *)Text);

	if (MaxLength >= 0 && text.length() > MaxLength) text = text.substr(0, MaxLength);

	CBRenderSDL *m_Renderer = (CBRenderSDL *)Game->m_Renderer;

	// find cached surface, if exists
	int MinPriority = INT_MAX;
	int MinIndex = -1;
	CBSurface *Surface = NULL;
	int textOffset = 0;

	for (int i = 0; i < NUM_CACHED_TEXTS; i++) {
		if (m_CachedTexts[i] == NULL) {
			MinPriority = 0;
			MinIndex = i;
		} else {
			if (m_CachedTexts[i]->m_Text == text && m_CachedTexts[i]->m_Align == Align && m_CachedTexts[i]->m_Width == Width && m_CachedTexts[i]->m_MaxHeight == MaxHeight && m_CachedTexts[i]->m_MaxLength == MaxLength) {
				Surface = m_CachedTexts[i]->m_Surface;
				textOffset = m_CachedTexts[i]->m_TextOffset;
				m_CachedTexts[i]->m_Priority++;
				m_CachedTexts[i]->m_Marked = true;
				break;
			} else {
				if (m_CachedTexts[i]->m_Priority < MinPriority) {
					MinPriority = m_CachedTexts[i]->m_Priority;
					MinIndex = i;
				}
			}
		}
	}

	// not found, create one
	if (!Surface) {
		Surface = RenderTextToTexture(text, Width, Align, MaxHeight, textOffset);
		if (Surface) {
			// write surface to cache
			if (m_CachedTexts[MinIndex] != NULL) delete m_CachedTexts[MinIndex];
			m_CachedTexts[MinIndex] = new CBCachedTTFontText;

			m_CachedTexts[MinIndex]->m_Surface = Surface;
			m_CachedTexts[MinIndex]->m_Align = Align;
			m_CachedTexts[MinIndex]->m_Width = Width;
			m_CachedTexts[MinIndex]->m_MaxHeight = MaxHeight;
			m_CachedTexts[MinIndex]->m_MaxLength = MaxLength;
			m_CachedTexts[MinIndex]->m_Priority = 1;
			m_CachedTexts[MinIndex]->m_Text = text;
			m_CachedTexts[MinIndex]->m_TextOffset = textOffset;
			m_CachedTexts[MinIndex]->m_Marked = true;
		}
	}


	// and paint it
	if (Surface) {
		RECT rc;
		CBPlatform::SetRect(&rc, 0, 0, Surface->GetWidth(), Surface->GetHeight());
		for (int i = 0; i < m_Layers.GetSize(); i++) {
			uint32 Color = m_Layers[i]->m_Color;
			uint32 OrigForceAlpha = m_Renderer->m_ForceAlphaColor;
			if (m_Renderer->m_ForceAlphaColor != 0) {
				Color = DRGBA(D3DCOLGetR(Color), D3DCOLGetG(Color), D3DCOLGetB(Color), D3DCOLGetA(m_Renderer->m_ForceAlphaColor));
				m_Renderer->m_ForceAlphaColor = 0;
			}
			Surface->DisplayTransOffset(X, Y - textOffset, rc, Color, BLEND_NORMAL, false, false, m_Layers[i]->m_OffsetX, m_Layers[i]->m_OffsetY);

			m_Renderer->m_ForceAlphaColor = OrigForceAlpha;
		}
	}


}
コード例 #4
0
ファイル: AdRegion.cpp プロジェクト: somaen/Wintermute-git
TOKEN_DEF_END
//////////////////////////////////////////////////////////////////////////
HRESULT CAdRegion::LoadBuffer(byte  *Buffer, bool Complete) {
	TOKEN_TABLE_START(commands)
	TOKEN_TABLE(REGION)
	TOKEN_TABLE(TEMPLATE)
	TOKEN_TABLE(NAME)
	TOKEN_TABLE(ACTIVE)
	TOKEN_TABLE(ZOOM)
	TOKEN_TABLE(SCALE)
	TOKEN_TABLE(BLOCKED)
	TOKEN_TABLE(DECORATION)
	TOKEN_TABLE(POINT)
	TOKEN_TABLE(ALPHA_COLOR)
	TOKEN_TABLE(ALPHA)
	TOKEN_TABLE(EDITOR_SELECTED_POINT)
	TOKEN_TABLE(EDITOR_SELECTED)
	TOKEN_TABLE(SCRIPT)
	TOKEN_TABLE(CAPTION)
	TOKEN_TABLE(PROPERTY)
	TOKEN_TABLE(EDITOR_PROPERTY)
	TOKEN_TABLE_END

	byte *params;
	int cmd;
	CBParser parser(Game);

	if (Complete) {
		if (parser.GetCommand((char **)&Buffer, commands, (char **)&params) != TOKEN_REGION) {
			Game->LOG(0, "'REGION' keyword expected.");
			return E_FAIL;
		}
		Buffer = params;
	}

	int i;

	for (i = 0; i < m_Points.GetSize(); i++) delete m_Points[i];
	m_Points.RemoveAll();

	int ar = 255, ag = 255, ab = 255, alpha = 255;

	while ((cmd = parser.GetCommand((char **)&Buffer, commands, (char **)&params)) > 0) {
		switch (cmd) {
		case TOKEN_TEMPLATE:
			if (FAILED(LoadFile((char *)params))) cmd = PARSERR_GENERIC;
			break;

		case TOKEN_NAME:
			SetName((char *)params);
			break;

		case TOKEN_CAPTION:
			SetCaption((char *)params);
			break;

		case TOKEN_ACTIVE:
			parser.ScanStr((char *)params, "%b", &m_Active);
			break;

		case TOKEN_BLOCKED:
			parser.ScanStr((char *)params, "%b", &m_Blocked);
			break;

		case TOKEN_DECORATION:
			parser.ScanStr((char *)params, "%b", &m_Decoration);
			break;

		case TOKEN_ZOOM:
		case TOKEN_SCALE: {
			int i;
			parser.ScanStr((char *)params, "%d", &i);
			m_Zoom = (float)i;
		}
		break;

		case TOKEN_POINT: {
			int x, y;
			parser.ScanStr((char *)params, "%d,%d", &x, &y);
			m_Points.Add(new CBPoint(x, y));
		}
		break;

		case TOKEN_ALPHA_COLOR:
			parser.ScanStr((char *)params, "%d,%d,%d", &ar, &ag, &ab);
			break;

		case TOKEN_ALPHA:
			parser.ScanStr((char *)params, "%d", &alpha);
			break;

		case TOKEN_EDITOR_SELECTED:
			parser.ScanStr((char *)params, "%b", &m_EditorSelected);
			break;

		case TOKEN_EDITOR_SELECTED_POINT:
			parser.ScanStr((char *)params, "%d", &m_EditorSelectedPoint);
			break;

		case TOKEN_SCRIPT:
			AddScript((char *)params);
			break;

		case TOKEN_PROPERTY:
			ParseProperty(params, false);
			break;

		case TOKEN_EDITOR_PROPERTY:
			ParseEditorProperty(params, false);
			break;
		}
	}
	if (cmd == PARSERR_TOKENNOTFOUND) {
		Game->LOG(0, "Syntax error in REGION definition");
		return E_FAIL;
	}

	CreateRegion();

	m_Alpha = DRGBA(ar, ag, ab, alpha);

	return S_OK;
}
コード例 #5
0
void CBFontTT::DrawTextD3D(BYTE* Text, int X, int Y, int Width, TTextAlign Align, int MaxHeight, int MaxLength)
{
	CBRenderD3D* m_Renderer = (CBRenderD3D*)Game->m_Renderer;

	// find cached surface, if exists
	int MinPriority = INT_MAX;
	int MaxPriority = 0;
	int MinIndex = -1;	
	CBSurface* Surface = NULL;
	for(int i=0; i<NUM_CACHED_TEXTS; i++)
	{
		if(m_CachedTexts[i]==NULL)
		{
			MinPriority = 0;
			MinIndex = i;
		}
		else
		{
			MaxPriority = max(MaxPriority, m_CachedTexts[i]->m_Priority);

			if(strcmp(m_CachedTexts[i]->m_Text, (char*)Text)==0 && m_CachedTexts[i]->m_Align==Align && m_CachedTexts[i]->m_Width==Width && m_CachedTexts[i]->m_MaxHeight==MaxHeight && m_CachedTexts[i]->m_MaxLength==MaxLength)
			{
				Surface = m_CachedTexts[i]->m_Surface;
				m_CachedTexts[i]->m_Priority++;
				break;
			}
			else
			{
				if(m_CachedTexts[i]->m_Priority < MinPriority)
				{
					MinPriority = m_CachedTexts[i]->m_Priority;
					MinIndex = i;
				}
			}
		}
	}

	// not found, create one
	if(!Surface)
	{
		if(FAILED(CreateWinFont())) return;

		HDC hDC = ::CreateCompatibleDC(NULL);
		::SetMapMode(hDC, MM_TEXT);
		
		HFONT OldFont = (HFONT)::SelectObject(hDC, m_HFont);

		::SetTextColor(hDC, RGB(255,255,255));
		::SetBkColor(hDC, 0x00000000);
		
		int TextX = 0;
		SetTextAlign(hDC, Align, Width, &TextX);
		
		BYTE* ConvertedText = CBTextUtils::ConvertToNative(Game->m_TextEncoding, Text, MaxLength);

		//ExtTextOut(hDC, 0, 0, ETO_OPAQUE, NULL, (char*)Text, strlen((char*)Text), NULL);
		int Height = FormatText(TextX, 0, ConvertedText, hDC, Width, MaxHeight);
		Height = max(Height, 1);

		DWORD* BitmapBits;
		BITMAPINFO bmi;
		memset(&bmi, 0, sizeof(BITMAPINFO));
		bmi.bmiHeader.biSize        = sizeof(BITMAPINFOHEADER);
		bmi.bmiHeader.biWidth       =  (int)Width;
		bmi.bmiHeader.biHeight      = -(int)Height;
		bmi.bmiHeader.biPlanes      = 1;
		bmi.bmiHeader.biCompression = BI_RGB;
		bmi.bmiHeader.biBitCount    = 32;

		HBITMAP hbmBitmap = ::CreateDIBSection(hDC, &bmi, DIB_RGB_COLORS, (VOID**)&BitmapBits, NULL, 0);
		HBITMAP OldBitmap = (HBITMAP)::SelectObject(hDC, hbmBitmap);

		FormatText(TextX, 0, ConvertedText, hDC, Width, MaxHeight);

		CBImage* Image = new CBImage(Game);
		Image->CreateFromRaw(BitmapBits, Width, Height);
		Surface = Image->CreateSurface();

		delete Image;

		::SelectObject(hDC, OldBitmap);
		::SelectObject(hDC, OldFont);
		::DeleteObject(hbmBitmap);		
		::DeleteDC(hDC);
		
		DeleteWinFont();

		delete []  ConvertedText;

		// write surface to cache
		if(m_CachedTexts[MinIndex]!=NULL) delete m_CachedTexts[MinIndex];
		m_CachedTexts[MinIndex] = new CBCachedTTFontText;
		
		m_CachedTexts[MinIndex]->m_Surface = Surface;
		m_CachedTexts[MinIndex]->m_Align = Align;
		m_CachedTexts[MinIndex]->m_Width = Width;
		m_CachedTexts[MinIndex]->m_MaxHeight = MaxHeight;
		m_CachedTexts[MinIndex]->m_MaxLength = MaxLength;
		m_CachedTexts[MinIndex]->m_Priority = MaxPriority + 1;
		CBUtils::SetString(&m_CachedTexts[MinIndex]->m_Text, (char*)Text);
	}

	// and paint it
	if(Surface)
	{
		RECT rc;
		SetRect(&rc, 0, 0, Surface->GetWidth(), Surface->GetHeight());
		for(int i=0; i<m_Layers.GetSize(); i++)
		{
			DWORD Color = m_Layers[i]->m_Color;
			DWORD OrigForceAlpha = m_Renderer->m_ForceAlphaColor;
			if(m_Renderer->m_ForceAlphaColor!=0)
			{
				Color = DRGBA(D3DCOLGetR(Color), D3DCOLGetG(Color), D3DCOLGetB(Color), D3DCOLGetA(m_Renderer->m_ForceAlphaColor));
				m_Renderer->m_ForceAlphaColor = 0;
			}
			Surface->DisplayTrans(X+m_Layers[i]->m_OffsetX, Y+m_Layers[i]->m_OffsetY, rc, Color);

			m_Renderer->m_ForceAlphaColor = OrigForceAlpha;
		}
	}
}
コード例 #6
0
TOKEN_DEF_END
//////////////////////////////////////////////////////////////////////////
HRESULT CUIWindow::LoadBuffer(BYTE* Buffer, bool Complete)
{
    TOKEN_TABLE_START(commands)
    TOKEN_TABLE (WINDOW)
    TOKEN_TABLE (ALPHA_COLOR)
    TOKEN_TABLE (ALPHA)
    TOKEN_TABLE (TEMPLATE)
    TOKEN_TABLE (DISABLED)
    TOKEN_TABLE (VISIBLE)
    TOKEN_TABLE (BACK_INACTIVE)
    TOKEN_TABLE (BACK)
    TOKEN_TABLE (IMAGE_INACTIVE)
    TOKEN_TABLE (IMAGE)
    TOKEN_TABLE (FONT_INACTIVE)
    TOKEN_TABLE (FONT)
    TOKEN_TABLE (TITLE_ALIGN)
    TOKEN_TABLE (TITLE_RECT)
    TOKEN_TABLE (TITLE)
    TOKEN_TABLE (DRAG_RECT)
    TOKEN_TABLE (X)
    TOKEN_TABLE (Y)
    TOKEN_TABLE (WIDTH)
    TOKEN_TABLE (HEIGHT)
    TOKEN_TABLE (FADE_ALPHA)
    TOKEN_TABLE (FADE_COLOR)
    TOKEN_TABLE (CURSOR)
    TOKEN_TABLE (NAME)
    TOKEN_TABLE (BUTTON)
    TOKEN_TABLE (STATIC)
    TOKEN_TABLE (TRANSPARENT)
    TOKEN_TABLE (SCRIPT)
    TOKEN_TABLE (CAPTION)
    TOKEN_TABLE (PARENT_NOTIFY)
    TOKEN_TABLE (MENU)
    TOKEN_TABLE (IN_GAME)
    TOKEN_TABLE (CLIP_CONTENTS)
    TOKEN_TABLE (PAUSE_MUSIC)
    TOKEN_TABLE (EDITOR_PROPERTY)
    TOKEN_TABLE (EDIT)
    TOKEN_TABLE_END

    BYTE* params;
    int cmd=2;
    CBParser parser(Game);

    int FadeR=0, FadeG=0, FadeB=0, FadeA=0;
    int ar=0, ag=0, ab=0, alpha=0;

    if(Complete)
    {
        if(parser.GetCommand ((char**)&Buffer, commands, (char**)&params)!=TOKEN_WINDOW)
        {
            Game->LOG(0, "'WINDOW' keyword expected.");
            return E_FAIL;
        }
        Buffer = params;
    }

    while (cmd >= PARSERR_TOKENNOTFOUND && (cmd = parser.GetCommand ((char**)&Buffer, commands, (char**)&params)) >= PARSERR_TOKENNOTFOUND)
    {
        switch (cmd)
        {
        case TOKEN_TEMPLATE:
            if(FAILED(LoadFile((char*)params))) cmd = PARSERR_GENERIC;
            break;

        case TOKEN_NAME:
            SetName((char*)params);
            break;

        case TOKEN_CAPTION:
            SetCaption((char*)params);
            break;

        case TOKEN_BACK:
            SAFE_DELETE(m_Back);
            m_Back = new CUITiledImage(Game);
            if(!m_Back || FAILED(m_Back->LoadFile((char*)params)))
            {
                SAFE_DELETE(m_Back);
                cmd = PARSERR_GENERIC;
            }
            break;

        case TOKEN_BACK_INACTIVE:
            SAFE_DELETE(m_BackInactive);
            m_BackInactive = new CUITiledImage(Game);
            if(!m_BackInactive || FAILED(m_BackInactive->LoadFile((char*)params)))
            {
                SAFE_DELETE(m_BackInactive);
                cmd = PARSERR_GENERIC;
            }
            break;

        case TOKEN_IMAGE:
            SAFE_DELETE(m_Image);
            m_Image = new CBSprite(Game);
            if(!m_Image || FAILED(m_Image->LoadFile((char*)params)))
            {
                SAFE_DELETE(m_Image);
                cmd = PARSERR_GENERIC;
            }
            break;

        case TOKEN_IMAGE_INACTIVE:
            SAFE_DELETE(m_ImageInactive);
            m_ImageInactive = new CBSprite(Game);
            if(!m_ImageInactive || FAILED(m_ImageInactive->LoadFile((char*)params)))
            {
                SAFE_DELETE(m_ImageInactive);
                cmd = PARSERR_GENERIC;
            }
            break;

        case TOKEN_FONT:
            if(m_Font) Game->m_FontStorage->RemoveFont(m_Font);
            m_Font = Game->m_FontStorage->AddFont((char*)params);
            if(!m_Font) cmd = PARSERR_GENERIC;
            break;

        case TOKEN_FONT_INACTIVE:
            if(m_FontInactive) Game->m_FontStorage->RemoveFont(m_FontInactive);
            m_FontInactive = Game->m_FontStorage->AddFont((char*)params);
            if(!m_FontInactive) cmd = PARSERR_GENERIC;
            break;

        case TOKEN_TITLE:
            SetText((char*)params);
            Game->m_StringTable->Expand(&m_Text);
            break;

        case TOKEN_TITLE_ALIGN:
            if(CBPlatform::stricmp((char*)params, "left")==0) m_TitleAlign = TAL_LEFT;
            else if(CBPlatform::stricmp((char*)params, "right")==0) m_TitleAlign = TAL_RIGHT;
            else m_TitleAlign = TAL_CENTER;
            break;

        case TOKEN_TITLE_RECT:
            parser.ScanStr((char*)params, "%d,%d,%d,%d", &m_TitleRect.left, &m_TitleRect.top, &m_TitleRect.right, &m_TitleRect.bottom);
            break;

        case TOKEN_DRAG_RECT:
            parser.ScanStr((char*)params, "%d,%d,%d,%d", &m_DragRect.left, &m_DragRect.top, &m_DragRect.right, &m_DragRect.bottom);
            break;

        case TOKEN_X:
            parser.ScanStr((char*)params, "%d", &m_PosX);
            break;

        case TOKEN_Y:
            parser.ScanStr((char*)params, "%d", &m_PosY);
            break;

        case TOKEN_WIDTH:
            parser.ScanStr((char*)params, "%d", &m_Width);
            break;

        case TOKEN_HEIGHT:
            parser.ScanStr((char*)params, "%d", &m_Height);
            break;

        case TOKEN_CURSOR:
            SAFE_DELETE(m_Cursor);
            m_Cursor = new CBSprite(Game);
            if(!m_Cursor || FAILED(m_Cursor->LoadFile((char*)params)))
            {
                SAFE_DELETE(m_Cursor);
                cmd = PARSERR_GENERIC;
            }
            break;

        case TOKEN_BUTTON:
        {
            CUIButton* btn = new CUIButton(Game);
            if(!btn || FAILED(btn->LoadBuffer(params, false)))
            {
                SAFE_DELETE(btn);
                cmd = PARSERR_GENERIC;
            }
            else
            {
                btn->m_Parent = this;
                m_Widgets.Add(btn);
            }
        }
        break;

        case TOKEN_STATIC:
        {
            CUIText* text = new CUIText(Game);
            if(!text || FAILED(text->LoadBuffer(params, false)))
            {
                SAFE_DELETE(text);
                cmd = PARSERR_GENERIC;
            }
            else
            {
                text->m_Parent = this;
                m_Widgets.Add(text);
            }
        }
        break;

        case TOKEN_EDIT:
        {
            CUIEdit* edit = new CUIEdit(Game);
            if(!edit || FAILED(edit->LoadBuffer(params, false)))
            {
                SAFE_DELETE(edit);
                cmd = PARSERR_GENERIC;
            }
            else
            {
                edit->m_Parent = this;
                m_Widgets.Add(edit);
            }
        }
        break;

        case TOKEN_WINDOW:
        {
            CUIWindow* win = new CUIWindow(Game);
            if(!win || FAILED(win->LoadBuffer(params, false)))
            {
                SAFE_DELETE(win);
                cmd = PARSERR_GENERIC;
            }
            else
            {
                win->m_Parent = this;
                m_Widgets.Add(win);
            }
        }
        break;


        case TOKEN_TRANSPARENT:
            parser.ScanStr((char*)params, "%b", &m_Transparent);
            break;

        case TOKEN_SCRIPT:
            AddScript((char*)params);
            break;

        case TOKEN_PARENT_NOTIFY:
            parser.ScanStr((char*)params, "%b", &m_ParentNotify);
            break;

        case TOKEN_PAUSE_MUSIC:
            parser.ScanStr((char*)params, "%b", &m_PauseMusic);
            break;

        case TOKEN_DISABLED:
            parser.ScanStr((char*)params, "%b", &m_Disable);
            break;

        case TOKEN_VISIBLE:
            parser.ScanStr((char*)params, "%b", &m_Visible);
            break;

        case TOKEN_MENU:
            parser.ScanStr((char*)params, "%b", &m_IsMenu);
            break;

        case TOKEN_IN_GAME:
            parser.ScanStr((char*)params, "%b", &m_InGame);
            break;

        case TOKEN_CLIP_CONTENTS:
            parser.ScanStr((char*)params, "%b", &m_ClipContents);
            break;

        case TOKEN_FADE_COLOR:
            parser.ScanStr((char*)params, "%d,%d,%d", &FadeR, &FadeG, &FadeB);
            m_FadeBackground = true;
            break;

        case TOKEN_FADE_ALPHA:
            parser.ScanStr((char*)params, "%d", &FadeA);
            m_FadeBackground = true;
            break;

        case TOKEN_EDITOR_PROPERTY:
            ParseEditorProperty(params, false);
            break;

        case TOKEN_ALPHA_COLOR:
            parser.ScanStr((char*)params, "%d,%d,%d", &ar, &ag, &ab);
            break;

        case TOKEN_ALPHA:
            parser.ScanStr((char*)params, "%d", &alpha);
            break;


        default:
            if(FAILED(Game->WindowLoadHook(this, (char**)&Buffer, (char**)params)))
            {
                cmd = PARSERR_GENERIC;
            }
        }
    }
    if (cmd == PARSERR_TOKENNOTFOUND)
    {
        Game->LOG(0, "Syntax error in WINDOW definition");
        return E_FAIL;
    }
    if (cmd == PARSERR_GENERIC)
    {
        Game->LOG(0, "Error loading WINDOW definition");
        return E_FAIL;
    }

    CorrectSize();

    if(alpha != 0 && ar==0 && ag == 0 && ab == 0)
    {
        ar = ag = ab = 255;
    }
    m_AlphaColor = DRGBA(ar, ag, ab, alpha);

    if(m_FadeBackground) m_FadeColor = DRGBA(FadeR, FadeG, FadeB, FadeA);

    m_FocusedWidget = NULL;

    return S_OK;
}
コード例 #7
0
TOKEN_DEF_END
//////////////////////////////////////////////////////////////////////////
HRESULT CAdActor::LoadBuffer(BYTE * Buffer, bool Complete)
{
	TOKEN_TABLE_START(commands)
		TOKEN_TABLE (ACTOR)
		TOKEN_TABLE (X)
		TOKEN_TABLE (Y)
		TOKEN_TABLE (TEMPLATE)
		TOKEN_TABLE (NAME)
		TOKEN_TABLE (SCALABLE)
		TOKEN_TABLE (REGISTRABLE)
		TOKEN_TABLE (INTERACTIVE)
		TOKEN_TABLE (SHADOWABLE)
		TOKEN_TABLE (COLORABLE)
		TOKEN_TABLE (ACTIVE)
		TOKEN_TABLE (WALK)
		TOKEN_TABLE (STAND)
		TOKEN_TABLE (TALK_SPECIAL)
		TOKEN_TABLE (TALK)
		TOKEN_TABLE (TURN_LEFT)
		TOKEN_TABLE (TURN_RIGHT)
		TOKEN_TABLE (EVENTS)
		TOKEN_TABLE (FONT)
		TOKEN_TABLE (CURSOR)
		TOKEN_TABLE (SCRIPT)
		TOKEN_TABLE (SOUND_VOLUME)
		TOKEN_TABLE (SOUND_PANNING)
		TOKEN_TABLE (CAPTION)
		TOKEN_TABLE (PROPERTY)
		TOKEN_TABLE (BLOCKED_REGION)
		TOKEN_TABLE (WAYPOINTS)
		TOKEN_TABLE (IGNORE_ITEMS)
		TOKEN_TABLE (ROTABLE)
		TOKEN_TABLE (ROTATABLE)
		TOKEN_TABLE (ALPHA_COLOR)
		TOKEN_TABLE (SCALE)
		TOKEN_TABLE (RELATIVE_SCALE)
		TOKEN_TABLE (ALPHA)
		TOKEN_TABLE (EDITOR_PROPERTY)
		TOKEN_TABLE (ANIMATION)
	TOKEN_TABLE_END
	
	BYTE* params;
	int cmd;
	CBParser parser(Game);

	if(Complete)
	{
		if(parser.GetCommand ((char**)&Buffer, commands, (char**)&params)!=TOKEN_ACTOR)
		{
			Game->LOG(0, "'ACTOR' keyword expected.");
			return E_FAIL;
		}
		Buffer = params;
	}

	CAdGame* AdGame = (CAdGame*)Game;
	CAdSpriteSet* spr = NULL;
	int ar=0, ag=0, ab=0, alpha=0;
	while ((cmd = parser.GetCommand ((char**)&Buffer, commands, (char**)&params)) > 0)
	{
		switch (cmd)
		{
			case TOKEN_TEMPLATE:
				if(FAILED(LoadFile((char*)params))) cmd = PARSERR_GENERIC;
			break;

			case TOKEN_X:
				parser.ScanStr((char*)params, "%d", &m_PosX);
			break;

			case TOKEN_Y:
				parser.ScanStr((char*)params, "%d", &m_PosY);
			break;

			case TOKEN_NAME:
				SetName((char*)params);
			break;

			case TOKEN_CAPTION:
				SetCaption((char*)params);
			break;

			case TOKEN_FONT:
				SetFont((char*)params);
			break;

			case TOKEN_SCALABLE:
				parser.ScanStr((char*)params, "%b", &m_Zoomable);
			break;

			case TOKEN_ROTABLE:
			case TOKEN_ROTATABLE:
				parser.ScanStr((char*)params, "%b", &m_Rotatable);
			break;

			case TOKEN_REGISTRABLE:
			case TOKEN_INTERACTIVE:
				parser.ScanStr((char*)params, "%b", &m_Registrable);
			break;

			case TOKEN_SHADOWABLE:
			case TOKEN_COLORABLE:
				parser.ScanStr((char*)params, "%b", &m_Shadowable);
			break;

			case TOKEN_ACTIVE:
				parser.ScanStr((char*)params, "%b", &m_Active);
			break;

			case TOKEN_WALK:
				SAFE_DELETE(m_WalkSprite);
				spr = new CAdSpriteSet(Game, this);
				if(!spr || FAILED(spr->LoadBuffer(params, true, AdGame->m_TexWalkLifeTime, CACHE_HALF))) cmd = PARSERR_GENERIC;
				else m_WalkSprite = spr;
			break;

			case TOKEN_TALK:
				spr = new CAdSpriteSet(Game, this);
				if(!spr || FAILED(spr->LoadBuffer(params, true, AdGame->m_TexTalkLifeTime))) cmd = PARSERR_GENERIC;
				else m_TalkSprites.Add(spr);
			break;

			case TOKEN_TALK_SPECIAL:
				spr = new CAdSpriteSet(Game, this);
				if(!spr || FAILED(spr->LoadBuffer(params, true, AdGame->m_TexTalkLifeTime))) cmd = PARSERR_GENERIC;
				else m_TalkSpritesEx.Add(spr);
			break;

			case TOKEN_STAND:
				SAFE_DELETE(m_StandSprite);
				spr = new CAdSpriteSet(Game, this);
				if(!spr || FAILED(spr->LoadBuffer(params, true, AdGame->m_TexStandLifeTime))) cmd = PARSERR_GENERIC;
				else m_StandSprite = spr;
			break;

			case TOKEN_TURN_LEFT:
				SAFE_DELETE(m_TurnLeftSprite);
				spr = new CAdSpriteSet(Game, this);
				if(!spr || FAILED(spr->LoadBuffer(params, true))) cmd = PARSERR_GENERIC;
				else m_TurnLeftSprite = spr;
			break;

			case TOKEN_TURN_RIGHT:
				SAFE_DELETE(m_TurnRightSprite);
				spr = new CAdSpriteSet(Game, this);
				if(!spr || FAILED(spr->LoadBuffer(params, true))) cmd = PARSERR_GENERIC;
				else m_TurnRightSprite = spr;
			break;

			case TOKEN_SCRIPT:
				AddScript((char*)params);
			break;

			case TOKEN_CURSOR:
				SAFE_DELETE(m_Cursor);
				m_Cursor = new CBSprite(Game);
				if(!m_Cursor || FAILED(m_Cursor->LoadFile((char*)params)))
				{
					SAFE_DELETE(m_Cursor);
					cmd = PARSERR_GENERIC;
				}
			break;

			case TOKEN_SOUND_VOLUME:
				parser.ScanStr((char*)params, "%d", &m_SFXVolume);
			break;

			case TOKEN_SCALE:
			{
				int s;
				parser.ScanStr((char*)params, "%d", &s);
				m_Scale = (float)s;

			}
			break;

			case TOKEN_RELATIVE_SCALE:
			{
				int s;
				parser.ScanStr((char*)params, "%d", &s);
				m_RelativeScale = (float)s;

			}
			break;

			case TOKEN_SOUND_PANNING:
				parser.ScanStr((char*)params, "%b", &m_AutoSoundPanning);
			break;

			case TOKEN_PROPERTY:
				ParseProperty(params, false);
			break;

			case TOKEN_BLOCKED_REGION:
			{
				SAFE_DELETE(m_BlockRegion);
				SAFE_DELETE(m_CurrentBlockRegion);
				CBRegion* rgn = new CBRegion(Game);
				CBRegion* crgn = new CBRegion(Game);
				if(!rgn || !crgn || FAILED(rgn->LoadBuffer(params, false)))
				{
					SAFE_DELETE(m_BlockRegion);
					SAFE_DELETE(m_CurrentBlockRegion);
					cmd = PARSERR_GENERIC;
				}
				else{
					m_BlockRegion = rgn;
					m_CurrentBlockRegion = crgn;
					m_CurrentBlockRegion->Mimic(m_BlockRegion);
				}
			}
			break;

			case TOKEN_WAYPOINTS:
			{
				SAFE_DELETE(m_WptGroup);
				SAFE_DELETE(m_CurrentWptGroup);
				CAdWaypointGroup* wpt = new CAdWaypointGroup(Game);
				CAdWaypointGroup* cwpt = new CAdWaypointGroup(Game);
				if(!wpt || !cwpt || FAILED(wpt->LoadBuffer(params, false)))
				{
					SAFE_DELETE(m_WptGroup);
					SAFE_DELETE(m_CurrentWptGroup);
					cmd = PARSERR_GENERIC;
				}
				else{
					m_WptGroup = wpt;
					m_CurrentWptGroup = cwpt;
					m_CurrentWptGroup->Mimic(m_WptGroup);
				}
			}
			break;

			case TOKEN_IGNORE_ITEMS:
				parser.ScanStr((char*)params, "%b", &m_IgnoreItems);
			break;

			case TOKEN_ALPHA_COLOR:
				parser.ScanStr((char*)params, "%d,%d,%d", &ar, &ag, &ab);
			break;

			case TOKEN_ALPHA:
				parser.ScanStr((char*)params, "%d", &alpha);
			break;

			case TOKEN_EDITOR_PROPERTY:
				ParseEditorProperty(params, false);
			break;

			case TOKEN_ANIMATION:
			{
				CAdSpriteSet* Anim = new CAdSpriteSet(Game, this);
				if(!Anim || FAILED(Anim->LoadBuffer(params, false))) cmd = PARSERR_GENERIC;
				else m_Anims.Add(Anim);
			}
			break;
		}
	}
	if (cmd == PARSERR_TOKENNOTFOUND)
	{
		Game->LOG(0, "Syntax error in ACTOR definition");
		return E_FAIL;
	}
	if (cmd == PARSERR_GENERIC)
	{
		if(spr) delete spr;
		Game->LOG(0, "Error loading ACTOR definition");
		return E_FAIL;
	}
	
	if(alpha != 0 && ar==0 && ag == 0 && ab == 0)
	{
		ar = ag = ab = 255;
	}
	m_AlphaColor = DRGBA(ar, ag, ab, alpha);
	m_State = m_NextState = STATE_READY;

	return S_OK;
}
コード例 #8
0
void CViewProps::OnPropChange(CPLProperty *Prop, CPLCategory *Cat)
{
	if(!m_View) return;
	CProjectDoc* Doc = m_View->GetDocument();
	if(!Doc) return;

	Doc->SetModifiedFlag();

	//////////////////////////////////////////////////////////////////////////
	if(Cat->GetID()=="startup"){

		if(Prop->GetID()=="resolution-x"){
			Doc->m_Settings->m_ResolutionWidth = atoi(Prop->GetValue());
		}

		else if(Prop->GetID()=="resolution-y"){
			Doc->m_Settings->m_ResolutionHeight = atoi(Prop->GetValue());
		}
		
		else if(Prop->GetID()=="reg-path"){
			SAFE_DELETE_ARRAY(Doc->m_Settings->m_RegPath);
			Doc->m_Settings->m_RegPath = new char[strlen(Prop->GetValue())+1];
			strcpy(Doc->m_Settings->m_RegPath, Prop->GetValue());
			//CopyStr(Doc->m_Settings->m_RegPath, Prop->GetValue());
		}

		else if(Prop->GetID()=="require-accel"){
			Doc->m_Settings->m_RequireAcceleration = (((CPLPropertyCombo*)Prop)->GetValueInt()!=0);
		}

		else if(Prop->GetID()=="require-sound"){
			Doc->m_Settings->m_RequireSound = (((CPLPropertyCombo*)Prop)->GetValueInt()!=0);
		}

		else if(Prop->GetID()=="hwtl-mode"){
			Doc->m_Settings->m_TLMode = ((CPLPropertyCombo*)Prop)->GetValueInt();
		}

		else if(Prop->GetID()=="use-d3d9"){
			Doc->m_D3D9 = (((CPLPropertyCombo*)Prop)->GetValueInt()!=0);
		}

		else if(Prop->GetID()=="allow-windowed"){
			Doc->m_Settings->m_AllowWindowed = (((CPLPropertyCombo*)Prop)->GetValueInt()!=0);
		}

		else if(Prop->GetID()=="allow-desktop-res"){
			Doc->m_Settings->m_AllowDesktopRes = (((CPLPropertyCombo*)Prop)->GetValueInt()!=0);
		}

		else if(Prop->GetID()=="allow-advanced"){
			Doc->m_Settings->m_AllowAdvanced = (((CPLPropertyCombo*)Prop)->GetValueInt()!=0);
		}
		
		else if(Prop->GetID()=="allow-access-tab"){
			Doc->m_Settings->m_AllowAccessTab = (((CPLPropertyCombo*)Prop)->GetValueInt()!=0);
		}

		else if(Prop->GetID()=="allow-about-tab"){
			Doc->m_Settings->m_AllowAboutTab = (((CPLPropertyCombo*)Prop)->GetValueInt()!=0);
		}
	}

	//////////////////////////////////////////////////////////////////////////
	else if(Cat->GetID()=="game"){

		if(Prop->GetID()=="caption"){
			Doc->Game->SetCaption((char*)LPCSTR(Prop->GetValue()));
		}

		else if(Prop->GetID()=="name"){
			Doc->Game->SetName((char*)LPCSTR(Prop->GetValue()));
		}

		else if(Prop->GetID()=="subtitles"){
			Doc->m_Settings->m_EdGame->m_Subtitles = (((CPLPropertyCombo*)Prop)->GetValueInt()!=0);
		}

		else if(Prop->GetID()=="video-subtitles"){
			Doc->m_Settings->m_EdGame->m_VideoSubtitles = (((CPLPropertyCombo*)Prop)->GetValueInt()!=0);
		}

		else if(Prop->GetID()=="subtitles-speed"){
			Doc->m_Settings->m_EdGame->m_SubtitlesSpeed = atoi(Prop->GetValue());
		}

		else if(Prop->GetID()=="talk-skip"){
			if(Prop->GetValue()=="right") Doc->m_Settings->m_EdGame->m_TalkSkipButton = TALK_SKIP_RIGHT;
			else if(Prop->GetValue()=="both") Doc->m_Settings->m_EdGame->m_TalkSkipButton = TALK_SKIP_BOTH;
			else Doc->m_Settings->m_EdGame->m_TalkSkipButton = TALK_SKIP_LEFT;
		}
	
	}

	
	//////////////////////////////////////////////////////////////////////////
	else if(Cat->GetID()=="save"){

		if(Prop->GetID()=="personal-save"){
			Doc->m_Settings->m_EdGame->m_PersonalizedSave = (((CPLPropertyCombo*)Prop)->GetValueInt()!=0);
		}

		else if(Prop->GetID()=="save-path"){
			CBUtils::SetString(&Doc->m_Settings->m_EdGame->m_LocalSaveDir, (char*)LPCSTR(Prop->GetValue()));
		}

		else if(Prop->GetID()=="thumbnail-width"){
			Doc->m_Settings->m_EdGame->m_ThumbnailWidth = atoi(Prop->GetValue());
		}

		else if(Prop->GetID()=="thumbnail-height"){
			Doc->m_Settings->m_EdGame->m_ThumbnailHeight = atoi(Prop->GetValue());
		}

		else if(Prop->GetID()=="indicator-x"){
			Doc->m_Settings->m_EdGame->m_IndicatorX = atoi(Prop->GetValue());
		}
		
		else if(Prop->GetID()=="indicator-y"){
			Doc->m_Settings->m_EdGame->m_IndicatorY = atoi(Prop->GetValue());
		}

		else if(Prop->GetID()=="indicator-width"){
			Doc->m_Settings->m_EdGame->m_IndicatorWidth = atoi(Prop->GetValue());
		}

		else if(Prop->GetID()=="indicator-height"){
			Doc->m_Settings->m_EdGame->m_IndicatorHeight = atoi(Prop->GetValue());
		}

		else if(Prop->GetID()=="indicator-color"){
			BYTE r, g, b;
			CPLPropertyColor* ColProp = (CPLPropertyColor*)Prop;
			ColProp->GetRGB(r, g, b);
			Doc->m_Settings->m_EdGame->m_IndicatorColor = DRGBA(r, g, b, D3DCOLGetA(Doc->m_Settings->m_EdGame->m_IndicatorColor));
		}

		else if(Prop->GetID()=="indicator-alpha"){
			Doc->m_Settings->m_EdGame->m_IndicatorColor = DRGBA(D3DCOLGetR(Doc->m_Settings->m_EdGame->m_IndicatorColor), D3DCOLGetG(Doc->m_Settings->m_EdGame->m_IndicatorColor), D3DCOLGetB(Doc->m_Settings->m_EdGame->m_IndicatorColor), atoi(Prop->GetValue()));
		}

		else if(Prop->GetID()=="save-ext"){
			CBUtils::SetString(&Doc->m_Settings->m_SavedGameExt, (char*)LPCSTR(Prop->GetValue()));
		}

		else if(Prop->GetID()=="rich-save"){
			Doc->m_Settings->m_RichSavedGames = (((CPLPropertyCombo*)Prop)->GetValueInt()!=0);
		}

	}


	//////////////////////////////////////////////////////////////////////////
	else if(Cat->GetID()=="debug"){

		if(Prop->GetID()=="debug-mode"){
			Doc->m_DebugMode = (((CPLPropertyCombo*)Prop)->GetValueInt()!=0);
		}

		else if(Prop->GetID()=="show-fps"){
			Doc->m_ShowFPS = (((CPLPropertyCombo*)Prop)->GetValueInt()!=0);
		}

		else if(Prop->GetID()=="allow-windowed"){
			Doc->m_AllowWindowed = (((CPLPropertyCombo*)Prop)->GetValueInt()!=0);
		}

		else if(Prop->GetID()=="console-mode"){
			Doc->m_ConsoleMode = ((CPLPropertyCombo*)Prop)->GetValueInt();
		}

	}


	//////////////////////////////////////////////////////////////////////////
	else if(Cat->GetID()=="package" && m_CurrentPackage){

		if(Prop->GetID()=="description"){
			m_CurrentPackage->m_Description = Prop->GetValue();
		}

		else if(Prop->GetID()=="cd"){
			m_CurrentPackage->m_CD = atoi(Prop->GetValue());
		}

		else if(Prop->GetID()=="priority"){
			m_CurrentPackage->m_Priority = atoi(Prop->GetValue());
		}

	}

}
コード例 #9
0
TOKEN_DEF_END
//////////////////////////////////////////////////////////////////////////
HRESULT CAdItem::LoadBuffer(BYTE* Buffer, bool Complete)
{
	TOKEN_TABLE_START(commands)
		TOKEN_TABLE (ITEM)
		TOKEN_TABLE (TEMPLATE)
		TOKEN_TABLE (CURSOR_HOVER)
		TOKEN_TABLE (CURSOR_COMBINED)
		TOKEN_TABLE (CURSOR)
		TOKEN_TABLE (NAME)
		TOKEN_TABLE (IMAGE_HOVER)
		TOKEN_TABLE (IMAGE)
		TOKEN_TABLE (EVENTS)
		TOKEN_TABLE (SCRIPT)
		TOKEN_TABLE (CAPTION)
		TOKEN_TABLE (PROPERTY)
		TOKEN_TABLE (EDITOR_PROPERTY)
		TOKEN_TABLE (FONT)
		TOKEN_TABLE (ALPHA_COLOR)
		TOKEN_TABLE (ALPHA)
		TOKEN_TABLE (TALK_SPECIAL)
		TOKEN_TABLE (TALK)
		TOKEN_TABLE (SPRITE_HOVER)
		TOKEN_TABLE (SPRITE)
		TOKEN_TABLE (DISPLAY_AMOUNT)
		TOKEN_TABLE (AMOUNT_OFFSET_X)
		TOKEN_TABLE (AMOUNT_OFFSET_Y)
		TOKEN_TABLE (AMOUNT_ALIGN)
		TOKEN_TABLE (AMOUNT_STRING)
		TOKEN_TABLE (AMOUNT)
	TOKEN_TABLE_END
	
	BYTE* params;
	int cmd=2;
	CBParser parser(Game);

	if(Complete){
		if(parser.GetCommand ((char**)&Buffer, commands, (char**)&params)!=TOKEN_ITEM){
			Game->LOG(0, "'ITEM' keyword expected.");
			return E_FAIL;
		}
		Buffer = params;
	}

	int ar=0, ag=0, ab=0, alpha=255;
	while (cmd>0 && (cmd = parser.GetCommand ((char**)&Buffer, commands, (char**)&params)) > 0)
	{
		switch (cmd)
		{
			case TOKEN_TEMPLATE:
				if(FAILED(LoadFile((char*)params))) cmd = PARSERR_GENERIC;
			break;

			case TOKEN_NAME:
				SetName((char*)params);
			break;

			case TOKEN_FONT:
				SetFont((char*)params);
			break;

			case TOKEN_CAPTION:
				SetCaption((char*)params);
			break;

			case TOKEN_IMAGE:
			case TOKEN_SPRITE:
				SAFE_DELETE(m_Sprite);
				m_Sprite = new CBSprite(Game, this);
				if(!m_Sprite || FAILED(m_Sprite->LoadFile((char*)params, ((CAdGame*)Game)->m_TexItemLifeTime))){
					SAFE_DELETE(m_Sprite);
					cmd = PARSERR_GENERIC;
				}
			break;

			case TOKEN_IMAGE_HOVER:
			case TOKEN_SPRITE_HOVER:
				SAFE_DELETE(m_SpriteHover);
				m_SpriteHover = new CBSprite(Game, this);
				if(!m_SpriteHover || FAILED(m_SpriteHover->LoadFile((char*)params, ((CAdGame*)Game)->m_TexItemLifeTime))){
					SAFE_DELETE(m_SpriteHover);
					cmd = PARSERR_GENERIC;
				}
			break;

			case TOKEN_AMOUNT:
				parser.ScanStr((char*)params, "%d", &m_Amount);
			break;

			case TOKEN_DISPLAY_AMOUNT:
				parser.ScanStr((char*)params, "%b", &m_DisplayAmount);
			break;

			case TOKEN_AMOUNT_OFFSET_X:
				parser.ScanStr((char*)params, "%d", &m_AmountOffsetX);
			break;

			case TOKEN_AMOUNT_OFFSET_Y:
				parser.ScanStr((char*)params, "%d", &m_AmountOffsetY);
			break;

			case TOKEN_AMOUNT_ALIGN:
				if(CBPlatform::stricmp((char*)params, "left")==0) m_AmountAlign = TAL_LEFT;
				else if(CBPlatform::stricmp((char*)params, "right")==0) m_AmountAlign = TAL_RIGHT;
				else m_AmountAlign = TAL_CENTER;
			break;

			case TOKEN_AMOUNT_STRING:
				CBUtils::SetString(&m_AmountString, (char*)params);
			break;

			case TOKEN_TALK:
			{
				CBSprite* spr = new CBSprite(Game, this);
				if(!spr || FAILED(spr->LoadFile((char*)params, ((CAdGame*)Game)->m_TexTalkLifeTime))) cmd = PARSERR_GENERIC;
				else m_TalkSprites.Add(spr);
			}
			break;

			case TOKEN_TALK_SPECIAL:
			{
				CBSprite* spr = new CBSprite(Game, this);
				if(!spr || FAILED(spr->LoadFile((char*)params, ((CAdGame*)Game)->m_TexTalkLifeTime))) cmd = PARSERR_GENERIC;
				else m_TalkSpritesEx.Add(spr);
			}
			break;

			case TOKEN_CURSOR:
				SAFE_DELETE(m_CursorNormal);
				m_CursorNormal = new CBSprite(Game);
				if(!m_CursorNormal || FAILED(m_CursorNormal->LoadFile((char*)params, ((CAdGame*)Game)->m_TexItemLifeTime))){
					SAFE_DELETE(m_CursorNormal);
					cmd = PARSERR_GENERIC;
				}
			break;

			case TOKEN_CURSOR_HOVER:
				SAFE_DELETE(m_CursorHover);
				m_CursorHover = new CBSprite(Game);
				if(!m_CursorHover || FAILED(m_CursorHover->LoadFile((char*)params, ((CAdGame*)Game)->m_TexItemLifeTime))){
					SAFE_DELETE(m_CursorHover);
					cmd = PARSERR_GENERIC;
				}
			break;

			case TOKEN_CURSOR_COMBINED:
				parser.ScanStr((char*)params, "%b", &m_CursorCombined);
			break;

			case TOKEN_SCRIPT:
				AddScript((char*)params);
			break;

			case TOKEN_PROPERTY:
				ParseProperty(params, false);
			break;

			case TOKEN_ALPHA_COLOR:
				parser.ScanStr((char*)params, "%d,%d,%d", &ar, &ag, &ab);
				break;

			case TOKEN_ALPHA:
				parser.ScanStr((char*)params, "%d", &alpha);
			break;

			case TOKEN_EDITOR_PROPERTY:
				ParseEditorProperty(params, false);
			break;
		}
	}
	if (cmd == PARSERR_TOKENNOTFOUND){
		Game->LOG(0, "Syntax error in ITEM definition");
		return E_FAIL;
	}
	if (cmd == PARSERR_GENERIC){
		Game->LOG(0, "Error loading ITEM definition");
		return E_FAIL;
	}

	if(alpha != 0 && ar==0 && ag == 0 && ab == 0){
		ar = ag = ab = 255;
	}
	m_AlphaColor = DRGBA(ar, ag, ab, alpha);

	return S_OK;
}