#define WIDETOOLBAR_KEY "WideToolBar"
#define PLUGINTOOLBAR_KEY "PluginToolBar"
#define NOCLAMP_KEY "NoClamp"
+#define SNAP_KEY "Snap"
#define PREFAB_KEY "PrefabPath"
#define USERINI_KEY "UserINIPath"
#define ROTATION_KEY "Rotation"
m_bWideToolbar = TRUE;
m_bPluginToolbar = TRUE;
m_bNoClamp = FALSE;
+ m_bSnap = TRUE;
m_strUserPath = "";
m_nRotation = 0;
m_bChaseMouse = FALSE;
*/
#if defined(WIN32)
+#define TOOLS_ATTRIBUTE "gametools_win32"
#define ENGINE_ATTRIBUTE "engine_win32"
+#define ENGINEPATH_ATTRIBUTE "enginepath_win32"
#define MP_ENGINE_ATTRIBUTE "mp_engine_win32"
#elif defined(__linux__) || defined (__FreeBSD__)
+#define TOOLS_ATTRIBUTE "gametools_linux"
#define ENGINE_ATTRIBUTE "engine_linux"
+#define ENGINEPATH_ATTRIBUTE "enginepath_linux"
#define MP_ENGINE_ATTRIBUTE "mp_engine_linux"
#elif defined(__APPLE__)
+#define TOOLS_ATTRIBUTE "gametools_macos"
#define ENGINE_ATTRIBUTE "engine_macos"
+#define ENGINEPATH_ATTRIBUTE "enginepath_macos"
#define MP_ENGINE_ATTRIBUTE "mp_engine_macos"
#else
#error "unsupported platform"
#endif
-
-#if defined(WIN32)
-#define ENGINEPATH_ATTRIBUTE "enginepath_win32"
-#elif defined(__linux__) || defined (__FreeBSD__)
-#define ENGINEPATH_ATTRIBUTE "enginepath_linux"
-#elif defined(__APPLE__)
-#define ENGINEPATH_ATTRIBUTE "enginepath_macos"
-#else
-#error "unknown platform"
-#endif
-
-
CGameDescription::CGameDescription(xmlDocPtr pDoc, const Str &GameFile)
{
char *p, *prop;
Error("Didn't find 'game' node in the game description file '%s'\n", pDoc->URL);
}
// on win32, game tools path can now be specified relative to the exe's cwd
- prop = (char*)xmlGetProp( pNode, (xmlChar*)"gametools" );
+ prop = (char*)xmlGetProp( pNode, (xmlChar*)TOOLS_ATTRIBUTE);
if ( prop == NULL ) {
- Error( "Didn't find 'gametools' node in the game description file '%s'\n", pDoc->URL );
+ Error( "Didn't find '"TOOLS_ATTRIBUTE"' node in the game description file '%s'\n", pDoc->URL );
}
{
char full[PATH_MAX];
gtk_box_pack_start(GTK_BOX(vbox), check, FALSE, FALSE, 0);
AddDialogData (check, &m_bNoClamp, DLG_CHECK_BOOL);
+ // Snap to grid
+ check = gtk_check_button_new_with_label (_("Snap to grid"));
+ gtk_widget_show (check);
+ gtk_box_pack_start(GTK_BOX(vbox), check, FALSE, FALSE, 0);
+ AddDialogData (check, &m_bSnap, DLG_CHECK_BOOL);
+
// Select patch by bounding box
check = gtk_check_button_new_with_label (_("Select patches by bounding box"));
gtk_widget_show (check);
m_nShader = m_nLatchedShader;
mLocalPrefs.GetPref(NOCLAMP_KEY, &m_bNoClamp, FALSE);
+ mLocalPrefs.GetPref(SNAP_KEY, &m_bSnap, TRUE);
mLocalPrefs.GetPref(USERINI_KEY, &m_strUserPath, "");
mLocalPrefs.GetPref(ROTATION_KEY, &m_nRotation, 45);
mLocalPrefs.GetPref(CHASEMOUSE_KEY, &m_bChaseMouse, TRUE);
Sys_Printf( "OnBtnBrowseEngine\n" );
CGameInstall* i = static_cast<CGameInstall*>( data );
- char *dir = dir_dialog( widget, _("Select game directory"), NULL );
+ char *dir = dir_dialog( i->m_pWidget, _("Select game directory"), NULL );
i->UpdateData( TRUE );
if ( dir != NULL ) {
i->m_strEngine = dir;
i->UpdateData( FALSE );
- free( dir );
+ g_free( dir );
}
}
case GAME_TREMULOUS:
gtk_combo_box_append_text( GTK_COMBO_BOX( combo ), _("Tremulous") );
break;
+ case GAME_JA:
+ gtk_combo_box_append_text( GTK_COMBO_BOX( combo ), _("Jedi Academy and mods") );
+ break;
}
iGame++;
}
void CGameInstall::Run() {
ScanGames();
+ if (m_availGames[0] == GAME_NONE) {
+ return;
+ }
if ( DoModal() == IDCANCEL ) {
Sys_Printf( "game dialog cancelled\n" );
return;
Sys_Printf( "game file: %s\n", gameFilePath.GetBuffer() );
FILE *fg = fopen( gameFilePath.GetBuffer(), "w" );
- if ( fg == NULL ) {
+ if ( fg == NULL || ferror( fg ) ) {
Error( "Failed to open %s for writing\n", gameFilePath.GetBuffer() );
}
fprintf( fg, "<?xml version=\"1.0\" encoding=\"iso-8859-1\" standalone=\"yes\"?>\n<game\n" );
fprintf( fg, " "ENGINEPATH_ATTRIBUTE"=\"%s\"\n", m_strEngine.GetBuffer() );
switch ( m_availGames[ m_nComboSelect ] ) {
case GAME_Q2: {
- fprintf( fg, " gametools=\"%sinstalls/Quake2Pack/game\"\n", g_strAppPath.GetBuffer() );
+ fprintf( fg, " "TOOLS_ATTRIBUTE"=\"%sinstalls/Quake2Pack/game\"\n", g_strAppPath.GetBuffer() );
fprintf( fg, " prefix=\".quake2\"\n" );
Str source = g_strAppPath.GetBuffer();
source += "installs/";
break;
}
case GAME_Q3: {
- fprintf( fg, " gametools=\"%sinstalls/Q3Pack/game\"\n", g_strAppPath.GetBuffer() );
+ fprintf( fg, " "TOOLS_ATTRIBUTE"=\"%sinstalls/Q3Pack/game\"\n", g_strAppPath.GetBuffer() );
fprintf( fg, " prefix=\".q3a\"\n" );
Str source = g_strAppPath.GetBuffer();
source += "installs/";
break;
}
case GAME_URT: {
- fprintf( fg, " gametools=\"%sinstalls/UrTPack/game\"\n", g_strAppPath.GetBuffer() );
+ fprintf( fg, " "TOOLS_ATTRIBUTE"=\"%sinstalls/UrTPack/game\"\n", g_strAppPath.GetBuffer() );
fprintf( fg, " prefix=\".q3a\"\n" );
Str source = g_strAppPath.GetBuffer();
source += "installs/";
break;
}
case GAME_UFOAI: {
- fprintf( fg, " gametools=\"%sinstalls/UFOAIPack/game\"\n", g_strAppPath.GetBuffer() );
+ fprintf( fg, " "TOOLS_ATTRIBUTE"=\"%sinstalls/UFOAIPack/game\"\n", g_strAppPath.GetBuffer() );
fprintf( fg, " prefix=\".ufoai\"\n" );
Str source = g_strAppPath.GetBuffer();
source += "installs/";
break;
}
case GAME_Q2W: {
- fprintf( fg, " gametools=\"%sinstalls/Q2WPack/game\"\n", g_strAppPath.GetBuffer() );
+ fprintf( fg, " "TOOLS_ATTRIBUTE"=\"%sinstalls/Q2WPack/game\"\n", g_strAppPath.GetBuffer() );
fprintf( fg, " prefix=\".quake2world\"\n" );
Str source = g_strAppPath.GetBuffer();
source += "installs/";
break;
}
case GAME_WARSOW: {
- fprintf( fg, " gametools=\"%sinstalls/WarsowPack/game\"\n", g_strAppPath.GetBuffer() );
+ fprintf( fg, " "TOOLS_ATTRIBUTE"=\"%sinstalls/WarsowPack/game\"\n", g_strAppPath.GetBuffer() );
fprintf( fg, " prefix=\".warsow\"\n" );
Str source = g_strAppPath.GetBuffer();
source += "installs/";
break;
}
case GAME_NEXUIZ: {
- fprintf( fg, " gametools=\"%sinstalls/NexuizPack/game\"\n", g_strAppPath.GetBuffer() );
+ fprintf( fg, " "TOOLS_ATTRIBUTE"=\"%sinstalls/NexuizPack/game\"\n", g_strAppPath.GetBuffer() );
fprintf( fg, " prefix=\".nexuiz\"\n" );
Str source = g_strAppPath.GetBuffer();
source += "installs/";
break;
}
case GAME_TREMULOUS: {
- fprintf( fg, " gametools=\"%sinstalls/TremulousPack/game\"\n", g_strAppPath.GetBuffer() );
+ fprintf( fg, " "TOOLS_ATTRIBUTE"=\"%sinstalls/TremulousPack/game\"\n", g_strAppPath.GetBuffer() );
fprintf( fg, " prefix=\".tremulous\"\n" );
Str source = g_strAppPath.GetBuffer();
source += "installs/";
fprintf( fg, " basegame=\"base\"\n" );
break;
}
+ case GAME_JA: {
+ fprintf( fg, " "TOOLS_ATTRIBUTE"=\"%sinstalls/JAPack/game\"\n", g_strAppPath.GetBuffer() );
+ fprintf( fg, " prefix=\".ja\"\n" );
+ Str source = g_strAppPath.GetBuffer();
+ source += "installs/";
+ source += JA_PACK;
+ source += "/install/";
+ Str dest = m_strEngine.GetBuffer();
+ CopyTree( source.GetBuffer(), dest.GetBuffer() );
+ fprintf( fg, " basegame=\"base\"\n" );
+ break;
+ }
}
fprintf( fg, "/>\n" );
fclose( fg );
if ( stricmp( dirname, TREMULOUS_PACK ) == 0 ) {
m_availGames[ iGame++ ] = GAME_TREMULOUS;
}
+ if ( stricmp( dirname, JA_PACK ) == 0 ) {
+ m_availGames[ iGame++ ] = GAME_JA;
+ }
}
+ Sys_Printf("No installable games found in: %s\n",
+ pakPaths.GetBuffer() );
}