Ejemplo n.º 1
0
int
main (int argc, char **argv)
{
	double      start, stop;
	dstring_t  *portalfile = dstring_new ();
	QFile      *f;

	start = Sys_DoubleTime ();

	this_program = argv[0];

	DecodeArgs (argc, argv);

	if (!options.bspfile) {
		usage (1);
		Sys_Error ("%s: no bsp file specified.", this_program);
	}

	QFS_SetExtension (options.bspfile, ".bsp");

	f = Qopen (options.bspfile->str, "rb");
	if (!f)
		Sys_Error ("couldn't open %s for reading.", options.bspfile->str);
	bsp = LoadBSPFile (f, Qfilesize (f));
	Qclose (f);

	visdata = dstring_new ();

	dstring_copystr (portalfile, options.bspfile->str);
	QFS_SetExtension (portalfile, ".prt");
	LoadPortals (portalfile->str);

	uncompressed = calloc (bitbytes_l, portalclusters);

	CalcVis ();

	if (options.verbosity >= 0)
		printf ("c_chains: %i%s\n", c_chains,
				options.threads > 1 ? " (not reliable)" :"");

	BSP_AddVisibility (bsp, (byte *) visdata->str, visdata->size);
	if (options.verbosity >= 0)
		printf ("visdatasize:%ld  compressed from %ld\n",
				(long) bsp->visdatasize, (long) originalvismapsize);

	CalcAmbientSounds ();

	f = Qopen (options.bspfile->str, "wb");
	if (!f)
		Sys_Error ("couldn't open %s for writing.", options.bspfile->str);
	WriteBSPFile (bsp, f);
	Qclose (f);

	stop = Sys_DoubleTime ();

	if (options.verbosity >= 0)
		printf ("%5.1f seconds elapsed\n", stop - start);

	return 0;
}
Ejemplo n.º 2
0
/*
   ===========
   main
   ===========
 */
int VIS_Main(){
	char portalfile[1024];
	char source[1024];
	char name[1024];
	double start, end;
	int total_vis_time;

	Sys_Printf( "\n----- VIS ----\n\n" );

	//if (i != argc - 1)
	//	Error ("usage: vis [-threads #] [-level 0-4] [-fast] [-v] bspfile");

	start = I_FloatTime();

	ThreadSetDefault();

	SetQdirFromPath( mapname );
	strcpy( source, ExpandArg( mapname ) );
	StripExtension( source );
	DefaultExtension( source, ".bsp" );

	sprintf( name, "%s%s", inbase, source );
	Sys_Printf( "reading %s\n", name );
	LoadBSPFile( name );
	if ( numnodes == 0 || numfaces == 0 ) {
		Error( "Empty map" );
	}

	sprintf( portalfile, "%s%s", inbase, ExpandArg( mapname ) );
	StripExtension( portalfile );
	strcat( portalfile, ".prt" );

	Sys_Printf( "reading %s\n", portalfile );
	LoadPortals( portalfile );

	CalcVis();

	CalcPHS();

	visdatasize = vismap_p - dvisdata;
	Sys_Printf( "visdatasize:%i  compressed from %i\n", visdatasize, originalvismapsize * 2 );

	sprintf( name, "%s%s", outbase, source );
	Sys_Printf( "writing %s\n", name );
	WriteBSPFile( name );

	end = I_FloatTime();
	total_vis_time = (int) ( end - start );
	Sys_Printf( "\nVIS Time: " );
	if ( total_vis_time > 59 ) {
		Sys_Printf( "%d Minutes ", total_vis_time / 60 );
	}
	Sys_Printf( "%d Seconds\n", total_vis_time % 60 );


	return 0;
}
Ejemplo n.º 3
0
/*
 * @brief
 */
int32_t VIS_Main(void) {
	char portal_file[MAX_OSPATH];

	Com_Print("\n----- VIS -----\n\n");

	const time_t start = time(NULL);

	LoadBSPFile(bsp_name);

	if (d_bsp.num_nodes == 0 || d_bsp.num_faces == 0)
		Com_Error(ERR_FATAL, "Empty map\n");

	StripExtension(map_name, portal_file);
	strcat(portal_file, ".prt");

	LoadPortals(portal_file);

	CalcVis();

	CalcPHS();

	d_bsp.vis_data_size = map_vis.pointer - d_bsp.vis_data;
	Com_Print("VIS data: %d bytes (compressed from %u bytes)\n", d_bsp.vis_data_size,
			(uint32_t) (map_vis.uncompressed_size * 2));

	WriteBSPFile(bsp_name);

	const time_t end = time(NULL);
	const time_t duration = end - start;
	Com_Print("\nVIS Time: ");
	if (duration > 59)
		Com_Print("%d Minutes ", (int32_t) (duration / 60));
	Com_Print("%d Seconds\n", (int32_t) (duration % 60));

	return 0;
}
Ejemplo n.º 4
0
/*
===========
main
===========
*/
int main (int argc, char **argv)
{
	char	portalfile[1024];
	char		source[1024];
	int		i;
	double		start, end;
		
	printf ("vis.exe v1.3 (%s)\n", __DATE__);
	printf ("---- vis ----\n");

	verbose = false;
	for (i=1 ; i<argc ; i++)
	{
		if (!strcmp(argv[i],"-threads"))
		{
			numthreads = atoi (argv[i+1]);
			i++;
		}
		else if (!strcmp(argv[i], "-fast"))
		{
			printf ("fastvis = true\n");
			fastvis = true;
		}
		else if (!strcmp(argv[i], "-v"))
		{
			printf ("verbose = true\n");
			verbose = true;
		}
		else if (argv[i][0] == '-')
			Error ("Unknown option \"%s\"", argv[i]);
		else
			break;
	}

	if (i != argc - 1)
		Error ("usage: vis [-threads #] [-level 0-4] [-fast] [-v] bspfile");

	start = I_FloatTime ();
	
	ThreadSetDefault ();

	printf ("%i thread(s)\n", numthreads);

	strcpy (source, argv[i]);
	StripExtension (source);
	DefaultExtension (source, ".bsp");

	LoadBSPFile (source);
	
	strcpy (portalfile, argv[i]);
	StripExtension (portalfile);
	strcat (portalfile, ".prt");
	
	LoadPortals (portalfile);
	
	uncompressed = malloc(bitbytes*portalleafs);
	memset (uncompressed, 0, bitbytes*portalleafs);

	CalcVis ();

	qprintf ("c_chains: %i\n",c_chains);
	
	visdatasize = vismap_p - dvisdata;	
	printf ("visdatasize:%i  compressed from %i\n", visdatasize, originalvismapsize);
	
	CalcAmbientSounds ();

	WriteBSPFile (source);	
	
//	unlink (portalfile);

	end = I_FloatTime ();
	printf ("%5.1f seconds elapsed\n", end-start);
	
	free(uncompressed);

	return 0;
}
Ejemplo n.º 5
0
/*
===========
VisMain
===========
*/
int VisMain(int argc, char **argv)
{
	char            portalfile[1024];
	int             i;


	/* note it */
	Sys_Printf("--- Vis ---\n");

	/* process arguments */
	for(i = 1; i < (argc - 1); i++)
	{
		if(!strcmp(argv[i], "-fast"))
		{
			Sys_Printf("fastvis = true\n");
			fastvis = qtrue;
		}
		else if(!strcmp(argv[i], "-merge"))
		{
			Sys_Printf("merge = true\n");
			mergevis = qtrue;
		}
		else if(!strcmp(argv[i], "-mergeportals"))
		{
			Sys_Printf("mergeportals = true\n");
			mergevisportals = qtrue;
		}
		else if(!strcmp(argv[i], "-nopassage"))
		{
			Sys_Printf("nopassage = true\n");
			noPassageVis = qtrue;
		}
		else if(!strcmp(argv[i], "-passageOnly"))
		{
			Sys_Printf("passageOnly = true\n");
			passageVisOnly = qtrue;
		}
		else if(!strcmp(argv[i], "-nosort"))
		{
			Sys_Printf("nosort = true\n");
			nosort = qtrue;
		}
		else if(!strcmp(argv[i], "-v"))
		{
			debugCluster = qtrue;
			Sys_Printf("Extra verbose mode enabled\n");
		}
		else if(!strcmp(argv[i], "-tmpin"))
		{
			strcpy(inbase, "/tmp");
		}
		else if(!strcmp(argv[i], "-tmpout"))
		{
			strcpy(outbase, "/tmp");
		}


		/* ydnar: -hint to merge all but hint portals */
		else if(!strcmp(argv[i], "-hint"))
		{
			Sys_Printf("hint = true\n");
			hint = qtrue;
			mergevis = qtrue;
		}

		else
		{
			Sys_Printf("WARNING: Unknown option \"%s\"\n", argv[i]);
		}
	}

	if(i != argc - 1)
		Error("usage: vis [-threads #] [-level 0-4] [-fast] [-v] bspfile");


	/* load the bsp */
	sprintf(source, "%s%s", inbase, ExpandArg(argv[i]));
	StripExtension(source);
	strcat(source, ".bsp");
	Sys_Printf("Loading %s\n", source);
	LoadBSPFile(source);

	/* load the portal file */
	sprintf(portalfile, "%s%s", inbase, ExpandArg(argv[i]));
	StripExtension(portalfile);
	strcat(portalfile, ".prt");
	Sys_Printf("Loading %s\n", portalfile);
	LoadPortals(portalfile);

	/* ydnar: exit if no portals, hence no vis */
	if(numportals == 0)
	{
		Sys_Printf("No portals means no vis, exiting.\n");
		return 0;
	}

	/* ydnar: for getting far plane */
	ParseEntities();

	/* inject command line parameters */
	InjectCommandLine(argv, 0, argc - 1);
	UnparseEntities();

	if(mergevis)
		MergeLeaves();

	if(mergevis || mergevisportals)
		MergeLeafPortals();

	CountActivePortals();
	/* WritePortals( "maps/hints.prs" ); */

	Sys_Printf("visdatasize:%i\n", numBSPVisBytes);

	CalcVis();

	/* write the bsp file */
	Sys_Printf("Writing %s\n", source);
	WriteBSPFile(source);

	return 0;
}
Ejemplo n.º 6
0
Archivo: vis.c Proyecto: qbism/super8
/*
===========
Vis_Main
===========
*/
int Vis_Main( int argc, char **argv )
{
    int			i;
    double		start, end;

    printf ("---- vis ----\n");

    fastvis = false;
    verbose = false;
    rvis = true;
    noambientslime = true;
    noreuse = false;
    farplane = 0;

    if (ismcbsp)
        noambient = true;

    for (i=1 ; i<argc ; i++)
    {
        if (!strcmp(argv[i], "-norvis"))
        {
            rvis = false;
            printf ("rvis optimization disabled\n");
        }
        else if (!strcmp(argv[i], "-fast"))
        {
            printf ("fastvis = true\n");
            fastvis = true;
        }
        else if (!strcmp(argv[i], "-level"))
        {
            testlevel = atoi(argv[i+1]);
            printf ("testlevel = %i\n", testlevel);
            i++;
        }
        else if (!strcmp(argv[i], "-v"))
        {
            printf ("verbose = true\n");
            verbose = true;
        }
        else if (!strcmp(argv[i], "-noreuse"))
        {
            printf ("vis rows reusage disabled\n");
            noreuse = true;
        }
        else if (!strcmp(argv[i], "-noambient"))
        {
            noambient = true;
            printf ("all ambient sounds disabled\n");
        }
        else if (!strcmp(argv[i], "-noambientwater"))
        {
            noambientwater = true;
            printf ("ambient water sounds disabled\n");
        }
        else if (!strcmp(argv[i], "-ambientslime"))
        {
            noambientslime = false;
            printf ("ambient slime sounds enabled\n");
        }
        else if (!strcmp(argv[i], "-noambientlava"))
        {
            noambientlava = true;
            printf ("ambient lava sounds disabled\n");
        }
        else if (!strcmp(argv[i], "-noambientsky"))
        {
            noambientsky = true;
            printf ("ambient sky sounds disabled\n");
        }
        else if (!strcmp(argv[i], "-farplane"))
        {
            farplane = atoi (argv[i+1]);
            printf ("farplane = %f\n", farplane);
            i++;
        }
        else if (argv[i][0] == '-')
            Error ("Unknown option \"%s\"", argv[i]);
        else
            break;
    }

    if (i != argc - 1)
    {
        Error ("%s",
               "usage: hmap2 -vis [options] bspfile\n"
               "Compiles visibility data in a .bsp, needs a .prt file\n"
               "\n"
               "What the options do:\n"
               "-level 0-4      quality, default 4\n"
               "-fast           fast but bad quality vis\n"
               "-v              verbose\n"
               "-norvis         disable rvis optimization, 0.001% better quality and 30% slower\n"
               "-ambientslime   do not convert slime channel to water (requires engine support)\n"
               "-noambient      disable ambient sounds (water bubbling, wind, etc)\n"
               "-noambientwater disable ambient water sounds (water)\n"
               "-noambientslime disable ambient slime sounds (water, or -ambientslime)\n"
               "-noambientlava  disable ambient lava sounds (unused by quake)\n"
               "-noambientsky   disable ambient sky sounds (wind)\n"
               "-noreuse        disable merging of identical vis data (less compression)\n"
               "-farplane       limit visible distance (warning: not a good idea without fog)\n"
              );
    }

    // init memory
    Q_InitMem ();

    start = I_DoubleTime ();

    LoadBSPFile (filename_bsp);
    LoadPortals (filename_prt);

    uncompressed = qmalloc(bitlongs*portalleafs*sizeof(long));
    memset (uncompressed, 0, bitlongs*portalleafs*sizeof(long));

//	CalcPassages ();

    CalcVis ();

    printf ("row size: %i\n",bitbytes);
    printf ("c_reused: %i\n",c_reused);
    printf ("c_chains: %i\n",c_chains);

    visdatasize = vismap_p - dvisdata;
    printf ("reused bytes: %i\n",c_reused*bitbytes);
    printf ("visdatasize:%i compressed from %i\n", visdatasize, originalvismapsize);

    if (!noambient)
        CalcAmbientSounds ();

    WriteBSPFile (filename_bsp, false);

//	unlink (portalfile);

    end = I_DoubleTime ();
    printf ("%5.2f seconds elapsed\n\n", end-start);

    // print memory stats
    Q_PrintMem ();

    // free allocated memory
    Q_ShutdownMem ();

    return 0;
}
Ejemplo n.º 7
0
/*
===========
main
===========
*/
int main (int argc, char **argv)
{
	char	portalfile[1024];
	char		source[1024];
	char		name[1024];
	int		i;
	double		start, end;
		
	printf ("---- vis ----\n");

	verbose = false;
	for (i=1 ; i<argc ; i++)
	{
		if (!strcmp(argv[i],"-threads"))
		{
			numthreads = atoi (argv[i+1]);
			i++;
		}
		else if (!strcmp(argv[i], "-fast"))
		{
			printf ("fastvis = true\n");
			fastvis = true;
		}
		else if (!strcmp(argv[i], "-level"))
		{
			testlevel = atoi(argv[i+1]);
			printf ("testlevel = %i\n", testlevel);
			i++;
		}
		else if (!strcmp(argv[i], "-v"))
		{
			printf ("verbose = true\n");
			verbose = true;
		}
		else if (!strcmp (argv[i],"-nosort"))
		{
			printf ("nosort = true\n");
			nosort = true;
		}
		else if (!strcmp (argv[i],"-tmpin"))
			strcpy (inbase, "/tmp");
		else if (!strcmp (argv[i],"-tmpout"))
			strcpy (outbase, "/tmp");
		else if (argv[i][0] == '-')
			Error ("Unknown option \"%s\"", argv[i]);
		else
			break;
	}

	if (i != argc - 1)
		Error ("usage: vis [-threads #] [-level 0-4] [-fast] [-v] bspfile");

	start = I_FloatTime ();
	
	ThreadSetDefault ();

	strcpy (source, argv[i]);
	StripExtension (source);
	DefaultExtension (source, ".bsp");

	sprintf (name, "%s%s", inbase, source);
	printf ("reading %s\n", name);
	LoadBSPFile (name);
	if (numnodes == 0 || numfaces == 0)
		Error ("Empty map");

	sprintf (portalfile, "%s%s", inbase, ExpandArg(argv[i]));
	StripExtension (portalfile);
	strcat (portalfile, ".prt");
	
	printf ("reading %s\n", portalfile);
	LoadPortals (portalfile);
	
	CalcVis ();

	CalcPHS ();

	visdatasize = vismap_p - dvisdata;	
	printf ("visdatasize:%i  compressed from %i\n", visdatasize, originalvismapsize*2);

	sprintf (name, "%s%s", outbase, source);
	printf ("writing %s\n", name);
	WriteBSPFile (name);	
	
	end = I_FloatTime ();
	printf ("%5.1f seconds elapsed\n", end-start);

	return 0;
}
Ejemplo n.º 8
0
int RunVVis( int argc, char **argv )
{
    char	portalfile[1024];
    char		source[1024];
    double		start, end;


    Msg( "Valve Software - vvis.exe (%s)\n", __DATE__ );

    verbose = false;

    Q_StripExtension( argv[ argc - 1 ], source, sizeof( source ) );
    CmdLib_InitFileSystem( argv[ argc - 1 ] );

    Q_FileBase( source, source, sizeof( source ) );

    LoadCmdLineFromFile( argc, argv, source, "vvis" );
    int i = ParseCommandLine( argc, argv );

    // This part is just for VMPI. VMPI's file system needs the basedir in front of all filenames,
    // so we prepend qdir here.
    strcpy( source, ExpandPath( source ) );

    if (i != argc - 1)
    {
        PrintUsage( argc, argv );
        DeleteCmdLine( argc, argv );
        CmdLib_Exit( 1 );
    }

    start = Plat_FloatTime();


    if (!g_bUseMPI)
    {
        // Setup the logfile.
        char logFile[512];
        _snprintf( logFile, sizeof(logFile), "%s.log", source );
        SetSpewFunctionLogFile( logFile );
    }

    // Run in the background?
    if( g_bLowPriority )
    {
        SetLowPriority();
    }

    ThreadSetDefault ();

    char	targetPath[1024];
    GetPlatformMapPath( source, targetPath, 0, 1024 );
    Msg ("reading %s\n", targetPath);
    LoadBSPFile (targetPath);
    if (numnodes == 0 || numfaces == 0)
        Error ("Empty map");
    ParseEntities ();

    // Check the VMF for a vis radius
    if (!g_bUseRadius)
    {
        float flRadius = DetermineVisRadius( );
        if (flRadius > 0.0f)
        {
            g_bUseRadius = true;
            g_VisRadius = flRadius * flRadius;
        }
    }

    if ( g_bUseRadius )
    {
        MarkLeavesAsRadial();
    }

    if ( inbase[0] == 0 )
    {
        strcpy( portalfile, source );
    }
    else
    {
        sprintf ( portalfile, "%s%s", inbase, argv[i] );
        Q_StripExtension( portalfile, portalfile, sizeof( portalfile ) );
    }
    strcat (portalfile, ".prt");

    Msg ("reading %s\n", portalfile);
    LoadPortals (portalfile);

    CalcVis ();
    CalcPAS ();

    // We need a mapping from cluster to leaves, since the PVS
    // deals with clusters for both CalcVisibleFogVolumes and
    BuildClusterTable();

    CalcVisibleFogVolumes();
    CalcDistanceFromLeavesToWater();

    visdatasize = vismap_p - dvisdata;
    Msg ("visdatasize:%i  compressed from %i\n", visdatasize, originalvismapsize*2);

    Msg ("writing %s\n", targetPath);
    WriteBSPFile (targetPath);

    end = Plat_FloatTime();

    char str[512];
    GetHourMinuteSecondsString( (int)( end - start ), str, sizeof( str ) );
    Msg( "%s elapsed\n", str );

    DeleteCmdLine( argc, argv );
    CmdLib_Cleanup();
    return 0;
}
Ejemplo n.º 9
0
/*
===========
Vis_Main
===========
*/
int Vis_Main (int argc, char **argv)
{
	char	portalfile[1024];
	char	source[1024];
	char	name[1024];
	int		i;
	double	start, end;
	int		total_vis_time;
		
	Con_Print("---- VIS ----\n");

	verbose = false;
	for (i=1 ; i<argc ; i++)
	{
		if (!strcmp(argv[i], "-fast"))
		{
			Con_Print("fastvis = true\n");
			fastvis = true;
		}
		else if (!strcmp(argv[i], "-level"))
		{
			testlevel = atoi(argv[i+1]);
			Con_Print("testlevel = %i\n", testlevel);
			i++;
		}
		else if (!strcmp(argv[i], "-v"))
		{
			Con_Print("verbose = true\n");
			verbose = true;
		}
		else if (!strcmp (argv[i],"-nosort"))
		{
			Con_Print("nosort = true\n");
			nosort = true;
		}
		else if (!strcmp (argv[i],"-tmpin"))
			strcpy (inbase, "/tmp");
		else if (!strcmp (argv[i],"-tmpout"))
			strcpy (outbase, "/tmp");
		else if (argv[i][0] == '-')
			Con_Error("Unknown option \"%s\"\n", argv[i]);
		else
			break;
	}

	if (i != argc - 1)
		Con_Error("usage: q2map -vis [-level 0-4] [-fast] [-v] bspfile\n");

	start = I_FloatTime ();

	SetQdirFromPath (argv[i]);

	strcpy (source, ExpandArg(argv[i]));
	StripExtension (source);
	DefaultExtension (source, ".bsp");

	sprintf (name, "%s%s", inbase, source);
	Con_Print("reading %s\n", name);
	LoadBSPFile (name);
	if (numnodes == 0 || numfaces == 0)
		Con_Error("Empty map\n");

	sprintf (portalfile, "%s%s", inbase, ExpandArg(argv[i]));
	StripExtension (portalfile);
	strcat (portalfile, ".prt");
	
	Con_Print("reading %s\n", portalfile);
	LoadPortals (portalfile);
	
	CalcVis ();

	CalcPHS ();

	visdatasize = vismap_p - dvisdata;
	Con_Print("visdatasize:%i  compressed from %i\n", visdatasize, originalvismapsize*2);

	sprintf (name, "%s%s", outbase, source);
	Con_Print("writing %s\n", name);
	WriteBSPFile (name);	
	
	end = I_FloatTime ();
	total_vis_time = (int) ( end - start );
	Con_Print("\nVIS Time: ");
	if ( total_vis_time > 59 ) {
		Con_Print( "%d minutes ", total_vis_time / 60 );
	}
	Con_Print( "%d seconds\n", total_vis_time % 60 );

	return 0;
}
Ejemplo n.º 10
0
/*
  ===========
  main
  ===========
*/
int
main(int argc, char **argv)
{
    bspdata_t bspdata;
    bsp2_t *const bsp = &bspdata.data.bsp2;
    int32_t loadversion;
    int i;

    init_log("vis.log");
    logprint("---- vis / TyrUtils " stringify(TYRUTILS_VERSION) " ----\n");

    LowerProcessPriority();
    numthreads = GetDefaultThreads();

    for (i = 1; i < argc; i++) {
        if (!strcmp(argv[i], "-threads")) {
            numthreads = atoi(argv[i + 1]);
            i++;
        } else if (!strcmp(argv[i], "-fast")) {
            logprint("fastvis = true\n");
            fastvis = true;
        } else if (!strcmp(argv[i], "-level")) {
            testlevel = atoi(argv[i + 1]);
            i++;
        } else if (!strcmp(argv[i], "-v")) {
            logprint("verbose = true\n");
            verbose = 1;
        } else if (!strcmp(argv[i], "-vv")) {
            logprint("verbose = extra\n");
            verbose = 2;
        } else if (!strcmp(argv[i], "-noambientsky")) {
            logprint("ambient sky sounds disabled\n");
            ambientsky = false;
        } else if (!strcmp(argv[i], "-noambientwater")) {
            logprint("ambient water sounds disabled\n");
            ambientwater = false;
        } else if (!strcmp(argv[i], "-noambientslime")) {
            logprint("ambient slime sounds disabled\n");
            ambientslime = false;
        } else if (!strcmp(argv[i], "-noambientlava")) {
            logprint("ambient lava sounds disabled\n");
            ambientlava = false;
        } else if (!strcmp(argv[i], "-noambient")) {
            logprint("ambient sound calculation disabled\n");
            ambientsky = false;
            ambientwater = false;
            ambientslime = false;
            ambientlava = false;
        } else if (argv[i][0] == '-')
            Error("Unknown option \"%s\"", argv[i]);
        else
            break;
    }

    if (i != argc - 1) {
        printf("usage: vis [-threads #] [-level 0-4] [-fast] [-v|-vv] "
               "[-credits] bspfile\n");
        exit(1);
    }

    logprint("running with %d threads\n", numthreads);
    logprint("testlevel = %i\n", testlevel);

    stateinterval = 300; /* 5 minutes */
    starttime = statetime = I_FloatTime();

    strcpy(sourcefile, argv[i]);
    StripExtension(sourcefile);
    DefaultExtension(sourcefile, ".bsp");

    LoadBSPFile(sourcefile, &bspdata);

    loadversion = bspdata.version;
    if (loadversion != BSP2VERSION)
        ConvertBSPFormat(BSP2VERSION, &bspdata);

    strcpy(portalfile, argv[i]);
    StripExtension(portalfile);
    strcat(portalfile, ".prt");

    LoadPortals(portalfile, bsp);

    strcpy(statefile, sourcefile);
    StripExtension(statefile);
    DefaultExtension(statefile, ".vis");

    strcpy(statetmpfile, sourcefile);
    StripExtension(statetmpfile);
    DefaultExtension(statetmpfile, ".vi0");

    uncompressed = malloc(leafbytes_real * portalleafs_real);
    memset(uncompressed, 0, leafbytes_real * portalleafs_real);

//    CalcPassages ();

    CalcVis(bsp);

    logprint("c_noclip: %i\n", c_noclip);
    logprint("c_chains: %lu\n", c_chains);

    bsp->visdatasize = vismap_p - bsp->dvisdata;
    logprint("visdatasize:%i  compressed from %i\n",
             bsp->visdatasize, originalvismapsize);

    CalcAmbientSounds(bsp);

    /* Convert data format back if necessary */
    if (loadversion != BSP2VERSION)
        ConvertBSPFormat(loadversion, &bspdata);

    WriteBSPFile(sourcefile, &bspdata);

//    unlink (portalfile);

    endtime = I_FloatTime();
    logprint("%5.1f seconds elapsed\n", endtime - starttime);

    close_log();

    return 0;
}