Benutzer:Count Ypsilon/Skript:npcmap.pl

aus Chaos FreewarWiki, der Referenz für Freewar
Zur Navigation springen Zur Suche springen

Dieses Perl-Skript liest auf der Standardeingabe die Farbliste ein (wie von Benutzer:Count Ypsilon/Skript:mapcolor.pl erzeugt) und benötigt zusätlich noch ein vorliegendes Karten-Bitmap. Es zeichnet farbige, gefüllte Rechtecke auf die Kartenfelder. Einige Zeilen (siehe Kommentare) müssen an die Grösse des Bildes angepasst werden. Die Ausgabedatei wird in der letzten Zeile geschrieben.

 use strict;
 use GD;
 
 # Farbdefinition fuer die NPC-Klassen
 my $colors = {
     "1" => 0x4db34d,
     "2" => 0x33e53f,
     "3" => 0x7ae533,
     "4" => 0xaae533,
     "5" => 0xd9e533,
     "6" => 0xe5c433,
     "7" => 0xe59833,
     "8" => 0xe56b33,
     "9" => 0xe53f33
 };
 
 # Das hier anpassen, je nachdem, welches Input-Bild man hat
 # (Oberer Teil fuer das Standard-Minibild, unterer Teil fuer 
 # grosse Karte von Tiramon-Webseite)
 my $i=GD::Image->new(440,210,1);
 my $j=GD::Image->new("karte.jpg");
 $i->copy($j, 0, 0, 0, 0, 440,210);
 
 #my $i=GD::Image->new(2231,1050,1);
 #my $j=GD::Image->new("karte-gross.jpg");
 #$i->copy($j, 0, 0, 0, 0, 2231,1050);
 
 foreach my $key(keys(%{$colors}))
 {
     my $v = $colors->{$key};
     printf "$key: %x->", $v;
     my $b = $v & 0xff;
     $v=$v>>8;
     my $g = $v & 0xff;
     $v=$v>>8;
     my $r = $v & 0xff;
     $colors->{$key} = $i->colorAllocate($r,$g,$b);
     printf "%x %x %x = %x\n",
       $r, $g, $b,  $colors->{$key};
 }
 
 while(<>)
 {
     chomp;
     my($x, $y, $cat) = split(/,/);
     next if ($x<0);
     next if ($y<0);
     next if ($x>140);
     next if ($y>140);
     # Das hier auch anpassen - Umrechnung von Feldkoordinaten in 
     # Pixel
     $x=($x-55)*5;
     $y=($y-80)*5;
     $i->filledRectangle($x,$y,$x+4,$y+4,$colors->{$cat});
 
     #$x=($x-55)*25;
     #$y=($y-80)*25;
     #$i->filledRectangle($x+4,$y+4,$x+19,$y+19,$colors->{$cat});
 }
 
 # alternativ auch einfach jpg statt png schreiben...
 open(MAP, ">map.png");
 print MAP $i->png;
 close(MAP);