r5147 - trunk/misc

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Mon Dec 1 09:10:36 EST 2008


Author: div0
Date: 2008-12-01 09:10:35 -0500 (Mon, 01 Dec 2008)
New Revision: 5147

Added:
   trunk/misc/dependencies.pl
   trunk/misc/jpeg-if-not-alpha.sh
Modified:
   trunk/misc/bsptool.pl
Log:
dependencies.pl: lists dependencies of a map pack (helps identifying unused files)



Property changes on: trunk/misc/bsptool.pl
___________________________________________________________________
Name: svn:executable
   + *

Added: trunk/misc/dependencies.pl
===================================================================
--- trunk/misc/dependencies.pl	                        (rev 0)
+++ trunk/misc/dependencies.pl	2008-12-01 14:10:35 UTC (rev 5147)
@@ -0,0 +1,293 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+my %files = ();
+my %shaders = ();
+
+sub ReadShaders()
+{
+	for my $sf(<scripts/*.shader>)
+	{
+		my $curshader = undef;
+		my @tex = ();
+		my $level = 0;
+		open my $fh, "<", $sf
+			or die "<$sf: $!";
+		while(<$fh>)
+		{
+			s/\r//gs;
+			chomp;
+
+			s/\/\/.*//s;
+			s/^\s+//;
+			s/\s+$//;
+			next if /^$/;
+
+			my @line = map { s/"//g; $_; } split /\s+/, $_;
+
+			if($line[0] eq '{')
+			{
+				++$level;
+			}
+			elsif($line[0] eq '}')
+			{
+				--$level;
+				if($level <= 0)
+				{
+					$level = 0;
+					if(defined $curshader)
+					{
+						$shaders{lc $curshader} = { shaderfile => $sf, textures => [ @tex ] };
+					}
+					$curshader = undef;
+				}
+			}
+			elsif($level == 0)
+			{
+				$curshader = $line[0];
+				@tex = ();
+			}
+			elsif($level == 1 and lc $line[0] eq 'qer_editorimage')
+			{
+				push @tex, $line[1];
+			}
+			elsif($level == 1 and lc $line[0] eq 'qer_lightimage')
+			{
+				push @tex, $line[1];
+			}
+			elsif($level == 1 and lc $line[0] eq 'skyparms')
+			{
+				for(qw/rt lf ft bk up dn/)
+				{
+					push @tex, "$line[1]_$_";
+					push @tex, "$line[3]_$_";
+				}
+			}
+			elsif($level == 2 and lc $line[0] eq 'map')
+			{
+				push @tex, $line[1];
+			}
+			elsif($level == 2 and lc $line[0] eq 'animmap')
+			{
+				for(2..(@line - 1))
+				{
+					push @tex, $line[$_];
+				}
+			}
+		}
+	}
+}
+
+sub AddFile($)
+{
+	my ($file) = @_;
+	return 0
+		unless -e $file;
+	++$files{$file};
+	return 1;
+}
+
+sub AddSound($)
+{
+	my ($tex) = @_;
+	$tex =~ s/\.ogg$|\.wav$//i;
+	AddFile "$tex.ogg" or
+	AddFile "$tex.wav" or
+	AddFile "sound/$tex.ogg" or
+	AddFile "sound/$tex.wav";
+}
+
+sub AddTexture($)
+{
+	my ($tex) = @_;
+	$tex =~ s/\.jpg$|\.tga$|\.png$//i;
+	AddFile "$tex.jpg" or
+	AddFile "$tex.tga" or
+	AddFile "$tex.png"
+		or return 0;
+	for('_shirt', '_pants', '_glow', '_norm', '_bump', '_gloss')
+	{
+		AddFile "$tex$_.jpg" or
+		AddFile "$tex$_.tga" or
+		AddFile "$tex$_.png";
+	}
+	return 1;
+}
+
+sub AddShader($)
+{
+	my ($shader) = @_;
+	$shader =~ s/\.jpg$|\.tga$|\.png$//i;
+	my $si = $shaders{lc $shader};
+	if(not defined $si)
+	{
+		AddTexture $shader
+			or warn "Unknown shader used: $shader";
+	}
+	else
+	{
+		AddFile $si->{shaderfile};
+		AddTexture $_
+			for @{$si->{textures}};
+	}
+}
+
+sub AddMapDependencies($)
+{
+	my ($data) = @_;
+	for(/^"noise.*" "(.*)"/gm)
+	{
+		AddSound $1;
+	}
+	for(/^"sound.*" "(.*)"/gm)
+	{
+		AddSound $1;
+	}
+	for(/^"music" "(.*)"/gm)
+	{
+		AddSound $1;
+	}
+	for(/^"model" "(.*)"/gm)
+	{
+		# TODO make this AddModel
+		# TODO and find the shaders the model uses
+		AddFile $1;
+	}
+	for(/^"lodmodel.*" "(.*)"/gm)
+	{
+		AddFile $1;
+	}
+}
+
+sub AddMapinfoDependencies($)
+{
+	my ($data) = @_;
+	for($data =~ /^cdtrack (.*)$/gm)
+	{
+		AddSound "sound/cdtracks/$1";
+	}
+}
+
+sub AddCfgDependencies($)
+{
+	my ($data) = @_;
+	for($data =~ /^cd loop "?(.*?)"?$/gm)
+	{
+		AddSound "sound/cdtracks/$1";
+	}
+}
+
+sub AddShaderDependencies($)
+{
+	my ($data) = @_;
+
+	my $n = length($data) / 72;
+	for(0..($n-1))
+	{
+		my $s = substr $data, $_ * 72, 64;
+		$s =~ s/\0.*$//s;
+		AddShader $s;
+	}
+}
+
+sub AddFaceDependencies($$)
+{
+	my ($base, $data) = @_;
+
+	my $n = length($data) / 104;
+	for(0..($n-1))
+	{
+		my $l = unpack "V", substr $data, $_ * 104 + 28, 4;
+		AddTexture sprintf "maps/%s/lm_%04d", $base, $l;
+		AddTexture sprintf "maps/%s/lm_%04d", $base, $l | 1; # deluxe
+	}
+}
+
+
+ReadShaders();
+
+for(<maps/*.ent>)
+{
+	AddFile $_;
+
+	my $data = do {
+		undef local $/;
+		open my $fh, "<", $_
+			or die "<$_: $!";
+		<$fh>;
+	};
+	AddMapDependencies $data;
+}
+
+for(<maps/*.bsp>)
+{
+	AddFile $_;
+
+	m!^maps/(.*)\.bsp! or die "perl is stupid";
+	my $b = $1;
+	AddFile "maps/$b.mapinfo";
+	AddFile "maps/$b.jpg";
+	AddFile "maps/$b.cfg";
+	AddTexture "gfx/$b\_radar.tga";
+	AddTexture "gfx/$b\_mini.tga";
+
+	my $data = do {
+		undef local $/;
+		open my $fh, "<", "maps/$b.mapinfo"
+			or die "<$_: $!";
+		<$fh>;
+	};
+	AddMapinfoDependencies $data;
+
+	$data = do {
+		undef local $/;
+		open my $fh, "-|", 'bsptool.pl', $_, '-xentities'
+			or die "<$_: $!";
+		<$fh>;
+	};
+	AddMapDependencies $data;
+
+	$data = do {
+		undef local $/;
+		open my $fh, "-|", 'bsptool.pl', $_, '-xfaces'
+			or die "<$_: $!";
+		<$fh>;
+	};
+	AddFaceDependencies $b, $data;
+
+	$data = do {
+		undef local $/;
+		open my $fh, "-|", 'bsptool.pl', $_, '-xtextures'
+			or die "<$_: $!";
+		<$fh>;
+	};
+	AddShaderDependencies $data;
+}
+
+sub RecurseDir($);
+sub RecurseDir($)
+{
+	my ($dir) = @_;
+	if(-d $dir)
+	{
+		for(<$dir/*>)
+		{
+			RecurseDir $_;
+		}
+	}
+	else
+	{
+		warn "Unused file: $dir"
+			unless $files{$dir};
+	}
+}
+
+for(<*>)
+{
+	RecurseDir $_;
+}
+
+print "$_\0"
+	for sort keys %files;


Property changes on: trunk/misc/dependencies.pl
___________________________________________________________________
Name: svn:executable
   + *

Added: trunk/misc/jpeg-if-not-alpha.sh
===================================================================
--- trunk/misc/jpeg-if-not-alpha.sh	                        (rev 0)
+++ trunk/misc/jpeg-if-not-alpha.sh	2008-12-01 14:10:35 UTC (rev 5147)
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+set -e
+
+: ${qual:=95}
+
+for X in "$@"; do
+	case "$X" in
+		*.jpg)
+			jpegoptim --strip-all "$X"
+			;;
+		*.png|*.tga)
+			if convert "$X" -depth 16 RGBA:- | perl -e 'local $/ = \8; while(<>) { substr($_, 6, 2) eq "\xFF\xFF" or exit 1; ++$pix; } END { exit not $pix; }'; then
+				echo "$X has no alpha, converting"
+				convert "$X" -quality $qual "${X%.*}.jpg"
+				jpegoptim --strip-all "${X%.*}.jpg"
+				rm -f "$X"
+			else
+				echo "$X has alpha, not converting"
+			fi
+			;;
+	esac
+done




More information about the nexuiz-commits mailing list