#!/opt/bin/perl use Crossfire::Map; use Storable; use Gtk2 -init; my %type = ( deep_sea => "#008", sea => "#008", shallow_sea => "#008", beach => "#aa0", desert => "#cc0", brush => "#880", steppe => "#880", marsh => "#0f8", grassbrown => "#0f0", grassmedium => "#0f0", grassdark => "#0f0", grass => "#0f0", darkforest => "#040", evergreens => "#0a0", evergreen => "#0a0", tree => "#080", tree1 => "#080", tree2 => "#080", tree3 => "#080", tree4 => "#080", tree5 => "#080", tree6 => "#080", forestsparse=> "#080", woods => "#080", woods_2 => "#080", woods_3 => "#080", swamp => "#660", deep_swamp => "#440", jungle_1 => "#084", jungle_2 => "#084", jungle_3 => "#084", wasteland => "#000", hills_rocky => "#aa8", hills => "#aa4", treed_hills => "#aa4", mountain => "#ddd", mountain_2 => "#ddd", mountain2 => "#ddd", mountain3 => "#ddd", mountain4 => "#ddd", mountain5 => "#ddd", s_mountain => "#ddd", ); for my $k (keys %type) { my $v = join "", map chr, (map $_*255/15, map hex, split //, substr $type{$k}, 1), 255; $color{$k} = $v; } my $elev = "\x00\x00\x00\x00" x (1500*1500); my $type = "\x00\x00\x00\x00" x (1500*1500); my $mask = "\x00\x00\x00\x00" x (1500*1500); my $maps = Storable::retrieve "worldmaps.pst"; for my $X (100..129) { print "$X\n";#d# for my $Y (100..129) { my $map = $maps->[$X][$Y]; my $X = ($X - 100) * 50; my $Y = ($Y - 100) * 50; for my $x (0..49) { for my $y (0..49) { my $ofs = (($Y + $y)* 1500 + $X + $x) * 4; my $i = 0; for (@{ $map->{map}[$x][$y] || [] }) { if (defined (my $h = $_->{elevation})) { my ($g, $g, $b); if ($h < 0) { $r = 0; $g = 0; $b = int 256 * ($h + 32000) / 32001; } else { $g = 255; $r = $b = int 256 * $h / (160619 + 1); } substr $elev, $ofs, 4, (chr $r) . (chr $g) . (chr $b) . "\xff"; } if ((my $color = $color{$_->{_name}}) && !exists $_->{slaying}) { substr $type, $ofs, 4, $color; } else { substr $type, $ofs, 4, "\xff\00\00\xff"; substr $mask, $ofs, 4, "\xff\00\00\xff"; print "$X $x, $Y $y $i $_->{_name}\n" unless $seen{$_->{_name}}++; } $i++; } } } } } Gtk2::Gdk::Pixbuf->new_from_data ($elev, "rgb", 1, 8, 1500, 1500, 1500*4)->save ("elev.png", "png"); Gtk2::Gdk::Pixbuf->new_from_data ($type, "rgb", 1, 8, 1500, 1500, 1500*4)->save ("type.png", "png"); Gtk2::Gdk::Pixbuf->new_from_data ($mask, "rgb", 1, 8, 1500, 1500, 1500*4)->save ("mask.png", "png");