Compare commits

..

4 Commits

14 changed files with 270 additions and 96 deletions

View File

@ -19,14 +19,15 @@ int main( int argc, char **argv )
{
int i;
// if( argc <= 1 )
// COM_FatalError( "usage: bsp31migrate -file <path.bsp> -output <path.bsp>\n" );
COM_InitCmdlib( argv, argc );
if(( i = COM_CheckParm( "-dev" )) != 0 )
{
i = COM_CheckParm( "-dev" );
if( i != 0 && argc > i+1 )
SetDeveloperLevel( atoi( argv[i+1] ));
if( COM_CheckParm( "-help" ) != 0 )
{
Msg( "usage: bsp31migrate -file <path.bsp> -output <path.bsp>\n" );
return 0;
}
return BspConvert( argc, argv );

View File

@ -16,7 +16,7 @@ GNU General Public License for more details.
#ifndef BSP31MIGRATE_H
#define BSP31MIGRATE_H
#include <windows.h>
#include "port.h"
#include "cmdlib.h"
#include "mathlib.h"
#include "stringlib.h"
@ -26,7 +26,6 @@ GNU General Public License for more details.
#include "wadfile.h"
#include "bspfile31.h"
#include <fcntl.h>
#include <io.h>
typedef enum
{

View File

@ -15,6 +15,7 @@ GNU General Public License for more details.
#include "bsp31migrate.h"
#include "filesystem.h"
#include "stringlib.h"
#define VALVE_FORMAT 220
@ -117,46 +118,38 @@ void PrintMapInfo( void )
char *ptr = &g_mapinfo[infolen-2];
if( *ptr == ',' ) *ptr = '.';
Msg( "Map name: %s", g_mapname );
Msg( "\nMap type: " );
Msg( "Map name: %s\n", g_mapname );
switch( g_maptype )
{
case MAP_XASH31:
Msg( "^2XashXT BSP31^7" );
Msg("Map Type: ^2XashXT BSP31^7\n");
break;
default:
COM_FatalError( "%s unknown map format\n", g_mapname );
break;
}
if( g_subtype != MAP_NORMAL )
Msg( "\nSub type: " );
else Msg( "\n" );
switch( g_subtype )
{
case MAP_HLFX06:
Msg( "^4HLFX 0.6^7\n" );
Msg( "Sub type: ^4HLFX 0.6^7\n" );
break;
case MAP_XASHXT_OLD:
Msg( "^4XashXT 0.5^7\n" );
Msg( "Sub type: ^4XashXT 0.5^7\n" );
break;
case MAP_P2SAVIOR:
Msg( "^4Paranoia2: Savior^7\n" );
Msg( "Sub type: ^4Paranoia2: Savior^7\n" );
break;
case MAP_DEPRECATED:
Msg( "^1intermediate deprecated version^7\n" );
Msg( "Sub type: ^1intermediate deprecated version^7\n" );
break;
case MAP_XASH3D_EXT:
Msg( "^4Xash3D extended^7\n" );
Msg( "Sub type: ^4Xash3D extended^7\n" );
break;
}
if( g_mapinfo[0] ) Msg( "Map info: %s", g_mapinfo );
Msg( "\n\n" );
if( g_mapinfo[0] ) Msg( "Map info: %s\n", g_mapinfo );
}
//=============================================================================
@ -1184,7 +1177,12 @@ int BspConvert( int argc, char **argv )
char output[1024];
if( !COM_GetParmExt( "-file", source, sizeof( source )))
if( COM_GetParmExt( "-file", source, sizeof( source )) && COM_GetParmExt( "-output", output, sizeof( output )) )
{
LoadBSPFile( source, output );
return 0;
}
Q_strncpy( source, "*.bsp", sizeof( source ));
search_t *search = COM_Search( source, true );
@ -1195,18 +1193,11 @@ int BspConvert( int argc, char **argv )
{
COM_FileBase( search->filenames[i], name );
Q_snprintf( output, sizeof( output ), "%s.bsp", name );
#if 0
if( COM_FileExists( output ))
continue; // map already converted
#endif
LoadBSPFile( search->filenames[i], output );
}
Mem_Free( search );
Mem_Check();
Msg( "press any key to exit\n" );
system( "pause>nul" );
return 0;
}

View File

@ -34,12 +34,15 @@ typedef unsigned long ulong;
typedef unsigned char uint8;
typedef signed char int8;
#ifdef _MSC_VER
typedef __int16 int16;
typedef unsigned __int16 uint16;
typedef __int32 int32;
typedef unsigned __int32 uint32;
typedef __int64 int64;
typedef unsigned __int64 uint64;
#endif
#undef true
#undef false

View File

@ -76,7 +76,7 @@ BRUSH MODELS
.bsp contain level static geometry with including PVS and lightning info
==============================================================================
*/
#include "..\..\common\bspfile.h"
#include "../../common/bspfile.h"
// header
#define Q1BSP_VERSION 29 // quake1 regular version (beta is 28)

View File

@ -21,13 +21,19 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
// cmdlib.c
#ifdef _WIN32
#include <windows.h>
#include <direct.h>
#include <io.h>
#endif
#include <stdio.h>
#include <fcntl.h>
#include <io.h>
#include "stringlib.h"
#include "cmdlib.h"
#include <stdarg.h>
#include <stdlib.h>
#include <unistd.h>
static char **com_argv;
static int com_argc = 0;
@ -118,7 +124,7 @@ void COM_FatalError( const char *error, ... )
va_list argptr;
va_start( argptr, error );
_vsnprintf( message, sizeof( message ), error, argptr );
snprintf( message, sizeof( message ), error, argptr );
va_end( argptr );
Msg( "^1Fatal Error:^7 %s", message );
@ -138,7 +144,7 @@ void COM_Assert( const char *error, ... )
va_list argptr;
va_start( argptr, error );
_vsnprintf( message, sizeof( message ), error, argptr );
snprintf( message, sizeof( message ), error, argptr );
va_end( argptr );
Msg( "^1assert failed at:^7 %s", message );
@ -147,8 +153,12 @@ void COM_Assert( const char *error, ... )
void Q_getwd( char *out, size_t size )
{
_getcwd( out, size );
getcwd( out, size );
#ifdef _WIN32
Q_strncat( out, "\\", size );
#else
Q_strncat( out, "/", size );
#endif
}
/*
@ -209,19 +219,40 @@ I_FloatTime
g-cont. the prefix 'I' was come from Doom code heh
================
*/
double I_FloatTime( void )
#ifdef _WIN32
#include <winbase.h>
double GAME_EXPORT I_FloatTime( void )
{
static LARGE_INTEGER g_Frequency;
static LARGE_INTEGER g_PerformanceFrequency;
static LARGE_INTEGER g_ClockStart;
LARGE_INTEGER CurrentTime;
if( !g_Frequency.QuadPart )
if( !g_PerformanceFrequency.QuadPart )
{
QueryPerformanceFrequency( &g_Frequency );
QueryPerformanceFrequency( &g_PerformanceFrequency );
QueryPerformanceCounter( &g_ClockStart );
}
QueryPerformanceCounter( &CurrentTime );
return (double)( CurrentTime.QuadPart - g_ClockStart.QuadPart ) / (double)( g_Frequency.QuadPart );
return (double)( CurrentTime.QuadPart - g_ClockStart.QuadPart ) / (double)( g_PerformanceFrequency.QuadPart );
}
#elif _LINUX
double GAME_EXPORT I_FloatTime( void )
{
static longtime_t g_PerformanceFrequency;
static longtime_t g_ClockStart;
longtime_t CurrentTime;
struct timespec ts;
if( !g_PerformanceFrequency )
{
struct timespec res;
if( !clock_getres(CLOCK_MONOTONIC, &res) )
g_PerformanceFrequency = 1000000000LL/res.tv_nsec;
}
clock_gettime(CLOCK_MONOTONIC, &ts);
return (double) ts.tv_sec + (double) ts.tv_nsec/1000000000.0;
}
#endif

View File

@ -18,8 +18,10 @@ GNU General Public License for more details.
#ifndef CMDLIB_H
#define CMDLIB_H
#include "port.h"
#include <basetypes.h>
#include "conprint.h"
#include "mathlib.h"
// bit routines
#define BIT( n ) (1<<( n ))

View File

@ -14,15 +14,19 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
*/
#include <windows.h>
#include <stdio.h>
#include <basetypes.h>
#include "basetypes.h"
#include "stringlib.h"
#include "conprint.h"
#include "stdarg.h"
#include <time.h>
#define IsColorString( p ) ( p && *( p ) == '^' && *(( p ) + 1) && *(( p ) + 1) >= '0' && *(( p ) + 1 ) <= '9' )
#define ColorIndex( c ) ((( c ) - '0' ) & 7 )
#ifdef _WIN32
#include <windows.h>
static unsigned short g_color_table[8] =
{
FOREGROUND_INTENSITY, // black
@ -34,6 +38,7 @@ FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_INTENSITY, // cyan
FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_INTENSITY, // magenta
FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE, // default color (white)
};
#endif
static int devloper_level = DEFAULT_DEVELOPER;
static bool ignore_log = false;
@ -87,8 +92,77 @@ void Sys_PrintLog( const char *pMsg )
if( !pMsg || ignore_log )
return;
if( !logfile ) return;
fprintf( logfile, "%s", pMsg );
time_t crt_time;
const struct tm *crt_tm;
char logtime[32] = "";
static char lastchar;
time( &crt_time );
crt_tm = localtime( &crt_time );
#ifdef __ANDROID__
__android_log_print( ANDROID_LOG_DEBUG, "Xash", "%s", pMsg );
#endif
if( !lastchar || lastchar == '\n')
strftime( logtime, sizeof( logtime ), "[%H:%M:%S] ", crt_tm ); //short time
#ifdef COLORIZE_CONSOLE
{
char colored[4096];
const char *msg = pMsg;
int len = 0;
while( *msg && ( len < 4090 ) )
{
static char q3ToAnsi[ 8 ] =
{
'0', // COLOR_BLACK
'1', // COLOR_RED
'2', // COLOR_GREEN
'3', // COLOR_YELLOW
'4', // COLOR_BLUE
'6', // COLOR_CYAN
'5', // COLOR_MAGENTA
0 // COLOR_WHITE
};
if( IsColorString( msg ) )
{
int color;
msg++;
color = q3ToAnsi[ *msg++ % 8 ];
colored[len++] = '\033';
colored[len++] = '[';
if( color )
{
colored[len++] = '3';
colored[len++] = color;
}
else
colored[len++] = '0';
colored[len++] = 'm';
}
else
colored[len++] = *msg++;
}
colored[len] = 0;
printf( "\033[34m%s\033[0m%s\033[0m", logtime, colored );
}
#else
#if !defined __ANDROID__
printf( "%s %s", logtime, pMsg );
fflush( stdout );
#endif
#endif
lastchar = pMsg[strlen(pMsg)-1];
if( !logfile )
return;
if( !lastchar || lastchar == '\n')
strftime( logtime, sizeof( logtime ), "[%Y:%m:%d|%H:%M:%S]", crt_tm ); //full time
fprintf( logfile, "%s %s", logtime, pMsg );
fflush( logfile );
}
@ -101,6 +175,7 @@ print into win32 console
*/
void Sys_Print( const char *pMsg )
{
#ifdef _WIN32
char tmpBuf[8192];
HANDLE hOut = GetStdHandle( STD_OUTPUT_HANDLE );
unsigned long cbWritten;
@ -146,6 +221,9 @@ void Sys_Print( const char *pMsg )
Sys_PrintLog( tmpBuf );
pTemp = tmpBuf;
}
#else
Sys_PrintLog( pMsg );
#endif
}
/*
@ -203,6 +281,7 @@ void MsgDev( int level, const char *pMsg, ... )
void MsgAnim( int level, const char *pMsg, ... )
{
#ifdef _WIN32
va_list argptr;
char text[1024];
char empty[1024];
@ -228,4 +307,5 @@ void MsgAnim( int level, const char *pMsg, ... )
Sleep( 150 );
}
Msg( "^7\n" );
#endif
}

View File

@ -13,11 +13,19 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
*/
#ifdef _WIN32
#include <windows.h>
#include <direct.h>
#include <io.h>
#else
#include <dirent.h>
#include <errno.h>
#include <unistd.h>
#define O_BINARY 0
#endif
#include <fcntl.h>
#include <stdio.h>
#include <io.h>
#include "conprint.h"
#include "cmdlib.h"
#include "stringlib.h"
@ -147,16 +155,21 @@ void stringlistsort( stringlist_t *list )
}
}
void listdirectory( stringlist_t *list, const char *path, bool tolower )
void listdirectory( stringlist_s *list, const char *path, bool lowercase )
{
int i;
signed char *c;
#ifdef _WIN32
char pattern[4096];
struct _finddata_t n_file;
long hFile;
char *c;
int i;
int hFile;
#else
DIR *dir;
struct dirent *entry;
#endif
Q_strncpy( pattern, path, sizeof( pattern ));
Q_strncat( pattern, "*", sizeof( pattern ));
#ifdef _WIN32
Q_snprintf( pattern, sizeof( pattern ), "%s*", path );
// ask for the directory listing handle
hFile = _findfirst( pattern, &n_file );
@ -164,22 +177,33 @@ void listdirectory( stringlist_t *list, const char *path, bool tolower )
// start a new chain with the the first name
stringlistappend( list, n_file.name );
// iterate through the directory
while( _findnext( hFile, &n_file ) == 0 )
stringlistappend( list, n_file.name );
_findclose( hFile );
#else
if( !( dir = opendir( path ) ) )
return;
if( !tolower ) return;
// iterate through the directory
while( ( entry = readdir( dir ) ))
stringlistappend( list, entry->d_name );
closedir( dir );
#endif
// convert names to lowercase because windows doesn't care, but pattern matching code often does
if( lowercase )
{
for( i = 0; i < list->numstrings; i++ )
{
for( c = list->strings[i]; *c; c++ )
*c = Q_tolower( *c );
for( c = (signed char *)list->strings[i]; *c; c++ )
{
if( *c >= 'A' && *c <= 'Z' )
*c += 'a' - 'A';
}
}
}
}
/*
=============================================================================
@ -200,7 +224,7 @@ search_t *COM_Search( const char *pattern, int caseinsensitive, wfile_t *source_
int i, basepathlength, numfiles, numchars;
int resultlistindex, dirlistindex;
const char *slash, *backslash, *colon, *separator;
char netpath[1024], temp[1024], root[1204];
char netpath[1024], temp[1024], root[1024];
stringlist_t resultlist, dirlist;
char *basepath;
@ -212,20 +236,21 @@ search_t *COM_Search( const char *pattern, int caseinsensitive, wfile_t *source_
return NULL;
}
if( !GetCurrentDirectory( sizeof( root ), root ))
Q_getwd( root, sizeof( root ) );
if( !root )
{
MsgDev( D_ERROR, "couldn't determine current directory\n" );
return NULL;
}
Q_strncat( root, "\\", sizeof( root ));
stringlistinit( &resultlist );
stringlistinit( &dirlist );
slash = Q_strrchr( pattern, '/' );
backslash = Q_strrchr( pattern, '\\' );
colon = Q_strrchr( pattern, ':' );
separator = max( slash, backslash );
separator = max( separator, colon );
separator = Q_max( slash, backslash );
separator = Q_max( separator, colon );
basepathlength = separator ? (separator + 1 - pattern) : 0;
basepath = (char *)Mem_Alloc( basepathlength + 1 );
if( basepathlength ) memcpy( basepath, pattern, basepathlength );
@ -357,7 +382,11 @@ void COM_CreatePath( char *path )
// create the directory
save = *ofs;
*ofs = 0;
_mkdir( path );
#ifdef _WIN32
mkdir( path );
#else
mkdir( path, 0777);
#endif
*ofs = save;
}
}
@ -370,6 +399,7 @@ COM_FileExists
*/
bool COM_FileExists( const char *path )
{
#ifdef _WIN32
int desc;
if(( desc = open( path, O_RDONLY|O_BINARY )) < 0 )
@ -377,6 +407,17 @@ bool COM_FileExists( const char *path )
close( desc );
return true;
#else
int ret;
struct stat buf;
ret = stat( path, &buf );
if( ret < 0 )
return false;
return S_ISREG( buf.st_mode );
#endif
}
/*
@ -555,9 +596,28 @@ COM_FolderExists
*/
bool COM_FolderExists( const char *path )
{
#if XASH_WIN32
DWORD dwFlags = GetFileAttributes( path );
return ( dwFlags != -1 ) && FBitSet( dwFlags, FILE_ATTRIBUTE_DIRECTORY );
return ( dwFlags != -1 ) && ( dwFlags & FILE_ATTRIBUTE_DIRECTORY );
#else
DIR *dir = opendir( path );
if( dir )
{
closedir( dir );
return true;
}
else if( (errno == ENOENT) || (errno == ENOTDIR) )
{
return false;
}
else
{
MsgDev( D_ERROR, "FS_SysFolderExists: problem while opening dir: %s\n", strerror( errno ) );
return false;
}
#endif
}
/*

View File

@ -193,6 +193,7 @@ SinCos
*/
void SinCos( float radians, float *sine, float *cosine )
{
#if defined _MSC_VER && defined(__i386__)
_asm
{
fld dword ptr [radians]
@ -204,6 +205,10 @@ void SinCos( float radians, float *sine, float *cosine )
fstp dword ptr [edx]
fstp dword ptr [eax]
}
#else
*sine = sin(radians);
*cosine = cos(radians);
#endif
}
/*
@ -405,7 +410,8 @@ fast box on planeside test
*/
int SignbitsForPlane( const vec3_t normal )
{
for( int bits = 0, i = 0; i < 3; i++ )
int bits, i;
for( bits = 0, i = 0; i < 3; i++ )
if( normal[i] < 0.0f )
bits |= 1<<i;
return bits;

View File

@ -28,7 +28,6 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#include "stringlib.h"
#include "filesystem.h"
#include <stdarg.h>
#include <windows.h>
/*
=============================================================================

View File

@ -3,11 +3,12 @@
// stringlib.cpp - safety string routines
//=======================================================================
#include <windows.h>
#include "port.h"
#include <ctype.h>
#include "stringlib.h"
#include <direct.h>
#include "cmdlib.h"
#include "mathlib.h"
#include "stdarg.h"
void Q_strnupr( const char *in, char *out, size_t size_out )
{
@ -287,17 +288,21 @@ int Q_vsnprintf( char *buffer, size_t buffersize, const char *format, va_list ar
{
size_t result;
#ifdef _MSC_VER
__try
#endif
{
result = _vsnprintf( buffer, buffersize, format, args );
result = vsnprintf( buffer, buffersize, format, args );
}
// to prevent crash while output
#ifdef _MSC_VER
__except( EXCEPTION_EXECUTE_HANDLER )
{
Q_strncpy( buffer, "^1sprintf throw exception^7\n", buffersize );
result = buffersize;
}
#endif
if( result < 0 || result >= buffersize )
{

View File

@ -14,11 +14,8 @@ GNU General Public License for more details.
*/
#include "conprint.h"
#include <windows.h>
#include <direct.h>
#include <fcntl.h>
#include <stdio.h>
#include <io.h>
#include "cmdlib.h"
#include "stringlib.h"
#include "filesystem.h"

View File

@ -13,7 +13,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
*/
#include <windows.h>
//#include <windows.h>
#include "cmdlib.h"
#include "threads.h"
#include "stringlib.h"
@ -62,7 +62,7 @@ static void *attempt_calloc( size_t size )
if(( base = (void *)calloc( size, 1 )) != NULL )
return base;
// try for half a second or so
Sleep( 100 );
usleep( 100000 );
}
return NULL;
}