diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 00000000..04728f9d
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "bspc"]
+ path = bspc
+ url = git@github.com:TTimo/bspc.git
diff --git a/apple/Makefile b/apple/Makefile
index 9c89b8df..18833766 100644
--- a/apple/Makefile
+++ b/apple/Makefile
@@ -8,7 +8,7 @@ BINDIR = $(RESOURCES)/install
CONFDIR = $(RESOURCES)/etc
DATADIR = $(RESOURCES)/share
LIBDIR = $(RESOURCES)/lib
-VERSION = 1.6.4
+VERSION = 1.6.5
DMG = $(TARGET)/GtkRadiant-$(VERSION).dmg
VOLUME_NAME = "GtkRadiant $(VERSION)"
@@ -31,15 +31,8 @@ all: install bundle
gdk-pixbuf-query-loaders | sed $(PREFIX_SED_EXPR) > \
$(CONFDIR)/gtk-2.0/gdk-pixbuf.loaders
-
--gtk-runtime-pango:
- cp -r $(MACPORTS_PREFIX)/lib/pango $(LIBDIR)
- find $(LIBDIR)/pango -type f ! -name "*.so" -delete
- pango-querymodules | sed $(PREFIX_SED_EXPR) > \
- $(CONFDIR)/pango/pango.modules
-
--gtk-runtime: -gtk-runtime-gdk-pixbuf-2.0 -gtk-runtime-pango
+-gtk-runtime: -gtk-runtime-gdk-pixbuf-2.0
cp -r $(MACPORTS_PREFIX)/lib/gtk-2.0 $(LIBDIR)
find $(LIBDIR)/gtk-2.0 -type f ! -name "*.so" -delete
@@ -53,7 +46,7 @@ all: install bundle
install: -pre-install -gtk-runtime
cp -r $(INSTALL) $(RESOURCES)
- rm -rf `find $(INSTDIR)/installs -type d -name .svn`
+ rm -rf `find $(INSTALL)/installs -type d -name .svn`
bundle:
diff --git a/bspc b/bspc
new file mode 160000
index 00000000..a1287590
--- /dev/null
+++ b/bspc
@@ -0,0 +1 @@
+Subproject commit a1287590f17c35a612f33708aeec5815402866b8
diff --git a/contrib/bkgrnd2d/bkgrnd2d.vcxproj b/contrib/bkgrnd2d/bkgrnd2d.vcxproj
index f703abfc..77745c35 100644
--- a/contrib/bkgrnd2d/bkgrnd2d.vcxproj
+++ b/contrib/bkgrnd2d/bkgrnd2d.vcxproj
@@ -38,7 +38,7 @@
DynamicLibrary
- v110_xp
+ v140
diff --git a/contrib/bobtoolz/DBrush.cpp b/contrib/bobtoolz/DBrush.cpp
index 3e54e797..01a34330 100644
--- a/contrib/bobtoolz/DBrush.cpp
+++ b/contrib/bobtoolz/DBrush.cpp
@@ -83,7 +83,7 @@ int DBrush::BuildPoints(){
int pos = PointPosition( pnt );
if ( pos == POINT_IN_BRUSH ) { // ???? shouldn't happen here
- Sys_Printf( "ERROR:: Build Brush Points: Point IN brush!!!\n" );
+ Sys_FPrintf( SYS_ERR, "ERROR:: Build Brush Points: Point IN brush!!!\n" );
}
else if ( pos == POINT_ON_BRUSH ) { // normal point
if ( !HasPoint( pnt ) ) {
diff --git a/contrib/bobtoolz/bobtoolz.vcxproj b/contrib/bobtoolz/bobtoolz.vcxproj
index 39794707..a354fe93 100644
--- a/contrib/bobtoolz/bobtoolz.vcxproj
+++ b/contrib/bobtoolz/bobtoolz.vcxproj
@@ -38,7 +38,7 @@
DynamicLibrary
- v110_xp
+ v140
diff --git a/contrib/bobtoolz/cportals.cpp b/contrib/bobtoolz/cportals.cpp
index c408eda2..6878a8d2 100644
--- a/contrib/bobtoolz/cportals.cpp
+++ b/contrib/bobtoolz/cportals.cpp
@@ -122,7 +122,7 @@ void CPortals::Load(){
in = fopen( fn, "rt" );
if ( in == NULL ) {
- Sys_Printf( " ERROR - could not open file.\n" );
+ Sys_FPrintf( SYS_ERR, "ERROR - could not open file.\n" );
return;
}
@@ -130,7 +130,7 @@ void CPortals::Load(){
if ( !fgets( buf, LINE_BUF, in ) ) {
fclose( in );
- Sys_Printf( " ERROR - File ended prematurely.\n" );
+ Sys_FPrintf( SYS_ERR, "ERROR - File ended prematurely.\n" );
return;
}
@@ -138,7 +138,7 @@ void CPortals::Load(){
if ( strncmp( "PRT1", buf, 4 ) != 0 ) {
fclose( in );
- Sys_Printf( " ERROR - File header indicates wrong file type (should be \"PRT1\").\n" );
+ Sys_FPrintf( SYS_ERR, "ERROR - File header indicates wrong file type (should be \"PRT1\").\n" );
return;
}
@@ -146,7 +146,7 @@ void CPortals::Load(){
if ( !fgets( buf, LINE_BUF, in ) ) {
fclose( in );
- Sys_Printf( " ERROR - File ended prematurely.\n" );
+ Sys_FPrintf( SYS_ERR, "ERROR - File ended prematurely.\n" );
return;
}
@@ -158,7 +158,7 @@ void CPortals::Load(){
node_count = 0;
- Sys_Printf( " ERROR - Extreme number of nodes, aborting.\n" );
+ Sys_FPrintf( SYS_ERR, "ERROR - Extreme number of nodes, aborting.\n" );
return;
}
@@ -168,7 +168,7 @@ void CPortals::Load(){
node_count = 0;
- Sys_Printf( " ERROR - File ended prematurely.\n" );
+ Sys_FPrintf( SYS_ERR, "ERROR - File ended prematurely.\n" );
return;
}
@@ -181,7 +181,7 @@ void CPortals::Load(){
node_count = 0;
- Sys_Printf( " ERROR - File ended prematurely.\n" );
+ Sys_FPrintf( SYS_ERR, "ERROR - File ended prematurely.\n" );
return;
}
@@ -199,7 +199,7 @@ void CPortals::Load(){
node_count = 0;
- Sys_Printf( " ERROR - File ended prematurely.\n" );
+ Sys_FPrintf( SYS_ERR, "ERROR - File ended prematurely.\n" );
return;
}
@@ -218,7 +218,7 @@ void CPortals::Load(){
node_count = 0;
- Sys_Printf( " ERROR - File ended prematurely.\n" );
+ Sys_FPrintf( SYS_ERR, "ERROR - File ended prematurely.\n" );
return;
}
@@ -249,7 +249,7 @@ void CPortals::Load(){
Purge();
- Sys_Printf( " ERROR - Could not find information for portal number %d of %d.\n", n + 1, p_count );
+ Sys_FPrintf( SYS_ERR, "ERROR - Could not find information for portal number %d of %d.\n", n + 1, p_count );
return;
}
@@ -262,7 +262,7 @@ void CPortals::Load(){
Purge();
- Sys_Printf( " ERROR - Information for portal number %d of %d is not formatted correctly.\n", n + 1, p_count );
+ Sys_FPrintf( SYS_ERR, "ERROR - Information for portal number %d of %d is not formatted correctly.\n", n + 1, p_count );
return;
}
@@ -272,7 +272,7 @@ void CPortals::Load(){
Purge();
- Sys_Printf( " ERROR - Information for portal number %d of %d is not formatted correctly.\n", n + 1, p_count );
+ Sys_FPrintf( SYS_ERR, "ERROR - Information for portal number %d of %d is not formatted correctly.\n", n + 1, p_count );
return;
}
@@ -285,7 +285,7 @@ void CPortals::Load(){
Purge();
- Sys_Printf( " ERROR - Could not find information for portal number %d of %d.\n", n + 1, p_count );
+ Sys_FPrintf( SYS_ERR, "ERROR - Could not find information for portal number %d of %d.\n", n + 1, p_count );
return;
}
@@ -298,7 +298,7 @@ void CPortals::Load(){
Purge();
- Sys_Printf( " ERROR - Information for portal number %d of %d is not formatted correctly.\n", n + 1, p_count );
+ Sys_FPrintf( SYS_ERR, "ERROR - Information for portal number %d of %d is not formatted correctly.\n", n + 1, p_count );
return;
}
diff --git a/contrib/bobtoolz/misc.cpp b/contrib/bobtoolz/misc.cpp
index ec94f71f..4ae16b42 100644
--- a/contrib/bobtoolz/misc.cpp
+++ b/contrib/bobtoolz/misc.cpp
@@ -143,7 +143,7 @@ void Sys_ERROR( const char* text, ... ){
vsprintf( buf, text,argptr );
va_end( argptr );
- Sys_Printf( "BobToolz::ERROR->%s", buf );
+ Sys_FPrintf( SYS_ERR, "BobToolz::ERROR->%s", buf );
}
/*void Sys_Printf (char *text, ...)
diff --git a/contrib/camera/camera.vcxproj b/contrib/camera/camera.vcxproj
index a325b801..538fa3df 100644
--- a/contrib/camera/camera.vcxproj
+++ b/contrib/camera/camera.vcxproj
@@ -38,7 +38,7 @@
DynamicLibrary
- v110_xp
+ v140
diff --git a/contrib/camera/misc.cpp b/contrib/camera/misc.cpp
index 1fe7509b..75e885de 100644
--- a/contrib/camera/misc.cpp
+++ b/contrib/camera/misc.cpp
@@ -34,7 +34,7 @@ void Sys_ERROR( char* text, ... ){
vsprintf( buf, text,argptr );
va_end( argptr );
- Sys_Printf( "Camera::ERROR->%s", buf );
+ Sys_FPrintf( SYS_ERR, "Camera::ERROR->%s", buf );
}
char* UnixToDosPath( char* path ){
@@ -117,7 +117,7 @@ void CDECL Com_Error( int level, const char *error, ... ){
vsprintf( buf, error,argptr );
va_end( argptr );
- Sys_Printf( "Camera::ERROR->%s", buf );
+ Sys_FPrintf( SYS_ERR, "Camera::ERROR->%s", buf );
}
void CDECL Com_Printf( const char* msg, ... ){
diff --git a/contrib/gtkgensurf/gtkgensurf.vcxproj b/contrib/gtkgensurf/gtkgensurf.vcxproj
index 34cddbd2..9e43e870 100644
--- a/contrib/gtkgensurf/gtkgensurf.vcxproj
+++ b/contrib/gtkgensurf/gtkgensurf.vcxproj
@@ -38,7 +38,7 @@
DynamicLibrary
- v110_xp
+ v140
diff --git a/contrib/hydratoolz/hydratoolz.vcxproj b/contrib/hydratoolz/hydratoolz.vcxproj
index ebbf5ed0..f2b3396e 100644
--- a/contrib/hydratoolz/hydratoolz.vcxproj
+++ b/contrib/hydratoolz/hydratoolz.vcxproj
@@ -38,7 +38,7 @@
DynamicLibrary
- v110_xp
+ v140
diff --git a/contrib/hydratoolz/plugin.cpp b/contrib/hydratoolz/plugin.cpp
index 4a5de388..79bba252 100644
--- a/contrib/hydratoolz/plugin.cpp
+++ b/contrib/hydratoolz/plugin.cpp
@@ -305,7 +305,7 @@ void UpdateWadKeyPair( void ){
}
else
{
- Sys_Printf( "HydraToolz: WARNING: could not locate wad file %s\n",(char *)wadlist->data );
+ Sys_FPrintf( SYS_WRN, "WARNING: could not locate wad file %s\n",(char *)wadlist->data );
strcat( wads, (char *)wadlist->data );
}
}
diff --git a/contrib/prtview/portals.cpp b/contrib/prtview/portals.cpp
index 288a6c2c..e11dd3bc 100644
--- a/contrib/prtview/portals.cpp
+++ b/contrib/prtview/portals.cpp
@@ -166,7 +166,7 @@ void CPortals::Load(){
in = fopen( fn, "rt" );
if ( in == NULL ) {
- Sys_Printf( " ERROR - could not open file.\n" );
+ Sys_FPrintf( SYS_ERR, "ERROR - could not open file.\n" );
return;
}
@@ -174,7 +174,7 @@ void CPortals::Load(){
if ( !fgets( buf, LINE_BUF, in ) ) {
fclose( in );
- Sys_Printf( " ERROR - File ended prematurely.\n" );
+ Sys_FPrintf( SYS_ERR, "ERROR - File ended prematurely.\n" );
return;
}
@@ -182,7 +182,7 @@ void CPortals::Load(){
if ( strncmp( "PRT1", buf, 4 ) != 0 ) {
fclose( in );
- Sys_Printf( " ERROR - File header indicates wrong file type (should be \"PRT1\").\n" );
+ Sys_FPrintf( SYS_ERR, "ERROR - File header indicates wrong file type (should be \"PRT1\").\n" );
return;
}
@@ -190,7 +190,7 @@ void CPortals::Load(){
if ( !fgets( buf, LINE_BUF, in ) ) {
fclose( in );
- Sys_Printf( " ERROR - File ended prematurely.\n" );
+ Sys_FPrintf( SYS_ERR, "ERROR - File ended prematurely.\n" );
return;
}
@@ -203,7 +203,7 @@ void CPortals::Load(){
node_count = 0;
- Sys_Printf(" ERROR - Extreme number of nodes, aborting.\n");
+ Sys_FPrintf( SYS_ERR, "ERROR - Extreme number of nodes, aborting.\n");
return;
}
@@ -214,7 +214,7 @@ void CPortals::Load(){
node_count = 0;
- Sys_Printf( " ERROR - File ended prematurely.\n" );
+ Sys_FPrintf( SYS_ERR, "ERROR - File ended prematurely.\n" );
return;
}
@@ -227,7 +227,7 @@ void CPortals::Load(){
portal_count = 0;
node_count = 0;
- Sys_Printf( " ERROR - Extreme number of portals, aborting.\n" );
+ Sys_FPrintf( SYS_ERR, "ERROR - Extreme number of portals, aborting.\n" );
return;
}
@@ -238,7 +238,7 @@ void CPortals::Load(){
portal_count = 0;
node_count = 0;
- Sys_Printf( " ERROR - number of portals equals 0, aborting.\n" );
+ Sys_FPrintf( SYS_ERR, "ERROR - number of portals equals 0, aborting.\n" );
return;
}
@@ -260,7 +260,7 @@ void CPortals::Load(){
Purge();
- Sys_Printf( " ERROR - Could not find information for portal number %d of %d.\n", n + 1, portal_count );
+ Sys_FPrintf( SYS_ERR, "ERROR - Could not find information for portal number %d of %d.\n", n + 1, portal_count );
return;
}
@@ -278,7 +278,7 @@ void CPortals::Load(){
Purge();
- Sys_Printf( " ERROR - Information for portal number %d of %d is not formatted correctly.\n", n + 1, portal_count );
+ Sys_FPrintf( SYS_ERR, "ERROR - Information for portal number %d of %d is not formatted correctly.\n", n + 1, portal_count );
return;
}
diff --git a/contrib/prtview/prtview.vcxproj b/contrib/prtview/prtview.vcxproj
index a24ab7ad..7064ee44 100644
--- a/contrib/prtview/prtview.vcxproj
+++ b/contrib/prtview/prtview.vcxproj
@@ -38,7 +38,7 @@
DynamicLibrary
- v110_xp
+ v140
diff --git a/include/qerplugin.h b/include/qerplugin.h
index ee24c29c..ce40f3ff 100644
--- a/include/qerplugin.h
+++ b/include/qerplugin.h
@@ -137,16 +137,6 @@ struct _QERModelLoad
//=========================================
// plugin functions
-#if 0
-// NOTE TTimo: hack to make old plugin tech and new plugin tech live together
-#ifndef _IPLUGIN_H_
-// toolkit-independant interface, cast hwndMain to GtkWidget*
-typedef const char* ( WINAPI * PFN_QERPLUG_INIT )( void* hApp, void* hwndMain );
-typedef const char* ( WINAPI * PFN_QERPLUG_GETNAME )();
-typedef const char* ( WINAPI * PFN_QERPLUG_GETCOMMANDLIST )();
-typedef void ( WINAPI * PFN_QERPLUG_DISPATCH )( const char* p, vec3_t vMin, vec3_t vMax, bool bSingleBrush );
-#endif
-#endif
typedef char* ( WINAPI * PFN_QERPLUG_GETFUNCTABLE )();
@@ -275,115 +265,6 @@ typedef char* ( WINAPI * PFN_QERAPP_PROFILE_LOADSTR )( const char *filename, con
// To use the active or selected brush lists, you must first allocate them (which returns a count) and then
// release them when you are finish manipulating brushes in one of those lists.
-//++timo NOTE : the #defines here are never used, but can help finding where things are done in the editor
-#if 0
-// brush manipulation routines
-#define QERAPP_CREATEBRUSH "QERApp_CreateBrush"
-#define QERAPP_CREATEBRUSHHANDLE "QERApp_CreateBrushHandle"
-#define QERAPP_DELETEBRUSHHANDLE "QERApp_DeleteBrushHandle"
-#define QERAPP_COMMITBRUSHHANDLETOMAP "QERApp_CommitBrushHandleToMap"
-//++timo not implemented .. remove
-// #define QERAPP_BINDHANDLESTOENTITY "QERApp_BindHandlesToEntity"
-#define QERAPP_ADDFACE "QERApp_AddFace"
-#define QERAPP_ADDFACEDATA "QERApp_AddFaceData"
-#define QERAPP_GETFACECOUNT "QERApp_GetFaceCount"
-#define QERAPP_GETFACEDATA "QERApp_GetFaceData"
-#define QERAPP_SETFACEDATA "QERApp_SetFaceData"
-#define QERAPP_DELETEFACE "QERApp_DeleteFace"
-#define QERAPP_TEXTUREBRUSH "QERApp_TextureBrush"
-#define QERAPP_BUILDBRUSH "QERApp_BuildBrush" // PGM
-#define QERAPP_SELECTEDBRUSHCOUNT "QERApp_SelectedBrushCount"
-#define QERAPP_ALLOCATESELECTEDBRUSHHANDLES "QERApp_AllocateSelectedBrushHandles"
-#define QERAPP_RELEASESELECTEDBRUSHHANDLES "QERApp_ReleaseSelectedBrushHandles"
-#define QERAPP_GETSELECTEDBRUSHHANDLE "QERApp_GetSelectedBrushHandle"
-#define QERAPP_ACTIVEBRUSHCOUNT "QERApp_ActiveBrushCount"
-#define QERAPP_ALLOCATEACTIVEBRUSHHANDLES "QERApp_AllocateActiveBrushHandles"
-#define QERAPP_RELEASEACTIVEBRUSHHANDLES "QERApp_ReleaseActiveBrushHandles"
-#define QERAPP_GETACTIVEBRUSHHANDLE "QERApp_GetActiveBrushHandle"
-
-// texture stuff
-#define QERAPP_TEXTURECOUNT "QERApp_TextureCount"
-#define QERAPP_GETTEXTURE "QERApp_GetTexture"
-#define QERAPP_GETCURRENTTEXTURE "QERApp_GetCurrentTexture"
-#define QERAPP_SETCURRENTTEXTURE "QERApp_SetCurrentTexture"
-
-// selection
-#define QERAPP_DELETESELECTION "QERApp_DeleteSelection"
-#define QERAPP_SELECTBRUSH "QERApp_SelectBrush" // PGM
-#define QERAPP_DESELECTBRUSH "QERApp_DeselectBrush" // PGM
-#define QERAPP_DESELECTALLBRUSHES "QERApp_DeselectAllBrushes" // PGM
-
-// data gathering
-#define QERAPP_GETPOINTS "QERApp_GetPoints"
-#define QERAPP_SELECTBRUSHES "QERApp_GetBrushes"
-
-// entity class stuff
-// the entity handling is very basic for 1.0
-#define QERAPP_GETECLASSCOUNT "QERApp_GetEClassCount"
-#define QERAPP_GETECLASS "QERApp_GetEClass"
-
-// misc
-#define QERAPP_SYSMSG "QERApp_SysMsg"
-#define QERAPP_INFOMSG "QERApp_InfoMsg"
-#define QERAPP_HIDEINFOMSG "QERApp_HideInfoMsg"
-#define QERAPP_RESET_PLUGINS "QERApp_ResetPlugins"
-
-// texture loading
-#define QERAPP_LOADTEXTURERGBA "QERApp_LoadTextureRGBA"
-
-// FIXME: the following are not implemented yet
-// hook registrations
-#define QERAPP_REGISTER_MAPLOADFUNC "QERApp_Register_MapLoadFunc"
-#define QERAPP_REGISTER_MAPSAVEFUNC "QERApp_Register_MapSaveFunc"
-
-// FIXME: the following are not implemented yet
-#define QERAPP_REGISTER_PROJECTLOADFUNC "QERApp_Register_ProjectLoadFunc"
-#define QERAPP_REGISTER_MOUSEHANDLER "QERApp_Register_MouseHandler"
-#define QERAPP_REGISTER_KEYHANDLER "QERApp_Register_KeyHandler"
-
-// FIXME: new primtives do not work in v1.00
-// primitives are new types of things in the map
-// for instance, the Q3 curves could have been done as
-// primitives instead of being built in
-// it will be a plugins responsibility to hook the map load and save funcs to load
-// and/or save any additional data (like new primitives of some type)
-// the editor will call each registered renderer during the rendering process to repaint
-// any primitives the plugin owns
-// each primitive object has a temporary sibling brush that lives in the map
-// FIXME: go backwards on this a bit.. orient it more towards the temp brush mode as it will be cleaner
-// basically a plugin will hook the map load and save and will add the primitives to the map.. this will
-// produce a temporary 'primitive' brush and the appropriate renderer will be called as well as the
-// edit handler (for edge drags, sizes, rotates, etc.. ) and the vertex maker will be called when vertex
-// mode is attemped on the brush.. there will need to be a GetPrimitiveBounds callback in the edit handler
-// so the brush can resize appropriately as needed.. this might be the plugins responsibility to set the
-// sibling brushes size.. it will then be the plugins responsibility to hook map save to save the primitives
-// as the editor will discard any temp primitive brushes.. (there probably needs to be some kind of sanity check
-// here as far as keeping the brushes and the plugin in sync.. i suppose the edit handler can deal with all of that
-// crap but it looks like a nice place for a mess)
-#define QERAPP_REGISTER_PRIMITIVE "QERApp_Register_Primitive"
-#define QERAPP_REGISTER_RENDERER "QERApp_Register_Renderer"
-#define QERAPP_REGISTER_EDITHANDLER "QERApp_Register_EditHandler"
-#define QERAPP_REGISTER_VERTEXMAKER "QERApp_Register_VertexMaker"
-#define QERAPP_ADDPRIMITIVE "QERApp_AddPrimitive"
-
-// v1.70
-#define QERAPP_GETENTITYCOUNT "QERApp_GetEntityCount"
-#define QERAPP_GETENTITYHANDLE "QERApp_GetEntityHandle"
-//++timo not implemented for the moment
-// #define QERAPP_GETENTITYINFO "QERApp_GetEntityInfo"
-//++timo does the keyval need some more funcs to add/remove ?
-// get the pointer and do the changes yourself
-#define QERAPP_ALLOCATEEPAIR "QERApp_AllocateEpair"
-#define QERAPP_ALLOCATEENTITYBRUSHHANDLES "QERApp_AllocateEntityBrushHandles"
-#define QERAPP_RELEASEENTITYBRUSHHANDLES "QERApp_ReleaseEntityBrushHandles"
-#define QERAPP_GETENTITYBRUSHHANDLE "QERApp_GetEntityBrushHandle"
-#define QERAPP_CREATEENTITYHANDLE "QERApp_CreateEntityHandle"
-#define QERAPP_COMMITBRUSHHANDLETOENTITY "QERApp_CommitBrushHandleToEntity"
-#define QERAPP_COMMITENTITYHANDLETOMAP "QERApp_CommitEntityHandleToMap"
-#define QERAPP_SETSCREENUPDATE "QERApp_SetScreenUpdate"
-#define QERAPP_BUILDBRUSH2 "QERApp_BuildBrush2"
-#endif
-
// v1.80
#define QERAPP_GETDISPATCHPARAMS "QERApp_GetDispatchParams"
diff --git a/install/.gitignore b/install/.gitignore
new file mode 100644
index 00000000..7c16a3dc
--- /dev/null
+++ b/install/.gitignore
@@ -0,0 +1,7 @@
+*.dll
+*.pdb
+*.exp
+*.ilk
+*.pdb
+*.lib
+*.exe
diff --git a/libs/.gitignore b/libs/.gitignore
new file mode 100644
index 00000000..e9b6ac45
--- /dev/null
+++ b/libs/.gitignore
@@ -0,0 +1 @@
+x64
diff --git a/libs/cmdlib/cmdlib.vcxproj b/libs/cmdlib/cmdlib.vcxproj
index 524ed18c..73bae340 100644
--- a/libs/cmdlib/cmdlib.vcxproj
+++ b/libs/cmdlib/cmdlib.vcxproj
@@ -38,7 +38,7 @@
StaticLibrary
- v110_xp
+ v140
diff --git a/libs/ddslib/ddslib.vcxproj b/libs/ddslib/ddslib.vcxproj
index cbe39566..6cf0ca7a 100644
--- a/libs/ddslib/ddslib.vcxproj
+++ b/libs/ddslib/ddslib.vcxproj
@@ -38,7 +38,7 @@
StaticLibrary
- v110_xp
+ v140
diff --git a/libs/l_net/l_net.vcxproj b/libs/l_net/l_net.vcxproj
index 1bae0130..b72f320d 100644
--- a/libs/l_net/l_net.vcxproj
+++ b/libs/l_net/l_net.vcxproj
@@ -38,7 +38,7 @@
StaticLibrary
- v110_xp
+ v140
diff --git a/libs/mathlib/mathlib.vcxproj b/libs/mathlib/mathlib.vcxproj
index bf18ac62..98d1a46f 100644
--- a/libs/mathlib/mathlib.vcxproj
+++ b/libs/mathlib/mathlib.vcxproj
@@ -38,7 +38,7 @@
StaticLibrary
- v110_xp
+ v140
diff --git a/libs/md5lib/md5lib.vcxproj b/libs/md5lib/md5lib.vcxproj
index 9206c2ff..4f3c10f6 100644
--- a/libs/md5lib/md5lib.vcxproj
+++ b/libs/md5lib/md5lib.vcxproj
@@ -38,7 +38,7 @@
StaticLibrary
- v110_xp
+ v140
diff --git a/libs/pak/unzip.cpp b/libs/pak/unzip.cpp
index 269c76c3..8bf2e6a4 100644
--- a/libs/pak/unzip.cpp
+++ b/libs/pak/unzip.cpp
@@ -1158,8 +1158,8 @@ int z_verbose = 0;
typedef uLong ( *check_func ) OF ( ( uLong check, const Byte * buf, uInt len ) );
-voidp zcalloc OF( ( voidp opaque, unsigned items, unsigned size ) );
-void zcfree OF( ( voidp opaque, voidp ptr ) );
+static voidp zcalloc OF( ( voidp opaque, unsigned items, unsigned size ) );
+static void zcfree OF( ( voidp opaque, voidp ptr ) );
#define ZALLOC( strm, items, size ) \
( *( ( strm )->zalloc ) )( ( strm )->opaque, ( items ), ( size ) )
diff --git a/libs/picomodel.h b/libs/picomodel.h
index 98d5452f..f33c6da6 100644
--- a/libs/picomodel.h
+++ b/libs/picomodel.h
@@ -105,6 +105,7 @@ struct picoSurface_s
int numVertexes, maxVertexes;
picoVec3_t *xyz;
picoVec3_t *normal;
+ picoIndex_t *smoothingGroup;
int numSTArrays, maxSTArrays;
picoVec2_t **st;
@@ -216,6 +217,9 @@ const picoModule_t **PicoModuleList( int *numModules );
picoModel_t *PicoLoadModel( char *name, int frameNum );
+typedef size_t(*PicoInputStreamReadFunc)(void* inputStream, unsigned char* buffer, size_t length);
+picoModel_t* PicoModuleLoadModelStream(const picoModule_t* module, void* inputStream, PicoInputStreamReadFunc inputStreamRead, size_t streamLength, int frameNum);
+
/* model functions */
picoModel_t *PicoNewModel( void );
@@ -330,12 +334,12 @@ picoVertexCombinationHash_t *PicoFindVertexCombinationInHashTable( picoVertexCom
picoVertexCombinationHash_t *PicoAddVertexCombinationToHashTable( picoVertexCombinationHash_t **hashTable, picoVec3_t xyz, picoVec3_t normal, picoVec3_t st, picoColor_t color, picoIndex_t index );
/* specialized functions */
-int PicoFindSurfaceVertexNum( picoSurface_t *surface, picoVec3_t xyz, picoVec3_t normal, int numSTs, picoVec2_t *st, int numColors, picoColor_t *color );
+int PicoFindSurfaceVertexNum( picoSurface_t *surface, picoVec3_t xyz, picoVec3_t normal, int numSTs, picoVec2_t *st, int numColors, picoColor_t *color, picoIndex_t smoothingGroup );
void PicoFixSurfaceNormals( picoSurface_t *surface );
int PicoRemapModel( picoModel_t *model, char *remapFile );
-void PicoAddTriangleToModel( picoModel_t *model, picoVec3_t** xyz, picoVec3_t** normals, int numSTs, picoVec2_t **st, int numColors, picoColor_t **colors, picoShader_t* shader );
+void PicoAddTriangleToModel( picoModel_t *model, picoVec3_t** xyz, picoVec3_t** normals, int numSTs, picoVec2_t **st, int numColors, picoColor_t **colors, picoShader_t* shader, picoIndex_t* smoothingGroup );
/* end marker */
#ifdef __cplusplus
diff --git a/libs/picomodel/lwo/clip.c b/libs/picomodel/lwo/clip.c
index 8a9d2a62..9ea2586b 100644
--- a/libs/picomodel/lwo/clip.c
+++ b/libs/picomodel/lwo/clip.c
@@ -22,6 +22,35 @@ void lwFreeClip( lwClip *clip ){
if ( clip ) {
lwListFree( (void*) clip->ifilter, (ListFreeFunc) lwFreePlugin );
lwListFree( (void*) clip->pfilter, (ListFreeFunc) lwFreePlugin );
+
+ switch ( clip->type ) {
+ case ID_STIL:
+ _pico_free( clip->source.still.name );
+ break;
+
+ case ID_ISEQ:
+ _pico_free( clip->source.seq.prefix );
+ _pico_free( clip->source.seq.suffix );
+ break;
+
+ case ID_ANIM:
+ _pico_free( clip->source.anim.name );
+ _pico_free( clip->source.anim.server );
+ _pico_free( clip->source.anim.data );
+ break;
+
+ case ID_XREF:
+ _pico_free( clip->source.xref.string );
+ break;
+
+ case ID_STCC:
+ _pico_free( clip->source.cycle.name );
+ break;
+
+ default:
+ break;
+ }
+
_pico_free( clip );
}
}
diff --git a/libs/picomodel/picointernal.c b/libs/picomodel/picointernal.c
index d4fd8b44..c6f396ce 100644
--- a/libs/picomodel/picointernal.c
+++ b/libs/picomodel/picointernal.c
@@ -161,35 +161,23 @@ void *_pico_realloc( void **ptr, size_t oldSize, size_t newSize ){
* as custom clone size (the string is cropped to fit into mem
* if needed). -sea
*/
-char *_pico_clone_alloc( char *str, int size ){
- char *cloned;
- size_t cloneSize;
+char *_pico_clone_alloc( const char *str ) {
+ char* cloned;
/* sanity check */
if ( str == NULL ) {
return NULL;
}
- /* set real size of cloned string */
- cloneSize = ( size < 0 ) ? strlen( str ) : size;
-
/* allocate memory */
- cloned = _pico_alloc( cloneSize + 1 ); /* bugfix! */
+ cloned = _pico_alloc(strlen(str) + 1);
if ( cloned == NULL ) {
return NULL;
}
- /* zero out memory allocated by cloned string */
- memset( cloned,0,cloneSize );
-
/* copy input string to cloned string */
- if ( cloneSize < strlen( str ) ) {
- memcpy( cloned,str,cloneSize );
- cloned[ cloneSize ] = '\0';
- }
- else {
- strcpy( cloned,str );
- }
+ strcpy(cloned, str);
+
/* return ptr to cloned string */
return cloned;
}
@@ -275,6 +263,19 @@ void _pico_printf( int level, const char *format, ... ){
_pico_ptr_print( level,str );
}
+/* _pico_first_token:
+* trims everything after the first whitespace-delimited token
+*/
+
+void _pico_first_token( char *str ) {
+ if ( !str || ! * str ) {
+ return;
+ }
+ while (*str && !isspace(*str))
+ *str++;
+ *str = '\0';
+}
+
/* _pico_strltrim:
* left trims the given string -sea
*/
@@ -542,7 +543,7 @@ float _pico_big_float( float src ){
* case-insensitive strstr. -sea
*/
char *_pico_stristr( char *str, const char *substr ){
- const int sublen = strlen( substr );
+ const size_t sublen = strlen( substr );
while ( *str )
{
if ( !_pico_strnicmp( str,substr,sublen ) ) {
@@ -604,24 +605,24 @@ int _pico_nofname( const char *path, char *dest, int destSize ){
* returns ptr to filename portion in given path or an empty
* string otherwise. given 'path' is not altered. -sea
*/
-char *_pico_nopath( const char *path ){
- char *src;
- src = (char *)path + ( strlen( path ) - 1 );
+const char *_pico_nopath( const char *path ){
+ const char *src;
if ( path == NULL ) {
- return (char *)"";
+ return "";
}
- if ( !strchr( (char *)path,'/' ) && !strchr( (char *)path,'\\' ) ) {
- return ( (char *)path );
+ if ( !strchr( path,'/' ) && !strchr( path,'\\' ) ) {
+ return ( path );
}
+ src = path + ( strlen( path ) - 1 );
while ( ( src-- ) != path )
{
if ( *src == '/' || *src == '\\' ) {
return ( ++src );
}
}
- return (char *)"";
+ return "";
}
/* _pico_setfext:
diff --git a/libs/picomodel/picointernal.h b/libs/picomodel/picointernal.h
index 12b8cd7c..8e9bba25 100644
--- a/libs/picomodel/picointernal.h
+++ b/libs/picomodel/picointernal.h
@@ -116,7 +116,7 @@ extern void ( *_pico_ptr_print )( int, const char* );
void *_pico_alloc( size_t size );
void *_pico_calloc( size_t num, size_t size );
void *_pico_realloc( void **ptr, size_t oldSize, size_t newSize );
-char *_pico_clone_alloc( char *str, int size );
+char *_pico_clone_alloc( const char *str );
void _pico_free( void *ptr );
/* files */
@@ -124,6 +124,7 @@ void _pico_load_file( char *name, unsigned char **buffer, int *bufSiz
void _pico_free_file( void *buffer );
/* strings */
+void _pico_first_token(char *str);
char *_pico_strltrim( char *str );
char *_pico_strrtrim( char *str );
int _pico_strchcount( char *str, int ch );
diff --git a/libs/picomodel/picomodel.c b/libs/picomodel/picomodel.c
index 767fc74f..b8f185cd 100644
--- a/libs/picomodel/picomodel.c
+++ b/libs/picomodel/picomodel.c
@@ -143,7 +143,46 @@ void PicoSetPrintFunc( void ( *func )( int, const char* ) ){
}
}
+picoModel_t *PicoModuleLoadModel( const picoModule_t* pm, char* fileName, picoByte_t* buffer, int bufSize, int frameNum ){
+ char *modelFileName, *remapFileName;
+ /* see whether this module can load the model file or not */
+ if ( pm->canload( fileName, buffer, bufSize ) == PICO_PMV_OK ) {
+ /* use loader provided by module to read the model data */
+ picoModel_t* model = pm->load( fileName, frameNum, buffer, bufSize );
+ if ( model == NULL ) {
+ _pico_free_file( buffer );
+ return NULL;
+ }
+
+ /* assign pointer to file format module */
+ model->module = pm;
+
+ /* get model file name */
+ modelFileName = PicoGetModelFileName( model );
+
+ /* apply model remappings from .remap */
+ if ( strlen( modelFileName ) ) {
+ /* alloc copy of model file name */
+ remapFileName = _pico_alloc( strlen( modelFileName ) + 20 );
+ if ( remapFileName != NULL ) {
+ /* copy model file name and change extension */
+ strcpy( remapFileName, modelFileName );
+ _pico_setfext( remapFileName, "remap" );
+
+ /* try to remap model; we don't handle the result */
+ PicoRemapModel( model, remapFileName );
+
+ /* free the remap file name string */
+ _pico_free( remapFileName );
+ }
+ }
+
+ return model;
+ }
+
+ return NULL;
+}
/*
PicoLoadModel()
@@ -155,7 +194,6 @@ picoModel_t *PicoLoadModel( char *fileName, int frameNum ){
picoModel_t *model;
picoByte_t *buffer;
int bufSize;
- char *modelFileName, *remapFileName;
/* init */
@@ -194,38 +232,8 @@ picoModel_t *PicoLoadModel( char *fileName, int frameNum ){
continue;
}
- /* see whether this module can load the model file or not */
- if ( pm->canload( fileName, buffer, bufSize ) == PICO_PMV_OK ) {
- /* use loader provided by module to read the model data */
- model = pm->load( fileName, frameNum, buffer, bufSize );
- if ( model == NULL ) {
- _pico_free_file( buffer );
- return NULL;
- }
-
- /* assign pointer to file format module */
- model->module = pm;
-
- /* get model file name */
- modelFileName = PicoGetModelFileName( model );
-
- /* apply model remappings from .remap */
- if ( strlen( modelFileName ) ) {
- /* alloc copy of model file name */
- remapFileName = _pico_alloc( strlen( modelFileName ) + 20 );
- if ( remapFileName != NULL ) {
- /* copy model file name and change extension */
- strcpy( remapFileName, modelFileName );
- _pico_setfext( remapFileName, "remap" );
-
- /* try to remap model; we don't handle the result */
- PicoRemapModel( model, remapFileName );
-
- /* free the remap file name string */
- _pico_free( remapFileName );
- }
- }
-
+ model = PicoModuleLoadModel( pm, fileName, buffer, bufSize, frameNum );
+ if ( model != NULL ) {
/* model was loaded, so break out of loop */
break;
}
@@ -236,7 +244,50 @@ picoModel_t *PicoLoadModel( char *fileName, int frameNum ){
_pico_free_file( buffer );
}
- /* return */
+ return model;
+}
+
+/*
+ FIXME: From 1.5; Unused yet
+*/
+
+picoModel_t *PicoModuleLoadModelStream( const picoModule_t* module, void* inputStream, PicoInputStreamReadFunc inputStreamRead, size_t streamLength, int frameNum ) {
+ picoModel_t *model;
+ picoByte_t *buffer;
+ int bufSize;
+
+ /* init */
+ model = NULL;
+
+ if ( inputStream == NULL ) {
+ _pico_printf( PICO_ERROR, "PicoLoadModel: invalid input stream (inputStream == NULL)" );
+ return NULL;
+ }
+
+ if ( inputStreamRead == NULL ) {
+ _pico_printf( PICO_ERROR, "PicoLoadModel: invalid input stream (inputStreamRead == NULL) ");
+ return NULL;
+ }
+
+ buffer = _pico_alloc( streamLength + 1 );
+
+ bufSize = (int)inputStreamRead( inputStream, buffer, streamLength );
+ buffer[ bufSize ] = '\0';
+
+ {
+ // dummy filename
+ char fileName[128];
+ fileName[0] = '.';
+ strncpy( fileName + 1, module->defaultExts[ 0 ], 126 );
+ fileName[127] = '\0';
+ model = PicoModuleLoadModel( module, fileName, buffer, bufSize, frameNum );
+ }
+
+ /* free memory used by file buffer */
+ if ( model != 0 ) {
+ _pico_free( buffer );
+ }
+
return model;
}
@@ -261,10 +312,10 @@ picoModel_t *PicoNewModel( void ){
}
/* clear */
- memset( model,0,sizeof( picoModel_t ) );
+ memset( model, 0, sizeof( picoModel_t ) );
/* model set up */
- _pico_zero_bounds( model->mins,model->maxs );
+ _pico_zero_bounds( model->mins, model->maxs );
/* set initial frame count to 1 -sea */
model->numFrames = 1;
@@ -274,7 +325,6 @@ picoModel_t *PicoNewModel( void ){
}
-
/*
PicoFreeModel()
frees a model and all associated data
@@ -283,7 +333,6 @@ picoModel_t *PicoNewModel( void ){
void PicoFreeModel( picoModel_t *model ){
int i;
-
/* sanity check */
if ( model == NULL ) {
return;
@@ -294,6 +343,10 @@ void PicoFreeModel( picoModel_t *model ){
_pico_free( model->name );
}
+ if ( model->fileName ) {
+ _pico_free( model->fileName );
+ }
+
/* free shaders */
for ( i = 0; i < model->numShaders; i++ )
PicoFreeShader( model->shader[ i ] );
@@ -309,7 +362,6 @@ void PicoFreeModel( picoModel_t *model ){
}
-
/*
PicoAdjustModel()
adjusts a models's memory allocations to handle the requested sizes.
@@ -364,7 +416,6 @@ int PicoAdjustModel( picoModel_t *model, int numShaders, int numSurfaces ){
}
-
/* ----------------------------------------------------------------------------
shaders
---------------------------------------------------------------------------- */
@@ -377,7 +428,6 @@ int PicoAdjustModel( picoModel_t *model, int numShaders, int numSurfaces ){
picoShader_t *PicoNewShader( picoModel_t *model ){
picoShader_t *shader;
-
/* allocate and clear */
shader = _pico_alloc( sizeof( picoShader_t ) );
if ( shader == NULL ) {
@@ -397,9 +447,9 @@ picoShader_t *PicoNewShader( picoModel_t *model ){
shader->model = model;
}
/* setup default shader colors */
- _pico_set_color( shader->ambientColor,0,0,0,0 );
- _pico_set_color( shader->diffuseColor,255,255,255,1 );
- _pico_set_color( shader->specularColor,0,0,0,0 );
+ _pico_set_color( shader->ambientColor, 0, 0, 0, 0 );
+ _pico_set_color( shader->diffuseColor, 255, 255, 255, 1 );
+ _pico_set_color( shader->specularColor, 0, 0, 0, 0 );
/* no need to do this, but i do it anyway */
shader->transparency = 0;
@@ -410,7 +460,6 @@ picoShader_t *PicoNewShader( picoModel_t *model ){
}
-
/*
PicoFreeShader()
frees a shader and all associated data -sea
@@ -435,7 +484,6 @@ void PicoFreeShader( picoShader_t *shader ){
}
-
/*
PicoFindShader()
finds a named shader in a model
@@ -444,7 +492,6 @@ void PicoFreeShader( picoShader_t *shader ){
picoShader_t *PicoFindShader( picoModel_t *model, char *name, int caseSensitive ){
int i;
-
/* sanity checks */
if ( model == NULL || name == NULL ) { /* sea: null name fix */
return NULL;
@@ -475,7 +522,6 @@ picoShader_t *PicoFindShader( picoModel_t *model, char *name, int caseSensitive
}
-
/* ----------------------------------------------------------------------------
surfaces
---------------------------------------------------------------------------- */
@@ -518,7 +564,6 @@ picoSurface_t *PicoNewSurface( picoModel_t *model ){
}
-
/*
PicoFreeSurface()
frees a surface and all associated data
@@ -526,7 +571,6 @@ picoSurface_t *PicoNewSurface( picoModel_t *model ){
void PicoFreeSurface( picoSurface_t *surface ){
int i;
-
/* dummy check */
if ( surface == NULL ) {
return;
@@ -535,9 +579,14 @@ void PicoFreeSurface( picoSurface_t *surface ){
/* free bits */
_pico_free( surface->xyz );
_pico_free( surface->normal );
+ _pico_free( surface->smoothingGroup );
_pico_free( surface->index );
_pico_free( surface->faceNormal );
+ if ( surface->name ) {
+ _pico_free( surface->name );
+ }
+
/* free arrays */
for ( i = 0; i < surface->numSTArrays; i++ )
_pico_free( surface->st[ i ] );
@@ -551,7 +600,6 @@ void PicoFreeSurface( picoSurface_t *surface ){
}
-
/*
PicoAdjustSurface()
adjusts a surface's memory allocations to handle the requested sizes.
@@ -561,7 +609,6 @@ void PicoFreeSurface( picoSurface_t *surface ){
int PicoAdjustSurface( picoSurface_t *surface, int numVertexes, int numSTArrays, int numColorArrays, int numIndexes, int numFaceNormals ){
int i;
-
/* dummy check */
if ( surface == NULL ) {
return 0;
@@ -591,6 +638,9 @@ int PicoAdjustSurface( picoSurface_t *surface, int numVertexes, int numSTArrays,
if ( !_pico_realloc( (void *) &surface->normal, surface->numVertexes * sizeof( *surface->normal ), surface->maxVertexes * sizeof( *surface->normal ) ) ) {
return 0;
}
+ if ( !_pico_realloc( (void *) &surface->smoothingGroup, surface->numVertexes * sizeof( *surface->smoothingGroup ), surface->maxVertexes * sizeof( *surface->smoothingGroup ) ) ) {
+ return 0;
+ }
for ( i = 0; i < surface->numSTArrays; i++ )
if ( !_pico_realloc( (void*) &surface->st[ i ], surface->numVertexes * sizeof( *surface->st[ i ] ), surface->maxVertexes * sizeof( *surface->st[ i ] ) ) ) {
return 0;
@@ -720,7 +770,7 @@ void PicoSetModelName( picoModel_t *model, char *name ){
_pico_free( model->name );
}
- model->name = _pico_clone_alloc( name,-1 );
+ model->name = _pico_clone_alloc( name );
}
@@ -733,7 +783,7 @@ void PicoSetModelFileName( picoModel_t *model, char *fileName ){
_pico_free( model->fileName );
}
- model->fileName = _pico_clone_alloc( fileName,-1 );
+ model->fileName = _pico_clone_alloc( fileName );
}
@@ -773,7 +823,7 @@ void PicoSetShaderName( picoShader_t *shader, char *name ){
_pico_free( shader->name );
}
- shader->name = _pico_clone_alloc( name,-1 );
+ shader->name = _pico_clone_alloc( name );
}
@@ -786,7 +836,7 @@ void PicoSetShaderMapName( picoShader_t *shader, char *mapName ){
_pico_free( shader->mapName );
}
- shader->mapName = _pico_clone_alloc( mapName,-1 );
+ shader->mapName = _pico_clone_alloc( mapName );
}
@@ -887,7 +937,7 @@ void PicoSetSurfaceName( picoSurface_t *surface, char *name ){
_pico_free( surface->name );
}
- surface->name = _pico_clone_alloc( name,-1 );
+ surface->name = _pico_clone_alloc( name );
}
@@ -990,6 +1040,15 @@ void PicoSetFaceNormal( picoSurface_t *surface, int num, picoVec3_t normal ){
_pico_copy_vec( normal, surface->faceNormal[ num ] );
}
+void PicoSetSurfaceSmoothingGroup( picoSurface_t *surface, int num, picoIndex_t smoothingGroup ){
+ if ( num < 0 ) {
+ return;
+ }
+ if ( !PicoAdjustSurface( surface, num + 1, 0, 0, 0, 0 ) ) {
+ return;
+ }
+ surface->smoothingGroup[ num ] = smoothingGroup;
+}
void PicoSetSurfaceSpecial( picoSurface_t *surface, int num, int special ){
if ( surface == NULL || num < 0 || num >= PICO_MAX_SPECIAL ) {
@@ -1284,7 +1343,7 @@ picoVec_t *PicoGetSurfaceNormal( picoSurface_t *surface, int num ){
-picoVec_t *PicoGetSurfaceST( picoSurface_t *surface, int array, int num ){
+picoVec_t *PicoGetSurfaceST( picoSurface_t *surface, int array, int num ){
if ( surface == NULL || array < 0 || array > surface->numSTArrays || num < 0 || num > surface->numVertexes ) {
return NULL;
}
@@ -1335,6 +1394,12 @@ picoVec_t *PicoGetFaceNormal( picoSurface_t *surface, int num ){
return surface->faceNormal[ num ];
}
+picoIndex_t PicoGetSurfaceSmoothingGroup( picoSurface_t *surface, int num ){
+ if ( surface == NULL || num < 0 || num > surface->numVertexes ) {
+ return -1;
+ }
+ return surface->smoothingGroup[ num ];
+}
int PicoGetSurfaceSpecial( picoSurface_t *surface, int num ){
if ( surface == NULL || num < 0 || num >= PICO_MAX_SPECIAL ) {
@@ -1535,7 +1600,7 @@ picoVertexCombinationHash_t *PicoAddVertexCombinationToHashTable( picoVertexComb
fixme: needs non-naive algorithm
*/
-int PicoFindSurfaceVertexNum( picoSurface_t *surface, picoVec3_t xyz, picoVec3_t normal, int numSTs, picoVec2_t *st, int numColors, picoColor_t *color ){
+int PicoFindSurfaceVertexNum( picoSurface_t *surface, picoVec3_t xyz, picoVec3_t normal, int numSTs, picoVec2_t *st, int numColors, picoColor_t *color, picoIndex_t smoothingGroup ){
int i, j;
@@ -1557,6 +1622,11 @@ int PicoFindSurfaceVertexNum( picoSurface_t *surface, picoVec3_t xyz, picoVec3_t
continue;
}
+ /* check normal */
+ if ( surface->smoothingGroup[ i ] != smoothingGroup ) {
+ continue;
+ }
+
/* check st */
if ( numSTs > 0 && st != NULL ) {
for ( j = 0; j < numSTs; j++ )
@@ -1598,125 +1668,419 @@ int PicoFindSurfaceVertexNum( picoSurface_t *surface, picoVec3_t xyz, picoVec3_t
fixes broken normals (certain formats bork normals)
*/
-#define MAX_NORMAL_VOTES 128
-#define EQUAL_NORMAL_EPSILON 0.01
-#define BAD_NORMAL_EPSILON 0.5
+//#define MAX_NORMAL_VOTES 128
+//#define EQUAL_NORMAL_EPSILON 0.01
+//#define BAD_NORMAL_EPSILON 0.5
+//
+//void PicoFixSurfaceNormals( picoSurface_t *surface ){
+// int i, j, k, a, b, c, numVotes, faceIndex;
+// picoVec3_t votes[ MAX_NORMAL_VOTES ];
+// picoVec3_t *normals, diff;
+// picoVec4_t plane;
+//
+//
+// /* dummy check */
+// if ( surface == NULL || surface->numVertexes == 0 ) {
+// return;
+// }
+//
+// /* fixme: handle other surface types */
+// if ( surface->type != PICO_TRIANGLES ) {
+// return;
+// }
+//
+// /* allocate normal storage */
+// normals = _pico_alloc( surface->numVertexes * sizeof( *normals ) );
+// if ( normals == NULL ) {
+// _pico_printf( PICO_ERROR, "PicoFixSurfaceNormals: Unable to allocate memory for temporary normal storage" );
+// return;
+// }
+//
+// /* zero it out */
+// memset( normals, 0, surface->numVertexes * sizeof( *normals ) );
+//
+// /* walk vertex list */
+// for ( i = 0; i < surface->numVertexes; i++ )
+// {
+// /* zero out votes */
+// numVotes = 0;
+//
+// /* find all the triangles that reference this vertex */
+// for ( j = 0, faceIndex = 0; j < surface->numIndexes; j += 3, faceIndex++ )
+// {
+// /* get triangle */
+// a = surface->index[ j ];
+// b = surface->index[ j + 1 ];
+// c = surface->index[ j + 2 ];
+//
+// /* ignore degenerate triangles */
+// if ( a == b || b == c || c == a ) {
+// continue;
+// }
+//
+// /* ignore indexes out of range */
+// if ( a < 0 || a >= surface->numVertexes ||
+// b < 0 || b >= surface->numVertexes ||
+// c < 0 || c >= surface->numVertexes ) {
+// continue;
+// }
+//
+// /* test triangle */
+// if ( a == i || b == i || c == i ) {
+// /* if this surface has face normals */
+// if ( surface->numFaceNormals && faceIndex < surface->numFaceNormals ) {
+// _pico_copy_vec( surface->faceNormal[ faceIndex ], plane );
+// if ( plane[ 0 ] == 0.f && plane[ 1 ] == 0.f && plane[ 2 ] == 0.f ) {
+// /* if null normal, make plane from the 3 points */
+// if ( _pico_calc_plane( plane, surface->xyz[ a ], surface->xyz[ b ], surface->xyz[ c ] ) == 0 ) {
+// continue;
+// }
+// }
+// }
+// /* make a plane from the 3 points */
+// else if ( _pico_calc_plane( plane, surface->xyz[ a ], surface->xyz[ b ], surface->xyz[ c ] ) == 0 ) {
+// continue;
+// }
+//
+// /* see if this normal has already been voted */
+// for ( k = 0; k < numVotes; k++ )
+// {
+// _pico_subtract_vec( plane, votes[ k ], diff );
+// if ( fabs( diff[ 0 ] ) < EQUAL_NORMAL_EPSILON &&
+// fabs( diff[ 1 ] ) < EQUAL_NORMAL_EPSILON &&
+// fabs( diff[ 2 ] ) < EQUAL_NORMAL_EPSILON ) {
+// break;
+// }
+// }
+//
+// /* add a new vote? */
+// if ( k == numVotes && numVotes < MAX_NORMAL_VOTES ) {
+// _pico_copy_vec( plane, votes[ numVotes ] );
+// numVotes++;
+// }
+// }
+// }
+//
+// /* tally votes */
+// if ( numVotes > 0 ) {
+// /* create average normal */
+// _pico_zero_vec( normals[ i ] );
+// for ( k = 0; k < numVotes; k++ )
+// _pico_add_vec( normals[ i ], votes[ k ], normals[ i ] );
+//
+// /* normalize it */
+// if ( _pico_normalize_vec( normals[ i ] ) ) {
+// /* test against actual normal */
+// if ( fabs( _pico_dot_vec( normals[ i ], surface->normal[ i ] ) - 1 ) > BAD_NORMAL_EPSILON ) {
+// //% printf( "Normal %8d: (%f %f %f) -> (%f %f %f)\n", i,
+// //% surface->normal[ i ][ 0 ], surface->normal[ i ][ 1 ], surface->normal[ i ][ 2 ],
+// //% normals[ i ][ 0 ], normals[ i ][ 1 ], normals[ i ][ 2 ] );
+// _pico_copy_vec( normals[ i ], surface->normal[ i ] );
+// }
+// }
+// }
+// }
+//
+// /* free normal storage */
+// _pico_free( normals );
+//}
-void PicoFixSurfaceNormals( picoSurface_t *surface ){
- int i, j, k, a, b, c, numVotes, faceIndex;
- picoVec3_t votes[ MAX_NORMAL_VOTES ];
- picoVec3_t *normals, diff;
- picoVec4_t plane;
+typedef struct _IndexArray IndexArray;
+struct _IndexArray
+{
+ picoIndex_t* data;
+ picoIndex_t* last;
+};
-
- /* dummy check */
- if ( surface == NULL || surface->numVertexes == 0 ) {
- return;
- }
-
- /* fixme: handle other surface types */
- if ( surface->type != PICO_TRIANGLES ) {
- return;
- }
-
- /* allocate normal storage */
- normals = _pico_alloc( surface->numVertexes * sizeof( *normals ) );
- if ( normals == NULL ) {
- _pico_printf( PICO_ERROR, "PicoFixSurfaceNormals: Unable to allocate memory for temporary normal storage" );
- return;
- }
-
- /* zero it out */
- memset( normals, 0, surface->numVertexes * sizeof( *normals ) );
-
- /* walk vertex list */
- for ( i = 0; i < surface->numVertexes; i++ )
- {
- /* zero out votes */
- numVotes = 0;
-
- /* find all the triangles that reference this vertex */
- for ( j = 0, faceIndex = 0; j < surface->numIndexes; j += 3, faceIndex++ )
- {
- /* get triangle */
- a = surface->index[ j ];
- b = surface->index[ j + 1 ];
- c = surface->index[ j + 2 ];
-
- /* ignore degenerate triangles */
- if ( a == b || b == c || c == a ) {
- continue;
- }
-
- /* ignore indexes out of range */
- if ( a < 0 || a >= surface->numVertexes ||
- b < 0 || b >= surface->numVertexes ||
- c < 0 || c >= surface->numVertexes ) {
- continue;
- }
-
- /* test triangle */
- if ( a == i || b == i || c == i ) {
- /* if this surface has face normals */
- if ( surface->numFaceNormals && faceIndex < surface->numFaceNormals ) {
- _pico_copy_vec( surface->faceNormal[ faceIndex ], plane );
- if ( plane[ 0 ] == 0.f && plane[ 1 ] == 0.f && plane[ 2 ] == 0.f ) {
- /* if null normal, make plane from the 3 points */
- if ( _pico_calc_plane( plane, surface->xyz[ a ], surface->xyz[ b ], surface->xyz[ c ] ) == 0 ) {
- continue;
- }
- }
- }
- /* make a plane from the 3 points */
- else if ( _pico_calc_plane( plane, surface->xyz[ a ], surface->xyz[ b ], surface->xyz[ c ] ) == 0 ) {
- continue;
- }
-
- /* see if this normal has already been voted */
- for ( k = 0; k < numVotes; k++ )
- {
- _pico_subtract_vec( plane, votes[ k ], diff );
- if ( fabs( diff[ 0 ] ) < EQUAL_NORMAL_EPSILON &&
- fabs( diff[ 1 ] ) < EQUAL_NORMAL_EPSILON &&
- fabs( diff[ 2 ] ) < EQUAL_NORMAL_EPSILON ) {
- break;
- }
- }
-
- /* add a new vote? */
- if ( k == numVotes && numVotes < MAX_NORMAL_VOTES ) {
- _pico_copy_vec( plane, votes[ numVotes ] );
- numVotes++;
- }
- }
- }
-
- /* tally votes */
- if ( numVotes > 0 ) {
- /* create average normal */
- _pico_zero_vec( normals[ i ] );
- for ( k = 0; k < numVotes; k++ )
- _pico_add_vec( normals[ i ], votes[ k ], normals[ i ] );
-
- /* normalize it */
- if ( _pico_normalize_vec( normals[ i ] ) ) {
- /* test against actual normal */
- if ( fabs( _pico_dot_vec( normals[ i ], surface->normal[ i ] ) - 1 ) > BAD_NORMAL_EPSILON ) {
- //% printf( "Normal %8d: (%f %f %f) -> (%f %f %f)\n", i,
- //% surface->normal[ i ][ 0 ], surface->normal[ i ][ 1 ], surface->normal[ i ][ 2 ],
- //% normals[ i ][ 0 ], normals[ i ][ 1 ], normals[ i ][ 2 ] );
- _pico_copy_vec( normals[ i ], surface->normal[ i ] );
- }
- }
- }
- }
-
- /* free normal storage */
- _pico_free( normals );
+void indexarray_push_back(IndexArray* self, picoIndex_t value) {
+ *self->last++ = value;
}
+size_t indexarray_size(IndexArray* self) {
+ return self->last - self->data;
+}
+void indexarray_reserve(IndexArray* self, size_t size) {
+ self->data = self->last = _pico_calloc(size, sizeof(picoIndex_t));
+}
+void indexarray_clear(IndexArray* self) {
+ _pico_free(self->data);
+}
+
+typedef struct _BinaryTreeNode BinaryTreeNode;
+struct _BinaryTreeNode
+{
+ picoIndex_t left;
+ picoIndex_t right;
+};
+
+typedef struct _BinaryTree BinaryTree;
+struct _BinaryTree
+{
+ BinaryTreeNode* data;
+ BinaryTreeNode* last;
+};
+
+void binarytree_extend(BinaryTree* self) {
+ self->last->left = 0;
+ self->last->right = 0;
+ ++self->last;
+}
+
+size_t binarytree_size(BinaryTree* self) {
+ return self->last - self->data;
+}
+
+void binarytree_reserve(BinaryTree* self, size_t size) {
+ self->data = self->last = _pico_calloc(size, sizeof(BinaryTreeNode));
+}
+
+void binarytree_clear(BinaryTree* self) {
+ _pico_free(self->data);
+}
+
+typedef int(*LessFunc)(void*, picoIndex_t, picoIndex_t);
+
+typedef struct _UniqueIndices UniqueIndices;
+struct _UniqueIndices
+{
+ BinaryTree tree;
+ IndexArray indices;
+ LessFunc lessFunc;
+ void* lessData;
+};
+
+size_t UniqueIndices_size(UniqueIndices* self) {
+ return binarytree_size(&self->tree);
+}
+
+void UniqueIndices_reserve(UniqueIndices* self, size_t size) {
+ binarytree_reserve(&self->tree, size);
+ indexarray_reserve(&self->indices, size);
+}
+
+void UniqueIndices_init(UniqueIndices* self, LessFunc lessFunc, void* lessData) {
+ self->lessFunc = lessFunc;
+ self->lessData = lessData;
+}
+
+void UniqueIndices_destroy(UniqueIndices* self) {
+ binarytree_clear(&self->tree);
+ indexarray_clear(&self->indices);
+}
+
+picoIndex_t UniqueIndices_find_or_insert(UniqueIndices* self, picoIndex_t value) {
+ picoIndex_t index = 0;
+
+ for (;; )
+ {
+ if (self->lessFunc(self->lessData, value, self->indices.data[index])) {
+ BinaryTreeNode* node = self->tree.data + index;
+ if (node->left != 0) {
+ index = node->left;
+ continue;
+ }
+ else
+ {
+ node->left = (picoIndex_t)binarytree_size(&self->tree);
+ binarytree_extend(&self->tree);
+ indexarray_push_back(&self->indices, value);
+ return node->left;
+ }
+ }
+ if (self->lessFunc(self->lessData, self->indices.data[index], value)) {
+ BinaryTreeNode* node = self->tree.data + index;
+ if (node->right != 0) {
+ index = node->right;
+ continue;
+ }
+ else
+ {
+ node->right = (picoIndex_t)binarytree_size(&self->tree);
+ binarytree_extend(&self->tree);
+ indexarray_push_back(&self->indices, value);
+ return node->right;
+ }
+ }
+
+ return index;
+ }
+}
+
+picoIndex_t UniqueIndices_insert(UniqueIndices* self, picoIndex_t value) {
+ if (self->tree.data == self->tree.last) {
+ binarytree_extend(&self->tree);
+ indexarray_push_back(&self->indices, value);
+ return 0;
+ }
+ else
+ {
+ return UniqueIndices_find_or_insert(self, value);
+ }
+}
+
+typedef struct picoSmoothVertices_s picoSmoothVertices_t;
+struct picoSmoothVertices_s
+{
+ picoVec3_t* xyz;
+ picoIndex_t* smoothingGroups;
+};
+
+int lessSmoothVertex(void* data, picoIndex_t first, picoIndex_t second) {
+ picoSmoothVertices_t* smoothVertices = data;
+
+ if (smoothVertices->xyz[first][0] != smoothVertices->xyz[second][0]) {
+ return smoothVertices->xyz[first][0] < smoothVertices->xyz[second][0];
+ }
+ if (smoothVertices->xyz[first][1] != smoothVertices->xyz[second][1]) {
+ return smoothVertices->xyz[first][1] < smoothVertices->xyz[second][1];
+ }
+ if (smoothVertices->xyz[first][2] != smoothVertices->xyz[second][2]) {
+ return smoothVertices->xyz[first][2] < smoothVertices->xyz[second][2];
+ }
+ if (smoothVertices->smoothingGroups[first] != smoothVertices->smoothingGroups[second]) {
+ return smoothVertices->smoothingGroups[first] < smoothVertices->smoothingGroups[second];
+ }
+ return 0;
+}
+
+void _pico_vertices_combine_shared_normals(picoVec3_t* xyz, picoIndex_t* smoothingGroups, picoVec3_t* normals, picoIndex_t numVertices) {
+ UniqueIndices vertices;
+ IndexArray indices;
+ picoSmoothVertices_t smoothVertices = { xyz, smoothingGroups };
+ UniqueIndices_init(&vertices, lessSmoothVertex, &smoothVertices);
+ UniqueIndices_reserve(&vertices, numVertices);
+ indexarray_reserve(&indices, numVertices);
+
+ {
+ picoIndex_t i = 0;
+ for (; i < numVertices; ++i)
+ {
+ size_t size = UniqueIndices_size(&vertices);
+ picoIndex_t index = UniqueIndices_insert(&vertices, i);
+ if ((size_t)index != size) {
+ float* normal = normals[vertices.indices.data[index]];
+ _pico_add_vec(normal, normals[i], normal);
+ }
+ indexarray_push_back(&indices, index);
+ }
+ }
+
+ {
+ picoIndex_t maxIndex = 0;
+ picoIndex_t* i = indices.data;
+ for (; i != indices.last; ++i)
+ {
+ if (*i <= maxIndex) {
+ _pico_copy_vec(normals[vertices.indices.data[*i]], normals[i - indices.data]);
+ }
+ else
+ {
+ maxIndex = *i;
+ }
+ }
+ }
+
+ UniqueIndices_destroy(&vertices);
+ indexarray_clear(&indices);
+}
+
+typedef picoVec3_t* picoNormalIter_t;
+typedef picoIndex_t* picoIndexIter_t;
+
+#define THE_CROSSPRODUCTS_OF_ANY_PAIR_OF_EDGES_OF_A_GIVEN_TRIANGLE_ARE_EQUAL 1
+
+void _pico_triangles_generate_weighted_normals(picoIndexIter_t first, picoIndexIter_t end, picoVec3_t* xyz, picoVec3_t* normals) {
+ for (; first != end; first += 3)
+ {
+#if (THE_CROSSPRODUCTS_OF_ANY_PAIR_OF_EDGES_OF_A_GIVEN_TRIANGLE_ARE_EQUAL)
+ picoVec3_t weightedNormal;
+ {
+ float* a = xyz[*(first + 0)];
+ float* b = xyz[*(first + 1)];
+ float* c = xyz[*(first + 2)];
+ picoVec3_t ba, ca;
+ _pico_subtract_vec(b, a, ba);
+ _pico_subtract_vec(c, a, ca);
+ _pico_cross_vec(ca, ba, weightedNormal);
+ }
+#endif
+ {
+ int j = 0;
+ for (; j < 3; ++j)
+ {
+ float* normal = normals[*(first + j)];
+#if ( !THE_CROSSPRODUCTS_OF_ANY_PAIR_OF_EDGES_OF_A_GIVEN_TRIANGLE_ARE_EQUAL )
+ picoVec3_t weightedNormal;
+ {
+ float* a = xyz[*(first + ((j + 0) % 3))];
+ float* b = xyz[*(first + ((j + 1) % 3))];
+ float* c = xyz[*(first + ((j + 2) % 3))];
+ picoVec3_t ba, ca;
+ _pico_subtract_vec(b, a, ba);
+ _pico_subtract_vec(c, a, ca);
+ _pico_cross_vec(ca, ba, weightedNormal);
+ }
+#endif
+ _pico_add_vec(weightedNormal, normal, normal);
+ }
+ }
+ }
+}
+
+void _pico_normals_zero(picoNormalIter_t first, picoNormalIter_t last) {
+ for (; first != last; ++first)
+ {
+ _pico_zero_vec(*first);
+ }
+}
+
+void _pico_normals_normalize(picoNormalIter_t first, picoNormalIter_t last) {
+ for (; first != last; ++first)
+ {
+ _pico_normalize_vec(*first);
+ }
+}
+
+double _pico_length_vec(picoVec3_t vec) {
+ return sqrt(vec[0] * vec[0] + vec[1] * vec[1] + vec[2] * vec[2]);
+}
+
+#define NORMAL_UNIT_LENGTH_EPSILON 0.01
+#define FLOAT_EQUAL_EPSILON( f, other, epsilon ) ( fabs( f - other ) < epsilon )
+
+int _pico_normal_is_unit_length(picoVec3_t normal) {
+ return FLOAT_EQUAL_EPSILON(_pico_length_vec(normal), 1.0, NORMAL_UNIT_LENGTH_EPSILON);
+}
+
+int _pico_normal_within_tolerance(picoVec3_t normal, picoVec3_t other) {
+ return _pico_dot_vec(normal, other) > 0.0f;
+}
+
+void _pico_normals_assign_generated_normals(picoNormalIter_t first, picoNormalIter_t last, picoNormalIter_t generated) {
+ for (; first != last; ++first, ++generated)
+ {
+ if (!_pico_normal_is_unit_length(*first) || !_pico_normal_within_tolerance(*first, *generated)) {
+ _pico_copy_vec(*generated, *first);
+ }
+ }
+}
+
+void PicoFixSurfaceNormals(picoSurface_t* surface) {
+ picoVec3_t* normals = (picoVec3_t*)_pico_calloc(surface->numVertexes, sizeof(picoVec3_t));
+
+ _pico_normals_zero(normals, normals + surface->numVertexes);
+
+ _pico_triangles_generate_weighted_normals(surface->index, surface->index + surface->numIndexes, surface->xyz, normals);
+ _pico_vertices_combine_shared_normals(surface->xyz, surface->smoothingGroup, normals, surface->numVertexes);
+
+ _pico_normals_normalize(normals, normals + surface->numVertexes);
+
+ _pico_normals_assign_generated_normals(surface->normal, surface->normal + surface->numVertexes, normals);
+
+ _pico_free(normals);
+}
/*
PicoRemapModel() - sea
@@ -1727,8 +2091,8 @@ void PicoFixSurfaceNormals( picoSurface_t *surface ){
#define _prm_error_return \
{ \
- _pico_free_parser( p ); \
- _pico_free_file( remapBuffer ); \
+ _pico_free_parser( p ); \
+ _pico_free_file( remapBuffer ); \
return 0; \
}
@@ -1744,7 +2108,7 @@ int PicoRemapModel( picoModel_t *model, char *remapFile ){
}
/* load remap file contents */
- _pico_load_file( remapFile,&remapBuffer,&remapBufSize );
+ _pico_load_file( remapFile, &remapBuffer, &remapBufSize );
/* check result */
if ( remapBufSize == 0 ) {
@@ -1765,12 +2129,12 @@ int PicoRemapModel( picoModel_t *model, char *remapFile ){
while ( 1 )
{
/* get next token in remap file */
- if ( !_pico_parse( p,1 ) ) {
+ if ( !_pico_parse( p, 1 ) ) {
break;
}
/* skip over c++ style comment lines */
- if ( !_pico_stricmp( p->token,"//" ) ) {
+ if ( !_pico_stricmp( p->token, "//" ) ) {
_pico_parse_skip_rest( p );
continue;
}
@@ -1781,7 +2145,7 @@ int PicoRemapModel( picoModel_t *model, char *remapFile ){
int level = 1;
/* check bracket */
- if ( !_pico_parse_check( p,1,"{" ) ) {
+ if ( !_pico_parse_check( p, 1, "{" ) ) {
_prm_error_return;
}
@@ -1791,15 +2155,14 @@ int PicoRemapModel( picoModel_t *model, char *remapFile ){
picoShader_t *shader;
char *materialName;
-
/* get material name */
- if ( _pico_parse( p,1 ) == NULL ) {
+ if ( _pico_parse( p, 1 ) == NULL ) {
break;
}
if ( !strlen( p->token ) ) {
continue;
}
- materialName = _pico_clone_alloc( p->token,-1 );
+ materialName = _pico_clone_alloc( p->token );
if ( materialName == NULL ) {
_prm_error_return;
}
@@ -1816,26 +2179,26 @@ int PicoRemapModel( picoModel_t *model, char *remapFile ){
}
/* get next token (assignment token or shader name) */
- if ( !_pico_parse( p,0 ) ) {
+ if ( !_pico_parse( p, 0 ) ) {
_pico_free( materialName );
_prm_error_return;
}
/* skip assignment token (if present) */
- if ( !strcmp( p->token,"=>" ) ||
- !strcmp( p->token,"->" ) ||
- !strcmp( p->token,"=" ) ) {
+ if ( !strcmp( p->token, "=>" ) ||
+ !strcmp( p->token, "->" ) ||
+ !strcmp( p->token, "=" ) ) {
/* simply grab the next token */
- if ( !_pico_parse( p,0 ) ) {
+ if ( !_pico_parse( p, 0 ) ) {
_pico_free( materialName );
_prm_error_return;
}
}
/* try to find material by name */
- shader = PicoFindShader( model,materialName,0 );
+ shader = PicoFindShader( model, materialName, 0 );
/* we've found a material matching the name */
if ( shader != NULL ) {
- PicoSetShaderName( shader,p->token );
+ PicoSetShaderName( shader, p->token );
}
/* free memory used by material name */
_pico_free( materialName );
@@ -1846,29 +2209,29 @@ int PicoRemapModel( picoModel_t *model, char *remapFile ){
}
/* block for detailed single material remappings */
/* materials[ "m" ] { key data... } */
- else if ( !_pico_stricmp( p->token,"materials[" ) ) {
+ else if ( !_pico_stricmp( p->token, "materials[" ) ) {
picoShader_t *shader;
char *tempMaterialName;
int level = 1;
/* get material name */
- if ( !_pico_parse( p,0 ) ) {
+ if ( !_pico_parse( p, 0 ) ) {
_prm_error_return;
}
/* temporary copy of material name */
- tempMaterialName = _pico_clone_alloc( p->token,-1 );
+ tempMaterialName = _pico_clone_alloc( p->token );
if ( tempMaterialName == NULL ) {
_prm_error_return;
}
/* check square closing bracket */
- if ( !_pico_parse_check( p,0,"]" ) ) {
+ if ( !_pico_parse_check( p, 0, "]" ) ) {
_prm_error_return;
}
/* try to find material by name */
- shader = PicoFindShader( model,tempMaterialName,0 );
+ shader = PicoFindShader( model, tempMaterialName, 0 );
/* free memory used by temporary material name */
_pico_free( tempMaterialName );
@@ -1881,7 +2244,7 @@ int PicoRemapModel( picoModel_t *model, char *remapFile ){
continue;
}
/* check opening bracket */
- if ( !_pico_parse_check( p,1,"{" ) ) {
+ if ( !_pico_parse_check( p, 1, "{" ) ) {
_prm_error_return;
}
@@ -1889,7 +2252,7 @@ int PicoRemapModel( picoModel_t *model, char *remapFile ){
while ( 1 )
{
/* get key name */
- if ( _pico_parse( p,1 ) == NULL ) {
+ if ( _pico_parse( p, 1 ) == NULL ) {
break;
}
if ( !strlen( p->token ) ) {
@@ -1908,26 +2271,26 @@ int PicoRemapModel( picoModel_t *model, char *remapFile ){
}
/* remap shader name */
- if ( !_pico_stricmp( p->token,"shader" ) ) {
- if ( !_pico_parse( p,0 ) ) {
+ if ( !_pico_stricmp( p->token, "shader" ) ) {
+ if ( !_pico_parse( p, 0 ) ) {
_prm_error_return;
}
- PicoSetShaderName( shader,p->token );
+ PicoSetShaderName( shader, p->token );
}
/* remap shader map name */
- else if ( !_pico_stricmp( p->token,"mapname" ) ) {
- if ( !_pico_parse( p,0 ) ) {
+ else if ( !_pico_stricmp( p->token, "mapname" ) ) {
+ if ( !_pico_parse( p, 0 ) ) {
_prm_error_return;
}
- PicoSetShaderMapName( shader,p->token );
+ PicoSetShaderMapName( shader, p->token );
}
/* remap shader's ambient color */
- else if ( !_pico_stricmp( p->token,"ambient" ) ) {
+ else if ( !_pico_stricmp( p->token, "ambient" ) ) {
picoColor_t color;
picoVec3_t v;
/* get vector from parser */
- if ( !_pico_parse_vec( p,v ) ) {
+ if ( !_pico_parse_vec( p, v ) ) {
_prm_error_return;
}
@@ -1938,15 +2301,15 @@ int PicoRemapModel( picoModel_t *model, char *remapFile ){
color[ 3 ] = 1;
/* set new ambient color */
- PicoSetShaderAmbientColor( shader,color );
+ PicoSetShaderAmbientColor( shader, color );
}
/* remap shader's diffuse color */
- else if ( !_pico_stricmp( p->token,"diffuse" ) ) {
+ else if ( !_pico_stricmp( p->token, "diffuse" ) ) {
picoColor_t color;
picoVec3_t v;
/* get vector from parser */
- if ( !_pico_parse_vec( p,v ) ) {
+ if ( !_pico_parse_vec( p, v ) ) {
_prm_error_return;
}
@@ -1957,10 +2320,10 @@ int PicoRemapModel( picoModel_t *model, char *remapFile ){
color[ 3 ] = 1;
/* set new ambient color */
- PicoSetShaderDiffuseColor( shader,color );
+ PicoSetShaderDiffuseColor( shader, color );
}
/* remap shader's specular color */
- else if ( !_pico_stricmp( p->token,"specular" ) ) {
+ else if ( !_pico_stricmp( p->token, "specular" ) ) {
picoColor_t color;
picoVec3_t v;
@@ -1976,7 +2339,7 @@ int PicoRemapModel( picoModel_t *model, char *remapFile ){
color[ 3 ] = 1;
/* set new ambient color */
- PicoSetShaderSpecularColor( shader,color );
+ PicoSetShaderSpecularColor( shader, color );
}
/* skip rest */
_pico_parse_skip_rest( p );
@@ -2002,8 +2365,8 @@ int PicoRemapModel( picoModel_t *model, char *remapFile ){
void PicoAddTriangleToModel( picoModel_t *model, picoVec3_t** xyz, picoVec3_t** normals,
int numSTs, picoVec2_t **st, int numColors, picoColor_t **colors,
- picoShader_t* shader ){
- int i,j;
+ picoShader_t* shader, picoIndex_t* smoothingGroup ){
+ int i, j;
int vertDataIndex;
picoSurface_t* workSurface = NULL;
@@ -2038,7 +2401,7 @@ void PicoAddTriangleToModel( picoModel_t *model, picoVec3_t** xyz, picoVec3_t**
int newVertIndex = PicoGetSurfaceNumIndexes( workSurface );
/* get the index of the vertex that we're going to store at newVertIndex */
- vertDataIndex = PicoFindSurfaceVertexNum( workSurface, *xyz[i], *normals[i], numSTs, st[i], numColors, colors[i] );
+ vertDataIndex = PicoFindSurfaceVertexNum( workSurface, *xyz[i], *normals[i], numSTs, st[i], numColors, colors[i], smoothingGroup[i] );
/* the vertex wasn't found, so create a new vertex in the pool from the data we have */
if ( vertDataIndex == -1 ) {
@@ -2058,6 +2421,8 @@ void PicoAddTriangleToModel( picoModel_t *model, picoVec3_t** xyz, picoVec3_t**
{
PicoSetSurfaceST( workSurface, j, vertDataIndex, st[i][j] );
}
+
+ PicoSetSurfaceSmoothingGroup( workSurface, vertDataIndex, smoothingGroup[ i ] );
}
/* add this vertex to the triangle */
diff --git a/libs/picomodel/picomodel.vcxproj b/libs/picomodel/picomodel.vcxproj
index 78725e7c..f5c872a5 100644
--- a/libs/picomodel/picomodel.vcxproj
+++ b/libs/picomodel/picomodel.vcxproj
@@ -38,7 +38,7 @@
StaticLibrary
- v110_xp
+ v140
diff --git a/libs/picomodel/picomodules.c b/libs/picomodel/picomodules.c
index 6ccafc46..5f298492 100644
--- a/libs/picomodel/picomodules.c
+++ b/libs/picomodel/picomodules.c
@@ -54,6 +54,7 @@ extern const picoModule_t picoModuleMDC;
extern const picoModule_t picoModuleMD2;
extern const picoModule_t picoModuleFM;
extern const picoModule_t picoModuleLWO;
+extern const picoModule_t picoModuleTerrain;
@@ -68,6 +69,7 @@ const picoModule_t *picoModules[] =
&picoModuleMD2, /* quake2 md2 */
&picoModuleFM, /* heretic2 fm */
&picoModuleLWO, /* lightwave object */
+ &picoModuleTerrain, /* picoterrain object */
&picoModuleOBJ, /* wavefront object */
NULL /* arnold */
};
@@ -81,7 +83,7 @@ const picoModule_t *picoModules[] =
this param can be NULL when the count is not needed.
*/
-const picoModule_t **PicoModuleList( int *numModules ){
+const picoModule_t **PicoModuleList( int *numModules ) {
/* get module count */
if ( numModules != NULL ) {
for ( ( *numModules ) = 0; picoModules[ *numModules ] != NULL; ( *numModules )++ ) ;
diff --git a/libs/picomodel/pm_3ds.c b/libs/picomodel/pm_3ds.c
index 64b77fe6..4065f3e7 100644
--- a/libs/picomodel/pm_3ds.c
+++ b/libs/picomodel/pm_3ds.c
@@ -124,7 +124,7 @@ debugChunkNames[] =
{ CHUNK_OBJECT_UV, "CHUNK_OBJECT_UV" },
{ 0, NULL }
};
-static char *DebugGetChunkName( int id ){
+static char *DebugGetChunkName( int id ) {
int i,max; /* imax? ;) */
max = sizeof( debugChunkNames ) / sizeof( debugChunkNames[0] );
@@ -397,6 +397,9 @@ static int GetMeshShader( T3dsLoaderPers *pers ){
return 0;
}
+ /* ydnar: trim to first whitespace */
+ _pico_first_token( shaderName );
+
/* now that we have the shader name we need to go through all of */
/* the shaders and check the name against each shader. when we */
/* find a shader in our shader list that matches this name we */
@@ -418,7 +421,7 @@ static int GetMeshShader( T3dsLoaderPers *pers ){
/* we have a valid map name ptr */
if ( mapNamePtr != NULL ) {
char temp[128];
- char *name;
+ const char *name;
/* copy map name to local buffer */
strcpy( mapName,mapNamePtr );
@@ -523,7 +526,6 @@ static int DoNextEditorDataChunk( T3dsLoaderPers *pers, long endofs ){
/* read in surface name */
if ( !GetASCIIZ( pers,surfaceName,sizeof( surfaceName ) ) ) {
return 0; /* this is bad */
-
}
//PicoGetSurfaceName
/* ignore NULL name surfaces */
@@ -606,10 +608,13 @@ static int DoNextEditorDataChunk( T3dsLoaderPers *pers, long endofs ){
/* but for now we skip the new material's name ... */
if ( pers->shader ) {
char *name = (char *)( pers->bufptr + pers->cofs );
- PicoSetShaderName( pers->shader,name );
+ char *cleanedName = _pico_clone_alloc( name );
+ _pico_first_token( cleanedName );
+ PicoSetShaderName( pers->shader, cleanedName );
#ifdef DEBUG_PM_3DS
- printf( "NewShader: '%s'\n",name );
+ printf( "NewShader: '%s'\n", cleanedName );
#endif
+ _pico_free( cleanedName );
}
}
if ( chunk->id == CHUNK_MATDIFFUSE ) {
diff --git a/libs/picomodel/pm_ase.c b/libs/picomodel/pm_ase.c
index dc31dd5f..67f40d41 100644
--- a/libs/picomodel/pm_ase.c
+++ b/libs/picomodel/pm_ase.c
@@ -105,6 +105,25 @@ static aseSubMaterial_t* _ase_get_submaterial( aseMaterial_t* list, int mtlIdPar
return subMtl;
}
+aseSubMaterial_t* _ase_get_submaterial_or_default( aseMaterial_t* materials, int mtlIdParent, int subMtlId ){
+ aseSubMaterial_t* subMtl = _ase_get_submaterial( materials, mtlIdParent, subMtlId );
+ if ( subMtl != NULL ) {
+ return subMtl;
+ }
+
+ /* ydnar: trying default submaterial */
+ subMtl = _ase_get_submaterial( materials, mtlIdParent, 0 );
+ if ( subMtl != NULL ) {
+ return subMtl;
+ }
+
+ _pico_printf( PICO_ERROR, "Could not find material/submaterial for id %d/%d\n", mtlIdParent, subMtlId );
+ return NULL;
+}
+
+
+
+
static aseMaterial_t* _ase_add_material( aseMaterial_t **list, int mtlIdParent ){
aseMaterial_t *mtl = _pico_calloc( 1, sizeof( aseMaterial_t ) );
mtl->mtlId = mtlIdParent;
@@ -173,64 +192,6 @@ static void _ase_print_materials( aseMaterial_t *list ){
}
#endif //DEBUG_PM_ASE
-/* ASE Face management */
-/* These are used to keep an association between a submaterial and a face definition */
-/* They are kept in parallel with the current picoSurface, */
-/* and are used by _ase_submit_triangles to lookup the proper material/submaterial IDs */
-typedef struct aseFace_s
-{
- struct aseFace_s* next;
- int mtlId;
- int subMtlId;
- int index[9];
-} aseFace_t;
-
-/* ASE Face management functions */
-void _ase_add_face( aseFace_t **list, aseFace_t **tail, aseFace_t *newFace ){
- /* insert as head of list */
- if ( !( *list ) ) {
- *list = newFace;
- }
- else
- {
- ( *tail )->next = newFace;
- }
-
- *tail = newFace;
- newFace->next = NULL;
-
- //tag the color indices so we can detect them and apply the default color to them
- newFace->index[6] = -1;
- newFace->index[7] = -1;
- newFace->index[8] = -1;
-}
-
-aseFace_t* _ase_get_face_for_index( aseFace_t *list, int index ){
- int counter = 0;
- aseFace_t* face = list;
-
- while ( counter < index )
- {
- face = face->next;
- counter++;
- }
- return face;
-}
-static void _ase_free_faces( aseFace_t** list, aseFace_t** tail ){
- aseFace_t* face = *list;
- aseFace_t* tempFace = NULL;
-
- while ( face )
- {
- tempFace = face->next;
- _pico_free( face );
- face = tempFace;
- }
-
- ( *list ) = NULL;
- ( *tail ) = NULL;
-}
-
/* todo:
* - apply material specific uv offsets to uv coordinates
*/
@@ -274,7 +235,65 @@ static int _ase_canload( PM_PARAMS_CANLOAD ){
return PICO_PMV_OK;
}
+typedef struct aseVertex_s aseVertex_t;
+struct aseVertex_s
+{
+ picoVec3_t xyz;
+ picoVec3_t normal;
+ picoIndex_t id;
+};
+typedef struct aseTexCoord_s aseTexCoord_t;
+struct aseTexCoord_s
+{
+ picoVec2_t texcoord;
+};
+
+typedef struct aseColor_s aseColor_t;
+struct aseColor_s
+{
+ picoColor_t color;
+};
+
+typedef struct aseFace_s aseFace_t;
+struct aseFace_s
+{
+ picoIndex_t indices[9];
+ picoIndex_t smoothingGroup;
+ picoIndex_t materialId;
+ picoIndex_t subMaterialId;
+};
+typedef aseFace_t* aseFacesIter_t;
+
+picoSurface_t* PicoModelFindOrAddSurface( picoModel_t *model, picoShader_t* shader ){
+ /* see if a surface already has the shader */
+ int i = 0;
+ for ( ; i < model->numSurfaces ; i++ )
+ {
+ picoSurface_t* workSurface = model->surface[i];
+ if ( workSurface->shader == shader ) {
+ return workSurface;
+ }
+ }
+
+ /* no surface uses this shader yet, so create a new surface */
+
+ {
+ /* create a new surface in the model for the unique shader */
+ picoSurface_t* workSurface = PicoNewSurface( model );
+ if ( !workSurface ) {
+ _pico_printf( PICO_ERROR, "Could not allocate a new surface!\n" );
+ return 0;
+ }
+
+ /* do surface setup */
+ PicoSetSurfaceType( workSurface, PICO_TRIANGLES );
+ PicoSetSurfaceName( workSurface, shader->name );
+ PicoSetSurfaceShader( workSurface, shader );
+
+ return workSurface;
+ }
+}
/* _ase_submit_triangles - jhefty
use the surface and the current face list to look up material/submaterial IDs
@@ -286,65 +305,199 @@ static int _ase_canload( PM_PARAMS_CANLOAD ){
indexes 6 7 8 = color indexes (new)
*/
-static void _ase_submit_triangles( picoSurface_t* surface, picoModel_t* model, aseMaterial_t* materials, aseFace_t* faces ){
- aseFace_t* face;
- aseSubMaterial_t* subMtl;
- picoVec3_t* xyz[3];
- picoVec3_t* normal[3];
- picoVec2_t* st[3];
- picoColor_t* color[3];
- int i;
+#if 0
+typedef picoIndex_t* picoIndexIter_t;
- face = faces;
- while ( face != NULL )
+typedef struct aseUniqueIndices_s aseUniqueIndices_t;
+struct aseUniqueIndices_s
+{
+ picoIndex_t* data;
+ picoIndex_t* last;
+
+ aseFace_t* faces;
+};
+
+size_t aseUniqueIndices_size( aseUniqueIndices_t* self ) {
+ return self->last - self->data;
+}
+
+void aseUniqueIndices_reserve( aseUniqueIndices_t* self, picoIndex_t size ) {
+ self->data = self->last = (picoIndex_t*)_pico_calloc( size, sizeof( picoIndex_t ) );
+}
+
+void aseUniqueIndices_clear( aseUniqueIndices_t* self ) {
+ _pico_free( self->data );
+}
+
+void aseUniqueIndices_pushBack( aseUniqueIndices_t* self, picoIndex_t index ) {
+ *self->last++ = index;
+}
+
+picoIndex_t aseFaces_getVertexIndex( aseFace_t* faces, picoIndex_t index ) {
+ return faces[index / 3].indices[index % 3];
+}
+
+picoIndex_t aseFaces_getTexCoordIndex( aseFace_t* faces, picoIndex_t index ) {
+ return faces[index / 3].indices[( index % 3 ) + 3];
+}
+
+picoIndex_t aseFaces_getColorIndex( aseFace_t* faces, picoIndex_t index ) {
+ return faces[index / 3].indices[( index % 3 ) + 6];
+}
+
+int aseUniqueIndex_equal( aseFace_t* faces, picoIndex_t index, picoIndex_t other ) {
+ return aseFaces_getVertexIndex( faces, index ) == aseFaces_getVertexIndex( faces, other )
+ && aseFaces_getTexCoordIndex( faces, index ) == aseFaces_getTexCoordIndex( faces, other )
+ && aseFaces_getColorIndex( faces, index ) == aseFaces_getColorIndex( faces, other );
+}
+
+picoIndex_t aseUniqueIndices_insertUniqueVertex( aseUniqueIndices_t* self, picoIndex_t index ) {
+ picoIndexIter_t i = self->data;
+ for (; i != self->last; ++i )
+ {
+ picoIndex_t other = (picoIndex_t)( i - self->data );
+ if ( aseUniqueIndex_equal( self->faces, index, other ) ) {
+ return other;
+ }
+ }
+
+ aseUniqueIndices_pushBack( self, index );
+ return (picoIndex_t)( aseUniqueIndices_size( self ) - 1 );
+}
+
+static void _ase_submit_triangles_unshared( picoModel_t* model, aseMaterial_t* materials, aseVertex_t* vertices, aseTexCoord_t* texcoords, aseColor_t* colors, aseFace_t* faces, int numFaces, int meshHasNormals ) {
+ aseFacesIter_t i = faces, end = faces + numFaces;
+
+ aseUniqueIndices_t indices;
+ aseUniqueIndices_t remap;
+ aseUniqueIndices_reserve( &indices, numFaces * 3 );
+ aseUniqueIndices_reserve( &remap, numFaces * 3 );
+ indices.faces = faces;
+
+ for (; i != end; ++i )
{
/* look up the shader for the material/submaterial pair */
- subMtl = _ase_get_submaterial( materials, face->mtlId, face->subMtlId );
+ aseSubMaterial_t* subMtl = _ase_get_submaterial_or_default( materials, ( *i ).materialId, ( *i ).subMaterialId );
if ( subMtl == NULL ) {
- /* ydnar: trying default submaterial */
- subMtl = _ase_get_submaterial( materials, face->mtlId, 0 );
- if ( subMtl == NULL ) {
- _pico_printf( PICO_ERROR, "Could not find material/submaterial for id %d/%d\n", face->mtlId, face->subMtlId );
- return;
- }
+ return;
}
- /* we pull the data from the surface using the facelist data */
- for ( i = 0 ; i < 3 ; i++ )
{
- xyz[i] = (picoVec3_t*) PicoGetSurfaceXYZ( surface, face->index[ i ] );
- normal[i] = (picoVec3_t*) PicoGetSurfaceNormal( surface, face->index[ i ] );
- st[i] = (picoVec2_t*) PicoGetSurfaceST( surface, 0, face->index[ i + 3 ] );
-
- if ( face->index [ i + 6] >= 0 ) {
- color[i] = (picoColor_t*)PicoGetSurfaceColor( surface, 0, face->index[ i + 6 ] );
- }
- else
+ picoSurface_t* surface = PicoModelFindOrAddSurface( model, subMtl->shader );
+ int j;
+ /* we pull the data from the vertex, color and texcoord arrays using the face index data */
+ for ( j = 0 ; j < 3 ; j++ )
{
- color[i] = &white;
- }
+ picoIndex_t index = (picoIndex_t)( ( ( i - faces ) * 3 ) + j );
+ picoIndex_t size = (picoIndex_t)aseUniqueIndices_size( &indices );
+ picoIndex_t unique = aseUniqueIndices_insertUniqueVertex( &indices, index );
+ picoIndex_t numVertexes = PicoGetSurfaceNumVertexes( surface );
+ picoIndex_t numIndexes = PicoGetSurfaceNumIndexes( surface );
+
+ aseUniqueIndices_pushBack( &remap, numIndexes );
+
+ PicoSetSurfaceIndex( surface, numIndexes, remap.data[unique] );
+
+ if ( unique == size ) {
+ PicoSetSurfaceXYZ( surface, numVertexes, vertices[( *i ).indices[j]].xyz );
+ PicoSetSurfaceNormal( surface, numVertexes, vertices[( *i ).indices[j]].normal );
+ PicoSetSurfaceST( surface, 0, numVertexes, texcoords[( *i ).indices[j + 3]].texcoord );
+
+ if ( ( *i ).indices[j + 6] >= 0 ) {
+ PicoSetSurfaceColor( surface, 0, numVertexes, colors[( *i ).indices[j + 6]].color );
+ }
+ else
+ {
+ PicoSetSurfaceColor( surface, 0, numVertexes, white );
+ }
+
+ PicoSetSurfaceSmoothingGroup( surface, numVertexes, ( vertices[( *i ).indices[j]].id * ( 1 << 16 ) ) + ( *i ).smoothingGroup );
+ }
+ }
+ }
+ }
+
+ aseUniqueIndices_clear( &indices );
+ aseUniqueIndices_clear( &remap );
+}
+
+#endif
+
+static void _ase_submit_triangles( picoModel_t* model, aseMaterial_t* materials, aseVertex_t* vertices, aseTexCoord_t* texcoords, aseColor_t* colors, aseFace_t* faces, int numFaces ){
+ aseFacesIter_t i = faces, end = faces + numFaces;
+ for (; i != end; ++i )
+ {
+ /* look up the shader for the material/submaterial pair */
+ aseSubMaterial_t* subMtl = _ase_get_submaterial_or_default( materials, ( *i ).materialId, ( *i ).subMaterialId );
+ if ( subMtl == NULL ) {
+ return;
}
- /* submit the triangle to the model */
- PicoAddTriangleToModel( model, xyz, normal, 1, st, 1, color, subMtl->shader );
+ {
+ picoVec3_t* xyz[3];
+ picoVec3_t* normal[3];
+ picoVec2_t* st[3];
+ picoColor_t* color[3];
+ picoIndex_t smooth[3];
+ int j;
+ /* we pull the data from the vertex, color and texcoord arrays using the face index data */
+ for ( j = 0 ; j < 3 ; j++ )
+ {
+ xyz[j] = &vertices[( *i ).indices[j]].xyz;
+ normal[j] = &vertices[( *i ).indices[j]].normal;
+ st[j] = &texcoords[( *i ).indices[j + 3]].texcoord;
- /* advance to the next face */
- face = face->next;
+ if ( colors != NULL && ( *i ).indices[j + 6] >= 0 ) {
+ color[j] = &colors[( *i ).indices[j + 6]].color;
+ }
+ else
+ {
+ color[j] = &white;
+ }
+
+ smooth[j] = ( vertices[( *i ).indices[j]].id * ( 1 << 16 ) ) + ( *i ).smoothingGroup; /* don't merge vertices */
+
+ }
+
+ /* submit the triangle to the model */
+ PicoAddTriangleToModel( model, xyz, normal, 1, st, 1, color, subMtl->shader, smooth );
+ }
}
}
+static void shadername_convert( char* shaderName ){
+ /* unix-style path separators */
+ char* s = shaderName;
+ for (; *s != '\0'; ++s )
+ {
+ if ( *s == '\\' ) {
+ *s = '/';
+ }
+ }
+}
+
+
/* _ase_load:
* loads a 3dsmax ase model file.
*/
static picoModel_t *_ase_load( PM_PARAMS_LOAD ){
picoModel_t *model;
- picoSurface_t *surface = NULL;
picoParser_t *p;
char lastNodeName[ 1024 ];
+ aseVertex_t* vertices = NULL;
+ aseTexCoord_t* texcoords = NULL;
+ aseColor_t* colors = NULL;
aseFace_t* faces = NULL;
- aseFace_t* facesTail = NULL;
+ int numVertices = 0;
+ int numFaces = 0;
+ int numTextureVertices = 0;
+ int numTextureVertexFaces = 0;
+ int numColorVertices = 0;
+ int numColorVertexFaces = 0;
+ int vertexId = 0;
+
aseMaterial_t* materials = NULL;
#ifdef DEBUG_PM_ASE
@@ -357,8 +510,8 @@ static picoModel_t *_ase_load( PM_PARAMS_LOAD ){
#define _ase_error_return( m ) \
{ \
_pico_printf( PICO_ERROR,"%s in ASE, line %d.",m,p->curLine ); \
- _pico_free_parser( p ); \
- PicoFreeModel( model ); \
+ _pico_free_parser( p ); \
+ PicoFreeModel( model ); \
return NULL; \
}
/* create a new pico parser */
@@ -413,15 +566,49 @@ static picoModel_t *_ase_load( PM_PARAMS_LOAD ){
/* model mesh (originally contained within geomobject) */
else if ( !_pico_stricmp( p->token,"*mesh" ) ) {
/* finish existing surface */
- //_ase_make_surface( model, &surface );
- _ase_submit_triangles( surface, model,materials,faces );
- _ase_free_faces( &faces,&facesTail );
+ _ase_submit_triangles( model, materials, vertices, texcoords, colors, faces, numFaces );
+ _pico_free( faces );
+ _pico_free( vertices );
+ _pico_free( texcoords );
+ _pico_free( colors );
+ }
+ else if ( !_pico_stricmp( p->token,"*mesh_numvertex" ) ) {
+ if ( !_pico_parse_int( p, &numVertices ) ) {
+ _ase_error_return( "Missing MESH_NUMVERTEX value" );
+ }
- /* allocate new pico surface */
- surface = PicoNewSurface( NULL );
- if ( surface == NULL ) {
- PicoFreeModel( model );
- return NULL;
+ vertices = _pico_calloc( numVertices, sizeof( aseVertex_t ) );
+ }
+ else if ( !_pico_stricmp( p->token,"*mesh_numfaces" ) ) {
+ if ( !_pico_parse_int( p, &numFaces ) ) {
+ _ase_error_return( "Missing MESH_NUMFACES value" );
+ }
+
+ faces = _pico_calloc( numFaces, sizeof( aseFace_t ) );
+ }
+ else if ( !_pico_stricmp( p->token,"*mesh_numtvertex" ) ) {
+ if ( !_pico_parse_int( p, &numTextureVertices ) ) {
+ _ase_error_return( "Missing MESH_NUMTVERTEX value" );
+ }
+
+ texcoords = _pico_calloc( numTextureVertices, sizeof( aseTexCoord_t ) );
+ }
+ else if ( !_pico_stricmp( p->token,"*mesh_numtvfaces" ) ) {
+ if ( !_pico_parse_int( p, &numTextureVertexFaces ) ) {
+ _ase_error_return( "Missing MESH_NUMTVFACES value" );
+ }
+ }
+ else if ( !_pico_stricmp( p->token,"*mesh_numcvertex" ) ) {
+ if ( !_pico_parse_int( p, &numColorVertices ) ) {
+ _ase_error_return( "Missing MESH_NUMCVERTEX value" );
+ }
+
+ colors = _pico_calloc( numColorVertices, sizeof( aseColor_t ) );
+ memset( colors, 255, numColorVertices * sizeof( aseColor_t ) ); /* ydnar: force colors to white initially */
+ }
+ else if ( !_pico_stricmp( p->token,"*mesh_numcvfaces" ) ) {
+ if ( !_pico_parse_int( p, &numColorVertexFaces ) ) {
+ _ase_error_return( "Missing MESH_NUMCVFACES value" );
}
}
/* mesh material reference. this usually comes at the end of */
@@ -430,77 +617,63 @@ static picoModel_t *_ase_load( PM_PARAMS_LOAD ){
/* the material reference id (shader index) now. */
else if ( !_pico_stricmp( p->token,"*material_ref" ) ) {
int mtlId;
- aseFace_t* face;
-
- /* we must have a valid surface */
- if ( surface == NULL ) {
- _ase_error_return( "Missing mesh for material reference" );
- }
/* get the material ref (0..n) */
if ( !_pico_parse_int( p,&mtlId ) ) {
_ase_error_return( "Missing material reference ID" );
}
- /* fix up all of the aseFaceList in the surface to point to the parent material */
- /* we've already saved off their subMtl */
- face = faces;
- while ( face != NULL )
{
- face->mtlId = mtlId;
- face = face->next;
+ int i = 0;
+ /* fix up all of the aseFaceList in the surface to point to the parent material */
+ /* we've already saved off their subMtl */
+ for (; i < numFaces; ++i )
+ {
+ faces[i].materialId = mtlId;
+ }
}
}
/* model mesh vertex */
else if ( !_pico_stricmp( p->token,"*mesh_vertex" ) ) {
- picoVec3_t v;
int index;
- /* we must have a valid surface */
- if ( surface == NULL ) {
- continue;
+ if ( numVertices == 0 ) {
+ _ase_error_return( "Vertex parse error" );
}
/* get vertex data (orig: index +y -x +z) */
if ( !_pico_parse_int( p,&index ) ) {
_ase_error_return( "Vertex parse error" );
}
- if ( !_pico_parse_vec( p,v ) ) {
+ if ( !_pico_parse_vec( p,vertices[index].xyz ) ) {
_ase_error_return( "Vertex parse error" );
}
- /* set vertex */
- PicoSetSurfaceXYZ( surface,index,v );
+ vertices[index].id = vertexId++;
}
/* model mesh vertex normal */
else if ( !_pico_stricmp( p->token,"*mesh_vertexnormal" ) ) {
- picoVec3_t v;
int index;
- /* we must have a valid surface */
- if ( surface == NULL ) {
- continue;
+ if ( numVertices == 0 ) {
+ _ase_error_return( "Vertex parse error" );
}
/* get vertex data (orig: index +y -x +z) */
if ( !_pico_parse_int( p,&index ) ) {
_ase_error_return( "Vertex parse error" );
}
- if ( !_pico_parse_vec( p,v ) ) {
+ if ( !_pico_parse_vec( p,vertices[index].normal ) ) {
_ase_error_return( "Vertex parse error" );
}
-
- /* set vertex */
- PicoSetSurfaceNormal( surface,index,v );
}
/* model mesh face */
else if ( !_pico_stricmp( p->token,"*mesh_face" ) ) {
picoIndex_t indexes[3];
int index;
- /* we must have a valid surface */
- if ( surface == NULL ) {
- continue;
+ if ( numFaces == 0 ) {
+ _ase_error_return( "Face parse error" );
}
/* get face index */
@@ -526,75 +699,58 @@ static picoModel_t *_ase_load( PM_PARAMS_LOAD ){
_ase_error_return( "Face parse error" );
}
- /* set face indexes (note interleaved offset!) */
- PicoSetSurfaceIndex( surface, ( index * 9 + 0 ), indexes[2] );
- PicoSetSurfaceIndex( surface, ( index * 9 + 1 ), indexes[1] );
- PicoSetSurfaceIndex( surface, ( index * 9 + 2 ), indexes[0] );
-
/* parse to the subMaterial ID */
while ( 1 )
{
- _pico_parse( p,0 );
- if ( !_pico_stricmp( p->token,"*MESH_MTLID" ) ) {
- aseFace_t* newFace;
- int subMtlId;
-
- _pico_parse_int( p, &subMtlId );
- newFace = _pico_calloc( 1, sizeof( aseFace_t ) );
-
- /* we fix up the mtlId later when we parse the material_ref */
- newFace->mtlId = 0;
- newFace->subMtlId = subMtlId;
- newFace->index[0] = indexes[2];
- newFace->index[1] = indexes[1];
- newFace->index[2] = indexes[0];
-
- _ase_add_face( &faces,&facesTail,newFace );
+ if ( !_pico_parse( p,0 ) ) { /* EOL */
break;
}
+ if ( !_pico_stricmp( p->token,"*MESH_SMOOTHING" ) ) {
+ _pico_parse_int( p, &faces[index].smoothingGroup );
+ }
+ if ( !_pico_stricmp( p->token,"*MESH_MTLID" ) ) {
+ _pico_parse_int( p, &faces[index].subMaterialId );
+ }
}
+ faces[index].materialId = 0;
+ faces[index].indices[0] = indexes[2];
+ faces[index].indices[1] = indexes[1];
+ faces[index].indices[2] = indexes[0];
}
/* model texture vertex */
else if ( !_pico_stricmp( p->token,"*mesh_tvert" ) ) {
- picoVec2_t uv;
int index;
- /* we must have a valid surface */
- if ( surface == NULL ) {
- continue;
+ if ( numVertices == 0 ) {
+ _ase_error_return( "Texture Vertex parse error" );
}
/* get uv vertex index */
- if ( !_pico_parse_int( p,&index ) ) {
- _ase_error_return( "UV vertex parse error" );
+ if ( !_pico_parse_int( p,&index ) || index >= numTextureVertices ) {
+ _ase_error_return( "Texture vertex parse error" );
}
/* get uv vertex s */
- if ( !_pico_parse_float( p,&uv[0] ) ) {
- _ase_error_return( "UV vertex parse error" );
+ if ( !_pico_parse_float( p,&texcoords[index].texcoord[0] ) ) {
+ _ase_error_return( "Texture vertex parse error" );
}
/* get uv vertex t */
- if ( !_pico_parse_float( p,&uv[1] ) ) {
- _ase_error_return( "UV vertex parse error" );
+ if ( !_pico_parse_float( p,&texcoords[index].texcoord[1] ) ) {
+ _ase_error_return( "Texture vertex parse error" );
}
/* ydnar: invert t */
- uv[ 1 ] = 1.0f - uv[ 1 ];
-
- /* set texture vertex */
- PicoSetSurfaceST( surface,0,index,uv );
+ texcoords[index].texcoord[ 1 ] = 1.0f - texcoords[index].texcoord[ 1 ];
}
/* ydnar: model mesh texture face */
else if ( !_pico_stricmp( p->token, "*mesh_tface" ) ) {
picoIndex_t indexes[3];
int index;
- aseFace_t* face;
- /* we must have a valid surface */
- if ( surface == NULL ) {
- continue;
+ if ( numFaces == 0 ) {
+ _ase_error_return( "Texture face parse error" );
}
/* get face index */
@@ -617,65 +773,52 @@ static picoModel_t *_ase_load( PM_PARAMS_LOAD ){
_ase_error_return( "Texture face parse error" );
}
- /* set face indexes (note interleaved offset!) */
- PicoSetSurfaceIndex( surface, ( index * 9 + 3 ), indexes[2] );
- PicoSetSurfaceIndex( surface, ( index * 9 + 4 ), indexes[1] );
- PicoSetSurfaceIndex( surface, ( index * 9 + 5 ), indexes[0] );
-
- face = _ase_get_face_for_index( faces,index );
- face->index[3] = indexes[2];
- face->index[4] = indexes[1];
- face->index[5] = indexes[0];
+ faces[index].indices[3] = indexes[2];
+ faces[index].indices[4] = indexes[1];
+ faces[index].indices[5] = indexes[0];
}
/* model color vertex */
else if ( !_pico_stricmp( p->token,"*mesh_vertcol" ) ) {
- picoColor_t color;
int index;
float colorInput;
- /* we must have a valid surface */
- if ( surface == NULL ) {
- continue;
+ if ( numVertices == 0 ) {
+ _ase_error_return( "Color Vertex parse error" );
}
/* get color vertex index */
if ( !_pico_parse_int( p,&index ) ) {
- _ase_error_return( "UV vertex parse error" );
+ _ase_error_return( "Color vertex parse error" );
}
/* get R component */
if ( !_pico_parse_float( p,&colorInput ) ) {
- _ase_error_return( "color vertex parse error" );
+ _ase_error_return( "Color vertex parse error" );
}
- color[0] = (picoByte_t)( colorInput * 255 );
+ colors[index].color[0] = (picoByte_t)( colorInput * 255 );
/* get G component */
if ( !_pico_parse_float( p,&colorInput ) ) {
- _ase_error_return( "color vertex parse error" );
+ _ase_error_return( "Color vertex parse error" );
}
- color[1] = (picoByte_t)( colorInput * 255 );
+ colors[index].color[1] = (picoByte_t)( colorInput * 255 );
/* get B component */
if ( !_pico_parse_float( p,&colorInput ) ) {
- _ase_error_return( "color vertex parse error" );
+ _ase_error_return( "Color vertex parse error" );
}
- color[2] = (picoByte_t)( colorInput * 255 );
+ colors[index].color[2] = (picoByte_t)( colorInput * 255 );
/* leave alpha alone since we don't get any data from the ASE format */
- color[3] = 255;
-
- /* set texture vertex */
- PicoSetSurfaceColor( surface,0,index,color );
+ colors[index].color[3] = 255;
}
/* model color face */
else if ( !_pico_stricmp( p->token,"*mesh_cface" ) ) {
picoIndex_t indexes[3];
int index;
- aseFace_t* face;
- /* we must have a valid surface */
- if ( surface == NULL ) {
- continue;
+ if ( numFaces == 0 ) {
+ _ase_error_return( "Face parse error" );
}
/* get face index */
@@ -701,20 +844,14 @@ static picoModel_t *_ase_load( PM_PARAMS_LOAD ){
_ase_error_return( "Face parse error" );
}
- /* set face indexes (note interleaved offset!) */
- PicoSetSurfaceIndex( surface, ( index * 9 + 6 ), indexes[2] );
- PicoSetSurfaceIndex( surface, ( index * 9 + 7 ), indexes[1] );
- PicoSetSurfaceIndex( surface, ( index * 9 + 8 ), indexes[0] );
-
- face = _ase_get_face_for_index( faces,index );
- face->index[6] = indexes[2];
- face->index[7] = indexes[1];
- face->index[8] = indexes[0];
+ faces[index].indices[6] = indexes[2];
+ faces[index].indices[7] = indexes[1];
+ faces[index].indices[8] = indexes[0];
}
/* model material */
else if ( !_pico_stricmp( p->token, "*material" ) ) {
aseSubMaterial_t* subMaterial = NULL;
- picoShader_t *shader = NULL;
+ picoShader_t *shader;
int level = 1, index;
char materialName[ 1024 ];
float transValue = 0.0f, shineValue = 1.0f;
@@ -755,6 +892,8 @@ static picoModel_t *_ase_load( PM_PARAMS_LOAD ){
if ( level == subMaterialLevel ) {
/* set material name */
+ _pico_first_token( materialName );
+ shadername_convert( materialName );
PicoSetShaderName( shader, materialName );
/* set shader's transparency */
@@ -944,6 +1083,7 @@ static picoModel_t *_ase_load( PM_PARAMS_LOAD ){
}
/* set material name */
+ shadername_convert( materialName );
PicoSetShaderName( shader,materialName );
/* set shader's transparency */
@@ -967,6 +1107,34 @@ static picoModel_t *_ase_load( PM_PARAMS_LOAD ){
/* set material map name */
PicoSetShaderMapName( shader, mapname );
+ /* extract shadername from bitmap path */
+ if ( mapname != NULL ) {
+ char* p = mapname;
+
+ /* convert to shader-name format */
+ shadername_convert( mapname );
+ {
+ /* remove extension */
+ char* last_period = strrchr( p, '.' );
+ if ( last_period != NULL ) {
+ *last_period = '\0';
+ }
+ }
+
+ /* find shader path */
+ for (; *p != '\0'; ++p )
+ {
+ if ( _pico_strnicmp( p, "models/", 7 ) == 0 || _pico_strnicmp( p, "textures/", 9 ) == 0 ) {
+ break;
+ }
+ }
+
+ if ( *p != '\0' ) {
+ /* set material name */
+ PicoSetShaderName( shader,p );
+ }
+ }
+
/* this is just a material with 1 submaterial */
subMaterial = _ase_add_submaterial( &materials, index, 0, shader );
}
@@ -982,9 +1150,11 @@ static picoModel_t *_ase_load( PM_PARAMS_LOAD ){
}
/* ydnar: finish existing surface */
-// _ase_make_surface( model, &surface );
- _ase_submit_triangles( surface, model,materials,faces );
- _ase_free_faces( &faces,&facesTail );
+ _ase_submit_triangles( model, materials, vertices, texcoords, colors, faces, numFaces );
+ _pico_free( faces );
+ _pico_free( vertices );
+ _pico_free( texcoords );
+ _pico_free( colors );
#ifdef DEBUG_PM_ASE
_ase_print_materials( materials );
@@ -995,6 +1165,8 @@ static picoModel_t *_ase_load( PM_PARAMS_LOAD ){
_ase_free_materials( &materials );
+ _pico_free_parser( p );
+
/* return allocated pico model */
return model;
}
diff --git a/libs/picomodel/pm_fm.c b/libs/picomodel/pm_fm.c
index a4251337..9201e27e 100644
--- a/libs/picomodel/pm_fm.c
+++ b/libs/picomodel/pm_fm.c
@@ -350,7 +350,7 @@ static picoModel_t *_fm_load( PM_PARAMS_LOAD ){
texCoord->t = _pico_little_short( texCoord[i].t );
}
// set Skin Name
- strncpy( skinname, (char *) fm.fm_skin, FM_SKINPATHSIZE );
+ strncpy( skinname, (unsigned char *) fm.fm_skin, FM_SKINPATHSIZE );
#ifdef FM_VERBOSE_DBG
// Print out md2 values
diff --git a/libs/picomodel/pm_lwo.c b/libs/picomodel/pm_lwo.c
index f1d82dd9..5b4f2d60 100644
--- a/libs/picomodel/pm_lwo.c
+++ b/libs/picomodel/pm_lwo.c
@@ -103,7 +103,7 @@ static picoModel_t *_lwo_load( PM_PARAMS_LOAD ){
lwPolygon *pol;
lwPolVert *v;
lwVMapPt *vm;
- char name[ 64 ];
+ char name[ 256 ];
int i, j, k, numverts;
picoModel_t *picoModel;
@@ -235,6 +235,7 @@ static picoModel_t *_lwo_load( PM_PARAMS_LOAD ){
/* detox and set shader name */
strncpy( name, surface->name, sizeof( name ) );
+ _pico_first_token( name );
_pico_setfext( name, "" );
_pico_unixify( name );
PicoSetShaderName( picoShader, name );
@@ -282,9 +283,22 @@ static picoModel_t *_lwo_load( PM_PARAMS_LOAD ){
xyz[ 1 ] = pt->pos[ 2 ];
xyz[ 2 ] = pt->pos[ 1 ];
+///* doom3 lwo data doesn't seem to have smoothing-angle information */
+//#if 0
+// if ( surface->smooth <= 0 ) {
+// /* use face normals */
normal[ 0 ] = v->norm[ 0 ];
normal[ 1 ] = v->norm[ 2 ];
normal[ 2 ] = v->norm[ 1 ];
+ }
+ else
+//#endif
+ {
+ /* smooth normals later */
+ normal[ 0 ] = 0;
+ normal[ 1 ] = 0;
+ normal[ 2 ] = 0;
+ }
st[ 0 ] = xyz[ defaultSTAxis[ 0 ] ] * defaultXYZtoSTScale[ 0 ];
st[ 1 ] = xyz[ defaultSTAxis[ 1 ] ] * defaultXYZtoSTScale[ 1 ];
diff --git a/libs/picomodel/pm_mdc.c b/libs/picomodel/pm_mdc.c
index 2e4849fb..396cadc9 100644
--- a/libs/picomodel/pm_mdc.c
+++ b/libs/picomodel/pm_mdc.c
@@ -52,7 +52,7 @@
#define MDC_DIST_SCALE 0.05f
/* mdc decoding normal table */
-double mdcNormals[ 256 ][ 3 ] =
+const double mdcNormals[ 256 ][ 3 ] =
{
{ 1.000000, 0.000000, 0.000000 },
{ 0.980785, 0.195090, 0.000000 },
diff --git a/libs/picomodel/pm_obj.c b/libs/picomodel/pm_obj.c
index 2f6e93c4..a8b1dfed 100644
--- a/libs/picomodel/pm_obj.c
+++ b/libs/picomodel/pm_obj.c
@@ -241,7 +241,7 @@ static int _obj_mtl_load( picoModel_t *model ){
return 0; \
}
/* alloc copy of model file name */
- fileName = _pico_clone_alloc( model->fileName,-1 );
+ fileName = _pico_clone_alloc( model->fileName );
if ( fileName == NULL ) {
return 0;
}
diff --git a/libs/picomodel/pm_terrain.c b/libs/picomodel/pm_terrain.c
new file mode 100644
index 00000000..d0d54653
--- /dev/null
+++ b/libs/picomodel/pm_terrain.c
@@ -0,0 +1,607 @@
+/* -----------------------------------------------------------------------------
+
+ PicoModel Library
+
+ Copyright (c) 2003, Randy Reddig & seaw0lf
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modification,
+ are permitted provided that the following conditions are met:
+
+ Redistributions of source code must retain the above copyright notice, this list
+ of conditions and the following disclaimer.
+
+ Redistributions in binary form must reproduce the above copyright notice, this
+ list of conditions and the following disclaimer in the documentation and/or
+ other materials provided with the distribution.
+
+ Neither the names of the copyright holders nor the names of its contributors may
+ be used to endorse or promote products derived from this software without
+ specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ 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
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ ----------------------------------------------------------------------------- */
+
+
+
+/* marker */
+#define PM_TERRAIN_C
+
+
+
+/* dependencies */
+#include "picointernal.h"
+
+
+
+typedef struct tga_s
+{
+ unsigned char id_length, colormap_type, image_type;
+ unsigned short colormap_index, colormap_length;
+ unsigned char colormap_size;
+ unsigned short x_origin, y_origin, width, height;
+ unsigned char pixel_size, attributes;
+}
+tga_t;
+
+
+
+/*
+ _terrain_load_tga_buffer()
+ loads a tga image into a newly allocated image buffer
+ fixme: replace/clean this function
+ */
+
+void _terrain_load_tga_buffer( unsigned char *buffer, unsigned char **pic, int *width, int *height ) {
+ int row, column;
+ int columns, rows, numPixels;
+ unsigned char *pixbuf;
+ unsigned char *buf_p;
+ tga_t targa_header;
+ unsigned char *targa_rgba;
+
+
+ *pic = NULL;
+
+ if ( buffer == NULL ) {
+ return;
+ }
+
+ buf_p = buffer;
+
+ targa_header.id_length = *buf_p++;
+ targa_header.colormap_type = *buf_p++;
+ targa_header.image_type = *buf_p++;
+
+ targa_header.colormap_index = _pico_little_short( *(short*)buf_p );
+ buf_p += 2;
+ targa_header.colormap_length = _pico_little_short( *(short*) buf_p );
+ buf_p += 2;
+ targa_header.colormap_size = *buf_p++;
+ targa_header.x_origin = _pico_little_short( *(short*) buf_p );
+ buf_p += 2;
+ targa_header.y_origin = _pico_little_short( *(short*) buf_p );
+ buf_p += 2;
+ targa_header.width = _pico_little_short( *(short*) buf_p );
+ buf_p += 2;
+ targa_header.height = _pico_little_short( *(short*) buf_p );
+ buf_p += 2;
+ targa_header.pixel_size = *buf_p++;
+ targa_header.attributes = *buf_p++;
+
+ if ( targa_header.image_type != 2 && targa_header.image_type != 10 && targa_header.image_type != 3 ) {
+ _pico_printf( PICO_ERROR, "Only type 2 (RGB), 3 (gray), and 10 (RGB) TGA images supported\n" );
+ pic = NULL;
+ return;
+ }
+
+ if ( targa_header.colormap_type != 0 ) {
+ _pico_printf( PICO_ERROR, "Indexed color TGA images not supported\n" );
+ return;
+ }
+
+ if ( targa_header.pixel_size != 32 && targa_header.pixel_size != 24 && targa_header.image_type != 3 ) {
+ _pico_printf( PICO_ERROR, "Only 32 or 24 bit TGA images supported (not indexed color)\n" );
+ pic = NULL;
+ return;
+ }
+
+ columns = targa_header.width;
+ rows = targa_header.height;
+ numPixels = columns * rows;
+
+ if ( width ) {
+ *width = columns;
+ }
+ if ( height ) {
+ *height = rows;
+ }
+
+ targa_rgba = _pico_alloc( numPixels * 4 );
+ *pic = targa_rgba;
+
+ if ( targa_header.id_length != 0 ) {
+ buf_p += targa_header.id_length; // skip TARGA image comment
+
+ }
+ if ( targa_header.image_type == 2 || targa_header.image_type == 3 ) {
+ // Uncompressed RGB or gray scale image
+ for ( row = rows - 1; row >= 0; row-- )
+ {
+ pixbuf = targa_rgba + row * columns * 4;
+ for ( column = 0; column < columns; column++ )
+ {
+ unsigned char red,green,blue,alphabyte;
+ switch ( targa_header.pixel_size )
+ {
+
+ case 8:
+ blue = *buf_p++;
+ green = blue;
+ red = blue;
+ *pixbuf++ = red;
+ *pixbuf++ = green;
+ *pixbuf++ = blue;
+ *pixbuf++ = 255;
+ break;
+
+ case 24:
+ blue = *buf_p++;
+ green = *buf_p++;
+ red = *buf_p++;
+ *pixbuf++ = red;
+ *pixbuf++ = green;
+ *pixbuf++ = blue;
+ *pixbuf++ = 255;
+ break;
+ case 32:
+ blue = *buf_p++;
+ green = *buf_p++;
+ red = *buf_p++;
+ alphabyte = *buf_p++;
+ *pixbuf++ = red;
+ *pixbuf++ = green;
+ *pixbuf++ = blue;
+ *pixbuf++ = alphabyte;
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ }
+
+ /* rle encoded pixels */
+ else if ( targa_header.image_type == 10 ) {
+ unsigned char red,green,blue,alphabyte,packetHeader,packetSize,j;
+
+ red = 0;
+ green = 0;
+ blue = 0;
+ alphabyte = 0xff;
+
+ for ( row = rows - 1; row >= 0; row-- ) {
+ pixbuf = targa_rgba + row * columns * 4;
+ for ( column = 0; column < columns; ) {
+ packetHeader = *buf_p++;
+ packetSize = 1 + ( packetHeader & 0x7f );
+ if ( packetHeader & 0x80 ) { // run-length packet
+ switch ( targa_header.pixel_size ) {
+ case 24:
+ blue = *buf_p++;
+ green = *buf_p++;
+ red = *buf_p++;
+ alphabyte = 255;
+ break;
+ case 32:
+ blue = *buf_p++;
+ green = *buf_p++;
+ red = *buf_p++;
+ alphabyte = *buf_p++;
+ break;
+ default:
+ //Error("LoadTGA: illegal pixel_size '%d' in file '%s'\n", targa_header.pixel_size, name );
+ break;
+ }
+
+ for ( j = 0; j < packetSize; j++ ) {
+ *pixbuf++ = red;
+ *pixbuf++ = green;
+ *pixbuf++ = blue;
+ *pixbuf++ = alphabyte;
+ column++;
+ if ( column == columns ) { // run spans across rows
+ column = 0;
+ if ( row > 0 ) {
+ row--;
+ }
+ else{
+ goto breakOut;
+ }
+ pixbuf = targa_rgba + row * columns * 4;
+ }
+ }
+ }
+ else { // non run-length packet
+ for ( j = 0; j < packetSize; j++ ) {
+ switch ( targa_header.pixel_size ) {
+ case 24:
+ blue = *buf_p++;
+ green = *buf_p++;
+ red = *buf_p++;
+ *pixbuf++ = red;
+ *pixbuf++ = green;
+ *pixbuf++ = blue;
+ *pixbuf++ = 255;
+ break;
+ case 32:
+ blue = *buf_p++;
+ green = *buf_p++;
+ red = *buf_p++;
+ alphabyte = *buf_p++;
+ *pixbuf++ = red;
+ *pixbuf++ = green;
+ *pixbuf++ = blue;
+ *pixbuf++ = alphabyte;
+ break;
+ default:
+ //Sysprintf("LoadTGA: illegal pixel_size '%d' in file '%s'\n", targa_header.pixel_size, name );
+ break;
+ }
+ column++;
+ if ( column == columns ) { // pixel packet run spans across rows
+ column = 0;
+ if ( row > 0 ) {
+ row--;
+ }
+ else{
+ goto breakOut;
+ }
+ pixbuf = targa_rgba + row * columns * 4;
+ }
+ }
+ }
+ }
+breakOut:;
+ }
+ }
+
+ /* fix vertically flipped image */
+ if ( ( targa_header.attributes & ( 1 << 5 ) ) ) {
+ int flip;
+ for ( row = 0; row < .5f * rows; row++ )
+ {
+ for ( column = 0; column < columns; column++ )
+ {
+ flip = *( (int*)targa_rgba + row * columns + column );
+ *( (int*)targa_rgba + row * columns + column ) = *( (int*)targa_rgba + ( ( rows - 1 ) - row ) * columns + column );
+ *( (int*)targa_rgba + ( ( rows - 1 ) - row ) * columns + column ) = flip;
+ }
+ }
+ }
+}
+
+
+
+/*
+ _terrain_canload()
+ validates a picoterrain file
+ */
+
+static int _terrain_canload( PM_PARAMS_CANLOAD ) {
+ picoParser_t *p;
+
+
+ /* keep the friggin compiler happy */
+ *fileName = *fileName;
+
+ /* create pico parser */
+ p = _pico_new_parser( (picoByte_t*) buffer, bufSize );
+ if ( p == NULL ) {
+ return PICO_PMV_ERROR_MEMORY;
+ }
+
+ /* get first token */
+ if ( _pico_parse_first( p ) == NULL ) {
+ return PICO_PMV_ERROR_IDENT;
+ }
+
+ /* check first token */
+ if ( _pico_stricmp( p->token, "picoterrain" ) ) {
+ _pico_free_parser( p );
+ return PICO_PMV_ERROR_IDENT;
+ }
+
+ /* free the pico parser object */
+ _pico_free_parser( p );
+
+ /* file seems to be a valid picoterrain file */
+ return PICO_PMV_OK;
+}
+
+
+
+/*
+ _terrain_load()
+ loads a picoterrain file
+ */
+
+static picoModel_t *_terrain_load( PM_PARAMS_LOAD ) {
+ int i, j, v, pw[ 5 ], r;
+ picoParser_t *p;
+
+ char *shader, *heightmapFile, *colormapFile;
+ picoVec3_t scale, origin;
+
+ unsigned char *imageBuffer;
+ int imageBufSize, w, h, cw, ch;
+ unsigned char *heightmap, *colormap, *heightPixel, *colorPixel;
+
+ picoModel_t *picoModel;
+ picoSurface_t *picoSurface;
+ picoShader_t *picoShader;
+ picoVec3_t xyz, normal;
+ picoVec2_t st;
+ picoColor_t color;
+
+
+ /* keep the friggin compiler happy */
+ *fileName = *fileName;
+
+ /* create pico parser */
+ p = _pico_new_parser( (picoByte_t*) buffer, bufSize );
+ if ( p == NULL ) {
+ return NULL;
+ }
+
+ /* get first token */
+ if ( _pico_parse_first( p ) == NULL ) {
+ return NULL;
+ }
+
+ /* check first token */
+ if ( _pico_stricmp( p->token, "picoterrain" ) ) {
+ _pico_printf( PICO_ERROR, "Invalid PicoTerrain model" );
+ _pico_free_parser( p );
+ return NULL;
+ }
+
+ /* setup */
+ shader = heightmapFile = colormapFile = NULL;
+ _pico_set_vec( scale, 512, 512, 32 );
+
+ /* parse ase model file */
+ while ( 1 )
+ {
+ /* get first token on line */
+ if ( !_pico_parse_first( p ) ) {
+ break;
+ }
+
+ /* skip empty lines */
+ if ( !p->token || !p->token[ 0 ] ) {
+ continue;
+ }
+
+ /* shader */
+ if ( !_pico_stricmp( p->token, "shader" ) ) {
+ if ( _pico_parse( p, 0 ) && p->token[ 0 ] ) {
+ if ( shader != NULL ) {
+ _pico_free( shader );
+ }
+ shader = _pico_clone_alloc( p->token );
+ }
+ }
+
+ /* heightmap */
+ else if ( !_pico_stricmp( p->token, "heightmap" ) ) {
+ if ( _pico_parse( p, 0 ) && p->token[ 0 ] ) {
+ if ( heightmapFile != NULL ) {
+ _pico_free( heightmapFile );
+ }
+ heightmapFile = _pico_clone_alloc( p->token );
+ }
+ }
+
+ /* colormap */
+ else if ( !_pico_stricmp( p->token, "colormap" ) ) {
+ if ( _pico_parse( p, 0 ) && p->token[ 0 ] ) {
+ if ( colormapFile != NULL ) {
+ _pico_free( colormapFile );
+ }
+ colormapFile = _pico_clone_alloc( p->token );
+ }
+ }
+
+ /* scale */
+ else if ( !_pico_stricmp( p->token, "scale" ) ) {
+ _pico_parse_vec( p, scale );
+ }
+
+ /* skip unparsed rest of line and continue */
+ _pico_parse_skip_rest( p );
+ }
+
+ /* ----------------------------------------------------------------- */
+
+ /* load heightmap */
+ heightmap = imageBuffer = NULL;
+ _pico_load_file( heightmapFile, &imageBuffer, &imageBufSize );
+ _terrain_load_tga_buffer( imageBuffer, &heightmap, &w, &h );
+ _pico_free( heightmapFile );
+ _pico_free_file( imageBuffer );
+
+ if ( heightmap == NULL || w < 2 || h < 2 ) {
+ _pico_printf( PICO_ERROR, "PicoTerrain model with invalid heightmap" );
+ if ( shader != NULL ) {
+ _pico_free( shader );
+ }
+ if ( colormapFile != NULL ) {
+ _pico_free( colormapFile );
+ }
+ _pico_free_parser( p );
+ return NULL;
+ }
+
+ /* set origin (bottom lowest corner of terrain mesh) */
+ _pico_set_vec( origin, ( w / -2 ) * scale[ 0 ], ( h / -2 ) * scale[ 1 ], -128 * scale[ 2 ] );
+
+ /* load colormap */
+ colormap = imageBuffer = NULL;
+ _pico_load_file( colormapFile, &imageBuffer, &imageBufSize );
+ _terrain_load_tga_buffer( imageBuffer, &colormap, &cw, &ch );
+ _pico_free( colormapFile );
+ _pico_free_file( imageBuffer );
+
+ if ( cw != w || ch != h ) {
+ _pico_printf( PICO_WARNING, "PicoTerrain colormap/heightmap size mismatch" );
+ _pico_free( colormap );
+ colormap = NULL;
+ }
+
+ /* ----------------------------------------------------------------- */
+
+ /* create new pico model */
+ picoModel = PicoNewModel();
+ if ( picoModel == NULL ) {
+ _pico_printf( PICO_ERROR, "Unable to allocate a new model" );
+ return NULL;
+ }
+
+ /* do model setup */
+ PicoSetModelFrameNum( picoModel, frameNum );
+ PicoSetModelNumFrames( picoModel, 1 ); /* sea */
+ PicoSetModelName( picoModel, fileName );
+ PicoSetModelFileName( picoModel, fileName );
+
+ /* allocate new pico surface */
+ picoSurface = PicoNewSurface( picoModel );
+ if ( picoSurface == NULL ) {
+ _pico_printf( PICO_ERROR, "Unable to allocate a new model surface" );
+ PicoFreeModel( picoModel ); /* sea */
+ return NULL;
+ }
+
+ /* terrain surfaces are triangle meshes */
+ PicoSetSurfaceType( picoSurface, PICO_TRIANGLES );
+
+ /* set surface name */
+ PicoSetSurfaceName( picoSurface, "picoterrain" );
+
+ /* create new pico shader */
+ picoShader = PicoNewShader( picoModel );
+ if ( picoShader == NULL ) {
+ _pico_printf( PICO_ERROR, "Unable to allocate a new model shader" );
+ PicoFreeModel( picoModel );
+ _pico_free( shader );
+ return NULL;
+ }
+
+ /* detox and set shader name */
+ _pico_setfext( shader, "" );
+ _pico_unixify( shader );
+ PicoSetShaderName( picoShader, shader );
+ _pico_free( shader );
+
+ /* associate current surface with newly created shader */
+ PicoSetSurfaceShader( picoSurface, picoShader );
+
+ /* make bogus normal */
+ _pico_set_vec( normal, 0.0f, 0.0f, 0.0f );
+
+ /* create mesh */
+ for ( j = 0; j < h; j++ )
+ {
+ for ( i = 0; i < w; i++ )
+ {
+ /* get pointers */
+ v = i + ( j * w );
+ heightPixel = heightmap + v * 4;
+ colorPixel = colormap
+ ? colormap + v * 4
+ : NULL;
+
+ /* set xyz */
+ _pico_set_vec( xyz, origin[ 0 ] + scale[ 0 ] * i,
+ origin[ 1 ] + scale[ 1 ] * j,
+ origin[ 2 ] + scale[ 2 ] * heightPixel[ 0 ] );
+ PicoSetSurfaceXYZ( picoSurface, v, xyz );
+
+ /* set normal */
+ PicoSetSurfaceNormal( picoSurface, v, normal );
+
+ /* set st */
+ st[ 0 ] = (float) i;
+ st[ 1 ] = (float) j;
+ PicoSetSurfaceST( picoSurface, 0, v, st );
+
+ /* set color */
+ if ( colorPixel != NULL ) {
+ _pico_set_color( color, colorPixel[ 0 ], colorPixel[ 1 ], colorPixel[ 2 ], colorPixel[ 3 ] );
+ }
+ else{
+ _pico_set_color( color, 255, 255, 255, 255 );
+ }
+ PicoSetSurfaceColor( picoSurface, 0, v, color );
+
+ /* set triangles (zero alpha in heightmap suppresses this quad) */
+ if ( i < ( w - 1 ) && j < ( h - 1 ) && heightPixel[ 3 ] >= 128 ) {
+ /* set indexes */
+ pw[ 0 ] = i + ( j * w );
+ pw[ 1 ] = i + ( ( j + 1 ) * w );
+ pw[ 2 ] = i + 1 + ( ( j + 1 ) * w );
+ pw[ 3 ] = i + 1 + ( j * w );
+ pw[ 4 ] = i + ( j * w ); /* same as pw[ 0 ] */
+
+ /* set radix */
+ r = ( i + j ) & 1;
+
+ /* make first triangle */
+ PicoSetSurfaceIndex( picoSurface, ( v * 6 + 0 ), (picoIndex_t) pw[ r + 0 ] );
+ PicoSetSurfaceIndex( picoSurface, ( v * 6 + 1 ), (picoIndex_t) pw[ r + 1 ] );
+ PicoSetSurfaceIndex( picoSurface, ( v * 6 + 2 ), (picoIndex_t) pw[ r + 2 ] );
+
+ /* make second triangle */
+ PicoSetSurfaceIndex( picoSurface, ( v * 6 + 3 ), (picoIndex_t) pw[ r + 0 ] );
+ PicoSetSurfaceIndex( picoSurface, ( v * 6 + 4 ), (picoIndex_t) pw[ r + 2 ] );
+ PicoSetSurfaceIndex( picoSurface, ( v * 6 + 5 ), (picoIndex_t) pw[ r + 3 ] );
+ }
+ }
+ }
+
+ /* free stuff */
+ _pico_free_parser( p );
+ _pico_free( heightmap );
+ _pico_free( colormap );
+
+ /* return the new pico model */
+ return picoModel;
+}
+
+
+
+/* pico file format module definition */
+const picoModule_t picoModuleTerrain =
+{
+ "1.3", /* module version string */
+ "PicoTerrain", /* module display name */
+ "Randy Reddig", /* author's name */
+ "2003 Randy Reddig", /* module copyright */
+ {
+ "picoterrain", NULL, NULL, NULL /* default extensions to use */
+ },
+ _terrain_canload, /* validation routine */
+ _terrain_load, /* load routine */
+ NULL, /* save validation routine */
+ NULL /* save routine */
+};
diff --git a/libs/splines/splines.vcxproj b/libs/splines/splines.vcxproj
index 3460017c..94e0e7e8 100644
--- a/libs/splines/splines.vcxproj
+++ b/libs/splines/splines.vcxproj
@@ -38,7 +38,7 @@
StaticLibrary
- v110_xp
+ v140
diff --git a/libs/synapse.h b/libs/synapse.h
index 4f7e9aab..1c1f93b7 100644
--- a/libs/synapse.h
+++ b/libs/synapse.h
@@ -91,7 +91,7 @@
/*!
=======================================================================
diagnostic printing facility
- independently from any API negociation stuff,
+ independently from any API negotiation stuff,
we need a diagnostic facility that's available at all times
=======================================================================
*/
@@ -219,7 +219,7 @@ void SetType( EAPIManagerType type ) { mType = type; }
set the API matching pattern
supported syntax:
any minor for a given major, for instance: PLUGIN_MAJOR, "*"
- a space seperated list of minors for a given major: IMAGE_MAJOR, "tga jpg"
+ a space separated list of minors for a given major: IMAGE_MAJOR, "tga jpg"
*/
void SetMatchAPI( const char *major, const char *minor );
@@ -236,8 +236,8 @@ static APIDescriptor_t* PrepareRequireAPI( APIDescriptor_t *pAPI );
bool CheckSetActive();
/*!
- the manager answers wether it wants to load this or not
- we provide a default implementation, but this can be completely overriden if needed
+ the manager answers whether it wants to load this or not
+ we provide a default implementation, but this can be completely overridden if needed
see SetMatchAPI for the documentation of the default implementation
NOTE: this should only be called on API_MATCH type of managers
*/
@@ -279,8 +279,8 @@ class CSynapseServer; // forward declare
class CSynapseClient : public IRefCounted
{
/*!
- this flag indicates wether this client is active
- i.e. wether you can ask it for interfaces
+ this flag indicates whether this client is active
+ i.e. whether you can ask it for interfaces
this is either a client for which all required interfaces have been filled in
or a client we are trying to resolve (i.e. load with all it's stuff)
*/
@@ -324,7 +324,7 @@ APIDescriptor_t* GetAPIDescriptor( int ) const; ///< retrieve specific informati
SYN_PROVIDE: means this is an API we provide if anyone needs it
SYN_REQUIRE: means this is an API we will require for operation
SYN_REQUIRE_ANY: means this is an API we want to load *any* minor found
- (for instance a list of image fornats, or the plugins)
+ (for instance a list of image formats, or the plugins)
\param pTable
the function table
@@ -363,7 +363,7 @@ CSynapseAPIManager* GetManagerList( int ); ///< get corresponding API manager
virtual bool RequestAPI( APIDescriptor_t *pAPI ) = 0;
/*!
- return the build date, can be overriden by client module
+ return the build date, can be overridden by client module
*/
virtual const char* GetInfo();
@@ -405,7 +405,7 @@ virtual bool OnActivate() { return true; }
\param client_name, the name of the client node to look for. If NULL, use GetName()
- \return wether all APIs given were successfully found in the config
+ \return whether all APIs given were successfully found in the config
*/
bool ConfigXML( CSynapseServer *pServer, const char *client_name, const XMLConfigEntry_t entries[] );
@@ -451,7 +451,7 @@ typedef enum { SYN_SO, SYN_BUILTIN } EClientType;
/*!
server side slot for a synapse client
- is OS dependant, except for the ISynapseClient part
+ is OS dependent, except for the ISynapseClient part
*/
class CSynapseClientSlot
{
@@ -517,7 +517,7 @@ gchar *m_content;
/*!
push required interfaces for this client into the stack of things to be resolved
- it is possible that several mathing interfaces be in the stack at the same time
+ it is possible that several matching interfaces be in the stack at the same time
(for instance several modules that want to get the VFS)
but we should never have the same APIDescriptor_t twice
NOTE: as this function is called repeatedly during the resolve (because the list of required things is refining),
@@ -567,8 +567,8 @@ void AddSearchPath( char* ); ///< add a new directory to the module search path
/*!
do the big thing, scan for modules, scan their APIs, load up everything
providing pf is optional, will set the diagnostics printing
- \param conf_file is the XML configuration file for the intialization (see docs/runtime.txt)
- \return false if the init failed (for instance not found/invalid conf file
+ \param conf_file is the XML configuration file for the initialization (see docs/runtime.txt)
+ \return false if the init failed (for instance not found/invalid configuration file
*/
bool Initialize( const char* conf_file = NULL, PFN_SYN_PRINTF_VA pf = NULL );
@@ -593,8 +593,8 @@ bool Resolve( CSynapseClient *pClient );
/*!
\brief shutdown all the clients. Should only be called when the core is about to exit
- this will force all clients to shutdown. it may destroy refcounted APIs and stuff
- \todo hafta use the release/refresh code before doing actual shutdown
+ this will force all clients to shutdown. it may destroy refcounted APIs and such
+ \todo have to use the release/refresh code before doing actual shutdown
(i.e. when that code is written later on)
we need to 'broadcast' to all the clients .. that all the modules are going to be reloaded sorta
should clear up as many interfaces as possible to avoid unexpected crashes in the final stages of app exit
diff --git a/libs/synapse/synapse.vcxproj b/libs/synapse/synapse.vcxproj
index 6e0e6a16..c3dd5d1d 100644
--- a/libs/synapse/synapse.vcxproj
+++ b/libs/synapse/synapse.vcxproj
@@ -38,7 +38,7 @@
StaticLibrary
- v110_xp
+ v140
@@ -123,6 +123,9 @@
+
+
+
diff --git a/libs/synapse/synapse.vcxproj.filters b/libs/synapse/synapse.vcxproj.filters
index 06d28361..0843c886 100644
--- a/libs/synapse/synapse.vcxproj.filters
+++ b/libs/synapse/synapse.vcxproj.filters
@@ -11,4 +11,9 @@
src
+
+
+ src
+
+
\ No newline at end of file
diff --git a/plugins/eclassfgd/fgd.vcxproj b/plugins/eclassfgd/fgd.vcxproj
index f89905cf..e4e0e257 100644
--- a/plugins/eclassfgd/fgd.vcxproj
+++ b/plugins/eclassfgd/fgd.vcxproj
@@ -38,7 +38,7 @@
DynamicLibrary
- v110_xp
+ v140
diff --git a/plugins/eclassfgd/plugin.cpp b/plugins/eclassfgd/plugin.cpp
index baff99ce..13089949 100644
--- a/plugins/eclassfgd/plugin.cpp
+++ b/plugins/eclassfgd/plugin.cpp
@@ -402,12 +402,12 @@ void EClass_ImportFromClass( eclass_t *e, GSList *l_classes, class_t *bc ){
// make sure we don't request ourself!
if ( rbc == bc ) {
- Sys_Printf( "WARNING: baseclass '%s' tried to request itself!\n", bclst->data );
+ Sys_FPrintf( SYS_WRN, "WARNING: baseclass '%s' tried to request itself!\n", bclst->data );
}
else
{
if ( !rbc ) {
- Sys_Printf( "WARNING: could not find the requested baseclass '%s' when building '%s'\n", requestedclass,bc->classname );
+ Sys_FPrintf( SYS_WRN, "WARNING: could not find the requested baseclass '%s' when building '%s'\n", requestedclass,bc->classname );
}
else
{
@@ -494,7 +494,7 @@ void EClass_ImportFromClass( eclass_t *e, GSList *l_classes, class_t *bc ){
}
else
{
- Sys_Printf( "WARNING: baseclass '%s' has a spawnflag out of range, ignored!\n", bc->classname );
+ Sys_FPrintf( SYS_WRN, "WARNING: baseclass '%s' has a spawnflag out of range, ignored!\n", bc->classname );
}
}
break;
@@ -1015,7 +1015,7 @@ void Eclass_ScanFile( char *filename ){
}
else
{
- Sys_Printf( "%WARNING: Parse error occured in '%s - %s'\n",classnames[newclass->classtype],newclass->classname );
+ Sys_FPrintf( SYS_WRN, "WARNING: Parse error occured in '%s - %s'\n",classnames[newclass->classtype],newclass->classname );
Free_Option( newoption );
}
diff --git a/plugins/entity/eclassmodel.cpp b/plugins/entity/eclassmodel.cpp
index 28670a03..163ffe47 100644
--- a/plugins/entity/eclassmodel.cpp
+++ b/plugins/entity/eclassmodel.cpp
@@ -152,7 +152,7 @@ void CEntityEclassModel::UpdateCachedData(){
m4x4_pivoted_transform_by_vec3( m_transform, m_translate, m_euler, eXYZ, m_scale, m_pivot );
memcpy( m_inverse_transform, m_transform, sizeof( m4x4_t ) );
if ( m4x4_invert( m_inverse_transform ) == 1 ) {
- Sys_Printf( "ERROR: Singular Matrix, cannot invert" );
+ Sys_FPrintf( SYS_ERR, "ERROR: Singular Matrix, cannot invert" );
}
if ( m_eclass ) {
diff --git a/plugins/entity/entity.cpp b/plugins/entity/entity.cpp
index 35c836fd..7f8df9a7 100644
--- a/plugins/entity/entity.cpp
+++ b/plugins/entity/entity.cpp
@@ -326,7 +326,7 @@ epair_t** Entity_GetKeyValList( entity_t *e ){
void Entity_SetKeyValList( entity_t *e, epair_t* ep ){
if ( e->epairs ) {
- Sys_Printf( "Warning : pe->epairs != NULL in Entity_SetKeyValList, will not set\n" );
+ Sys_FPrintf( SYS_WRN, "Warning : pe->epairs != NULL in Entity_SetKeyValList, will not set\n" );
}
else {
e->epairs = ep;
diff --git a/plugins/entity/entity.vcxproj b/plugins/entity/entity.vcxproj
index 7539ca9d..3b95abe3 100644
--- a/plugins/entity/entity.vcxproj
+++ b/plugins/entity/entity.vcxproj
@@ -38,7 +38,7 @@
DynamicLibrary
- v110_xp
+ v140
diff --git a/plugins/entity/entity_entitymodel.h b/plugins/entity/entity_entitymodel.h
index f523630b..3a4aad31 100644
--- a/plugins/entity/entity_entitymodel.h
+++ b/plugins/entity/entity_entitymodel.h
@@ -27,129 +27,129 @@
/*! simulates misc_model entity behaviours for rendering/selection/editing */
class CEntityMiscModel : public IRender, public ISelect, public IEdit
{
-public:
-CEntityMiscModel ( entity_t *e );
-virtual ~CEntityMiscModel ();
+ public:
+ CEntityMiscModel( entity_t *e );
+ virtual ~CEntityMiscModel ();
-void IncRef() { refCount++; }
-void DecRef() {
- if ( --refCount == 0 ) {
- delete this;
+ void IncRef() { refCount++; }
+ void DecRef() {
+ if ( --refCount == 0 ) {
+ delete this;
+ }
}
-}
-// IRender
-void Draw( int state, int rflags ) const;
-const aabb_t *GetAABB() const { return &m_BBox; }
+ // IRender
+ void Draw( int state, int rflags ) const;
+ const aabb_t *GetAABB() const { return &m_BBox; }
-// ISelect
-bool TestRay( const ray_t *ray, vec_t *dist ) const;
-//bool TestBox(const aabb_t aabb) const;
+ // ISelect
+ bool TestRay( const ray_t *ray, vec_t *dist ) const;
+ //bool TestBox(const aabb_t aabb) const;
-// ITransform
-void Translate( const vec3_t translation );
-void Rotate( const vec3_t pivot, const vec3_t rotation );
-const vec_t *GetTranslation() const { return m_translate; }
-const vec_t *GetRotation() const { return m_euler; }
-void OnKeyValueChanged( entity_t *e, const char *key, const char* value );
+ // ITransform
+ void Translate( const vec3_t translation );
+ void Rotate( const vec3_t pivot, const vec3_t rotation );
+ const vec_t *GetTranslation() const { return m_translate; }
+ const vec_t *GetRotation() const { return m_euler; }
+ void OnKeyValueChanged( entity_t *e, const char *key, const char* value );
-void SetName( const char *name );
-private:
-void BuildCacheRequestString( const char *name );
-/*! updates the AABB and transformation matrix */
-void UpdateCachedData();
-entity_interfaces_t *m_model;
+ void SetName( const char *name );
+ private:
+ void BuildCacheRequestString( const char *name );
+ /*! updates the AABB and transformation matrix */
+ void UpdateCachedData();
+ entity_interfaces_t *m_model;
-entity_t *m_entity;
+ entity_t *m_entity;
-int refCount;
-string_t m_version;
+ int refCount;
+ string_t m_version;
-Str m_cachereq;
+ Str m_cachereq;
-/*! AABB in local space */
-aabb_t m_BBox;
+ /*! AABB in local space */
+ aabb_t m_BBox;
-/*! worldspace-to-localspace translation */
-vec3_t m_translate;
+ /*! worldspace-to-localspace translation */
+ vec3_t m_translate;
-/*! worldspace-to-localspace euler rotation angles */
-vec3_t m_euler;
+ /*! worldspace-to-localspace euler rotation angles */
+ vec3_t m_euler;
-/*! worldspace-to-localspace scale */
-vec3_t m_scale;
+ /*! worldspace-to-localspace scale */
+ vec3_t m_scale;
-/*! localspace origin, effectively rotation & scale pivot point */
-vec3_t m_pivot;
+ /*! localspace origin, effectively rotation & scale pivot point */
+ vec3_t m_pivot;
-/*! worldspace-to-localspace transform, generated from translate/euler/scale/pivot */
-m4x4_t m_transform;
+ /*! worldspace-to-localspace transform, generated from translate/euler/scale/pivot */
+ m4x4_t m_transform;
-/*! localspace-to-worldspace transform */
-m4x4_t m_inverse_transform;
+ /*! localspace-to-worldspace transform */
+ m4x4_t m_inverse_transform;
};
/*! simulates eclass-model entity behaviours for rendering/selection/editing */
class CEntityEclassModel : public IRender, public ISelect, public IEdit
{
-public:
-CEntityEclassModel ();
-virtual ~CEntityEclassModel ();
+ public:
+ CEntityEclassModel();
+ virtual ~CEntityEclassModel();
-void IncRef() { refCount++; }
-void DecRef() {
- if ( --refCount == 0 ) {
- delete this;
+ void IncRef() { refCount++; }
+ void DecRef() {
+ if ( --refCount == 0 ) {
+ delete this;
+ }
}
-}
-// IRender
-void Draw( int state, int rflags ) const;
-const aabb_t *GetAABB() const { return &m_BBox; }
+ // IRender
+ void Draw( int state, int rflags ) const;
+ const aabb_t *GetAABB() const { return &m_BBox; }
-// ISelect
-bool TestRay( const ray_t *ray, vec_t *dist ) const;
-//bool TestBox(const aabb_t aabb) const;
+ // ISelect
+ bool TestRay( const ray_t *ray, vec_t *dist ) const;
+ //bool TestBox(const aabb_t aabb) const;
-// ITransform
-void Translate( const vec3_t translation );
-void Rotate( const vec3_t pivot, const vec3_t rotation );
-const vec_t *GetTranslation() const { return m_translate; }
-const vec_t *GetRotation() const { return m_euler; }
-void OnKeyValueChanged( entity_t *e, const char *key, const char* value );
+ // ITransform
+ void Translate( const vec3_t translation );
+ void Rotate( const vec3_t pivot, const vec3_t rotation );
+ const vec_t *GetTranslation() const { return m_translate; }
+ const vec_t *GetRotation() const { return m_euler; }
+ void OnKeyValueChanged( entity_t *e, const char *key, const char* value );
-void SetName( const char *name );
-void SetEclass( const eclass_t* eclass );
-private:
-/*! updates the AABB and transformation matrix */
-void UpdateCachedData();
-entity_interfaces_t *m_model;
+ void SetName( const char *name );
+ void SetEclass( const eclass_t* eclass );
+ private:
+ /*! updates the AABB and transformation matrix */
+ void UpdateCachedData();
+ entity_interfaces_t *m_model;
-int refCount;
-string_t m_name;
-string_t m_version;
-const eclass_t *m_eclass;
+ int refCount;
+ string_t m_name;
+ string_t m_version;
+ const eclass_t *m_eclass;
-/*! AABB in local space */
-aabb_t m_BBox;
+ /*! AABB in local space */
+ aabb_t m_BBox;
-/*! worldspace-to-localspace translation */
-vec3_t m_translate;
+ /*! worldspace-to-localspace translation */
+ vec3_t m_translate;
-/*! worldspace-to-localspace euler rotation angles */
-vec3_t m_euler;
+ /*! worldspace-to-localspace euler rotation angles */
+ vec3_t m_euler;
-/*! worldspace-to-localspace scale */
-vec3_t m_scale;
+ /*! worldspace-to-localspace scale */
+ vec3_t m_scale;
-/*! localspace origin, effectively rotation & scale pivot point */
-vec3_t m_pivot;
+ /*! localspace origin, effectively rotation & scale pivot point */
+ vec3_t m_pivot;
-/*! worldspace-to-localspace transform, generated from translate/euler/scale/pivot */
-m4x4_t m_transform;
+ /*! worldspace-to-localspace transform, generated from translate/euler/scale/pivot */
+ m4x4_t m_transform;
-/*! localspace-to-worldspace transform */
-m4x4_t m_inverse_transform;
+ /*! localspace-to-worldspace transform */
+ m4x4_t m_inverse_transform;
};
void pivot_draw( const vec3_t pivot );
diff --git a/plugins/entity/miscmodel.cpp b/plugins/entity/miscmodel.cpp
index 301bc4eb..79e864f2 100644
--- a/plugins/entity/miscmodel.cpp
+++ b/plugins/entity/miscmodel.cpp
@@ -20,6 +20,7 @@
*/
#include
+#include
#include "entity_entitymodel.h"
#include "entity.h"
@@ -62,7 +63,7 @@ void CEntityMiscModel::Draw( int state, int rflags ) const {
// draw children
if ( m_model && m_model->pRender ) {
- m_model->pRender->Draw( state, rflags );
+ m_model->pRender->Draw(state, rflags);
}
g_QglTable.m_pfn_qglPopMatrix();
@@ -201,9 +202,11 @@ void CEntityMiscModel::SetName( const char *name ){
return;
}
- if ( m_cachereq.GetBuffer()[0] != ':'
+ if ( m_oldcachereq.GetBuffer()[0] != ':'
&& m_version.c_str()[0] != '\0' ) {
- GetModelCache()->DeleteByID( m_cachereq.GetBuffer(), m_version.c_str() );
+ GetModelCache()->DeleteByID( m_oldcachereq.GetBuffer(), m_version.c_str() );
+ } else {
+ assert(m_model == NULL);
}
m_model = NULL;
diff --git a/plugins/image/image.vcxproj b/plugins/image/image.vcxproj
index e667e75e..2435b43d 100644
--- a/plugins/image/image.vcxproj
+++ b/plugins/image/image.vcxproj
@@ -38,7 +38,7 @@
DynamicLibrary
- v110_xp
+ v140
diff --git a/plugins/imagehl/imagehl.vcxproj b/plugins/imagehl/imagehl.vcxproj
index 80f3264d..8f481c0f 100644
--- a/plugins/imagehl/imagehl.vcxproj
+++ b/plugins/imagehl/imagehl.vcxproj
@@ -38,7 +38,7 @@
DynamicLibrary
- v110_xp
+ v140
diff --git a/plugins/imagehl/lbmlib.cpp b/plugins/imagehl/lbmlib.cpp
index c34c22df..0d1e207f 100644
--- a/plugins/imagehl/lbmlib.cpp
+++ b/plugins/imagehl/lbmlib.cpp
@@ -148,14 +148,14 @@ static void LoadIDSP( const char *name, byte ** pic, int *width, int *height ){
header = (dspriteheader_t *)buffer;
if ( header->ident != IDSPRITEHEADER ) {
- Sys_Printf( "WARNING: %s has wrong header\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: %s has wrong header\n" );
vfsFreeFile( buffer );
return;
}
version = header->version;
if ( version != 1 && version != 2 ) {
- Sys_Printf( "WARNING: %s has wrong version number "
+ Sys_FPrintf( SYS_WRN, "WARNING: %s has wrong version number "
"(%i should be 1 or 2)\n", name, version );
vfsFreeFile( buffer );
return;
@@ -180,7 +180,7 @@ static void LoadIDSP( const char *name, byte ** pic, int *width, int *height ){
break;
}
if ( numframes > 1 ) {
- Sys_Printf( "WARNING: %s has multiple frames, only the first frame will be used.\n", name );
+ Sys_FPrintf( SYS_WRN, "WARNING: %s has multiple frames, only the first frame will be used.\n", name );
}
// palette = buffer+mipdatasize+2;
diff --git a/plugins/imagem8/imagem8.vcxproj b/plugins/imagem8/imagem8.vcxproj
index 2d804164..57e6aba2 100644
--- a/plugins/imagem8/imagem8.vcxproj
+++ b/plugins/imagem8/imagem8.vcxproj
@@ -38,7 +38,7 @@
DynamicLibrary
- v110_xp
+ v140
diff --git a/plugins/imagepng/imagepng.vcxproj b/plugins/imagepng/imagepng.vcxproj
index e1338b65..a7a48ade 100644
--- a/plugins/imagepng/imagepng.vcxproj
+++ b/plugins/imagepng/imagepng.vcxproj
@@ -38,7 +38,7 @@
DynamicLibrary
- v110_xp
+ v140
diff --git a/plugins/imagewal/imagewal.vcxproj b/plugins/imagewal/imagewal.vcxproj
index cbba0c7d..0687fa03 100644
--- a/plugins/imagewal/imagewal.vcxproj
+++ b/plugins/imagewal/imagewal.vcxproj
@@ -38,7 +38,7 @@
DynamicLibrary
- v110_xp
+ v140
diff --git a/plugins/map/map.vcxproj b/plugins/map/map.vcxproj
index 3e0c3757..959dfe4f 100644
--- a/plugins/map/map.vcxproj
+++ b/plugins/map/map.vcxproj
@@ -38,7 +38,7 @@
DynamicLibrary
- v110_xp
+ v140
diff --git a/plugins/map/parse.cpp b/plugins/map/parse.cpp
index 01ee011c..4305979a 100644
--- a/plugins/map/parse.cpp
+++ b/plugins/map/parse.cpp
@@ -338,7 +338,7 @@ void Face_Parse( face_t *face, bool bAlternateTexdef = false ){
else
{
// using the cache below means that this message is only ever printed out once!
- Sys_Printf( "WARNING: could not find \"%s\" in any listed wad files, searching all wad files instead!\n",token );
+ Sys_FPrintf( SYS_WRN, "WARNING: could not find \"%s\" in any listed wad files, searching all wad files instead!\n",token );
}
// end of half-life specific bit.
@@ -390,7 +390,7 @@ void Face_Parse( face_t *face, bool bAlternateTexdef = false ){
}
else
{
- Sys_Printf( "WARNING: could not find \"%s\" in the vfs search path\n",token );
+ Sys_FPrintf( SYS_WRN, "WARNING: could not find \"%s\" in the vfs search path\n",token );
str = new char[strlen( token ) + 10];
strcpy( str, "textures/" );
strcpy( str + 9, token );
diff --git a/plugins/mapxml/mapxml.vcxproj b/plugins/mapxml/mapxml.vcxproj
index dc6a5e22..249e02e0 100644
--- a/plugins/mapxml/mapxml.vcxproj
+++ b/plugins/mapxml/mapxml.vcxproj
@@ -38,7 +38,7 @@
DynamicLibrary
- v110_xp
+ v140
diff --git a/plugins/model/cpicosurface.cpp b/plugins/model/cpicosurface.cpp
index 7aed8c08..2112a02d 100644
--- a/plugins/model/cpicosurface.cpp
+++ b/plugins/model/cpicosurface.cpp
@@ -38,6 +38,8 @@ CPicoSurface::CPicoSurface( picoSurface_t *pSurface ){
// directory as a fall-back. This is a hack for malformed models.
if ( m_shader->IsDefault() ) {
+ Sys_FPrintf( SYS_WRN, "WARNING: Failed to load shader %s for %s\n", m_shader->getName(), m_pSurface->model->name );
+
gchar *dir = g_path_get_dirname( m_pSurface->model->name );
gchar *skin = g_strdup_printf( "%s/skin.tga", dir );
@@ -144,7 +146,7 @@ void CPicoSurface::Draw( int state, IShader *pShader, int rflags ){
g_QglTable.m_pfn_qglEnd();*/
break;
- default: Sys_Printf( "ERROR: Unsupported Pico Surface Type: %i", PicoGetSurfaceType( m_pSurface ) );
+ default: Sys_FPrintf( SYS_ERR, "ERROR: Unsupported Pico Surface Type: %i", PicoGetSurfaceType( m_pSurface ) );
break;
}
@@ -203,7 +205,7 @@ bool CPicoSurface::TestRay( const ray_t *ray, vec_t *dist ) const {
}
break;
default:
- Sys_Printf( "ERROR: Unsupported Pico Surface Type: %i", PicoGetSurfaceType( m_pSurface ) );
+ Sys_FPrintf( SYS_ERR, "ERROR: Unsupported Pico Surface Type: %i", PicoGetSurfaceType( m_pSurface ) );
break;
}
}
diff --git a/plugins/model/miscmodel.cpp b/plugins/model/miscmodel.cpp
index a0f52a97..5c46de8c 100644
--- a/plugins/model/miscmodel.cpp
+++ b/plugins/model/miscmodel.cpp
@@ -317,7 +317,7 @@ void CEntityMiscModel::UpdateCachedData(){
m4x4_pivoted_transform_by_vec3( m_transform, m_translate, m_euler, m_scale, m_pivot );
memcpy( m_inverse_transform, m_transform, sizeof( m4x4_t ) );
if ( m4x4_invert( m_inverse_transform ) == 1 ) {
- Sys_Printf( "ERROR: Singular Matrix, cannot invert" );
+ Sys_FPrintf( SYS_ERR, "ERROR: Singular Matrix, cannot invert" );
}
aabb_clear( &aabb_temp );
diff --git a/plugins/model/model.vcxproj b/plugins/model/model.vcxproj
index 362e5a36..3cc7af53 100644
--- a/plugins/model/model.vcxproj
+++ b/plugins/model/model.vcxproj
@@ -38,7 +38,7 @@
DynamicLibrary
- v110_xp
+ v140
diff --git a/plugins/model/plugin.cpp b/plugins/model/plugin.cpp
index d5bc6e80..dd3e305e 100644
--- a/plugins/model/plugin.cpp
+++ b/plugins/model/plugin.cpp
@@ -74,7 +74,7 @@ void PicoPrintFunc( int level, const char *str ){
break;
case PICO_WARNING:
- Sys_Printf( "WARNING: %s\n", str );
+ Sys_FPrintf( SYS_WRN, "WARNING: %s\n", str );
break;
case PICO_ERROR:
@@ -82,7 +82,7 @@ void PicoPrintFunc( int level, const char *str ){
break;
case PICO_FATAL:
- Sys_Printf( "ERROR: %s\n", str );
+ Sys_FPrintf( SYS_ERR, "ERROR: %s\n", str );
break;
}
}
diff --git a/plugins/shaders/plugin.h b/plugins/shaders/plugin.h
index 0aea3e84..4ba8c8bb 100644
--- a/plugins/shaders/plugin.h
+++ b/plugins/shaders/plugin.h
@@ -53,6 +53,7 @@ extern _QERBrushTable g_BrushTable;
#define vfsLoadFile g_VFSTable.m_pfnLoadFile
#define vfsFreeFile g_VFSTable.m_pfnFreeFile
#define Sys_Printf g_FuncTable.m_pfnSysPrintf
+#define Sys_FPrintf g_FuncTable.m_pfnSysFPrintf
class CSynapseClientShaders : public CSynapseClient
{
diff --git a/plugins/shaders/shaders.cpp b/plugins/shaders/shaders.cpp
index bbe6a531..792b2ad0 100644
--- a/plugins/shaders/shaders.cpp
+++ b/plugins/shaders/shaders.cpp
@@ -188,7 +188,7 @@ void CShaderArray::operator =( const class CShaderArray & src ){
#ifdef _DEBUG
if ( CPtrArray::GetSize() != 0 ) {
- Sys_Printf( "WARNING: CShaderArray::operator = expects an empty array\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: CShaderArray::operator = expects an empty array\n" );
}
#endif
Copy( src );
@@ -239,7 +239,7 @@ char *ShaderNameLookup( patchMesh_t * patch ){
return static_cast < patchEntry_t * >( PatchShaders.GetAt( i ) )->name;
}
}
- Sys_Printf( "ERROR: failed to lookup name in ShaderNameLookup??\n" );
+ Sys_FPrintf( SYS_ERR, "ERROR: failed to lookup name in ShaderNameLookup??\n" );
return const_cast(SHADER_NOT_FOUND);
}
//++timo end clean
@@ -420,7 +420,7 @@ int WINAPI QERApp_LoadShadersFromDir( const char *path ){
// check we activated the right shader
// NOTE: if there was something else loaded, the size of g_Shaders may have changed and strange behaviours are to be expected
if ( pFoo != pShader ) {
- Sys_Printf( "WARNING: unexpected pFoo != pShader in QERApp_LoadShadersFromDir\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: unexpected pFoo != pShader in QERApp_LoadShadersFromDir\n" );
}
#else
pFoo = NULL; // leo: shut up the compiler
@@ -606,7 +606,7 @@ void WINAPI QERApp_LoadShaderFile( const char *filename ){
//++timo NOTE: this may a bit slow, we may need to use a map instead of a dumb list
if ( g_Shaders.Shader_ForName( pShader->getName() ) != NULL ) {
#ifdef _DEBUG
- Sys_Printf( "WARNING: shader %s is already in memory, definition in %s ignored.\n",
+ Sys_FPrintf( SYS_WRN, "WARNING: shader %s is already in memory, definition in %s ignored.\n",
pShader->getName(), filename );
#endif
delete pShader;
@@ -620,7 +620,7 @@ void WINAPI QERApp_LoadShaderFile( const char *filename ){
}
else
{
- Sys_Printf( "Error parsing shader %s\n", pShader->getName() );
+ Sys_FPrintf( SYS_ERR, "ERROR: parsing shader %s\n", pShader->getName() );
delete pShader;
}
}
@@ -628,7 +628,7 @@ void WINAPI QERApp_LoadShaderFile( const char *filename ){
}
else
{
- Sys_Printf( "Unable to read shaderfile %s\n", filename );
+ Sys_FPrintf( SYS_ERR, "ERROR: Unable to read shaderfile %s\n", filename );
}
}
@@ -658,7 +658,7 @@ IShader *WINAPI QERApp_CreateShader_ForTextureName( const char *name ){
// Hydra: display an error message, so the user can quickly find a list of missing
// textures by looking at the console.
if ( !pShader->Activate() ) {
- Sys_Printf( "WARNING: Activate shader failed for %s\n",pShader->getName() );
+ Sys_FPrintf( SYS_WRN, "WARNING: Activate shader failed for %s\n", pShader->getName() );
}
pShader->SetDisplayed( true );
@@ -706,7 +706,7 @@ qtexture_t *WINAPI QERApp_Try_Texture_ForName( const char *name ){
for ( q = g_qeglobals.d_qtextures; q; q = q->next )
{
if ( !strcmp( stdName, q->name ) ) {
- Sys_Printf( "ERROR: %s is not in texture map, but was found in texture list\n" );
+ Sys_FPrintf( SYS_ERR, "ERROR: %s is not in texture map, but was found in texture list\n" );
return q;
}
}
@@ -837,7 +837,7 @@ void WINAPI QERApp_ReloadShaderFile( const char *name ){
// check the shader name is a reletive path
// I hacked together a few quick tests to make sure :-)
if ( strstr( name, ":\\" ) || !strstr( name, "scripts" ) ) {
- Sys_Printf( "WARNING: is %s a reletive path to a shader file? (QERApp_ReloadShaderFile\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: is %s a reletive path to a shader file? (QERApp_ReloadShaderFile\n" );
}
#endif
diff --git a/plugins/shaders/shaders.vcxproj b/plugins/shaders/shaders.vcxproj
index 4e2e5b86..4cb93e49 100644
--- a/plugins/shaders/shaders.vcxproj
+++ b/plugins/shaders/shaders.vcxproj
@@ -38,7 +38,7 @@
DynamicLibrary
- v110_xp
+ v140
diff --git a/plugins/spritemodel/spritemodel.cpp b/plugins/spritemodel/spritemodel.cpp
index 28684133..0a2f2041 100644
--- a/plugins/spritemodel/spritemodel.cpp
+++ b/plugins/spritemodel/spritemodel.cpp
@@ -35,7 +35,7 @@ void LoadSpriteModel( entity_interfaces_t *interfaces, const char *name ){
pShader = QERApp_Shader_ForName( name );
if ( !pShader ) {
- Sys_Printf( "ERROR: can't find shader (or image) for: %s\n", name );
+ Sys_FPrintf( SYS_ERR, "ERROR: can't find shader (or image) for: %s\n", name );
return;
}
diff --git a/plugins/spritemodel/spritemodel.vcxproj b/plugins/spritemodel/spritemodel.vcxproj
index 83475552..666f2c9e 100644
--- a/plugins/spritemodel/spritemodel.vcxproj
+++ b/plugins/spritemodel/spritemodel.vcxproj
@@ -38,7 +38,7 @@
DynamicLibrary
- v110_xp
+ v140
diff --git a/plugins/surface/surface.vcxproj b/plugins/surface/surface.vcxproj
index 6b6929d1..c2bda393 100644
--- a/plugins/surface/surface.vcxproj
+++ b/plugins/surface/surface.vcxproj
@@ -38,7 +38,7 @@
DynamicLibrary
- v110_xp
+ v140
diff --git a/plugins/surface_idtech2/surface_idtech2.vcxproj b/plugins/surface_idtech2/surface_idtech2.vcxproj
index 967ab223..d51ad2c7 100644
--- a/plugins/surface_idtech2/surface_idtech2.vcxproj
+++ b/plugins/surface_idtech2/surface_idtech2.vcxproj
@@ -38,7 +38,7 @@
DynamicLibrary
- v110_xp
+ v140
diff --git a/plugins/textool/textool.vcxproj b/plugins/textool/textool.vcxproj
index 398d00f8..6c62a6a7 100644
--- a/plugins/textool/textool.vcxproj
+++ b/plugins/textool/textool.vcxproj
@@ -38,7 +38,7 @@
DynamicLibrary
- v110_xp
+ v140
diff --git a/plugins/vfspak/vfspak.vcxproj b/plugins/vfspak/vfspak.vcxproj
index c8bd74c1..06dc1182 100644
--- a/plugins/vfspak/vfspak.vcxproj
+++ b/plugins/vfspak/vfspak.vcxproj
@@ -38,7 +38,7 @@
DynamicLibrary
- v110_xp
+ v140
diff --git a/plugins/vfspk3/unzip.cpp b/plugins/vfspk3/unzip.cpp
index 7390894a..aa5c2246 100644
--- a/plugins/vfspk3/unzip.cpp
+++ b/plugins/vfspk3/unzip.cpp
@@ -1177,8 +1177,8 @@ extern const char *z_errmsg[10]; /* indexed by 2-zlib_error */
typedef uLong (*check_func) OF((uLong check, const Byte *buf, uInt len));
-voidp zcalloc OF((voidp opaque, unsigned items, unsigned size));
-void zcfree OF((voidp opaque, voidp ptr));
+static voidp zcalloc OF((voidp opaque, unsigned items, unsigned size));
+static void zcfree OF((voidp opaque, voidp ptr));
#define ZALLOC(strm, items, size) \
(*((strm)->zalloc))((strm)->opaque, (items), (size))
@@ -1618,12 +1618,12 @@ static int unzlocal_GetCurrentFileInfoInternal (unzFile file,
/* we check the magic */
- if (err==UNZ_OK)
+ if (err==UNZ_OK) {
if (unzlocal_getLong(s->file,&uMagic) != UNZ_OK)
err=UNZ_ERRNO;
else if (uMagic!=0x02014b50)
err=UNZ_BADZIPFILE;
-
+ }
if (unzlocal_getShort(s->file,&file_info.version) != UNZ_OK)
err=UNZ_ERRNO;
@@ -1698,11 +1698,12 @@ static int unzlocal_GetCurrentFileInfoInternal (unzFile file,
else
uSizeRead = extraFieldBufferSize;
- if (lSeek!=0)
+ if (lSeek!=0) {
if (fseek(s->file,lSeek,SEEK_CUR)==0)
lSeek=0;
else
err=UNZ_ERRNO;
+ }
if ((file_info.size_file_extra>0) && (extraFieldBufferSize>0))
if (fread(extraField,(uInt)uSizeRead,1,s->file)!=1)
err=UNZ_ERRNO;
@@ -1723,11 +1724,12 @@ static int unzlocal_GetCurrentFileInfoInternal (unzFile file,
else
uSizeRead = commentBufferSize;
- if (lSeek!=0)
+ if (lSeek!=0) {
if (fseek(s->file,lSeek,SEEK_CUR)==0)
lSeek=0;
else
err=UNZ_ERRNO;
+ }
if ((file_info.size_file_comment>0) && (commentBufferSize>0))
if (fread(szComment,(uInt)uSizeRead,1,s->file)!=1)
err=UNZ_ERRNO;
@@ -1889,12 +1891,12 @@ static int unzlocal_CheckCurrentFileCoherencyHeader (unz_s* s, uInt* piSizeVar,
return UNZ_ERRNO;
- if (err==UNZ_OK)
+ if (err==UNZ_OK) {
if (unzlocal_getLong(s->file,&uMagic) != UNZ_OK)
err=UNZ_ERRNO;
else if (uMagic!=0x04034b50)
err=UNZ_BADZIPFILE;
-
+ }
if (unzlocal_getShort(s->file,&uData) != UNZ_OK)
err=UNZ_ERRNO;
/*
diff --git a/plugins/vfspk3/vfspk3.vcxproj b/plugins/vfspk3/vfspk3.vcxproj
index f12e1f30..50c83f12 100644
--- a/plugins/vfspk3/vfspk3.vcxproj
+++ b/plugins/vfspk3/vfspk3.vcxproj
@@ -38,7 +38,7 @@
DynamicLibrary
- v110_xp
+ v140
diff --git a/plugins/vfsqlpk3/unzip.cpp b/plugins/vfsqlpk3/unzip.cpp
index c7ff36b7..b263c320 100644
--- a/plugins/vfsqlpk3/unzip.cpp
+++ b/plugins/vfsqlpk3/unzip.cpp
@@ -1178,8 +1178,8 @@ extern const char *z_errmsg[10]; /* indexed by 2-zlib_error */
typedef uLong (*check_func) OF((uLong check, const Byte *buf, uInt len));
-voidp zcalloc OF((voidp opaque, unsigned items, unsigned size));
-void zcfree OF((voidp opaque, voidp ptr));
+static voidp zcalloc OF((voidp opaque, unsigned items, unsigned size));
+static void zcfree OF((voidp opaque, voidp ptr));
#define ZALLOC(strm, items, size) \
(*((strm)->zalloc))((strm)->opaque, (items), (size))
@@ -1615,12 +1615,12 @@ static int unzlocal_GetCurrentFileInfoInternal (unzFile file,
/* we check the magic */
- if (err==UNZ_OK)
+ if (err==UNZ_OK) {
if (unzlocal_getLong(s->file,&uMagic) != UNZ_OK)
err=UNZ_ERRNO;
else if (uMagic!=0x02014b50)
err=UNZ_BADZIPFILE;
-
+ }
if (unzlocal_getShort(s->file,&file_info.version) != UNZ_OK)
err=UNZ_ERRNO;
@@ -1695,11 +1695,12 @@ static int unzlocal_GetCurrentFileInfoInternal (unzFile file,
else
uSizeRead = extraFieldBufferSize;
- if (lSeek!=0)
+ if (lSeek!=0) {
if (fseek(s->file,lSeek,SEEK_CUR)==0)
lSeek=0;
else
err=UNZ_ERRNO;
+ }
if ((file_info.size_file_extra>0) && (extraFieldBufferSize>0))
if (fread_ql(extraField,(uInt)uSizeRead,1,s->file)!=1)
err=UNZ_ERRNO;
@@ -1720,11 +1721,12 @@ static int unzlocal_GetCurrentFileInfoInternal (unzFile file,
else
uSizeRead = commentBufferSize;
- if (lSeek!=0)
+ if (lSeek!=0) {
if (fseek(s->file,lSeek,SEEK_CUR)==0)
lSeek=0;
else
err=UNZ_ERRNO;
+ }
if ((file_info.size_file_comment>0) && (commentBufferSize>0))
if (fread_ql(szComment,(uInt)uSizeRead,1,s->file)!=1)
err=UNZ_ERRNO;
@@ -1886,12 +1888,12 @@ static int unzlocal_CheckCurrentFileCoherencyHeader (unz_s* s, uInt* piSizeVar,
return UNZ_ERRNO;
- if (err==UNZ_OK)
+ if (err==UNZ_OK) {
if (unzlocal_getLong(s->file,&uMagic) != UNZ_OK)
err=UNZ_ERRNO;
else if (uMagic!=0x04034b50)
err=UNZ_BADZIPFILE;
-
+ }
if (unzlocal_getShort(s->file,&uData) != UNZ_OK)
err=UNZ_ERRNO;
/*
diff --git a/plugins/vfsqlpk3/vfsqlpk3.vcxproj b/plugins/vfsqlpk3/vfsqlpk3.vcxproj
index f5741e26..f00e978a 100644
--- a/plugins/vfsqlpk3/vfsqlpk3.vcxproj
+++ b/plugins/vfsqlpk3/vfsqlpk3.vcxproj
@@ -39,7 +39,7 @@
DynamicLibrary
- v110_xp
+ v140
diff --git a/plugins/vfswad/vfs.cpp b/plugins/vfswad/vfs.cpp
index e9a17be3..a378b9f2 100644
--- a/plugins/vfswad/vfs.cpp
+++ b/plugins/vfswad/vfs.cpp
@@ -119,9 +119,7 @@ int vfsBuildShortPathName( const char* pPath, char* pBuffer, int nBufferLen ){
strcpy( pBuffer, pPath ); // Use long filename
}
return nResult;
-#endif
-
-#if defined ( __linux__ ) || defined ( __APPLE__ )
+#elif defined ( __linux__ ) || defined ( __APPLE__ )
// remove /../ from directories
const char *scr = pPath; char *dst = pBuffer;
@@ -142,6 +140,8 @@ int vfsBuildShortPathName( const char* pPath, char* pBuffer, int nBufferLen ){
*dst = 0;
return strlen( pBuffer );
+#else
+#error "unsupported platform"
#endif
}
diff --git a/plugins/vfswad/vfswad.vcxproj b/plugins/vfswad/vfswad.vcxproj
index 3da486c2..f1b0ea68 100644
--- a/plugins/vfswad/vfswad.vcxproj
+++ b/plugins/vfswad/vfswad.vcxproj
@@ -38,7 +38,7 @@
DynamicLibrary
- v110_xp
+ v140
diff --git a/po/de.po b/po/de.po
index f61ce8ff..4cab9d63 100644
--- a/po/de.po
+++ b/po/de.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Zeroradiant\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2008-07-05 09:00+0100\n"
-"Last-Translator: Martin Gerhardy \n"
+"PO-Revision-Date: 2016-05-15 19:00+0100\n"
+"Last-Translator: Ettore Atalan \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
@@ -40,27 +40,27 @@ msgstr ""
#: radiant/mainframe.cpp:939
#: radiant/mainframe.cpp:934
msgid "_File"
-msgstr "Datei"
+msgstr "_Datei"
#: radiant/mainframe.cpp:943
#: radiant/mainframe.cpp:938
msgid "_New Map"
-msgstr "_Neue Map"
+msgstr "_Neue Karte"
#: radiant/mainframe.cpp:948
#: radiant/mainframe.cpp:943
msgid "_Sleep"
-msgstr ""
+msgstr "_Schlaf"
#: radiant/mainframe.cpp:954
#: radiant/mainframe.cpp:949
msgid "_Open..."
-msgstr "Öffne..."
+msgstr "_Öffnen..."
#: radiant/mainframe.cpp:957
#: radiant/mainframe.cpp:952
msgid "_Import..."
-msgstr "_Importiere..."
+msgstr "_Importieren..."
#: radiant/mainframe.cpp:959
#: radiant/mainframe.cpp:954
@@ -75,22 +75,22 @@ msgstr "Speichern _als..."
#: radiant/mainframe.cpp:964
#: radiant/mainframe.cpp:959
msgid "Save s_elected..."
-msgstr "Speicher Auswahl..."
+msgstr "Ausgewählte speichern..."
#: radiant/mainframe.cpp:967
#: radiant/mainframe.cpp:962
msgid "Save re_gion..."
-msgstr "Speichere Region..."
+msgstr "Re_gion speichern..."
#: radiant/mainframe.cpp:971
#: radiant/mainframe.cpp:966
msgid "New p_roject..."
-msgstr "Neues P_rojekt"
+msgstr "Neues P_rojekt..."
#: radiant/mainframe.cpp:973
#: radiant/mainframe.cpp:968
msgid "Load _project..."
-msgstr "Lade _Projekt"
+msgstr "_Projekt laden..."
#: radiant/mainframe.cpp:975
#: radiant/mainframe.cpp:970
@@ -100,84 +100,84 @@ msgstr "Pro_jekteinstellungen..."
#: radiant/mainframe.cpp:978
#: radiant/mainframe.cpp:973
msgid "_Pointfile..."
-msgstr ""
+msgstr "_Punktdatei..."
#: radiant/mainframe.cpp:981
#: radiant/mainframe.cpp:976
msgid "Recent Files"
-msgstr "Zuletzt verwendet"
+msgstr "Zuletzt verwendete Dateien"
#: radiant/mainframe.cpp:999
#: radiant/mainframe.cpp:994
msgid "Check for GtkRadiant update (web)"
-msgstr "Prüfe auf GtkRadiant Update (web)"
+msgstr "Auf GtkRadiant-Aktualisierung (Web) prüfen"
#: radiant/mainframe.cpp:1004
#: radiant/mainframe.cpp:999
msgid "E_xit"
-msgstr "Beenden"
+msgstr "_Beenden"
#: radiant/mainframe.cpp:1008
#: radiant/mainframe.cpp:1003
msgid "_Edit"
-msgstr "Bearbeiten"
+msgstr "B_earbeiten"
#: radiant/mainframe.cpp:1011
#: radiant/mainframe.cpp:1006
msgid "_Undo"
-msgstr "Rückgängig"
+msgstr "_Rückgängig"
#: radiant/mainframe.cpp:1014
#: radiant/mainframe.cpp:1009
msgid "_Redo"
-msgstr "Wiederholen"
+msgstr "_Wiederherstellen"
#: radiant/mainframe.cpp:1018
#: radiant/mainframe.cpp:1013
msgid "_Copy"
-msgstr "Kopieren"
+msgstr "_Kopieren"
#: radiant/mainframe.cpp:1019
#: radiant/mainframe.cpp:1014
msgid "_Paste"
-msgstr "Einfügen"
+msgstr "_Einfügen"
#: radiant/mainframe.cpp:1020
#: radiant/mainframe.cpp:1015
msgid "P_aste To Camera"
-msgstr ""
+msgstr "_Auf Kamera einfügen"
#: radiant/mainframe.cpp:1021
#: radiant/mainframe.cpp:1168
#: radiant/mainframe.cpp:1016
#: radiant/mainframe.cpp:1163
msgid "_Delete"
-msgstr "Entfernen"
+msgstr "_Löschen"
#: radiant/mainframe.cpp:1024
#: radiant/mainframe.cpp:1019
msgid "Map Info..."
-msgstr "Map Info..."
+msgstr "Karteninfo..."
#: radiant/mainframe.cpp:1025
#: radiant/mainframe.cpp:1020
msgid "Entity Info..."
-msgstr "Entity Info..."
+msgstr "Entitätsinfo..."
#: radiant/mainframe.cpp:1027
#: radiant/mainframe.cpp:1022
msgid "Brush Scripts..."
-msgstr ""
+msgstr "Pinselskripte..."
#: radiant/mainframe.cpp:1029
#: radiant/mainframe.cpp:1024
msgid "Load Pre_fab..."
-msgstr "Lade Pre_fab..."
+msgstr "_Fertigteil laden..."
#: radiant/mainframe.cpp:1030
#: radiant/mainframe.cpp:1025
msgid "Save Selection as Prefab..."
-msgstr ""
+msgstr "Auswahl als Fertigteil speichern..."
#: radiant/mainframe.cpp:1032
#: radiant/mainframe.cpp:1027
@@ -187,27 +187,27 @@ msgstr "Einstellungen..."
#: radiant/mainframe.cpp:1035
#: radiant/mainframe.cpp:1030
msgid "_View"
-msgstr "Anzeige"
+msgstr "_Ansicht"
#: radiant/mainframe.cpp:1039
#: radiant/mainframe.cpp:1034
msgid "Toggle"
-msgstr ""
+msgstr "Umschalten"
#: radiant/mainframe.cpp:1040
#: radiant/mainframe.cpp:1035
msgid "Camera View"
-msgstr ""
+msgstr "Kameraansicht"
#: radiant/mainframe.cpp:1041
#: radiant/mainframe.cpp:1036
msgid "Console View"
-msgstr ""
+msgstr "Konsolenansicht"
#: radiant/mainframe.cpp:1042
#: radiant/mainframe.cpp:1037
msgid "Entity View"
-msgstr ""
+msgstr "Entitätsansicht"
#: radiant/mainframe.cpp:1045
#: radiant/mainframe.cpp:1057
@@ -229,32 +229,32 @@ msgstr "XZ (Vorne)"
#: radiant/mainframe.cpp:1048
#: radiant/mainframe.cpp:1043
msgid "Z View"
-msgstr ""
+msgstr "Z-Ansicht"
#: radiant/mainframe.cpp:1050
#: radiant/mainframe.cpp:1045
msgid "_Center"
-msgstr ""
+msgstr "_Mitte"
#: radiant/mainframe.cpp:1051
#: radiant/mainframe.cpp:1046
msgid "_Center 2d"
-msgstr ""
+msgstr "_Mitte 2D"
#: radiant/mainframe.cpp:1052
#: radiant/mainframe.cpp:1047
msgid "_Up Floor"
-msgstr ""
+msgstr "_Oberer Boden"
#: radiant/mainframe.cpp:1053
#: radiant/mainframe.cpp:1048
msgid "_Down Floor"
-msgstr ""
+msgstr "_Unterer Boden"
#: radiant/mainframe.cpp:1055
#: radiant/mainframe.cpp:1050
msgid "_Next (XY, YZ, XY)"
-msgstr ""
+msgstr "_Weiter (XY, YZ, XY)"
#: radiant/mainframe.cpp:1056
#: radiant/preferences.cpp:1641
@@ -268,7 +268,7 @@ msgstr ""
#: radiant/preferences.cpp:2069
#: radiant/preferences.cpp:2071
msgid "Layout"
-msgstr ""
+msgstr "Anordnung"
#: radiant/mainframe.cpp:1058
#: radiant/mainframe.cpp:1053
@@ -293,12 +293,12 @@ msgstr "_XY 100%"
#: radiant/mainframe.cpp:1062
#: radiant/mainframe.cpp:1057
msgid "XY Zoom _In"
-msgstr ""
+msgstr "XY h_ineinzoomen"
#: radiant/mainframe.cpp:1063
#: radiant/mainframe.cpp:1058
msgid "XY Zoom _Out"
-msgstr ""
+msgstr "XY hinausz_oomen"
#: radiant/mainframe.cpp:1065
#: radiant/mainframe.cpp:1060
@@ -308,12 +308,12 @@ msgstr "_Z 100%"
#: radiant/mainframe.cpp:1066
#: radiant/mainframe.cpp:1061
msgid "Z Zoo_m In"
-msgstr "Z hereinzoo_men"
+msgstr "Z hineinzoo_men"
#: radiant/mainframe.cpp:1068
#: radiant/mainframe.cpp:1063
msgid "Z Zoom O_ut"
-msgstr "Z hera_uszoomen"
+msgstr "Z hinau_uszoomen"
#: radiant/mainframe.cpp:1071
#: radiant/mainframe.cpp:1066
@@ -323,52 +323,52 @@ msgstr ""
#: radiant/mainframe.cpp:1072
#: radiant/mainframe.cpp:1067
msgid "Cubic Clip Zoom Out"
-msgstr ""
+msgstr "Kubischen Ausschnitt hinauszoomen"
#: radiant/mainframe.cpp:1075
#: radiant/mainframe.cpp:1070
msgid "Show"
-msgstr "Zeige"
+msgstr "Anzeigen"
#: radiant/mainframe.cpp:1076
#: radiant/mainframe.cpp:1071
msgid "Show _Angles"
-msgstr ""
+msgstr "Winkel _anzeigen"
#: radiant/mainframe.cpp:1078
#: radiant/mainframe.cpp:1073
msgid "Show _Names"
-msgstr "Zeigen _Namen"
+msgstr "_Namen anzeigen"
#: radiant/mainframe.cpp:1080
#: radiant/mainframe.cpp:1075
msgid "Show Blocks"
-msgstr ""
+msgstr "Blöcke anzeigen"
#: radiant/mainframe.cpp:1082
#: radiant/mainframe.cpp:1077
msgid "Show C_oordinates"
-msgstr ""
+msgstr "K_oordinaten anzeigen"
#: radiant/mainframe.cpp:1084
#: radiant/mainframe.cpp:1079
msgid "Show Window Outline"
-msgstr ""
+msgstr "Fensterkontur anzeigen"
#: radiant/mainframe.cpp:1086
#: radiant/mainframe.cpp:1081
msgid "Show ZBuffered Outline"
-msgstr ""
+msgstr "ZBuffered-Kontur anzeigen"
#: radiant/mainframe.cpp:1088
#: radiant/mainframe.cpp:1083
msgid "Show Axes"
-msgstr "Zeige Achsen"
+msgstr "Achsen anzeigen"
#: radiant/mainframe.cpp:1090
#: radiant/mainframe.cpp:1085
msgid "Show Workzone"
-msgstr ""
+msgstr "Arbeitsbereich anzeigen"
#: radiant/mainframe.cpp:1093
#: radiant/mainframe.cpp:1088
@@ -384,32 +384,32 @@ msgstr "Welt"
#: radiant/gtkdlgs.cpp:1590
#: radiant/mainframe.cpp:1090
msgid "Entities"
-msgstr "Entities"
+msgstr "Entitäten"
#: radiant/mainframe.cpp:1096
#: radiant/mainframe.cpp:1091
msgid "Areaportals"
-msgstr ""
+msgstr "Areaportale"
#: radiant/mainframe.cpp:1097
#: radiant/mainframe.cpp:1092
msgid "Translucent"
-msgstr ""
+msgstr "Lichtdurchlässig"
#: radiant/mainframe.cpp:1098
#: radiant/mainframe.cpp:1093
msgid "Liquids"
-msgstr ""
+msgstr "Flüssigkeiten"
#: radiant/mainframe.cpp:1099
#: radiant/mainframe.cpp:1094
msgid "Caulk"
-msgstr ""
+msgstr "Dichtungsmasse"
#: radiant/mainframe.cpp:1100
#: radiant/mainframe.cpp:1095
msgid "Clips"
-msgstr ""
+msgstr "Ausschnitte"
#: radiant/mainframe.cpp:1101
#: radiant/preferences.cpp:1667
@@ -423,12 +423,12 @@ msgstr ""
#: radiant/preferences.cpp:2425
#: radiant/preferences.cpp:2427
msgid "Paths"
-msgstr ""
+msgstr "Pfade"
#: radiant/mainframe.cpp:1102
#: radiant/mainframe.cpp:1097
msgid "Clusterportals"
-msgstr ""
+msgstr "Clusterportale"
#: radiant/mainframe.cpp:1103
#: radiant/mainframe.cpp:1098
@@ -438,38 +438,38 @@ msgstr "Lichter"
#: radiant/mainframe.cpp:1104
#: radiant/mainframe.cpp:1099
msgid "Structural"
-msgstr ""
+msgstr "Struktur"
#: radiant/mainframe.cpp:1105
#: radiant/mainframe.cpp:1100
msgid "Lightgrid"
-msgstr ""
+msgstr "Lichtgitter"
#: radiant/mainframe.cpp:1107
#: radiant/mainframe.cpp:1102
msgid "Patches"
-msgstr ""
+msgstr "Patches"
#: radiant/mainframe.cpp:1108
#: radiant/mainframe.cpp:1103
#: radiant/patchdialog.cpp:333
msgid "Details"
-msgstr ""
+msgstr "Details"
#: radiant/mainframe.cpp:1109
#: radiant/mainframe.cpp:1104
msgid "Hints"
-msgstr ""
+msgstr "Hinweise"
#: radiant/mainframe.cpp:1110
#: radiant/mainframe.cpp:1105
msgid "Models"
-msgstr "Models"
+msgstr "Modelle"
#: radiant/mainframe.cpp:1111
#: radiant/mainframe.cpp:1106
msgid "Triggers"
-msgstr ""
+msgstr "Auslöser"
#: radiant/mainframe.cpp:1112
#: radiant/mainframe.cpp:1107
@@ -479,27 +479,27 @@ msgstr ""
#: radiant/mainframe.cpp:1115
#: radiant/mainframe.cpp:1110
msgid "Hide/Show"
-msgstr ""
+msgstr "Ausblenden/Anzeigen"
#: radiant/mainframe.cpp:1116
#: radiant/mainframe.cpp:1111
msgid "Hide Selected"
-msgstr "Verstecke Auswahl"
+msgstr "Ausgewählte ausblenden"
#: radiant/mainframe.cpp:1118
#: radiant/mainframe.cpp:1113
msgid "Show Hidden"
-msgstr "Zeige versteckte"
+msgstr "Ausgeblendete anzeigen"
#: radiant/mainframe.cpp:1121
#: radiant/mainframe.cpp:1116
msgid "Entities as"
-msgstr "Entities als"
+msgstr "Entitäten als"
#: radiant/mainframe.cpp:1123
#: radiant/mainframe.cpp:1118
msgid "Bounding box"
-msgstr ""
+msgstr "Rahmen"
#: radiant/mainframe.cpp:1126
#: radiant/mainframe.cpp:1121
@@ -509,7 +509,7 @@ msgstr "Gitternetz"
#: radiant/mainframe.cpp:1129
#: radiant/mainframe.cpp:1124
msgid "Selected Wireframe"
-msgstr ""
+msgstr "Ausgewähltes Gitternetz"
#: radiant/mainframe.cpp:1132
#: radiant/mainframe.cpp:1127
@@ -534,37 +534,37 @@ msgstr ""
#: radiant/mainframe.cpp:1146
#: radiant/mainframe.cpp:1141
msgid "OpenGL Lighting"
-msgstr ""
+msgstr "OpenGL-Beleuchtung"
#: radiant/mainframe.cpp:1151
#: radiant/mainframe.cpp:1146
msgid "_Selection"
-msgstr "Auswahl"
+msgstr "Au_swahl"
#: radiant/mainframe.cpp:1155
#: radiant/mainframe.cpp:1150
msgid "Drag"
-msgstr ""
+msgstr "Ziehen"
#: radiant/mainframe.cpp:1156
#: radiant/mainframe.cpp:1151
msgid "Drag _Edges"
-msgstr ""
+msgstr "_Kanten ziehen"
#: radiant/mainframe.cpp:1158
#: radiant/mainframe.cpp:1153
msgid "Drag _Vertices"
-msgstr ""
+msgstr "_Eckpunkte ziehen"
#: radiant/mainframe.cpp:1161
#: radiant/mainframe.cpp:1156
msgid "_Clone"
-msgstr "Klonen"
+msgstr "_Klonen"
#: radiant/mainframe.cpp:1163
#: radiant/mainframe.cpp:1158
msgid "Deselect"
-msgstr "Deselektieren"
+msgstr "Abwählen"
#: radiant/mainframe.cpp:1165
#: radiant/mainframe.cpp:1526
@@ -581,38 +581,38 @@ msgstr "Spiegeln"
#: radiant/mainframe.cpp:1173
#: radiant/mainframe.cpp:1168
msgid "Flip _X"
-msgstr "Spiegele _X"
+msgstr "_X spiegeln"
#: radiant/mainframe.cpp:1175
#: radiant/mainframe.cpp:1170
msgid "Flip _Y"
-msgstr "Spiegele _Y"
+msgstr "_Y spiegeln"
#: radiant/mainframe.cpp:1177
#: radiant/mainframe.cpp:1172
msgid "Flip _Z"
-msgstr "Spiegele _Z"
+msgstr "_Z spiegeln"
#: radiant/mainframe.cpp:1180
#: radiant/mainframe.cpp:1175
#: radiant/surfacedialog.cpp:715
msgid "Rotate"
-msgstr "Rotieren"
+msgstr "Drehen"
#: radiant/mainframe.cpp:1181
#: radiant/mainframe.cpp:1176
msgid "Rotate X"
-msgstr "Rotiere X"
+msgstr "X drehen"
#: radiant/mainframe.cpp:1183
#: radiant/mainframe.cpp:1178
msgid "Rotate Y"
-msgstr "Rotiere Y"
+msgstr "Y drehen"
#: radiant/mainframe.cpp:1185
#: radiant/mainframe.cpp:1180
msgid "Rotate Z"
-msgstr "Rotiere Z"
+msgstr "Z drehen"
#: radiant/mainframe.cpp:1187
#: radiant/mainframe.cpp:1182
@@ -642,13 +642,13 @@ msgstr "CSG subtrahieren"
#: radiant/mainframe.cpp:1196
#: radiant/mainframe.cpp:1191
msgid "CSG _Merge"
-msgstr "CSG vereinen"
+msgstr "CSG zusa_mmenführen"
#: radiant/mainframe.cpp:1199
#: radiant/gtkdlgs.cpp:1729
#: radiant/mainframe.cpp:1194
msgid "Select"
-msgstr ""
+msgstr "Auswählen"
#: radiant/mainframe.cpp:1200
#: radiant/mainframe.cpp:1195
@@ -707,12 +707,12 @@ msgstr ""
#: radiant/mainframe.cpp:1223
#: radiant/mainframe.cpp:1218
msgid "Clip selection"
-msgstr ""
+msgstr "Ausschnittauswahl"
#: radiant/mainframe.cpp:1225
#: radiant/mainframe.cpp:1220
msgid "Split selection"
-msgstr ""
+msgstr "Auswahl aufteilen"
#: radiant/mainframe.cpp:1227
#: radiant/mainframe.cpp:1222
@@ -722,22 +722,22 @@ msgstr ""
#: radiant/mainframe.cpp:1230
#: radiant/mainframe.cpp:1225
msgid "Connect entities"
-msgstr ""
+msgstr "Entitäten verbinden"
#: radiant/mainframe.cpp:1232
#: radiant/mainframe.cpp:1227
msgid "Ungroup entity"
-msgstr ""
+msgstr "Entitätengruppierung aufheben"
#: radiant/mainframe.cpp:1234
#: radiant/mainframe.cpp:1229
msgid "Make detail"
-msgstr ""
+msgstr "Detail erstellen"
#: radiant/mainframe.cpp:1236
#: radiant/mainframe.cpp:1231
msgid "Make structural"
-msgstr ""
+msgstr "Struktur erstellen"
#: radiant/mainframe.cpp:1240
#: radiant/mainframe.cpp:1235
@@ -807,7 +807,7 @@ msgstr "Gitter256"
#: radiant/mainframe.cpp:1284
#: radiant/mainframe.cpp:1279
msgid "Snap to grid"
-msgstr "Am Gitter fangen"
+msgstr "Am Gitter einrasten"
#: radiant/mainframe.cpp:1289
#: radiant/mainframe.cpp:1284
@@ -817,47 +817,47 @@ msgstr "_Texturen"
#: radiant/mainframe.cpp:1293
#: radiant/mainframe.cpp:1288
msgid "Show In _Use"
-msgstr "Zeige ben_utzte"
+msgstr "Ben_utzte anzeigen"
#: radiant/mainframe.cpp:1296
#: radiant/mainframe.cpp:1291
msgid "Show _All"
-msgstr "Zeige _alle"
+msgstr "_Alle anzeigen"
#: radiant/mainframe.cpp:1300
#: radiant/mainframe.cpp:1295
msgid "Show shaders"
-msgstr "Zeige Shader"
+msgstr "Schattierer anzeigen"
#: radiant/mainframe.cpp:1303
#: radiant/mainframe.cpp:1298
msgid "Flush & Reload Shaders"
-msgstr ""
+msgstr "Schattierer leeren & neu laden"
#: radiant/mainframe.cpp:1306
#: radiant/mainframe.cpp:1301
msgid "Load directory..."
-msgstr "Lade Verzeichnis..."
+msgstr "Verzeichnis laden..."
#: radiant/mainframe.cpp:1309
#: radiant/mainframe.cpp:1304
msgid "Directory list..."
-msgstr ""
+msgstr "Verzeichnisliste..."
#: radiant/mainframe.cpp:1313
#: radiant/mainframe.cpp:1308
msgid "_Surface Inspector"
-msgstr "_Surface Inspector"
+msgstr "Oberflächenin_spektor"
#: radiant/mainframe.cpp:1316
#: radiant/mainframe.cpp:1311
msgid "Render Quality"
-msgstr "Render Qualität"
+msgstr "Renderqualität"
#: radiant/mainframe.cpp:1318
#: radiant/mainframe.cpp:1313
msgid "_Wireframe"
-msgstr "Gitternetz"
+msgstr "_Gitternetz"
#: radiant/mainframe.cpp:1321
#: radiant/mainframe.cpp:1316
@@ -867,12 +867,12 @@ msgstr ""
#: radiant/mainframe.cpp:1324
#: radiant/mainframe.cpp:1319
msgid "_Nearest"
-msgstr ""
+msgstr "_Nächstliegende"
#: radiant/mainframe.cpp:1327
#: radiant/mainframe.cpp:1322
msgid "Nearest _Mipmap"
-msgstr ""
+msgstr "Nächstliegende _Mipmap"
#: radiant/mainframe.cpp:1330
#: radiant/mainframe.cpp:1325
@@ -887,7 +887,7 @@ msgstr "_Bilinear"
#: radiant/mainframe.cpp:1336
#: radiant/mainframe.cpp:1331
msgid "B_ilinear Mipmap"
-msgstr "B_ilinear Mipmap"
+msgstr "B_ilineare Mipmap"
#: radiant/mainframe.cpp:1339
#: radiant/mainframe.cpp:1334
@@ -903,7 +903,7 @@ msgstr "Suchen / Ersetzen..."
#: radiant/mainframe.cpp:1340
#, fuzzy
msgid "Texture Lock"
-msgstr "_Texturen"
+msgstr "Textursperre"
#: radiant/mainframe.cpp:1346
#: radiant/mainframe.cpp:1341
@@ -913,12 +913,12 @@ msgstr ""
#: radiant/mainframe.cpp:1349
#: radiant/mainframe.cpp:1344
msgid "Rotations"
-msgstr "Rotationen"
+msgstr "Drehungen"
#: radiant/mainframe.cpp:1352
#: radiant/mainframe.cpp:1347
msgid "Texture Window Scale"
-msgstr ""
+msgstr "Texturfensterskalierung"
#: radiant/mainframe.cpp:1353
#: radiant/mainframe.cpp:1348
@@ -953,7 +953,7 @@ msgstr "Nur shaderlist.txt"
#: radiant/mainframe.cpp:1377
#: radiant/mainframe.cpp:1372
msgid "_Misc"
-msgstr "Verschiedenes"
+msgstr "_Verschiedenes"
#: radiant/mainframe.cpp:1381
#: radiant/mainframe.cpp:1376
@@ -968,7 +968,7 @@ msgstr "Farben"
#: radiant/mainframe.cpp:1383
#: radiant/mainframe.cpp:1378
msgid "Themes"
-msgstr ""
+msgstr "Themen"
#: radiant/mainframe.cpp:1384
#: radiant/mainframe.cpp:1379
@@ -983,72 +983,72 @@ msgstr "Q3Radiant Original"
#: radiant/mainframe.cpp:1386
#: radiant/mainframe.cpp:1381
msgid "Black and Green"
-msgstr ""
+msgstr "Schwarz und Grün"
#: radiant/mainframe.cpp:1387
#: radiant/mainframe.cpp:1382
msgid "Maya/Max/Lightwave Emulation"
-msgstr ""
+msgstr "Maya-/Max-/Lightwave-Emulation"
#: radiant/mainframe.cpp:1390
#: radiant/mainframe.cpp:1385
msgid "_Texture Background..."
-msgstr ""
+msgstr "_Texturhintergrund..."
#: radiant/mainframe.cpp:1392
#: radiant/mainframe.cpp:1387
msgid "Grid Background..."
-msgstr "Gitter Hintergrund..."
+msgstr "Gitterhintergrund..."
#: radiant/mainframe.cpp:1394
#: radiant/mainframe.cpp:1389
msgid "Grid Major..."
-msgstr ""
+msgstr "Hauptgitter..."
#: radiant/mainframe.cpp:1396
#: radiant/mainframe.cpp:1391
msgid "Grid Minor..."
-msgstr ""
+msgstr "Nebengitter..."
#: radiant/mainframe.cpp:1398
#: radiant/mainframe.cpp:1393
msgid "Grid Major Small..."
-msgstr ""
+msgstr "Hauptgitter klein..."
#: radiant/mainframe.cpp:1400
#: radiant/mainframe.cpp:1395
msgid "Grid Minor Small..."
-msgstr ""
+msgstr "Nebengitter klein..."
#: radiant/mainframe.cpp:1402
#: radiant/mainframe.cpp:1397
msgid "Grid Text..."
-msgstr "Gitter Text..."
+msgstr "Gittertext..."
#: radiant/mainframe.cpp:1404
#: radiant/mainframe.cpp:1399
msgid "Grid Block..."
-msgstr ""
+msgstr "Gitterblock..."
#: radiant/mainframe.cpp:1406
#: radiant/mainframe.cpp:1401
msgid "Default Brush..."
-msgstr ""
+msgstr "Standardpinsel..."
#: radiant/mainframe.cpp:1408
#: radiant/mainframe.cpp:1403
msgid "Camera Background..."
-msgstr ""
+msgstr "Kamerahintergrund..."
#: radiant/mainframe.cpp:1410
#: radiant/mainframe.cpp:1405
msgid "Selected Brush..."
-msgstr "Gewählte Brush..."
+msgstr "Ausgewählter Pinsel..."
#: radiant/mainframe.cpp:1412
#: radiant/mainframe.cpp:1407
msgid "Selected Brush (Camera)..."
-msgstr ""
+msgstr "Ausgewählter Pinsel (Kamera)..."
#: radiant/mainframe.cpp:1414
#: radiant/mainframe.cpp:1409
@@ -1058,7 +1058,7 @@ msgstr ""
#: radiant/mainframe.cpp:1416
#: radiant/mainframe.cpp:1411
msgid "Active View name..."
-msgstr ""
+msgstr "Name der aktiven Ansicht..."
#: radiant/mainframe.cpp:1419
#: radiant/mainframe.cpp:1414
@@ -1068,22 +1068,22 @@ msgstr "_Gamma..."
#: radiant/mainframe.cpp:1421
#: radiant/mainframe.cpp:1416
msgid "Find brush..."
-msgstr "Finde Brush..."
+msgstr "Pinsel suchen..."
#: radiant/mainframe.cpp:1423
#: radiant/mainframe.cpp:1418
msgid "Next leak spot"
-msgstr ""
+msgstr "Nächste Leckstelle"
#: radiant/mainframe.cpp:1425
#: radiant/mainframe.cpp:1420
msgid "Previous leak spot"
-msgstr ""
+msgstr "Vorherige Leckstelle"
#: radiant/mainframe.cpp:1429
#: radiant/mainframe.cpp:1423
msgid "_Select Entity Color..."
-msgstr ""
+msgstr "Entität_sfarbe auswählen..."
#: radiant/mainframe.cpp:1434
#: radiant/mainframe.cpp:1428
@@ -1093,77 +1093,77 @@ msgstr "_Region"
#: radiant/mainframe.cpp:1438
#: radiant/mainframe.cpp:1432
msgid "_Off"
-msgstr ""
+msgstr "_Aus"
#: radiant/mainframe.cpp:1440
#: radiant/mainframe.cpp:1434
msgid "_Set XY"
-msgstr ""
+msgstr "XY fe_stlegen"
#: radiant/mainframe.cpp:1442
#: radiant/mainframe.cpp:1436
msgid "Set _Tall Brush"
-msgstr ""
+msgstr "Großen Pinsel fes_tlegen"
#: radiant/mainframe.cpp:1444
#: radiant/mainframe.cpp:1438
msgid "Set _Brush"
-msgstr ""
+msgstr "_Pinsel festlegen"
#: radiant/mainframe.cpp:1446
#: radiant/mainframe.cpp:1440
msgid "Set Se_lected Brushes"
-msgstr ""
+msgstr "Ausg_ewählte Pinsel festlegen"
#: radiant/mainframe.cpp:1450
#: radiant/mainframe.cpp:1444
msgid "_Brush"
-msgstr "_Brush"
+msgstr "_Pinsel"
#: radiant/mainframe.cpp:1454
#: radiant/mainframe.cpp:1448
msgid "3 sided"
-msgstr "3 Seiten"
+msgstr "3-seitig"
#: radiant/mainframe.cpp:1455
#: radiant/mainframe.cpp:1449
msgid "4 sided"
-msgstr "4 Seiten"
+msgstr "4-seitig"
#: radiant/mainframe.cpp:1456
#: radiant/mainframe.cpp:1450
msgid "5 sided"
-msgstr "5 Seiten"
+msgstr "5-seitig"
#: radiant/mainframe.cpp:1457
#: radiant/mainframe.cpp:1451
msgid "6 sided"
-msgstr "6 Seiten"
+msgstr "6-seitig"
#: radiant/mainframe.cpp:1458
#: radiant/mainframe.cpp:1452
msgid "7 sided"
-msgstr "7 Seiten"
+msgstr "7-seitig"
#: radiant/mainframe.cpp:1459
#: radiant/mainframe.cpp:1453
msgid "8 sided"
-msgstr "8 Seiten"
+msgstr "8-seitig"
#: radiant/mainframe.cpp:1460
#: radiant/mainframe.cpp:1454
msgid "9 sided"
-msgstr "9 Seiten"
+msgstr "9-seitig"
#: radiant/mainframe.cpp:1462
#: radiant/mainframe.cpp:1456
msgid "Arbitrary sided..."
-msgstr ""
+msgstr "Beliebigseitig..."
#: radiant/mainframe.cpp:1465
#: radiant/mainframe.cpp:1459
msgid "Primitives"
-msgstr ""
+msgstr "Primitiven"
#: radiant/mainframe.cpp:1466
#: radiant/mainframe.cpp:1460
@@ -1178,7 +1178,7 @@ msgstr "Kugel..."
#: radiant/mainframe.cpp:1474
#: radiant/mainframe.cpp:1468
msgid "_Curve"
-msgstr "Rundung (Kurve)"
+msgstr "_Kurve"
#: radiant/mainframe.cpp:1478
#: radiant/mainframe.cpp:1472
@@ -1188,27 +1188,27 @@ msgstr "Zylinder"
#: radiant/mainframe.cpp:1479
#: radiant/mainframe.cpp:1473
msgid "More Cylinders"
-msgstr ""
+msgstr "Mehr Zylinder"
#: radiant/mainframe.cpp:1480
#: radiant/mainframe.cpp:1474
msgid "Dense Cylinder"
-msgstr ""
+msgstr "Dicht gedrängter Zylinder"
#: radiant/mainframe.cpp:1482
#: radiant/mainframe.cpp:1476
msgid "Very Dense Cylinder"
-msgstr ""
+msgstr "Sehr dicht gedrängter Zylinder"
#: radiant/mainframe.cpp:1484
#: radiant/mainframe.cpp:1478
msgid "Square Cylinder"
-msgstr ""
+msgstr "Quadratischer Zylinder"
#: radiant/mainframe.cpp:1487
#: radiant/mainframe.cpp:1481
msgid "End cap"
-msgstr ""
+msgstr "Endkappe"
#: radiant/mainframe.cpp:1488
#: radiant/gtkdlgs.cpp:3087
@@ -1220,17 +1220,17 @@ msgstr "Schräge"
#: radiant/mainframe.cpp:1489
#: radiant/mainframe.cpp:1483
msgid "More End caps, Bevels"
-msgstr ""
+msgstr "Mehr Endkappen, Schrägen"
#: radiant/mainframe.cpp:1490
#: radiant/mainframe.cpp:1484
msgid "Square Endcap"
-msgstr ""
+msgstr "Quadratische Endkappe"
#: radiant/mainframe.cpp:1492
#: radiant/mainframe.cpp:1486
msgid "Square Bevel"
-msgstr ""
+msgstr "Quadratische Schräge"
#: radiant/mainframe.cpp:1495
#: radiant/mainframe.cpp:1489
@@ -1255,47 +1255,47 @@ msgstr "Einfügen"
#: radiant/mainframe.cpp:1505
#: radiant/mainframe.cpp:1499
msgid "Insert (2) Columns"
-msgstr ""
+msgstr "(2) Spalten einfügen"
#: radiant/mainframe.cpp:1507
#: radiant/mainframe.cpp:1501
msgid "Add (2) Columns"
-msgstr ""
+msgstr "(2) Spalten hinzufügen"
#: radiant/mainframe.cpp:1510
#: radiant/mainframe.cpp:1504
msgid "Insert (2) Rows"
-msgstr ""
+msgstr "(2) Zeilen einfügen"
#: radiant/mainframe.cpp:1512
#: radiant/mainframe.cpp:1506
msgid "Add (2) Rows"
-msgstr ""
+msgstr "(2) Zeilen hinzufügen"
#: radiant/mainframe.cpp:1514
#: radiant/mainframe.cpp:1508
msgid "Delete"
-msgstr "Entfernen"
+msgstr "Löschen"
#: radiant/mainframe.cpp:1515
#: radiant/mainframe.cpp:1509
msgid "First (2) Columns"
-msgstr ""
+msgstr "Erste (2) Spalten"
#: radiant/mainframe.cpp:1517
#: radiant/mainframe.cpp:1511
msgid "Last (2) Columns"
-msgstr ""
+msgstr "Letzte (2) Spalten"
#: radiant/mainframe.cpp:1520
#: radiant/mainframe.cpp:1514
msgid "First (2) Rows"
-msgstr ""
+msgstr "Erste (2) Zeilen"
#: radiant/mainframe.cpp:1522
#: radiant/mainframe.cpp:1516
msgid "Last (2) Rows"
-msgstr ""
+msgstr "Letzte (2) Zeilen"
#: radiant/mainframe.cpp:1525
#: radiant/mainframe.cpp:1519
@@ -1315,12 +1315,12 @@ msgstr "Zeilen"
#: radiant/mainframe.cpp:1530
#: radiant/mainframe.cpp:1524
msgid "Cols (Intermediate)"
-msgstr ""
+msgstr "Spalten (dazwischenliegend)"
#: radiant/mainframe.cpp:1531
#: radiant/mainframe.cpp:1525
msgid "Rows (Intermediate)"
-msgstr ""
+msgstr "Zeilen (dazwischenliegend)"
#: radiant/mainframe.cpp:1532
#: radiant/mainframe.cpp:1526
@@ -1330,7 +1330,7 @@ msgstr "Transponieren"
#: radiant/mainframe.cpp:1535
#: radiant/mainframe.cpp:1529
msgid "Cap Selection"
-msgstr "Deckel Auswahl"
+msgstr "Kappenauswahl"
#: radiant/mainframe.cpp:1537
#: radiant/mainframe.cpp:1531
@@ -1340,24 +1340,24 @@ msgstr ""
#: radiant/mainframe.cpp:1540
#: radiant/mainframe.cpp:1534
msgid "Overlay"
-msgstr ""
+msgstr "Ãœberlagerung"
#: radiant/mainframe.cpp:1541
#: radiant/mainframe.cpp:1535
msgid "Set"
-msgstr "Setze"
+msgstr "Festlegen"
#: radiant/mainframe.cpp:1543
#: radiant/mainframe.cpp:2063
#: radiant/mainframe.cpp:1537
#: radiant/mainframe.cpp:2057
msgid "Clear"
-msgstr ""
+msgstr "Löschen"
#: radiant/mainframe.cpp:1546
#: radiant/mainframe.cpp:1540
msgid "Thicken..."
-msgstr ""
+msgstr "Verdicken..."
#: radiant/mainframe.cpp:1549
#: radiant/mainframe.cpp:1543
@@ -1377,17 +1377,17 @@ msgstr "Anleitung"
#: radiant/mainframe.cpp:1577
#: radiant/mainframe.cpp:1571
msgid "Bug report"
-msgstr "Bug melden"
+msgstr "Fehlerbericht"
#: radiant/mainframe.cpp:1579
#: radiant/mainframe.cpp:1573
msgid "Shortcuts list"
-msgstr "Tastenbelegung"
+msgstr "Tastaturkürzelliste"
#: radiant/mainframe.cpp:1581
#: radiant/mainframe.cpp:1575
msgid "_About"
-msgstr "Ãœber"
+msgstr "_Ãœber"
#: radiant/mainframe.cpp:1668
#: radiant/mainframe.cpp:1662
@@ -1397,7 +1397,7 @@ msgstr "Öffnen"
#: radiant/mainframe.cpp:1668
#: radiant/mainframe.cpp:1662
msgid "Open an existing map"
-msgstr "Öffne eine bereits existierende Map"
+msgstr "Bereits vorhandene Karte öffnen"
#: radiant/mainframe.cpp:1672
#: radiant/gtkdlgs.cpp:3831
@@ -1409,37 +1409,37 @@ msgstr "Speichern"
#: radiant/mainframe.cpp:1672
#: radiant/mainframe.cpp:1666
msgid "Save the active map"
-msgstr ""
+msgstr "Aktive Karte speichern"
#: radiant/mainframe.cpp:1677
#: radiant/mainframe.cpp:1671
msgid "x-axis Flip"
-msgstr ""
+msgstr "X-Achse spiegeln"
#: radiant/mainframe.cpp:1681
#: radiant/mainframe.cpp:1675
msgid "x-axis Rotate"
-msgstr "x-Achsen Rotation"
+msgstr "X-Achse drehen"
#: radiant/mainframe.cpp:1685
#: radiant/mainframe.cpp:1679
msgid "y-axis Flip"
-msgstr ""
+msgstr "Y-Achse spiegeln"
#: radiant/mainframe.cpp:1689
#: radiant/mainframe.cpp:1683
msgid "y-axis Rotate"
-msgstr "y-Achsen Rotation"
+msgstr "Y-Achse drehen"
#: radiant/mainframe.cpp:1693
#: radiant/mainframe.cpp:1687
msgid "z-axis Flip"
-msgstr ""
+msgstr "Z-Achse spiegeln"
#: radiant/mainframe.cpp:1697
#: radiant/mainframe.cpp:1691
msgid "z-axis Rotate"
-msgstr "z-Achsen Rotation"
+msgstr "Z-Achse drehen"
#: radiant/mainframe.cpp:1705
#: radiant/mainframe.cpp:1699
@@ -1459,7 +1459,7 @@ msgstr "CSG subtrahieren"
#: radiant/mainframe.cpp:1737
#: radiant/mainframe.cpp:1731
msgid "CSG Merge"
-msgstr "CSG vereinen"
+msgstr "CSG zusammenführen"
#: radiant/mainframe.cpp:1743
#: radiant/mainframe.cpp:1737
@@ -1469,12 +1469,12 @@ msgstr "Aushöhlen"
#: radiant/mainframe.cpp:1758
#: radiant/mainframe.cpp:1752
msgid "Change views"
-msgstr ""
+msgstr "Ansichten ändern"
#: radiant/mainframe.cpp:1768
#: radiant/mainframe.cpp:1762
msgid "Texture view mode"
-msgstr ""
+msgstr "Texturenansichtsmodus"
#: radiant/mainframe.cpp:1776
#: radiant/mainframe.cpp:1795
@@ -1491,37 +1491,37 @@ msgstr "Kameravorschau"
#: radiant/mainframe.cpp:1801
#: radiant/mainframe.cpp:1795
msgid "Entity inspector"
-msgstr "Entity inspector"
+msgstr "Entitätsinspektor"
#: radiant/mainframe.cpp:1813
#: radiant/mainframe.cpp:1807
msgid "Free Rotation"
-msgstr "Freies Rotieren"
+msgstr "Freie Drehung"
#: radiant/mainframe.cpp:1818
#: radiant/mainframe.cpp:1812
msgid "Free Scaling"
-msgstr "Freies Skalieren"
+msgstr "Freie Skalierung"
#: radiant/mainframe.cpp:1822
#: radiant/mainframe.cpp:1816
msgid "Scale X"
-msgstr "Skaliere X"
+msgstr "X skalieren"
#: radiant/mainframe.cpp:1826
#: radiant/mainframe.cpp:1820
msgid "Scale Y"
-msgstr "Skaliere Y"
+msgstr "Y skalieren"
#: radiant/mainframe.cpp:1830
#: radiant/mainframe.cpp:1824
msgid "Scale Z"
-msgstr "Skaliere Z"
+msgstr "Z skalieren"
#: radiant/mainframe.cpp:1838
#: radiant/mainframe.cpp:1832
msgid "Don't select model brushes"
-msgstr ""
+msgstr "Modellpinsel nicht auswählen"
#: radiant/mainframe.cpp:1847
#: radiant/mainframe.cpp:1841
@@ -1561,24 +1561,24 @@ msgstr ""
#: radiant/mainframe.cpp:1891
#: radiant/mainframe.cpp:1885
msgid "Show Entities as"
-msgstr "Zeige Entities als"
+msgstr "Entitäten anzeigen als"
#: radiant/mainframe.cpp:1956
#: radiant/mainframe.cpp:1970
#: radiant/mainframe.cpp:1950
#: radiant/mainframe.cpp:1964
msgid " Label "
-msgstr ""
+msgstr " Bezeichnung "
#: radiant/mainframe.cpp:2738
#: radiant/mainframe.cpp:2732
msgid "XZ View"
-msgstr "XZ Anzeige"
+msgstr "XZ-Anzeige"
#: radiant/mainframe.cpp:2762
#: radiant/mainframe.cpp:2756
msgid "YZ View"
-msgstr "YZ Anzeige"
+msgstr "YZ-Anzeige"
#: radiant/mainframe.cpp:2790
#: radiant/mainframe.cpp:2855
@@ -1605,37 +1605,37 @@ msgstr ""
#: radiant/mainframe.cpp:3693
#: radiant/mainframe.cpp:3687
msgid "Load Project"
-msgstr "Lade Projekt"
+msgstr "Projekt laden"
#: radiant/mainframe.cpp:3695
#: radiant/mainframe.cpp:3689
msgid "Choose Project File"
-msgstr "Wähle Projektdatei"
+msgstr "Projektdatei auswählen"
#: radiant/mainframe.cpp:4270
#: radiant/mainframe.cpp:4268
msgid "Open Map"
-msgstr "Öffne Map"
+msgstr "Karte öffnen"
#: radiant/mainframe.cpp:4288
#: radiant/mainframe.cpp:4290
msgid "Import Map"
-msgstr "Importiere Map"
+msgstr "Karte importieren"
#: radiant/mainframe.cpp:4312
#: radiant/mainframe.cpp:4318
msgid "Save Map"
-msgstr "Speichere Map"
+msgstr "Karte speichern"
#: radiant/mainframe.cpp:4330
#: radiant/mainframe.cpp:4340
msgid "Export Selection"
-msgstr "Exportiere Auswahl"
+msgstr "Auswahl exportieren"
#: radiant/mainframe.cpp:4346
#: radiant/mainframe.cpp:4360
msgid "Export Region"
-msgstr "Exportiere Region"
+msgstr "Region exportieren"
#: radiant/mainframe.cpp:4380
#: radiant/mainframe.cpp:4394
@@ -1645,37 +1645,37 @@ msgstr "Fehler"
#: radiant/mainframe.cpp:4579
#: radiant/mainframe.cpp:4593
msgid "Import Prefab"
-msgstr "Importiere Prefab"
+msgstr "Fertigteil importieren"
#: radiant/mainframe.cpp:4603
#: radiant/mainframe.cpp:4617
msgid "Export Prefab"
-msgstr "Exportiere Prefab"
+msgstr "Fertigteil exportieren"
#: radiant/mainframe.cpp:4631
#: radiant/mainframe.cpp:4645
msgid "You must restart Radiant for the changes to take effect."
-msgstr "Radiant muss neu gestartet werden damit die Änderungen wirksam werden."
+msgstr "Radiant muss neu gestartet werden, damit die Änderungen wirksam werden."
#: radiant/mainframe.cpp:5756
#: radiant/mainframe.cpp:5768
msgid "Load textures from path"
-msgstr "Lade Texturen aus Verzeichnis"
+msgstr "Texturen aus Pfad laden"
#: radiant/mainframe.cpp:6174
#: radiant/mainframe.cpp:6186
msgid "You must restart Radiant for Gamma settings to take effect."
-msgstr "Radiant muss neu gestartet werden, damit die Änderungen an den Gammawerten wirksam werden."
+msgstr "Radiant muss neu gestartet werden, damit die Änderungen an den Gamma-Einstellungen wirksam werden."
#: radiant/preferences.cpp:540
#: radiant/preferences.cpp:541
msgid "Set prefab path"
-msgstr ""
+msgstr "Fertigteilpfad festlegen"
#: radiant/preferences.cpp:561
#: radiant/preferences.cpp:562
msgid "Find INI file"
-msgstr ""
+msgstr "INI-Datei suchen"
#: radiant/preferences.cpp:574
#: radiant/preferences.cpp:575
@@ -1687,19 +1687,19 @@ msgstr ""
#: radiant/preferences.cpp:576
#: radiant/preferences.cpp:577
msgid "Reset Registry"
-msgstr ""
+msgstr "Registrierung zurücksetzen"
#: radiant/preferences.cpp:1022
#: radiant/preferences.cpp:1023
#: radiant/preferences.cpp:1036
msgid "Select the game:"
-msgstr "Wähle das Spiel:"
+msgstr "Wählen Sie das Spiel aus:"
#: radiant/preferences.cpp:1034
#: radiant/preferences.cpp:1035
#: radiant/preferences.cpp:1048
msgid "Auto load selected game on startup"
-msgstr ""
+msgstr "Ausgewähltes Spiel beim Start automatisch laden"
#: radiant/preferences.cpp:1039
#: radiant/preferences.cpp:1040
@@ -1723,7 +1723,7 @@ msgstr ""
#: radiant/preferences.cpp:1108
#: radiant/preferences.cpp:1121
msgid "Select Game"
-msgstr "Wähle Spiel"
+msgstr "Spiel auswählen"
#: radiant/preferences.cpp:1116
#: radiant/preferences.cpp:1117
@@ -1817,13 +1817,13 @@ msgstr "Abbrechen"
#: radiant/preferences.cpp:1530
#: radiant/preferences.cpp:1542
msgid "GtkRadiant Preferences"
-msgstr "GtkRadiant Einstellungen"
+msgstr "GtkRadiant-Einstellungen"
#: radiant/preferences.cpp:1553
#: radiant/preferences.cpp:1554
#: radiant/preferences.cpp:1566
msgid "Clean"
-msgstr ""
+msgstr "Sauber"
#: radiant/preferences.cpp:1585
#: radiant/preferences.cpp:1586
@@ -1838,7 +1838,7 @@ msgstr "Einstellungen"
#: radiant/preferences.cpp:1618
#: radiant/preferences.cpp:1722
msgid "Globals"
-msgstr ""
+msgstr "Globale"
#: radiant/preferences.cpp:1609
#: radiant/preferences.cpp:1610
@@ -1850,13 +1850,13 @@ msgstr "Spieleinstellungen"
#: radiant/preferences.cpp:1617
#: radiant/preferences.cpp:1629
msgid "Display"
-msgstr ""
+msgstr "Anzeige"
#: radiant/preferences.cpp:1620
#: radiant/preferences.cpp:1621
#: radiant/preferences.cpp:1633
msgid "2D Display/Rendering"
-msgstr ""
+msgstr "2D-Anzeige/Rendering"
#: radiant/preferences.cpp:1625
#: radiant/preferences.cpp:1773
@@ -1868,7 +1868,7 @@ msgstr ""
#: radiant/preferences.cpp:1785
#: radiant/preferences.cpp:1787
msgid "3D View"
-msgstr "3D Ansicht"
+msgstr "3D-Ansicht"
#: radiant/preferences.cpp:1630
#: radiant/preferences.cpp:1631
@@ -1880,7 +1880,7 @@ msgstr "Textureinstellungen"
#: radiant/preferences.cpp:1638
#: radiant/preferences.cpp:1650
msgid "Interface"
-msgstr "Interface"
+msgstr "Schnittstelle"
#: radiant/preferences.cpp:1646
#: radiant/preferences.cpp:2187
@@ -1892,7 +1892,7 @@ msgstr "Interface"
#: radiant/preferences.cpp:2199
#: radiant/preferences.cpp:2201
msgid "Mouse"
-msgstr "Mouse"
+msgstr "Maus"
#: radiant/preferences.cpp:1651
#: radiant/preferences.cpp:2254
@@ -1905,7 +1905,7 @@ msgstr "Mouse"
#: radiant/preferences.cpp:2268
#, fuzzy
msgid "Editing"
-msgstr "Bearbeiten"
+msgstr "Bearbeitung"
#: radiant/preferences.cpp:1658
#: radiant/preferences.cpp:1659
@@ -1923,7 +1923,7 @@ msgstr "Andere"
#: radiant/preferences.cpp:2368
#: radiant/preferences.cpp:2370
msgid "Startup/Auto save"
-msgstr ""
+msgstr "Start/Automatisches Speichern"
#: radiant/preferences.cpp:1672
#: radiant/preferences.cpp:2488
@@ -1953,7 +1953,7 @@ msgstr ""
#: radiant/preferences.cpp:1696
#: radiant/preferences.cpp:1708
msgid "Front Page"
-msgstr ""
+msgstr "Startseite"
#: radiant/preferences.cpp:1716
#: radiant/preferences.cpp:1718
@@ -1962,32 +1962,32 @@ msgstr ""
#: radiant/preferences.cpp:1729
#: radiant/preferences.cpp:1731
msgid "2D Display"
-msgstr ""
+msgstr "2D-Anzeige"
#: radiant/preferences.cpp:1727
#: radiant/preferences.cpp:1728
#: radiant/preferences.cpp:1740
msgid "OpenGL Display Lists"
-msgstr ""
+msgstr "OpenGL-Anzeigelisten"
#: radiant/preferences.cpp:1734
#: radiant/preferences.cpp:1735
#: radiant/preferences.cpp:1747
msgid "OpenGL antialiased points and lines"
-msgstr ""
+msgstr "OpenGL kantengeglättete Punkte und Linien"
#: radiant/preferences.cpp:1740
#: radiant/preferences.cpp:1741
#: radiant/preferences.cpp:1753
#, fuzzy
msgid "Solid selection boxes"
-msgstr "Auswahl"
+msgstr ""
#: radiant/preferences.cpp:1746
#: radiant/preferences.cpp:1747
#: radiant/preferences.cpp:1759
msgid "Display size info"
-msgstr ""
+msgstr "Anzeigegrößeninfo"
#: radiant/preferences.cpp:1753
#: radiant/preferences.cpp:1754
@@ -1999,19 +1999,19 @@ msgstr ""
#: radiant/preferences.cpp:1764
#: radiant/preferences.cpp:1775
msgid "ATI cards with broken drivers - bug #802"
-msgstr ""
+msgstr "ATI-Karten mit defekten Treiber - bug #802"
#: radiant/preferences.cpp:1790
#: radiant/preferences.cpp:1791
#: radiant/preferences.cpp:1802
msgid "Movement Velocity"
-msgstr ""
+msgstr "Bewegungsgeschwindigkeit"
#: radiant/preferences.cpp:1813
#: radiant/preferences.cpp:1814
#: radiant/preferences.cpp:1825
msgid "Rotational Velocity"
-msgstr ""
+msgstr "Drehgeschwindigkeit"
#: radiant/preferences.cpp:1835
#: radiant/preferences.cpp:1836
@@ -2051,13 +2051,13 @@ msgstr "Ja"
#: radiant/preferences.cpp:1863
#: radiant/preferences.cpp:1874
msgid "Yes (Classic Key Setup)"
-msgstr ""
+msgstr "Ja (Klassische Tasteneinrichtung)"
#: radiant/preferences.cpp:1874
#: radiant/preferences.cpp:1875
#: radiant/preferences.cpp:1886
msgid "Freelook in Camera view"
-msgstr ""
+msgstr "Freier Blick in Kameraansicht"
#: radiant/preferences.cpp:1881
#: radiant/preferences.cpp:1882
@@ -2069,19 +2069,19 @@ msgstr ""
#: radiant/preferences.cpp:1889
#: radiant/preferences.cpp:1900
msgid "Invert mouse in freelook"
-msgstr ""
+msgstr "Maus im freien Blick invertieren"
#: radiant/preferences.cpp:1895
#: radiant/preferences.cpp:1896
#: radiant/preferences.cpp:1907
msgid "Discrete movement"
-msgstr ""
+msgstr "Diskrete Bewegung"
#: radiant/preferences.cpp:1902
#: radiant/preferences.cpp:1903
#: radiant/preferences.cpp:1914
msgid "Update XY views on camera move"
-msgstr ""
+msgstr "XY-Ansichten bei Kamerabewegung aktualisieren"
#: radiant/preferences.cpp:1924
#: radiant/preferences.cpp:1925
@@ -2106,14 +2106,14 @@ msgstr "hoch"
#: radiant/preferences.cpp:1964
#, fuzzy
msgid "Texture subsets"
-msgstr "Texturen"
+msgstr "Texturenteilmenge"
#: radiant/preferences.cpp:1958
#: radiant/preferences.cpp:1959
#: radiant/preferences.cpp:1970
#, fuzzy
msgid "Texture scrollbar"
-msgstr "Texturen"
+msgstr "Texturenrollbalken"
#: radiant/preferences.cpp:1964
#: radiant/preferences.cpp:1965
@@ -2125,7 +2125,7 @@ msgstr ""
#: radiant/preferences.cpp:1979
#: radiant/preferences.cpp:1990
msgid "Texture Compression (if available):"
-msgstr ""
+msgstr "Texturkompression (falls vorhanden):"
#: radiant/preferences.cpp:1989
#: radiant/preferences.cpp:2035
@@ -2135,7 +2135,7 @@ msgstr ""
#: radiant/preferences.cpp:2047
#, fuzzy
msgid "None"
-msgstr "Kegel"
+msgstr "Keine"
#: radiant/preferences.cpp:1995
#: radiant/preferences.cpp:1996
@@ -2165,7 +2165,7 @@ msgstr "S3TC DXT5"
#: radiant/preferences.cpp:2026
#: radiant/preferences.cpp:2037
msgid "Startup Shaders:"
-msgstr ""
+msgstr "Start-Schattierer:"
#: radiant/preferences.cpp:2037
#: radiant/preferences.cpp:2038
@@ -2178,7 +2178,7 @@ msgstr "System"
#: radiant/preferences.cpp:2053
#, fuzzy
msgid "Common"
-msgstr "Kegel"
+msgstr "Gewöhnlich"
#: radiant/preferences.cpp:2042
#: radiant/preferences.cpp:2043
@@ -2196,7 +2196,7 @@ msgstr ""
#: radiant/preferences.cpp:2140
#: radiant/preferences.cpp:2151
msgid "Detachable Menus"
-msgstr ""
+msgstr "Abtrennbare Menüs"
#: radiant/preferences.cpp:2147
#: radiant/preferences.cpp:2148
@@ -2208,25 +2208,25 @@ msgstr ""
#: radiant/preferences.cpp:2156
#: radiant/preferences.cpp:2167
msgid "Wide Toolbar"
-msgstr ""
+msgstr "Breite Werkzeugleiste"
#: radiant/preferences.cpp:2161
#: radiant/preferences.cpp:2162
#: radiant/preferences.cpp:2173
msgid "Plugin Toolbar"
-msgstr ""
+msgstr "Plugin-Werkzeugleiste"
#: radiant/preferences.cpp:2168
#: radiant/preferences.cpp:2169
#: radiant/preferences.cpp:2180
msgid "Use win32 file load dialog"
-msgstr ""
+msgstr "Win32-Dateiladedialog verwenden"
#: radiant/preferences.cpp:2175
#: radiant/preferences.cpp:2176
#: radiant/preferences.cpp:2187
msgid "Start on Primary Monitor"
-msgstr ""
+msgstr "Auf primärem Monitor starten"
#: radiant/preferences.cpp:2204
#: radiant/preferences.cpp:2205
@@ -2244,19 +2244,19 @@ msgstr "3 Tasten"
#: radiant/preferences.cpp:2216
#: radiant/preferences.cpp:2227
msgid "Right click to drop entities"
-msgstr ""
+msgstr "Rechtsklick zum Ablegen von Entitäten"
#: radiant/preferences.cpp:2221
#: radiant/preferences.cpp:2222
#: radiant/preferences.cpp:2233
msgid "Mouse chaser"
-msgstr ""
+msgstr "Mausverfolger"
#: radiant/preferences.cpp:2227
#: radiant/preferences.cpp:2228
#: radiant/preferences.cpp:2239
msgid "ALT + multi-drag"
-msgstr ""
+msgstr "ALT + mehrfaches Ziehen"
#: radiant/preferences.cpp:2239
#: radiant/preferences.cpp:2240
@@ -2298,13 +2298,13 @@ msgstr ""
#: radiant/preferences.cpp:2304
#: radiant/preferences.cpp:2315
msgid "Rotation increment:"
-msgstr ""
+msgstr "Drehungsschrittweite:"
#: radiant/preferences.cpp:2320
#: radiant/preferences.cpp:2321
#: radiant/preferences.cpp:2332
msgid "Undo Levels:"
-msgstr ""
+msgstr "Level rückgängig machen:"
#: radiant/preferences.cpp:2337
#: radiant/preferences.cpp:2338
@@ -2316,25 +2316,25 @@ msgstr ""
#: radiant/preferences.cpp:2368
#: radiant/preferences.cpp:2379
msgid "Snapshots"
-msgstr ""
+msgstr "Schnappschüsse"
#: radiant/preferences.cpp:2373
#: radiant/preferences.cpp:2374
#: radiant/preferences.cpp:2385
msgid "Load last project on open"
-msgstr ""
+msgstr "Letztes Projekt beim Öffnen laden"
#: radiant/preferences.cpp:2379
#: radiant/preferences.cpp:2380
#: radiant/preferences.cpp:2391
msgid "Load last map on open"
-msgstr ""
+msgstr "Letzte Karte beim Öffnen laden"
#: radiant/preferences.cpp:2392
#: radiant/preferences.cpp:2393
#: radiant/preferences.cpp:2404
msgid "Auto save every"
-msgstr ""
+msgstr "Automatisch speichern alle"
#: radiant/preferences.cpp:2405
#: radiant/preferences.cpp:2406
@@ -2346,13 +2346,13 @@ msgstr "Minuten"
#: radiant/preferences.cpp:2433
#: radiant/preferences.cpp:2444
msgid "Prefab path:"
-msgstr ""
+msgstr "Fertigteilpfad:"
#: radiant/preferences.cpp:2461
#: radiant/preferences.cpp:2462
#: radiant/preferences.cpp:2472
msgid "User INI path:"
-msgstr ""
+msgstr "Benutzer-INI-Pfad:"
#: radiant/preferences.cpp:2499
#: radiant/preferences.cpp:2500
@@ -2376,31 +2376,31 @@ msgstr "Deaktivert"
#: radiant/preferences.cpp:2522
#: radiant/preferences.cpp:2532
msgid "True Q3Map2 Style"
-msgstr ""
+msgstr "Wahrer Q3Map2-Stil"
#: radiant/preferences.cpp:2522
#: radiant/preferences.cpp:2523
#: radiant/preferences.cpp:2533
msgid "Classic Style"
-msgstr ""
+msgstr "Klassischer Stil"
#: radiant/preferences.cpp:2534
#: radiant/preferences.cpp:2535
#: radiant/preferences.cpp:2545
msgid "Use win32 file associations to open text files instead of builtin editor"
-msgstr ""
+msgstr "Win32-Dateizuordnungen zum Öffnen von Textdateien verwenden anstatt dem eingebauten Editor"
#: radiant/preferences.cpp:2540
#: radiant/preferences.cpp:2541
#: radiant/preferences.cpp:2551
msgid "Use Custom Shader Editor"
-msgstr ""
+msgstr "Benutzerdefinierten Schattierereditor verwenden"
#: radiant/preferences.cpp:2556
#: radiant/preferences.cpp:2557
#: radiant/preferences.cpp:2567
msgid "Custom Editor Command"
-msgstr ""
+msgstr "Benutzerdefinierter Editorbefehl"
#: radiant/preferences.cpp:2577
#: radiant/preferences.cpp:3265
@@ -2415,19 +2415,19 @@ msgstr "..."
#: radiant/preferences.cpp:2604
#: radiant/preferences.cpp:2614
msgid "Enable BSP process monitoring"
-msgstr ""
+msgstr "BSP-Prozessüberwachung aktivieren"
#: radiant/preferences.cpp:2611
#: radiant/preferences.cpp:2612
#: radiant/preferences.cpp:2622
msgid "Stop compilation on leak"
-msgstr ""
+msgstr "Kompilierung bei Leck stoppen"
#: radiant/preferences.cpp:2618
#: radiant/preferences.cpp:2619
#: radiant/preferences.cpp:2629
msgid "Run engine after compile"
-msgstr ""
+msgstr "Engine nach dem Kompilieren ausführen"
#: radiant/preferences.cpp:2626
#: radiant/preferences.cpp:2627
@@ -2439,25 +2439,25 @@ msgstr ""
#: radiant/preferences.cpp:2634
#: radiant/preferences.cpp:2644
msgid "Texturing compatible with q3map2"
-msgstr ""
+msgstr "Texturierung mit q3map2 kompatibel"
#: radiant/preferences.cpp:3173
#: radiant/preferences.cpp:3174
#: radiant/preferences.cpp:3184
msgid "Select game directory"
-msgstr "Wähle Spielverzeichnis"
+msgstr "Spielverzeichnis auswählen"
#: radiant/preferences.cpp:3197
#: radiant/preferences.cpp:3198
#: radiant/preferences.cpp:3208
msgid "Configure games"
-msgstr "Konfigure Spiele"
+msgstr "Spiele konfigurieren"
#: radiant/preferences.cpp:3203
#: radiant/preferences.cpp:3204
#: radiant/preferences.cpp:3214
msgid "Select the game to configure"
-msgstr "Wähle das Spiel das konfiguriert werden soll"
+msgstr "Wählen Sie das zu konfigurierende Spiel aus"
#: radiant/preferences.cpp:3216
#: radiant/preferences.cpp:3217
@@ -2469,13 +2469,13 @@ msgstr "Quake II"
#: radiant/preferences.cpp:3220
#: radiant/preferences.cpp:3230
msgid "Quake III Arena and mods"
-msgstr "Quake III Arena and mods"
+msgstr "Quake III Arena und Mods"
#: radiant/preferences.cpp:3222
#: radiant/preferences.cpp:3223
#: radiant/preferences.cpp:3233
msgid "Urban Terror (standalone)"
-msgstr "Urban Terror (standalone)"
+msgstr "Urban Terror (allein lauffähig)"
#: radiant/preferences.cpp:3225
#: radiant/preferences.cpp:3226
@@ -2514,31 +2514,31 @@ msgstr "Name:"
#: radiant/preferences.cpp:3253
#: radiant/preferences.cpp:3266
msgid "Engine directory:"
-msgstr "Engine Verzeichnis:"
+msgstr "Engine-Verzeichnis:"
#: radiant/preferences.cpp:3272
#: radiant/preferences.cpp:3273
#: radiant/preferences.cpp:3286
msgid "Mod subdirectory:"
-msgstr "Mod Unterverzeichnis..."
+msgstr "Mod-Unterverzeichnis:"
#: radiant/gtkdlgs.cpp:121
msgid "Edit Command"
-msgstr ""
+msgstr "Befehl bearbeiten"
#: radiant/gtkdlgs.cpp:123
msgid "Add Command"
-msgstr ""
+msgstr "Befehl hinzufügen"
#: radiant/gtkdlgs.cpp:142
msgid "Menu text"
-msgstr ""
+msgstr "Menütext"
#: radiant/gtkdlgs.cpp:149
#: radiant/gtkdlgs.cpp:2818
#: radiant/gtkdlgs.cpp:2817
msgid "Command"
-msgstr "Kommando"
+msgstr "Befehl"
#: radiant/gtkdlgs.cpp:501
msgid "Project Settings"
@@ -2550,15 +2550,15 @@ msgstr "Hinzufügen..."
#: radiant/gtkdlgs.cpp:550
msgid "Change..."
-msgstr "Bearbeiten..."
+msgstr "Ändern..."
#: radiant/gtkdlgs.cpp:557
msgid "Remove"
-msgstr "Löschen"
+msgstr "Entfernen"
#: radiant/gtkdlgs.cpp:564
msgid "Misc settings"
-msgstr "Generelle Einstellungen"
+msgstr "Verschiedene Einstellungen"
#: radiant/gtkdlgs.cpp:570
msgid ""
@@ -2568,7 +2568,7 @@ msgstr ""
#: radiant/gtkdlgs.cpp:576
msgid "Menu commands"
-msgstr ""
+msgstr "Menübefehle"
#: radiant/gtkdlgs.cpp:612
msgid "Project settings"
@@ -2600,17 +2600,17 @@ msgstr "GtkRadiant "
#: radiant/gtkdlgs.cpp:2684
#: radiant/gtkdlgs.cpp:2683
msgid "Credits"
-msgstr "Credits"
+msgstr "Danksagungen"
#: radiant/gtkdlgs.cpp:2690
#: radiant/gtkdlgs.cpp:2689
msgid "Changelog"
-msgstr "Changelog"
+msgstr "Änderungsprotokoll"
#: radiant/gtkdlgs.cpp:2696
#: radiant/gtkdlgs.cpp:2695
msgid "OpenGL Properties"
-msgstr "OpenGL Eigenschaften"
+msgstr "OpenGL-Eigenschaften"
#: radiant/gtkdlgs.cpp:2707
#: radiant/gtkdlgs.cpp:2706
@@ -2630,12 +2630,12 @@ msgstr "Renderer:"
#: radiant/gtkdlgs.cpp:2749
#: radiant/gtkdlgs.cpp:2748
msgid "OpenGL Extensions"
-msgstr "OpenGL Erweiterungen"
+msgstr "OpenGL-Erweiterungen"
#: radiant/gtkdlgs.cpp:2791
#: radiant/gtkdlgs.cpp:2790
msgid "Mapped Commands"
-msgstr ""
+msgstr "Abgebildete Befehle"
#: radiant/gtkdlgs.cpp:2824
#: radiant/gtkdlgs.cpp:1707
@@ -2646,28 +2646,28 @@ msgstr "Schlüssel"
#: radiant/gtkdlgs.cpp:2989
#: radiant/gtkdlgs.cpp:2988
msgid "Load"
-msgstr ""
+msgstr "Laden"
#: radiant/gtkdlgs.cpp:3039
#: radiant/gtkdlgs.cpp:3038
msgid "Cap"
-msgstr ""
+msgstr "Kappe"
#: radiant/gtkdlgs.cpp:3094
#: radiant/gtkdlgs.cpp:3093
msgid "Endcap"
-msgstr ""
+msgstr "Endkappe"
#: radiant/gtkdlgs.cpp:3101
#: radiant/gtkdlgs.cpp:3100
#, fuzzy
msgid "Inverted Bevel"
-msgstr "Invertieren"
+msgstr "Invertierte Schräge"
#: radiant/gtkdlgs.cpp:3108
#: radiant/gtkdlgs.cpp:3107
msgid "Inverted Endcap"
-msgstr ""
+msgstr "Invertierte Endkappe"
#: radiant/gtkdlgs.cpp:3116
#: radiant/gtkdlgs.cpp:2571
@@ -2679,7 +2679,7 @@ msgstr ""
#: radiant/gtkdlgs.cpp:3180
#: radiant/gtkdlgs.cpp:3179
msgid "Available Scripts - Not Implemented Yet"
-msgstr ""
+msgstr "Verfügbare Skripte - noch nicht implementiert"
#: radiant/gtkdlgs.cpp:3193
#: radiant/gtkdlgs.cpp:3192
@@ -2693,7 +2693,7 @@ msgstr ""
#: radiant/gtkdlgs.cpp:3269
#: radiant/gtkdlgs.cpp:3268
msgid "Run"
-msgstr ""
+msgstr "Ausführen"
#: radiant/gtkdlgs.cpp:3276
#: radiant/gtkdlgs.cpp:3275
@@ -2708,7 +2708,7 @@ msgstr "Bearbeiten..."
#: radiant/gtkdlgs.cpp:3330
#: radiant/gtkdlgs.cpp:3329
msgid "BrushScript Input"
-msgstr ""
+msgstr "BrushScript-Eingabe"
#: radiant/gtkdlgs.cpp:3416
#: radiant/gtkdlgs.cpp:3415
@@ -2727,12 +2727,12 @@ msgstr ""
#: radiant/gtkdlgs.cpp:3447
#: radiant/gtkdlgs.cpp:3446
msgid "Texture x:"
-msgstr "Textur x:"
+msgstr "Textur X:"
#: radiant/gtkdlgs.cpp:3454
#: radiant/gtkdlgs.cpp:3453
msgid "Texture y:"
-msgstr "Textur y:"
+msgstr "Textur Y:"
#: radiant/gtkdlgs.cpp:3492
#: radiant/gtkdlgs.cpp:3493
@@ -2760,14 +2760,14 @@ msgstr "Projektname:"
#: radiant/gtkdlgs.cpp:3634
#: radiant/gtkdlgs.cpp:3632
msgid "Include game dll files"
-msgstr ""
+msgstr "Spiel-DLL-Dateien miteinbeziehen"
#: radiant/gtkdlgs.cpp:3683
#: radiant/gtkdlgs.cpp:3709
#: radiant/gtkdlgs.cpp:3681
#: radiant/gtkdlgs.cpp:3707
msgid "Close the shader editor ?"
-msgstr "Schließe den Shader Editor ?"
+msgstr "Schattierereditor schließen?"
#: radiant/gtkdlgs.cpp:3683
#: radiant/gtkdlgs.cpp:3709
@@ -2779,7 +2779,7 @@ msgstr "Radiant"
#: radiant/gtkdlgs.cpp:3698
#: radiant/gtkdlgs.cpp:3696
msgid "Error saving file !"
-msgstr "Fehler beim Speichern der Datei"
+msgstr "Fehler beim Speichern der Datei!"
#: radiant/gtkdlgs.cpp:3978
#: radiant/gtkdlgs.cpp:3974
@@ -2813,16 +2813,16 @@ msgstr "fs_game"
#: radiant/gtkdlgs.cpp:1319
msgid "Map Info"
-msgstr "Map Info"
+msgstr "Karteninfo"
#: radiant/gtkdlgs.cpp:1363
msgid "Total Brushes"
-msgstr ""
+msgstr "Pinsel insgesamt"
#: radiant/gtkdlgs.cpp:1370
#, fuzzy
msgid "Total Entities"
-msgstr "Entities"
+msgstr "Entitäten insgesamt"
#: radiant/gtkdlgs.cpp:1377
msgid ""
@@ -2836,12 +2836,12 @@ msgstr ""
#: radiant/gtkdlgs.cpp:1416
msgid "Entity"
-msgstr "Entity"
+msgstr "Entität"
#: radiant/gtkdlgs.cpp:1423
#, fuzzy
msgid "Count"
-msgstr "Kegel"
+msgstr "Anzahl"
#: radiant/gtkdlgs.cpp:1713
msgid "Value"
@@ -2849,7 +2849,7 @@ msgstr "Wert"
#: radiant/gtkdlgs.cpp:1792
msgid "Arbitrary rotation"
-msgstr "Beliebig drehen"
+msgstr "Beliebige Drehung"
#: radiant/gtkdlgs.cpp:1811
msgid " X "
@@ -2885,23 +2885,23 @@ msgid ""
"You must restart for the\n"
"settings to take effect"
msgstr ""
-"Du musst neu starten, damit\n"
+"Sie müssen neu starten, damit\n"
"die Änderungen wirksam werden"
#: radiant/gtkdlgs.cpp:2120
#: radiant/gtkdlgs.cpp:2119
msgid "Find Brush"
-msgstr "Finde Brush"
+msgstr "Pinsel suchen"
#: radiant/gtkdlgs.cpp:2139
#: radiant/gtkdlgs.cpp:2138
msgid "Entity number"
-msgstr "Entitynummer"
+msgstr "Entitätsnummer"
#: radiant/gtkdlgs.cpp:2145
#: radiant/gtkdlgs.cpp:2144
msgid "Brush number"
-msgstr "Brush Nummer"
+msgstr "Pinselnummer"
#: radiant/gtkdlgs.cpp:2216
#: radiant/gtkdlgs.cpp:2215
@@ -2921,7 +2921,7 @@ msgstr ""
#: radiant/gtkdlgs.cpp:2306
#: radiant/gtkdlgs.cpp:2305
msgid "Width:"
-msgstr "Weite:"
+msgstr "Breite:"
#: radiant/gtkdlgs.cpp:2313
#: radiant/gtkdlgs.cpp:2312
@@ -3023,19 +3023,19 @@ msgstr ""
#: radiant/groupdialog.cpp:589
#: radiant/groupdialog.cpp:588
msgid "Open Wav File"
-msgstr "Öffne WAV Datei"
+msgstr "WAV-Datei öffnen"
#: radiant/groupdialog.cpp:622
#: radiant/groupdialog.cpp:621
msgid "Open Model"
-msgstr "Öffne Model"
+msgstr "Modell öffnen"
#: radiant/gtkmisc.cpp:1295
#: radiant/qe3.cpp:1492
#: radiant/gtkmisc.cpp:1298
#: radiant/qe3.cpp:1488
msgid "Open File"
-msgstr "Öffne Datei"
+msgstr "Datei öffnen"
#: radiant/gtkmisc.cpp:1295
#: radiant/gtkmisc.cpp:1298
@@ -3045,7 +3045,7 @@ msgstr "Datei speichern"
#: radiant/preferences.cpp:525
#: radiant/preferences.cpp:524
msgid "Executable for Custom Editor"
-msgstr ""
+msgstr "Programmdatei für benutzerdefinierten Editor"
#: radiant/xywindow.cpp:135
msgid "Save Image"
@@ -3053,7 +3053,7 @@ msgstr "Bild speichern"
#: radiant/bp_dlg.cpp:71
msgid "Current map format is incompatible"
-msgstr ""
+msgstr "Aktuelles Kartenformat ist inkompatibel"
#: radiant/bp_dlg.cpp:89
msgid ""
@@ -3078,15 +3078,15 @@ msgstr "Konvertieren"
#: radiant/bp_dlg.cpp:123
#, fuzzy
msgid "Change default"
-msgstr "Changelog"
+msgstr "Standard ändern"
#: radiant/bp_dlg.cpp:129
msgid "Abort load"
-msgstr ""
+msgstr "Laden abbrechen"
#: radiant/mainframe.cpp:1422
msgid "_Print XY View"
-msgstr ""
+msgstr "XY-Ansicht _drucken"
#: radiant/preferences.cpp:3248
msgid "Tremulous"
@@ -3095,11 +3095,11 @@ msgstr "Tremulous"
#: radiant/xywindow.cpp:133
#, fuzzy
msgid "Save BMP Image"
-msgstr "Speichere Map"
+msgstr "BMP-Bild speichern"
#: radiant/findtexturedialog.cpp:216
msgid "Find"
-msgstr ""
+msgstr "Suchen"
#: radiant/gtkmisc.cpp:927
#: radiant/gtkmisc.cpp:940
@@ -3108,12 +3108,12 @@ msgstr "Ok"
#: radiant/gtkmisc.cpp:1000
msgid "Go to URL"
-msgstr "Öffne URL"
+msgstr "URL aufrufen"
#: radiant/patchdialog.cpp:317
#, fuzzy
msgid "Patch Properties"
-msgstr "OpenGL Eigenschaften"
+msgstr "Patch-Eigenschaften"
#: radiant/patchdialog.cpp:348
msgid "Row:"
@@ -3135,7 +3135,7 @@ msgstr "T:"
#: radiant/surfacedialog.cpp:759
#, fuzzy
msgid "Texturing"
-msgstr "Textureinstellungen"
+msgstr "Texturierung"
#: radiant/patchdialog.cpp:482
msgid "Horizontal Shift Step"
@@ -3156,7 +3156,7 @@ msgstr ""
#: radiant/patchdialog.cpp:510
#, fuzzy
msgid "Rotate Step"
-msgstr "Rotiere X"
+msgstr "Schritt drehen"
#: radiant/patchdialog.cpp:624
#: radiant/surfacedialog.cpp:812
@@ -3167,29 +3167,29 @@ msgstr ""
#: radiant/surfacedialog.cpp:821
#, fuzzy
msgid "Set..."
-msgstr "Skalieren..."
+msgstr "Festlegen..."
#: radiant/patchdialog.cpp:636
#: radiant/surfacedialog.cpp:830
#, fuzzy
msgid "Natural"
-msgstr "Anleitung"
+msgstr "Natürlich"
#: radiant/patchdialog.cpp:642
#: radiant/surfacedialog.cpp:803
#: radiant/surfacedialog.cpp:839
#, fuzzy
msgid "Fit"
-msgstr "Filter"
+msgstr "Anpassen"
#: radiant/patchdialog.cpp:652
#: radiant/surfacedialog.cpp:868
msgid "Done"
-msgstr "Schließen"
+msgstr "Fertig"
#: radiant/surfacedialog.cpp:546
msgid "Surface inspector"
-msgstr "Surface inspector"
+msgstr "Oberflächeninspektor"
#: radiant/surfacedialog.cpp:562
msgid "Texture"
@@ -3206,7 +3206,7 @@ msgstr ""
#: radiant/surfacedialog.cpp:733
#, fuzzy
msgid "Step"
-msgstr "System"
+msgstr "Schritt"
#: radiant/surfacedialog.cpp:613
msgid "Vertical shift"
@@ -3223,7 +3223,7 @@ msgstr ""
#: radiant/surfacedialog.cpp:751
#, fuzzy
msgid "Match Grid"
-msgstr "Matrix"
+msgstr ""
#: radiant/surfacedialog.cpp:788
msgid "Height"
@@ -3231,9 +3231,9 @@ msgstr "Höhe"
#: radiant/surfacedialog.cpp:794
msgid "Axial"
-msgstr ""
+msgstr "Axial"
#: radiant/surfacedialog.cpp:892
msgid "Test"
-msgstr ""
+msgstr "Test"
diff --git a/radiant/brush.cpp b/radiant/brush.cpp
index 05ec12fb..2d07acad 100644
--- a/radiant/brush.cpp
+++ b/radiant/brush.cpp
@@ -341,7 +341,7 @@ void Face_TextureVectors( face_t *f, float STfromXYZ[2][4] ){
#ifdef _DEBUG
// this code is not supposed to be used while in BP mode, warning here can help spot the problem
if ( g_qeglobals.m_bBrushPrimitMode && !g_qeglobals.bNeedConvert ) {
- Sys_Printf( "Warning : illegal call of Face_TextureVectors in brush primitive mode\n" );
+ Sys_FPrintf( SYS_WRN, "Warning : illegal call of Face_TextureVectors in brush primitive mode\n" );
}
#endif
@@ -867,7 +867,7 @@ void Brush_Build( brush_t *b, bool bSnap, bool bMarkMap, bool bConvert, bool bFi
#ifdef _DEBUG
if ( !g_qeglobals.m_bBrushPrimitMode && bConvert ) {
- Sys_Printf( "Warning : conversion from brush primitive to old brush format not implemented\n" );
+ Sys_FPrintf( SYS_WRN, "Warning : conversion from brush primitive to old brush format not implemented\n" );
}
#endif
@@ -1539,7 +1539,7 @@ const char* Brush_GetKeyValue( brush_t *b, const char *pKey ){
void CheckName( face_t *fa, char *pname ){
if ( !strlen( fa->texdef.GetName() ) ) {
#ifdef _DEBUG
- Sys_Printf( "WARNING: unexpected texdef.name is empty in Brush.cpp CheckName\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: unexpected texdef.name is empty in Brush.cpp CheckName\n" );
#endif
fa->texdef.SetName( SHADER_NOT_FOUND );
strcpy( pname, SHADER_NOT_FOUND );
@@ -1592,7 +1592,7 @@ brush_t *Brush_Create( vec3_t mins, vec3_t maxs, texdef_t *texdef ){
if ( g_qeglobals.m_bBrushPrimitMode ) {
// check texdef is empty .. if there are cases it's not we need to write some conversion code
if ( texdef->shift[0] != 0 || texdef->shift[1] != 0 || texdef->scale[0] != 0 || texdef->scale[1] != 0 || texdef->rotate != 0 ) {
- Sys_Printf( "Warning : non-zero texdef detected in Brush_Create .. need brush primitive conversion\n" );
+ Sys_FPrintf( SYS_WRN, "Warning : non-zero texdef detected in Brush_Create .. need brush primitive conversion\n" );
}
}
#endif
diff --git a/radiant/brush_primit.cpp b/radiant/brush_primit.cpp
index 322c3b27..a69ab403 100644
--- a/radiant/brush_primit.cpp
+++ b/radiant/brush_primit.cpp
@@ -103,11 +103,11 @@ void FaceToBrushPrimitFace( face_t *f ){
strcpy(f->brushprimit_texdef.name,f->texdef.name); */
#ifdef DBG_BP
if ( f->plane.normal[0] == 0.0f && f->plane.normal[1] == 0.0f && f->plane.normal[2] == 0.0f ) {
- Sys_Printf( "Warning : f->plane.normal is (0,0,0) in FaceToBrushPrimitFace\n" );
+ Sys_FPrintf( SYS_WRN, "Warning : f->plane.normal is (0,0,0) in FaceToBrushPrimitFace\n" );
}
// check d_texture
if ( !f->d_texture ) {
- Sys_Printf( "Warning : f.d_texture is NULL in FaceToBrushPrimitFace\n" );
+ Sys_FPrintf( SYS_WRN, "Warning : f.d_texture is NULL in FaceToBrushPrimitFace\n" );
return;
}
#endif
@@ -162,10 +162,10 @@ void EmitBrushPrimitTextureCoordinates( face_t * f, winding_t * w ){
vec_t T = f->brushprimit_texdef.coords[1][0] * x + f->brushprimit_texdef.coords[1][1] * y + f->brushprimit_texdef.coords[1][2];
if ( fabs( S - w->points[i][3] ) > 1e-2 || fabs( T - w->points[i][4] ) > 1e-2 ) {
if ( fabs( S - w->points[i][3] ) > 1e-4 || fabs( T - w->points[i][4] ) > 1e-4 ) {
- Sys_Printf( "Warning : precision loss in brush -> brush primitive texture computation\n" );
+ Sys_FPrintf( SYS_WRN, "Warning : precision loss in brush -> brush primitive texture computation\n" );
}
else{
- Sys_Printf( "Warning : brush -> brush primitive texture computation bug detected\n" );
+ Sys_FPrintf( SYS_WRN, "Warning : brush -> brush primitive texture computation bug detected\n" );
}
}
}
@@ -181,14 +181,14 @@ void TexMatToFakeTexCoords( vec_t texMat[2][3], float shift[2], float *rot, floa
#ifdef DBG_BP
// check this matrix is orthogonal
if ( fabs( texMat[0][0] * 1.0L * texMat[0][1] + texMat[1][0] * 1.0L * texMat[1][1] ) > ZERO_EPSILON ) {
- Sys_Printf( "Warning : non orthogonal texture matrix in TexMatToFakeTexCoords\n" );
+ Sys_FPrintf( SYS_WRN, "Warning : non orthogonal texture matrix in TexMatToFakeTexCoords\n" );
}
#endif
scale[0] = sqrt( texMat[0][0] * 1.0L * texMat[0][0] + texMat[1][0] * 1.0L * texMat[1][0] );
scale[1] = sqrt( texMat[0][1] * 1.0L * texMat[0][1] + texMat[1][1] * 1.0L * texMat[1][1] );
#ifdef DBG_BP
if ( scale[0] < ZERO_EPSILON || scale[1] < ZERO_EPSILON ) {
- Sys_Printf( "Warning : unexpected scale==0 in TexMatToFakeTexCoords\n" );
+ Sys_FPrintf( SYS_WRN, "Warning : unexpected scale==0 in TexMatToFakeTexCoords\n" );
}
#endif
// compute rotate value
@@ -196,7 +196,7 @@ void TexMatToFakeTexCoords( vec_t texMat[2][3], float shift[2], float *rot, floa
#ifdef DBG_BP
// check brushprimit_texdef[1][0] is not zero
if ( fabs( texMat[1][0] ) < ZERO_EPSILON ) {
- Sys_Printf( "Warning : unexpected texdef[1][0]==0 in TexMatToFakeTexCoords\n" );
+ Sys_FPrintf( SYS_WRN, "Warning : unexpected texdef[1][0]==0 in TexMatToFakeTexCoords\n" );
}
#endif
// rotate is +-90
diff --git a/radiant/camwindow.cpp b/radiant/camwindow.cpp
index 8a952be0..87df69c1 100644
--- a/radiant/camwindow.cpp
+++ b/radiant/camwindow.cpp
@@ -1634,7 +1634,7 @@ void CamWnd::Cam_Draw(){
void CamWnd::OnExpose(){
if ( !MakeCurrent() ) {
- Sys_Printf( "ERROR: glXMakeCurrent failed..\n " );
+ Sys_FPrintf( SYS_ERR, "ERROR: glXMakeCurrent failed..\n " );
Sys_Printf( "Please restart Radiant if the camera view is not working\n" );
}
else
diff --git a/radiant/eclass.cpp b/radiant/eclass.cpp
index df503f4f..cc92448a 100644
--- a/radiant/eclass.cpp
+++ b/radiant/eclass.cpp
@@ -382,8 +382,8 @@ void Eclass_Init(){
if ( !strcmp( ValueForKey( g_qeglobals.d_project_entity, "gamemode" ), "sp" ) ) {
// SP mapping, ignore mp_*.def
char *name = (char *)pFile->data;
- if ( name[0] == 'm' && name[1] == 'p' && name[2] == '_'
- || name[0] == 'h' && name[1] == 'm' && name[2] == '_' ) {
+ if ( ( name[0] == 'm' && name[1] == 'p' && name[2] == '_' )
+ || ( name[0] == 'h' && name[1] == 'm' && name[2] == '_' ) ) {
Sys_Printf( "Single Player mapping mode. Ignoring '%s'\n", name );
pFile = pFile->next;
continue;
@@ -445,7 +445,7 @@ eclass_t *Eclass_ForName( const char *name, qboolean has_brushes ){
#ifdef _DEBUG
// grouping stuff, not an eclass
if ( strcmp( name, "group_info" ) == 0 ) {
- Sys_Printf( "WARNING: unexpected group_info entity in Eclass_ForName\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: unexpected group_info entity in Eclass_ForName\n" );
}
#endif
diff --git a/radiant/glinterface.cpp b/radiant/glinterface.cpp
index ea86be65..6f6307db 100644
--- a/radiant/glinterface.cpp
+++ b/radiant/glinterface.cpp
@@ -49,7 +49,7 @@ void WINAPI QERApp_UnHookGL2DWindow( IGL2DWindow* pGLW ){
}
}
#ifdef _DEBUG
- Sys_Printf( "ERROR: IGL2DWindow* not found in QERApp_UnHookGL2DWindow\n" );
+ Sys_FPrintf( SYS_ERR, "ERROR: IGL2DWindow* not found in QERApp_UnHookGL2DWindow\n" );
#endif
}
@@ -73,7 +73,7 @@ void WINAPI QERApp_UnHookGL3DWindow( IGL3DWindow* pGLW ){
}
}
#ifdef _DEBUG
- Sys_Printf( "ERROR: IGL3DWindow* not found in QERApp_UnHookGL3DWindow\n" );
+ Sys_FPrintf( SYS_ERR, "ERROR: IGL3DWindow* not found in QERApp_UnHookGL3DWindow\n" );
#endif
}
diff --git a/radiant/groupdialog.cpp b/radiant/groupdialog.cpp
index 4b2bb4ee..211eda02 100644
--- a/radiant/groupdialog.cpp
+++ b/radiant/groupdialog.cpp
@@ -826,7 +826,7 @@ void Group_AddToProperGroup( brush_t *b ){
Group_AddToItem(b, g->itemOwner);
#ifdef _DEBUG
else
- Sys_Printf("WARNING: unexpected Group_ForName not found in Group_AddToProperGroup\n");
+ Sys_FPrintf(SYS_WRN, "WARNING: unexpected Group_ForName not found in Group_AddToProperGroup\n");
#endif
}
else
diff --git a/radiant/gtkdlgs.cpp b/radiant/gtkdlgs.cpp
index f857e312..44778059 100644
--- a/radiant/gtkdlgs.cpp
+++ b/radiant/gtkdlgs.cpp
@@ -3793,8 +3793,47 @@ void DoTextEditor( const char* filename, int cursorpos ){
CString strEditCommand;
#ifdef _WIN32
if ( g_PrefsDlg.m_bUseWin32Editor ) {
- Sys_Printf( "opening file '%s' (line %d info ignored)\n", filename );
- ShellExecute( (HWND)GDK_WINDOW_HWND( g_pParentWnd->m_pWidget->window ), "open", filename, NULL, NULL, SW_SHOW );
+ HINSTANCE result;
+ Sys_Printf( "Opening file '%s'.\n", filename );
+ result = ShellExecute( (HWND)GDK_WINDOW_HWND( g_pParentWnd->m_pWidget->window ), "open", filename, NULL, NULL, SW_SHOW );
+ if( (int)result <= 32 ) {
+ const char *errstr;
+ switch( (int)result ) {
+ case SE_ERR_OOM:
+ case 0:
+ errstr = _( "The operating system is out of memory or resources." );
+ break;
+ case ERROR_FILE_NOT_FOUND:
+ //case SE_ERR_FNF:
+ errstr = _( "The specified file was not found." );
+ break;
+ case SE_ERR_NOASSOC:
+ {
+ SHELLEXECUTEINFO sei = {0};
+ sei.cbSize = sizeof( sei );
+ sei.nShow = SW_SHOWNORMAL;
+ sei.lpFile = TEXT( filename );
+ sei.fMask = SEE_MASK_CLASSNAME;
+ sei.lpVerb = TEXT( "open" );
+ sei.lpClass = TEXT( ".txt" );
+
+ if( ShellExecuteEx( &sei ) )
+ {
+ return;
+ }
+ errstr = _( "There is no application associated with the given file name extension." );
+ break;
+ }
+ case ERROR_PATH_NOT_FOUND:
+ //case SE_ERR_PNF:
+ errstr = _( "The specified path was not found." );
+ break;
+ default:
+ errstr = "";
+ break;
+ }
+ Sys_FPrintf( SYS_WRN, "Failed to open file '%s'. %s\n", filename, errstr );
+ }
return;
}
#else
diff --git a/radiant/main.cpp b/radiant/main.cpp
index bd095550..31b3801a 100644
--- a/radiant/main.cpp
+++ b/radiant/main.cpp
@@ -414,7 +414,7 @@ void error_redirect( const gchar *domain, GLogLevelFlags log_level, const gchar
#define GETTEXT_PACKAGE "radiant"
#define LOCALEDIR "lang"
-int main( int argc, char* argv[] ) {
+int mainRadiant( int argc, char* argv[] ) {
const char *libgl;
int i, j, k;
@@ -697,13 +697,13 @@ int main( int argc, char* argv[] ) {
chomp++;
buf[chomp] = '\0';
if ( strcmp( buf, RADIANT_MAJOR_VERSION ) ) {
- Sys_Printf( "ERROR: file RADIANT_MAJOR doesn't match ('%s')\n", buf );
+ Sys_FPrintf( SYS_ERR, "ERROR: file RADIANT_MAJOR doesn't match ('%s')\n", buf );
bVerIsGood = false;
}
}
else
{
- Sys_Printf( "ERROR: can't find RADIANT_MAJOR in '%s'\n", ver_file_name.GetBuffer() );
+ Sys_FPrintf( SYS_ERR, "ERROR: can't find RADIANT_MAJOR in '%s'\n", ver_file_name.GetBuffer() );
bVerIsGood = false;
}
ver_file_name = g_strAppPath;
@@ -719,13 +719,13 @@ int main( int argc, char* argv[] ) {
chomp++;
buf[chomp] = '\0';
if ( strcmp( buf, RADIANT_MINOR_VERSION ) ) {
- Sys_Printf( "ERROR: file RADIANT_MINOR doesn't match ('%s')\n", buf );
+ Sys_FPrintf( SYS_ERR, "ERROR: file RADIANT_MINOR doesn't match ('%s')\n", buf );
bVerIsGood = false;
}
}
else
{
- Sys_Printf( "ERROR: can't find RADIANT_MINOR in '%s'\n", ver_file_name.GetBuffer() );
+ Sys_FPrintf( SYS_ERR, "ERROR: can't find RADIANT_MINOR in '%s'\n", ver_file_name.GetBuffer() );
bVerIsGood = false;
}
if ( !bVerIsGood ) {
@@ -923,6 +923,76 @@ int main( int argc, char* argv[] ) {
return 0;
}
+
+#if defined( _WIN32 ) && defined( _MSC_VER )
+#include
+#include
+#include
+#include //StringCchPrintf
+
+int GenerateDump( EXCEPTION_POINTERS* pExceptionPointers ) {
+ BOOL bMiniDumpSuccessful;
+ char szPath[MAX_PATH];
+ char szFileName[MAX_PATH];
+ char szAppName[] = "GTKRadiant";
+ char* szVersion = RADIANT_VERSION;
+ DWORD dwBufferSize = MAX_PATH;
+ HANDLE hDumpFile;
+ SYSTEMTIME stLocalTime;
+ MINIDUMP_EXCEPTION_INFORMATION ExpParam;
+
+ GetLocalTime( &stLocalTime );
+ GetTempPath( dwBufferSize, szPath );
+
+ StringCchPrintf( szFileName, MAX_PATH, "%s%s", szPath, szAppName );
+ CreateDirectory( szFileName, NULL );
+
+ StringCchPrintf( szFileName, MAX_PATH, "%s%s\\%s-%s-%04d%02d%02d-%02d%02d%02d.dmp",
+ szPath, szAppName, szAppName, szVersion,
+ stLocalTime.wYear, stLocalTime.wMonth, stLocalTime.wDay,
+ stLocalTime.wHour, stLocalTime.wMinute, stLocalTime.wSecond );
+ hDumpFile = CreateFile(szFileName, GENERIC_READ|GENERIC_WRITE,
+ FILE_SHARE_WRITE|FILE_SHARE_READ, 0, CREATE_ALWAYS, 0, 0);
+
+ ExpParam.ThreadId = GetCurrentThreadId();
+ ExpParam.ExceptionPointers = pExceptionPointers;
+ ExpParam.ClientPointers = TRUE;
+
+ bMiniDumpSuccessful = MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(),
+ hDumpFile, MiniDumpWithDataSegs, &ExpParam, NULL, NULL);
+
+ return EXCEPTION_EXECUTE_HANDLER;
+}
+#endif
+
+int main( int argc, char* argv[] ) {
+
+#if defined( _WIN32 ) && defined( _MSC_VER )
+ __try {
+ return mainRadiant( argc, argv );
+ } __except( GenerateDump( GetExceptionInformation() ) ) {
+
+ char szPath[MAX_PATH];
+ char szText[MAX_PATH];
+ char szFileName[MAX_PATH];
+ char szAppName[] = "GTKRadiant";
+ SYSTEMTIME stLocalTime;
+ DWORD dwBufferSize = MAX_PATH;
+
+ GetLocalTime( &stLocalTime );
+ GetTempPath( dwBufferSize, szPath );
+
+ StringCchPrintf( szFileName, MAX_PATH, "%s%s", szPath, szAppName );
+
+ StringCchPrintf( szText, MAX_PATH, _("Application crashed!\nCreated a dump file in: \n%s"), szFileName );
+
+ MessageBox( NULL, szText, NULL, MB_ICONERROR );
+ }
+#else
+ return mainRadiant( argc, argv );
+#endif
+}
+
// ydnar: quick and dirty fix, just make the buffer bigger
#define BIG_PATH_MAX 4096
@@ -1098,7 +1168,7 @@ static gboolean RunBsp_CaptureOutput(void *data) {
}
if ( pid == -1 ) {
- Sys_Printf( "Failed to wait for %d: %s\n", process->pid, strerror( errno ) );
+ Sys_FPrintf( SYS_ERR, "ERROR: Failed to wait for %d: %s\n", process->pid, strerror( errno ) );
} else {
Sys_Printf( "Process %d terminated with status %d\n", process->pid, process->status );
}
diff --git a/radiant/mainframe.cpp b/radiant/mainframe.cpp
index 7167c319..4fb3b198 100644
--- a/radiant/mainframe.cpp
+++ b/radiant/mainframe.cpp
@@ -2536,7 +2536,7 @@ void MainFrame::Create(){
gtk_window_set_icon_from_file( GTK_WINDOW( window ), icon.GetBuffer(), &error );
if ( error != NULL ) {
- Sys_Printf( "Failed to load icon: %s\n", error->message );
+ Sys_FPrintf( SYS_ERR, "ERROR: Failed to load icon: %s\n", error->message );
g_error_free( error );
}
}
@@ -3203,7 +3203,7 @@ void MainFrame::OnSleep(){
{
#ifdef DBG_SLEEP
if (ent->md3Class)
- Sys_Printf("WARNING: unexpected ent->md3Class!=NULL with ent->eclass->model!=NULL\n");
+ Sys_FPrintf(SYS_WRN, "WARNING: unexpected ent->md3Class!=NULL with ent->eclass->model!=NULL\n");
#endif
entitymodel_t *model;
for (model = ent->eclass->model; model; model=model->pNext)
@@ -3216,7 +3216,7 @@ void MainFrame::OnSleep(){
}
#ifdef DBG_SLEEP
else
- Sys_Printf("WARNING: entity %p %s with fixedsize and no model no md3Class\n", ent, ent->eclass->name);
+ Sys_FPrintf(SYS_WRN, "WARNING: entity %p %s with fixedsize and no model no md3Class\n", ent, ent->eclass->name);
#endif
}
}
@@ -3497,7 +3497,7 @@ void MainFrame::LoadCommandMap(){
}
}
if ( j == g_nKeyCount ) {
- Sys_Printf( "WARNING: failed to parse user command %s\n", value );
+ Sys_FPrintf( SYS_WRN, "WARNING: failed to parse user command %s\n", value );
continue;
}
}
diff --git a/radiant/map.cpp b/radiant/map.cpp
index 078f7719..37cf8e99 100644
--- a/radiant/map.cpp
+++ b/radiant/map.cpp
@@ -391,7 +391,7 @@ void Map_ImportEntities( CPtrArray *ents, bool bAddSelected = false ){
}
}
else{
- Sys_Printf( "WARNING: no terrain shader found for brush\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: no terrain shader found for brush\n" );
}
}
}
@@ -1038,7 +1038,7 @@ void Map_RegionSelectedBrushes( void ){
#ifdef _DEBUG
if ( filtered_brushes.next != &filtered_brushes ) {
- Sys_Printf( "WARNING: filtered_brushes list may not be empty in Map_RegionSelectedBrushes\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: filtered_brushes list may not be empty in Map_RegionSelectedBrushes\n" );
}
#endif
diff --git a/radiant/parse.cpp b/radiant/parse.cpp
index ecfc4c4b..8ab9e1dd 100644
--- a/radiant/parse.cpp
+++ b/radiant/parse.cpp
@@ -57,14 +57,14 @@ skipspace:
{
if ( !*script_p ) {
if ( !crossline ) {
- Sys_Printf( "Warning: Line %i is incomplete [01]\n",scriptline );
+ Sys_FPrintf( SYS_WRN, "Warning: Line %i is incomplete [01]\n",scriptline );
}
return false;
}
if ( *script_p++ == '\n' ) {
if ( !crossline ) {
- Sys_Printf( "Warning: Line %i is incomplete [02]\n",scriptline );
+ Sys_FPrintf( SYS_WRN, "Warning: Line %i is incomplete [02]\n",scriptline );
}
scriptline++;
}
@@ -72,12 +72,12 @@ skipspace:
if ( script_p[0] == '/' && script_p[1] == '/' ) { // comment field
if ( !crossline ) {
- Sys_Printf( "Warning: Line %i is incomplete [03]\n",scriptline );
+ Sys_FPrintf( SYS_WRN, "Warning: Line %i is incomplete [03]\n",scriptline );
}
while ( *script_p++ != '\n' )
if ( !*script_p ) {
if ( !crossline ) {
- Sys_Printf( "Warning: Line %i is incomplete [04]\n",scriptline );
+ Sys_FPrintf( SYS_WRN, "Warning: Line %i is incomplete [04]\n",scriptline );
}
return false;
}
diff --git a/radiant/patchdialog.cpp b/radiant/patchdialog.cpp
index a7821649..7707afbb 100644
--- a/radiant/patchdialog.cpp
+++ b/radiant/patchdialog.cpp
@@ -694,7 +694,7 @@ void PatchDialog::GetPatchInfo(){
}
else{
- Sys_Printf( "WARNING: no patch\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: no patch\n" );
}
// fill in our internal structs
m_nRow = 0; m_nCol = 0;
diff --git a/radiant/pluginmanager.cpp b/radiant/pluginmanager.cpp
index 1c77289a..3a9929c8 100644
--- a/radiant/pluginmanager.cpp
+++ b/radiant/pluginmanager.cpp
@@ -236,55 +236,57 @@ int refcount;
times an ID is being referenced, and destroys any instance that is no longer in use */
class CModelManager : public IModelCache
{
-public:
-CModelManager(){
- m_ptrs = g_ptr_array_new();
-}
-virtual ~CModelManager(){
- g_ptr_array_free( m_ptrs, FALSE );
-}
-
-virtual void DeleteByID( const char *id, const char* version ){
- unsigned int i;
- CModelWrapper *elem;
- for ( i = 0; i < m_ptrs->len; i++ )
- {
- elem = (CModelWrapper*)m_ptrs->pdata[i];
- if ( strcmp( elem->m_version.c_str(), version ) == 0
- && strcmp( elem->m_id.c_str(), id ) == 0
- && --elem->refcount == 0 ) {
- g_ptr_array_remove_index_fast( m_ptrs, i );
- delete elem;
- return;
- }
+ public:
+ CModelManager(){
+ m_ptrs = g_ptr_array_new();
+ }
+ virtual ~CModelManager(){
+ g_ptr_array_free( m_ptrs, FALSE );
}
-}
-virtual entity_interfaces_t *GetByID( const char *id, const char* version ){
- unsigned int i;
- CModelWrapper *elem;
- for ( i = 0; i < m_ptrs->len; i++ )
- {
- elem = (CModelWrapper*)m_ptrs->pdata[i];
- if ( strcmp( elem->m_version.c_str(), version ) == 0
- && strcmp( elem->m_id.c_str(), id ) == 0 ) {
- elem->refcount++;
- return &elem->m_model;
+ virtual void DeleteByID( const char *id, const char* version ){
+ unsigned int i;
+ CModelWrapper *elem;
+ for ( i = 0; i < m_ptrs->len; i++ )
+ {
+ elem = (CModelWrapper*)m_ptrs->pdata[i];
+ if (strcmp(elem->m_version.c_str(), version) == 0
+ && strcmp(elem->m_id.c_str(), id) == 0) {
+ elem->refcount--;
+ if (elem->refcount == 0) {
+ g_ptr_array_remove_index_fast(m_ptrs, i);
+ delete elem;
+ }
+ return;
+ }
}
}
- elem = new CModelWrapper( id, version );
- g_ptr_array_add( m_ptrs, elem );
+ virtual entity_interfaces_t *GetByID( const char *id, const char* version ){
+ unsigned int i;
+ CModelWrapper *elem;
+ for ( i = 0; i < m_ptrs->len; i++ )
+ {
+ elem = (CModelWrapper*)m_ptrs->pdata[i];
+ if ( strcmp( elem->m_version.c_str(), version ) == 0
+ && strcmp( elem->m_id.c_str(), id ) == 0 ) {
+ elem->refcount++;
+ return &elem->m_model;
+ }
+ }
- return &elem->m_model;
-}
+ elem = new CModelWrapper( id, version );
+ g_ptr_array_add( m_ptrs, elem );
-virtual void RefreshAll(){
- for ( unsigned int i = 0; i < m_ptrs->len; ++i )
- ( (CModelWrapper*)m_ptrs->pdata[i] )->Refresh();
-}
-private:
-GPtrArray *m_ptrs; // array of CModelWrapper*
+ return &elem->m_model;
+ }
+
+ virtual void RefreshAll(){
+ for ( unsigned int i = 0; i < m_ptrs->len; ++i )
+ ( (CModelWrapper*)m_ptrs->pdata[i] )->Refresh();
+ }
+ private:
+ GPtrArray *m_ptrs; // array of CModelWrapper*
};
CModelManager g_model_cache;
@@ -719,7 +721,7 @@ void CPlugInManager::Cleanup(){
//++timo FIXME: for now I leave a leak warning, we'd need a table to keep track of commited patches
#ifdef _DEBUG
if ( m_PluginPatches.GetSize() != 0 ) {
- Sys_Printf( "WARNING: m_PluginPatches.GetSize() != 0 in CPlugInManager::Cleanup, possible leak\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: m_PluginPatches.GetSize() != 0 in CPlugInManager::Cleanup, possible leak\n" );
}
#endif
@@ -859,7 +861,7 @@ patchMesh_t* CPlugInManager::FindPatchHandle( int index ){
return pb->pPatch;
}
#ifdef _DEBUG
- Sys_Printf( "WARNING: out of bounds in CPlugInManager::FindPatchHandle\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: out of bounds in CPlugInManager::FindPatchHandle\n" );
#endif
break;
case EAllocatedPatches:
@@ -868,7 +870,7 @@ patchMesh_t* CPlugInManager::FindPatchHandle( int index ){
return pPatch;
}
#ifdef _DEBUG
- Sys_Printf( "WARNING: out of bounds in CPlugInManager::FindPatchHandle\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: out of bounds in CPlugInManager::FindPatchHandle\n" );
#endif
break;
}
@@ -1066,7 +1068,7 @@ _QERFaceData* WINAPI QERApp_GetFaceData( void* pv, int nFaceIndex ){
#ifdef _DEBUG
if ( !pBrush->brush_faces ) {
- Sys_Printf( "Warning : pBrush->brush_faces is NULL in QERApp_GetFaceData\n" );
+ Sys_FPrintf( SYS_WRN, "Warning : pBrush->brush_faces is NULL in QERApp_GetFaceData\n" );
return NULL;
}
#endif
@@ -1500,7 +1502,7 @@ qtexture_t* WINAPI QERApp_Texture_ForName( const char *name ){
gtk_glwidget_make_current( g_qeglobals_gui.d_glBase );
//++timo debugging
- Sys_Printf( "WARNING: QERApp_Texture_ForName ... don't call that!!\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: QERApp_Texture_ForName ... don't call that!!\n" );
qtexture_t* qtex = QERApp_Texture_ForName2( name );
return qtex;
}
@@ -1547,7 +1549,7 @@ void CPlugInManager::CommitEntityHandleToMap( void* vpEntity ){
// fixedsize
if ( e->fixedsize ) {
if ( pe->brushes.onext != &pe->brushes ) {
- Sys_Printf( "Warning : Fixed size entity with brushes in CPlugInManager::CommitEntityHandleToMap\n" );
+ Sys_FPrintf( SYS_WRN, "Warning : Fixed size entity with brushes in CPlugInManager::CommitEntityHandleToMap\n" );
}
// create a custom brush
VectorAdd( e->mins, pe->origin, mins );
@@ -1590,7 +1592,7 @@ void CPlugInManager::CommitEntityHandleToMap( void* vpEntity ){
else
{ // brush entity
if ( pe->brushes.next == &pe->brushes ) {
- Sys_Printf( "Warning: Brush entity with no brushes in CPlugInManager::CommitEntityHandleToMap\n" );
+ Sys_FPrintf( SYS_WRN, "Warning: Brush entity with no brushes in CPlugInManager::CommitEntityHandleToMap\n" );
}
}
@@ -1636,7 +1638,7 @@ void CPlugInManager::CommitEntityHandleToMap( void* vpEntity ){
world_entity = pe;
}
else{
- Sys_Printf( "Warning : unexpected world_entity == NULL in CommitEntityHandleToMap\n" );
+ Sys_FPrintf( SYS_WRN, "Warning : unexpected world_entity == NULL in CommitEntityHandleToMap\n" );
}
}
}
@@ -1673,7 +1675,7 @@ patchMesh_t* QERApp_GetSelectedPatch(){
}
}
#ifdef _DEBUG
- Sys_Printf( "WARNING: QERApp_GetSelectedPatchTexdef called with no patch selected\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: QERApp_GetSelectedPatchTexdef called with no patch selected\n" );
#endif
return NULL;
}
@@ -1765,7 +1767,7 @@ void WINAPI QERApp_DeletePatch( int index ){
}
}
#ifdef _DEBUG
- Sys_Printf( "Warning: QERApp_DeletePatch: FindPatchHandle failed\n" );
+ Sys_FPrintf( SYS_WRN, "Warning: QERApp_DeletePatch: FindPatchHandle failed\n" );
#endif
}
diff --git a/radiant/pmesh.cpp b/radiant/pmesh.cpp
index aab43c20..041cd7ce 100644
--- a/radiant/pmesh.cpp
+++ b/radiant/pmesh.cpp
@@ -1378,7 +1378,7 @@ brush_t* Patch_GenericMesh( int nWidth, int nHeight, int nOrientation, bool bDel
}
if ( !bOverride && !QE_SingleBrush() ) {
- Sys_Printf( "Error: you must have a single brush selected\n" );
+ Sys_FPrintf( SYS_ERR, "ERROR: you must have a single brush selected\n" );
return NULL;
}
@@ -4956,7 +4956,7 @@ void Patch_ShiftTextureST( patchMesh_t *p, float fx, float fy ){
#ifdef _DEBUG
// NOTE: when called by Patch_ShiftTexture this warning may be bogus
if ( ( ABS( fx ) >= 1 ) || ( ABS( fy ) >= 1 ) ) {
- Sys_Printf( "WARNING: increments exceed 1 in Patch_ShiftTextureST\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: increments exceed 1 in Patch_ShiftTextureST\n" );
}
#endif
for ( int w = 0; w < p->width; w++ )
diff --git a/radiant/qe3.cpp b/radiant/qe3.cpp
index 358d3939..1904aa41 100644
--- a/radiant/qe3.cpp
+++ b/radiant/qe3.cpp
@@ -108,7 +108,7 @@ void WINAPI QE_CheckOpenGLForErrors( void ){
}
else
{
- Sys_Printf( "Warning: OpenGL Error %s\n", qgluErrorString( (GLenum)i ) );
+ Sys_FPrintf( SYS_WRN, "WARNING: OpenGL Error %s\n", qgluErrorString( (GLenum)i ) );
}
}
}
@@ -802,13 +802,13 @@ qboolean QE_SingleBrush( bool bQuiet ){
if ( ( selected_brushes.next == &selected_brushes )
|| ( selected_brushes.next->next != &selected_brushes ) ) {
if ( !bQuiet ) {
- Sys_Printf( "Error: you must have a single brush selected\n" );
+ Sys_FPrintf( SYS_ERR, "ERROR: you must have a single brush selected\n" );
}
return false;
}
if ( selected_brushes.next->owner->eclass->fixedsize ) {
if ( !bQuiet ) {
- Sys_Printf( "Error: you cannot manipulate fixed size entities\n" );
+ Sys_FPrintf( SYS_ERR, "ERROR: you cannot manipulate fixed size entities\n" );
}
return false;
}
diff --git a/radiant/radiant.vcxproj b/radiant/radiant.vcxproj
index ffb03471..86e281aa 100644
--- a/radiant/radiant.vcxproj
+++ b/radiant/radiant.vcxproj
@@ -38,7 +38,7 @@
Application
- v110_xp
+ v140
@@ -84,7 +84,7 @@
/STACK:8388608 %(AdditionalOptions)
- Ws2_32.lib;glib-2.0.lib;gobject-2.0.lib;intl.lib;gtk-win32-2.0.lib;gdk-win32-2.0.lib;pango-1.0.lib;pangoft2-1.0.lib;gdkglext-win32-1.0.lib;gtkglext-win32-1.0.lib;libxml2_a.lib;mathlib.lib;synapse.lib;l_net.lib;cmdlib.lib;%(AdditionalDependencies)
+ Ws2_32.lib;glib-2.0.lib;gobject-2.0.lib;intl.lib;gtk-win32-2.0.lib;gdk-win32-2.0.lib;pango-1.0.lib;pangoft2-1.0.lib;gdkglext-win32-1.0.lib;gtkglext-win32-1.0.lib;libxml2_a.lib;mathlib.lib;synapse.lib;l_net.lib;cmdlib.lib;Dbghelp.lib;%(AdditionalDependencies)
$(SolutionDir)\..\gtk-2.24.10\lib;$(SolutionDir)\..\libxml2-2.9.2/win32/bin.msvc;$(SolutionDir)\..\gtkglext-1.2.0\lib;$(SolutionDir)\build\$(Configuration)\libs;%(AdditionalLibraryDirectories)
true
Console
@@ -106,7 +106,7 @@
/STACK:8388608 %(AdditionalOptions)
- Ws2_32.lib;glib-2.0.lib;gobject-2.0.lib;intl.lib;gtk-win32-2.0.lib;gdk-win32-2.0.lib;pango-1.0.lib;pangoft2-1.0.lib;gdkglext-win32-1.0.lib;gtkglext-win32-1.0.lib;libxml2_a.lib;mathlib.lib;synapse.lib;l_net.lib;cmdlib.lib;%(AdditionalDependencies)
+ Ws2_32.lib;glib-2.0.lib;gobject-2.0.lib;intl.lib;gtk-win32-2.0.lib;gdk-win32-2.0.lib;pango-1.0.lib;pangoft2-1.0.lib;gdkglext-win32-1.0.lib;gtkglext-win32-1.0.lib;libxml2_a.lib;mathlib.lib;synapse.lib;l_net.lib;cmdlib.lib;Dbghelp.lib;%(AdditionalDependencies)
$(SolutionDir)\..\gtk-2.24.10\lib;$(SolutionDir)\..\libxml2-2.9.2/win32/bin.msvc;$(SolutionDir)\..\gtkglext-1.2.0\lib;$(SolutionDir)\build\$(Configuration)\libs;%(AdditionalLibraryDirectories)
true
Console
@@ -124,7 +124,7 @@
/STACK:8388608 %(AdditionalOptions)
- Ws2_32.lib;glib-2.0.lib;gobject-2.0.lib;intl.lib;gtk-win32-2.0.lib;gdk-win32-2.0.lib;pango-1.0.lib;pangoft2-1.0.lib;gdkglext-win32-1.0.lib;gtkglext-win32-1.0.lib;libxml2_a.lib;mathlib.lib;synapse.lib;l_net.lib;cmdlib.lib;%(AdditionalDependencies)
+ Ws2_32.lib;glib-2.0.lib;gobject-2.0.lib;intl.lib;gtk-win32-2.0.lib;gdk-win32-2.0.lib;pango-1.0.lib;pangoft2-1.0.lib;gdkglext-win32-1.0.lib;gtkglext-win32-1.0.lib;libxml2_a.lib;mathlib.lib;synapse.lib;l_net.lib;cmdlib.lib;Dbghelp.lib;%(AdditionalDependencies)
$(SolutionDir)\..\gtk-2.24.10\lib;$(SolutionDir)\..\libxml2-2.9.2/win32/bin.msvc;$(SolutionDir)\..\gtkglext-1.2.0\lib;$(SolutionDir)\build\$(Configuration)\libs;%(AdditionalLibraryDirectories)
true
Windows
@@ -146,7 +146,7 @@
/STACK:8388608 %(AdditionalOptions)
- Ws2_32.lib;glib-2.0.lib;gobject-2.0.lib;intl.lib;gtk-win32-2.0.lib;gdk-win32-2.0.lib;pango-1.0.lib;pangoft2-1.0.lib;gdkglext-win32-1.0.lib;gtkglext-win32-1.0.lib;libxml2_a.lib;mathlib.lib;synapse.lib;l_net.lib;cmdlib.lib;%(AdditionalDependencies)
+ Ws2_32.lib;glib-2.0.lib;gobject-2.0.lib;intl.lib;gtk-win32-2.0.lib;gdk-win32-2.0.lib;pango-1.0.lib;pangoft2-1.0.lib;gdkglext-win32-1.0.lib;gtkglext-win32-1.0.lib;libxml2_a.lib;mathlib.lib;synapse.lib;l_net.lib;cmdlib.lib;Dbghelp.lib;%(AdditionalDependencies)
$(SolutionDir)\..\gtk-2.24.10\lib;$(SolutionDir)\..\libxml2-2.9.2/win32/bin.msvc;$(SolutionDir)\..\gtkglext-1.2.0\lib;$(SolutionDir)\build\$(Configuration)\libs;%(AdditionalLibraryDirectories)
true
Windows
diff --git a/radiant/select.cpp b/radiant/select.cpp
index de8ea82e..b0584136 100644
--- a/radiant/select.cpp
+++ b/radiant/select.cpp
@@ -849,7 +849,7 @@ void ComputeAbsolute( face_t* f, vec3_t& p1, vec3_t& p2, vec3_t& p3 ){
#ifdef _DEBUG
if ( g_qeglobals.m_bBrushPrimitMode ) {
- Sys_Printf( "Warning : illegal call of ComputeAbsolute in brush primitive mode\n" );
+ Sys_FPrintf( SYS_WRN, "Warning : illegal call of ComputeAbsolute in brush primitive mode\n" );
}
#endif
@@ -898,7 +898,7 @@ void AbsoluteToLocal( plane_t normal2, face_t* f, vec3_t& p1, vec3_t& p2, vec3_t
#ifdef _DEBUG
if ( g_qeglobals.m_bBrushPrimitMode ) {
- Sys_Printf( "Warning : illegal call of AbsoluteToLocal in brush primitive mode\n" );
+ Sys_FPrintf( SYS_WRN, "Warning : illegal call of AbsoluteToLocal in brush primitive mode\n" );
}
#endif
diff --git a/radiant/selectedface.cpp b/radiant/selectedface.cpp
index 0b1ab2e5..f0a90ed5 100644
--- a/radiant/selectedface.cpp
+++ b/radiant/selectedface.cpp
@@ -56,7 +56,7 @@ int WINAPI QERApp_GetFaceInfo( int iface, _QERFaceData *pFaceData, winding_t *pW
return 0;
}
if ( !g_qeglobals.m_bBrushPrimitMode ) {
- Sys_Printf( "Warning: unexpected QERApp_GetFaceInfo out of brush primitive mode\n" );
+ Sys_FPrintf( SYS_WRN, "Warning: unexpected QERApp_GetFaceInfo out of brush primitive mode\n" );
return 0;
}
face_t *selFace = reinterpret_cast( g_ptrSelectedFaces.GetAt( iface ) );
@@ -77,7 +77,7 @@ int WINAPI QERApp_SetFaceInfo( int iface, _QERFaceData *pFaceData ){
return 0;
}
if ( !g_qeglobals.m_bBrushPrimitMode ) {
- Sys_Printf( "Warning: unexpected QERApp_SetFaceInfo out of brush primitive mode\n" );
+ Sys_FPrintf( SYS_WRN, "Warning: unexpected QERApp_SetFaceInfo out of brush primitive mode\n" );
return 0;
}
face_t *selFace = reinterpret_cast( g_ptrSelectedFaces.GetAt( iface ) );
diff --git a/radiant/surfacedialog.cpp b/radiant/surfacedialog.cpp
index fec10311..08f106fe 100644
--- a/radiant/surfacedialog.cpp
+++ b/radiant/surfacedialog.cpp
@@ -375,7 +375,7 @@ static void OnBtnMatchGrid( GtkWidget *widget, gpointer data ){
hscale = gtk_spin_button_get_value_as_float( GTK_SPIN_BUTTON( g_dlgSurface.GetDlgWidget( "hscale" ) ) );
vscale = gtk_spin_button_get_value_as_float( GTK_SPIN_BUTTON( g_dlgSurface.GetDlgWidget( "vscale" ) ) );
if ( hscale == 0.0f || vscale == 0.0f ) {
- Sys_Printf( "ERROR: unexpected scale == 0.0f\n" );
+ Sys_FPrintf( SYS_ERR, "ERROR: unexpected scale == 0.0f\n" );
return;
}
DoSnapTToGrid( hscale, vscale );
diff --git a/radiant/surfaceplugin.cpp b/radiant/surfaceplugin.cpp
index 4de5754c..8b215235 100644
--- a/radiant/surfaceplugin.cpp
+++ b/radiant/surfaceplugin.cpp
@@ -41,7 +41,7 @@ void QERApp_GetTwoSelectedPatch( patchMesh_t **p1, patchMesh_t **p2 ){
}
}
#ifdef _DEBUG
- Sys_Printf( "WARNING: QERApp_GetTwoSelectedPatch failed (did not find two patches)\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: QERApp_GetTwoSelectedPatch failed (did not find two patches)\n" );
#endif
return;
}
diff --git a/radiant/texwindow.cpp b/radiant/texwindow.cpp
index a542e4dc..ec20e357 100644
--- a/radiant/texwindow.cpp
+++ b/radiant/texwindow.cpp
@@ -1086,7 +1086,7 @@ IShader* Texture_NextPos( int *x, int *y ){
nCurrentShader++;
pCurrentShader = QERApp_ActiveShader_ForIndex( nCurrentShader );
if ( pCurrentShader == NULL ) {
- Sys_Printf( "ERROR: unexpected pCurrentShader == NULL in Texture_NextPos\n" );
+ Sys_FPrintf( SYS_ERR, "ERROR: unexpected pCurrentShader == NULL in Texture_NextPos\n" );
return NULL;
}
current_texture = pCurrentShader->getTexture();
@@ -1285,7 +1285,7 @@ void SelectTexture( int mx, int my, bool bShift, bool bFitScale ){
&& my < y && y - my < nHeight + FONT_HEIGHT ) {
if ( bShift ) {
if ( pCurrentShader->IsDefault() ) {
- Sys_Printf( "ERROR: %s is not a shader, it's a texture.\n", pCurrentShader->getName() );
+ Sys_FPrintf( SYS_ERR, "ERROR: %s is not a shader, it's a texture.\n", pCurrentShader->getName() );
}
else{
ViewShader( pCurrentShader->getShaderFileName(), pCurrentShader->getName() );
@@ -1321,7 +1321,7 @@ void SelectTexture( int mx, int my, bool bShift, bool bFitScale ){
#ifdef _DEBUG
// this one is never supposed to be set as current one
if ( pAuxShader->IsColor() ) {
- Sys_Printf( "ERROR: unexpected pCurrentShader->IsColor() in SelectTexture\n" );
+ Sys_FPrintf( SYS_ERR, "ERROR: unexpected pCurrentShader->IsColor() in SelectTexture\n" );
}
#endif
// NOTE: IsColor is false, IsDefault the only remaining property
@@ -1701,7 +1701,7 @@ void TexWnd::OnSize( int cx, int cy ){
void TexWnd::OnExpose() {
int nOld = g_qeglobals.d_texturewin.m_nTotalHeight;
if ( !MakeCurrent() ) {
- Sys_Printf( "ERROR: glXMakeCurrent failed..\n " );
+ Sys_FPrintf( SYS_ERR, "ERROR: glXMakeCurrent failed..\n " );
Sys_Printf( "Please restart Radiant if the Texture view is not working\n" );
}
else
diff --git a/radiant/ui.cpp b/radiant/ui.cpp
index 2289bdd6..973f15b7 100644
--- a/radiant/ui.cpp
+++ b/radiant/ui.cpp
@@ -170,7 +170,7 @@ void WINAPI QERApp_UnHookWindow( IWindowListener* pListen ){
}
}
#ifdef _DEBUG
- Sys_Printf( "WARNING: IWindowListener not found in QERApp_UnHookWindow\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: IWindowListener not found in QERApp_UnHookWindow\n" );
#endif
}
@@ -198,7 +198,7 @@ bool DispatchOnLButtonUp( guint32 nFlags, int x, int y ){
void WINAPI QERApp_HookListener( IListener* pListen, int Msg ){
#ifdef _DEBUG
if ( Msg >= RADIANT_MSGCOUNT ) {
- Sys_Printf( "ERROR: bad index in QERApp_HookListener\n" );
+ Sys_FPrintf( SYS_ERR, "ERROR: bad index in QERApp_HookListener\n" );
return;
}
#endif
@@ -221,7 +221,7 @@ int WINAPI QERApp_UnHookListener( IListener* pListen ){
void DispatchRadiantMsg( int Msg ){
#ifdef _DEBUG
if ( Msg >= RADIANT_MSGCOUNT ) {
- Sys_Printf( "ERROR: bad index in DispatchRadiantMsg\n" );
+ Sys_FPrintf( SYS_ERR, "ERROR: bad index in DispatchRadiantMsg\n" );
return;
}
#endif
diff --git a/radiant/undo.cpp b/radiant/undo.cpp
index f56a65b6..c5e9de70 100644
--- a/radiant/undo.cpp
+++ b/radiant/undo.cpp
@@ -227,7 +227,7 @@ void Undo_GeneralStart( const char *operation ){
if ( g_lastundo ) {
if ( !g_lastundo->done ) {
- Sys_Printf( "Undo_Start: WARNING last undo not finished.\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING last undo not finished.\n" );
}
}
@@ -363,7 +363,7 @@ void Undo_AddBrush( brush_t *pBrush ){
return;
}
if ( g_lastundo->entitylist.next != &g_lastundo->entitylist ) {
- Sys_Printf( "Undo_AddBrushList: WARNING adding brushes after entity.\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING adding brushes after entity.\n" );
}
//if the brush is already in the undo
if ( Undo_BrushInUndo( g_lastundo, pBrush ) ) {
@@ -406,7 +406,7 @@ void Undo_AddBrushList( brush_t *brushlist ){
return;
}
if ( g_lastundo->entitylist.next != &g_lastundo->entitylist ) {
- Sys_Printf( "Undo_AddBrushList: WARNING adding brushes after entity.\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING adding brushes after entity.\n" );
}
//copy the brushes to the undo
for ( pBrush = brushlist->next ; pBrush != NULL && pBrush != brushlist; pBrush = pBrush->next )
@@ -626,7 +626,7 @@ void Undo_Undo( qboolean bSilent ){
return;
}
if ( !g_lastundo->done ) {
- Sys_Printf( "Undo_Undo: WARNING: last undo not yet finished!\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: last undo not yet finished!\n" );
}
// get the last undo
undo = g_lastundo;
@@ -801,7 +801,7 @@ void Undo_Redo( void ){
}
if ( g_lastundo ) {
if ( !g_lastundo->done ) {
- Sys_Printf( "WARNING: last undo not finished.\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: last undo not finished.\n" );
}
}
// get the last redo
diff --git a/radiant/watchbsp.cpp b/radiant/watchbsp.cpp
index 31b88d40..0e0c9c87 100644
--- a/radiant/watchbsp.cpp
+++ b/radiant/watchbsp.cpp
@@ -150,7 +150,7 @@ static void saxEndElement( message_info_t *data, const xmlChar *name ) {
}
if ( data->recurse == data->stop_depth ) {
#ifdef _DEBUG
- Sys_Printf( "Received error msg .. shutting down..\n" );
+ Sys_FPrintf( SYS_ERR, "ERROR: Received error msg .. shutting down..\n" );
#endif
// tell there has been an error
if ( g_pParentWnd->GetWatchBSP()->HasBSPPlugin() ) {
@@ -358,7 +358,7 @@ void CWatchBSP::Reset(){
bool CWatchBSP::SetupListening(){
#ifdef _DEBUG
if ( m_pListenSocket ) {
- Sys_Printf( "ERROR: m_pListenSocket != NULL in CWatchBSP::SetupListening\n" );
+ Sys_FPrintf( SYS_ERR, "ERROR: m_pListenSocket != NULL in CWatchBSP::SetupListening\n" );
return false;
}
#endif
@@ -442,7 +442,7 @@ void CWatchBSP::RoutineProcessing(){
#ifdef _DEBUG
// some debug checks
if ( !m_pListenSocket ) {
- Sys_Printf( "ERROR: m_pListenSocket == NULL in CWatchBSP::RoutineProcessing EBeginStep state\n" );
+ Sys_FPrintf( SYS_ERR, "ERROR: m_pListenSocket == NULL in CWatchBSP::RoutineProcessing EBeginStep state\n" );
Reset();
break;
}
@@ -462,7 +462,7 @@ void CWatchBSP::RoutineProcessing(){
#ifdef _DEBUG
// some debug checks
if ( !m_pInSocket ) {
- Sys_Printf( "ERROR: m_pInSocket == NULL in CWatchBSP::RoutineProcessing EWatching state\n" );
+ Sys_FPrintf( SYS_ERR, "ERROR: m_pInSocket == NULL in CWatchBSP::RoutineProcessing EWatching state\n" );
Reset();
break;
}
@@ -478,7 +478,7 @@ void CWatchBSP::RoutineProcessing(){
// (no use on windows)
ret = select( m_pInSocket->socket + 1, &readfds, NULL, NULL, &tout );
if ( ret == SOCKET_ERROR ) {
- Sys_Printf( "WARNING: SOCKET_ERROR in CWatchBSP::RoutineProcessing\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: SOCKET_ERROR in CWatchBSP::RoutineProcessing\n" );
Sys_Printf( "Terminating the connection.\n" );
Reset();
break;
diff --git a/radiant/xywindow.cpp b/radiant/xywindow.cpp
index 72d1c53a..53c58ffe 100644
--- a/radiant/xywindow.cpp
+++ b/radiant/xywindow.cpp
@@ -3195,7 +3195,7 @@ void XYWnd::OnCreate(){
void XYWnd::OnExpose(){
bool bPaint = true;
if ( !MakeCurrent() ) {
- Sys_Printf( "ERROR: glXMakeCurrent failed.. Error:%i\n",qglGetError() );
+ Sys_FPrintf( SYS_ERR, "ERROR: glXMakeCurrent failed.. Error:%i\n",qglGetError() );
Sys_Printf( "Please restart Radiant if the Map view is not working\n" );
bPaint = false;
}
diff --git a/radiant/zwindow.cpp b/radiant/zwindow.cpp
index 12e510a1..810ea526 100644
--- a/radiant/zwindow.cpp
+++ b/radiant/zwindow.cpp
@@ -90,7 +90,7 @@ void ZWnd::OnMouseMove( guint32 nFlags, int pointx, int pointy ){
void ZWnd::OnExpose(){
if ( !MakeCurrent() ) {
- Sys_Printf( "ERROR: wglMakeCurrent failed..\n " );
+ Sys_FPrintf( SYS_ERR, "ERROR: wglMakeCurrent failed..\n " );
Sys_Printf( "Please restart Radiant if the Z view is not working\n" );
}
else
diff --git a/regression_tests/q3map2/model_clipping_45_degrees/models/mapobjects/wedges/wedge_45.ase b/regression_tests/q3map2/model_clipping_45_degrees/models/mapobjects/wedges/wedge_45.ase
index dfb0d41d..dc338837 100644
--- a/regression_tests/q3map2/model_clipping_45_degrees/models/mapobjects/wedges/wedge_45.ase
+++ b/regression_tests/q3map2/model_clipping_45_degrees/models/mapobjects/wedges/wedge_45.ase
@@ -1,368 +1,368 @@
-*3DSMAX_ASCIIEXPORT 200
-*COMMENT "Generated by Q3Map2 (ydnar) -convert -format ase"
-*SCENE {
- *SCENE_FILENAME "wedge_45.bsp"
- *SCENE_FIRSTFRAME 0
- *SCENE_LASTFRAME 100
- *SCENE_FRAMESPEED 30
- *SCENE_TICKSPERFRAME 160
- *SCENE_BACKGROUND_STATIC 0.0000 0.0000 0.0000
- *SCENE_AMBIENT_STATIC 0.0000 0.0000 0.0000
-}
-*MATERIAL_LIST {
- *MATERIAL_COUNT 2
- *MATERIAL 0 {
- *MATERIAL_NAME "textures/radiant_regression_tests/tile_model"
- *MATERIAL_CLASS "Standard"
- *MATERIAL_DIFFUSE 1.000000 1.000000 0.833333
- *MATERIAL_SHADING Phong
- *MAP_DIFFUSE {
- *MAP_NAME "textures/radiant_regression_tests/tile_model"
- *MAP_CLASS "Bitmap"
- *MAP_SUBNO 1
- *MAP_AMOUNT 1.0
- *MAP_TYPE Screen
- *BITMAP "..\textures\radiant_regression_tests\tile_model.tga"
- *BITMAP_FILTER Pyramidal
- }
- }
- *MATERIAL 1 {
- *MATERIAL_NAME "noshader"
- *MATERIAL_CLASS "Standard"
- *MATERIAL_DIFFUSE 1.000000 1.000000 1.000000
- *MATERIAL_SHADING Phong
- *MAP_DIFFUSE {
- *MAP_NAME "noshader"
- *MAP_CLASS "Bitmap"
- *MAP_SUBNO 1
- *MAP_AMOUNT 1.0
- *MAP_TYPE Screen
- *BITMAP "..\noshader.tga"
- *BITMAP_FILTER Pyramidal
- }
- }
-}
-*GEOMOBJECT {
- *NODE_NAME "mat0model0surf0"
- *NODE_TM {
- *NODE_NAME "mat0model0surf0"
- *INHERIT_POS 0 0 0
- *INHERIT_ROT 0 0 0
- *INHERIT_SCL 0 0 0
- *TM_ROW0 1.0 0 0
- *TM_ROW1 0 1.0 0
- *TM_ROW2 0 0 1.0
- *TM_ROW3 0 0 0
- *TM_POS 0.000000 0.000000 0.000000
- }
- *MESH {
- *TIMEVALUE 0
- *MESH_NUMVERTEX 4
- *MESH_NUMFACES 2
- *COMMENT "SURFACETYPE MST_PLANAR"
- *MESH_VERTEX_LIST {
- *MESH_VERTEX 0 128.000000 0.000000 0.000000
- *MESH_VERTEX 1 64.000000 0.000000 64.000000
- *MESH_VERTEX 2 128.000000 128.000000 0.000000
- *MESH_VERTEX 3 64.000000 128.000000 64.000000
- }
- *MESH_NORMALS {
- *MESH_FACENORMAL 0 0.707107 0.000000 0.707107
- *MESH_FACENORMAL 1 0.707107 0.000000 0.707107
- *MESH_VERTEXNORMAL 0 0.707107 0.000000 0.707107
- *MESH_VERTEXNORMAL 1 0.707107 0.000000 0.707107
- *MESH_VERTEXNORMAL 2 0.707107 0.000000 0.707107
- *MESH_VERTEXNORMAL 3 0.707107 0.000000 0.707107
- }
- *MESH_FACE_LIST {
- *MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
- *MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
- }
- *MESH_NUMTVERTEX 4
- *MESH_TVERTLIST {
- *MESH_TVERT 0 1.000000 -1.000000 1.000000
- *MESH_TVERT 1 -1.000000 -1.000000 1.000000
- *MESH_TVERT 2 1.000000 3.000000 1.000000
- *MESH_TVERT 3 -1.000000 3.000000 1.000000
- }
- *MESH_NUMTVFACES 2
- *MESH_TFACELIST {
- *MESH_TFACE 0 0 2 1
- *MESH_TFACE 1 2 3 1
- }
- }
- *PROP_MOTIONBLUR 0
- *PROP_CASTSHADOW 1
- *PROP_RECVSHADOW 1
- *MATERIAL_REF 0
-}
-*GEOMOBJECT {
- *NODE_NAME "mat0model0surf1"
- *NODE_TM {
- *NODE_NAME "mat0model0surf1"
- *INHERIT_POS 0 0 0
- *INHERIT_ROT 0 0 0
- *INHERIT_SCL 0 0 0
- *TM_ROW0 1.0 0 0
- *TM_ROW1 0 1.0 0
- *TM_ROW2 0 0 1.0
- *TM_ROW3 0 0 0
- *TM_POS 0.000000 0.000000 0.000000
- }
- *MESH {
- *TIMEVALUE 0
- *MESH_NUMVERTEX 4
- *MESH_NUMFACES 2
- *COMMENT "SURFACETYPE MST_PLANAR"
- *MESH_VERTEX_LIST {
- *MESH_VERTEX 0 0.000000 128.000000 64.000000
- *MESH_VERTEX 1 0.000000 128.000000 0.000000
- *MESH_VERTEX 2 64.000000 128.000000 64.000000
- *MESH_VERTEX 3 128.000000 128.000000 0.000000
- }
- *MESH_NORMALS {
- *MESH_FACENORMAL 0 0.707107 0.000000 0.707107
- *MESH_FACENORMAL 1 0.707107 0.000000 0.707107
- *MESH_VERTEXNORMAL 0 0.000000 1.000000 0.000000
- *MESH_VERTEXNORMAL 1 0.000000 1.000000 0.000000
- *MESH_VERTEXNORMAL 2 0.000000 1.000000 0.000000
- *MESH_VERTEXNORMAL 3 0.000000 1.000000 0.000000
- }
- *MESH_FACE_LIST {
- *MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
- *MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
- }
- *MESH_NUMTVERTEX 4
- *MESH_TVERTLIST {
- *MESH_TVERT 0 -2.000000 2.000000 1.000000
- *MESH_TVERT 1 -2.000000 0.000000 1.000000
- *MESH_TVERT 2 0.000000 2.000000 1.000000
- *MESH_TVERT 3 2.000000 0.000000 1.000000
- }
- *MESH_NUMTVFACES 2
- *MESH_TFACELIST {
- *MESH_TFACE 0 0 2 1
- *MESH_TFACE 1 2 3 1
- }
- }
- *PROP_MOTIONBLUR 0
- *PROP_CASTSHADOW 1
- *PROP_RECVSHADOW 1
- *MATERIAL_REF 0
-}
-*GEOMOBJECT {
- *NODE_NAME "mat0model0surf2"
- *NODE_TM {
- *NODE_NAME "mat0model0surf2"
- *INHERIT_POS 0 0 0
- *INHERIT_ROT 0 0 0
- *INHERIT_SCL 0 0 0
- *TM_ROW0 1.0 0 0
- *TM_ROW1 0 1.0 0
- *TM_ROW2 0 0 1.0
- *TM_ROW3 0 0 0
- *TM_POS 0.000000 0.000000 0.000000
- }
- *MESH {
- *TIMEVALUE 0
- *MESH_NUMVERTEX 4
- *MESH_NUMFACES 2
- *COMMENT "SURFACETYPE MST_PLANAR"
- *MESH_VERTEX_LIST {
- *MESH_VERTEX 0 64.000000 0.000000 64.000000
- *MESH_VERTEX 1 0.000000 0.000000 64.000000
- *MESH_VERTEX 2 64.000000 128.000000 64.000000
- *MESH_VERTEX 3 0.000000 128.000000 64.000000
- }
- *MESH_NORMALS {
- *MESH_FACENORMAL 0 0.707107 0.000000 0.707107
- *MESH_FACENORMAL 1 0.707107 0.000000 0.707107
- *MESH_VERTEXNORMAL 0 0.000000 0.000000 1.000000
- *MESH_VERTEXNORMAL 1 0.000000 0.000000 1.000000
- *MESH_VERTEXNORMAL 2 0.000000 0.000000 1.000000
- *MESH_VERTEXNORMAL 3 0.000000 0.000000 1.000000
- }
- *MESH_FACE_LIST {
- *MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
- *MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
- }
- *MESH_NUMTVERTEX 4
- *MESH_TVERTLIST {
- *MESH_TVERT 0 1.000000 -1.000000 1.000000
- *MESH_TVERT 1 -1.000000 -1.000000 1.000000
- *MESH_TVERT 2 1.000000 3.000000 1.000000
- *MESH_TVERT 3 -1.000000 3.000000 1.000000
- }
- *MESH_NUMTVFACES 2
- *MESH_TFACELIST {
- *MESH_TFACE 0 0 2 1
- *MESH_TFACE 1 2 3 1
- }
- }
- *PROP_MOTIONBLUR 0
- *PROP_CASTSHADOW 1
- *PROP_RECVSHADOW 1
- *MATERIAL_REF 0
-}
-*GEOMOBJECT {
- *NODE_NAME "mat0model0surf3"
- *NODE_TM {
- *NODE_NAME "mat0model0surf3"
- *INHERIT_POS 0 0 0
- *INHERIT_ROT 0 0 0
- *INHERIT_SCL 0 0 0
- *TM_ROW0 1.0 0 0
- *TM_ROW1 0 1.0 0
- *TM_ROW2 0 0 1.0
- *TM_ROW3 0 0 0
- *TM_POS 0.000000 0.000000 0.000000
- }
- *MESH {
- *TIMEVALUE 0
- *MESH_NUMVERTEX 4
- *MESH_NUMFACES 2
- *COMMENT "SURFACETYPE MST_PLANAR"
- *MESH_VERTEX_LIST {
- *MESH_VERTEX 0 0.000000 0.000000 64.000000
- *MESH_VERTEX 1 0.000000 0.000000 0.000000
- *MESH_VERTEX 2 0.000000 128.000000 64.000000
- *MESH_VERTEX 3 0.000000 128.000000 0.000000
- }
- *MESH_NORMALS {
- *MESH_FACENORMAL 0 0.707107 0.000000 0.707107
- *MESH_FACENORMAL 1 0.707107 0.000000 0.707107
- *MESH_VERTEXNORMAL 0 -1.000000 0.000000 0.000000
- *MESH_VERTEXNORMAL 1 -1.000000 0.000000 0.000000
- *MESH_VERTEXNORMAL 2 -1.000000 0.000000 0.000000
- *MESH_VERTEXNORMAL 3 -1.000000 0.000000 0.000000
- }
- *MESH_FACE_LIST {
- *MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
- *MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
- }
- *MESH_NUMTVERTEX 4
- *MESH_TVERTLIST {
- *MESH_TVERT 0 -2.000000 2.000000 1.000000
- *MESH_TVERT 1 -2.000000 0.000000 1.000000
- *MESH_TVERT 2 2.000000 2.000000 1.000000
- *MESH_TVERT 3 2.000000 0.000000 1.000000
- }
- *MESH_NUMTVFACES 2
- *MESH_TFACELIST {
- *MESH_TFACE 0 0 2 1
- *MESH_TFACE 1 2 3 1
- }
- }
- *PROP_MOTIONBLUR 0
- *PROP_CASTSHADOW 1
- *PROP_RECVSHADOW 1
- *MATERIAL_REF 0
-}
-*GEOMOBJECT {
- *NODE_NAME "mat0model0surf4"
- *NODE_TM {
- *NODE_NAME "mat0model0surf4"
- *INHERIT_POS 0 0 0
- *INHERIT_ROT 0 0 0
- *INHERIT_SCL 0 0 0
- *TM_ROW0 1.0 0 0
- *TM_ROW1 0 1.0 0
- *TM_ROW2 0 0 1.0
- *TM_ROW3 0 0 0
- *TM_POS 0.000000 0.000000 0.000000
- }
- *MESH {
- *TIMEVALUE 0
- *MESH_NUMVERTEX 4
- *MESH_NUMFACES 2
- *COMMENT "SURFACETYPE MST_PLANAR"
- *MESH_VERTEX_LIST {
- *MESH_VERTEX 0 128.000000 0.000000 0.000000
- *MESH_VERTEX 1 0.000000 0.000000 0.000000
- *MESH_VERTEX 2 64.000000 0.000000 64.000000
- *MESH_VERTEX 3 0.000000 0.000000 64.000000
- }
- *MESH_NORMALS {
- *MESH_FACENORMAL 0 0.707107 0.000000 0.707107
- *MESH_FACENORMAL 1 0.707107 0.000000 0.707107
- *MESH_VERTEXNORMAL 0 0.000000 -1.000000 0.000000
- *MESH_VERTEXNORMAL 1 0.000000 -1.000000 0.000000
- *MESH_VERTEXNORMAL 2 0.000000 -1.000000 0.000000
- *MESH_VERTEXNORMAL 3 0.000000 -1.000000 0.000000
- }
- *MESH_FACE_LIST {
- *MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
- *MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
- }
- *MESH_NUMTVERTEX 4
- *MESH_TVERTLIST {
- *MESH_TVERT 0 2.000000 0.000000 1.000000
- *MESH_TVERT 1 -2.000000 0.000000 1.000000
- *MESH_TVERT 2 0.000000 2.000000 1.000000
- *MESH_TVERT 3 -2.000000 2.000000 1.000000
- }
- *MESH_NUMTVFACES 2
- *MESH_TFACELIST {
- *MESH_TFACE 0 0 2 1
- *MESH_TFACE 1 2 3 1
- }
- }
- *PROP_MOTIONBLUR 0
- *PROP_CASTSHADOW 1
- *PROP_RECVSHADOW 1
- *MATERIAL_REF 0
-}
-*GEOMOBJECT {
- *NODE_NAME "mat0model0surf5"
- *NODE_TM {
- *NODE_NAME "mat0model0surf5"
- *INHERIT_POS 0 0 0
- *INHERIT_ROT 0 0 0
- *INHERIT_SCL 0 0 0
- *TM_ROW0 1.0 0 0
- *TM_ROW1 0 1.0 0
- *TM_ROW2 0 0 1.0
- *TM_ROW3 0 0 0
- *TM_POS 0.000000 0.000000 0.000000
- }
- *MESH {
- *TIMEVALUE 0
- *MESH_NUMVERTEX 4
- *MESH_NUMFACES 2
- *COMMENT "SURFACETYPE MST_PLANAR"
- *MESH_VERTEX_LIST {
- *MESH_VERTEX 0 0.000000 128.000000 0.000000
- *MESH_VERTEX 1 0.000000 0.000000 0.000000
- *MESH_VERTEX 2 128.000000 128.000000 0.000000
- *MESH_VERTEX 3 128.000000 0.000000 0.000000
- }
- *MESH_NORMALS {
- *MESH_FACENORMAL 0 0.707107 0.000000 0.707107
- *MESH_FACENORMAL 1 0.707107 0.000000 0.707107
- *MESH_VERTEXNORMAL 0 0.000000 0.000000 -1.000000
- *MESH_VERTEXNORMAL 1 0.000000 0.000000 -1.000000
- *MESH_VERTEXNORMAL 2 0.000000 0.000000 -1.000000
- *MESH_VERTEXNORMAL 3 0.000000 0.000000 -1.000000
- }
- *MESH_FACE_LIST {
- *MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
- *MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
- }
- *MESH_NUMTVERTEX 4
- *MESH_TVERTLIST {
- *MESH_TVERT 0 -2.000000 3.000000 1.000000
- *MESH_TVERT 1 -2.000000 -1.000000 1.000000
- *MESH_TVERT 2 2.000000 3.000000 1.000000
- *MESH_TVERT 3 2.000000 -1.000000 1.000000
- }
- *MESH_NUMTVFACES 2
- *MESH_TFACELIST {
- *MESH_TFACE 0 0 2 1
- *MESH_TFACE 1 2 3 1
- }
- }
- *PROP_MOTIONBLUR 0
- *PROP_CASTSHADOW 1
- *PROP_RECVSHADOW 1
- *MATERIAL_REF 0
-}
+*3DSMAX_ASCIIEXPORT 200
+*COMMENT "Generated by Q3Map2 (ydnar) -convert -format ase"
+*SCENE {
+ *SCENE_FILENAME "wedge_45.bsp"
+ *SCENE_FIRSTFRAME 0
+ *SCENE_LASTFRAME 100
+ *SCENE_FRAMESPEED 30
+ *SCENE_TICKSPERFRAME 160
+ *SCENE_BACKGROUND_STATIC 0.0000 0.0000 0.0000
+ *SCENE_AMBIENT_STATIC 0.0000 0.0000 0.0000
+}
+*MATERIAL_LIST {
+ *MATERIAL_COUNT 2
+ *MATERIAL 0 {
+ *MATERIAL_NAME "textures/radiant_regression_tests/tile_model"
+ *MATERIAL_CLASS "Standard"
+ *MATERIAL_DIFFUSE 1.000000 1.000000 0.833333
+ *MATERIAL_SHADING Phong
+ *MAP_DIFFUSE {
+ *MAP_NAME "textures/radiant_regression_tests/tile_model"
+ *MAP_CLASS "Bitmap"
+ *MAP_SUBNO 1
+ *MAP_AMOUNT 1.0
+ *MAP_TYPE Screen
+ *BITMAP "..\textures\radiant_regression_tests\tile_model.tga"
+ *BITMAP_FILTER Pyramidal
+ }
+ }
+ *MATERIAL 1 {
+ *MATERIAL_NAME "noshader"
+ *MATERIAL_CLASS "Standard"
+ *MATERIAL_DIFFUSE 1.000000 1.000000 1.000000
+ *MATERIAL_SHADING Phong
+ *MAP_DIFFUSE {
+ *MAP_NAME "noshader"
+ *MAP_CLASS "Bitmap"
+ *MAP_SUBNO 1
+ *MAP_AMOUNT 1.0
+ *MAP_TYPE Screen
+ *BITMAP "..\noshader.tga"
+ *BITMAP_FILTER Pyramidal
+ }
+ }
+}
+*GEOMOBJECT {
+ *NODE_NAME "mat0model0surf0"
+ *NODE_TM {
+ *NODE_NAME "mat0model0surf0"
+ *INHERIT_POS 0 0 0
+ *INHERIT_ROT 0 0 0
+ *INHERIT_SCL 0 0 0
+ *TM_ROW0 1.0 0 0
+ *TM_ROW1 0 1.0 0
+ *TM_ROW2 0 0 1.0
+ *TM_ROW3 0 0 0
+ *TM_POS 0.000000 0.000000 0.000000
+ }
+ *MESH {
+ *TIMEVALUE 0
+ *MESH_NUMVERTEX 4
+ *MESH_NUMFACES 2
+ *COMMENT "SURFACETYPE MST_PLANAR"
+ *MESH_VERTEX_LIST {
+ *MESH_VERTEX 0 128.000000 0.000000 0.000000
+ *MESH_VERTEX 1 64.000000 0.000000 64.000000
+ *MESH_VERTEX 2 128.000000 128.000000 0.000000
+ *MESH_VERTEX 3 64.000000 128.000000 64.000000
+ }
+ *MESH_NORMALS {
+ *MESH_FACENORMAL 0 0.707107 0.000000 0.707107
+ *MESH_FACENORMAL 1 0.707107 0.000000 0.707107
+ *MESH_VERTEXNORMAL 0 0.707107 0.000000 0.707107
+ *MESH_VERTEXNORMAL 1 0.707107 0.000000 0.707107
+ *MESH_VERTEXNORMAL 2 0.707107 0.000000 0.707107
+ *MESH_VERTEXNORMAL 3 0.707107 0.000000 0.707107
+ }
+ *MESH_FACE_LIST {
+ *MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
+ *MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
+ }
+ *MESH_NUMTVERTEX 4
+ *MESH_TVERTLIST {
+ *MESH_TVERT 0 1.000000 -1.000000 1.000000
+ *MESH_TVERT 1 -1.000000 -1.000000 1.000000
+ *MESH_TVERT 2 1.000000 3.000000 1.000000
+ *MESH_TVERT 3 -1.000000 3.000000 1.000000
+ }
+ *MESH_NUMTVFACES 2
+ *MESH_TFACELIST {
+ *MESH_TFACE 0 0 2 1
+ *MESH_TFACE 1 2 3 1
+ }
+ }
+ *PROP_MOTIONBLUR 0
+ *PROP_CASTSHADOW 1
+ *PROP_RECVSHADOW 1
+ *MATERIAL_REF 0
+}
+*GEOMOBJECT {
+ *NODE_NAME "mat0model0surf1"
+ *NODE_TM {
+ *NODE_NAME "mat0model0surf1"
+ *INHERIT_POS 0 0 0
+ *INHERIT_ROT 0 0 0
+ *INHERIT_SCL 0 0 0
+ *TM_ROW0 1.0 0 0
+ *TM_ROW1 0 1.0 0
+ *TM_ROW2 0 0 1.0
+ *TM_ROW3 0 0 0
+ *TM_POS 0.000000 0.000000 0.000000
+ }
+ *MESH {
+ *TIMEVALUE 0
+ *MESH_NUMVERTEX 4
+ *MESH_NUMFACES 2
+ *COMMENT "SURFACETYPE MST_PLANAR"
+ *MESH_VERTEX_LIST {
+ *MESH_VERTEX 0 0.000000 128.000000 64.000000
+ *MESH_VERTEX 1 0.000000 128.000000 0.000000
+ *MESH_VERTEX 2 64.000000 128.000000 64.000000
+ *MESH_VERTEX 3 128.000000 128.000000 0.000000
+ }
+ *MESH_NORMALS {
+ *MESH_FACENORMAL 0 0.707107 0.000000 0.707107
+ *MESH_FACENORMAL 1 0.707107 0.000000 0.707107
+ *MESH_VERTEXNORMAL 0 0.000000 1.000000 0.000000
+ *MESH_VERTEXNORMAL 1 0.000000 1.000000 0.000000
+ *MESH_VERTEXNORMAL 2 0.000000 1.000000 0.000000
+ *MESH_VERTEXNORMAL 3 0.000000 1.000000 0.000000
+ }
+ *MESH_FACE_LIST {
+ *MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
+ *MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
+ }
+ *MESH_NUMTVERTEX 4
+ *MESH_TVERTLIST {
+ *MESH_TVERT 0 -2.000000 2.000000 1.000000
+ *MESH_TVERT 1 -2.000000 0.000000 1.000000
+ *MESH_TVERT 2 0.000000 2.000000 1.000000
+ *MESH_TVERT 3 2.000000 0.000000 1.000000
+ }
+ *MESH_NUMTVFACES 2
+ *MESH_TFACELIST {
+ *MESH_TFACE 0 0 2 1
+ *MESH_TFACE 1 2 3 1
+ }
+ }
+ *PROP_MOTIONBLUR 0
+ *PROP_CASTSHADOW 1
+ *PROP_RECVSHADOW 1
+ *MATERIAL_REF 0
+}
+*GEOMOBJECT {
+ *NODE_NAME "mat0model0surf2"
+ *NODE_TM {
+ *NODE_NAME "mat0model0surf2"
+ *INHERIT_POS 0 0 0
+ *INHERIT_ROT 0 0 0
+ *INHERIT_SCL 0 0 0
+ *TM_ROW0 1.0 0 0
+ *TM_ROW1 0 1.0 0
+ *TM_ROW2 0 0 1.0
+ *TM_ROW3 0 0 0
+ *TM_POS 0.000000 0.000000 0.000000
+ }
+ *MESH {
+ *TIMEVALUE 0
+ *MESH_NUMVERTEX 4
+ *MESH_NUMFACES 2
+ *COMMENT "SURFACETYPE MST_PLANAR"
+ *MESH_VERTEX_LIST {
+ *MESH_VERTEX 0 64.000000 0.000000 64.000000
+ *MESH_VERTEX 1 0.000000 0.000000 64.000000
+ *MESH_VERTEX 2 64.000000 128.000000 64.000000
+ *MESH_VERTEX 3 0.000000 128.000000 64.000000
+ }
+ *MESH_NORMALS {
+ *MESH_FACENORMAL 0 0.707107 0.000000 0.707107
+ *MESH_FACENORMAL 1 0.707107 0.000000 0.707107
+ *MESH_VERTEXNORMAL 0 0.000000 0.000000 1.000000
+ *MESH_VERTEXNORMAL 1 0.000000 0.000000 1.000000
+ *MESH_VERTEXNORMAL 2 0.000000 0.000000 1.000000
+ *MESH_VERTEXNORMAL 3 0.000000 0.000000 1.000000
+ }
+ *MESH_FACE_LIST {
+ *MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
+ *MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
+ }
+ *MESH_NUMTVERTEX 4
+ *MESH_TVERTLIST {
+ *MESH_TVERT 0 1.000000 -1.000000 1.000000
+ *MESH_TVERT 1 -1.000000 -1.000000 1.000000
+ *MESH_TVERT 2 1.000000 3.000000 1.000000
+ *MESH_TVERT 3 -1.000000 3.000000 1.000000
+ }
+ *MESH_NUMTVFACES 2
+ *MESH_TFACELIST {
+ *MESH_TFACE 0 0 2 1
+ *MESH_TFACE 1 2 3 1
+ }
+ }
+ *PROP_MOTIONBLUR 0
+ *PROP_CASTSHADOW 1
+ *PROP_RECVSHADOW 1
+ *MATERIAL_REF 0
+}
+*GEOMOBJECT {
+ *NODE_NAME "mat0model0surf3"
+ *NODE_TM {
+ *NODE_NAME "mat0model0surf3"
+ *INHERIT_POS 0 0 0
+ *INHERIT_ROT 0 0 0
+ *INHERIT_SCL 0 0 0
+ *TM_ROW0 1.0 0 0
+ *TM_ROW1 0 1.0 0
+ *TM_ROW2 0 0 1.0
+ *TM_ROW3 0 0 0
+ *TM_POS 0.000000 0.000000 0.000000
+ }
+ *MESH {
+ *TIMEVALUE 0
+ *MESH_NUMVERTEX 4
+ *MESH_NUMFACES 2
+ *COMMENT "SURFACETYPE MST_PLANAR"
+ *MESH_VERTEX_LIST {
+ *MESH_VERTEX 0 0.000000 0.000000 64.000000
+ *MESH_VERTEX 1 0.000000 0.000000 0.000000
+ *MESH_VERTEX 2 0.000000 128.000000 64.000000
+ *MESH_VERTEX 3 0.000000 128.000000 0.000000
+ }
+ *MESH_NORMALS {
+ *MESH_FACENORMAL 0 0.707107 0.000000 0.707107
+ *MESH_FACENORMAL 1 0.707107 0.000000 0.707107
+ *MESH_VERTEXNORMAL 0 -1.000000 0.000000 0.000000
+ *MESH_VERTEXNORMAL 1 -1.000000 0.000000 0.000000
+ *MESH_VERTEXNORMAL 2 -1.000000 0.000000 0.000000
+ *MESH_VERTEXNORMAL 3 -1.000000 0.000000 0.000000
+ }
+ *MESH_FACE_LIST {
+ *MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
+ *MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
+ }
+ *MESH_NUMTVERTEX 4
+ *MESH_TVERTLIST {
+ *MESH_TVERT 0 -2.000000 2.000000 1.000000
+ *MESH_TVERT 1 -2.000000 0.000000 1.000000
+ *MESH_TVERT 2 2.000000 2.000000 1.000000
+ *MESH_TVERT 3 2.000000 0.000000 1.000000
+ }
+ *MESH_NUMTVFACES 2
+ *MESH_TFACELIST {
+ *MESH_TFACE 0 0 2 1
+ *MESH_TFACE 1 2 3 1
+ }
+ }
+ *PROP_MOTIONBLUR 0
+ *PROP_CASTSHADOW 1
+ *PROP_RECVSHADOW 1
+ *MATERIAL_REF 0
+}
+*GEOMOBJECT {
+ *NODE_NAME "mat0model0surf4"
+ *NODE_TM {
+ *NODE_NAME "mat0model0surf4"
+ *INHERIT_POS 0 0 0
+ *INHERIT_ROT 0 0 0
+ *INHERIT_SCL 0 0 0
+ *TM_ROW0 1.0 0 0
+ *TM_ROW1 0 1.0 0
+ *TM_ROW2 0 0 1.0
+ *TM_ROW3 0 0 0
+ *TM_POS 0.000000 0.000000 0.000000
+ }
+ *MESH {
+ *TIMEVALUE 0
+ *MESH_NUMVERTEX 4
+ *MESH_NUMFACES 2
+ *COMMENT "SURFACETYPE MST_PLANAR"
+ *MESH_VERTEX_LIST {
+ *MESH_VERTEX 0 128.000000 0.000000 0.000000
+ *MESH_VERTEX 1 0.000000 0.000000 0.000000
+ *MESH_VERTEX 2 64.000000 0.000000 64.000000
+ *MESH_VERTEX 3 0.000000 0.000000 64.000000
+ }
+ *MESH_NORMALS {
+ *MESH_FACENORMAL 0 0.707107 0.000000 0.707107
+ *MESH_FACENORMAL 1 0.707107 0.000000 0.707107
+ *MESH_VERTEXNORMAL 0 0.000000 -1.000000 0.000000
+ *MESH_VERTEXNORMAL 1 0.000000 -1.000000 0.000000
+ *MESH_VERTEXNORMAL 2 0.000000 -1.000000 0.000000
+ *MESH_VERTEXNORMAL 3 0.000000 -1.000000 0.000000
+ }
+ *MESH_FACE_LIST {
+ *MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
+ *MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
+ }
+ *MESH_NUMTVERTEX 4
+ *MESH_TVERTLIST {
+ *MESH_TVERT 0 2.000000 0.000000 1.000000
+ *MESH_TVERT 1 -2.000000 0.000000 1.000000
+ *MESH_TVERT 2 0.000000 2.000000 1.000000
+ *MESH_TVERT 3 -2.000000 2.000000 1.000000
+ }
+ *MESH_NUMTVFACES 2
+ *MESH_TFACELIST {
+ *MESH_TFACE 0 0 2 1
+ *MESH_TFACE 1 2 3 1
+ }
+ }
+ *PROP_MOTIONBLUR 0
+ *PROP_CASTSHADOW 1
+ *PROP_RECVSHADOW 1
+ *MATERIAL_REF 0
+}
+*GEOMOBJECT {
+ *NODE_NAME "mat0model0surf5"
+ *NODE_TM {
+ *NODE_NAME "mat0model0surf5"
+ *INHERIT_POS 0 0 0
+ *INHERIT_ROT 0 0 0
+ *INHERIT_SCL 0 0 0
+ *TM_ROW0 1.0 0 0
+ *TM_ROW1 0 1.0 0
+ *TM_ROW2 0 0 1.0
+ *TM_ROW3 0 0 0
+ *TM_POS 0.000000 0.000000 0.000000
+ }
+ *MESH {
+ *TIMEVALUE 0
+ *MESH_NUMVERTEX 4
+ *MESH_NUMFACES 2
+ *COMMENT "SURFACETYPE MST_PLANAR"
+ *MESH_VERTEX_LIST {
+ *MESH_VERTEX 0 0.000000 128.000000 0.000000
+ *MESH_VERTEX 1 0.000000 0.000000 0.000000
+ *MESH_VERTEX 2 128.000000 128.000000 0.000000
+ *MESH_VERTEX 3 128.000000 0.000000 0.000000
+ }
+ *MESH_NORMALS {
+ *MESH_FACENORMAL 0 0.707107 0.000000 0.707107
+ *MESH_FACENORMAL 1 0.707107 0.000000 0.707107
+ *MESH_VERTEXNORMAL 0 0.000000 0.000000 -1.000000
+ *MESH_VERTEXNORMAL 1 0.000000 0.000000 -1.000000
+ *MESH_VERTEXNORMAL 2 0.000000 0.000000 -1.000000
+ *MESH_VERTEXNORMAL 3 0.000000 0.000000 -1.000000
+ }
+ *MESH_FACE_LIST {
+ *MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
+ *MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
+ }
+ *MESH_NUMTVERTEX 4
+ *MESH_TVERTLIST {
+ *MESH_TVERT 0 -2.000000 3.000000 1.000000
+ *MESH_TVERT 1 -2.000000 -1.000000 1.000000
+ *MESH_TVERT 2 2.000000 3.000000 1.000000
+ *MESH_TVERT 3 2.000000 -1.000000 1.000000
+ }
+ *MESH_NUMTVFACES 2
+ *MESH_TFACELIST {
+ *MESH_TFACE 0 0 2 1
+ *MESH_TFACE 1 2 3 1
+ }
+ }
+ *PROP_MOTIONBLUR 0
+ *PROP_CASTSHADOW 1
+ *PROP_RECVSHADOW 1
+ *MATERIAL_REF 0
+}
diff --git a/regression_tests/q3map2/model_clipping_45_degrees/models/mapobjects/wedges/wedge_shallow.ase b/regression_tests/q3map2/model_clipping_45_degrees/models/mapobjects/wedges/wedge_shallow.ase
index 4e23fd49..ec5987f6 100644
--- a/regression_tests/q3map2/model_clipping_45_degrees/models/mapobjects/wedges/wedge_shallow.ase
+++ b/regression_tests/q3map2/model_clipping_45_degrees/models/mapobjects/wedges/wedge_shallow.ase
@@ -1,368 +1,368 @@
-*3DSMAX_ASCIIEXPORT 200
-*COMMENT "Generated by Q3Map2 (ydnar) -convert -format ase"
-*SCENE {
- *SCENE_FILENAME "wedge_shallow.bsp"
- *SCENE_FIRSTFRAME 0
- *SCENE_LASTFRAME 100
- *SCENE_FRAMESPEED 30
- *SCENE_TICKSPERFRAME 160
- *SCENE_BACKGROUND_STATIC 0.0000 0.0000 0.0000
- *SCENE_AMBIENT_STATIC 0.0000 0.0000 0.0000
-}
-*MATERIAL_LIST {
- *MATERIAL_COUNT 2
- *MATERIAL 0 {
- *MATERIAL_NAME "textures/radiant_regression_tests/tile_model"
- *MATERIAL_CLASS "Standard"
- *MATERIAL_DIFFUSE 1.000000 1.000000 0.833333
- *MATERIAL_SHADING Phong
- *MAP_DIFFUSE {
- *MAP_NAME "textures/radiant_regression_tests/tile_model"
- *MAP_CLASS "Bitmap"
- *MAP_SUBNO 1
- *MAP_AMOUNT 1.0
- *MAP_TYPE Screen
- *BITMAP "..\textures\radiant_regression_tests\tile_model.tga"
- *BITMAP_FILTER Pyramidal
- }
- }
- *MATERIAL 1 {
- *MATERIAL_NAME "noshader"
- *MATERIAL_CLASS "Standard"
- *MATERIAL_DIFFUSE 1.000000 1.000000 1.000000
- *MATERIAL_SHADING Phong
- *MAP_DIFFUSE {
- *MAP_NAME "noshader"
- *MAP_CLASS "Bitmap"
- *MAP_SUBNO 1
- *MAP_AMOUNT 1.0
- *MAP_TYPE Screen
- *BITMAP "..\noshader.tga"
- *BITMAP_FILTER Pyramidal
- }
- }
-}
-*GEOMOBJECT {
- *NODE_NAME "mat0model0surf0"
- *NODE_TM {
- *NODE_NAME "mat0model0surf0"
- *INHERIT_POS 0 0 0
- *INHERIT_ROT 0 0 0
- *INHERIT_SCL 0 0 0
- *TM_ROW0 1.0 0 0
- *TM_ROW1 0 1.0 0
- *TM_ROW2 0 0 1.0
- *TM_ROW3 0 0 0
- *TM_POS 0.000000 0.000000 0.000000
- }
- *MESH {
- *TIMEVALUE 0
- *MESH_NUMVERTEX 4
- *MESH_NUMFACES 2
- *COMMENT "SURFACETYPE MST_PLANAR"
- *MESH_VERTEX_LIST {
- *MESH_VERTEX 0 160.000000 0.000000 0.000000
- *MESH_VERTEX 1 64.000000 0.000000 64.000000
- *MESH_VERTEX 2 160.000000 128.000000 0.000000
- *MESH_VERTEX 3 64.000000 128.000000 64.000000
- }
- *MESH_NORMALS {
- *MESH_FACENORMAL 0 0.554700 0.000000 0.832050
- *MESH_FACENORMAL 1 0.554700 0.000000 0.832050
- *MESH_VERTEXNORMAL 0 0.554700 0.000000 0.832050
- *MESH_VERTEXNORMAL 1 0.554700 0.000000 0.832050
- *MESH_VERTEXNORMAL 2 0.554700 0.000000 0.832050
- *MESH_VERTEXNORMAL 3 0.554700 0.000000 0.832050
- }
- *MESH_FACE_LIST {
- *MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
- *MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
- }
- *MESH_NUMTVERTEX 4
- *MESH_TVERTLIST {
- *MESH_TVERT 0 2.000000 -1.000000 1.000000
- *MESH_TVERT 1 -1.000000 -1.000000 1.000000
- *MESH_TVERT 2 2.000000 3.000000 1.000000
- *MESH_TVERT 3 -1.000000 3.000000 1.000000
- }
- *MESH_NUMTVFACES 2
- *MESH_TFACELIST {
- *MESH_TFACE 0 0 2 1
- *MESH_TFACE 1 2 3 1
- }
- }
- *PROP_MOTIONBLUR 0
- *PROP_CASTSHADOW 1
- *PROP_RECVSHADOW 1
- *MATERIAL_REF 0
-}
-*GEOMOBJECT {
- *NODE_NAME "mat0model0surf1"
- *NODE_TM {
- *NODE_NAME "mat0model0surf1"
- *INHERIT_POS 0 0 0
- *INHERIT_ROT 0 0 0
- *INHERIT_SCL 0 0 0
- *TM_ROW0 1.0 0 0
- *TM_ROW1 0 1.0 0
- *TM_ROW2 0 0 1.0
- *TM_ROW3 0 0 0
- *TM_POS 0.000000 0.000000 0.000000
- }
- *MESH {
- *TIMEVALUE 0
- *MESH_NUMVERTEX 4
- *MESH_NUMFACES 2
- *COMMENT "SURFACETYPE MST_PLANAR"
- *MESH_VERTEX_LIST {
- *MESH_VERTEX 0 0.000000 128.000000 64.000000
- *MESH_VERTEX 1 0.000000 128.000000 0.000000
- *MESH_VERTEX 2 64.000000 128.000000 64.000000
- *MESH_VERTEX 3 160.000000 128.000000 0.000000
- }
- *MESH_NORMALS {
- *MESH_FACENORMAL 0 0.554700 0.000000 0.832050
- *MESH_FACENORMAL 1 0.554700 0.000000 0.832050
- *MESH_VERTEXNORMAL 0 0.000000 1.000000 0.000000
- *MESH_VERTEXNORMAL 1 0.000000 1.000000 0.000000
- *MESH_VERTEXNORMAL 2 0.000000 1.000000 0.000000
- *MESH_VERTEXNORMAL 3 0.000000 1.000000 0.000000
- }
- *MESH_FACE_LIST {
- *MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
- *MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
- }
- *MESH_NUMTVERTEX 4
- *MESH_TVERTLIST {
- *MESH_TVERT 0 -2.000000 2.000000 1.000000
- *MESH_TVERT 1 -2.000000 0.000000 1.000000
- *MESH_TVERT 2 0.000000 2.000000 1.000000
- *MESH_TVERT 3 3.000000 0.000000 1.000000
- }
- *MESH_NUMTVFACES 2
- *MESH_TFACELIST {
- *MESH_TFACE 0 0 2 1
- *MESH_TFACE 1 2 3 1
- }
- }
- *PROP_MOTIONBLUR 0
- *PROP_CASTSHADOW 1
- *PROP_RECVSHADOW 1
- *MATERIAL_REF 0
-}
-*GEOMOBJECT {
- *NODE_NAME "mat0model0surf2"
- *NODE_TM {
- *NODE_NAME "mat0model0surf2"
- *INHERIT_POS 0 0 0
- *INHERIT_ROT 0 0 0
- *INHERIT_SCL 0 0 0
- *TM_ROW0 1.0 0 0
- *TM_ROW1 0 1.0 0
- *TM_ROW2 0 0 1.0
- *TM_ROW3 0 0 0
- *TM_POS 0.000000 0.000000 0.000000
- }
- *MESH {
- *TIMEVALUE 0
- *MESH_NUMVERTEX 4
- *MESH_NUMFACES 2
- *COMMENT "SURFACETYPE MST_PLANAR"
- *MESH_VERTEX_LIST {
- *MESH_VERTEX 0 64.000000 0.000000 64.000000
- *MESH_VERTEX 1 0.000000 0.000000 64.000000
- *MESH_VERTEX 2 64.000000 128.000000 64.000000
- *MESH_VERTEX 3 0.000000 128.000000 64.000000
- }
- *MESH_NORMALS {
- *MESH_FACENORMAL 0 0.554700 0.000000 0.832050
- *MESH_FACENORMAL 1 0.554700 0.000000 0.832050
- *MESH_VERTEXNORMAL 0 0.000000 0.000000 1.000000
- *MESH_VERTEXNORMAL 1 0.000000 0.000000 1.000000
- *MESH_VERTEXNORMAL 2 0.000000 0.000000 1.000000
- *MESH_VERTEXNORMAL 3 0.000000 0.000000 1.000000
- }
- *MESH_FACE_LIST {
- *MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
- *MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
- }
- *MESH_NUMTVERTEX 4
- *MESH_TVERTLIST {
- *MESH_TVERT 0 1.000000 -1.000000 1.000000
- *MESH_TVERT 1 -1.000000 -1.000000 1.000000
- *MESH_TVERT 2 1.000000 3.000000 1.000000
- *MESH_TVERT 3 -1.000000 3.000000 1.000000
- }
- *MESH_NUMTVFACES 2
- *MESH_TFACELIST {
- *MESH_TFACE 0 0 2 1
- *MESH_TFACE 1 2 3 1
- }
- }
- *PROP_MOTIONBLUR 0
- *PROP_CASTSHADOW 1
- *PROP_RECVSHADOW 1
- *MATERIAL_REF 0
-}
-*GEOMOBJECT {
- *NODE_NAME "mat0model0surf3"
- *NODE_TM {
- *NODE_NAME "mat0model0surf3"
- *INHERIT_POS 0 0 0
- *INHERIT_ROT 0 0 0
- *INHERIT_SCL 0 0 0
- *TM_ROW0 1.0 0 0
- *TM_ROW1 0 1.0 0
- *TM_ROW2 0 0 1.0
- *TM_ROW3 0 0 0
- *TM_POS 0.000000 0.000000 0.000000
- }
- *MESH {
- *TIMEVALUE 0
- *MESH_NUMVERTEX 4
- *MESH_NUMFACES 2
- *COMMENT "SURFACETYPE MST_PLANAR"
- *MESH_VERTEX_LIST {
- *MESH_VERTEX 0 0.000000 0.000000 64.000000
- *MESH_VERTEX 1 0.000000 0.000000 0.000000
- *MESH_VERTEX 2 0.000000 128.000000 64.000000
- *MESH_VERTEX 3 0.000000 128.000000 0.000000
- }
- *MESH_NORMALS {
- *MESH_FACENORMAL 0 0.554700 0.000000 0.832050
- *MESH_FACENORMAL 1 0.554700 0.000000 0.832050
- *MESH_VERTEXNORMAL 0 -1.000000 0.000000 0.000000
- *MESH_VERTEXNORMAL 1 -1.000000 0.000000 0.000000
- *MESH_VERTEXNORMAL 2 -1.000000 0.000000 0.000000
- *MESH_VERTEXNORMAL 3 -1.000000 0.000000 0.000000
- }
- *MESH_FACE_LIST {
- *MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
- *MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
- }
- *MESH_NUMTVERTEX 4
- *MESH_TVERTLIST {
- *MESH_TVERT 0 -2.000000 2.000000 1.000000
- *MESH_TVERT 1 -2.000000 0.000000 1.000000
- *MESH_TVERT 2 2.000000 2.000000 1.000000
- *MESH_TVERT 3 2.000000 0.000000 1.000000
- }
- *MESH_NUMTVFACES 2
- *MESH_TFACELIST {
- *MESH_TFACE 0 0 2 1
- *MESH_TFACE 1 2 3 1
- }
- }
- *PROP_MOTIONBLUR 0
- *PROP_CASTSHADOW 1
- *PROP_RECVSHADOW 1
- *MATERIAL_REF 0
-}
-*GEOMOBJECT {
- *NODE_NAME "mat0model0surf4"
- *NODE_TM {
- *NODE_NAME "mat0model0surf4"
- *INHERIT_POS 0 0 0
- *INHERIT_ROT 0 0 0
- *INHERIT_SCL 0 0 0
- *TM_ROW0 1.0 0 0
- *TM_ROW1 0 1.0 0
- *TM_ROW2 0 0 1.0
- *TM_ROW3 0 0 0
- *TM_POS 0.000000 0.000000 0.000000
- }
- *MESH {
- *TIMEVALUE 0
- *MESH_NUMVERTEX 4
- *MESH_NUMFACES 2
- *COMMENT "SURFACETYPE MST_PLANAR"
- *MESH_VERTEX_LIST {
- *MESH_VERTEX 0 160.000000 0.000000 0.000000
- *MESH_VERTEX 1 0.000000 0.000000 0.000000
- *MESH_VERTEX 2 64.000000 0.000000 64.000000
- *MESH_VERTEX 3 0.000000 0.000000 64.000000
- }
- *MESH_NORMALS {
- *MESH_FACENORMAL 0 0.554700 0.000000 0.832050
- *MESH_FACENORMAL 1 0.554700 0.000000 0.832050
- *MESH_VERTEXNORMAL 0 0.000000 -1.000000 0.000000
- *MESH_VERTEXNORMAL 1 0.000000 -1.000000 0.000000
- *MESH_VERTEXNORMAL 2 0.000000 -1.000000 0.000000
- *MESH_VERTEXNORMAL 3 0.000000 -1.000000 0.000000
- }
- *MESH_FACE_LIST {
- *MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
- *MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
- }
- *MESH_NUMTVERTEX 4
- *MESH_TVERTLIST {
- *MESH_TVERT 0 3.000000 0.000000 1.000000
- *MESH_TVERT 1 -2.000000 0.000000 1.000000
- *MESH_TVERT 2 0.000000 2.000000 1.000000
- *MESH_TVERT 3 -2.000000 2.000000 1.000000
- }
- *MESH_NUMTVFACES 2
- *MESH_TFACELIST {
- *MESH_TFACE 0 0 2 1
- *MESH_TFACE 1 2 3 1
- }
- }
- *PROP_MOTIONBLUR 0
- *PROP_CASTSHADOW 1
- *PROP_RECVSHADOW 1
- *MATERIAL_REF 0
-}
-*GEOMOBJECT {
- *NODE_NAME "mat0model0surf5"
- *NODE_TM {
- *NODE_NAME "mat0model0surf5"
- *INHERIT_POS 0 0 0
- *INHERIT_ROT 0 0 0
- *INHERIT_SCL 0 0 0
- *TM_ROW0 1.0 0 0
- *TM_ROW1 0 1.0 0
- *TM_ROW2 0 0 1.0
- *TM_ROW3 0 0 0
- *TM_POS 0.000000 0.000000 0.000000
- }
- *MESH {
- *TIMEVALUE 0
- *MESH_NUMVERTEX 4
- *MESH_NUMFACES 2
- *COMMENT "SURFACETYPE MST_PLANAR"
- *MESH_VERTEX_LIST {
- *MESH_VERTEX 0 0.000000 128.000000 0.000000
- *MESH_VERTEX 1 0.000000 0.000000 0.000000
- *MESH_VERTEX 2 160.000000 128.000000 0.000000
- *MESH_VERTEX 3 160.000000 0.000000 0.000000
- }
- *MESH_NORMALS {
- *MESH_FACENORMAL 0 0.554700 0.000000 0.832050
- *MESH_FACENORMAL 1 0.554700 0.000000 0.832050
- *MESH_VERTEXNORMAL 0 0.000000 0.000000 -1.000000
- *MESH_VERTEXNORMAL 1 0.000000 0.000000 -1.000000
- *MESH_VERTEXNORMAL 2 0.000000 0.000000 -1.000000
- *MESH_VERTEXNORMAL 3 0.000000 0.000000 -1.000000
- }
- *MESH_FACE_LIST {
- *MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
- *MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
- }
- *MESH_NUMTVERTEX 4
- *MESH_TVERTLIST {
- *MESH_TVERT 0 -2.000000 3.000000 1.000000
- *MESH_TVERT 1 -2.000000 -1.000000 1.000000
- *MESH_TVERT 2 3.000000 3.000000 1.000000
- *MESH_TVERT 3 3.000000 -1.000000 1.000000
- }
- *MESH_NUMTVFACES 2
- *MESH_TFACELIST {
- *MESH_TFACE 0 0 2 1
- *MESH_TFACE 1 2 3 1
- }
- }
- *PROP_MOTIONBLUR 0
- *PROP_CASTSHADOW 1
- *PROP_RECVSHADOW 1
- *MATERIAL_REF 0
-}
+*3DSMAX_ASCIIEXPORT 200
+*COMMENT "Generated by Q3Map2 (ydnar) -convert -format ase"
+*SCENE {
+ *SCENE_FILENAME "wedge_shallow.bsp"
+ *SCENE_FIRSTFRAME 0
+ *SCENE_LASTFRAME 100
+ *SCENE_FRAMESPEED 30
+ *SCENE_TICKSPERFRAME 160
+ *SCENE_BACKGROUND_STATIC 0.0000 0.0000 0.0000
+ *SCENE_AMBIENT_STATIC 0.0000 0.0000 0.0000
+}
+*MATERIAL_LIST {
+ *MATERIAL_COUNT 2
+ *MATERIAL 0 {
+ *MATERIAL_NAME "textures/radiant_regression_tests/tile_model"
+ *MATERIAL_CLASS "Standard"
+ *MATERIAL_DIFFUSE 1.000000 1.000000 0.833333
+ *MATERIAL_SHADING Phong
+ *MAP_DIFFUSE {
+ *MAP_NAME "textures/radiant_regression_tests/tile_model"
+ *MAP_CLASS "Bitmap"
+ *MAP_SUBNO 1
+ *MAP_AMOUNT 1.0
+ *MAP_TYPE Screen
+ *BITMAP "..\textures\radiant_regression_tests\tile_model.tga"
+ *BITMAP_FILTER Pyramidal
+ }
+ }
+ *MATERIAL 1 {
+ *MATERIAL_NAME "noshader"
+ *MATERIAL_CLASS "Standard"
+ *MATERIAL_DIFFUSE 1.000000 1.000000 1.000000
+ *MATERIAL_SHADING Phong
+ *MAP_DIFFUSE {
+ *MAP_NAME "noshader"
+ *MAP_CLASS "Bitmap"
+ *MAP_SUBNO 1
+ *MAP_AMOUNT 1.0
+ *MAP_TYPE Screen
+ *BITMAP "..\noshader.tga"
+ *BITMAP_FILTER Pyramidal
+ }
+ }
+}
+*GEOMOBJECT {
+ *NODE_NAME "mat0model0surf0"
+ *NODE_TM {
+ *NODE_NAME "mat0model0surf0"
+ *INHERIT_POS 0 0 0
+ *INHERIT_ROT 0 0 0
+ *INHERIT_SCL 0 0 0
+ *TM_ROW0 1.0 0 0
+ *TM_ROW1 0 1.0 0
+ *TM_ROW2 0 0 1.0
+ *TM_ROW3 0 0 0
+ *TM_POS 0.000000 0.000000 0.000000
+ }
+ *MESH {
+ *TIMEVALUE 0
+ *MESH_NUMVERTEX 4
+ *MESH_NUMFACES 2
+ *COMMENT "SURFACETYPE MST_PLANAR"
+ *MESH_VERTEX_LIST {
+ *MESH_VERTEX 0 160.000000 0.000000 0.000000
+ *MESH_VERTEX 1 64.000000 0.000000 64.000000
+ *MESH_VERTEX 2 160.000000 128.000000 0.000000
+ *MESH_VERTEX 3 64.000000 128.000000 64.000000
+ }
+ *MESH_NORMALS {
+ *MESH_FACENORMAL 0 0.554700 0.000000 0.832050
+ *MESH_FACENORMAL 1 0.554700 0.000000 0.832050
+ *MESH_VERTEXNORMAL 0 0.554700 0.000000 0.832050
+ *MESH_VERTEXNORMAL 1 0.554700 0.000000 0.832050
+ *MESH_VERTEXNORMAL 2 0.554700 0.000000 0.832050
+ *MESH_VERTEXNORMAL 3 0.554700 0.000000 0.832050
+ }
+ *MESH_FACE_LIST {
+ *MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
+ *MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
+ }
+ *MESH_NUMTVERTEX 4
+ *MESH_TVERTLIST {
+ *MESH_TVERT 0 2.000000 -1.000000 1.000000
+ *MESH_TVERT 1 -1.000000 -1.000000 1.000000
+ *MESH_TVERT 2 2.000000 3.000000 1.000000
+ *MESH_TVERT 3 -1.000000 3.000000 1.000000
+ }
+ *MESH_NUMTVFACES 2
+ *MESH_TFACELIST {
+ *MESH_TFACE 0 0 2 1
+ *MESH_TFACE 1 2 3 1
+ }
+ }
+ *PROP_MOTIONBLUR 0
+ *PROP_CASTSHADOW 1
+ *PROP_RECVSHADOW 1
+ *MATERIAL_REF 0
+}
+*GEOMOBJECT {
+ *NODE_NAME "mat0model0surf1"
+ *NODE_TM {
+ *NODE_NAME "mat0model0surf1"
+ *INHERIT_POS 0 0 0
+ *INHERIT_ROT 0 0 0
+ *INHERIT_SCL 0 0 0
+ *TM_ROW0 1.0 0 0
+ *TM_ROW1 0 1.0 0
+ *TM_ROW2 0 0 1.0
+ *TM_ROW3 0 0 0
+ *TM_POS 0.000000 0.000000 0.000000
+ }
+ *MESH {
+ *TIMEVALUE 0
+ *MESH_NUMVERTEX 4
+ *MESH_NUMFACES 2
+ *COMMENT "SURFACETYPE MST_PLANAR"
+ *MESH_VERTEX_LIST {
+ *MESH_VERTEX 0 0.000000 128.000000 64.000000
+ *MESH_VERTEX 1 0.000000 128.000000 0.000000
+ *MESH_VERTEX 2 64.000000 128.000000 64.000000
+ *MESH_VERTEX 3 160.000000 128.000000 0.000000
+ }
+ *MESH_NORMALS {
+ *MESH_FACENORMAL 0 0.554700 0.000000 0.832050
+ *MESH_FACENORMAL 1 0.554700 0.000000 0.832050
+ *MESH_VERTEXNORMAL 0 0.000000 1.000000 0.000000
+ *MESH_VERTEXNORMAL 1 0.000000 1.000000 0.000000
+ *MESH_VERTEXNORMAL 2 0.000000 1.000000 0.000000
+ *MESH_VERTEXNORMAL 3 0.000000 1.000000 0.000000
+ }
+ *MESH_FACE_LIST {
+ *MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
+ *MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
+ }
+ *MESH_NUMTVERTEX 4
+ *MESH_TVERTLIST {
+ *MESH_TVERT 0 -2.000000 2.000000 1.000000
+ *MESH_TVERT 1 -2.000000 0.000000 1.000000
+ *MESH_TVERT 2 0.000000 2.000000 1.000000
+ *MESH_TVERT 3 3.000000 0.000000 1.000000
+ }
+ *MESH_NUMTVFACES 2
+ *MESH_TFACELIST {
+ *MESH_TFACE 0 0 2 1
+ *MESH_TFACE 1 2 3 1
+ }
+ }
+ *PROP_MOTIONBLUR 0
+ *PROP_CASTSHADOW 1
+ *PROP_RECVSHADOW 1
+ *MATERIAL_REF 0
+}
+*GEOMOBJECT {
+ *NODE_NAME "mat0model0surf2"
+ *NODE_TM {
+ *NODE_NAME "mat0model0surf2"
+ *INHERIT_POS 0 0 0
+ *INHERIT_ROT 0 0 0
+ *INHERIT_SCL 0 0 0
+ *TM_ROW0 1.0 0 0
+ *TM_ROW1 0 1.0 0
+ *TM_ROW2 0 0 1.0
+ *TM_ROW3 0 0 0
+ *TM_POS 0.000000 0.000000 0.000000
+ }
+ *MESH {
+ *TIMEVALUE 0
+ *MESH_NUMVERTEX 4
+ *MESH_NUMFACES 2
+ *COMMENT "SURFACETYPE MST_PLANAR"
+ *MESH_VERTEX_LIST {
+ *MESH_VERTEX 0 64.000000 0.000000 64.000000
+ *MESH_VERTEX 1 0.000000 0.000000 64.000000
+ *MESH_VERTEX 2 64.000000 128.000000 64.000000
+ *MESH_VERTEX 3 0.000000 128.000000 64.000000
+ }
+ *MESH_NORMALS {
+ *MESH_FACENORMAL 0 0.554700 0.000000 0.832050
+ *MESH_FACENORMAL 1 0.554700 0.000000 0.832050
+ *MESH_VERTEXNORMAL 0 0.000000 0.000000 1.000000
+ *MESH_VERTEXNORMAL 1 0.000000 0.000000 1.000000
+ *MESH_VERTEXNORMAL 2 0.000000 0.000000 1.000000
+ *MESH_VERTEXNORMAL 3 0.000000 0.000000 1.000000
+ }
+ *MESH_FACE_LIST {
+ *MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
+ *MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
+ }
+ *MESH_NUMTVERTEX 4
+ *MESH_TVERTLIST {
+ *MESH_TVERT 0 1.000000 -1.000000 1.000000
+ *MESH_TVERT 1 -1.000000 -1.000000 1.000000
+ *MESH_TVERT 2 1.000000 3.000000 1.000000
+ *MESH_TVERT 3 -1.000000 3.000000 1.000000
+ }
+ *MESH_NUMTVFACES 2
+ *MESH_TFACELIST {
+ *MESH_TFACE 0 0 2 1
+ *MESH_TFACE 1 2 3 1
+ }
+ }
+ *PROP_MOTIONBLUR 0
+ *PROP_CASTSHADOW 1
+ *PROP_RECVSHADOW 1
+ *MATERIAL_REF 0
+}
+*GEOMOBJECT {
+ *NODE_NAME "mat0model0surf3"
+ *NODE_TM {
+ *NODE_NAME "mat0model0surf3"
+ *INHERIT_POS 0 0 0
+ *INHERIT_ROT 0 0 0
+ *INHERIT_SCL 0 0 0
+ *TM_ROW0 1.0 0 0
+ *TM_ROW1 0 1.0 0
+ *TM_ROW2 0 0 1.0
+ *TM_ROW3 0 0 0
+ *TM_POS 0.000000 0.000000 0.000000
+ }
+ *MESH {
+ *TIMEVALUE 0
+ *MESH_NUMVERTEX 4
+ *MESH_NUMFACES 2
+ *COMMENT "SURFACETYPE MST_PLANAR"
+ *MESH_VERTEX_LIST {
+ *MESH_VERTEX 0 0.000000 0.000000 64.000000
+ *MESH_VERTEX 1 0.000000 0.000000 0.000000
+ *MESH_VERTEX 2 0.000000 128.000000 64.000000
+ *MESH_VERTEX 3 0.000000 128.000000 0.000000
+ }
+ *MESH_NORMALS {
+ *MESH_FACENORMAL 0 0.554700 0.000000 0.832050
+ *MESH_FACENORMAL 1 0.554700 0.000000 0.832050
+ *MESH_VERTEXNORMAL 0 -1.000000 0.000000 0.000000
+ *MESH_VERTEXNORMAL 1 -1.000000 0.000000 0.000000
+ *MESH_VERTEXNORMAL 2 -1.000000 0.000000 0.000000
+ *MESH_VERTEXNORMAL 3 -1.000000 0.000000 0.000000
+ }
+ *MESH_FACE_LIST {
+ *MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
+ *MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
+ }
+ *MESH_NUMTVERTEX 4
+ *MESH_TVERTLIST {
+ *MESH_TVERT 0 -2.000000 2.000000 1.000000
+ *MESH_TVERT 1 -2.000000 0.000000 1.000000
+ *MESH_TVERT 2 2.000000 2.000000 1.000000
+ *MESH_TVERT 3 2.000000 0.000000 1.000000
+ }
+ *MESH_NUMTVFACES 2
+ *MESH_TFACELIST {
+ *MESH_TFACE 0 0 2 1
+ *MESH_TFACE 1 2 3 1
+ }
+ }
+ *PROP_MOTIONBLUR 0
+ *PROP_CASTSHADOW 1
+ *PROP_RECVSHADOW 1
+ *MATERIAL_REF 0
+}
+*GEOMOBJECT {
+ *NODE_NAME "mat0model0surf4"
+ *NODE_TM {
+ *NODE_NAME "mat0model0surf4"
+ *INHERIT_POS 0 0 0
+ *INHERIT_ROT 0 0 0
+ *INHERIT_SCL 0 0 0
+ *TM_ROW0 1.0 0 0
+ *TM_ROW1 0 1.0 0
+ *TM_ROW2 0 0 1.0
+ *TM_ROW3 0 0 0
+ *TM_POS 0.000000 0.000000 0.000000
+ }
+ *MESH {
+ *TIMEVALUE 0
+ *MESH_NUMVERTEX 4
+ *MESH_NUMFACES 2
+ *COMMENT "SURFACETYPE MST_PLANAR"
+ *MESH_VERTEX_LIST {
+ *MESH_VERTEX 0 160.000000 0.000000 0.000000
+ *MESH_VERTEX 1 0.000000 0.000000 0.000000
+ *MESH_VERTEX 2 64.000000 0.000000 64.000000
+ *MESH_VERTEX 3 0.000000 0.000000 64.000000
+ }
+ *MESH_NORMALS {
+ *MESH_FACENORMAL 0 0.554700 0.000000 0.832050
+ *MESH_FACENORMAL 1 0.554700 0.000000 0.832050
+ *MESH_VERTEXNORMAL 0 0.000000 -1.000000 0.000000
+ *MESH_VERTEXNORMAL 1 0.000000 -1.000000 0.000000
+ *MESH_VERTEXNORMAL 2 0.000000 -1.000000 0.000000
+ *MESH_VERTEXNORMAL 3 0.000000 -1.000000 0.000000
+ }
+ *MESH_FACE_LIST {
+ *MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
+ *MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
+ }
+ *MESH_NUMTVERTEX 4
+ *MESH_TVERTLIST {
+ *MESH_TVERT 0 3.000000 0.000000 1.000000
+ *MESH_TVERT 1 -2.000000 0.000000 1.000000
+ *MESH_TVERT 2 0.000000 2.000000 1.000000
+ *MESH_TVERT 3 -2.000000 2.000000 1.000000
+ }
+ *MESH_NUMTVFACES 2
+ *MESH_TFACELIST {
+ *MESH_TFACE 0 0 2 1
+ *MESH_TFACE 1 2 3 1
+ }
+ }
+ *PROP_MOTIONBLUR 0
+ *PROP_CASTSHADOW 1
+ *PROP_RECVSHADOW 1
+ *MATERIAL_REF 0
+}
+*GEOMOBJECT {
+ *NODE_NAME "mat0model0surf5"
+ *NODE_TM {
+ *NODE_NAME "mat0model0surf5"
+ *INHERIT_POS 0 0 0
+ *INHERIT_ROT 0 0 0
+ *INHERIT_SCL 0 0 0
+ *TM_ROW0 1.0 0 0
+ *TM_ROW1 0 1.0 0
+ *TM_ROW2 0 0 1.0
+ *TM_ROW3 0 0 0
+ *TM_POS 0.000000 0.000000 0.000000
+ }
+ *MESH {
+ *TIMEVALUE 0
+ *MESH_NUMVERTEX 4
+ *MESH_NUMFACES 2
+ *COMMENT "SURFACETYPE MST_PLANAR"
+ *MESH_VERTEX_LIST {
+ *MESH_VERTEX 0 0.000000 128.000000 0.000000
+ *MESH_VERTEX 1 0.000000 0.000000 0.000000
+ *MESH_VERTEX 2 160.000000 128.000000 0.000000
+ *MESH_VERTEX 3 160.000000 0.000000 0.000000
+ }
+ *MESH_NORMALS {
+ *MESH_FACENORMAL 0 0.554700 0.000000 0.832050
+ *MESH_FACENORMAL 1 0.554700 0.000000 0.832050
+ *MESH_VERTEXNORMAL 0 0.000000 0.000000 -1.000000
+ *MESH_VERTEXNORMAL 1 0.000000 0.000000 -1.000000
+ *MESH_VERTEXNORMAL 2 0.000000 0.000000 -1.000000
+ *MESH_VERTEXNORMAL 3 0.000000 0.000000 -1.000000
+ }
+ *MESH_FACE_LIST {
+ *MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
+ *MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
+ }
+ *MESH_NUMTVERTEX 4
+ *MESH_TVERTLIST {
+ *MESH_TVERT 0 -2.000000 3.000000 1.000000
+ *MESH_TVERT 1 -2.000000 -1.000000 1.000000
+ *MESH_TVERT 2 3.000000 3.000000 1.000000
+ *MESH_TVERT 3 3.000000 -1.000000 1.000000
+ }
+ *MESH_NUMTVFACES 2
+ *MESH_TFACELIST {
+ *MESH_TFACE 0 0 2 1
+ *MESH_TFACE 1 2 3 1
+ }
+ }
+ *PROP_MOTIONBLUR 0
+ *PROP_CASTSHADOW 1
+ *PROP_RECVSHADOW 1
+ *MATERIAL_REF 0
+}
diff --git a/regression_tests/q3map2/model_clipping_45_degrees/models/mapobjects/wedges/wedge_steep.ase b/regression_tests/q3map2/model_clipping_45_degrees/models/mapobjects/wedges/wedge_steep.ase
index 0e8727e0..59689a3e 100644
--- a/regression_tests/q3map2/model_clipping_45_degrees/models/mapobjects/wedges/wedge_steep.ase
+++ b/regression_tests/q3map2/model_clipping_45_degrees/models/mapobjects/wedges/wedge_steep.ase
@@ -1,368 +1,368 @@
-*3DSMAX_ASCIIEXPORT 200
-*COMMENT "Generated by Q3Map2 (ydnar) -convert -format ase"
-*SCENE {
- *SCENE_FILENAME "wedge_steep.bsp"
- *SCENE_FIRSTFRAME 0
- *SCENE_LASTFRAME 100
- *SCENE_FRAMESPEED 30
- *SCENE_TICKSPERFRAME 160
- *SCENE_BACKGROUND_STATIC 0.0000 0.0000 0.0000
- *SCENE_AMBIENT_STATIC 0.0000 0.0000 0.0000
-}
-*MATERIAL_LIST {
- *MATERIAL_COUNT 2
- *MATERIAL 0 {
- *MATERIAL_NAME "textures/radiant_regression_tests/tile_model"
- *MATERIAL_CLASS "Standard"
- *MATERIAL_DIFFUSE 1.000000 1.000000 0.833333
- *MATERIAL_SHADING Phong
- *MAP_DIFFUSE {
- *MAP_NAME "textures/radiant_regression_tests/tile_model"
- *MAP_CLASS "Bitmap"
- *MAP_SUBNO 1
- *MAP_AMOUNT 1.0
- *MAP_TYPE Screen
- *BITMAP "..\textures\radiant_regression_tests\tile_model.tga"
- *BITMAP_FILTER Pyramidal
- }
- }
- *MATERIAL 1 {
- *MATERIAL_NAME "noshader"
- *MATERIAL_CLASS "Standard"
- *MATERIAL_DIFFUSE 1.000000 1.000000 1.000000
- *MATERIAL_SHADING Phong
- *MAP_DIFFUSE {
- *MAP_NAME "noshader"
- *MAP_CLASS "Bitmap"
- *MAP_SUBNO 1
- *MAP_AMOUNT 1.0
- *MAP_TYPE Screen
- *BITMAP "..\noshader.tga"
- *BITMAP_FILTER Pyramidal
- }
- }
-}
-*GEOMOBJECT {
- *NODE_NAME "mat0model0surf0"
- *NODE_TM {
- *NODE_NAME "mat0model0surf0"
- *INHERIT_POS 0 0 0
- *INHERIT_ROT 0 0 0
- *INHERIT_SCL 0 0 0
- *TM_ROW0 1.0 0 0
- *TM_ROW1 0 1.0 0
- *TM_ROW2 0 0 1.0
- *TM_ROW3 0 0 0
- *TM_POS 0.000000 0.000000 0.000000
- }
- *MESH {
- *TIMEVALUE 0
- *MESH_NUMVERTEX 4
- *MESH_NUMFACES 2
- *COMMENT "SURFACETYPE MST_PLANAR"
- *MESH_VERTEX_LIST {
- *MESH_VERTEX 0 112.000000 0.000000 0.000000
- *MESH_VERTEX 1 64.000000 0.000000 64.000000
- *MESH_VERTEX 2 112.000000 128.000000 0.000000
- *MESH_VERTEX 3 64.000000 128.000000 64.000000
- }
- *MESH_NORMALS {
- *MESH_FACENORMAL 0 0.800000 0.000000 0.600000
- *MESH_FACENORMAL 1 0.800000 0.000000 0.600000
- *MESH_VERTEXNORMAL 0 0.800000 0.000000 0.600000
- *MESH_VERTEXNORMAL 1 0.800000 0.000000 0.600000
- *MESH_VERTEXNORMAL 2 0.800000 0.000000 0.600000
- *MESH_VERTEXNORMAL 3 0.800000 0.000000 0.600000
- }
- *MESH_FACE_LIST {
- *MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
- *MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
- }
- *MESH_NUMTVERTEX 4
- *MESH_TVERTLIST {
- *MESH_TVERT 0 -2.000000 0.000000 1.000000
- *MESH_TVERT 1 -2.000000 2.000000 1.000000
- *MESH_TVERT 2 2.000000 0.000000 1.000000
- *MESH_TVERT 3 2.000000 2.000000 1.000000
- }
- *MESH_NUMTVFACES 2
- *MESH_TFACELIST {
- *MESH_TFACE 0 0 2 1
- *MESH_TFACE 1 2 3 1
- }
- }
- *PROP_MOTIONBLUR 0
- *PROP_CASTSHADOW 1
- *PROP_RECVSHADOW 1
- *MATERIAL_REF 0
-}
-*GEOMOBJECT {
- *NODE_NAME "mat0model0surf1"
- *NODE_TM {
- *NODE_NAME "mat0model0surf1"
- *INHERIT_POS 0 0 0
- *INHERIT_ROT 0 0 0
- *INHERIT_SCL 0 0 0
- *TM_ROW0 1.0 0 0
- *TM_ROW1 0 1.0 0
- *TM_ROW2 0 0 1.0
- *TM_ROW3 0 0 0
- *TM_POS 0.000000 0.000000 0.000000
- }
- *MESH {
- *TIMEVALUE 0
- *MESH_NUMVERTEX 4
- *MESH_NUMFACES 2
- *COMMENT "SURFACETYPE MST_PLANAR"
- *MESH_VERTEX_LIST {
- *MESH_VERTEX 0 0.000000 128.000000 64.000000
- *MESH_VERTEX 1 0.000000 128.000000 0.000000
- *MESH_VERTEX 2 64.000000 128.000000 64.000000
- *MESH_VERTEX 3 112.000000 128.000000 0.000000
- }
- *MESH_NORMALS {
- *MESH_FACENORMAL 0 0.800000 0.000000 0.600000
- *MESH_FACENORMAL 1 0.800000 0.000000 0.600000
- *MESH_VERTEXNORMAL 0 0.000000 1.000000 0.000000
- *MESH_VERTEXNORMAL 1 0.000000 1.000000 0.000000
- *MESH_VERTEXNORMAL 2 0.000000 1.000000 0.000000
- *MESH_VERTEXNORMAL 3 0.000000 1.000000 0.000000
- }
- *MESH_FACE_LIST {
- *MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
- *MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
- }
- *MESH_NUMTVERTEX 4
- *MESH_TVERTLIST {
- *MESH_TVERT 0 -1.000000 2.000000 1.000000
- *MESH_TVERT 1 -1.000000 0.000000 1.000000
- *MESH_TVERT 2 1.000000 2.000000 1.000000
- *MESH_TVERT 3 2.500000 0.000000 1.000000
- }
- *MESH_NUMTVFACES 2
- *MESH_TFACELIST {
- *MESH_TFACE 0 0 2 1
- *MESH_TFACE 1 2 3 1
- }
- }
- *PROP_MOTIONBLUR 0
- *PROP_CASTSHADOW 1
- *PROP_RECVSHADOW 1
- *MATERIAL_REF 0
-}
-*GEOMOBJECT {
- *NODE_NAME "mat0model0surf2"
- *NODE_TM {
- *NODE_NAME "mat0model0surf2"
- *INHERIT_POS 0 0 0
- *INHERIT_ROT 0 0 0
- *INHERIT_SCL 0 0 0
- *TM_ROW0 1.0 0 0
- *TM_ROW1 0 1.0 0
- *TM_ROW2 0 0 1.0
- *TM_ROW3 0 0 0
- *TM_POS 0.000000 0.000000 0.000000
- }
- *MESH {
- *TIMEVALUE 0
- *MESH_NUMVERTEX 4
- *MESH_NUMFACES 2
- *COMMENT "SURFACETYPE MST_PLANAR"
- *MESH_VERTEX_LIST {
- *MESH_VERTEX 0 64.000000 0.000000 64.000000
- *MESH_VERTEX 1 0.000000 0.000000 64.000000
- *MESH_VERTEX 2 64.000000 128.000000 64.000000
- *MESH_VERTEX 3 0.000000 128.000000 64.000000
- }
- *MESH_NORMALS {
- *MESH_FACENORMAL 0 0.800000 0.000000 0.600000
- *MESH_FACENORMAL 1 0.800000 0.000000 0.600000
- *MESH_VERTEXNORMAL 0 0.000000 0.000000 1.000000
- *MESH_VERTEXNORMAL 1 0.000000 0.000000 1.000000
- *MESH_VERTEXNORMAL 2 0.000000 0.000000 1.000000
- *MESH_VERTEXNORMAL 3 0.000000 0.000000 1.000000
- }
- *MESH_FACE_LIST {
- *MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
- *MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
- }
- *MESH_NUMTVERTEX 4
- *MESH_TVERTLIST {
- *MESH_TVERT 0 1.000000 -1.000000 1.000000
- *MESH_TVERT 1 -1.000000 -1.000000 1.000000
- *MESH_TVERT 2 1.000000 3.000000 1.000000
- *MESH_TVERT 3 -1.000000 3.000000 1.000000
- }
- *MESH_NUMTVFACES 2
- *MESH_TFACELIST {
- *MESH_TFACE 0 0 2 1
- *MESH_TFACE 1 2 3 1
- }
- }
- *PROP_MOTIONBLUR 0
- *PROP_CASTSHADOW 1
- *PROP_RECVSHADOW 1
- *MATERIAL_REF 0
-}
-*GEOMOBJECT {
- *NODE_NAME "mat0model0surf3"
- *NODE_TM {
- *NODE_NAME "mat0model0surf3"
- *INHERIT_POS 0 0 0
- *INHERIT_ROT 0 0 0
- *INHERIT_SCL 0 0 0
- *TM_ROW0 1.0 0 0
- *TM_ROW1 0 1.0 0
- *TM_ROW2 0 0 1.0
- *TM_ROW3 0 0 0
- *TM_POS 0.000000 0.000000 0.000000
- }
- *MESH {
- *TIMEVALUE 0
- *MESH_NUMVERTEX 4
- *MESH_NUMFACES 2
- *COMMENT "SURFACETYPE MST_PLANAR"
- *MESH_VERTEX_LIST {
- *MESH_VERTEX 0 0.000000 0.000000 64.000000
- *MESH_VERTEX 1 0.000000 0.000000 0.000000
- *MESH_VERTEX 2 0.000000 128.000000 64.000000
- *MESH_VERTEX 3 0.000000 128.000000 0.000000
- }
- *MESH_NORMALS {
- *MESH_FACENORMAL 0 0.800000 0.000000 0.600000
- *MESH_FACENORMAL 1 0.800000 0.000000 0.600000
- *MESH_VERTEXNORMAL 0 -1.000000 0.000000 0.000000
- *MESH_VERTEXNORMAL 1 -1.000000 0.000000 0.000000
- *MESH_VERTEXNORMAL 2 -1.000000 0.000000 0.000000
- *MESH_VERTEXNORMAL 3 -1.000000 0.000000 0.000000
- }
- *MESH_FACE_LIST {
- *MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
- *MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
- }
- *MESH_NUMTVERTEX 4
- *MESH_TVERTLIST {
- *MESH_TVERT 0 -2.000000 2.000000 1.000000
- *MESH_TVERT 1 -2.000000 0.000000 1.000000
- *MESH_TVERT 2 2.000000 2.000000 1.000000
- *MESH_TVERT 3 2.000000 0.000000 1.000000
- }
- *MESH_NUMTVFACES 2
- *MESH_TFACELIST {
- *MESH_TFACE 0 0 2 1
- *MESH_TFACE 1 2 3 1
- }
- }
- *PROP_MOTIONBLUR 0
- *PROP_CASTSHADOW 1
- *PROP_RECVSHADOW 1
- *MATERIAL_REF 0
-}
-*GEOMOBJECT {
- *NODE_NAME "mat0model0surf4"
- *NODE_TM {
- *NODE_NAME "mat0model0surf4"
- *INHERIT_POS 0 0 0
- *INHERIT_ROT 0 0 0
- *INHERIT_SCL 0 0 0
- *TM_ROW0 1.0 0 0
- *TM_ROW1 0 1.0 0
- *TM_ROW2 0 0 1.0
- *TM_ROW3 0 0 0
- *TM_POS 0.000000 0.000000 0.000000
- }
- *MESH {
- *TIMEVALUE 0
- *MESH_NUMVERTEX 4
- *MESH_NUMFACES 2
- *COMMENT "SURFACETYPE MST_PLANAR"
- *MESH_VERTEX_LIST {
- *MESH_VERTEX 0 112.000000 0.000000 0.000000
- *MESH_VERTEX 1 0.000000 0.000000 0.000000
- *MESH_VERTEX 2 64.000000 0.000000 64.000000
- *MESH_VERTEX 3 0.000000 0.000000 64.000000
- }
- *MESH_NORMALS {
- *MESH_FACENORMAL 0 0.800000 0.000000 0.600000
- *MESH_FACENORMAL 1 0.800000 0.000000 0.600000
- *MESH_VERTEXNORMAL 0 0.000000 -1.000000 0.000000
- *MESH_VERTEXNORMAL 1 0.000000 -1.000000 0.000000
- *MESH_VERTEXNORMAL 2 0.000000 -1.000000 0.000000
- *MESH_VERTEXNORMAL 3 0.000000 -1.000000 0.000000
- }
- *MESH_FACE_LIST {
- *MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
- *MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
- }
- *MESH_NUMTVERTEX 4
- *MESH_TVERTLIST {
- *MESH_TVERT 0 2.500000 0.000000 1.000000
- *MESH_TVERT 1 -1.000000 0.000000 1.000000
- *MESH_TVERT 2 1.000000 2.000000 1.000000
- *MESH_TVERT 3 -1.000000 2.000000 1.000000
- }
- *MESH_NUMTVFACES 2
- *MESH_TFACELIST {
- *MESH_TFACE 0 0 2 1
- *MESH_TFACE 1 2 3 1
- }
- }
- *PROP_MOTIONBLUR 0
- *PROP_CASTSHADOW 1
- *PROP_RECVSHADOW 1
- *MATERIAL_REF 0
-}
-*GEOMOBJECT {
- *NODE_NAME "mat0model0surf5"
- *NODE_TM {
- *NODE_NAME "mat0model0surf5"
- *INHERIT_POS 0 0 0
- *INHERIT_ROT 0 0 0
- *INHERIT_SCL 0 0 0
- *TM_ROW0 1.0 0 0
- *TM_ROW1 0 1.0 0
- *TM_ROW2 0 0 1.0
- *TM_ROW3 0 0 0
- *TM_POS 0.000000 0.000000 0.000000
- }
- *MESH {
- *TIMEVALUE 0
- *MESH_NUMVERTEX 4
- *MESH_NUMFACES 2
- *COMMENT "SURFACETYPE MST_PLANAR"
- *MESH_VERTEX_LIST {
- *MESH_VERTEX 0 0.000000 128.000000 0.000000
- *MESH_VERTEX 1 0.000000 0.000000 0.000000
- *MESH_VERTEX 2 112.000000 128.000000 0.000000
- *MESH_VERTEX 3 112.000000 0.000000 0.000000
- }
- *MESH_NORMALS {
- *MESH_FACENORMAL 0 0.800000 0.000000 0.600000
- *MESH_FACENORMAL 1 0.800000 0.000000 0.600000
- *MESH_VERTEXNORMAL 0 0.000000 0.000000 -1.000000
- *MESH_VERTEXNORMAL 1 0.000000 0.000000 -1.000000
- *MESH_VERTEXNORMAL 2 0.000000 0.000000 -1.000000
- *MESH_VERTEXNORMAL 3 0.000000 0.000000 -1.000000
- }
- *MESH_FACE_LIST {
- *MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
- *MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
- }
- *MESH_NUMTVERTEX 4
- *MESH_TVERTLIST {
- *MESH_TVERT 0 -1.000000 3.000000 1.000000
- *MESH_TVERT 1 -1.000000 -1.000000 1.000000
- *MESH_TVERT 2 2.500000 3.000000 1.000000
- *MESH_TVERT 3 2.500000 -1.000000 1.000000
- }
- *MESH_NUMTVFACES 2
- *MESH_TFACELIST {
- *MESH_TFACE 0 0 2 1
- *MESH_TFACE 1 2 3 1
- }
- }
- *PROP_MOTIONBLUR 0
- *PROP_CASTSHADOW 1
- *PROP_RECVSHADOW 1
- *MATERIAL_REF 0
-}
+*3DSMAX_ASCIIEXPORT 200
+*COMMENT "Generated by Q3Map2 (ydnar) -convert -format ase"
+*SCENE {
+ *SCENE_FILENAME "wedge_steep.bsp"
+ *SCENE_FIRSTFRAME 0
+ *SCENE_LASTFRAME 100
+ *SCENE_FRAMESPEED 30
+ *SCENE_TICKSPERFRAME 160
+ *SCENE_BACKGROUND_STATIC 0.0000 0.0000 0.0000
+ *SCENE_AMBIENT_STATIC 0.0000 0.0000 0.0000
+}
+*MATERIAL_LIST {
+ *MATERIAL_COUNT 2
+ *MATERIAL 0 {
+ *MATERIAL_NAME "textures/radiant_regression_tests/tile_model"
+ *MATERIAL_CLASS "Standard"
+ *MATERIAL_DIFFUSE 1.000000 1.000000 0.833333
+ *MATERIAL_SHADING Phong
+ *MAP_DIFFUSE {
+ *MAP_NAME "textures/radiant_regression_tests/tile_model"
+ *MAP_CLASS "Bitmap"
+ *MAP_SUBNO 1
+ *MAP_AMOUNT 1.0
+ *MAP_TYPE Screen
+ *BITMAP "..\textures\radiant_regression_tests\tile_model.tga"
+ *BITMAP_FILTER Pyramidal
+ }
+ }
+ *MATERIAL 1 {
+ *MATERIAL_NAME "noshader"
+ *MATERIAL_CLASS "Standard"
+ *MATERIAL_DIFFUSE 1.000000 1.000000 1.000000
+ *MATERIAL_SHADING Phong
+ *MAP_DIFFUSE {
+ *MAP_NAME "noshader"
+ *MAP_CLASS "Bitmap"
+ *MAP_SUBNO 1
+ *MAP_AMOUNT 1.0
+ *MAP_TYPE Screen
+ *BITMAP "..\noshader.tga"
+ *BITMAP_FILTER Pyramidal
+ }
+ }
+}
+*GEOMOBJECT {
+ *NODE_NAME "mat0model0surf0"
+ *NODE_TM {
+ *NODE_NAME "mat0model0surf0"
+ *INHERIT_POS 0 0 0
+ *INHERIT_ROT 0 0 0
+ *INHERIT_SCL 0 0 0
+ *TM_ROW0 1.0 0 0
+ *TM_ROW1 0 1.0 0
+ *TM_ROW2 0 0 1.0
+ *TM_ROW3 0 0 0
+ *TM_POS 0.000000 0.000000 0.000000
+ }
+ *MESH {
+ *TIMEVALUE 0
+ *MESH_NUMVERTEX 4
+ *MESH_NUMFACES 2
+ *COMMENT "SURFACETYPE MST_PLANAR"
+ *MESH_VERTEX_LIST {
+ *MESH_VERTEX 0 112.000000 0.000000 0.000000
+ *MESH_VERTEX 1 64.000000 0.000000 64.000000
+ *MESH_VERTEX 2 112.000000 128.000000 0.000000
+ *MESH_VERTEX 3 64.000000 128.000000 64.000000
+ }
+ *MESH_NORMALS {
+ *MESH_FACENORMAL 0 0.800000 0.000000 0.600000
+ *MESH_FACENORMAL 1 0.800000 0.000000 0.600000
+ *MESH_VERTEXNORMAL 0 0.800000 0.000000 0.600000
+ *MESH_VERTEXNORMAL 1 0.800000 0.000000 0.600000
+ *MESH_VERTEXNORMAL 2 0.800000 0.000000 0.600000
+ *MESH_VERTEXNORMAL 3 0.800000 0.000000 0.600000
+ }
+ *MESH_FACE_LIST {
+ *MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
+ *MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
+ }
+ *MESH_NUMTVERTEX 4
+ *MESH_TVERTLIST {
+ *MESH_TVERT 0 -2.000000 0.000000 1.000000
+ *MESH_TVERT 1 -2.000000 2.000000 1.000000
+ *MESH_TVERT 2 2.000000 0.000000 1.000000
+ *MESH_TVERT 3 2.000000 2.000000 1.000000
+ }
+ *MESH_NUMTVFACES 2
+ *MESH_TFACELIST {
+ *MESH_TFACE 0 0 2 1
+ *MESH_TFACE 1 2 3 1
+ }
+ }
+ *PROP_MOTIONBLUR 0
+ *PROP_CASTSHADOW 1
+ *PROP_RECVSHADOW 1
+ *MATERIAL_REF 0
+}
+*GEOMOBJECT {
+ *NODE_NAME "mat0model0surf1"
+ *NODE_TM {
+ *NODE_NAME "mat0model0surf1"
+ *INHERIT_POS 0 0 0
+ *INHERIT_ROT 0 0 0
+ *INHERIT_SCL 0 0 0
+ *TM_ROW0 1.0 0 0
+ *TM_ROW1 0 1.0 0
+ *TM_ROW2 0 0 1.0
+ *TM_ROW3 0 0 0
+ *TM_POS 0.000000 0.000000 0.000000
+ }
+ *MESH {
+ *TIMEVALUE 0
+ *MESH_NUMVERTEX 4
+ *MESH_NUMFACES 2
+ *COMMENT "SURFACETYPE MST_PLANAR"
+ *MESH_VERTEX_LIST {
+ *MESH_VERTEX 0 0.000000 128.000000 64.000000
+ *MESH_VERTEX 1 0.000000 128.000000 0.000000
+ *MESH_VERTEX 2 64.000000 128.000000 64.000000
+ *MESH_VERTEX 3 112.000000 128.000000 0.000000
+ }
+ *MESH_NORMALS {
+ *MESH_FACENORMAL 0 0.800000 0.000000 0.600000
+ *MESH_FACENORMAL 1 0.800000 0.000000 0.600000
+ *MESH_VERTEXNORMAL 0 0.000000 1.000000 0.000000
+ *MESH_VERTEXNORMAL 1 0.000000 1.000000 0.000000
+ *MESH_VERTEXNORMAL 2 0.000000 1.000000 0.000000
+ *MESH_VERTEXNORMAL 3 0.000000 1.000000 0.000000
+ }
+ *MESH_FACE_LIST {
+ *MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
+ *MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
+ }
+ *MESH_NUMTVERTEX 4
+ *MESH_TVERTLIST {
+ *MESH_TVERT 0 -1.000000 2.000000 1.000000
+ *MESH_TVERT 1 -1.000000 0.000000 1.000000
+ *MESH_TVERT 2 1.000000 2.000000 1.000000
+ *MESH_TVERT 3 2.500000 0.000000 1.000000
+ }
+ *MESH_NUMTVFACES 2
+ *MESH_TFACELIST {
+ *MESH_TFACE 0 0 2 1
+ *MESH_TFACE 1 2 3 1
+ }
+ }
+ *PROP_MOTIONBLUR 0
+ *PROP_CASTSHADOW 1
+ *PROP_RECVSHADOW 1
+ *MATERIAL_REF 0
+}
+*GEOMOBJECT {
+ *NODE_NAME "mat0model0surf2"
+ *NODE_TM {
+ *NODE_NAME "mat0model0surf2"
+ *INHERIT_POS 0 0 0
+ *INHERIT_ROT 0 0 0
+ *INHERIT_SCL 0 0 0
+ *TM_ROW0 1.0 0 0
+ *TM_ROW1 0 1.0 0
+ *TM_ROW2 0 0 1.0
+ *TM_ROW3 0 0 0
+ *TM_POS 0.000000 0.000000 0.000000
+ }
+ *MESH {
+ *TIMEVALUE 0
+ *MESH_NUMVERTEX 4
+ *MESH_NUMFACES 2
+ *COMMENT "SURFACETYPE MST_PLANAR"
+ *MESH_VERTEX_LIST {
+ *MESH_VERTEX 0 64.000000 0.000000 64.000000
+ *MESH_VERTEX 1 0.000000 0.000000 64.000000
+ *MESH_VERTEX 2 64.000000 128.000000 64.000000
+ *MESH_VERTEX 3 0.000000 128.000000 64.000000
+ }
+ *MESH_NORMALS {
+ *MESH_FACENORMAL 0 0.800000 0.000000 0.600000
+ *MESH_FACENORMAL 1 0.800000 0.000000 0.600000
+ *MESH_VERTEXNORMAL 0 0.000000 0.000000 1.000000
+ *MESH_VERTEXNORMAL 1 0.000000 0.000000 1.000000
+ *MESH_VERTEXNORMAL 2 0.000000 0.000000 1.000000
+ *MESH_VERTEXNORMAL 3 0.000000 0.000000 1.000000
+ }
+ *MESH_FACE_LIST {
+ *MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
+ *MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
+ }
+ *MESH_NUMTVERTEX 4
+ *MESH_TVERTLIST {
+ *MESH_TVERT 0 1.000000 -1.000000 1.000000
+ *MESH_TVERT 1 -1.000000 -1.000000 1.000000
+ *MESH_TVERT 2 1.000000 3.000000 1.000000
+ *MESH_TVERT 3 -1.000000 3.000000 1.000000
+ }
+ *MESH_NUMTVFACES 2
+ *MESH_TFACELIST {
+ *MESH_TFACE 0 0 2 1
+ *MESH_TFACE 1 2 3 1
+ }
+ }
+ *PROP_MOTIONBLUR 0
+ *PROP_CASTSHADOW 1
+ *PROP_RECVSHADOW 1
+ *MATERIAL_REF 0
+}
+*GEOMOBJECT {
+ *NODE_NAME "mat0model0surf3"
+ *NODE_TM {
+ *NODE_NAME "mat0model0surf3"
+ *INHERIT_POS 0 0 0
+ *INHERIT_ROT 0 0 0
+ *INHERIT_SCL 0 0 0
+ *TM_ROW0 1.0 0 0
+ *TM_ROW1 0 1.0 0
+ *TM_ROW2 0 0 1.0
+ *TM_ROW3 0 0 0
+ *TM_POS 0.000000 0.000000 0.000000
+ }
+ *MESH {
+ *TIMEVALUE 0
+ *MESH_NUMVERTEX 4
+ *MESH_NUMFACES 2
+ *COMMENT "SURFACETYPE MST_PLANAR"
+ *MESH_VERTEX_LIST {
+ *MESH_VERTEX 0 0.000000 0.000000 64.000000
+ *MESH_VERTEX 1 0.000000 0.000000 0.000000
+ *MESH_VERTEX 2 0.000000 128.000000 64.000000
+ *MESH_VERTEX 3 0.000000 128.000000 0.000000
+ }
+ *MESH_NORMALS {
+ *MESH_FACENORMAL 0 0.800000 0.000000 0.600000
+ *MESH_FACENORMAL 1 0.800000 0.000000 0.600000
+ *MESH_VERTEXNORMAL 0 -1.000000 0.000000 0.000000
+ *MESH_VERTEXNORMAL 1 -1.000000 0.000000 0.000000
+ *MESH_VERTEXNORMAL 2 -1.000000 0.000000 0.000000
+ *MESH_VERTEXNORMAL 3 -1.000000 0.000000 0.000000
+ }
+ *MESH_FACE_LIST {
+ *MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
+ *MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
+ }
+ *MESH_NUMTVERTEX 4
+ *MESH_TVERTLIST {
+ *MESH_TVERT 0 -2.000000 2.000000 1.000000
+ *MESH_TVERT 1 -2.000000 0.000000 1.000000
+ *MESH_TVERT 2 2.000000 2.000000 1.000000
+ *MESH_TVERT 3 2.000000 0.000000 1.000000
+ }
+ *MESH_NUMTVFACES 2
+ *MESH_TFACELIST {
+ *MESH_TFACE 0 0 2 1
+ *MESH_TFACE 1 2 3 1
+ }
+ }
+ *PROP_MOTIONBLUR 0
+ *PROP_CASTSHADOW 1
+ *PROP_RECVSHADOW 1
+ *MATERIAL_REF 0
+}
+*GEOMOBJECT {
+ *NODE_NAME "mat0model0surf4"
+ *NODE_TM {
+ *NODE_NAME "mat0model0surf4"
+ *INHERIT_POS 0 0 0
+ *INHERIT_ROT 0 0 0
+ *INHERIT_SCL 0 0 0
+ *TM_ROW0 1.0 0 0
+ *TM_ROW1 0 1.0 0
+ *TM_ROW2 0 0 1.0
+ *TM_ROW3 0 0 0
+ *TM_POS 0.000000 0.000000 0.000000
+ }
+ *MESH {
+ *TIMEVALUE 0
+ *MESH_NUMVERTEX 4
+ *MESH_NUMFACES 2
+ *COMMENT "SURFACETYPE MST_PLANAR"
+ *MESH_VERTEX_LIST {
+ *MESH_VERTEX 0 112.000000 0.000000 0.000000
+ *MESH_VERTEX 1 0.000000 0.000000 0.000000
+ *MESH_VERTEX 2 64.000000 0.000000 64.000000
+ *MESH_VERTEX 3 0.000000 0.000000 64.000000
+ }
+ *MESH_NORMALS {
+ *MESH_FACENORMAL 0 0.800000 0.000000 0.600000
+ *MESH_FACENORMAL 1 0.800000 0.000000 0.600000
+ *MESH_VERTEXNORMAL 0 0.000000 -1.000000 0.000000
+ *MESH_VERTEXNORMAL 1 0.000000 -1.000000 0.000000
+ *MESH_VERTEXNORMAL 2 0.000000 -1.000000 0.000000
+ *MESH_VERTEXNORMAL 3 0.000000 -1.000000 0.000000
+ }
+ *MESH_FACE_LIST {
+ *MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
+ *MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
+ }
+ *MESH_NUMTVERTEX 4
+ *MESH_TVERTLIST {
+ *MESH_TVERT 0 2.500000 0.000000 1.000000
+ *MESH_TVERT 1 -1.000000 0.000000 1.000000
+ *MESH_TVERT 2 1.000000 2.000000 1.000000
+ *MESH_TVERT 3 -1.000000 2.000000 1.000000
+ }
+ *MESH_NUMTVFACES 2
+ *MESH_TFACELIST {
+ *MESH_TFACE 0 0 2 1
+ *MESH_TFACE 1 2 3 1
+ }
+ }
+ *PROP_MOTIONBLUR 0
+ *PROP_CASTSHADOW 1
+ *PROP_RECVSHADOW 1
+ *MATERIAL_REF 0
+}
+*GEOMOBJECT {
+ *NODE_NAME "mat0model0surf5"
+ *NODE_TM {
+ *NODE_NAME "mat0model0surf5"
+ *INHERIT_POS 0 0 0
+ *INHERIT_ROT 0 0 0
+ *INHERIT_SCL 0 0 0
+ *TM_ROW0 1.0 0 0
+ *TM_ROW1 0 1.0 0
+ *TM_ROW2 0 0 1.0
+ *TM_ROW3 0 0 0
+ *TM_POS 0.000000 0.000000 0.000000
+ }
+ *MESH {
+ *TIMEVALUE 0
+ *MESH_NUMVERTEX 4
+ *MESH_NUMFACES 2
+ *COMMENT "SURFACETYPE MST_PLANAR"
+ *MESH_VERTEX_LIST {
+ *MESH_VERTEX 0 0.000000 128.000000 0.000000
+ *MESH_VERTEX 1 0.000000 0.000000 0.000000
+ *MESH_VERTEX 2 112.000000 128.000000 0.000000
+ *MESH_VERTEX 3 112.000000 0.000000 0.000000
+ }
+ *MESH_NORMALS {
+ *MESH_FACENORMAL 0 0.800000 0.000000 0.600000
+ *MESH_FACENORMAL 1 0.800000 0.000000 0.600000
+ *MESH_VERTEXNORMAL 0 0.000000 0.000000 -1.000000
+ *MESH_VERTEXNORMAL 1 0.000000 0.000000 -1.000000
+ *MESH_VERTEXNORMAL 2 0.000000 0.000000 -1.000000
+ *MESH_VERTEXNORMAL 3 0.000000 0.000000 -1.000000
+ }
+ *MESH_FACE_LIST {
+ *MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
+ *MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
+ }
+ *MESH_NUMTVERTEX 4
+ *MESH_TVERTLIST {
+ *MESH_TVERT 0 -1.000000 3.000000 1.000000
+ *MESH_TVERT 1 -1.000000 -1.000000 1.000000
+ *MESH_TVERT 2 2.500000 3.000000 1.000000
+ *MESH_TVERT 3 2.500000 -1.000000 1.000000
+ }
+ *MESH_NUMTVFACES 2
+ *MESH_TFACELIST {
+ *MESH_TFACE 0 0 2 1
+ *MESH_TFACE 1 2 3 1
+ }
+ }
+ *PROP_MOTIONBLUR 0
+ *PROP_CASTSHADOW 1
+ *PROP_RECVSHADOW 1
+ *MATERIAL_REF 0
+}
diff --git a/tools/.gitignore b/tools/.gitignore
new file mode 100644
index 00000000..fccb064c
--- /dev/null
+++ b/tools/.gitignore
@@ -0,0 +1,3 @@
+x64
+Debug
+Release
diff --git a/tools/quake2/q2map/brushbsp.c b/tools/quake2/q2map/brushbsp.c
index 179899a3..3ca734bb 100644
--- a/tools/quake2/q2map/brushbsp.c
+++ b/tools/quake2/q2map/brushbsp.c
@@ -1293,7 +1293,7 @@ tree_t *BrushBSP( bspbrush_t *brushlist, vec3_t mins, vec3_t maxs ){
volume = BrushVolume( b );
if ( volume < microvolume ) {
- Sys_Printf( "WARNING: entity %i, brush %i: microbrush\n",
+ Sys_FPrintf( SYS_WRN, "WARNING: entity %i, brush %i: microbrush\n",
b->original->entitynum, b->original->brushnum );
}
diff --git a/tools/quake2/q2map/faces.c b/tools/quake2/q2map/faces.c
index f43f641c..15bb095f 100644
--- a/tools/quake2/q2map/faces.c
+++ b/tools/quake2/q2map/faces.c
@@ -653,7 +653,7 @@ int GetEdge2( int v1, int v2, face_t *f ){
}
#if 0
if ( v1 == edge->v[0] && v2 == edge->v[1] ) {
- Sys_Printf( "WARNING: multiple forward edge\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: multiple forward edge\n" );
return i;
}
#endif
diff --git a/tools/quake2/q2map/lightmap.c b/tools/quake2/q2map/lightmap.c
index 849b6b72..8d82b6da 100644
--- a/tools/quake2/q2map/lightmap.c
+++ b/tools/quake2/q2map/lightmap.c
@@ -874,7 +874,7 @@ void CreateDirectLights( void ){
if ( target[0] ) { // point towards target
e2 = FindTargetEntity( target );
if ( !e2 ) {
- Sys_Printf( "WARNING: light at (%i %i %i) has missing target\n",
+ Sys_FPrintf( SYS_WRN, "WARNING: light at (%i %i %i) has missing target\n",
(int)dl->origin[0], (int)dl->origin[1], (int)dl->origin[2] );
}
else
diff --git a/tools/quake2/q2map/main.c b/tools/quake2/q2map/main.c
index dbd8c0de..fb85403b 100644
--- a/tools/quake2/q2map/main.c
+++ b/tools/quake2/q2map/main.c
@@ -649,7 +649,7 @@ int main( int argc, char **argv ){
Sys_Printf( "Game: %s\n", game );
if ( !do_info && !do_bsp && !do_vis && !do_rad ) {
- Sys_Printf( "ERROR: -bsp, -vis, -light, nor -info specified.\nWhat to you want me to do?\n\n" );
+ Sys_FPrintf( SYS_ERR, "ERROR: -bsp, -vis, -light, nor -info specified.\nWhat to you want me to do?\n\n" );
}
else
{
diff --git a/tools/quake2/q2map/portals.c b/tools/quake2/q2map/portals.c
index d4e1127f..d2d96527 100644
--- a/tools/quake2/q2map/portals.c
+++ b/tools/quake2/q2map/portals.c
@@ -554,13 +554,13 @@ void MakeTreePortals_r( node_t *node ){
CalcNodeBounds( node );
if ( node->mins[0] >= node->maxs[0] ) {
- Sys_Printf( "WARNING: node without a volume\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: node without a volume\n" );
}
for ( i = 0 ; i < 3 ; i++ )
{
if ( node->mins[i] < -8000 || node->maxs[i] > 8000 ) {
- Sys_Printf( "WARNING: node with unbounded volume\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: node with unbounded volume\n" );
break;
}
}
@@ -756,7 +756,7 @@ void FloodAreas_r( node_t *node ){
// note the current area as bounding the portal
if ( e->portalareas[1] ) {
- Sys_Printf( "WARNING: areaportal entity %i touches > 2 areas\n", b->original->entitynum );
+ Sys_FPrintf( SYS_WRN, "WARNING: areaportal entity %i touches > 2 areas\n", b->original->entitynum );
return;
}
if ( e->portalareas[0] ) {
@@ -854,7 +854,7 @@ void SetAreaPortalAreas_r( node_t *node ){
e = &entities[b->original->entitynum];
node->area = e->portalareas[0];
if ( !e->portalareas[1] ) {
- Sys_Printf( "WARNING: areaportal entity %i doesn't touch two areas\n", b->original->entitynum );
+ Sys_FPrintf( SYS_WRN, "WARNING: areaportal entity %i doesn't touch two areas\n", b->original->entitynum );
return;
}
}
diff --git a/tools/quake2/q2map/qvis.c b/tools/quake2/q2map/qvis.c
index f3f86da6..ce1dd103 100644
--- a/tools/quake2/q2map/qvis.c
+++ b/tools/quake2/q2map/qvis.c
@@ -209,7 +209,7 @@ void ClusterMerge( int leafnum ){
numvis = LeafVectorFromPortalVector( portalvector, uncompressed );
if ( uncompressed[leafnum >> 3] & ( 1 << ( leafnum & 7 ) ) ) {
- Sys_Printf( "WARNING: Leaf portals saw into leaf\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: Leaf portals saw into leaf\n" );
}
uncompressed[leafnum >> 3] |= ( 1 << ( leafnum & 7 ) );
diff --git a/tools/quake3/common/aselib.c b/tools/quake3/common/aselib.c
index 8f2493e6..ef1ecac0 100644
--- a/tools/quake3/common/aselib.c
+++ b/tools/quake3/common/aselib.c
@@ -217,7 +217,7 @@ polyset_t *ASE_GetSurfaceAnimation( int which, int *pNumFrames, int skipFrameSta
{
numFramesInAnimation = pObject->anim.numFrames;
if ( maxFrames != -1 ) {
- Sys_Printf( "WARNING: ASE_GetSurfaceAnimation maxFrames > numFramesInAnimation\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: ASE_GetSurfaceAnimation maxFrames > numFramesInAnimation\n" );
}
}
@@ -411,9 +411,9 @@ static void ASE_SkipRestOfLine( void ){
}
static void ASE_KeyMAP_DIFFUSE( const char *token ){
- char fullpath[1024], bitmap[1024], modeldir[1024];
+ char bitmap[1024];
char filename[1024];
- int i = 0, count;
+ int i = 0;
strcpy( filename, gl_filename );
@@ -472,7 +472,7 @@ static void ASE_KeyMAP_DIFFUSE( const char *token ){
else
{
sprintf( ase.materials[ase.numMaterials].name, "(not converted: '%s')", bitmap );
- Sys_Printf( "WARNING: illegal material name '%s'\n", bitmap );
+ Sys_FPrintf( SYS_WRN, "WARNING: illegal material name '%s'\n", bitmap );
}
}
else
diff --git a/tools/quake3/common/polylib.c b/tools/quake3/common/polylib.c
index 10117781..ed4f8741 100644
--- a/tools/quake3/common/polylib.c
+++ b/tools/quake3/common/polylib.c
@@ -94,7 +94,7 @@ winding_accu_t *AllocWindingAccu( int points ){
c_peak_windings = c_active_windings;
}
}
- s = sizeof( vec_accu_t ) * 3 * points + sizeof( int );
+ s = sizeof(*w) + (points > 4 ? sizeof(vec3_accu_t) * (points - 4) : 0);
w = safe_malloc( s );
memset( w, 0, s );
return w;
diff --git a/tools/quake3/common/quake3-common.vcxproj b/tools/quake3/common/quake3-common.vcxproj
index 72acb722..9d54d6ac 100644
--- a/tools/quake3/common/quake3-common.vcxproj
+++ b/tools/quake3/common/quake3-common.vcxproj
@@ -38,7 +38,7 @@
StaticLibrary
- v110_xp
+ v140
diff --git a/tools/quake3/common/scriplib.c b/tools/quake3/common/scriplib.c
index 2a18e96f..acd8d5ad 100644
--- a/tools/quake3/common/scriplib.c
+++ b/tools/quake3/common/scriplib.c
@@ -153,7 +153,7 @@ qboolean EndOfScript( qboolean crossline ){
}
if ( script->buffer == NULL ) {
- Sys_Printf( "WARNING: Attempt to free already freed script buffer\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: Attempt to free already freed script buffer\n" );
}
else{
free( script->buffer );
diff --git a/tools/quake3/common/unzip.c b/tools/quake3/common/unzip.c
index d0659b18..c35cc72e 100644
--- a/tools/quake3/common/unzip.c
+++ b/tools/quake3/common/unzip.c
@@ -1199,8 +1199,8 @@ extern const char *z_errmsg[10]; /* indexed by 2-zlib_error */
typedef uLong (*check_func) OF((uLong check, const Byte *buf, uInt len));
-voidp zcalloc OF((voidp opaque, unsigned items, unsigned size));
-void zcfree OF((voidp opaque, voidp ptr));
+static voidp zcalloc OF((voidp opaque, unsigned items, unsigned size));
+static void zcfree OF((voidp opaque, voidp ptr));
#define ZALLOC(strm, items, size) \
(*((strm)->zalloc))((strm)->opaque, (items), (size))
@@ -1463,7 +1463,7 @@ static int unzlocal_getShort (FILE* fin, uLong *pX)
{
short v;
- if ( unz_GAME_QL == 1 ) {
+ if (unz_GAME_QL == 1) {
fread_ql( &v, sizeof(v), 1, fin );
} else {
fread( &v, sizeof(v), 1, fin );
@@ -1495,7 +1495,7 @@ static int unzlocal_getLong (FILE *fin, uLong *pX)
{
int v;
- if ( unz_GAME_QL == 1 ) {
+ if (unz_GAME_QL == 1) {
fread_ql( &v, sizeof(v), 1, fin );
} else {
fread( &v, sizeof(v), 1, fin );
@@ -1631,7 +1631,7 @@ static uLong unzlocal_SearchCentralDir(FILE *fin)
if (fseek(fin,uReadPos,SEEK_SET)!=0)
break;
- if ( unz_GAME_QL == 1 ) {
+ if (unz_GAME_QL == 1) {
gametype = fread_ql(buf,(uInt)uReadSize,1,fin);
} else {
gametype = fread(buf,(uInt)uReadSize,1,fin);
@@ -1697,7 +1697,7 @@ extern unzFile unzOpen (const char* path)
int err=UNZ_OK;
- if ( unz_GAME_QL == 1 ) {
+ if (unz_GAME_QL == 1) {
fin=fopen_ql(path,"rb");
} else {
fin=fopen(path,"rb");
@@ -1756,7 +1756,7 @@ extern unzFile unzOpen (const char* path)
if (err!=UNZ_OK)
{
- if ( unz_GAME_QL == 1 ) {
+ if (unz_GAME_QL == 1) {
fclose_ql(fin);
} else {
fclose(fin);
@@ -1793,7 +1793,7 @@ extern int unzClose (unzFile file)
if (s->pfile_in_zip_read!=NULL)
unzCloseCurrentFile(file);
- if ( unz_GAME_QL == 1 ) {
+ if (unz_GAME_QL == 1) {
fclose_ql(s->file);
} else {
fclose(s->file);
@@ -1856,19 +1856,24 @@ static int unzlocal_GetCurrentFileInfoInternal (unzFile file,
uLong uMagic;
long lSeek=0;
- if (file==NULL)
+ if (file == NULL) {
return UNZ_PARAMERROR;
- s=(unz_s*)file;
- if (fseek(s->file,s->pos_in_central_dir+s->byte_before_the_zipfile,SEEK_SET)!=0)
- err=UNZ_ERRNO;
+ }
+ s = (unz_s*)file;
+
+ if (fseek(s->file, s->pos_in_central_dir + s->byte_before_the_zipfile, SEEK_SET) != 0) {
+ err=UNZ_ERRNO;
+ }
/* we check the magic */
- if (err==UNZ_OK)
- if (unzlocal_getLong(s->file,&uMagic) != UNZ_OK)
- err=UNZ_ERRNO;
- else if (uMagic!=0x02014b50)
- err=UNZ_BADZIPFILE;
+ if (err == UNZ_OK) {
+ if (unzlocal_getLong(s->file,&uMagic) != UNZ_OK) {
+ err = UNZ_ERRNO;
+ } else if (uMagic != 0x02014b50) {
+ err = UNZ_BADZIPFILE;
+ }
+ }
if (unzlocal_getShort(s->file,&file_info.version) != UNZ_OK)
err=UNZ_ERRNO;
@@ -1917,98 +1922,102 @@ static int unzlocal_GetCurrentFileInfoInternal (unzFile file,
if (unzlocal_getLong(s->file,&file_info_internal.offset_curfile) != UNZ_OK)
err=UNZ_ERRNO;
- lSeek+=file_info.size_filename;
- if ((err==UNZ_OK) && (szFileName!=NULL))
- {
+ lSeek += file_info.size_filename;
+
+ if ((err == UNZ_OK) && (szFileName != NULL)) {
uLong uSizeRead ;
- if (file_info.size_filename0) && (fileNameBufferSize>0)) {
size_t gametype;
- if ( unz_GAME_QL == 1 ) {
- gametype = fread_ql(szFileName,(uInt)uSizeRead,1,s->file);
+ if (unz_GAME_QL == 1) {
+ gametype = fread_ql(szFileName, (uInt)uSizeRead, 1, s->file);
} else {
- gametype = fread(szFileName,(uInt)uSizeRead,1,s->file);
+ gametype = fread(szFileName, (uInt)uSizeRead, 1, s->file);
}
- if (gametype!=1)
- err=UNZ_ERRNO;
+ if (gametype != 1) {
+ err = UNZ_ERRNO;
+ }
}
lSeek -= uSizeRead;
}
-
- if ((err==UNZ_OK) && (extraField!=NULL))
- {
+ if ((err == UNZ_OK) && (extraField != NULL)) {
uLong uSizeRead ;
- if (file_info.size_file_extrafile,lSeek,SEEK_CUR)==0)
+ if (lSeek != 0) {
+ if (fseek(s->file, lSeek, SEEK_CUR) == 0) {
lSeek=0;
- else
- err=UNZ_ERRNO;
- if ((file_info.size_file_extra>0) && (extraFieldBufferSize>0)) {
- size_t gametype;
- if ( unz_GAME_QL == 1 ) {
- gametype = fread_ql(extraField,(uInt)uSizeRead,1,s->file);
} else {
- gametype = fread(extraField,(uInt)uSizeRead,1,s->file);
- }
- if (gametype!=1)
err=UNZ_ERRNO;
+ }
+ }
+ if ((file_info.size_file_extra > 0) && (extraFieldBufferSize > 0)) {
+ size_t gametype;
+ if (unz_GAME_QL == 1) {
+ gametype = fread_ql(extraField, (uInt)uSizeRead, 1, s->file);
+ } else {
+ gametype = fread(extraField, (uInt)uSizeRead, 1, s->file);
+ }
+ if (gametype != 1) {
+ err=UNZ_ERRNO;
+ }
}
lSeek += file_info.size_file_extra - uSizeRead;
+ } else {
+ lSeek += file_info.size_file_extra;
}
- else
- lSeek+=file_info.size_file_extra;
-
- if ((err==UNZ_OK) && (szComment!=NULL))
- {
+ if ((err == UNZ_OK) && (szComment != NULL)) {
uLong uSizeRead ;
- if (file_info.size_file_commentfile,lSeek,SEEK_CUR)==0)
+ if (lSeek != 0) {
+ if (fseek(s->file, lSeek, SEEK_CUR) ==0 ) {
lSeek=0;
- else
+ } else {
err=UNZ_ERRNO;
+ }
+ }
if ((file_info.size_file_comment>0) && (commentBufferSize>0)) {
size_t gametype;
- if ( unz_GAME_QL == 1 ) {
- gametype = fread_ql(szComment,(uInt)uSizeRead,1,s->file);
+ if (unz_GAME_QL == 1) {
+ gametype = fread_ql(szComment, (uInt)uSizeRead, 1, s->file);
} else {
- gametype = fread(szComment,(uInt)uSizeRead,1,s->file);
+ gametype = fread(szComment, (uInt)uSizeRead, 1, s->file);
}
- if (gametype!=1)
+ if (gametype!=1) {
err=UNZ_ERRNO;
+ }
}
- lSeek+=file_info.size_file_comment - uSizeRead;
- }
- else
+ lSeek += file_info.size_file_comment - uSizeRead;
+ } else {
lSeek+=file_info.size_file_comment;
+ }
- if ((err==UNZ_OK) && (pfile_info!=NULL))
+ if ((err==UNZ_OK) && (pfile_info!=NULL)) {
*pfile_info=file_info;
+ }
- if ((err==UNZ_OK) && (pfile_info_internal!=NULL))
+ if ((err==UNZ_OK) && (pfile_info_internal!=NULL)) {
*pfile_info_internal=file_info_internal;
+ }
return err;
}
@@ -2152,16 +2161,18 @@ static int unzlocal_CheckCurrentFileCoherencyHeader (unz_s* s, uInt* piSizeVar,
*poffset_local_extrafield = 0;
*psize_local_extrafield = 0;
- if (fseek(s->file,s->cur_file_info_internal.offset_curfile +
- s->byte_before_the_zipfile,SEEK_SET)!=0)
+ if (fseek(s->file, s->cur_file_info_internal.offset_curfile +
+ s->byte_before_the_zipfile, SEEK_SET) != 0) {
return UNZ_ERRNO;
+ }
-
- if (err==UNZ_OK)
- if (unzlocal_getLong(s->file,&uMagic) != UNZ_OK)
+ if (err == UNZ_OK) {
+ if (unzlocal_getLong(s->file, &uMagic) != UNZ_OK) {
err=UNZ_ERRNO;
- else if (uMagic!=0x04034b50)
+ } else if (uMagic!=0x04034b50) {
err=UNZ_BADZIPFILE;
+ }
+ }
if (unzlocal_getShort(s->file,&uData) != UNZ_OK)
err=UNZ_ERRNO;
@@ -2210,7 +2221,7 @@ static int unzlocal_CheckCurrentFileCoherencyHeader (unz_s* s, uInt* piSizeVar,
*piSizeVar += (uInt)size_filename;
- if (unzlocal_getShort(s->file,&size_extra_field) != UNZ_OK)
+ if (unzlocal_getShort(s->file, &size_extra_field) != UNZ_OK)
err=UNZ_ERRNO;
*poffset_local_extrafield= s->cur_file_info_internal.offset_curfile +
SIZEZIPLOCALHEADER + size_filename;
@@ -2327,43 +2338,43 @@ extern int unzOpenCurrentFile (unzFile file)
*/
extern int unzReadCurrentFile (unzFile file, void *buf, unsigned len)
{
- int err=UNZ_OK;
+ int err = UNZ_OK;
uInt iRead = 0;
unz_s* s;
file_in_zip_read_info_s* pfile_in_zip_read_info;
- if (file==NULL)
+ if (file == NULL)
return UNZ_PARAMERROR;
- s=(unz_s*)file;
- pfile_in_zip_read_info=s->pfile_in_zip_read;
+ s = (unz_s*)file;
+ pfile_in_zip_read_info = s->pfile_in_zip_read;
- if (pfile_in_zip_read_info==NULL)
+ if (pfile_in_zip_read_info == NULL)
return UNZ_PARAMERROR;
- if ((pfile_in_zip_read_info->read_buffer == NULL))
+ if (pfile_in_zip_read_info->read_buffer == NULL)
return UNZ_END_OF_LIST_OF_FILE;
- if (len==0)
+ if (len == 0)
return 0;
pfile_in_zip_read_info->stream.next_out = (Byte*)buf;
pfile_in_zip_read_info->stream.avail_out = (uInt)len;
- if (len>pfile_in_zip_read_info->rest_read_uncompressed)
+ if (len > pfile_in_zip_read_info->rest_read_uncompressed)
pfile_in_zip_read_info->stream.avail_out =
(uInt)pfile_in_zip_read_info->rest_read_uncompressed;
- while (pfile_in_zip_read_info->stream.avail_out>0)
- {
- if ((pfile_in_zip_read_info->stream.avail_in==0) &&
- (pfile_in_zip_read_info->rest_read_compressed>0))
- {
+ while (pfile_in_zip_read_info->stream.avail_out > 0) {
+ if ((pfile_in_zip_read_info->stream.avail_in == 0) &&
+ (pfile_in_zip_read_info->rest_read_compressed > 0)) {
+
uInt uReadThis = UNZ_BUFSIZE;
size_t gametype;
if (pfile_in_zip_read_info->rest_read_compressedrest_read_compressed; }
if (uReadThis == 0) {
- return UNZ_EOF; }
+ return UNZ_EOF;
+ }
if (s->cur_file_info.compressed_size == pfile_in_zip_read_info->rest_read_compressed) {
if (fseek(pfile_in_zip_read_info->file,
pfile_in_zip_read_info->pos_in_zipfile +
@@ -2372,15 +2383,16 @@ extern int unzReadCurrentFile (unzFile file, void *buf, unsigned len)
}
}
- if ( unz_GAME_QL == 1 ) {
+ if (unz_GAME_QL == 1) {
gametype = fread_ql(pfile_in_zip_read_info->read_buffer,uReadThis,1,
pfile_in_zip_read_info->file);
} else {
gametype = fread(pfile_in_zip_read_info->read_buffer,uReadThis,1,
pfile_in_zip_read_info->file);
}
- if (gametype!=1)
+ if (gametype!=1) {
return UNZ_ERRNO;
+ }
pfile_in_zip_read_info->pos_in_zipfile += uReadThis;
pfile_in_zip_read_info->rest_read_compressed-=uReadThis;
@@ -2390,8 +2402,7 @@ extern int unzReadCurrentFile (unzFile file, void *buf, unsigned len)
pfile_in_zip_read_info->stream.avail_in = (uInt)uReadThis;
}
- if (pfile_in_zip_read_info->compression_method==0)
- {
+ if (pfile_in_zip_read_info->compression_method==0) {
uInt uDoCopy,i ;
if (pfile_in_zip_read_info->stream.avail_out <
pfile_in_zip_read_info->stream.avail_in)
@@ -2399,9 +2410,9 @@ extern int unzReadCurrentFile (unzFile file, void *buf, unsigned len)
else
uDoCopy = pfile_in_zip_read_info->stream.avail_in ;
- for (i=0;istream.next_out+i) =
- *(pfile_in_zip_read_info->stream.next_in+i);
+ for (i = 0; i < uDoCopy; i++)
+ *(pfile_in_zip_read_info->stream.next_out + i) =
+ *(pfile_in_zip_read_info->stream.next_in + i);
pfile_in_zip_read_info->crc32 = crc32(pfile_in_zip_read_info->crc32,
pfile_in_zip_read_info->stream.next_out,
@@ -2413,9 +2424,7 @@ extern int unzReadCurrentFile (unzFile file, void *buf, unsigned len)
pfile_in_zip_read_info->stream.next_in += uDoCopy;
pfile_in_zip_read_info->stream.total_out += uDoCopy;
iRead += uDoCopy;
- }
- else
- {
+ } else {
uLong uTotalOutBefore,uTotalOutAfter;
const Byte *bufBefore;
uLong uOutThis;
@@ -2436,22 +2445,20 @@ extern int unzReadCurrentFile (unzFile file, void *buf, unsigned len)
uOutThis = uTotalOutAfter-uTotalOutBefore;
pfile_in_zip_read_info->crc32 =
- crc32(pfile_in_zip_read_info->crc32,bufBefore,
- (uInt)(uOutThis));
+ crc32(pfile_in_zip_read_info->crc32, bufBefore, (uInt)(uOutThis));
- pfile_in_zip_read_info->rest_read_uncompressed -=
- uOutThis;
+ pfile_in_zip_read_info->rest_read_uncompressed -= uOutThis;
iRead += (uInt)(uTotalOutAfter - uTotalOutBefore);
- if (err==Z_STREAM_END)
- return (iRead==0) ? UNZ_EOF : iRead;
- if (err!=Z_OK)
+ if (err == Z_STREAM_END)
+ return (iRead == 0) ? UNZ_EOF : iRead;
+ if (err != Z_OK)
break;
}
}
- if (err==Z_OK)
+ if (err == Z_OK)
return iRead;
return err;
}
diff --git a/tools/quake3/q3data/q3data.vcxproj b/tools/quake3/q3data/q3data.vcxproj
index a68b6eb7..aa46f6d8 100644
--- a/tools/quake3/q3data/q3data.vcxproj
+++ b/tools/quake3/q3data/q3data.vcxproj
@@ -43,7 +43,7 @@
Application
- v110_xp
+ v140
MultiByte
diff --git a/tools/quake3/q3map2/brush.c b/tools/quake3/q3map2/brush.c
index 8a9dcdca..5ce42eee 100644
--- a/tools/quake3/q3map2/brush.c
+++ b/tools/quake3/q3map2/brush.c
@@ -93,12 +93,7 @@ brush_t *AllocBrush( int numSides ){
brush_t *bb;
size_t c;
-
- /* allocate and clear */
- if ( numSides <= 0 ) {
- Error( "AllocBrush called with numsides = %d", numSides );
- }
- c = (size_t)&( ( (brush_t*) 0 )->sides[ numSides ] );
+ c = sizeof(*bb) + (numSides > 6 ? sizeof(side_t)*(numSides - 6) : 0);
bb = safe_malloc( c );
memset( bb, 0, c );
if ( numthreads == 1 ) {
@@ -256,7 +251,7 @@ void SnapWeldVector( vec3_t a, vec3_t b, vec3_t out ){
{
/* round to integer */
ai = Q_rint( a[ i ] );
- bi = Q_rint( a[ i ] );
+ bi = Q_rint( b[ i ] );
/* prefer exact integer */
if ( ai == a[ i ] ) {
@@ -267,7 +262,7 @@ void SnapWeldVector( vec3_t a, vec3_t b, vec3_t out ){
}
/* use nearest */
- else if ( fabs( ai - a[ i ] ) < fabs( bi < b[ i ] ) ) {
+ else if ( fabs( ai - a[ i ] ) < fabs( bi - b[ i ] ) ) {
out[ i ] = a[ i ];
}
else{
diff --git a/tools/quake3/q3map2/bsp.c b/tools/quake3/q3map2/bsp.c
index 5f9faa4a..231db0ad 100644
--- a/tools/quake3/q3map2/bsp.c
+++ b/tools/quake3/q3map2/bsp.c
@@ -188,7 +188,7 @@ static void SetCloneModelNumbers( void ){
/* get the model num */
value3 = ValueForKey( &entities[ j ], "model" );
if ( value3[ 0 ] == '\0' ) {
- Sys_Printf( "WARNING: Cloned entity %s referenced entity without model\n", value2 );
+ Sys_FPrintf( SYS_WRN, "WARNING: Cloned entity %s referenced entity without model\n", value2 );
continue;
}
models = atoi( &value2[ 1 ] );
@@ -778,7 +778,7 @@ int BSPMain( int argc, char **argv ){
else if ( !strcmp( argv[ i ], "-np" ) ) {
npDegrees = atof( argv[ i + 1 ] );
if ( npDegrees < 0.0f ) {
- shadeAngleDegrees = 0.0f;
+ npDegrees = 0.0f;
}
else if ( npDegrees > 0.0f ) {
Sys_Printf( "Forcing nonplanar surfaces with a breaking angle of %f degrees\n", npDegrees );
@@ -847,7 +847,7 @@ int BSPMain( int argc, char **argv ){
Sys_Printf( "-bsp argument unnecessary\n" );
}
else{
- Sys_Printf( "WARNING: Unknown option \"%s\"\n", argv[ i ] );
+ Sys_FPrintf( SYS_WRN, "WARNING: Unknown option \"%s\"\n", argv[ i ] );
}
}
diff --git a/tools/quake3/q3map2/bspfile_abstract.c b/tools/quake3/q3map2/bspfile_abstract.c
index 524d5cc3..3f464e2c 100644
--- a/tools/quake3/q3map2/bspfile_abstract.c
+++ b/tools/quake3/q3map2/bspfile_abstract.c
@@ -113,7 +113,7 @@ void SetDrawSurfacesBuffer(){
bspDrawSurfaces = safe_malloc_info( sizeof( bspDrawSurface_t ) * numBSPDrawSurfacesBuffer, "IncDrawSurfaces" );
- memset( bspDrawSurfaces, 0, MAX_MAP_DRAW_SURFS * sizeof( bspDrawVert_t ) );
+ memset( bspDrawSurfaces, 0, numBSPDrawSurfacesBuffer * sizeof( bspDrawSurface_t ) );
}
void SetDrawSurfaces( int n ){
@@ -126,7 +126,7 @@ void SetDrawSurfaces( int n ){
bspDrawSurfaces = safe_malloc_info( sizeof( bspDrawSurface_t ) * numBSPDrawSurfacesBuffer, "IncDrawSurfaces" );
- memset( bspDrawSurfaces, 0, n * sizeof( bspDrawVert_t ) );
+ memset( bspDrawSurfaces, 0, numBSPDrawSurfacesBuffer * sizeof( bspDrawSurface_t ) );
}
void BSPFilesCleanup(){
@@ -277,7 +277,7 @@ int GetLumpElements( bspHeader_t *header, int lump, int size ){
/* check for odd size */
if ( header->lumps[ lump ].length % size ) {
if ( force ) {
- Sys_Printf( "WARNING: GetLumpElements: odd lump size (%d) in lump %d\n", header->lumps[ lump ].length, lump );
+ Sys_FPrintf( SYS_WRN, "WARNING: GetLumpElements: odd lump size (%d) in lump %d\n", header->lumps[ lump ].length, lump );
return 0;
}
else{
@@ -321,7 +321,7 @@ int CopyLump( bspHeader_t *header, int lump, void *dest, int size ){
}
if ( length % size ) {
if ( force ) {
- Sys_Printf( "WARNING: CopyLump: odd lump size (%d) in lump %d\n", length, lump );
+ Sys_FPrintf( SYS_WRN, "WARNING: CopyLump: odd lump size (%d) in lump %d\n", length, lump );
return 0;
}
else{
diff --git a/tools/quake3/q3map2/convert_ase.c b/tools/quake3/q3map2/convert_ase.c
index 0bbb5816..628bec2f 100644
--- a/tools/quake3/q3map2/convert_ase.c
+++ b/tools/quake3/q3map2/convert_ase.c
@@ -242,7 +242,7 @@ static void ConvertShader( FILE *f, bspShader_t *shader, int shaderNum ){
/* get shader */
si = ShaderInfoForShader( shader->shader );
if ( si == NULL ) {
- Sys_Printf( "WARNING: NULL shader in BSP\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: NULL shader in BSP\n" );
return;
}
diff --git a/tools/quake3/q3map2/decals.c b/tools/quake3/q3map2/decals.c
index cd5525c7..64244ca5 100644
--- a/tools/quake3/q3map2/decals.c
+++ b/tools/quake3/q3map2/decals.c
@@ -337,7 +337,7 @@ static int MakeDecalProjector( shaderInfo_t *si, vec4_t projection, float distan
/* limit check */
if ( numProjectors >= MAX_PROJECTORS ) {
- Sys_Printf( "WARNING: MAX_PROJECTORS (%d) exceeded, no more decal projectors available.\n", MAX_PROJECTORS );
+ Sys_FPrintf( SYS_WRN, "WARNING: MAX_PROJECTORS (%d) exceeded, no more decal projectors available.\n", MAX_PROJECTORS );
return -2;
}
@@ -431,7 +431,7 @@ void ProcessDecals( void ){
/* any patches? */
if ( e->patches == NULL ) {
- Sys_Printf( "WARNING: Decal entity without any patch meshes, ignoring.\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: Decal entity without any patch meshes, ignoring.\n" );
e->epairs = NULL; /* fixme: leak! */
continue;
}
@@ -442,7 +442,7 @@ void ProcessDecals( void ){
/* no target? */
if ( e2 == NULL ) {
- Sys_Printf( "WARNING: Decal entity without a valid target, ignoring.\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: Decal entity without a valid target, ignoring.\n" );
continue;
}
diff --git a/tools/quake3/q3map2/exportents.c b/tools/quake3/q3map2/exportents.c
index 578f9e42..16bcb755 100644
--- a/tools/quake3/q3map2/exportents.c
+++ b/tools/quake3/q3map2/exportents.c
@@ -63,9 +63,9 @@ void ExportEntities( void ){
strcat( filename, ".ent" );
/* sanity check */
- if ( bspEntData == NULL || bspEntDataSize == 0 ) {
- Sys_Printf( "WARNING: No BSP entity data. aborting...\n" );
- return;
+ if ( bspEntDataSize == 0 ) {
+ Sys_FPrintf( SYS_WRN, "WARNING: No BSP entity data. aborting...\n" );
+ return;
}
/* write it */
@@ -109,4 +109,4 @@ int ExportEntitiesMain( int argc, char **argv ){
/* return to sender */
return 0;
-}
\ No newline at end of file
+}
diff --git a/tools/quake3/q3map2/image.c b/tools/quake3/q3map2/image.c
index 2af46a6f..e54bef94 100644
--- a/tools/quake3/q3map2/image.c
+++ b/tools/quake3/q3map2/image.c
@@ -67,13 +67,13 @@ static void LoadDDSBuffer( byte *buffer, int size, byte **pixels, int *width, in
/* get dds info */
if ( DDSGetInfo( (ddsBuffer_t*) buffer, &w, &h, &pf ) ) {
- Sys_Printf( "WARNING: Invalid DDS texture\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: Invalid DDS texture\n" );
return;
}
/* only certain types of dds textures are supported */
if ( pf != DDS_PF_ARGB8888 && pf != DDS_PF_DXT1 && pf != DDS_PF_DXT3 && pf != DDS_PF_DXT5 ) {
- Sys_Printf( "WARNING: Only DDS texture formats ARGB8888, DXT1, DXT3, and DXT5 are supported (%d)\n", pf );
+ Sys_FPrintf( SYS_WRN, "WARNING: Only DDS texture formats ARGB8888, DXT1, DXT3, and DXT5 are supported (%d)\n", pf );
return;
}
@@ -139,27 +139,27 @@ static void LoadPNGBuffer( byte *buffer, int size, byte **pixels, int *width, in
/* determine if this is a png file */
if ( png_sig_cmp( buffer, 0, 8 ) != 0 ) {
- Sys_Printf( "WARNING: Invalid PNG file\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: Invalid PNG file\n" );
return;
}
/* create png structs */
png = png_create_read_struct( PNG_LIBPNG_VER_STRING, NULL, NULL, NULL );
if ( png == NULL ) {
- Sys_Printf( "WARNING: Unable to create PNG read struct\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: Unable to create PNG read struct\n" );
return;
}
info = png_create_info_struct( png );
if ( info == NULL ) {
- Sys_Printf( "WARNING: Unable to create PNG info struct\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: Unable to create PNG info struct\n" );
png_destroy_read_struct( &png, NULL, NULL );
return;
}
end = png_create_info_struct( png );
if ( end == NULL ) {
- Sys_Printf( "WARNING: Unable to create PNG end info struct\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: Unable to create PNG end info struct\n" );
png_destroy_read_struct( &png, &info, NULL );
return;
}
@@ -172,7 +172,7 @@ static void LoadPNGBuffer( byte *buffer, int size, byte **pixels, int *width, in
/* set error longjmp */
if ( setjmp( png_jmpbuf(png) ) ) {
- Sys_Printf( "WARNING: An error occurred reading PNG image\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: An error occurred reading PNG image\n" );
png_destroy_read_struct( &png, &info, &end );
return;
}
@@ -402,7 +402,7 @@ image_t *ImageLoad( const char *filename ){
size = vfsLoadFile( (const char*) name, (void**) &buffer, 0 );
if ( size > 0 ) {
if ( LoadJPGBuff( buffer, size, &image->pixels, &image->width, &image->height ) == -1 && image->pixels != NULL ) {
- Sys_Printf( "WARNING: LoadJPGBuff: %s\n", (unsigned char*) image->pixels );
+ Sys_FPrintf( SYS_WRN, "WARNING: LoadJPGBuff: %s\n", (unsigned char*) image->pixels );
}
}
else
diff --git a/tools/quake3/q3map2/light.c b/tools/quake3/q3map2/light.c
index 943c88e7..2af9ac49 100644
--- a/tools/quake3/q3map2/light.c
+++ b/tools/quake3/q3map2/light.c
@@ -426,7 +426,7 @@ void CreateEntityLights( void ){
/* get target */
e2 = FindTargetEntity( target );
if ( e2 == NULL ) {
- Sys_Printf( "WARNING: light at (%i %i %i) has missing target\n",
+ Sys_FPrintf( SYS_WRN, "WARNING: light at (%i %i %i) has missing target\n",
(int) light->origin[ 0 ], (int) light->origin[ 1 ], (int) light->origin[ 2 ] );
}
else
@@ -1996,7 +1996,7 @@ int LightMain( int argc, char **argv ){
/* must be a power of 2 and greater than 2 */
if ( ( ( lmCustomSize - 1 ) & lmCustomSize ) || lmCustomSize < 2 ) {
- Sys_Printf( "WARNING: Lightmap size must be a power of 2, greater or equal to 2 pixels.\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: Lightmap size must be a power of 2, greater or equal to 2 pixels.\n" );
lmCustomSize = game->lightmapSize;
}
i++;
@@ -2249,7 +2249,7 @@ int LightMain( int argc, char **argv ){
/* unhandled args */
else{
- Sys_Printf( "WARNING: Unknown argument \"%s\"\n", argv[ i ] );
+ Sys_FPrintf( SYS_WRN, "WARNING: Unknown argument \"%s\"\n", argv[ i ] );
}
}
diff --git a/tools/quake3/q3map2/light_ydnar.c b/tools/quake3/q3map2/light_ydnar.c
index cb0430ea..e951771c 100644
--- a/tools/quake3/q3map2/light_ydnar.c
+++ b/tools/quake3/q3map2/light_ydnar.c
@@ -1613,7 +1613,7 @@ static qboolean SubmapRawLuxel( rawLightmap_t *lm, int x, int y, float bx, float
//% normal2 = SUPER_NORMAL( x, y );
}
else{
- Sys_Printf( "WARNING: Spurious lightmap S vector\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: Spurious lightmap S vector\n" );
}
VectorSubtract( origin2, origin, originVecs[ 0 ] );
@@ -1637,7 +1637,7 @@ static qboolean SubmapRawLuxel( rawLightmap_t *lm, int x, int y, float bx, float
//% normal2 = SUPER_NORMAL( x, y );
}
else{
- Sys_Printf( "WARNING: Spurious lightmap T vector\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: Spurious lightmap T vector\n" );
}
VectorSubtract( origin2, origin, originVecs[ 1 ] );
@@ -1966,7 +1966,7 @@ void IlluminateRawLightmap( int rawLightmapNum ){
/* max of MAX_LIGHTMAPS (4) styles allowed to hit a surface/lightmap */
if ( lightmapNum >= MAX_LIGHTMAPS ) {
- Sys_Printf( "WARNING: Hit per-surface style limit (%d)\n", MAX_LIGHTMAPS );
+ Sys_FPrintf( SYS_WRN, "WARNING: Hit per-surface style limit (%d)\n", MAX_LIGHTMAPS );
continue;
}
@@ -2033,7 +2033,7 @@ void IlluminateRawLightmap( int rawLightmapNum ){
}
/* set luxel filter radius */
- luxelFilterRadius = superSample * filterRadius / lm->sampleSize;
+ luxelFilterRadius = lm->sampleSize != 0 ? superSample * filterRadius / lm->sampleSize : 0;
if ( luxelFilterRadius == 0 && ( filterRadius > 0.0f || filter ) ) {
luxelFilterRadius = 1;
}
@@ -3366,7 +3366,7 @@ void SetupEnvelopes( qboolean forGrid, qboolean fastFlag ){
for ( i = 0; i < 3; i++ )
{
if ( mins[ i ] > light->origin[ i ] || maxs[ i ] < light->origin[ i ] ) {
- //% Sys_Printf( "WARNING: Light PVS bounds (%.0f, %.0f, %.0f) -> (%.0f, %.0f, %.0f)\ndo not encompass light %d (%f, %f, %f)\n",
+ //% Sys_FPrintf( SYS_WRN, "WARNING: Light PVS bounds (%.0f, %.0f, %.0f) -> (%.0f, %.0f, %.0f)\ndo not encompass light %d (%f, %f, %f)\n",
//% mins[ 0 ], mins[ 1 ], mins[ 2 ],
//% maxs[ 0 ], maxs[ 1 ], maxs[ 2 ],
//% numLights, light->origin[ 0 ], light->origin[ 1 ], light->origin[ 2 ] );
diff --git a/tools/quake3/q3map2/lightmaps_ydnar.c b/tools/quake3/q3map2/lightmaps_ydnar.c
index 9f8d6bec..e94f101f 100644
--- a/tools/quake3/q3map2/lightmaps_ydnar.c
+++ b/tools/quake3/q3map2/lightmaps_ydnar.c
@@ -127,7 +127,7 @@ void ExportLightmaps( void ){
/* sanity check */
if ( bspLightBytes == NULL ) {
- Sys_Printf( "WARNING: No BSP lightmap data\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: No BSP lightmap data\n" );
return;
}
@@ -226,7 +226,7 @@ int ImportLightmapsMain( int argc, char **argv ){
buffer = NULL;
len = vfsLoadFile( filename, (void*) &buffer, -1 );
if ( len < 0 ) {
- Sys_Printf( "WARNING: Unable to load image %s\n", filename );
+ Sys_FPrintf( SYS_WRN, "WARNING: Unable to load image %s\n", filename );
continue;
}
@@ -237,11 +237,11 @@ int ImportLightmapsMain( int argc, char **argv ){
/* sanity check it */
if ( pixels == NULL ) {
- Sys_Printf( "WARNING: Unable to load image %s\n", filename );
+ Sys_FPrintf( SYS_WRN, "WARNING: Unable to load image %s\n", filename );
continue;
}
if ( width != game->lightmapSize || height != game->lightmapSize ) {
- Sys_Printf( "WARNING: Image %s is not the right size (%d, %d) != (%d, %d)\n",
+ Sys_FPrintf( SYS_WRN, "WARNING: Image %s is not the right size (%d, %d) != (%d, %d)\n",
filename, width, height, game->lightmapSize, game->lightmapSize );
}
@@ -518,7 +518,7 @@ qboolean AddPatchToRawLightmap( int num, rawLightmap_t *lm ){
length = 0;
for ( x = 0; x < ( mesh->width - 1 ); x++ )
length += widthTable[ x ];
- lm->w = ceil( length / lm->sampleSize ) + 1;
+ lm->w = lm->sampleSize != 0 ? ceil( length / lm->sampleSize ) + 1 : 0;
if ( lm->w < ds->patchWidth ) {
lm->w = ds->patchWidth;
}
@@ -531,7 +531,7 @@ qboolean AddPatchToRawLightmap( int num, rawLightmap_t *lm ){
length = 0;
for ( y = 0; y < ( mesh->height - 1 ); y++ )
length += heightTable[ y ];
- lm->h = ceil( length / lm->sampleSize ) + 1;
+ lm->h = lm->sampleSize != 0 ? ceil( length / lm->sampleSize ) + 1 : 0;
if ( lm->h < ds->patchHeight ) {
lm->h = ds->patchHeight;
}
@@ -734,7 +734,7 @@ qboolean AddSurfaceToRawLightmap( int num, rawLightmap_t *lm ){
/* check for bogus axis */
if ( faxis[ axisNum ] == 0.0f ) {
- Sys_Printf( "WARNING: ProjectSurfaceLightmap: Chose a 0 valued axis\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: ProjectSurfaceLightmap: Chose a 0 valued axis\n" );
lm->w = lm->h = 0;
return qfalse;
}
@@ -946,7 +946,7 @@ void SetupSurfaceLightmaps( void ){
superSample = 1;
}
else if ( superSample > 8 ) {
- Sys_Printf( "WARNING: Insane supersampling amount (%d) detected.\n", superSample );
+ Sys_FPrintf( SYS_WRN, "WARNING: Insane supersampling amount (%d) detected.\n", superSample );
superSample = 8;
}
diff --git a/tools/quake3/q3map2/main.c b/tools/quake3/q3map2/main.c
index 1729773e..3a92b6f5 100644
--- a/tools/quake3/q3map2/main.c
+++ b/tools/quake3/q3map2/main.c
@@ -218,7 +218,7 @@ int main( int argc, char **argv ){
/* vlight */
else if ( !strcmp( argv[ 1 ], "-vlight" ) ) {
- Sys_Printf( "WARNING: VLight is no longer supported, defaulting to -light -fast instead\n\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: VLight is no longer supported, defaulting to -light -fast instead\n\n" );
argv[ 1 ] = "-fast"; /* eek a hack */
r = LightMain( argc, argv );
}
diff --git a/tools/quake3/q3map2/map.c b/tools/quake3/q3map2/map.c
index 9c3041c9..f491b7b7 100644
--- a/tools/quake3/q3map2/map.c
+++ b/tools/quake3/q3map2/map.c
@@ -1399,13 +1399,13 @@ void LoadEntityIndexMap( entity_t *e ){
value = ValueForKey( e, "layers" );
}
if ( value[ 0 ] == '\0' ) {
- Sys_Printf( "WARNING: Entity with index/alpha map \"%s\" has missing \"_layers\" or \"layers\" key\n", indexMapFilename );
+ Sys_FPrintf( SYS_WRN, "WARNING: Entity with index/alpha map \"%s\" has missing \"_layers\" or \"layers\" key\n", indexMapFilename );
Sys_Printf( "Entity will not be textured properly. Check your keys/values.\n" );
return;
}
numLayers = atoi( value );
if ( numLayers < 1 ) {
- Sys_Printf( "WARNING: Entity with index/alpha map \"%s\" has < 1 layer (%d)\n", indexMapFilename, numLayers );
+ Sys_FPrintf( SYS_WRN, "WARNING: Entity with index/alpha map \"%s\" has < 1 layer (%d)\n", indexMapFilename, numLayers );
Sys_Printf( "Entity will not be textured properly. Check your keys/values.\n" );
return;
}
@@ -1416,7 +1416,7 @@ void LoadEntityIndexMap( entity_t *e ){
value = ValueForKey( e, "shader" );
}
if ( value[ 0 ] == '\0' ) {
- Sys_Printf( "WARNING: Entity with index/alpha map \"%s\" has missing \"_shader\" or \"shader\" key\n", indexMapFilename );
+ Sys_FPrintf( SYS_WRN, "WARNING: Entity with index/alpha map \"%s\" has missing \"_shader\" or \"shader\" key\n", indexMapFilename );
Sys_Printf( "Entity will not be textured properly. Check your keys/values.\n" );
return;
}
@@ -1475,7 +1475,7 @@ void LoadEntityIndexMap( entity_t *e ){
/* the index map must be at least 2x2 pixels */
if ( w < 2 || h < 2 ) {
- Sys_Printf( "WARNING: Entity with index/alpha map \"%s\" is smaller than 2x2 pixels\n", indexMapFilename );
+ Sys_FPrintf( SYS_WRN, "WARNING: Entity with index/alpha map \"%s\" is smaller than 2x2 pixels\n", indexMapFilename );
Sys_Printf( "Entity will not be textured properly. Check your keys/values.\n" );
free( pixels );
return;
@@ -1555,7 +1555,7 @@ static qboolean ParseMapEntity( qboolean onlyLights ){
/* conformance check */
if ( strcmp( token, "{" ) ) {
- Sys_Printf( "WARNING: ParseEntity: { not found, found %s on line %d - last entity was at: <%4.2f, %4.2f, %4.2f>...\n"
+ Sys_FPrintf( SYS_WRN, "WARNING: ParseEntity: { not found, found %s on line %d - last entity was at: <%4.2f, %4.2f, %4.2f>...\n"
"Continuing to process map, but resulting BSP may be invalid.\n",
token, scriptline, entities[ numEntities ].origin[ 0 ], entities[ numEntities ].origin[ 1 ], entities[ numEntities ].origin[ 2 ] );
return qfalse;
@@ -1581,7 +1581,7 @@ static qboolean ParseMapEntity( qboolean onlyLights ){
{
/* get initial token */
if ( !GetToken( qtrue ) ) {
- Sys_Printf( "WARNING: ParseEntity: EOF without closing brace\n"
+ Sys_FPrintf( SYS_WRN, "WARNING: ParseEntity: EOF without closing brace\n"
"Continuing to process map, but resulting BSP may be invalid.\n" );
return qfalse;
}
@@ -1603,7 +1603,7 @@ static qboolean ParseMapEntity( qboolean onlyLights ){
}
else if ( !strcmp( token, "terrainDef" ) ) {
//% ParseTerrain();
- Sys_Printf( "WARNING: Terrain entity parsing not supported in this build.\n" ); /* ydnar */
+ Sys_FPrintf( SYS_WRN, "WARNING: Terrain entity parsing not supported in this build.\n" ); /* ydnar */
}
else if ( !strcmp( token, "brushDef" ) ) {
if ( g_bBrushPrimit == BPRIMIT_OLDBRUSHES ) {
@@ -1814,7 +1814,7 @@ void LoadMapFile( char *filename, qboolean onlyLights ){
/* get brush counts */
numMapBrushes = CountBrushList( entities[ 0 ].brushes );
if ( (float) c_detail / (float) numMapBrushes < 0.10f && numMapBrushes > 500 ) {
- Sys_Printf( "WARNING: Over 90 percent structural map detected. Compile time may be adversely affected.\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: Over 90 percent structural map detected. Compile time may be adversely affected.\n" );
}
/* emit some statistics */
diff --git a/tools/quake3/q3map2/model.c b/tools/quake3/q3map2/model.c
index a6daedf0..a3028fdb 100644
--- a/tools/quake3/q3map2/model.c
+++ b/tools/quake3/q3map2/model.c
@@ -58,11 +58,11 @@ void PicoPrintFunc( int level, const char *str ){
break;
case PICO_WARNING:
- Sys_Printf( "WARNING: %s\n", str );
+ Sys_FPrintf( SYS_WRN, "WARNING: %s\n", str );
break;
case PICO_ERROR:
- Sys_Printf( "ERROR: %s\n", str );
+ Sys_FPrintf( SYS_ERR, "ERROR: %s\n", str );
break;
case PICO_FATAL:
@@ -427,7 +427,7 @@ void InsertModel( char *name, int frame, m4x4_t transform, remap_t *remap, shade
{
/* overflow hack */
if ( ( nummapplanes + 64 ) >= ( MAX_MAP_PLANES >> 1 ) ) {
- Sys_Printf( "WARNING: MAX_MAP_PLANES (%d) hit generating clip brushes for model %s.\n",
+ Sys_FPrintf( SYS_WRN, "WARNING: MAX_MAP_PLANES (%d) hit generating clip brushes for model %s.\n",
MAX_MAP_PLANES, name );
break;
}
@@ -609,7 +609,7 @@ void AddTriangleModels( entity_t *e ){
/* get model name */
model = ValueForKey( e2, "model" );
if ( model[ 0 ] == '\0' ) {
- Sys_Printf( "WARNING: misc_model at %i %i %i without a model key\n",
+ Sys_FPrintf( SYS_WRN, "WARNING: misc_model at %i %i %i without a model key\n",
(int) origin[ 0 ], (int) origin[ 1 ], (int) origin[ 2 ] );
continue;
}
@@ -680,7 +680,7 @@ void AddTriangleModels( entity_t *e ){
/* split the string */
split = strchr( remap->from, ';' );
if ( split == NULL ) {
- Sys_Printf( "WARNING: Shader _remap key found in misc_model without a ; character\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: Shader _remap key found in misc_model without a ; character\n" );
free( remap );
remap = remap2;
continue;
diff --git a/tools/quake3/q3map2/portals.c b/tools/quake3/q3map2/portals.c
index ff1e9845..c8b5cd27 100644
--- a/tools/quake3/q3map2/portals.c
+++ b/tools/quake3/q3map2/portals.c
@@ -519,7 +519,7 @@ void MakeTreePortals_r( node_t *node ){
CalcNodeBounds( node );
if ( node->mins[0] >= node->maxs[0] ) {
- Sys_Printf( "WARNING: node without a volume\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: node without a volume\n" );
Sys_Printf( "node has %d tiny portals\n", node->tinyportals );
Sys_Printf( "node reference point %1.2f %1.2f %1.2f\n", node->referencepoint[0],
node->referencepoint[1],
@@ -777,7 +777,7 @@ void FloodAreas_r( node_t *node ){
// note the current area as bounding the portal
if ( b->portalareas[ 1 ] != -1 ) {
- Sys_Printf( "WARNING: areaportal brush %i touches > 2 areas\n", b->brushNum );
+ Sys_FPrintf( SYS_WRN, "WARNING: areaportal brush %i touches > 2 areas\n", b->brushNum );
return;
}
if ( b->portalareas[ 0 ] != -1 ) {
@@ -864,7 +864,7 @@ void CheckAreas_r( node_t *node ){
if ( node->cluster != -1 ) {
if ( node->area == -1 ) {
- Sys_Printf( "WARNING: cluster %d has area set to -1\n", node->cluster );
+ Sys_FPrintf( SYS_WRN, "WARNING: cluster %d has area set to -1\n", node->cluster );
}
}
if ( node->areaportal ) {
@@ -872,7 +872,7 @@ void CheckAreas_r( node_t *node ){
// check if the areaportal touches two areas
if ( b->portalareas[0] == -1 || b->portalareas[1] == -1 ) {
- Sys_Printf( "WARNING: areaportal brush %i doesn't touch two areas\n", b->brushNum );
+ Sys_FPrintf( SYS_WRN, "WARNING: areaportal brush %i doesn't touch two areas\n", b->brushNum );
}
}
}
diff --git a/tools/quake3/q3map2/q3map2.h b/tools/quake3/q3map2/q3map2.h
index 39959228..b92c8997 100644
--- a/tools/quake3/q3map2/q3map2.h
+++ b/tools/quake3/q3map2/q3map2.h
@@ -622,7 +622,7 @@ typedef struct foliage_s
struct foliage_s *next;
char model[ MAX_QPATH ];
float scale, density, odds;
- qboolean inverseAlpha;
+ int inverseAlpha;
}
foliage_t;
diff --git a/tools/quake3/q3map2/q3map2.vcxproj b/tools/quake3/q3map2/q3map2.vcxproj
index b383b74f..ba745ac9 100644
--- a/tools/quake3/q3map2/q3map2.vcxproj
+++ b/tools/quake3/q3map2/q3map2.vcxproj
@@ -38,7 +38,7 @@
Application
- v110_xp
+ v140
diff --git a/tools/quake3/q3map2/shaders.c b/tools/quake3/q3map2/shaders.c
index f747a27d..978856ef 100644
--- a/tools/quake3/q3map2/shaders.c
+++ b/tools/quake3/q3map2/shaders.c
@@ -357,7 +357,7 @@ void WriteMapShaderFile( void ){
/* open shader file */
file = fopen( mapShaderFile, "w" );
if ( file == NULL ) {
- Sys_Printf( "WARNING: Unable to open map shader file %s for writing\n", mapShaderFile );
+ Sys_FPrintf( SYS_WRN, "WARNING: Unable to open map shader file %s for writing\n", mapShaderFile );
return;
}
@@ -755,7 +755,7 @@ static void LoadShaderImages( shaderInfo_t *si ){
if ( si->shaderImage == NULL ) {
si->shaderImage = ImageLoad( DEFAULT_IMAGE );
if ( warnImage && strcmp( si->shader, "noshader" ) ) {
- Sys_Printf( "WARNING: Couldn't find image for shader %s\n", si->shader );
+ Sys_FPrintf( SYS_WRN, "WARNING: Couldn't find image for shader %s\n", si->shader );
}
}
@@ -809,7 +809,7 @@ shaderInfo_t *ShaderInfoForShader( const char *shaderName ){
/* dummy check */
if ( shaderName == NULL || shaderName[ 0 ] == '\0' ) {
- Sys_Printf( "WARNING: Null or empty shader name\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: Null or empty shader name\n" );
shaderName = "missing";
}
@@ -1042,7 +1042,7 @@ static void ParseShaderFile( const char *filename ){
else if ( !Q_stricmp( token, "surfaceparm" ) ) {
GetTokenAppend( shaderText, qfalse );
if ( ApplySurfaceParm( token, &si->contentFlags, &si->surfaceFlags, &si->compileFlags ) == qfalse ) {
- Sys_Printf( "WARNING: Unknown surfaceparm: \"%s\"\n", token );
+ Sys_FPrintf( SYS_WRN, "WARNING: Unknown surfaceparm: \"%s\"\n", token );
}
}
@@ -1485,7 +1485,7 @@ static void ParseShaderFile( const char *filename ){
}
else
{
- Sys_Printf( "WARNING: Unknown value for lightmap axis: %s\n", token );
+ Sys_FPrintf( SYS_WRN, "WARNING: Unknown value for lightmap axis: %s\n", token );
VectorClear( si->lightmapAxis );
}
}
@@ -1500,7 +1500,7 @@ static void ParseShaderFile( const char *filename ){
/* must be a power of 2 */
if ( ( ( si->lmCustomWidth - 1 ) & si->lmCustomWidth ) ||
( ( si->lmCustomHeight - 1 ) & si->lmCustomHeight ) ) {
- Sys_Printf( "WARNING: Non power-of-two lightmap size specified (%d, %d)\n",
+ Sys_FPrintf( SYS_WRN, "WARNING: Non power-of-two lightmap size specified (%d, %d)\n",
si->lmCustomWidth, si->lmCustomHeight );
si->lmCustomWidth = lmCustomSize;
si->lmCustomHeight = lmCustomSize;
@@ -1635,7 +1635,7 @@ static void ParseShaderFile( const char *filename ){
}
else
{
- Sys_Printf( "WARNING: Unknown q3map_tcGen method: %s\n", token );
+ Sys_FPrintf( SYS_WRN, "WARNING: Unknown q3map_tcGen method: %s\n", token );
VectorClear( si->vecs[ 0 ] );
VectorClear( si->vecs[ 1 ] );
}
@@ -1720,7 +1720,7 @@ static void ParseShaderFile( const char *filename ){
/* unknown */
else{
- Sys_Printf( "WARNING: Unknown colorMod method: %s\n", token );
+ Sys_FPrintf( SYS_WRN, "WARNING: Unknown colorMod method: %s\n", token );
}
}
@@ -1758,7 +1758,7 @@ static void ParseShaderFile( const char *filename ){
TCModRotate( si->mod, a );
}
else{
- Sys_Printf( "WARNING: Unknown q3map_tcMod method: %s\n", token );
+ Sys_FPrintf( SYS_WRN, "WARNING: Unknown q3map_tcMod method: %s\n", token );
}
}
@@ -1848,7 +1848,7 @@ static void ParseShaderFile( const char *filename ){
GetTokenAppend( shaderText, qfalse );
sprintf( temp, "*mat_%s", token );
if ( ApplySurfaceParm( temp, &si->contentFlags, &si->surfaceFlags, &si->compileFlags ) == qfalse ) {
- Sys_Printf( "WARNING: Unknown material \"%s\"\n", token );
+ Sys_FPrintf( SYS_WRN, "WARNING: Unknown material \"%s\"\n", token );
}
}
@@ -1870,7 +1870,7 @@ static void ParseShaderFile( const char *filename ){
{
//% Sys_FPrintf( SYS_VRB, "Attempting to match %s with a known surfaceparm\n", token );
if ( ApplySurfaceParm( &token[ 6 ], &si->contentFlags, &si->surfaceFlags, &si->compileFlags ) == qfalse ) {
- ; //% Sys_Printf( "WARNING: Unknown q3map_* directive \"%s\"\n", token );
+ ; //% Sys_FPrintf( SYS_WRN, "WARNING: Unknown q3map_* directive \"%s\"\n", token );
}
}
}
@@ -1932,7 +1932,7 @@ static void ParseCustomInfoParms( void ){
/* any content? */
if ( !parsedContent ) {
- Sys_Printf( "WARNING: Couldn't find valid custom contentsflag section\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: Couldn't find valid custom contentsflag section\n" );
return;
}
@@ -1958,7 +1958,7 @@ static void ParseCustomInfoParms( void ){
/* any content? */
if ( !parsedContent ) {
- Sys_Printf( "WARNING: Couldn't find valid custom surfaceflag section\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: Couldn't find valid custom surfaceflag section\n" );
}
}
diff --git a/tools/quake3/q3map2/surface.c b/tools/quake3/q3map2/surface.c
index 061e8ab6..3813cb1c 100644
--- a/tools/quake3/q3map2/surface.c
+++ b/tools/quake3/q3map2/surface.c
@@ -568,7 +568,7 @@ void ClassifySurfaces( int numSurfs, mapDrawSurface_t *ds ){
if ( fabs( dist ) > PLANAR_EPSILON ) {
//% if( ds->planeNum >= 0 )
//% {
- //% Sys_Printf( "WARNING: Planar surface marked unplanar (%f > %f)\n", fabs( dist ), PLANAR_EPSILON );
+ //% Sys_FPrintf( SYS_WRN, "WARNING: Planar surface marked unplanar (%f > %f)\n", fabs( dist ), PLANAR_EPSILON );
//% ds->verts[ i ].color[ 0 ][ 0 ] = ds->verts[ i ].color[ 0 ][ 2 ] = 0;
//% }
ds->planar = qfalse;
@@ -589,7 +589,7 @@ void ClassifySurfaces( int numSurfs, mapDrawSurface_t *ds ){
ds->planeNum = -1;
VectorClear( ds->lightmapVecs[ 2 ] );
//% if( ds->type == SURF_META || ds->type == SURF_FACE )
- //% Sys_Printf( "WARNING: Non-planar face (%d): %s\n", ds->planeNum, ds->shaderInfo->shader );
+ //% Sys_FPrintf( SYS_WRN, "WARNING: Non-planar face (%d): %s\n", ds->planeNum, ds->shaderInfo->shader );
}
/* -----------------------------------------------------------------
@@ -1148,7 +1148,7 @@ mapDrawSurface_t *DrawSurfaceForMesh( entity_t *e, parseMesh_t *p, mesh_t *mesh
/* spew forth errors */
if ( VectorLength( plane ) < 0.001f ) {
- Sys_Printf( "BOGUS " );
+ Sys_Printf( "DrawSurfaceForMesh: bogus plane\n" );
}
/* test each vert */
@@ -2450,7 +2450,7 @@ void EmitDrawIndexes( mapDrawSurface_t *ds, bspDrawSurface_t *out ){
/* validate the index */
if ( ds->type != SURFACE_PATCH ) {
if ( bspDrawIndexes[ numBSPDrawIndexes ] < 0 || bspDrawIndexes[ numBSPDrawIndexes ] >= ds->numVerts ) {
- Sys_Printf( "WARNING: %d %s has invalid index %d (%d)\n",
+ Sys_FPrintf( SYS_WRN, "WARNING: %d %s has invalid index %d (%d)\n",
numBSPDrawSurfaces,
ds->shaderInfo->shader,
bspDrawIndexes[ numBSPDrawIndexes ],
@@ -3671,7 +3671,7 @@ void FilterDrawsurfsIntoTree( entity_t *e, tree_t *tree ){
bspDrawSurface_t *out;
out = &bspDrawSurfaces[ numBSPDrawSurfaces - 1 ];
if ( out->numVerts == 3 && out->numIndexes > 3 ) {
- Sys_Printf( "\nWARNING: Potentially bad %s surface (%d: %d, %d)\n %s\n",
+ Sys_FPrintf( SYS_WRN, "WARNING: Potentially bad %s surface (%d: %d, %d)\n %s\n",
surfaceTypes[ ds->type ],
numBSPDrawSurfaces - 1, out->numVerts, out->numIndexes, si->shader );
}
diff --git a/tools/quake3/q3map2/surface_extra.c b/tools/quake3/q3map2/surface_extra.c
index 81c195e4..c86058c6 100644
--- a/tools/quake3/q3map2/surface_extra.c
+++ b/tools/quake3/q3map2/surface_extra.c
@@ -340,7 +340,7 @@ void LoadSurfaceExtraFile( const char *path ){
Sys_Printf( "Loading %s\n", srfPath );
size = LoadFile( srfPath, (void**) &buffer );
if ( size <= 0 ) {
- Sys_Printf( "WARNING: Unable to find surface file %s, using defaults.\n", srfPath );
+ Sys_FPrintf( SYS_WRN, "WARNING: Unable to find surface file %s, using defaults.\n", srfPath );
return;
}
diff --git a/tools/quake3/q3map2/surface_meta.c b/tools/quake3/q3map2/surface_meta.c
index d4a5018c..974f64d6 100644
--- a/tools/quake3/q3map2/surface_meta.c
+++ b/tools/quake3/q3map2/surface_meta.c
@@ -1358,7 +1358,7 @@ static int AddMetaTriangleToSurface( mapDrawSurface_t *ds, metaTriangle_t *tri,
( bi == ds->indexes[ i ] && ci == ds->indexes[ i + 2 ] && ai == ds->indexes[ i + 1 ] ) ||
( ci == ds->indexes[ i ] && ai == ds->indexes[ i + 2 ] && bi == ds->indexes[ i + 1 ] ) ) {
/* warn about it */
- Sys_Printf( "WARNING: Flipped triangle: (%6.0f %6.0f %6.0f) (%6.0f %6.0f %6.0f) (%6.0f %6.0f %6.0f)\n",
+ Sys_FPrintf( SYS_WRN, "WARNING: Flipped triangle: (%6.0f %6.0f %6.0f) (%6.0f %6.0f %6.0f) (%6.0f %6.0f %6.0f)\n",
ds->verts[ ai ].xyz[ 0 ], ds->verts[ ai ].xyz[ 1 ], ds->verts[ ai ].xyz[ 2 ],
ds->verts[ bi ].xyz[ 0 ], ds->verts[ bi ].xyz[ 1 ], ds->verts[ bi ].xyz[ 2 ],
ds->verts[ ci ].xyz[ 0 ], ds->verts[ ci ].xyz[ 1 ], ds->verts[ ci ].xyz[ 2 ] );
@@ -1467,8 +1467,8 @@ static void MetaTrianglesToSurface( int numPossibles, metaTriangle_t *possibles,
ClearBounds( ds->mins, ds->maxs );
/* clear verts/indexes */
- memset( verts, 0, sizeof( verts ) );
- memset( indexes, 0, sizeof( indexes ) );
+ memset( verts, 0, sizeof( *verts ) * maxSurfaceVerts );
+ memset( indexes, 0, sizeof( *indexes ) * maxSurfaceIndexes );
/* add the first triangle */
if ( AddMetaTriangleToSurface( ds, seed, qfalse ) ) {
diff --git a/tools/quake3/q3map2/vis.c b/tools/quake3/q3map2/vis.c
index e97144bc..43c9ffaa 100644
--- a/tools/quake3/q3map2/vis.c
+++ b/tools/quake3/q3map2/vis.c
@@ -203,7 +203,7 @@ void ClusterMerge( int leafnum ){
numvis = LeafVectorFromPortalVector( portalvector, uncompressed );
// if (uncompressed[leafnum>>3] & (1<<(leafnum&7)))
-// Sys_Printf ("WARNING: Leaf portals saw into leaf\n");
+// Sys_FPrintf( SYS_WRN, "WARNING: Leaf portals saw into leaf\n");
// uncompressed[leafnum>>3] |= (1<<(leafnum&7));
@@ -1113,7 +1113,7 @@ int VisMain( int argc, char **argv ){
}
else{
- Sys_Printf( "WARNING: Unknown option \"%s\"\n", argv[ i ] );
+ Sys_FPrintf( SYS_WRN, "WARNING: Unknown option \"%s\"\n", argv[ i ] );
}
}
diff --git a/tools/quake3/q3map2/writebsp.c b/tools/quake3/q3map2/writebsp.c
index 8fd073cd..fecd7855 100644
--- a/tools/quake3/q3map2/writebsp.c
+++ b/tools/quake3/q3map2/writebsp.c
@@ -162,7 +162,7 @@ void EmitLeaf( node_t *node ){
{
/* something is corrupting brushes */
if ( (size_t) b < 256 ) {
- Sys_Printf( "WARNING: Node brush list corrupted (0x%08X)\n", b );
+ Sys_FPrintf( SYS_WRN, "WARNING: Node brush list corrupted (0x%08X)\n", b );
break;
}
//% if( b->guard != 0xDEADBEEF )
diff --git a/tools/urt/tools/quake3/q3map2/bsp.c b/tools/urt/tools/quake3/q3map2/bsp.c
index 24c49420..500333b6 100644
--- a/tools/urt/tools/quake3/q3map2/bsp.c
+++ b/tools/urt/tools/quake3/q3map2/bsp.c
@@ -115,7 +115,7 @@ static void SetCloneModelNumbers( void ){
/* get the model num */
value3 = ValueForKey( &entities[ j ], "model" );
if ( value3[ 0 ] == '\0' ) {
- Sys_Printf( "WARNING: Cloned entity %s referenced entity without model\n", value2 );
+ Sys_FPrintf( SYS_WRN, "WARNING: Cloned entity %s referenced entity without model\n", value2 );
continue;
}
models = atoi( &value2[ 1 ] );
@@ -783,7 +783,7 @@ int BSPMain( int argc, char **argv ){
Sys_Printf( "-bsp argument unnecessary\n" );
}
else{
- Sys_Printf( "WARNING: Unknown option \"%s\"\n", argv[ i ] );
+ Sys_FPrintf( SYS_WRN, "WARNING: Unknown option \"%s\"\n", argv[ i ] );
}
}
diff --git a/tools/urt/tools/quake3/q3map2/bspfile_abstract.c b/tools/urt/tools/quake3/q3map2/bspfile_abstract.c
index 116f3d33..39935e06 100644
--- a/tools/urt/tools/quake3/q3map2/bspfile_abstract.c
+++ b/tools/urt/tools/quake3/q3map2/bspfile_abstract.c
@@ -259,7 +259,7 @@ int GetLumpElements( bspHeader_t *header, int lump, int size ){
/* check for odd size */
if ( header->lumps[ lump ].length % size ) {
if ( force ) {
- Sys_Printf( "WARNING: GetLumpElements: odd lump size (%d) in lump %d\n", header->lumps[ lump ].length, lump );
+ Sys_FPrintf( SYS_WRN, "WARNING: GetLumpElements: odd lump size (%d) in lump %d\n", header->lumps[ lump ].length, lump );
return 0;
}
else{
@@ -303,7 +303,7 @@ int CopyLump( bspHeader_t *header, int lump, void *dest, int size ){
}
if ( length % size ) {
if ( force ) {
- Sys_Printf( "WARNING: CopyLump: odd lump size (%d) in lump %d\n", length, lump );
+ Sys_FPrintf( SYS_WRN, "WARNING: CopyLump: odd lump size (%d) in lump %d\n", length, lump );
return 0;
}
else{
diff --git a/tools/urt/tools/quake3/q3map2/convert_ase.c b/tools/urt/tools/quake3/q3map2/convert_ase.c
index 0bbb5816..628bec2f 100644
--- a/tools/urt/tools/quake3/q3map2/convert_ase.c
+++ b/tools/urt/tools/quake3/q3map2/convert_ase.c
@@ -242,7 +242,7 @@ static void ConvertShader( FILE *f, bspShader_t *shader, int shaderNum ){
/* get shader */
si = ShaderInfoForShader( shader->shader );
if ( si == NULL ) {
- Sys_Printf( "WARNING: NULL shader in BSP\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: NULL shader in BSP\n" );
return;
}
diff --git a/tools/urt/tools/quake3/q3map2/decals.c b/tools/urt/tools/quake3/q3map2/decals.c
index cd5525c7..64244ca5 100644
--- a/tools/urt/tools/quake3/q3map2/decals.c
+++ b/tools/urt/tools/quake3/q3map2/decals.c
@@ -337,7 +337,7 @@ static int MakeDecalProjector( shaderInfo_t *si, vec4_t projection, float distan
/* limit check */
if ( numProjectors >= MAX_PROJECTORS ) {
- Sys_Printf( "WARNING: MAX_PROJECTORS (%d) exceeded, no more decal projectors available.\n", MAX_PROJECTORS );
+ Sys_FPrintf( SYS_WRN, "WARNING: MAX_PROJECTORS (%d) exceeded, no more decal projectors available.\n", MAX_PROJECTORS );
return -2;
}
@@ -431,7 +431,7 @@ void ProcessDecals( void ){
/* any patches? */
if ( e->patches == NULL ) {
- Sys_Printf( "WARNING: Decal entity without any patch meshes, ignoring.\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: Decal entity without any patch meshes, ignoring.\n" );
e->epairs = NULL; /* fixme: leak! */
continue;
}
@@ -442,7 +442,7 @@ void ProcessDecals( void ){
/* no target? */
if ( e2 == NULL ) {
- Sys_Printf( "WARNING: Decal entity without a valid target, ignoring.\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: Decal entity without a valid target, ignoring.\n" );
continue;
}
diff --git a/tools/urt/tools/quake3/q3map2/exportents.c b/tools/urt/tools/quake3/q3map2/exportents.c
index 578f9e42..b1236608 100644
--- a/tools/urt/tools/quake3/q3map2/exportents.c
+++ b/tools/urt/tools/quake3/q3map2/exportents.c
@@ -64,7 +64,7 @@ void ExportEntities( void ){
/* sanity check */
if ( bspEntData == NULL || bspEntDataSize == 0 ) {
- Sys_Printf( "WARNING: No BSP entity data. aborting...\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: No BSP entity data. aborting...\n" );
return;
}
diff --git a/tools/urt/tools/quake3/q3map2/image.c b/tools/urt/tools/quake3/q3map2/image.c
index 891bdc9a..39a19854 100644
--- a/tools/urt/tools/quake3/q3map2/image.c
+++ b/tools/urt/tools/quake3/q3map2/image.c
@@ -67,13 +67,13 @@ static void LoadDDSBuffer( byte *buffer, int size, byte **pixels, int *width, in
/* get dds info */
if ( DDSGetInfo( (ddsBuffer_t*) buffer, &w, &h, &pf ) ) {
- Sys_Printf( "WARNING: Invalid DDS texture\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: Invalid DDS texture\n" );
return;
}
/* only certain types of dds textures are supported */
if ( pf != DDS_PF_ARGB8888 && pf != DDS_PF_DXT1 && pf != DDS_PF_DXT3 && pf != DDS_PF_DXT5 ) {
- Sys_Printf( "WARNING: Only DDS texture formats ARGB8888, DXT1, DXT3, and DXT5 are supported (%d)\n", pf );
+ Sys_FPrintf( SYS_WRN, "WARNING: Only DDS texture formats ARGB8888, DXT1, DXT3, and DXT5 are supported (%d)\n", pf );
return;
}
@@ -139,27 +139,27 @@ static void LoadPNGBuffer( byte *buffer, int size, byte **pixels, int *width, in
/* determine if this is a png file */
if ( png_sig_cmp( buffer, 0, 8 ) != 0 ) {
- Sys_Printf( "WARNING: Invalid PNG file\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: Invalid PNG file\n" );
return;
}
/* create png structs */
png = png_create_read_struct( PNG_LIBPNG_VER_STRING, NULL, NULL, NULL );
if ( png == NULL ) {
- Sys_Printf( "WARNING: Unable to create PNG read struct\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: Unable to create PNG read struct\n" );
return;
}
info = png_create_info_struct( png );
if ( info == NULL ) {
- Sys_Printf( "WARNING: Unable to create PNG info struct\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: Unable to create PNG info struct\n" );
png_destroy_read_struct( &png, NULL, NULL );
return;
}
end = png_create_info_struct( png );
if ( end == NULL ) {
- Sys_Printf( "WARNING: Unable to create PNG end info struct\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: Unable to create PNG end info struct\n" );
png_destroy_read_struct( &png, &info, NULL );
return;
}
@@ -172,7 +172,7 @@ static void LoadPNGBuffer( byte *buffer, int size, byte **pixels, int *width, in
/* set error longjmp */
if ( setjmp( png_jmpbuf(png) ) ) {
- Sys_Printf( "WARNING: An error occurred reading PNG image\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: An error occurred reading PNG image\n" );
png_destroy_read_struct( &png, &info, &end );
return;
}
@@ -402,7 +402,7 @@ image_t *ImageLoad( const char *filename ){
size = vfsLoadFile( (const char*) name, (void**) &buffer, 0 );
if ( size > 0 ) {
if ( LoadJPGBuff( buffer, size, &image->pixels, &image->width, &image->height ) == -1 && image->pixels != NULL ) {
- Sys_Printf( "WARNING: LoadJPGBuff: %s\n", (unsigned char*) image->pixels );
+ Sys_FPrintf( SYS_WRN, "WARNING: LoadJPGBuff: %s\n", (unsigned char*) image->pixels );
}
}
else
diff --git a/tools/urt/tools/quake3/q3map2/light.c b/tools/urt/tools/quake3/q3map2/light.c
index e4cf8aca..41bbc18e 100644
--- a/tools/urt/tools/quake3/q3map2/light.c
+++ b/tools/urt/tools/quake3/q3map2/light.c
@@ -424,7 +424,7 @@ void CreateEntityLights( void ){
/* get target */
e2 = FindTargetEntity( target );
if ( e2 == NULL ) {
- Sys_Printf( "WARNING: light at (%i %i %i) has missing target\n",
+ Sys_FPrintf( SYS_WRN, "WARNING: light at (%i %i %i) has missing target\n",
(int) light->origin[ 0 ], (int) light->origin[ 1 ], (int) light->origin[ 2 ] );
}
else
@@ -2210,7 +2210,7 @@ int LightMain( int argc, char **argv ){
/* must be a power of 2 and greater than 2 */
if ( ( ( lmCustomSize - 1 ) & lmCustomSize ) || lmCustomSize < 2 ) {
- Sys_Printf( "WARNING: Lightmap size must be a power of 2, greater or equal to 2 pixels.\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: Lightmap size must be a power of 2, greater or equal to 2 pixels.\n" );
lmCustomSize = game->lightmapSize;
}
i++;
@@ -2476,7 +2476,7 @@ int LightMain( int argc, char **argv ){
/* unhandled args */
else{
- Sys_Printf( "WARNING: Unknown argument \"%s\"\n", argv[ i ] );
+ Sys_FPrintf( SYS_WRN, "WARNING: Unknown argument \"%s\"\n", argv[ i ] );
}
}
diff --git a/tools/urt/tools/quake3/q3map2/light_ydnar.c b/tools/urt/tools/quake3/q3map2/light_ydnar.c
index 94e26e12..674777d1 100644
--- a/tools/urt/tools/quake3/q3map2/light_ydnar.c
+++ b/tools/urt/tools/quake3/q3map2/light_ydnar.c
@@ -1783,7 +1783,7 @@ static qboolean SubmapRawLuxel( rawLightmap_t *lm, int x, int y, float bx, float
//% normal2 = SUPER_NORMAL( x, y );
}
else{
- Sys_Printf( "WARNING: Spurious lightmap S vector\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: Spurious lightmap S vector\n" );
}
VectorSubtract( origin2, origin, originVecs[ 0 ] );
@@ -1807,7 +1807,7 @@ static qboolean SubmapRawLuxel( rawLightmap_t *lm, int x, int y, float bx, float
//% normal2 = SUPER_NORMAL( x, y );
}
else{
- Sys_Printf( "WARNING: Spurious lightmap T vector\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: Spurious lightmap T vector\n" );
}
VectorSubtract( origin2, origin, originVecs[ 1 ] );
@@ -2138,7 +2138,7 @@ void IlluminateRawLightmap( int rawLightmapNum ){
/* max of MAX_LIGHTMAPS (4) styles allowed to hit a surface/lightmap */
if ( lightmapNum >= MAX_LIGHTMAPS ) {
- Sys_Printf( "WARNING: Hit per-surface style limit (%d)\n", MAX_LIGHTMAPS );
+ Sys_FPrintf( SYS_WRN, "WARNING: Hit per-surface style limit (%d)\n", MAX_LIGHTMAPS );
continue;
}
@@ -3621,7 +3621,7 @@ void SetupEnvelopes( qboolean forGrid, qboolean fastFlag ){
for ( i = 0; i < 3; i++ )
{
if ( mins[ i ] > light->origin[ i ] || maxs[ i ] < light->origin[ i ] ) {
- //% Sys_Printf( "WARNING: Light PVS bounds (%.0f, %.0f, %.0f) -> (%.0f, %.0f, %.0f)\ndo not encompass light %d (%f, %f, %f)\n",
+ //% Sys_FPrintf( SYS_WRN, "WARNING: Light PVS bounds (%.0f, %.0f, %.0f) -> (%.0f, %.0f, %.0f)\ndo not encompass light %d (%f, %f, %f)\n",
//% mins[ 0 ], mins[ 1 ], mins[ 2 ],
//% maxs[ 0 ], maxs[ 1 ], maxs[ 2 ],
//% numLights, light->origin[ 0 ], light->origin[ 1 ], light->origin[ 2 ] );
diff --git a/tools/urt/tools/quake3/q3map2/lightmaps_ydnar.c b/tools/urt/tools/quake3/q3map2/lightmaps_ydnar.c
index ea276d2c..f434cc41 100644
--- a/tools/urt/tools/quake3/q3map2/lightmaps_ydnar.c
+++ b/tools/urt/tools/quake3/q3map2/lightmaps_ydnar.c
@@ -125,7 +125,7 @@ void ExportLightmaps( void ){
/* sanity check */
if ( bspLightBytes == NULL ) {
- Sys_Printf( "WARNING: No BSP lightmap data\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: No BSP lightmap data\n" );
return;
}
@@ -224,7 +224,7 @@ int ImportLightmapsMain( int argc, char **argv ){
buffer = NULL;
len = vfsLoadFile( filename, (void*) &buffer, -1 );
if ( len < 0 ) {
- Sys_Printf( "WARNING: Unable to load image %s\n", filename );
+ Sys_FPrintf( SYS_WRN, "WARNING: Unable to load image %s\n", filename );
continue;
}
@@ -235,11 +235,11 @@ int ImportLightmapsMain( int argc, char **argv ){
/* sanity check it */
if ( pixels == NULL ) {
- Sys_Printf( "WARNING: Unable to load image %s\n", filename );
+ Sys_FPrintf( SYS_WRN, "WARNING: Unable to load image %s\n", filename );
continue;
}
if ( width != game->lightmapSize || height != game->lightmapSize ) {
- Sys_Printf( "WARNING: Image %s is not the right size (%d, %d) != (%d, %d)\n",
+ Sys_FPrintf( SYS_WRN, "WARNING: Image %s is not the right size (%d, %d) != (%d, %d)\n",
filename, width, height, game->lightmapSize, game->lightmapSize );
}
@@ -786,7 +786,7 @@ qboolean AddSurfaceToRawLightmap( int num, rawLightmap_t *lm ){
/* check for bogus axis */
if ( faxis[ axisNum ] == 0.0f ) {
- Sys_Printf( "WARNING: ProjectSurfaceLightmap: Chose a 0 valued axis\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: ProjectSurfaceLightmap: Chose a 0 valued axis\n" );
lm->w = lm->h = 0;
return qfalse;
}
@@ -1007,7 +1007,7 @@ void SetupSurfaceLightmaps( void ){
superSample = 1;
}
else if ( superSample > 8 ) {
- Sys_Printf( "WARNING: Insane supersampling amount (%d) detected.\n", superSample );
+ Sys_FPrintf( SYS_WRN, "WARNING: Insane supersampling amount (%d) detected.\n", superSample );
superSample = 8;
}
diff --git a/tools/urt/tools/quake3/q3map2/main.c b/tools/urt/tools/quake3/q3map2/main.c
index 4000bd38..924881b9 100644
--- a/tools/urt/tools/quake3/q3map2/main.c
+++ b/tools/urt/tools/quake3/q3map2/main.c
@@ -601,7 +601,7 @@ int main( int argc, char **argv ){
/* vlight */
else if ( !strcmp( argv[ 1 ], "-vlight" ) ) {
- Sys_Printf( "WARNING: VLight is no longer supported, defaulting to -light -fast instead\n\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: VLight is no longer supported, defaulting to -light -fast instead\n\n" );
argv[ 1 ] = "-fast"; /* eek a hack */
r = LightMain( argc, argv );
}
diff --git a/tools/urt/tools/quake3/q3map2/map.c b/tools/urt/tools/quake3/q3map2/map.c
index f087784d..203b0b42 100644
--- a/tools/urt/tools/quake3/q3map2/map.c
+++ b/tools/urt/tools/quake3/q3map2/map.c
@@ -1239,13 +1239,13 @@ void LoadEntityIndexMap( entity_t *e ){
value = ValueForKey( e, "layers" );
}
if ( value[ 0 ] == '\0' ) {
- Sys_Printf( "WARNING: Entity with index/alpha map \"%s\" has missing \"_layers\" or \"layers\" key\n", indexMapFilename );
+ Sys_FPrintf( SYS_WRN, "WARNING: Entity with index/alpha map \"%s\" has missing \"_layers\" or \"layers\" key\n", indexMapFilename );
Sys_Printf( "Entity will not be textured properly. Check your keys/values.\n" );
return;
}
numLayers = atoi( value );
if ( numLayers < 1 ) {
- Sys_Printf( "WARNING: Entity with index/alpha map \"%s\" has < 1 layer (%d)\n", indexMapFilename, numLayers );
+ Sys_FPrintf( SYS_WRN, "WARNING: Entity with index/alpha map \"%s\" has < 1 layer (%d)\n", indexMapFilename, numLayers );
Sys_Printf( "Entity will not be textured properly. Check your keys/values.\n" );
return;
}
@@ -1256,7 +1256,7 @@ void LoadEntityIndexMap( entity_t *e ){
value = ValueForKey( e, "shader" );
}
if ( value[ 0 ] == '\0' ) {
- Sys_Printf( "WARNING: Entity with index/alpha map \"%s\" has missing \"_shader\" or \"shader\" key\n", indexMapFilename );
+ Sys_FPrintf( SYS_WRN, "WARNING: Entity with index/alpha map \"%s\" has missing \"_shader\" or \"shader\" key\n", indexMapFilename );
Sys_Printf( "Entity will not be textured properly. Check your keys/values.\n" );
return;
}
@@ -1315,7 +1315,7 @@ void LoadEntityIndexMap( entity_t *e ){
/* the index map must be at least 2x2 pixels */
if ( w < 2 || h < 2 ) {
- Sys_Printf( "WARNING: Entity with index/alpha map \"%s\" is smaller than 2x2 pixels\n", indexMapFilename );
+ Sys_FPrintf( SYS_WRN, "WARNING: Entity with index/alpha map \"%s\" is smaller than 2x2 pixels\n", indexMapFilename );
Sys_Printf( "Entity will not be textured properly. Check your keys/values.\n" );
free( pixels );
return;
@@ -1395,7 +1395,7 @@ static qboolean ParseMapEntity( qboolean onlyLights ){
/* conformance check */
if ( strcmp( token, "{" ) ) {
- Sys_Printf( "WARNING: ParseEntity: { not found, found %s on line %d - last entity was at: <%4.2f, %4.2f, %4.2f>...\n"
+ Sys_FPrintf( SYS_WRN, "WARNING: ParseEntity: { not found, found %s on line %d - last entity was at: <%4.2f, %4.2f, %4.2f>...\n"
"Continuing to process map, but resulting BSP may be invalid.\n",
token, scriptline, entities[ numEntities ].origin[ 0 ], entities[ numEntities ].origin[ 1 ], entities[ numEntities ].origin[ 2 ] );
return qfalse;
@@ -1421,7 +1421,7 @@ static qboolean ParseMapEntity( qboolean onlyLights ){
{
/* get initial token */
if ( !GetToken( qtrue ) ) {
- Sys_Printf( "WARNING: ParseEntity: EOF without closing brace\n"
+ Sys_FPrintf( SYS_WRN, "WARNING: ParseEntity: EOF without closing brace\n"
"Continuing to process map, but resulting BSP may be invalid.\n" );
return qfalse;
}
@@ -1443,7 +1443,7 @@ static qboolean ParseMapEntity( qboolean onlyLights ){
}
else if ( !strcmp( token, "terrainDef" ) ) {
//% ParseTerrain();
- Sys_Printf( "WARNING: Terrain entity parsing not supported in this build.\n" ); /* ydnar */
+ Sys_FPrintf( SYS_WRN, "WARNING: Terrain entity parsing not supported in this build.\n" ); /* ydnar */
}
else if ( !strcmp( token, "brushDef" ) ) {
if ( g_bBrushPrimit == BPRIMIT_OLDBRUSHES ) {
@@ -1654,7 +1654,7 @@ void LoadMapFile( char *filename, qboolean onlyLights ){
/* get brush counts */
numMapBrushes = CountBrushList( entities[ 0 ].brushes );
if ( (float) c_detail / (float) numMapBrushes < 0.10f && numMapBrushes > 500 ) {
- Sys_Printf( "WARNING: Over 90 percent structural map detected. Compile time may be adversely affected.\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: Over 90 percent structural map detected. Compile time may be adversely affected.\n" );
}
/* emit some statistics */
diff --git a/tools/urt/tools/quake3/q3map2/model.c b/tools/urt/tools/quake3/q3map2/model.c
index f4413b4d..9361c65d 100644
--- a/tools/urt/tools/quake3/q3map2/model.c
+++ b/tools/urt/tools/quake3/q3map2/model.c
@@ -58,11 +58,11 @@ void PicoPrintFunc( int level, const char *str ){
break;
case PICO_WARNING:
- Sys_Printf( "WARNING: %s\n", str );
+ Sys_FPrintf( SYS_WRN, "WARNING: %s\n", str );
break;
case PICO_ERROR:
- Sys_Printf( "ERROR: %s\n", str );
+ Sys_FPrintf( SYS_ERR, "ERROR: %s\n", str );
break;
case PICO_FATAL:
@@ -449,7 +449,7 @@ void InsertModel( char *name, int frame, m4x4_t transform, remap_t *remap, shade
{
/* overflow hack */
if ( ( nummapplanes + 64 ) >= ( MAX_MAP_PLANES >> 1 ) ) {
- Sys_Printf( "WARNING: MAX_MAP_PLANES (%d) hit generating clip brushes for model %s.\n",
+ Sys_FPrintf( SYS_WRN, "WARNING: MAX_MAP_PLANES (%d) hit generating clip brushes for model %s.\n",
MAX_MAP_PLANES, name );
break;
}
@@ -599,12 +599,12 @@ void InsertModel( char *name, int frame, m4x4_t transform, remap_t *remap, shade
}
else
{
- Sys_Printf( "WARNING: Model %s unable to generate brush - Case 1. %s\n", name,ds->shaderInfo->shader );
+ Sys_FPrintf( SYS_WRN, "WARNING: Model %s unable to generate brush - Case 1. %s\n", name,ds->shaderInfo->shader );
}
}
else
{
- Sys_Printf( "WARNING: Model %s unable to generate brush - Case 2. %s\n", name,ds->shaderInfo->shader );
+ Sys_FPrintf( SYS_WRN, "WARNING: Model %s unable to generate brush - Case 2. %s\n", name,ds->shaderInfo->shader );
}
}
}
@@ -676,7 +676,7 @@ void AddTriangleModels( entity_t *e ){
/* get model name */
model = ValueForKey( e2, "model" );
if ( model[ 0 ] == '\0' ) {
- Sys_Printf( "WARNING: misc_model at %i %i %i without a model key\n",
+ Sys_FPrintf( SYS_WRN, "WARNING: misc_model at %i %i %i without a model key\n",
(int) origin[ 0 ], (int) origin[ 1 ], (int) origin[ 2 ] );
continue;
}
@@ -747,7 +747,7 @@ void AddTriangleModels( entity_t *e ){
/* split the string */
split = strchr( remap->from, ';' );
if ( split == NULL ) {
- Sys_Printf( "WARNING: Shader _remap key found in misc_model without a ; character\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: Shader _remap key found in misc_model without a ; character\n" );
free( remap );
remap = remap2;
continue;
diff --git a/tools/urt/tools/quake3/q3map2/portals.c b/tools/urt/tools/quake3/q3map2/portals.c
index ff1e9845..c8b5cd27 100644
--- a/tools/urt/tools/quake3/q3map2/portals.c
+++ b/tools/urt/tools/quake3/q3map2/portals.c
@@ -519,7 +519,7 @@ void MakeTreePortals_r( node_t *node ){
CalcNodeBounds( node );
if ( node->mins[0] >= node->maxs[0] ) {
- Sys_Printf( "WARNING: node without a volume\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: node without a volume\n" );
Sys_Printf( "node has %d tiny portals\n", node->tinyportals );
Sys_Printf( "node reference point %1.2f %1.2f %1.2f\n", node->referencepoint[0],
node->referencepoint[1],
@@ -777,7 +777,7 @@ void FloodAreas_r( node_t *node ){
// note the current area as bounding the portal
if ( b->portalareas[ 1 ] != -1 ) {
- Sys_Printf( "WARNING: areaportal brush %i touches > 2 areas\n", b->brushNum );
+ Sys_FPrintf( SYS_WRN, "WARNING: areaportal brush %i touches > 2 areas\n", b->brushNum );
return;
}
if ( b->portalareas[ 0 ] != -1 ) {
@@ -864,7 +864,7 @@ void CheckAreas_r( node_t *node ){
if ( node->cluster != -1 ) {
if ( node->area == -1 ) {
- Sys_Printf( "WARNING: cluster %d has area set to -1\n", node->cluster );
+ Sys_FPrintf( SYS_WRN, "WARNING: cluster %d has area set to -1\n", node->cluster );
}
}
if ( node->areaportal ) {
@@ -872,7 +872,7 @@ void CheckAreas_r( node_t *node ){
// check if the areaportal touches two areas
if ( b->portalareas[0] == -1 || b->portalareas[1] == -1 ) {
- Sys_Printf( "WARNING: areaportal brush %i doesn't touch two areas\n", b->brushNum );
+ Sys_FPrintf( SYS_WRN, "WARNING: areaportal brush %i doesn't touch two areas\n", b->brushNum );
}
}
}
diff --git a/tools/urt/tools/quake3/q3map2/q3map2_urt.vcxproj b/tools/urt/tools/quake3/q3map2/q3map2_urt.vcxproj
index 5fb0ef29..271053b4 100644
--- a/tools/urt/tools/quake3/q3map2/q3map2_urt.vcxproj
+++ b/tools/urt/tools/quake3/q3map2/q3map2_urt.vcxproj
@@ -32,7 +32,7 @@
Application
- v110_xp
+ v140
false
MultiByte
diff --git a/tools/urt/tools/quake3/q3map2/shaders.c b/tools/urt/tools/quake3/q3map2/shaders.c
index 863a59ef..932c5d07 100644
--- a/tools/urt/tools/quake3/q3map2/shaders.c
+++ b/tools/urt/tools/quake3/q3map2/shaders.c
@@ -357,7 +357,7 @@ void WriteMapShaderFile( void ){
/* open shader file */
file = fopen( mapShaderFile, "w" );
if ( file == NULL ) {
- Sys_Printf( "WARNING: Unable to open map shader file %s for writing\n", mapShaderFile );
+ Sys_FPrintf( SYS_WRN, "WARNING: Unable to open map shader file %s for writing\n", mapShaderFile );
return;
}
@@ -754,7 +754,7 @@ static void LoadShaderImages( shaderInfo_t *si ){
if ( si->shaderImage == NULL ) {
si->shaderImage = ImageLoad( DEFAULT_IMAGE );
if ( warnImage && strcmp( si->shader, "noshader" ) ) {
- Sys_Printf( "WARNING: Couldn't find image for shader %s\n", si->shader );
+ Sys_FPrintf( SYS_WRN, "WARNING: Couldn't find image for shader %s\n", si->shader );
}
}
@@ -813,7 +813,7 @@ shaderInfo_t *ShaderInfoForShader( const char *shaderName ){
/* dummy check */
if ( shaderName == NULL || shaderName[ 0 ] == '\0' ) {
- Sys_Printf( "WARNING: Null or empty shader name\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: Null or empty shader name\n" );
shaderName = "missing";
}
@@ -1046,7 +1046,7 @@ static void ParseShaderFile( const char *filename ){
else if ( !Q_stricmp( token, "surfaceparm" ) ) {
GetTokenAppend( shaderText, qfalse );
if ( ApplySurfaceParm( token, &si->contentFlags, &si->surfaceFlags, &si->compileFlags ) == qfalse ) {
- Sys_Printf( "WARNING: Unknown surfaceparm: \"%s\"\n", token );
+ Sys_FPrintf( SYS_WRN, "WARNING: Unknown surfaceparm: \"%s\"\n", token );
}
}
@@ -1489,7 +1489,7 @@ static void ParseShaderFile( const char *filename ){
}
else
{
- Sys_Printf( "WARNING: Unknown value for lightmap axis: %s\n", token );
+ Sys_FPrintf( SYS_WRN, "WARNING: Unknown value for lightmap axis: %s\n", token );
VectorClear( si->lightmapAxis );
}
}
@@ -1504,7 +1504,7 @@ static void ParseShaderFile( const char *filename ){
/* must be a power of 2 */
if ( ( ( si->lmCustomWidth - 1 ) & si->lmCustomWidth ) ||
( ( si->lmCustomHeight - 1 ) & si->lmCustomHeight ) ) {
- Sys_Printf( "WARNING: Non power-of-two lightmap size specified (%d, %d)\n",
+ Sys_FPrintf( SYS_WRN, "WARNING: Non power-of-two lightmap size specified (%d, %d)\n",
si->lmCustomWidth, si->lmCustomHeight );
si->lmCustomWidth = lmCustomSize;
si->lmCustomHeight = lmCustomSize;
@@ -1639,7 +1639,7 @@ static void ParseShaderFile( const char *filename ){
}
else
{
- Sys_Printf( "WARNING: Unknown q3map_tcGen method: %s\n", token );
+ Sys_FPrintf( SYS_WRN, "WARNING: Unknown q3map_tcGen method: %s\n", token );
VectorClear( si->vecs[ 0 ] );
VectorClear( si->vecs[ 1 ] );
}
@@ -1724,7 +1724,7 @@ static void ParseShaderFile( const char *filename ){
/* unknown */
else{
- Sys_Printf( "WARNING: Unknown colorMod method: %s\n", token );
+ Sys_FPrintf( SYS_WRN, "WARNING: Unknown colorMod method: %s\n", token );
}
}
@@ -1762,7 +1762,7 @@ static void ParseShaderFile( const char *filename ){
TCModRotate( si->mod, a );
}
else{
- Sys_Printf( "WARNING: Unknown q3map_tcMod method: %s\n", token );
+ Sys_FPrintf( SYS_WRN, "WARNING: Unknown q3map_tcMod method: %s\n", token );
}
}
@@ -1852,7 +1852,7 @@ static void ParseShaderFile( const char *filename ){
GetTokenAppend( shaderText, qfalse );
sprintf( temp, "*mat_%s", token );
if ( ApplySurfaceParm( temp, &si->contentFlags, &si->surfaceFlags, &si->compileFlags ) == qfalse ) {
- Sys_Printf( "WARNING: Unknown material \"%s\"\n", token );
+ Sys_FPrintf( SYS_WRN, "WARNING: Unknown material \"%s\"\n", token );
}
}
@@ -1875,7 +1875,7 @@ static void ParseShaderFile( const char *filename ){
{
Sys_FPrintf( SYS_VRB, "Attempting to match %s with a known surfaceparm\n", token );
if ( ApplySurfaceParm( &token[ 6 ], &si->contentFlags, &si->surfaceFlags, &si->compileFlags ) == qfalse ) {
- Sys_Printf( "WARNING: Unknown q3map_* directive \"%s\"\n", token );
+ Sys_FPrintf( SYS_WRN, "WARNING: Unknown q3map_* directive \"%s\"\n", token );
}
}
#endif
@@ -1938,7 +1938,7 @@ static void ParseCustomInfoParms( void ){
/* any content? */
if ( !parsedContent ) {
- Sys_Printf( "WARNING: Couldn't find valid custom contentsflag section\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: Couldn't find valid custom contentsflag section\n" );
return;
}
@@ -1964,7 +1964,7 @@ static void ParseCustomInfoParms( void ){
/* any content? */
if ( !parsedContent ) {
- Sys_Printf( "WARNING: Couldn't find valid custom surfaceflag section\n" );
+ Sys_FPrintf( SYS_WRN, "WARNING: Couldn't find valid custom surfaceflag section\n" );
}
}
diff --git a/tools/urt/tools/quake3/q3map2/surface.c b/tools/urt/tools/quake3/q3map2/surface.c
index 32a5a9b8..2aec087b 100644
--- a/tools/urt/tools/quake3/q3map2/surface.c
+++ b/tools/urt/tools/quake3/q3map2/surface.c
@@ -568,7 +568,7 @@ void ClassifySurfaces( int numSurfs, mapDrawSurface_t *ds ){
if ( fabs( dist ) > PLANAR_EPSILON ) {
//% if( ds->planeNum >= 0 )
//% {
- //% Sys_Printf( "WARNING: Planar surface marked unplanar (%f > %f)\n", fabs( dist ), PLANAR_EPSILON );
+ //% Sys_FPrintf( SYS_WRN, "WARNING: Planar surface marked unplanar (%f > %f)\n", fabs( dist ), PLANAR_EPSILON );
//% ds->verts[ i ].color[ 0 ][ 0 ] = ds->verts[ i ].color[ 0 ][ 2 ] = 0;
//% }
ds->planar = qfalse;
@@ -589,7 +589,7 @@ void ClassifySurfaces( int numSurfs, mapDrawSurface_t *ds ){
ds->planeNum = -1;
VectorClear( ds->lightmapVecs[ 2 ] );
//% if( ds->type == SURF_META || ds->type == SURF_FACE )
- //% Sys_Printf( "WARNING: Non-planar face (%d): %s\n", ds->planeNum, ds->shaderInfo->shader );
+ //% Sys_FPrintf( SYS_WRN, "WARNING: Non-planar face (%d): %s\n", ds->planeNum, ds->shaderInfo->shader );
}
/* -----------------------------------------------------------------
@@ -2450,7 +2450,7 @@ void EmitDrawIndexes( mapDrawSurface_t *ds, bspDrawSurface_t *out ){
/* validate the index */
if ( ds->type != SURFACE_PATCH ) {
if ( bspDrawIndexes[ numBSPDrawIndexes ] < 0 || bspDrawIndexes[ numBSPDrawIndexes ] >= ds->numVerts ) {
- Sys_Printf( "WARNING: %d %s has invalid index %d (%d)\n",
+ Sys_FPrintf( SYS_WRN, "WARNING: %d %s has invalid index %d (%d)\n",
numBSPDrawSurfaces,
ds->shaderInfo->shader,
bspDrawIndexes[ numBSPDrawIndexes ],
@@ -3671,7 +3671,7 @@ void FilterDrawsurfsIntoTree( entity_t *e, tree_t *tree ){
bspDrawSurface_t *out;
out = &bspDrawSurfaces[ numBSPDrawSurfaces - 1 ];
if ( out->numVerts == 3 && out->numIndexes > 3 ) {
- Sys_Printf( "\nWARNING: Potentially bad %s surface (%d: %d, %d)\n %s\n",
+ Sys_FPrintf( SYS_WRN, "WARNING: Potentially bad %s surface (%d: %d, %d)\n %s\n",
surfaceTypes[ ds->type ],
numBSPDrawSurfaces - 1, out->numVerts, out->numIndexes, si->shader );
}
diff --git a/tools/urt/tools/quake3/q3map2/surface_extra.c b/tools/urt/tools/quake3/q3map2/surface_extra.c
index 81c195e4..c86058c6 100644
--- a/tools/urt/tools/quake3/q3map2/surface_extra.c
+++ b/tools/urt/tools/quake3/q3map2/surface_extra.c
@@ -340,7 +340,7 @@ void LoadSurfaceExtraFile( const char *path ){
Sys_Printf( "Loading %s\n", srfPath );
size = LoadFile( srfPath, (void**) &buffer );
if ( size <= 0 ) {
- Sys_Printf( "WARNING: Unable to find surface file %s, using defaults.\n", srfPath );
+ Sys_FPrintf( SYS_WRN, "WARNING: Unable to find surface file %s, using defaults.\n", srfPath );
return;
}
diff --git a/tools/urt/tools/quake3/q3map2/surface_meta.c b/tools/urt/tools/quake3/q3map2/surface_meta.c
index 21a65146..eee5612d 100644
--- a/tools/urt/tools/quake3/q3map2/surface_meta.c
+++ b/tools/urt/tools/quake3/q3map2/surface_meta.c
@@ -1365,7 +1365,7 @@ static int AddMetaTriangleToSurface( mapDrawSurface_t *ds, metaTriangle_t *tri,
( bi == ds->indexes[ i ] && ci == ds->indexes[ i + 2 ] && ai == ds->indexes[ i + 1 ] ) ||
( ci == ds->indexes[ i ] && ai == ds->indexes[ i + 2 ] && bi == ds->indexes[ i + 1 ] ) ) {
/* warn about it */
- Sys_Printf( "WARNING: Flipped triangle: (%6.0f %6.0f %6.0f) (%6.0f %6.0f %6.0f) (%6.0f %6.0f %6.0f)\n",
+ Sys_FPrintf( SYS_WRN, "WARNING: Flipped triangle: (%6.0f %6.0f %6.0f) (%6.0f %6.0f %6.0f) (%6.0f %6.0f %6.0f)\n",
ds->verts[ ai ].xyz[ 0 ], ds->verts[ ai ].xyz[ 1 ], ds->verts[ ai ].xyz[ 2 ],
ds->verts[ bi ].xyz[ 0 ], ds->verts[ bi ].xyz[ 1 ], ds->verts[ bi ].xyz[ 2 ],
ds->verts[ ci ].xyz[ 0 ], ds->verts[ ci ].xyz[ 1 ], ds->verts[ ci ].xyz[ 2 ] );
diff --git a/tools/urt/tools/quake3/q3map2/vis.c b/tools/urt/tools/quake3/q3map2/vis.c
index adbefa4b..73420f59 100644
--- a/tools/urt/tools/quake3/q3map2/vis.c
+++ b/tools/urt/tools/quake3/q3map2/vis.c
@@ -203,7 +203,7 @@ void ClusterMerge( int leafnum ){
numvis = LeafVectorFromPortalVector( portalvector, uncompressed );
// if (uncompressed[leafnum>>3] & (1<<(leafnum&7)))
-// Sys_Printf ("WARNING: Leaf portals saw into leaf\n");
+// Sys_FPrintf( SYS_WRN, "WARNING: Leaf portals saw into leaf\n");
// uncompressed[leafnum>>3] |= (1<<(leafnum&7));
@@ -1119,7 +1119,7 @@ int VisMain( int argc, char **argv ){
}
else{
- Sys_Printf( "WARNING: Unknown option \"%s\"\n", argv[ i ] );
+ Sys_FPrintf( SYS_WRN, "WARNING: Unknown option \"%s\"\n", argv[ i ] );
}
}
diff --git a/tools/urt/tools/quake3/q3map2/writebsp.c b/tools/urt/tools/quake3/q3map2/writebsp.c
index 47758f5c..988055d8 100644
--- a/tools/urt/tools/quake3/q3map2/writebsp.c
+++ b/tools/urt/tools/quake3/q3map2/writebsp.c
@@ -165,7 +165,7 @@ void EmitLeaf( node_t *node ){
{
/* something is corrupting brushes */
if ( (int) b < 256 ) {
- Sys_Printf( "WARNING: Node brush list corrupted (0x%08X)\n", b );
+ Sys_FPrintf( SYS_WRN, "WARNING: Node brush list corrupted (0x%08X)\n", b );
break;
}
//% if( b->guard != 0xDEADBEEF )