new blood for humans, aliens and robots, new mg trail and muzzle flash fx
[xonotic/xonotic-data.pk3dir.git] / particles / particlefont.pl
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5 use POSIX qw/ceil floor/;
6
7 # particlefont.txt generator for DarkPlaces
8
9 # this is eval'ed to not fail if Image::Magick is not installed
10 my $magick =
11 eval q{
12         use Image::Magick;
13         Image::Magick->new();
14 }
15         or warn "Image::Magick not installed, not generating a TGA\n";
16
17 sub checkmagick($)
18 {
19         my ($e) = @_;
20         die $e if $e;
21         return $e;
22 }
23
24 my ($pixw, $pixh, $cols, $rows, $beamoffset, $beams) = @ARGV;
25 defined $beams
26         or die "Usage: $0 pixw pixh columns rows beamoffset beams\n";
27
28 if($magick)
29 {
30         checkmagick $magick->Set(size => "${pixw}x${pixh}");
31         checkmagick $magick->ReadImage("xc:white");
32 }
33
34 my $square_x = 1.0 / $cols;
35 my $square_y = 1.0 / $rows;
36 $rows -= $beams;
37
38 my $dx = 1.0 / $pixw;
39 my $dy = 1.0 / $pixh;
40
41 my $i = 0;
42 for my $row(0..$rows-1)
43 {
44         for my $col(0..$cols-1)
45         {
46                 my $s0 = $col * $square_x + $dx;
47                 my $s1 = ($col+1) * $square_x - $dx;
48                 my $t0 = $row * $square_y + $dy;
49                 my $t1 = ($row+1) * $square_y - $dy;
50                 print "$i $s0 $t0 $s1 $t1\n";
51                 if($magick)
52                 {
53                         checkmagick $magick->Draw(
54                                 fill => (($row + $col)%2 ? 'green' : 'cyan'),
55                                 primitive => 'rectangle',
56                                 points => sprintf "%d,%d %d,%d", ceil($s0 * $pixw), ceil($t0 * $pixh), floor($s1 * $pixw)-1, floor($t1 * $pixh)-1
57                         );
58                         checkmagick $magick->Annotate(
59                                 x => $s0 * $pixw + 2,
60                                 y => $t1 * $pixh - 2,
61                                 text => $i
62                         );
63                 }
64                 ++$i;
65         }
66 }
67
68 $i = $beamoffset if $i < $beamoffset;
69 for my $beam(0..$beams-1)
70 {
71         my $s0 = 0;
72         my $s1 = 1;
73         my $row = $beam + $rows;
74         my $t0 = $row * $square_y + $dy;
75         my $t1 = ($row+1) * $square_y - $dy;
76         print "$i $s0 $t0 $s1 $t1\n";
77         if($magick)
78         {
79                 checkmagick $magick->Draw(
80                         fill => (($beam)%2 ? 'yellow' : 'red'),
81                         primitive => 'rectangle',
82                         points => sprintf "%d,%d %d,%d", ceil($s0 * $pixw), ceil($t0 * $pixh), floor($s1 * $pixw)-1, floor($t1 * $pixh)-1
83                 );
84                 checkmagick $magick->Annotate(
85                         x => $s0 * $pixw + 2,
86                         y => $t1 * $pixh - 2,
87                         text => $i
88                 );
89         }
90         ++$i;
91 }
92
93 if($magick)
94 {
95         $magick->Write("particlefont-template.png");
96 }