# Path to your q3map2 program. You find it in your GtkRadiant/install
# directory.
- our $Q3MAP2 = getcwd() . '/netradiant/install/q3map2';
+ our $Q3MAP2 = getcwd() . '/netradiant/build/q3map2';
# General flags for q3map2 (for example -threads 4)
our $Q3MAP2FLAGS = '-fs_forbiddenpath xonotic*-data*.pk3* -fs_forbiddenpath xonotic*-nexcompat*.pk3*';
our $VISFLAGS = '';
# Default flags for the -light stage
- our $LIGHTFLAGS = '-lightmapsearchpower 3 -deluxe -patchshadows -randomsamples -samples 4 -lightmapsize 512 -fast -fastbounce -dirty -bouncegrid -fill';
+ our $LIGHTFLAGS = '-lightmapsize 1024 -lightmapsearchpower 4 -deluxe -patchshadows -randomsamples -samples 4 -fast -fastbounce -dirty -bouncegrid -fill';
# Default flags for the -minimap stage
our $MINIMAPFLAGS = '';
# Default order of commands
- our $ORDER = 'vis,light';
+ our $ORDER = 'vis,light,scale';
# end of user changable part
vis_timeout => 0,
light_timeout => 0,
minimap_timeout => 0,
- scale_timeout => 0
+ scale_timeout => 0,
+ timeout_stealing => 0,
};
my $curmode = 'maps';
{
$options->{scale_timeout} = shift @ARGV;
}
+ elsif($_ eq '-timeout_stealing')
+ {
+ $options->{timeout_stealing} = shift @ARGV;
+ }
elsif($_ eq '-order')
{
$options->{order} = [split /\s*,\s*/, shift @ARGV];
}
my $linkdir = File::Temp::tempdir("xonotic-map-compiler.XXXXXX", TMPDIR => 1, CLEANUP => 1);
+my $starttime = time;
+my $endtime = time;
sub q3map2(@)
{
$timeout = $options->{minimap_timeout} if $mode eq '-minimap';
$timeout = $options->{scale_timeout} if $mode eq '-scale';
die "Invalid call: not a standard q3map2 stage" if not defined $timeout;
+ $endtime += $timeout;
+ my $stolen_timeout = $endtime - time;
+ if ($stolen_timeout > $timeout)
+ {
+ $timeout += ($stolen_timeout - $timeout) * $options->{timeout_stealing};
+ }
my @args = ($Q3MAP2, split(/\s+/, $Q3MAP2FLAGS), '-game', 'xonotic', '-fs_basepath', $XONOTICDIR, '-fs_basepath', $linkdir, '-v', @_);
print "\$ @args\n";
+ print "Using timeout: $timeout\n";
defined(my $pid = fork())
or die "fork: $!";
if($pid) # parent
}
}
-my ($prescale, $postscale) = ($options->{scalefactor} =~ /^([0-9.]+)(?::([0-9.]+))?$/);
-$prescale = 1 if not defined $prescale;
-$postscale = 1 if not defined $postscale;
+if ($options->{scalefactor} =~ /^([0-9.]+):([0-9.]+)$/)
+{
+ die "Two-scale isn't supported"
+ if $1 != 1 and $2 != 1;
+ $options->{scalefactor} = $1
+ if $2 == 1;
+ $options->{scalefactor} = $2
+ if $1 == 1;
+}
my $origcwd = getcwd();
for my $m(@{$options->{maps}})
$m =~ s/\.(?:map|bsp)$//;
- if($prescale != 1)
- {
- unshift @{$options->{bsp}}, "-keeplights";
- }
+ # never hurts, may help with rtlights
+ unshift @{$options->{bsp}}, "-keeplights";
local $SIG{INT} = sub
{
unlink <$m/lm_*>; # delete old external lightmaps
q3map2 '-bsp', @{$options->{bsp}}, "$m.map"
or die "-bsp: $?";
- if($prescale != 1)
- {
- q3map2 '-scale', @{$options->{scale}}, $prescale, "$m.bsp"
- or die "-scale: $?";
- rename "${m}_s.bsp", "$m.bsp"
- or die "rename ${m}_s.bsp $m.bsp: $!";
- }
my @o = @{$options->{order}};
- push @o, qw/light vis/;
+ push @o, qw/vis scale light/;
my %o = ();
for(@o)
or die "-vis: $?";
}
}
- }
-
- if($postscale != 1)
- {
- q3map2 '-scale', @{$options->{scale}}, $postscale, "$m.bsp"
- or die "-scale: $?";
- rename "${m}_s.bsp", "$m.bsp"
- or die "rename ${m}_s.bsp $m.bsp: $!";
+ if($_ eq 'scale')
+ {
+ if ($options->{scalefactor} != 1)
+ {
+ q3map2 '-scale', @{$options->{scale}}, $options->{scalefactor}, "$m.bsp"
+ or die "-scale: $?";
+ rename "${m}_s.bsp", "$m.bsp"
+ or die "rename ${m}_s.bsp $m.bsp: $!";
+ }
+ }
}
if(defined $options->{minimap})