Initial commit of Command & Conquer Renegade source code.

This commit is contained in:
LFeenanEA
2025-02-27 16:39:46 +00:00
parent 74ab8fa5e0
commit 58ed459113
4918 changed files with 1366710 additions and 0 deletions

View File

@@ -0,0 +1,26 @@
/*
** Command & Conquer Renegade(tm)
** Copyright 2025 Electronic Arts Inc.
**
** This program is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
// stdafx.cpp : source file that includes just the standard includes
// vidinit.pch will be the pre-compiled header
// stdafx.obj will contain the pre-compiled type information
#include "stdafx.h"

View File

@@ -0,0 +1,44 @@
/*
** Command & Conquer Renegade(tm)
** Copyright 2025 Electronic Arts Inc.
**
** This program is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//
#if !defined(AFX_STDAFX_H__E0C27A4E_8569_409B_8638_11E930817270__INCLUDED_)
#define AFX_STDAFX_H__E0C27A4E_8569_409B_8638_11E930817270__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers
#include <afxwin.h> // MFC core and standard components
#include <afxext.h> // MFC extensions
#include <afxdtctl.h> // MFC support for Internet Explorer 4 Common Controls
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h> // MFC support for Windows Common Controls
#endif // _AFX_NO_AFXCMN_SUPPORT
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_STDAFX_H__E0C27A4E_8569_409B_8638_11E930817270__INCLUDED_)

View File

@@ -0,0 +1,189 @@
/*
** Command & Conquer Renegade(tm)
** Copyright 2025 Electronic Arts Inc.
**
** This program is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
// SurrenderWnd.cpp : implementation file
//
#include "stdafx.h"
#include "vidinit.h"
#include "SurrenderWnd.h"
#include <camera.h>
#include <scene.h>
#include <ww3d.h>
#include <assetmgr.h>
#include <rawfile.h>
#include <rendobj.h>
#include <hanim.h>
#include <txt2d.h>
#include "convert.h"
#include "defpal.h"
#include "deffont.h"
#include <bsurface.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
static WW3DAssetManager AssetManager;
/////////////////////////////////////////////////////////////////////////////
// CSurrenderWnd
CSurrenderWnd::CSurrenderWnd(CWnd *cwnd, int driver, int width, int height, int bitdepth, bool run_in_window) :
m_CWnd(cwnd),
m_Motion(0),
m_Camera(0),
m_Scene(0),
m_RObj(0),
m_FrameRate(60)
{
LPCTSTR str = AfxRegisterWndClass(CS_NOCLOSE, NULL, NULL, NULL);
if (run_in_window) {
CreateEx(0, str, "Card Test Window", WS_SYSMENU | WS_MINIMIZEBOX | WS_CAPTION|WS_VISIBLE, 0,0,640,480, NULL, NULL, NULL);
} else {
CreateEx(0, str, "Card Test Window", WS_SYSMENU | WS_MINIMIZEBOX | WS_CAPTION|WS_VISIBLE, 0,0,640,480, NULL, NULL, NULL);
}
WW3D::Set_Window(GetSafeHwnd());
m_SubClass = GetWindowLong(GetSafeHwnd(), GWL_WNDPROC);
WW3D::Set_Render_Device(driver, width, height, bitdepth, run_in_window, true);
AssetManager.Set_WW3D_Load_On_Demand(true);
// WW3D::Set_Ext_Swap_Interval(1);
m_Scene = new SimpleSceneClass();
m_TextScene = new SimpleSceneClass();
m_Camera = new CameraClass();
m_Camera->Set_Transform(Matrix3D(1));
m_Camera->Set_Clip_Planes(1.0f, 1000000.0f);
m_Camera->Set_View_Plane(DEG_TO_RAD(45.0f), DEG_TO_RAD(33.0f));
m_TextCamera = NEW_REF(CameraClass, ());
m_TextCamera->Set_View_Plane(Vector2(-1,-1), Vector2(1,1));
m_TextCamera->Set_Position(Vector3(0,0,1));
m_TextCamera->Set_Clip_Planes(0.1, 10.0);
m_RObj = AssetManager.Create_Render_Obj("vidtest");
m_RObj->Set_Transform(Matrix3D(1));
m_Motion = AssetManager.Get_HAnim("vidtest1.vidtest1");
m_MotionTime = GetTickCount();
// m_RObj->Set_Animation(m_Motion, 0.0f, RenderObjClass::ANIM_MODE_MANUAL);
m_RObj->Add(m_Scene);
m_Text = new Text2DObjClass(DefaultFont, "Frame rate = %d", 0, 0, 15, 0, DefaultConvert, false, false, m_FrameRate);
m_Text->Add(m_TextScene);
}
CSurrenderWnd::~CSurrenderWnd()
{
if (m_RObj) {
m_RObj->Set_Animation();
m_RObj->Release_Ref();
}
if (m_Camera) m_Camera->Release_Ref();
if (m_Motion) m_Motion->Release_Ref();
if (m_Text) m_Text->Release_Ref();
if (m_TextCamera) m_TextCamera->Release_Ref();
if (m_Scene) m_Scene->Release_Ref();
if (m_TextScene) m_TextScene->Release_Ref();
AssetManager.Free_Assets();
}
BEGIN_MESSAGE_MAP(CSurrenderWnd, CWnd)
//{{AFX_MSG_MAP(CSurrenderWnd)
ON_WM_PAINT()
ON_WM_CLOSE()
ON_WM_KEYDOWN()
ON_WM_ACTIVATEAPP()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSurrenderWnd message handlers
void CSurrenderWnd::OnPaint()
{
// CPaintDC dc(this); // device context for painting
WW3D::Sync(GetTickCount());
if (m_Motion && m_RObj) {
float rate = m_Motion->Get_Frame_Rate();
// figure out what the current frame is
float currentframe = (GetTickCount() - m_MotionTime) / (1000 / rate);
float numframes = m_Motion->Get_Num_Frames() - 1;
currentframe = fmod(currentframe, numframes);
float frame_rate = 1.0f / (WW3D::Get_Frame_Time() * 0.001f);
m_FrameRate = (0.9f * m_FrameRate) + (0.1f * frame_rate);
m_Text->Set_Text(DefaultFont, "Frame rate = %d", 0, 0, 15, 0, DefaultConvert, false, false, m_FrameRate);
m_RObj->Set_Animation(m_Motion, currentframe);
Matrix3D m = m_RObj->Get_Bone_Transform("camera");
m.Rotate_Y(DEG_TO_RAD(-90.0f));
m.Rotate_Z(DEG_TO_RAD(-90.0f));
m_Camera->Set_Transform(m);
}
// Do not call CWnd::OnPaint() for painting messages
if (!IsIconic()) {
WW3D::Begin_Render(true, true, Vector3(0.0f,0,0));
WW3D::Render(m_Scene, m_Camera, false, false, Vector3(0,0,0));
WW3D::Render(m_TextScene, m_TextCamera, false, false, Vector3(0,0,0));
WW3D::End_Render();
}
}
void CSurrenderWnd::RemoveSubclass()
{
::SetWindowLong(GetSafeHwnd(), GWL_WNDPROC, m_SubClass);
}
void CSurrenderWnd::OnClose()
{
// TODO: Add your message handler code here and/or call default
CWnd::OnClose();
delete this;
}
void CSurrenderWnd::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
if (nChar == VK_ESCAPE) {
m_CWnd->PostMessage(WM_USER + 1, 0xDEADBEEF, 0xDEADBEEF);
} else {
CWnd::OnKeyDown(nChar, nRepCnt, nFlags);
}
}

View File

@@ -0,0 +1,85 @@
/*
** Command & Conquer Renegade(tm)
** Copyright 2025 Electronic Arts Inc.
**
** This program is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#if !defined(AFX_SURRENDERWND_H__33722FC2_8D65_466F_9EF6_F5D6E229C20A__INCLUDED_)
#define AFX_SURRENDERWND_H__33722FC2_8D65_466F_9EF6_F5D6E229C20A__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// SurrenderWnd.h : header file
//
/////////////////////////////////////////////////////////////////////////////
// CSurrenderWnd window
class CameraClass;
class SimpleSceneClass;
class RenderObjClass;
class HAnimClass;
class Text2DObjClass;
class ConvertClass;
class CSurrenderWnd : public CWnd
{
// Construction
public:
CSurrenderWnd(CWnd *cwnd, int driver, int width, int height, int bitdepth, bool run_in_window);
void RemoveSubclass();
// Attributes
public:
CameraClass *m_Camera;
CameraClass *m_TextCamera;
SimpleSceneClass *m_Scene;
SimpleSceneClass *m_TextScene;
RenderObjClass *m_RObj;
Text2DObjClass *m_Text;
HAnimClass *m_Motion;
CWnd *m_CWnd;
int m_MotionTime;
HWND m_RenderHWnd;
int m_FrameRate;
LONG m_SubClass;
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CSurrenderWnd)
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~CSurrenderWnd();
// Generated message map functions
protected:
//{{AFX_MSG(CSurrenderWnd)
afx_msg void OnPaint();
afx_msg void OnClose();
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_SURRENDERWND_H__33722FC2_8D65_466F_9EF6_F5D6E229C20A__INCLUDED_)

View File

@@ -0,0 +1,159 @@
# Microsoft Developer Studio Project File - Name="VidInit" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Application" 0x0101
CFG=VidInit - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "VidInit.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "VidInit.mak" CFG="VidInit - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "VidInit - Win32 Release" (based on "Win32 (x86) Application")
!MESSAGE "VidInit - Win32 Debug" (based on "Win32 (x86) Application")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""$/Commando/Code/Tools/VidInit", RBQDAAAA"
# PROP Scc_LocalPath "."
CPP=cl.exe
MTL=midl.exe
RSC=rc.exe
!IF "$(CFG)" == "VidInit - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 2
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\wwmath" /I "..\..\ww3d" /I "..\..\wwlib" /I "..\..\wwdebug" /I "..\..\wwsaveload" /I "..\..\directx\inc" /I "..\..\srsdk1x\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_AFXDLL" /YX /FD /c
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG" /d "_AFXDLL"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
# ADD LINK32 sr.lib wwsaveload.lib ww3d.lib wwdebug.lib wwlib.lib wwmath.lib winmm.lib ddraw.lib dinput.lib dxguid.lib dsound.lib vfw32.lib wsock32.lib /nologo /subsystem:windows /machine:I386 /out:"Run/VidInit.exe" /libpath:"../../libs/debug" /libpath:"../../srsdk1x/msvc6\lib\release" /libpath:"../../directx\lib"
!ELSEIF "$(CFG)" == "VidInit - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 2
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c
# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\wwmath" /I "..\..\ww3d" /I "..\..\wwlib" /I "..\..\wwdebug" /I "..\..\wwsaveload" /I "..\..\directx\inc" /I "..\..\srsdk1x\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_AFXDLL" /YX /FD /GZ /c
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG" /d "_AFXDLL"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386
# ADD LINK32 srdb.lib wwsaveload.lib ww3d.lib wwdebug.lib wwlib.lib wwmath.lib winmm.lib ddraw.lib dinput.lib dxguid.lib dsound.lib vfw32.lib wsock32.lib /nologo /subsystem:windows /debug /machine:I386 /out:"Run/VidInit.exe" /libpath:"../../libs/debug" /libpath:"../../srsdk1x/msvc6/lib/debug" /libpath:"../../directx\lib"
!ENDIF
# Begin Target
# Name "VidInit - Win32 Release"
# Name "VidInit - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\deffont.cpp
# End Source File
# Begin Source File
SOURCE=.\defpal.cpp
# End Source File
# Begin Source File
SOURCE=.\StdAfx.cpp
# End Source File
# Begin Source File
SOURCE=.\SurrenderWnd.cpp
# End Source File
# Begin Source File
SOURCE=.\vidinit.cpp
# End Source File
# Begin Source File
SOURCE=.\vidinitDlg.cpp
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
SOURCE=.\deffont.h
# End Source File
# Begin Source File
SOURCE=.\defpal.h
# End Source File
# Begin Source File
SOURCE=.\resource.h
# End Source File
# Begin Source File
SOURCE=.\StdAfx.h
# End Source File
# Begin Source File
SOURCE=.\SurrenderWnd.h
# End Source File
# Begin Source File
SOURCE=.\vidinit.h
# End Source File
# Begin Source File
SOURCE=.\vidinitDlg.h
# End Source File
# End Group
# Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# Begin Source File
SOURCE=.\vidinit.rc
# End Source File
# End Group
# End Target
# End Project

View File

@@ -0,0 +1,432 @@
/*
** Command & Conquer Renegade(tm)
** Copyright 2025 Electronic Arts Inc.
**
** This program is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/* $Header: /G/Tools/vidinit/deffont.cpp 1 4/17/00 5:40p Phil_g3 $ */
/***********************************************************************************************
*** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S ***
***********************************************************************************************
* *
* Project Name : G *
* *
* File Name : DEFFONT.CPP *
* *
* Programmer : Scott Kenneth Bowen *
* *
* Start Date : 01/24/00 *
* *
* Last Update : February 2, 2000 [SKB] *
* *
*---------------------------------------------------------------------------------------------*
* Functions: *
* *Load_Font_Data -- Load up font data from a file. *
* Load_Default_Font_Data -- Loads up the data for the default fonts. *
* Release_Default_Font_Data -- Free up the font data stuff. *
* *Build_Font_Palette_From_Ramp -- Create a font palette given a 0.0 - 1.0 value *
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
////////////////////////////////////////////////////////////////////////////////////////////////////
// Include files ///////////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "defpal.h"
#include <wwfont.h>
////////////////////////////////////////////////////////////////////////////////////////////////////
// Local Defines ///////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
// Static Data /////////////////////////////////////////////////////////////////////////////////////
// Define a default font for the program in case one has been loaded from disk.
#pragma warning(disable: 4305 4309)
char DefaultFontData[] = {
242, 22, 0, 5, 14, 0, 20, 0, 216, 1, 186, 2, 46, 21, 18, 16,
0, 225, 11, 10, 186, 2, 214, 2, 186, 2, 3, 3, 186, 2, 186, 2,
186, 2, 186, 2, 186, 2, 186, 2, 186, 2, 186, 2, 186, 2, 186, 2,
186, 2, 186, 2, 27, 3, 72, 3, 186, 2, 186, 2, 186, 2, 186, 2,
186, 2, 186, 2, 117, 3, 162, 3, 186, 2, 186, 2, 186, 2, 186, 2,
117, 3, 162, 3, 207, 3, 207, 3, 225, 3, 186, 2, 237, 3, 17, 4,
62, 4, 98, 4, 113, 4, 140, 4, 167, 4, 202, 4, 230, 4, 245, 4,
254, 4, 10, 5, 50, 5, 86, 5, 113, 5, 149, 5, 185, 5, 221, 5,
1, 6, 37, 6, 73, 6, 109, 6, 145, 6, 169, 6, 196, 6, 232, 6,
252, 6, 32, 7, 68, 7, 113, 7, 149, 7, 185, 7, 221, 7, 1, 8,
37, 8, 73, 8, 109, 8, 145, 8, 163, 8, 199, 8, 235, 8, 15, 9,
60, 9, 50, 5, 96, 9, 132, 9, 168, 9, 204, 9, 240, 9, 20, 10,
56, 10, 92, 10, 137, 10, 173, 10, 209, 10, 245, 10, 16, 11, 56, 11,
83, 11, 103, 11, 118, 11, 133, 11, 161, 11, 197, 11, 225, 11, 5, 12,
33, 12, 69, 12, 105, 12, 141, 12, 159, 12, 189, 12, 145, 8, 225, 12,
4, 13, 32, 13, 60, 13, 96, 13, 132, 13, 160, 13, 188, 13, 215, 13,
243, 13, 15, 14, 50, 14, 78, 14, 114, 14, 142, 14, 169, 14, 187, 14,
214, 14, 239, 14, 23, 15, 67, 15, 103, 15, 139, 15, 175, 15, 211, 15,
247, 15, 27, 16, 59, 16, 95, 16, 131, 16, 167, 16, 194, 16, 221, 16,
248, 16, 28, 17, 64, 17, 100, 17, 135, 17, 180, 17, 216, 17, 252, 17,
28, 18, 64, 18, 100, 18, 144, 18, 180, 18, 216, 18, 252, 18, 32, 19,
77, 19, 117, 19, 167, 19, 203, 19, 230, 19, 10, 20, 46, 20, 82, 20,
127, 20, 163, 20, 191, 20, 0, 0, 0, 0, 0, 0, 0, 0, 141, 12,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 227, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 6, 21, 8, 10, 8, 8, 8, 8, 8, 8,
8, 8, 8, 8, 8, 8, 8, 8, 10, 10, 8, 8, 8, 8, 8, 8,
10, 10, 8, 8, 8, 8, 10, 10, 6, 4, 6, 8, 8, 10, 7, 5,
6, 6, 9, 8, 5, 6, 5, 9, 8, 6, 8, 8, 8, 8, 8, 8,
8, 8, 5, 5, 7, 7, 7, 7, 10, 8, 8, 8, 8, 7, 7, 8,
8, 4, 7, 8, 7, 10, 8, 8, 8, 8, 8, 8, 8, 8, 8, 10,
8, 8, 8, 6, 9, 6, 8, 10, 6, 8, 8, 8, 8, 8, 7, 8,
8, 4, 6, 7, 4, 10, 8, 8, 8, 8, 8, 8, 6, 8, 8, 10,
8, 8, 8, 6, 4, 6, 9, 9, 8, 8, 8, 8, 8, 8, 8, 8,
8, 8, 8, 6, 6, 5, 8, 8, 7, 10, 10, 8, 8, 8, 8, 8,
8, 8, 8, 7, 8, 9, 8, 9, 8, 5, 8, 8, 8, 9, 8, 8,
8, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 48, 51, 51, 0, 51, 33,
33, 3, 19, 17, 17, 2, 35, 33, 33, 2, 19, 17, 17, 2, 35, 33,
33, 2, 48, 34, 34, 0, 48, 51, 51, 3, 0, 51, 17, 17, 50, 51,
19, 34, 34, 17, 17, 19, 2, 48, 34, 34, 19, 2, 0, 0, 0, 19,
2, 0, 0, 0, 19, 50, 51, 51, 51, 19, 17, 17, 17, 17, 35, 34,
34, 34, 34, 0, 0, 51, 3, 0, 48, 19, 2, 51, 51, 33, 2, 19,
18, 34, 0, 35, 33, 2, 0, 48, 34, 0, 0, 0, 48, 51, 0, 0,
0, 48, 33, 3, 0, 0, 48, 17, 50, 0, 51, 51, 17, 33, 3, 19,
17, 17, 17, 2, 35, 34, 17, 33, 2, 0, 48, 17, 34, 0, 0, 48,
33, 2, 0, 0, 48, 34, 0, 0, 0, 48, 51, 0, 0, 0, 51, 33,
0, 0, 48, 19, 33, 0, 0, 51, 17, 33, 51, 3, 19, 17, 17, 17,
2, 35, 17, 33, 34, 2, 48, 18, 33, 0, 0, 0, 35, 33, 0, 0,
0, 48, 34, 0, 0, 0, 48, 51, 0, 0, 0, 51, 33, 3, 0, 48,
19, 17, 50, 0, 51, 17, 17, 33, 3, 19, 17, 17, 17, 2, 51, 51,
33, 34, 2, 0, 48, 33, 0, 0, 0, 48, 33, 0, 0, 0, 48, 34,
0, 0, 0, 48, 51, 0, 0, 0, 48, 33, 0, 0, 0, 48, 33, 0,
0, 51, 51, 33, 51, 3, 19, 17, 17, 17, 2, 35, 17, 17, 33, 2,
48, 18, 17, 34, 0, 0, 35, 33, 2, 0, 0, 48, 34, 0, 0, 51,
3, 19, 2, 19, 2, 19, 2, 19, 2, 19, 2, 35, 2, 19, 2, 35,
2, 51, 51, 3, 19, 18, 2, 19, 18, 2, 35, 34, 2, 0, 51, 3,
0, 48, 19, 50, 3, 51, 17, 17, 2, 19, 18, 34, 2, 35, 17, 33,
3, 51, 18, 18, 2, 19, 17, 33, 2, 35, 18, 34, 0, 0, 35, 2,
0, 48, 51, 0, 51, 3, 51, 33, 51, 19, 2, 19, 18, 50, 33, 2,
35, 33, 18, 34, 0, 48, 34, 33, 50, 0, 48, 19, 34, 33, 3, 51,
33, 18, 18, 2, 19, 34, 35, 33, 2, 35, 2, 48, 34, 0, 48, 51,
0, 0, 51, 33, 3, 0, 19, 18, 2, 0, 19, 18, 2, 0, 35, 33,
50, 0, 19, 18, 33, 0, 19, 18, 34, 0, 35, 17, 33, 0, 48, 34,
34, 0, 48, 51, 0, 51, 33, 0, 19, 33, 0, 19, 34, 0, 35, 2,
0, 0, 51, 3, 48, 19, 2, 51, 33, 2, 19, 34, 0, 19, 2, 0,
19, 50, 0, 35, 33, 3, 48, 18, 2, 0, 35, 2, 51, 3, 0, 19,
50, 0, 35, 33, 3, 48, 18, 2, 0, 19, 2, 48, 19, 2, 51, 33,
2, 19, 34, 0, 35, 2, 0, 48, 51, 51, 3, 0, 48, 33, 19, 2,
0, 51, 18, 33, 50, 0, 19, 17, 17, 33, 0, 35, 18, 33, 34, 0,
48, 33, 18, 2, 0, 48, 34, 35, 2, 0, 0, 51, 3, 0, 0, 19,
2, 0, 51, 19, 50, 3, 19, 17, 17, 2, 35, 18, 34, 2, 0, 19,
2, 0, 0, 35, 2, 0, 51, 51, 0, 19, 33, 0, 19, 33, 0, 19,
34, 0, 35, 2, 0, 51, 51, 3, 19, 17, 2, 35, 34, 2, 51, 51,
0, 19, 33, 0, 19, 33, 0, 35, 34, 0, 0, 0, 48, 51, 0, 0,
0, 51, 33, 0, 0, 48, 19, 34, 0, 0, 51, 33, 2, 0, 48, 19,
34, 0, 0, 51, 33, 2, 0, 0, 19, 34, 0, 0, 0, 35, 2, 0,
0, 0, 48, 51, 51, 0, 51, 17, 33, 3, 19, 34, 18, 2, 19, 2,
19, 2, 19, 2, 19, 2, 19, 2, 19, 2, 19, 50, 19, 2, 35, 17,
33, 2, 48, 34, 34, 0, 48, 51, 0, 51, 33, 0, 19, 33, 0, 35,
33, 0, 48, 33, 0, 48, 33, 0, 51, 33, 3, 19, 17, 2, 35, 34,
2, 48, 51, 51, 0, 51, 17, 33, 3, 19, 34, 18, 2, 35, 50, 19,
2, 48, 19, 33, 2, 51, 33, 34, 0, 19, 34, 51, 3, 19, 17, 17,
2, 35, 34, 34, 2, 48, 51, 51, 0, 51, 17, 33, 3, 19, 34, 18,
2, 35, 50, 19, 2, 0, 19, 33, 2, 51, 35, 18, 2, 19, 50, 19,
2, 35, 17, 33, 2, 48, 34, 34, 0, 0, 48, 51, 3, 0, 51, 17,
2, 48, 19, 18, 2, 51, 33, 18, 2, 19, 34, 19, 2, 19, 17, 17,
2, 35, 34, 18, 2, 0, 0, 19, 2, 0, 0, 35, 2, 51, 51, 51,
3, 19, 17, 17, 2, 19, 34, 34, 2, 19, 50, 51, 0, 19, 17, 33,
3, 35, 34, 18, 2, 19, 50, 19, 2, 35, 17, 33, 2, 48, 34, 34,
0, 48, 51, 51, 0, 51, 17, 33, 3, 19, 34, 18, 2, 19, 50, 35,
2, 19, 17, 33, 3, 19, 34, 18, 2, 19, 50, 19, 2, 35, 17, 33,
2, 48, 34, 34, 0, 51, 51, 51, 3, 19, 17, 17, 2, 35, 34, 18,
2, 0, 48, 33, 2, 0, 51, 33, 0, 0, 19, 34, 0, 0, 19, 2,
0, 0, 19, 2, 0, 0, 35, 2, 0, 48, 51, 51, 0, 51, 17, 33,
3, 19, 34, 18, 2, 19, 50, 19, 2, 35, 17, 33, 2, 19, 34, 18,
2, 19, 50, 19, 2, 35, 17, 33, 2, 48, 34, 34, 0, 48, 51, 51,
0, 51, 17, 33, 3, 19, 34, 18, 2, 19, 50, 19, 2, 35, 17, 17,
2, 51, 34, 18, 2, 19, 50, 19, 2, 35, 17, 33, 2, 48, 34, 34,
0, 51, 51, 0, 19, 33, 0, 19, 33, 0, 35, 34, 0, 51, 51, 0,
19, 33, 0, 19, 33, 0, 35, 34, 0, 51, 51, 0, 19, 33, 0, 19,
33, 0, 35, 34, 0, 51, 51, 0, 19, 33, 0, 19, 33, 0, 19, 34,
0, 35, 2, 0, 0, 48, 51, 0, 0, 51, 33, 0, 48, 19, 34, 0,
51, 33, 2, 0, 19, 34, 0, 0, 35, 33, 3, 0, 48, 18, 50, 0,
0, 35, 33, 0, 0, 48, 34, 0, 51, 51, 51, 0, 19, 17, 33, 0,
35, 34, 34, 0, 19, 17, 33, 0, 35, 34, 34, 0, 51, 3, 0, 0,
19, 50, 0, 0, 35, 33, 3, 0, 48, 18, 50, 0, 0, 35, 33, 0,
48, 19, 34, 0, 51, 33, 2, 0, 19, 34, 0, 0, 35, 2, 0, 0,
48, 51, 3, 0, 51, 17, 50, 0, 19, 34, 33, 0, 35, 50, 33, 0,
48, 19, 34, 0, 48, 33, 2, 0, 48, 34, 0, 0, 48, 33, 0, 0,
48, 34, 0, 0, 0, 51, 51, 51, 0, 48, 19, 17, 33, 3, 51, 33,
34, 18, 2, 19, 34, 17, 18, 2, 19, 18, 18, 18, 2, 19, 34, 17,
33, 2, 35, 33, 34, 34, 0, 48, 18, 17, 33, 0, 0, 35, 34, 34,
0, 0, 51, 3, 0, 48, 19, 50, 0, 51, 33, 33, 3, 19, 34, 18,
2, 19, 50, 19, 2, 19, 17, 17, 2, 19, 34, 18, 2, 19, 2, 19,
2, 35, 2, 35, 2, 51, 51, 51, 0, 19, 17, 33, 3, 19, 34, 18,
2, 19, 50, 19, 2, 19, 17, 33, 2, 19, 34, 18, 2, 19, 50, 19,
2, 19, 17, 33, 2, 35, 34, 34, 0, 48, 51, 51, 0, 51, 17, 33,
3, 19, 34, 18, 2, 19, 2, 35, 2, 19, 2, 0, 0, 19, 2, 51,
3, 19, 50, 19, 2, 35, 17, 33, 2, 48, 34, 34, 0, 51, 51, 51,
0, 19, 17, 33, 3, 19, 34, 18, 2, 19, 2, 19, 2, 19, 2, 19,
2, 19, 2, 19, 2, 19, 50, 19, 2, 19, 17, 33, 2, 35, 34, 34,
0, 51, 51, 51, 0, 19, 17, 33, 0, 19, 34, 34, 0, 19, 50, 3,
0, 19, 17, 2, 0, 19, 34, 2, 0, 19, 50, 51, 0, 19, 17, 33,
0, 35, 34, 34, 0, 51, 51, 51, 0, 19, 17, 33, 0, 19, 34, 34,
0, 19, 50, 3, 0, 19, 17, 2, 0, 19, 34, 2, 0, 19, 2, 0,
0, 19, 2, 0, 0, 35, 2, 0, 0, 48, 51, 51, 0, 51, 17, 33,
3, 19, 34, 18, 2, 19, 50, 35, 2, 19, 50, 17, 2, 19, 50, 18,
2, 19, 50, 19, 2, 35, 17, 33, 2, 48, 34, 34, 0, 51, 3, 51,
3, 19, 2, 19, 2, 19, 2, 19, 2, 19, 50, 19, 2, 19, 17, 17,
2, 19, 34, 18, 2, 19, 2, 19, 2, 19, 2, 19, 2, 35, 2, 35,
2, 51, 3, 19, 2, 19, 2, 19, 2, 19, 2, 19, 2, 19, 2, 19,
2, 35, 2, 0, 48, 51, 0, 0, 48, 33, 0, 0, 48, 33, 0, 0,
48, 33, 0, 0, 48, 33, 0, 51, 51, 33, 0, 19, 50, 33, 0, 35,
17, 34, 0, 32, 34, 2, 0, 51, 3, 51, 3, 19, 2, 19, 2, 19,
50, 19, 2, 19, 50, 33, 2, 19, 17, 34, 0, 19, 34, 33, 3, 19,
34, 18, 2, 19, 2, 19, 2, 35, 2, 35, 2, 51, 3, 0, 0, 19,
2, 0, 0, 19, 2, 0, 0, 19, 2, 0, 0, 19, 2, 0, 0, 19,
2, 0, 0, 19, 50, 51, 0, 19, 17, 33, 0, 35, 34, 34, 0, 51,
3, 0, 51, 3, 19, 50, 48, 19, 2, 19, 33, 51, 17, 2, 19, 18,
18, 18, 2, 19, 34, 33, 18, 2, 19, 50, 34, 19, 2, 19, 2, 0,
19, 2, 19, 2, 0, 19, 2, 35, 2, 0, 35, 2, 51, 3, 51, 3,
19, 50, 19, 2, 19, 33, 19, 2, 19, 33, 19, 2, 19, 18, 18, 2,
19, 34, 17, 2, 19, 50, 17, 2, 19, 50, 18, 2, 35, 2, 35, 2,
51, 51, 51, 0, 19, 17, 33, 3, 19, 34, 18, 2, 19, 50, 19, 2,
19, 17, 33, 2, 19, 34, 34, 0, 19, 2, 0, 0, 19, 2, 0, 0,
35, 2, 0, 0, 48, 51, 51, 0, 51, 17, 33, 3, 19, 34, 18, 2,
19, 2, 19, 2, 19, 2, 19, 2, 19, 50, 19, 2, 19, 50, 33, 2,
35, 17, 18, 2, 48, 34, 34, 2, 51, 51, 51, 0, 19, 17, 33, 3,
19, 34, 18, 2, 19, 50, 19, 2, 19, 17, 33, 2, 19, 34, 18, 2,
19, 2, 19, 2, 19, 2, 19, 2, 35, 2, 35, 2, 48, 51, 51, 0,
51, 17, 33, 3, 19, 34, 18, 2, 19, 50, 35, 2, 35, 17, 33, 3,
51, 34, 18, 2, 19, 50, 19, 2, 35, 17, 33, 2, 48, 34, 34, 0,
51, 51, 51, 3, 19, 17, 17, 2, 35, 18, 34, 2, 0, 19, 2, 0,
0, 19, 2, 0, 0, 19, 2, 0, 0, 19, 2, 0, 0, 19, 2, 0,
0, 35, 2, 0, 51, 3, 51, 3, 19, 2, 19, 2, 19, 2, 19, 2,
19, 2, 19, 2, 19, 2, 19, 2, 19, 2, 19, 2, 19, 50, 19, 2,
35, 17, 33, 2, 48, 34, 34, 0, 51, 3, 51, 3, 19, 2, 19, 2,
19, 2, 19, 2, 19, 2, 19, 2, 19, 2, 19, 2, 19, 50, 19, 2,
35, 33, 33, 2, 48, 18, 34, 0, 0, 35, 2, 0, 51, 3, 0, 51,
3, 19, 2, 0, 19, 2, 19, 2, 0, 19, 2, 19, 50, 51, 19, 2,
19, 50, 33, 19, 2, 19, 18, 18, 18, 2, 19, 33, 34, 17, 2, 19,
34, 48, 18, 2, 35, 2, 0, 35, 2, 51, 3, 51, 3, 19, 2, 19,
2, 19, 50, 19, 2, 35, 33, 33, 2, 48, 18, 34, 0, 51, 33, 33,
3, 19, 34, 18, 2, 19, 2, 19, 2, 35, 2, 35, 2, 51, 3, 51,
3, 19, 2, 19, 2, 19, 50, 19, 2, 35, 33, 33, 2, 48, 18, 34,
0, 0, 19, 2, 0, 0, 19, 2, 0, 0, 19, 2, 0, 0, 35, 2,
0, 51, 51, 51, 3, 19, 17, 17, 2, 35, 34, 18, 2, 0, 51, 33,
2, 48, 19, 34, 0, 51, 33, 2, 0, 19, 34, 51, 3, 19, 17, 17,
2, 35, 34, 34, 2, 51, 51, 3, 19, 17, 2, 19, 34, 2, 19, 2,
0, 19, 2, 0, 19, 2, 0, 19, 50, 3, 19, 17, 2, 35, 34, 2,
51, 3, 0, 0, 0, 19, 50, 0, 0, 0, 35, 33, 3, 0, 0, 48,
18, 50, 0, 0, 0, 35, 33, 3, 0, 0, 48, 18, 50, 0, 0, 0,
35, 33, 0, 0, 0, 48, 34, 0, 51, 51, 3, 19, 17, 2, 35, 18,
2, 0, 19, 2, 0, 19, 2, 0, 19, 2, 51, 19, 2, 19, 17, 2,
35, 34, 2, 0, 51, 3, 0, 48, 19, 50, 0, 51, 33, 33, 3, 19,
34, 18, 2, 35, 2, 35, 2, 51, 51, 51, 51, 3, 19, 17, 17, 17,
2, 35, 34, 34, 34, 2, 51, 3, 0, 19, 50, 0, 35, 33, 3, 48,
18, 2, 0, 35, 2, 48, 51, 51, 0, 48, 17, 33, 3, 48, 34, 18,
2, 51, 17, 17, 2, 19, 34, 18, 2, 35, 17, 17, 2, 48, 34, 34,
2, 51, 3, 0, 0, 19, 2, 0, 0, 19, 50, 51, 0, 19, 17, 33,
3, 19, 34, 18, 2, 19, 2, 19, 2, 19, 50, 19, 2, 19, 17, 33,
2, 35, 34, 34, 0, 48, 51, 51, 0, 51, 17, 33, 3, 19, 34, 18,
2, 19, 2, 35, 2, 19, 50, 19, 2, 35, 17, 33, 2, 48, 34, 34,
0, 0, 0, 51, 3, 0, 0, 19, 2, 48, 51, 19, 2, 51, 17, 17,
2, 19, 34, 18, 2, 19, 2, 19, 2, 19, 50, 19, 2, 35, 17, 17,
2, 48, 34, 34, 2, 48, 51, 51, 0, 51, 17, 33, 3, 19, 34, 18,
2, 19, 17, 17, 2, 19, 34, 34, 2, 35, 17, 17, 2, 48, 34, 34,
2, 0, 51, 51, 0, 48, 19, 33, 0, 48, 33, 34, 0, 51, 33, 3,
0, 19, 17, 2, 0, 35, 33, 2, 0, 48, 33, 0, 0, 48, 33, 0,
0, 48, 34, 0, 0, 48, 51, 51, 3, 51, 17, 17, 2, 19, 34, 18,
2, 19, 2, 19, 2, 19, 50, 19, 2, 35, 17, 17, 2, 48, 34, 18,
2, 19, 17, 33, 2, 35, 34, 34, 0, 51, 3, 0, 0, 19, 2, 0,
0, 19, 50, 51, 0, 19, 17, 33, 3, 19, 34, 18, 2, 19, 2, 19,
2, 19, 2, 19, 2, 19, 2, 19, 2, 35, 2, 35, 2, 51, 3, 19,
2, 35, 2, 19, 2, 19, 2, 19, 2, 19, 2, 19, 2, 35, 2, 0,
51, 3, 0, 19, 2, 0, 35, 2, 0, 19, 2, 0, 19, 2, 0, 19,
2, 0, 19, 2, 51, 19, 2, 19, 33, 2, 35, 34, 0, 51, 3, 0,
0, 19, 2, 0, 0, 19, 50, 51, 0, 19, 50, 33, 0, 19, 18, 34,
0, 19, 33, 2, 0, 19, 18, 50, 0, 19, 34, 33, 0, 35, 50, 34,
0, 51, 51, 51, 51, 0, 19, 17, 18, 33, 3, 19, 34, 33, 18, 2,
19, 50, 33, 19, 2, 19, 50, 33, 19, 2, 19, 50, 33, 19, 2, 35,
50, 34, 35, 2, 51, 51, 51, 0, 19, 17, 33, 3, 19, 34, 18, 2,
19, 2, 19, 2, 19, 2, 19, 2, 19, 2, 19, 2, 35, 2, 35, 2,
48, 51, 51, 0, 51, 17, 33, 3, 19, 34, 18, 2, 19, 2, 19, 2,
19, 50, 19, 2, 35, 17, 33, 2, 48, 34, 34, 0, 51, 51, 51, 0,
19, 17, 33, 3, 19, 34, 18, 2, 19, 2, 19, 2, 19, 50, 19, 2,
19, 17, 33, 2, 19, 34, 34, 0, 19, 2, 0, 0, 35, 2, 0, 0,
48, 51, 51, 3, 51, 17, 17, 2, 19, 34, 18, 2, 19, 2, 19, 2,
19, 50, 19, 2, 35, 17, 17, 2, 48, 34, 18, 2, 0, 0, 19, 2,
0, 0, 35, 2, 51, 51, 51, 0, 19, 17, 33, 3, 19, 34, 18, 2,
19, 50, 35, 2, 19, 2, 0, 0, 19, 2, 0, 0, 35, 2, 0, 0,
48, 51, 51, 3, 51, 17, 17, 2, 19, 34, 34, 2, 35, 17, 33, 3,
51, 34, 18, 2, 19, 17, 33, 2, 35, 34, 34, 0, 48, 51, 0, 48,
33, 0, 51, 33, 3, 19, 17, 2, 35, 33, 2, 48, 33, 0, 48, 33,
0, 48, 33, 0, 48, 34, 0, 51, 3, 51, 3, 19, 2, 19, 2, 19,
2, 19, 2, 19, 2, 19, 2, 19, 50, 19, 2, 35, 17, 17, 2, 48,
34, 34, 2, 51, 3, 51, 3, 19, 2, 19, 2, 19, 50, 19, 2, 35,
33, 33, 2, 48, 33, 33, 0, 48, 18, 34, 0, 0, 35, 2, 0, 51,
51, 51, 51, 3, 19, 50, 33, 19, 2, 19, 50, 33, 19, 2, 19, 50,
33, 19, 2, 19, 50, 33, 19, 2, 35, 17, 18, 33, 2, 48, 34, 34,
34, 0, 51, 3, 51, 3, 19, 50, 19, 2, 35, 33, 33, 2, 48, 18,
34, 0, 51, 33, 33, 3, 19, 34, 18, 2, 35, 2, 35, 2, 51, 3,
51, 3, 19, 2, 19, 2, 19, 2, 19, 2, 19, 50, 19, 2, 35, 33,
19, 2, 48, 18, 17, 2, 48, 35, 18, 2, 48, 17, 33, 2, 48, 34,
34, 0, 51, 51, 51, 3, 19, 17, 17, 2, 35, 34, 33, 2, 48, 19,
34, 0, 51, 33, 50, 3, 19, 17, 17, 2, 35, 34, 34, 2, 0, 51,
3, 48, 19, 2, 48, 33, 2, 51, 33, 0, 19, 34, 0, 35, 33, 0,
48, 33, 3, 48, 18, 2, 0, 35, 2, 51, 3, 19, 2, 19, 2, 19,
2, 35, 2, 19, 2, 19, 2, 19, 2, 35, 2, 51, 3, 0, 19, 50,
0, 35, 33, 0, 48, 33, 3, 48, 18, 2, 48, 33, 2, 51, 33, 0,
19, 34, 0, 35, 2, 0, 48, 51, 3, 0, 0, 51, 17, 50, 0, 0,
19, 34, 33, 51, 0, 35, 50, 18, 33, 0, 0, 0, 35, 34, 0, 51,
51, 51, 51, 0, 17, 17, 17, 33, 0, 34, 34, 34, 33, 0, 0, 0,
48, 33, 0, 0, 0, 48, 33, 0, 51, 51, 51, 33, 0, 17, 17, 17,
33, 0, 34, 34, 34, 34, 0, 48, 51, 51, 0, 51, 17, 33, 3, 19,
34, 18, 2, 19, 2, 35, 2, 19, 2, 0, 0, 19, 2, 51, 3, 19,
50, 19, 2, 35, 17, 33, 2, 48, 18, 34, 0, 48, 17, 2, 0, 48,
34, 2, 0, 51, 3, 51, 3, 19, 2, 19, 2, 35, 2, 35, 2, 19,
2, 19, 2, 19, 2, 19, 2, 19, 2, 19, 2, 19, 50, 19, 2, 35,
17, 17, 2, 48, 34, 34, 2, 48, 19, 2, 0, 48, 33, 2, 0, 48,
34, 51, 0, 51, 17, 33, 3, 19, 34, 18, 2, 19, 17, 17, 2, 19,
34, 34, 3, 35, 17, 17, 2, 48, 34, 34, 2, 48, 19, 33, 3, 48,
33, 18, 2, 48, 34, 35, 2, 48, 17, 33, 3, 48, 34, 18, 2, 51,
17, 17, 2, 19, 34, 18, 2, 35, 17, 17, 2, 48, 34, 34, 2, 48,
51, 51, 3, 48, 33, 19, 2, 48, 34, 35, 2, 48, 17, 33, 3, 48,
34, 18, 2, 51, 17, 17, 2, 19, 34, 18, 2, 35, 17, 17, 2, 48,
34, 34, 2, 0, 19, 50, 0, 0, 35, 33, 0, 0, 51, 34, 0, 48,
17, 33, 3, 48, 34, 18, 2, 51, 17, 17, 2, 19, 34, 18, 2, 35,
17, 17, 2, 48, 34, 34, 2, 48, 51, 3, 0, 48, 17, 2, 0, 48,
34, 2, 0, 48, 17, 33, 3, 48, 34, 18, 2, 51, 17, 17, 2, 19,
34, 18, 2, 35, 17, 17, 2, 48, 34, 34, 2, 48, 51, 51, 0, 51,
17, 33, 3, 19, 34, 18, 2, 19, 50, 35, 2, 19, 50, 19, 2, 35,
17, 33, 2, 48, 18, 34, 0, 0, 35, 2, 0, 48, 19, 33, 3, 48,
33, 18, 2, 48, 34, 35, 2, 51, 17, 33, 3, 19, 34, 18, 2, 19,
17, 17, 2, 19, 34, 34, 3, 35, 17, 17, 2, 48, 34, 34, 2, 48,
51, 51, 3, 48, 33, 19, 2, 48, 34, 35, 2, 51, 17, 33, 3, 19,
34, 18, 2, 19, 17, 17, 2, 19, 34, 34, 3, 35, 17, 17, 2, 48,
34, 34, 2, 0, 19, 50, 0, 0, 35, 33, 0, 0, 51, 50, 0, 51,
17, 33, 3, 19, 34, 18, 2, 19, 17, 17, 2, 19, 34, 34, 3, 35,
17, 17, 2, 48, 34, 34, 2, 51, 51, 3, 19, 18, 2, 35, 35, 2,
48, 33, 0, 48, 33, 0, 48, 33, 0, 48, 33, 0, 48, 33, 0, 48,
34, 0, 51, 33, 3, 19, 18, 2, 35, 35, 2, 48, 33, 0, 48, 33,
0, 48, 33, 0, 48, 33, 0, 48, 33, 0, 48, 34, 0, 19, 50, 0,
35, 33, 0, 48, 50, 0, 48, 33, 0, 48, 33, 0, 48, 33, 0, 48,
33, 0, 48, 33, 0, 48, 34, 0, 19, 50, 19, 2, 35, 19, 34, 2,
51, 33, 33, 3, 19, 34, 18, 2, 19, 50, 19, 2, 19, 17, 17, 2,
19, 34, 18, 2, 19, 2, 19, 2, 35, 2, 35, 2, 48, 17, 33, 0,
48, 34, 50, 0, 51, 17, 33, 3, 19, 34, 18, 2, 19, 50, 19, 2,
19, 17, 17, 2, 19, 34, 18, 2, 19, 2, 19, 2, 35, 2, 35, 2,
0, 51, 33, 0, 51, 19, 50, 0, 19, 17, 33, 0, 19, 34, 34, 0,
19, 17, 2, 0, 19, 34, 2, 0, 19, 50, 51, 0, 19, 17, 33, 0,
35, 34, 34, 0, 51, 51, 51, 51, 3, 19, 17, 18, 17, 2, 35, 34,
33, 18, 2, 19, 17, 17, 17, 2, 19, 34, 33, 34, 3, 19, 17, 18,
17, 2, 35, 34, 35, 34, 2, 0, 51, 51, 51, 51, 48, 19, 17, 17,
33, 48, 17, 18, 34, 33, 48, 33, 19, 50, 34, 51, 33, 19, 33, 0,
19, 17, 17, 34, 51, 19, 34, 18, 50, 33, 19, 2, 19, 17, 33, 35,
2, 35, 34, 34, 48, 19, 50, 0, 48, 33, 33, 0, 48, 34, 34, 0,
51, 17, 33, 3, 19, 34, 18, 2, 19, 2, 19, 2, 19, 50, 19, 2,
35, 17, 33, 2, 48, 34, 34, 0, 51, 51, 51, 0, 19, 50, 33, 0,
35, 50, 34, 0, 51, 17, 33, 3, 19, 34, 18, 2, 19, 2, 19, 2,
19, 50, 19, 2, 35, 17, 33, 2, 48, 34, 34, 0, 48, 33, 3, 0,
48, 18, 50, 0, 51, 17, 33, 3, 19, 34, 18, 2, 19, 2, 19, 2,
19, 50, 19, 2, 35, 17, 33, 2, 48, 34, 34, 0, 48, 19, 50, 0,
48, 33, 33, 0, 51, 34, 34, 0, 19, 2, 19, 2, 19, 2, 19, 2,
19, 2, 19, 2, 19, 50, 19, 2, 35, 17, 17, 2, 48, 34, 34, 2,
48, 33, 3, 0, 48, 18, 50, 0, 51, 35, 50, 0, 19, 2, 19, 2,
19, 2, 19, 2, 19, 2, 19, 2, 19, 50, 19, 2, 35, 17, 17, 2,
48, 34, 34, 2, 48, 51, 51, 0, 48, 33, 33, 0, 51, 34, 34, 0,
19, 2, 19, 2, 19, 2, 19, 2, 19, 50, 19, 2, 35, 33, 19, 2,
48, 18, 17, 2, 48, 35, 18, 2, 48, 17, 33, 2, 48, 34, 34, 0,
19, 50, 19, 2, 35, 17, 33, 3, 19, 34, 18, 2, 19, 2, 19, 2,
19, 2, 19, 2, 19, 2, 19, 2, 19, 50, 19, 2, 35, 17, 33, 2,
48, 34, 34, 0, 19, 2, 19, 2, 35, 3, 35, 3, 19, 2, 19, 2,
19, 2, 19, 2, 19, 2, 19, 2, 19, 2, 19, 2, 19, 50, 19, 2,
35, 17, 33, 2, 48, 34, 34, 0, 0, 51, 3, 0, 48, 19, 2, 0,
51, 17, 50, 0, 19, 34, 33, 0, 19, 50, 50, 0, 19, 50, 33, 0,
35, 17, 34, 0, 48, 18, 2, 0, 0, 35, 2, 0, 48, 19, 33, 3,
48, 33, 18, 2, 51, 33, 35, 2, 19, 17, 33, 0, 35, 33, 34, 0,
48, 33, 51, 3, 51, 33, 19, 2, 19, 17, 33, 2, 35, 34, 34, 0,
48, 33, 51, 33, 0, 48, 18, 18, 34, 0, 0, 35, 33, 3, 0, 0,
19, 17, 2, 0, 0, 35, 33, 3, 0, 0, 19, 17, 2, 0, 0, 35,
33, 2, 0, 0, 48, 33, 0, 0, 0, 48, 34, 0, 0, 51, 51, 51,
0, 19, 17, 33, 3, 19, 34, 18, 2, 19, 50, 19, 2, 19, 17, 33,
2, 19, 34, 33, 0, 19, 50, 33, 3, 19, 18, 17, 2, 35, 35, 33,
2, 0, 48, 34, 0, 0, 48, 51, 3, 0, 0, 51, 17, 50, 0, 0,
19, 34, 33, 0, 48, 19, 50, 34, 0, 48, 17, 33, 0, 0, 48, 18,
34, 0, 0, 0, 19, 2, 0, 0, 51, 19, 2, 0, 0, 19, 33, 2,
0, 0, 35, 34, 0, 0, 0, 0, 51, 33, 0, 0, 19, 34, 0, 0,
35, 50, 0, 48, 17, 33, 3, 48, 34, 18, 2, 51, 17, 17, 2, 19,
34, 18, 2, 35, 17, 17, 2, 48, 34, 34, 2, 51, 33, 0, 19, 34,
0, 35, 2, 0, 19, 2, 0, 19, 2, 0, 19, 2, 0, 19, 2, 0,
19, 2, 0, 35, 2, 0, 48, 19, 2, 0, 48, 33, 2, 0, 48, 34,
3, 0, 51, 17, 33, 3, 19, 34, 18, 2, 19, 2, 19, 2, 19, 50,
19, 2, 35, 17, 33, 2, 48, 34, 34, 0, 48, 19, 2, 0, 48, 33,
2, 0, 51, 34, 51, 0, 19, 2, 19, 2, 19, 2, 19, 2, 19, 2,
19, 2, 19, 50, 19, 2, 35, 17, 17, 2, 48, 34, 34, 2, 19, 33,
19, 2, 35, 18, 33, 2, 51, 35, 34, 0, 19, 17, 33, 3, 19, 34,
18, 2, 19, 2, 19, 2, 19, 2, 19, 2, 19, 2, 19, 2, 35, 2,
35, 2, 48, 19, 50, 3, 0, 48, 33, 17, 50, 0, 48, 33, 34, 33,
0, 48, 17, 50, 33, 0, 48, 33, 33, 33, 0, 48, 33, 18, 33, 0,
48, 33, 35, 33, 0, 48, 33, 48, 33, 0, 48, 34, 48, 34, 0, 48,
51, 51, 0, 48, 17, 33, 3, 48, 34, 18, 2, 51, 17, 17, 2, 19,
34, 18, 2, 35, 17, 17, 2, 48, 34, 34, 2, 19, 17, 17, 2, 35,
34, 34, 2, 48, 51, 51, 0, 51, 17, 33, 3, 19, 34, 18, 2, 35,
17, 33, 2, 51, 34, 34, 3, 19, 17, 17, 2, 35, 34, 34, 2, 0,
48, 51, 0, 0, 48, 33, 0, 0, 48, 34, 0, 0, 51, 33, 0, 48,
19, 34, 0, 48, 33, 50, 3, 48, 33, 19, 2, 48, 18, 33, 2, 0,
35, 34, 0, 48, 51, 51, 51, 3, 51, 17, 33, 17, 50, 19, 34, 18,
34, 33, 19, 2, 19, 17, 33, 19, 50, 19, 34, 34, 35, 17, 33, 17,
33, 48, 34, 34, 34, 34, 48, 51, 51, 0, 51, 17, 33, 3, 19, 34,
18, 2, 19, 18, 33, 2, 19, 34, 18, 2, 19, 2, 19, 2, 19, 50,
19, 2, 19, 18, 33, 2, 19, 34, 34, 0, 35, 2, 0, 0, 1, 7,
0, 9, 1, 7, 2, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7,
1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 0, 9,
0, 9, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 0, 9,
0, 9, 1, 7, 1, 7, 1, 7, 1, 7, 0, 9, 0, 9, 11, 0,
0, 9, 0, 4, 1, 7, 0, 9, 0, 9, 0, 9, 0, 5, 0, 9,
0, 9, 0, 7, 0, 7, 5, 5, 3, 3, 5, 4, 1, 8, 0, 9,
0, 9, 0, 9, 0, 9, 0, 9, 0, 9, 0, 9, 0, 9, 0, 9,
0, 9, 1, 8, 1, 9, 0, 9, 2, 5, 0, 9, 0, 9, 0, 9,
0, 9, 0, 9, 0, 9, 0, 9, 0, 9, 0, 9, 0, 9, 0, 9,
0, 9, 0, 9, 0, 9, 0, 9, 0, 9, 0, 9, 0, 9, 0, 9,
0, 9, 0, 9, 0, 9, 0, 9, 0, 9, 0, 9, 0, 9, 0, 9,
0, 9, 0, 9, 0, 9, 1, 8, 0, 9, 0, 5, 6, 3, 0, 5,
2, 7, 0, 9, 2, 7, 0, 9, 2, 7, 0, 9, 2, 9, 0, 9,
0, 9, 0, 10, 0, 9, 0, 9, 2, 7, 2, 7, 2, 7, 2, 9,
2, 9, 2, 7, 2, 7, 0, 9, 2, 7, 2, 7, 2, 7, 2, 7,
2, 9, 2, 7, 0, 9, 0, 9, 0, 9, 0, 5, 1, 8, 0, 11,
0, 9, 0, 9, 0, 9, 0, 9, 0, 9, 0, 9, 2, 8, 0, 9,
0, 9, 0, 9, 0, 9, 0, 9, 0, 9, 0, 9, 0, 9, 0, 9,
2, 7, 0, 9, 0, 9, 0, 9, 1, 8, 0, 9, 0, 9, 0, 11,
0, 9, 0, 9, 1, 9, 0, 9, 0, 9, 0, 10, 0, 10, 0, 9,
0, 9, 0, 9, 0, 9, 0, 9, 0, 9, 0, 9, 1, 7, 0, 9,
11, 0, 11, 0, 11, 0, 11, 0, 0, 9, 11, 0, 11, 0, 11, 0,
11, 0, 11, 0, 11, 0, 11, 0, 11, 0, 11, 0, 11, 0, 11, 0,
11, 0, 11, 0, 11, 0, 11, 0, 11, 0, 11, 0, 11, 0, 11, 0,
11, 0, 11, 0, 11, 0, 11, 0, 11, 0, 11, 0, 11, 0, 11, 0,
11, 0, 11, 0, 11, 0, 11, 0, 11, 0, 11, 0, 4, 7, 11, 0,
11, 0, 11, 0, 11, 0, 11, 0, 11, 0, 11, 0, 11, 0, 11, 0,
11, 0, 11, 0, 11, 0, 11, 0, 11, 0, 11, 0, 11, 0, 11, 0,
1, 10,
};
////////////////////////////////////////////////////////////////////////////////////////////////////
// Global Data /////////////////////////////////////////////////////////////////////////////////////
WWFontClass DefaultFont(DefaultFontData);

View File

@@ -0,0 +1,87 @@
/*
** Command & Conquer Renegade(tm)
** Copyright 2025 Electronic Arts Inc.
**
** This program is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#if defined(_MSC_VER)
#pragma once
#endif
#ifndef DEFFONT_H
#define DEFFONT_H
#include "wwfont.h"
// Default 1 color fonts.
extern WWFontClass DefaultFont;
enum FontStyleEnum {
// Note: Space 6 means that a standard letter uses 6 points - the font is larger then that
// because of overhangs and rises.
// The 4 Color means there are four colors used in this not including transperancy.
SPACE_6_PNT_2_COLOR,
SPACE_8_PNT_3_COLOR,
SPACE_11_PNT_4_COLOR,
NUM_FONT_STYLES,
};
enum FontRemapEnum {
// A temp buffer that programmer can change before each use.
USER_256_COLORS,
DARK_GREEN_3_COLOR,
LIGHT_GREEN_3_COLOR,
DARK_GREEN_4_COLOR,
LIGHT_GREEN_4_COLOR,
DARK_GREEN_2_COLOR,
LIGHT_GREEN_2_COLOR,
DARK_BLUE_2_COLOR,
LIGHT_BLUE_2_COLOR,
DARK_RED_4_COLOR,
// This is a RAMP palette. See/Use Build_Font_Palette_From_Ramp().
RAMP_GREEN_TO_RED_2_COLOR, // For use with 2 color fonts where color 2 is changes. Color 1 is preset to 0.
NUM_FONT_REMAPS,
};
// Two spacy looking fonts that use 8 colors each.
extern void *FontData[NUM_FONT_STYLES];
// For now we have green cause that is all that is needed. Add more as needed.
extern unsigned char *FontRemapTables[NUM_FONT_REMAPS];
// Number of colors (allocated chars) in FontRemapTable. Useful for some of the RAMPS.
extern int FontRemapTablesSize[NUM_FONT_REMAPS];
// Converter class for use with Font*Data and *FontRemapTable.
// You can create a font like this:
// NEW WWFontClass(SpaceFont8Data, true, 1, FontConverter, GreenFontRemapTable);
extern ConvertClass *FontConverter;
// Load font data for fonts listed above.
void Load_Default_Font_Data();
void Release_Default_Font_Data();
// A routine that will load font data from a *.fnt file make from FontMake.exe
void *Load_Font_Data(char *fname);
// Creates a palette from a ramp palette given min and max values.
unsigned char *Build_Font_Palette_From_Ramp(float val_norm, FontRemapEnum remap, unsigned char *ret_remap = &FontRemapTables[USER_256_COLORS][0]);
#endif

View File

@@ -0,0 +1,76 @@
/*
** Command & Conquer Renegade(tm)
** Copyright 2025 Electronic Arts Inc.
**
** This program is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "stdafx.h"
#include <convert.h>
#include <bsurface.h>
// Define a default palette for the product in case one hasn't been loaded
// from disk.
char DefaultPaletteData[768] = {
0, 0, 0, 42, 0, 42, 0, 42, 42, 0, 42, 0, 22, 63, 21, 63,
63, 21, 63, 21, 21, 42, 21, 0, 42, 0, 0, 21, 63, 63, 20, 20,
63, 0, 0, 42, 0, 0, 0, 21, 21, 21, 42, 42, 42, 63, 63, 63,
4, 3, 3, 3, 4, 5, 5, 5, 6, 8, 7, 7, 7, 8, 9, 9,
9, 10, 12, 10, 10, 10, 12, 11, 11, 13, 13, 17, 14, 14, 10, 17,
10, 13, 16, 10, 11, 16, 14, 14, 17, 14, 14, 20, 15, 17, 17, 15,
25, 20, 14, 14, 14, 17, 13, 17, 27, 21, 18, 18, 18, 21, 18, 21,
22, 18, 25, 22, 21, 21, 25, 19, 18, 25, 21, 25, 25, 19, 29, 25,
19, 25, 26, 22, 29, 26, 22, 29, 29, 23, 22, 29, 24, 22, 29, 29,
26, 30, 25, 30, 29, 29, 34, 22, 20, 34, 28, 22, 34, 30, 27, 27,
33, 23, 29, 33, 25, 30, 37, 29, 33, 34, 26, 37, 34, 26, 37, 38,
29, 42, 37, 29, 36, 41, 29, 42, 42, 30, 23, 30, 41, 34, 30, 42,
22, 33, 36, 30, 35, 34, 30, 34, 43, 26, 37, 49, 34, 34, 33, 37,
37, 33, 41, 37, 35, 43, 43, 35, 34, 34, 45, 38, 37, 46, 41, 37,
42, 41, 38, 46, 49, 45, 35, 44, 43, 50, 50, 45, 50, 57, 54, 57,
61, 53, 30, 57, 50, 28, 53, 47, 26, 49, 44, 24, 45, 41, 22, 42,
38, 21, 36, 34, 19, 36, 29, 16, 33, 28, 14, 27, 25, 14, 22, 21,
11, 21, 19, 9, 18, 17, 8, 14, 13, 7, 13, 11, 5, 10, 8, 2,
23, 49, 55, 23, 41, 50, 23, 35, 45, 23, 29, 41, 23, 35, 45, 23,
41, 50, 23, 45, 55, 47, 0, 0, 52, 48, 40, 49, 45, 37, 46, 42,
33, 44, 39, 30, 41, 36, 27, 37, 32, 24, 34, 27, 20, 31, 24, 18,
59, 56, 54, 55, 51, 49, 51, 46, 44, 46, 41, 38, 41, 36, 33, 37,
31, 28, 33, 28, 25, 28, 22, 20, 23, 18, 16, 20, 15, 13, 15, 11,
10, 11, 7, 6, 0, 63, 0, 0, 49, 0, 0, 35, 0, 0, 22, 0,
59, 59, 59, 57, 57, 57, 52, 52, 52, 47, 47, 47, 43, 43, 43, 40,
40, 40, 37, 37, 37, 34, 34, 34, 31, 31, 31, 28, 28, 28, 25, 25,
25, 23, 23, 23, 19, 19, 19, 14, 14, 14, 9, 9, 9, 5, 5, 5,
49, 57, 33, 44, 52, 31, 39, 47, 29, 34, 43, 27, 30, 38, 25, 26,
34, 23, 22, 29, 19, 19, 25, 15, 15, 21, 12, 12, 17, 9, 9, 13,
6, 6, 9, 4, 63, 63, 39, 63, 53, 0, 63, 45, 0, 63, 34, 0,
56, 57, 61, 51, 52, 58, 45, 47, 55, 40, 42, 50, 35, 37, 46, 31,
33, 43, 26, 29, 40, 22, 26, 37, 17, 21, 34, 14, 18, 31, 12, 16,
29, 10, 14, 27, 8, 11, 24, 6, 11, 21, 3, 8, 17, 2, 5, 13,
33, 41, 43, 29, 37, 39, 25, 32, 34, 21, 27, 29, 17, 22, 24, 14,
18, 19, 9, 12, 13, 5, 8, 9, 17, 36, 31, 16, 33, 29, 14, 29,
27, 7, 27, 24, 6, 22, 19, 7, 16, 16, 3, 13, 13, 0, 8, 8,
45, 54, 63, 31, 47, 60, 17, 37, 57, 10, 30, 54, 9, 21, 51, 6,
17, 45, 5, 15, 39, 4, 12, 34, 52, 38, 31, 48, 34, 26, 45, 28,
21, 43, 23, 17, 38, 19, 14, 33, 16, 12, 28, 11, 9, 24, 9, 7,
63, 57, 37, 63, 53, 31, 61, 49, 28, 59, 43, 21, 58, 40, 16, 57,
36, 10, 53, 30, 4, 49, 24, 0, 45, 18, 0, 41, 14, 0, 38, 10,
0, 33, 8, 0, 27, 4, 0, 23, 2, 0, 19, 0, 0, 14, 0, 0,
63, 0, 63, 63, 0, 63, 63, 0, 63, 49, 49, 49, 54, 53, 54, 63,
23, 0, 63, 0, 0, 59, 0, 0, 54, 0, 0, 51, 0, 0, 47, 0,
0, 44, 0, 0, 37, 0, 0, 33, 0, 0, 29, 0, 0, 25, 0, 0,
7, 6, 2, 9, 8, 3, 10, 9, 4, 12, 12, 5, 14, 14, 7, 16,
16, 8, 18, 18, 10, 20, 20, 12, 22, 22, 14, 23, 24, 16, 25, 26,
18, 27, 28, 21, 29, 30, 23, 31, 32, 26, 33, 34, 29, 63, 63, 63,
};
PaletteClass DefaultPalette((unsigned char *)DefaultPaletteData);
ConvertClass DefaultConvert(DefaultPalette, DefaultPalette, BSurface(8,8,8));

View File

@@ -0,0 +1,24 @@
/*
** Command & Conquer Renegade(tm)
** Copyright 2025 Electronic Arts Inc.
**
** This program is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <palette.h>
#include <convert.h>
extern PaletteClass DefaultPalette;
extern ConvertClass DefaultConvert;

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -0,0 +1,13 @@
//
// VIDINIT.RC2 - resources Microsoft Visual C++ does not edit directly
//
#ifdef APSTUDIO_INVOKED
#error this file is not editable by Microsoft Visual C++
#endif //APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
// Add manually edited resources here...
/////////////////////////////////////////////////////////////////////////////

View File

@@ -0,0 +1,26 @@
//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by vidinit.rc
//
#define IDTEST 3
#define IDD_VIDINIT_DIALOG 102
#define IDR_MAINFRAME 128
#define IDC_DRIVERS 1002
#define IDC_RESOLUTIONS 1003
#define IDC_DRIVER_NAME 1004
#define IDC_DRIVER_VENDOR 1005
#define IDC_HARDWARE_NAME 1006
#define IDC_HARDWARE_VENDOR 1007
#define IDC_HARDWARE_CHIPSET 1008
#define IDC_CHECK1 1010
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 129
#define _APS_NEXT_COMMAND_VALUE 32771
#define _APS_NEXT_CONTROL_VALUE 1011
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif

View File

@@ -0,0 +1,92 @@
/*
** Command & Conquer Renegade(tm)
** Copyright 2025 Electronic Arts Inc.
**
** This program is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
// vidinit.cpp : Defines the class behaviors for the application.
//
#include "stdafx.h"
#include "vidinit.h"
#include "vidinitDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CVidinitApp
BEGIN_MESSAGE_MAP(CVidinitApp, CWinApp)
//{{AFX_MSG_MAP(CVidinitApp)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG
ON_COMMAND(ID_HELP, CWinApp::OnHelp)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CVidinitApp construction
CVidinitApp::CVidinitApp():
WindowIsClosing(false)
{
// TODO: add construction code here,
// Place all significant initialization in InitInstance
}
/////////////////////////////////////////////////////////////////////////////
// The one and only CVidinitApp object
CVidinitApp theApp;
/////////////////////////////////////////////////////////////////////////////
// CVidinitApp initialization
BOOL CVidinitApp::InitInstance()
{
// Standard initialization
// If you are not using these features and wish to reduce the size
// of your final executable, you should remove from the following
// the specific initialization routines you do not need.
#ifdef _AFXDLL
Enable3dControls(); // Call this when using MFC in a shared DLL
#else
Enable3dControlsStatic(); // Call this when linking to MFC statically
#endif
CVidinitDlg dlg(NULL);
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: Place code here to handle when the dialog is
// dismissed with OK
}
else if (nResponse == IDCANCEL)
{
// TODO: Place code here to handle when the dialog is
// dismissed with Cancel
}
// Since the dialog has been closed, return FALSE so that we exit the
// application, rather than start the application's message pump.
return FALSE;
}

View File

@@ -0,0 +1,68 @@
/*
** Command & Conquer Renegade(tm)
** Copyright 2025 Electronic Arts Inc.
**
** This program is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
// vidinit.h : main header file for the VIDINIT application
//
#if !defined(AFX_VIDINIT_H__83B1C937_54EC_4C22_9192_4FD935841183__INCLUDED_)
#define AFX_VIDINIT_H__83B1C937_54EC_4C22_9192_4FD935841183__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#ifndef __AFXWIN_H__
#error include 'stdafx.h' before including this file for PCH
#endif
#include "resource.h" // main symbols
/////////////////////////////////////////////////////////////////////////////
// CVidinitApp:
// See vidinit.cpp for the implementation of this class
//
class CVidinitApp : public CWinApp
{
public:
CVidinitApp();
bool WindowIsClosing;
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CVidinitApp)
public:
virtual BOOL InitInstance();
//}}AFX_VIRTUAL
// Implementation
//{{AFX_MSG(CVidinitApp)
// NOTE - the ClassWizard will add and remove member functions here.
// DO NOT EDIT what you see in these blocks of generated code !
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_VIDINIT_H__83B1C937_54EC_4C22_9192_4FD935841183__INCLUDED_)

View File

@@ -0,0 +1,194 @@
//Microsoft Developer Studio generated resource script.
//
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// English (U.S.) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
#endif //_WIN32
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE DISCARDABLE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE DISCARDABLE
BEGIN
"#include ""afxres.h""\r\n"
"\0"
END
3 TEXTINCLUDE DISCARDABLE
BEGIN
"#define _AFX_NO_SPLITTER_RESOURCES\r\n"
"#define _AFX_NO_OLE_RESOURCES\r\n"
"#define _AFX_NO_TRACKER_RESOURCES\r\n"
"#define _AFX_NO_PROPERTY_RESOURCES\r\n"
"\r\n"
"#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r\n"
"#ifdef _WIN32\r\n"
"LANGUAGE 9, 1\r\n"
"#pragma code_page(1252)\r\n"
"#endif //_WIN32\r\n"
"#include ""res\\vidinit.rc2"" // non-Microsoft Visual C++ edited resources\r\n"
"#include ""afxres.rc"" // Standard components\r\n"
"#endif\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDR_MAINFRAME ICON DISCARDABLE "res\\vidinit.ico"
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
IDD_VIDINIT_DIALOG DIALOGEX 0, 0, 185, 276
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW
CAPTION "Select Video Driver and Resolution"
FONT 8, "MS Sans Serif"
BEGIN
DEFPUSHBUTTON "OK",IDOK,10,255,50,14
PUSHBUTTON "Cancel",IDCANCEL,124,255,50,14
GROUPBOX "Detected Hardware Drivers",IDC_STATIC,14,6,157,88
GROUPBOX "Supported Resolutions",IDC_STATIC,14,168,157,64
LISTBOX IDC_DRIVERS,18,18,148,72,LBS_NOINTEGRALHEIGHT |
WS_VSCROLL | WS_TABSTOP
LISTBOX IDC_RESOLUTIONS,18,179,148,49,LBS_NOINTEGRALHEIGHT |
WS_VSCROLL | WS_TABSTOP
LTEXT "Device Name:",IDC_STATIC,34,108,46,8
LTEXT "Device Vendor:",IDC_STATIC,30,118,50,8
LTEXT "Hardware Name:",IDC_STATIC,26,128,54,8
LTEXT "Hardware Vendor:",IDC_STATIC,22,138,58,8
LTEXT "Hardware chipset:",IDC_STATIC,22,148,58,8
LTEXT "Unknown",IDC_DRIVER_NAME,88,108,78,8
LTEXT "Unknown",IDC_DRIVER_VENDOR,88,118,78,8
LTEXT "Unknown",IDC_HARDWARE_NAME,88,128,78,8
LTEXT "Unknown",IDC_HARDWARE_CHIPSET,88,148,78,8
LTEXT "Unknown",IDC_HARDWARE_VENDOR,88,138,78,8
GROUPBOX "Driver Information",IDC_STATIC,15,98,156,65
CONTROL "Run full screen",IDC_CHECK1,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,61,237,63,10
DEFPUSHBUTTON "TEST",IDTEST,67,255,50,14
END
#ifndef _MAC
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,0,1
PRODUCTVERSION 1,0,0,1
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x4L
FILETYPE 0x1L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904B0"
BEGIN
VALUE "CompanyName", "\0"
VALUE "FileDescription", "vidinit MFC Application\0"
VALUE "FileVersion", "1, 0, 0, 1\0"
VALUE "InternalName", "vidinit\0"
VALUE "LegalCopyright", "Copyright (C) 2000\0"
VALUE "LegalTrademarks", "\0"
VALUE "OriginalFilename", "vidinit.EXE\0"
VALUE "ProductName", "vidinit Application\0"
VALUE "ProductVersion", "1, 0, 0, 1\0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END
#endif // !_MAC
/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO DISCARDABLE
BEGIN
IDD_VIDINIT_DIALOG, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 177
TOPMARGIN, 7
BOTTOMMARGIN, 269
END
END
#endif // APSTUDIO_INVOKED
#endif // English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
#define _AFX_NO_SPLITTER_RESOURCES
#define _AFX_NO_OLE_RESOURCES
#define _AFX_NO_TRACKER_RESOURCES
#define _AFX_NO_PROPERTY_RESOURCES
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE 9, 1
#pragma code_page(1252)
#endif //_WIN32
#include "res\vidinit.rc2" // non-Microsoft Visual C++ edited resources
#include "afxres.rc" // Standard components
#endif
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED

View File

@@ -0,0 +1,264 @@
/*
** Command & Conquer Renegade(tm)
** Copyright 2025 Electronic Arts Inc.
**
** This program is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
// vidinitDlg.cpp : implementation file
//
#include "stdafx.h"
#include "vidinit.h"
#include "vidinitDlg.h"
#include "SurrenderWnd.h"
#include "wwsaveload.h"
#include <ww3d.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
//#define REGISTRY_KEY "Software\\Westwood Studios\\Earth and Beyond\\Render"
#define REGISTRY_KEY "Software\\Westwood Studios\\Renegade\\Render"
/////////////////////////////////////////////////////////////////////////////
// CVidinitDlg dialog
CVidinitDlg::CVidinitDlg(CWnd* pParent /*=NULL*/)
: CDialog(CVidinitDlg::IDD, pParent),
m_TestCWnd(0)
{
//{{AFX_DATA_INIT(CVidinitDlg)
m_RunFullScreen = FALSE;
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CVidinitDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CVidinitDlg)
DDX_Control(pDX, IDC_RESOLUTIONS, m_Resolutions);
DDX_Control(pDX, IDC_DRIVERS, m_Drivers);
DDX_Check(pDX, IDC_CHECK1, m_RunFullScreen);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CVidinitDlg, CDialog)
//{{AFX_MSG_MAP(CVidinitDlg)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_LBN_SELCHANGE(IDC_DRIVERS, OnSelchangeDrivers)
ON_BN_CLICKED(IDTEST, OnTest)
//}}AFX_MSG_MAP
ON_MESSAGE(WM_USER+1, OnDeadBeef)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CVidinitDlg message handlers
BOOL CVidinitDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
WW3D::Init(GetSafeHwnd());
WWMath::Init();
WWSaveLoad::Init();
// HACK: Added throwaway variable for texture_depth to match new function interface. (DRM 6/01/00)
// TODO: Add UI support for texture depth selection. (DRM, 6/1/00)
int texture_depth;
WW3D::Detect_Drivers(AfxGetInstanceHandle());
WW3D::Registry_Load_Render_Device(REGISTRY_KEY, m_DeviceName, 255, m_DeviceWidth, m_DeviceHeight, m_DeviceDepth, m_DeviceWindowed, texture_depth);
// Loop thought the different available render devices
for (int lp = 0; lp < WW3D::Get_Render_Device_Count(); lp++) {
const RenderDeviceDescClass &desc = WW3D::Get_Render_Device_Desc(lp);
char temp[255];
sprintf(temp, "%s", WW3D::Get_Render_Device_Name(lp));
m_Drivers.AddString(temp);
}
int idx = m_Drivers.FindStringExact(0, m_DeviceName);
if (idx != -1) {
m_Drivers.SetCurSel(idx);
OnSelchangeDrivers();
char temp[255];
sprintf(temp, "%d x %d in %d bit mode.", m_DeviceWidth, m_DeviceHeight, m_DeviceDepth);
int idx = m_Resolutions.FindStringExact(0, temp);
m_Resolutions.SetCurSel(idx);
m_RunFullScreen = !m_DeviceWindowed;
UpdateData(false);
}
return TRUE; // return TRUE unless you set the focus to a control
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CVidinitDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CVidinitDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CVidinitDlg::OnOK()
{
// TODO: Add extra validation here
UpdateData();
int driver = m_Drivers.GetCurSel();
if (driver == -1) return;
int sel = m_Resolutions.GetCurSel();
if (sel == -1) return;
const RenderDeviceDescClass &desc = WW3D::Get_Render_Device_Desc(driver);
const DynamicVectorClass<ResolutionDescClass>& res = desc.Enumerate_Resolutions();
// HACK: using constant 32 for texture depth. (DRM, 6/1/00)
// TODO: Add UI support for texture depth selection. (DRM, 6/1/00)
WW3D::Registry_Save_Render_Device( REGISTRY_KEY, driver, res[sel].Width, res[sel].Height, res[sel].BitDepth, !m_RunFullScreen, 32);
WW3D::Shutdown();
WWMath::Shutdown();
WWSaveLoad::Shutdown();
CDialog::OnOK();
}
void CVidinitDlg::OnCancel()
{
// TODO: Add extra cleanup here
WW3D::Shutdown();
WWMath::Shutdown();
WWSaveLoad::Shutdown();
CDialog::OnCancel();
}
void CVidinitDlg::OnSelchangeDrivers()
{
// TODO: Add your control notification handler code here
int driver = m_Drivers.GetCurSel();
const RenderDeviceDescClass &desc = WW3D::Get_Render_Device_Desc(driver);
SetDlgItemText(IDC_HARDWARE_NAME, desc.Get_Hardware_Name());
SetDlgItemText(IDC_HARDWARE_VENDOR, desc.Get_Hardware_Vendor());
SetDlgItemText(IDC_HARDWARE_CHIPSET, desc.Get_Hardware_Chipset());
SetDlgItemText(IDC_DRIVER_NAME, desc.Get_Device_Name());
SetDlgItemText(IDC_DRIVER_VENDOR, desc.Get_Device_Vendor());
const DynamicVectorClass<ResolutionDescClass>& res = desc.Enumerate_Resolutions();
while (m_Resolutions.GetCount()) {
m_Resolutions.DeleteString(0);
}
for (int lp = 0; lp < res.Count(); lp++) {
char temp[255];
sprintf(temp, "%d x %d in %d bit mode.", res[lp].Width, res[lp].Height, res[lp].BitDepth);
m_Resolutions.AddString(temp);
}
}
void CVidinitDlg::OnTest()
{
UpdateData(true);
// TODO: Add your control notification handler code here
int driver = m_Drivers.GetCurSel();
if (driver == -1) return;
int sel = m_Resolutions.GetCurSel();
if (sel == -1) return;
const RenderDeviceDescClass &desc = WW3D::Get_Render_Device_Desc(driver);
const DynamicVectorClass<ResolutionDescClass>& res = desc.Enumerate_Resolutions();
m_TestCWnd = new CSurrenderWnd(this, driver, res[sel].Width, res[sel].Height, res[sel].BitDepth, !m_RunFullScreen);
CWnd *wnd = GetDlgItem(IDTEST);
wnd->EnableWindow(false);
wnd = GetDlgItem(IDOK);
wnd->EnableWindow(false);
wnd = GetDlgItem(IDCANCEL);
wnd->EnableWindow(false);
}
LRESULT CVidinitDlg::OnDeadBeef(WPARAM wParam, LPARAM lParam)
{
if (m_TestCWnd && wParam == 0xDEADBEEF && lParam == 0xDEADBEEF) {
WW3D::Restore_Display_Mode();
m_TestCWnd->RemoveSubclass();
m_TestCWnd->PostMessage(WM_CLOSE);
m_TestCWnd = 0;
CWnd *wnd = GetDlgItem(IDTEST);
wnd->EnableWindow(true);
wnd = GetDlgItem(IDOK);
wnd->EnableWindow(true);
wnd = GetDlgItem(IDCANCEL);
wnd->EnableWindow(true);
}
return 0;
}

View File

@@ -0,0 +1,81 @@
/*
** Command & Conquer Renegade(tm)
** Copyright 2025 Electronic Arts Inc.
**
** This program is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
// vidinitDlg.h : header file
//
#if !defined(AFX_VIDINITDLG_H__AC2150AD_B8EF_4511_BA4A_DEDC16A03EDF__INCLUDED_)
#define AFX_VIDINITDLG_H__AC2150AD_B8EF_4511_BA4A_DEDC16A03EDF__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
/////////////////////////////////////////////////////////////////////////////
// CVidinitDlg dialog
class CSurrenderWnd;
class CVidinitDlg : public CDialog
{
// Construction
public:
CVidinitDlg(CWnd* pParent = NULL); // standard constructor
// Dialog Data
//{{AFX_DATA(CVidinitDlg)
enum { IDD = IDD_VIDINIT_DIALOG };
CListBox m_Resolutions;
CListBox m_Drivers;
BOOL m_RunFullScreen;
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CVidinitDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
HICON m_hIcon;
LPCTSTR m_WndClass;
CSurrenderWnd * m_TestCWnd;
char m_DeviceName[255];
int m_DeviceWidth;
int m_DeviceHeight;
int m_DeviceDepth;
int m_DeviceWindowed;
// Generated message map functions
//{{AFX_MSG(CVidinitDlg)
virtual BOOL OnInitDialog();
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
virtual void OnOK();
virtual void OnCancel();
afx_msg void OnSelchangeDrivers();
afx_msg void OnTest();
//}}AFX_MSG
afx_msg LRESULT OnDeadBeef(WPARAM, LPARAM);
DECLARE_MESSAGE_MAP()
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_VIDINITDLG_H__AC2150AD_B8EF_4511_BA4A_DEDC16A03EDF__INCLUDED_)