mirror of
https://github.com/TTimo/GtkRadiant.git
synced 2025-01-25 02:41:22 +00:00
* removed a lot of HACKs for several games by merging the enginepath_win32, enginepath_linux and enginepath_macos from 1.5
to 1.6 (default for everything is quake3) * removed the hacks for q2.game and heretic2.game (just check whether the game config value quake2 is set - TODO: game dialog needs update - quake2 option should be given) git-svn-id: svn://svn.icculus.org/gtkradiant/GtkRadiant/trunk@297 8a3a26a2-13c4-0310-b231-cf6edde360e5
This commit is contained in:
parent
5f6f117633
commit
f5b144e467
5 changed files with 141 additions and 245 deletions
|
@ -1340,7 +1340,7 @@ void GroupDlg::Create ()
|
||||||
EntWidgets[EntCheck1+i] = check;
|
EntWidgets[EntCheck1+i] = check;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g_pGameDescription->quake2 || ( g_pGameDescription->mGameFile == "q2.game" ) || ( g_pGameDescription->mGameFile == "heretic2.game" )) {
|
if (g_pGameDescription->quake2) {
|
||||||
GtkWidget *check = gtk_check_button_new_with_label (_("!Easy"));
|
GtkWidget *check = gtk_check_button_new_with_label (_("!Easy"));
|
||||||
gtk_widget_show (check);
|
gtk_widget_show (check);
|
||||||
gtk_signal_connect (GTK_OBJECT (check), "toggled", GTK_SIGNAL_FUNC (entity_check), NULL);
|
gtk_signal_connect (GTK_OBJECT (check), "toggled", GTK_SIGNAL_FUNC (entity_check), NULL);
|
||||||
|
|
|
@ -694,6 +694,31 @@ Games selection dialog
|
||||||
=========================================================
|
=========================================================
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(WIN32)
|
||||||
|
#define ENGINE_ATTRIBUTE "engine_win32"
|
||||||
|
#define MP_ENGINE_ATTRIBUTE "mp_engine_win32"
|
||||||
|
#elif defined(__linux__) || defined (__FreeBSD__)
|
||||||
|
#define ENGINE_ATTRIBUTE "engine_linux"
|
||||||
|
#define MP_ENGINE_ATTRIBUTE "mp_engine_linux"
|
||||||
|
#elif defined(__APPLE__)
|
||||||
|
#define ENGINE_ATTRIBUTE "engine_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)
|
CGameDescription::CGameDescription(xmlDocPtr pDoc, const Str &GameFile)
|
||||||
{
|
{
|
||||||
char *p, *prop;
|
char *p, *prop;
|
||||||
|
@ -710,7 +735,7 @@ CGameDescription::CGameDescription(xmlDocPtr pDoc, const Str &GameFile)
|
||||||
// on win32, game tools path can now be specified relative to the exe's cwd
|
// 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*)"gametools" );
|
||||||
if ( prop == NULL ) {
|
if ( prop == NULL ) {
|
||||||
Error( "Didn't find 'gametools' node in the game description file '%s'\n", pDoc->URL );
|
Error( "Didn't find 'gametools' node in the game description file '%s'\n", pDoc->URL );
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
char full[PATH_MAX];
|
char full[PATH_MAX];
|
||||||
|
@ -784,58 +809,78 @@ CGameDescription::CGameDescription(xmlDocPtr pDoc, const Str &GameFile)
|
||||||
xmlFree(prop);
|
xmlFree(prop);
|
||||||
}
|
}
|
||||||
|
|
||||||
// on win32, engine path can now be specified relative to the exe's cwd
|
|
||||||
prop = (char*)xmlGetProp(pNode, (const xmlChar *)"enginepath");
|
|
||||||
if ( prop != NULL ) {
|
|
||||||
char full[PATH_MAX];
|
|
||||||
#ifdef _WIN32
|
|
||||||
_fullpath( full, prop, PATH_MAX );
|
|
||||||
#else
|
|
||||||
strncpy( full, prop, PATH_MAX );
|
|
||||||
#endif
|
|
||||||
xmlFree( prop );
|
|
||||||
prop = NULL;
|
|
||||||
// process seperators
|
|
||||||
for ( p = full; *p != '\0'; p++ ) {
|
|
||||||
if ( *p == '\\' ) {
|
|
||||||
*p = '/';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
mEnginePath = full;
|
|
||||||
if ( p != full && *(p-1) != '/' ) {
|
|
||||||
mEnginePath += "/";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// if engine path was not specified in the .game, it implies we can guess it from the gametools path
|
|
||||||
// on win32, and for most game package, the gametools are installed with the game
|
|
||||||
char aux_path[PATH_MAX]; // aux
|
|
||||||
strcpy( aux_path, mGameToolsPath.GetBuffer() );
|
|
||||||
if ( ( aux_path[ strlen(aux_path)-1 ] == '/' ) || ( aux_path[ strlen(aux_path)-1 ] == '\\' ) ) {
|
|
||||||
aux_path[strlen(aux_path)-1] = '\0'; // strip ending '/' if any
|
|
||||||
}
|
|
||||||
char up_path[PATH_MAX]; // up one level
|
|
||||||
ExtractFilePath( aux_path, up_path );
|
|
||||||
mEnginePath = up_path;
|
|
||||||
}
|
|
||||||
|
|
||||||
prop = (char*)xmlGetProp(pNode, (xmlChar*)"engine");
|
prop = (char*)xmlGetProp(pNode, (const xmlChar*)ENGINE_ATTRIBUTE);
|
||||||
if (prop == NULL)
|
if (prop == NULL)
|
||||||
{
|
{
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
mEngine = "quake3.exe";
|
mEngine = "quake3.exe";
|
||||||
#elif __linux__
|
#elif __linux__
|
||||||
mEngine = "quake3";
|
mEngine = "quake3";
|
||||||
#elif __APPLE__
|
#elif __APPLE__
|
||||||
mEngine = "Quake3.app";
|
mEngine = "Quake3.app";
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
mEngine = prop;
|
mEngine = prop;
|
||||||
xmlFree(prop);
|
xmlFree(prop);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
prop = (char*)xmlGetProp(pNode, (const xmlChar*)MP_ENGINE_ATTRIBUTE);
|
||||||
|
if (prop == NULL)
|
||||||
|
{
|
||||||
|
#ifdef _WIN32
|
||||||
|
mMultiplayerEngine = "quake3.exe";
|
||||||
|
#elif __linux__
|
||||||
|
mMultiplayerEngine = "quake3";
|
||||||
|
#elif __APPLE__
|
||||||
|
mMultiplayerEngine = "Quake3.app";
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mMultiplayerEngine = prop;
|
||||||
|
xmlFree(prop);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
// on win32, engine path can now be specified relative to the exe's cwd
|
||||||
|
prop = (char*)xmlGetProp(pNode, (const xmlChar *)ENGINEPATH_ATTRIBUTE);
|
||||||
|
if ( prop != NULL ) {
|
||||||
|
char full[PATH_MAX];
|
||||||
|
#ifdef _WIN32
|
||||||
|
_fullpath( full, prop, PATH_MAX );
|
||||||
|
#else
|
||||||
|
strncpy( full, prop, PATH_MAX );
|
||||||
|
#endif
|
||||||
|
xmlFree( prop );
|
||||||
|
prop = NULL;
|
||||||
|
// process seperators
|
||||||
|
for ( p = full; *p != '\0'; p++ ) {
|
||||||
|
if ( *p == '\\' ) {
|
||||||
|
*p = '/';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mEnginePath = full;
|
||||||
|
if ( p != full && *(p-1) != '/' ) {
|
||||||
|
mEnginePath += "/";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// if engine path was not specified in the .game, it implies we can guess it from the gametools path
|
||||||
|
// on win32, and for most game package, the gametools are installed with the game
|
||||||
|
char aux_path[PATH_MAX]; // aux
|
||||||
|
strcpy( aux_path, mGameToolsPath.GetBuffer() );
|
||||||
|
if ( ( aux_path[ strlen(aux_path)-1 ] == '/' ) || ( aux_path[ strlen(aux_path)-1 ] == '\\' ) ) {
|
||||||
|
aux_path[strlen(aux_path)-1] = '\0'; // strip ending '/' if any
|
||||||
|
}
|
||||||
|
char up_path[PATH_MAX]; // up one level
|
||||||
|
ExtractFilePath( aux_path, up_path );
|
||||||
|
mEnginePath = up_path;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#if defined (__linux__) || defined (__APPLE__)
|
#if defined (__linux__) || defined (__APPLE__)
|
||||||
// *nix specific
|
// *nix specific
|
||||||
|
@ -2884,7 +2929,7 @@ void PrefsDlg::LoadPrefs ()
|
||||||
// Texture subset on by default (HL specific really, because of halflife.wad's size)
|
// Texture subset on by default (HL specific really, because of halflife.wad's size)
|
||||||
mLocalPrefs.GetPref(TEXTURE_KEY, &m_bTextureWindow, TRUE);
|
mLocalPrefs.GetPref(TEXTURE_KEY, &m_bTextureWindow, TRUE);
|
||||||
}
|
}
|
||||||
else if (g_pGameDescription->quake2 || ( g_pGameDescription->mGameFile == "q2.game" ) || ( g_pGameDescription->mGameFile == "heretic2.game" ))
|
else if (g_pGameDescription->quake2)
|
||||||
{
|
{
|
||||||
// BSP monitoring is implemented in Quake2 and Heretic2 tools
|
// BSP monitoring is implemented in Quake2 and Heretic2 tools
|
||||||
mLocalPrefs.GetPref(WATCHBSP_KEY, &m_bWatchBSP, TRUE);
|
mLocalPrefs.GetPref(WATCHBSP_KEY, &m_bWatchBSP, TRUE);
|
||||||
|
@ -3327,7 +3372,7 @@ void CGameInstall::Run() {
|
||||||
}
|
}
|
||||||
fprintf( fg, "<?xml version=\"1.0\" encoding=\"iso-8859-1\" standalone=\"yes\"?>\n<game\n" );
|
fprintf( fg, "<?xml version=\"1.0\" encoding=\"iso-8859-1\" standalone=\"yes\"?>\n<game\n" );
|
||||||
fprintf( fg, " name=\"%s\"\n", m_strName.GetBuffer() );
|
fprintf( fg, " name=\"%s\"\n", m_strName.GetBuffer() );
|
||||||
fprintf( fg, " enginepath=\"%s\"\n", m_strEngine.GetBuffer() );
|
fprintf( fg, " "ENGINEPATH_ATTRIBUTE"=\"%s\"\n", m_strEngine.GetBuffer() );
|
||||||
switch ( m_availGames[ m_nComboSelect ] ) {
|
switch ( m_availGames[ m_nComboSelect ] ) {
|
||||||
case GAME_Q2: {
|
case GAME_Q2: {
|
||||||
fprintf( fg, " gametools=\"%sinstalls/Quake2Pack/game\"\n", g_strAppPath.GetBuffer() );
|
fprintf( fg, " gametools=\"%sinstalls/Quake2Pack/game\"\n", g_strAppPath.GetBuffer() );
|
||||||
|
|
|
@ -171,6 +171,7 @@ public:
|
||||||
Str mBaseGame; ///< basegame directory
|
Str mBaseGame; ///< basegame directory
|
||||||
Str mEnginePath; ///< path to the engine
|
Str mEnginePath; ///< path to the engine
|
||||||
Str mEngine; ///< engine name
|
Str mEngine; ///< engine name
|
||||||
|
Str mMultiplayerEngine; ///< engine name
|
||||||
#if defined (__linux__) || defined (__APPLE__)
|
#if defined (__linux__) || defined (__APPLE__)
|
||||||
Str mUserPathPrefix; ///< prefix for ~/.q3a ~/.wolf init, only on *nix
|
Str mUserPathPrefix; ///< prefix for ~/.q3a ~/.wolf init, only on *nix
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -168,14 +168,14 @@ void SI_SetTexdef_FaceList(texdef_to_face_t* texdef_face_list, bool b_SetUndoPoi
|
||||||
texdef_to_face_t* texdef_to_face;
|
texdef_to_face_t* texdef_to_face;
|
||||||
bool b_isQuake2;
|
bool b_isQuake2;
|
||||||
|
|
||||||
if ( ( g_pGameDescription->quake2 ) || ( g_pGameDescription->mGameFile == "q2.game" ) || ( g_pGameDescription->mGameFile == "heretic2.game" ) )
|
if (g_pGameDescription->quake2)
|
||||||
b_isQuake2 = true;
|
b_isQuake2 = true;
|
||||||
else
|
else
|
||||||
b_isQuake2 = false;
|
b_isQuake2 = false;
|
||||||
|
|
||||||
if (!texdef_face_list)
|
if (!texdef_face_list)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (b_SetUndoPoint)
|
if (b_SetUndoPoint)
|
||||||
{
|
{
|
||||||
if(g_ptrSelectedFaces.GetSize() > 1)
|
if(g_ptrSelectedFaces.GetSize() > 1)
|
||||||
|
@ -190,42 +190,42 @@ void SI_SetTexdef_FaceList(texdef_to_face_t* texdef_face_list, bool b_SetUndoPoi
|
||||||
SetFaceTexdef(texdef_to_face->face, &texdef_to_face->orig_texdef, NULL);
|
SetFaceTexdef(texdef_to_face->face, &texdef_to_face->orig_texdef, NULL);
|
||||||
|
|
||||||
Undo_Start("set facelist texdefs");
|
Undo_Start("set facelist texdefs");
|
||||||
|
|
||||||
if( selected_brushes.next != &selected_brushes )
|
if( selected_brushes.next != &selected_brushes )
|
||||||
Undo_AddBrushList(&selected_brushes);
|
Undo_AddBrushList(&selected_brushes);
|
||||||
else
|
else
|
||||||
Undo_AddBrush(texdef_face_list->brush);
|
Undo_AddBrush(texdef_face_list->brush);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for(texdef_to_face = texdef_face_list; texdef_to_face; texdef_to_face = texdef_to_face->next)
|
for(texdef_to_face = texdef_face_list; texdef_to_face; texdef_to_face = texdef_to_face->next)
|
||||||
{
|
{
|
||||||
if (b_isQuake2)
|
if (b_isQuake2)
|
||||||
SetFaceTexdef_Q2(texdef_to_face->face, &texdef_to_face->texdef, bFit_to_Scale);
|
SetFaceTexdef_Q2(texdef_to_face->face, &texdef_to_face->texdef, bFit_to_Scale);
|
||||||
else
|
else
|
||||||
SetFaceTexdef(texdef_to_face->face, &texdef_to_face->texdef, NULL , bFit_to_Scale);
|
SetFaceTexdef(texdef_to_face->face, &texdef_to_face->texdef, NULL , bFit_to_Scale);
|
||||||
Brush_Build(texdef_to_face->brush);
|
Brush_Build(texdef_to_face->brush);
|
||||||
if(bFit_to_Scale)
|
if(bFit_to_Scale)
|
||||||
texdef_to_face->texdef = texdef_to_face->face->texdef;
|
texdef_to_face->texdef = texdef_to_face->face->texdef;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( b_SetUndoPoint )
|
if ( b_SetUndoPoint )
|
||||||
{
|
{
|
||||||
if( (selected_brushes.next != &selected_brushes) || (g_ptrSelectedFaces.GetSize() == 1) )
|
if( (selected_brushes.next != &selected_brushes) || (g_ptrSelectedFaces.GetSize() == 1) )
|
||||||
{
|
{
|
||||||
if(selected_brushes.next != &selected_brushes)
|
if(selected_brushes.next != &selected_brushes)
|
||||||
Undo_EndBrushList(&selected_brushes);
|
Undo_EndBrushList(&selected_brushes);
|
||||||
else
|
else
|
||||||
Undo_EndBrush(texdef_face_list->brush);
|
Undo_EndBrush(texdef_face_list->brush);
|
||||||
|
|
||||||
Undo_End();
|
Undo_End();
|
||||||
// Over-write the orig_texdef list, cementing the change.
|
// Over-write the orig_texdef list, cementing the change.
|
||||||
for(texdef_to_face = texdef_face_list; texdef_to_face; texdef_to_face = texdef_to_face->next)
|
for(texdef_to_face = texdef_face_list; texdef_to_face; texdef_to_face = texdef_to_face->next)
|
||||||
texdef_to_face->orig_texdef = texdef_to_face->texdef;
|
texdef_to_face->orig_texdef = texdef_to_face->texdef;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Sys_UpdateWindows (W_ALL);
|
Sys_UpdateWindows (W_ALL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -239,7 +239,7 @@ void SI_FaceList_FitTexture(texdef_to_face_t* si_texdef_face_list, int nHeight,
|
||||||
for (temp_texdef_face_list = si_texdef_face_list; temp_texdef_face_list; temp_texdef_face_list = temp_texdef_face_list->next)
|
for (temp_texdef_face_list = si_texdef_face_list; temp_texdef_face_list; temp_texdef_face_list = temp_texdef_face_list->next)
|
||||||
{
|
{
|
||||||
Face_FitTexture(temp_texdef_face_list->face, nHeight, nWidth);
|
Face_FitTexture(temp_texdef_face_list->face, nHeight, nWidth);
|
||||||
Brush_Build(temp_texdef_face_list->brush,true,true,false,false);
|
Brush_Build(temp_texdef_face_list->brush,true,true,false,false);
|
||||||
// Write changes to our working Texdef list
|
// Write changes to our working Texdef list
|
||||||
temp_texdef_face_list->texdef = temp_texdef_face_list->face->texdef;
|
temp_texdef_face_list->texdef = temp_texdef_face_list->face->texdef;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,30 +2,30 @@
|
||||||
Copyright (c) 2001, Loki software, inc.
|
Copyright (c) 2001, Loki software, inc.
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without modification,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
are permitted provided that the following conditions are met:
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
Redistributions of source code must retain the above copyright notice, this list
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
of conditions and the following disclaimer.
|
of conditions and the following disclaimer.
|
||||||
|
|
||||||
Redistributions in binary form must reproduce the above copyright notice, this
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
list of conditions and the following disclaimer in the documentation and/or
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
other materials provided with the distribution.
|
other materials provided with the distribution.
|
||||||
|
|
||||||
Neither the name of Loki software nor the names of its contributors may be used
|
Neither the name of Loki software nor the names of its contributors may be used
|
||||||
to endorse or promote products derived from this software without specific prior
|
to endorse or promote products derived from this software without specific prior
|
||||||
written permission.
|
written permission.
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
|
||||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
|
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
|
||||||
DIRECT,INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
DIRECT,INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
@ -68,7 +68,7 @@ static void abortStream(message_info_t *data)
|
||||||
|
|
||||||
#include "stream_version.h"
|
#include "stream_version.h"
|
||||||
|
|
||||||
static void saxStartElement(message_info_t *data, const xmlChar *name, const xmlChar **attrs)
|
static void saxStartElement(message_info_t *data, const xmlChar *name, const xmlChar **attrs)
|
||||||
{
|
{
|
||||||
if (data->ignore_depth == 0)
|
if (data->ignore_depth == 0)
|
||||||
{
|
{
|
||||||
|
@ -93,7 +93,7 @@ static void saxStartElement(message_info_t *data, const xmlChar *name, const xml
|
||||||
}
|
}
|
||||||
else if (strcmp((char*)attrs[1],Q3MAP_STREAM_VERSION) != 0)
|
else if (strcmp((char*)attrs[1],Q3MAP_STREAM_VERSION) != 0)
|
||||||
{
|
{
|
||||||
Sys_FPrintf(SYS_ERR,
|
Sys_FPrintf(SYS_ERR,
|
||||||
"This version of Radiant reads version %s debug streams, I got an incoming connection with version %s\n"
|
"This version of Radiant reads version %s debug streams, I got an incoming connection with version %s\n"
|
||||||
"Please make sure your versions of Radiant and q3map are matching.\n", Q3MAP_STREAM_VERSION, (char*)attrs[1]);
|
"Please make sure your versions of Radiant and q3map are matching.\n", Q3MAP_STREAM_VERSION, (char*)attrs[1]);
|
||||||
abortStream(data);
|
abortStream(data);
|
||||||
|
@ -105,7 +105,7 @@ static void saxStartElement(message_info_t *data, const xmlChar *name, const xml
|
||||||
{
|
{
|
||||||
data->msg_level = atoi ((char *)attrs[1]);
|
data->msg_level = atoi ((char *)attrs[1]);
|
||||||
}
|
}
|
||||||
else if (strcmp ((char *)name, "polyline") == 0)
|
else if (strcmp ((char *)name, "polyline") == 0)
|
||||||
// polyline has a particular status .. right now we only use it for leakfile ..
|
// polyline has a particular status .. right now we only use it for leakfile ..
|
||||||
{
|
{
|
||||||
data->bGeometry = true;
|
data->bGeometry = true;
|
||||||
|
@ -205,7 +205,7 @@ static void saxWarning(void *ctx, const char *msg, ...)
|
||||||
{
|
{
|
||||||
char saxMsgBuffer[4096];
|
char saxMsgBuffer[4096];
|
||||||
va_list args;
|
va_list args;
|
||||||
|
|
||||||
va_start(args, msg);
|
va_start(args, msg);
|
||||||
vsprintf (saxMsgBuffer, msg, args);
|
vsprintf (saxMsgBuffer, msg, args);
|
||||||
va_end(args);
|
va_end(args);
|
||||||
|
@ -216,7 +216,7 @@ static void saxError(void *ctx, const char *msg, ...)
|
||||||
{
|
{
|
||||||
char saxMsgBuffer[4096];
|
char saxMsgBuffer[4096];
|
||||||
va_list args;
|
va_list args;
|
||||||
|
|
||||||
va_start(args, msg);
|
va_start(args, msg);
|
||||||
vsprintf (saxMsgBuffer, msg, args);
|
vsprintf (saxMsgBuffer, msg, args);
|
||||||
va_end(args);
|
va_end(args);
|
||||||
|
@ -226,9 +226,9 @@ static void saxError(void *ctx, const char *msg, ...)
|
||||||
static void saxFatal(void *ctx, const char *msg, ...)
|
static void saxFatal(void *ctx, const char *msg, ...)
|
||||||
{
|
{
|
||||||
char buffer[4096];
|
char buffer[4096];
|
||||||
|
|
||||||
va_list args;
|
va_list args;
|
||||||
|
|
||||||
va_start(args, msg);
|
va_start(args, msg);
|
||||||
vsprintf (buffer, msg, args);
|
vsprintf (buffer, msg, args);
|
||||||
va_end(args);
|
va_end(args);
|
||||||
|
@ -390,7 +390,7 @@ void CWatchBSP::RoutineProcessing()
|
||||||
{
|
{
|
||||||
Sys_Printf("Connected.\n");
|
Sys_Printf("Connected.\n");
|
||||||
// prepare the message info struct for diving in
|
// prepare the message info struct for diving in
|
||||||
memset (&m_message_info, 0, sizeof(message_info_s));
|
memset (&m_message_info, 0, sizeof(message_info_s));
|
||||||
// a dumb flag to make sure we init the push parser context when first getting a msg
|
// a dumb flag to make sure we init the push parser context when first getting a msg
|
||||||
m_bNeedCtxtInit = true;
|
m_bNeedCtxtInit = true;
|
||||||
m_eState = EWatching;
|
m_eState = EWatching;
|
||||||
|
@ -503,173 +503,23 @@ void CWatchBSP::RoutineProcessing()
|
||||||
// build the command line
|
// build the command line
|
||||||
cmd = g_pGameDescription->mEnginePath.GetBuffer();
|
cmd = g_pGameDescription->mEnginePath.GetBuffer();
|
||||||
// this is game dependant
|
// this is game dependant
|
||||||
//!\todo Read the engine binary name from a config file.
|
if (!strcmp(ValueForKey(g_qeglobals.d_project_entity, "gamemode"),"mp"))
|
||||||
if (g_pGameDescription->mGameFile == "wolf.game")
|
|
||||||
{
|
{
|
||||||
if (!strcmp(ValueForKey(g_qeglobals.d_project_entity, "gamemode"),"mp"))
|
// MP
|
||||||
{
|
cmd += g_pGameDescription->mMultiplayerEngine.GetBuffer();
|
||||||
// MP
|
|
||||||
#if defined(WIN32)
|
|
||||||
cmd += "WolfMP.exe";
|
|
||||||
#elif defined(__linux__)
|
|
||||||
cmd += "wolfmp";
|
|
||||||
#elif defined(__APPLE__)
|
|
||||||
cmd += "wolfmp.app";
|
|
||||||
#else
|
|
||||||
#error "WTF are you compiling on"
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// SP
|
|
||||||
#if defined(WIN32)
|
|
||||||
cmd += "WolfSP.exe";
|
|
||||||
#elif defined(__linux__)
|
|
||||||
cmd += "wolfsp";
|
|
||||||
#elif defined(__APPLE__)
|
|
||||||
cmd += "wolfsp.app";
|
|
||||||
#else
|
|
||||||
#error "WTF are you compiling on"
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
} else if (g_pGameDescription->mGameFile == "et.game")
|
|
||||||
{
|
|
||||||
#if defined(WIN32)
|
|
||||||
cmd += "et.exe";
|
|
||||||
#elif defined(__linux__)
|
|
||||||
cmd += "et";
|
|
||||||
#elif defined(__APPLE__)
|
|
||||||
cmd += "et.app";
|
|
||||||
#else
|
|
||||||
#error "WTF are you compiling on"
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
// RIANT
|
|
||||||
// JK2 HACK
|
|
||||||
else if (g_pGameDescription->mGameFile == "jk2.game")
|
|
||||||
{
|
|
||||||
if (!strcmp(ValueForKey(g_qeglobals.d_project_entity, "gamemode"),"mp"))
|
|
||||||
{
|
|
||||||
// MP
|
|
||||||
#if defined(WIN32)
|
|
||||||
cmd += "jk2MP.exe";
|
|
||||||
#elif defined(__linux__)
|
|
||||||
cmd += "jk2mp";
|
|
||||||
#elif defined(__APPLE__)
|
|
||||||
cmd += "jk2mp.app";
|
|
||||||
#else
|
|
||||||
#error "WTF are you compiling on"
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// SP
|
|
||||||
#if defined(WIN32)
|
|
||||||
cmd += "jk2SP.exe";
|
|
||||||
#elif defined(__linux__)
|
|
||||||
cmd += "jk2sp";
|
|
||||||
#elif defined(__APPLE__)
|
|
||||||
cmd += "jk2sp.app";
|
|
||||||
#else
|
|
||||||
#error "WTF are you compiling on"
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// TTimo
|
|
||||||
// JA HACK
|
|
||||||
else if (g_pGameDescription->mGameFile == "ja.game")
|
|
||||||
{
|
|
||||||
if (!strcmp(ValueForKey(g_qeglobals.d_project_entity, "gamemode"),"mp"))
|
|
||||||
{
|
|
||||||
// MP
|
|
||||||
#if defined(WIN32)
|
|
||||||
cmd += "jamp.exe";
|
|
||||||
#elif !defined(__linux__) && !defined(__APPLE__)
|
|
||||||
#error "WTF are you compiling on"
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// SP
|
|
||||||
#if defined(WIN32)
|
|
||||||
cmd += "jasp.exe";
|
|
||||||
#elif !defined(__linux__) && !defined(__APPLE__)
|
|
||||||
#error "WTF are you compiling on"
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// RIANT
|
|
||||||
// STVEF HACK
|
|
||||||
else if (g_pGameDescription->mGameFile == "stvef.game")
|
|
||||||
{
|
|
||||||
if (!strcmp(ValueForKey(g_qeglobals.d_project_entity, "gamemode"),"mp"))
|
|
||||||
{
|
|
||||||
// MP
|
|
||||||
#if defined(WIN32)
|
|
||||||
cmd += "stvoyHM.exe";
|
|
||||||
#elif defined(__linux__)
|
|
||||||
cmd += "stvoyHM";
|
|
||||||
#elif defined(__APPLE__)
|
|
||||||
cmd += "stvoyHM.app";
|
|
||||||
#else
|
|
||||||
#error "WTF are you compiling on"
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// SP
|
|
||||||
#if defined(WIN32)
|
|
||||||
cmd += "stvoy.exe";
|
|
||||||
#elif defined(__linux__)
|
|
||||||
cmd += "stvoy";
|
|
||||||
#elif defined(__APPLE__)
|
|
||||||
cmd += "stvoy.app";
|
|
||||||
#else
|
|
||||||
#error "WTF are you compiling on"
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// RIANT
|
|
||||||
// SOF2 HACK
|
|
||||||
else if (g_pGameDescription->mGameFile == "sof2.game")
|
|
||||||
{
|
|
||||||
if (!strcmp(ValueForKey(g_qeglobals.d_project_entity, "gamemode"),"mp"))
|
|
||||||
{
|
|
||||||
// MP
|
|
||||||
#if defined(WIN32)
|
|
||||||
cmd += "sof2MP.exe";
|
|
||||||
#elif defined(__linux__)
|
|
||||||
cmd += "b00gus";
|
|
||||||
#elif defined(__APPLE__)
|
|
||||||
cmd += "sof2MP.app";
|
|
||||||
#else
|
|
||||||
#error "WTF are you compiling on"
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// SP
|
|
||||||
#if defined(WIN32)
|
|
||||||
cmd += "sof2.exe";
|
|
||||||
#elif defined(__linux__)
|
|
||||||
cmd += "b00gus";
|
|
||||||
#elif defined(__APPLE__)
|
|
||||||
cmd += "sof2.app";
|
|
||||||
#else
|
|
||||||
#error "WTF are you compiling on"
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
// SP
|
||||||
cmd += g_pGameDescription->mEngine.GetBuffer();
|
cmd += g_pGameDescription->mEngine.GetBuffer();
|
||||||
}
|
}
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
// NOTE: we are using unix pathnames and CreateProcess doesn't like / in the program path
|
// NOTE: we are using unix pathnames and CreateProcess doesn't like / in the program path
|
||||||
|
// FIXME: This isn't true anymore, doesn't it?
|
||||||
FindReplace( cmd, "/", "\\" );
|
FindReplace( cmd, "/", "\\" );
|
||||||
#endif
|
#endif
|
||||||
Str cmdline;
|
Str cmdline;
|
||||||
if ( (g_pGameDescription->mGameFile == "q2.game") || (g_pGameDescription->mGameFile == "heretic2.game") )
|
if ( g_pGameDescription->quake2 )
|
||||||
{
|
{
|
||||||
cmdline = ". +exec radiant.cfg +map ";
|
cmdline = ". +exec radiant.cfg +map ";
|
||||||
cmdline += m_sBSPName;
|
cmdline += m_sBSPName;
|
||||||
|
@ -696,7 +546,7 @@ void CWatchBSP::RoutineProcessing()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// SP
|
// SP
|
||||||
cmdline += "+set nextmap \"spdevmap ";
|
cmdline += "+set nextmap \"spdevmap ";
|
||||||
cmdline += m_sBSPName;
|
cmdline += m_sBSPName;
|
||||||
cmdline += "\"";
|
cmdline += "\"";
|
||||||
|
@ -742,7 +592,7 @@ void CWatchBSP::DoMonitoringLoop( GPtrArray *pCmd, char *sBSPName )
|
||||||
{
|
{
|
||||||
Sys_Printf("WatchBSP got a monitoring request while not idling...\n");
|
Sys_Printf("WatchBSP got a monitoring request while not idling...\n");
|
||||||
// prompt the user, should we cancel the current process and go ahead?
|
// prompt the user, should we cancel the current process and go ahead?
|
||||||
if (gtk_MessageBox(g_pParentWnd->m_pWidget, "I am already monitoring a BSP process.\nDo you want me to override and start a new compilation?",
|
if (gtk_MessageBox(g_pParentWnd->m_pWidget, "I am already monitoring a BSP process.\nDo you want me to override and start a new compilation?",
|
||||||
"BSP process monitoring", MB_YESNO ) == IDYES)
|
"BSP process monitoring", MB_YESNO ) == IDYES)
|
||||||
{
|
{
|
||||||
// disconnect and set EIdle state
|
// disconnect and set EIdle state
|
||||||
|
|
Loading…
Reference in a new issue