<?
/*
* This program will convert GIF files into MAP and TER files, the kind
* that the mud reads. You will need PHP and the GD image library to use
* this script.
*
*/
include('inc.inc');
$write_dir = '/';
if(!$_GET) {
?>
<html>
<head>
<link rel="stylesheet" href="css.css" type="text/css">
</head>
<body>
<p>
Below are the GIF files in the current directory. The program will convert the image to a mud
map file and remove the trailing <b>.gif</b> of the filename. Files with <b>.ter</b> in the name
will be rendered as terrain files, all others will be rendered as map files.
</p>
<?
echo '<p><b>Write Dir:</b> ' . $write_dir . '</p>';
if($open = @opendir('.')) {
echo '<ul>';
while(false !== ($file = readdir($open))) {
if($file != '.' && $file != '..') {
//echo '<li>';
if($file != clean($file)) {
echo '<li class="invalid">' . hsc($file) . ' - cannot open, file contains invalid characters.</li>';
} else if(substr($file, -4) == '.gif') {
echo '<li><a href="?file=' . $file . '">' . $file . '</a>, layer: <span class="green">' . (isTer($file) ? 'terrain' : 'map') . '</span>.</li>';
} else {
////echo '<span class="noopen">' . $file . ' - cannot open, not a GIF file.</span>';
}
//echo '</li>';
}
}
echo '</ul>';
}
echo '</body></html>';
exit;
}
$file = $_GET['file'];
if(substr($file, -4) != '.gif' || $file != clean($file)) {
echo 'Invalid filename.';
exit;
}
$what = getimagesize($file);
switch($what['mime']) {
case 'image/png':
$src_id = imagecreatefrompng( $file );
break;
case 'image/jpeg':
$src_id = imagecreatefromjpeg( $file );
break;
case 'image/gif':
$old_id = imagecreatefromgif( $file );
$src_id = imagecreatetruecolor( $what[0],$what[1]);
imagecopy( $src_id, $old_id, 0, 0, 0, 0, $what[0], $what[1]);
break;
default: break;
}
function get_terrain($type, $r, $g, $b) {
if($type == 'derlith' || $type == 'default') {
if($r==41 && $g==140 && $b==181) return 'w'; // coastal water
elseif($r==14 && $g==110 && $b==150) return 'W'; // deep ocean water
elseif($r==0 && $g==255 && $b==255) return 'z'; // frozen river
elseif($r==58 && $g==190 && $b==244) return 'R'; // river
elseif($r==96 && $g==163 && $b==190) return 'l'; // lake
elseif($r==50 && $g==98 && $b==118) return 'L'; // deep lake
elseif($r==0 && $g==0 && $b==255) return 'o'; // oasis
elseif($r==231 && $g==214 && $b==148) return 'h'; // hills
elseif($r==82 && $g==33 && $b==41) return 'm'; // mountain
elseif($r==104 && $g==88 && $b==91) return 'n'; // snowy mountain
elseif($r==82 && $g==61 && $b==64) return '^'; // mountain peak
elseif($r==176 && $g==96 && $b==107) return 'v'; // volcano
elseif($r==114 && $g==101 && $b==63) return 's'; // swamp
elseif($r==201 && $g==255 && $b==205) return 'g'; // grassland
elseif($r==255 && $g==255 && $b==171) return 'd'; // desert
elseif($r==161 && $g==142 && $b==69) return 'i'; // sand dunes
elseif($r==56 && $g==208 && $b==97) return 'j'; // jungle
elseif($r==0 && $g==169 && $b==46) return 'J'; // dense jungle
elseif($r==33 && $g==123 && $b==57) return 'f'; // deciduous forest
elseif($r==17 && $g==65 && $b==30) return 'F'; // deep deciduous forest
elseif($r==35 && $g==191 && $b==160) return 'e'; // evergreen forest
elseif($r==54 && $g==111 && $b==100) return 'E'; // think evergreen forest
elseif($r==242 && $g==255 && $b==212) return 'p'; // plains
elseif($r==255 && $g==255 && $b==255) return 'r'; // glacier
} elseif($type == 'underdark') {
if($r==82 && $g==33 && $b==41) return 'm'; // mountain
elseif($r==202 && $g==202 && $b==202) return 'c'; // cavern floor
}
return '?';
}
function get_map($type, $r, $g, $b) {
if($r==136 && $g==136 && $b==136) return '-';
elseif($r==68 && $g==68 && $b==68) return '|';
elseif($r==170 && $g==170 && $b==170) return '\\';
elseif($r==221 && $g==221 && $b==221) return '/';
elseif($r==17 && $g==17 && $b==17) return '+';
elseif($r==255 && $g==0 && $b==0) return 'C';
elseif($r==170 && $g==0 && $b==0) return 'V';
elseif($r==106 && $g==0 && $b==0) return 'T';
elseif($r==106 && $g==0 && $b==129) return '?';
elseif($r==255 && $g==255 && $b==0) return '>';
// 0,0,0 marker
elseif($r==128 && $g==128 && $b==128) return '*';
return ' ';
}
$data = '';
if($src_id) {
$x_size = imagesx( $src_id );
$y_size = imagesy( $src_id );
$xj = 1;
$yj = 1;
$type = substr($file, 0, strpos($file, '.'));
// char/strings that will construct the image. it's randomly selected after,
// in the loop. a value in the array will be one pixel in the asci-image.
// now it has a 'nested loop' to read 'each' pixel and print it
for($y=0; $y<$y_size; $y+=$yj) {
$line = '';
for($x=0; $x<$x_size; $x+=$xj) {
if($x>=$x_size || $y>=$y_size ) break;
$rgb = @imagecolorat($src_id, $x, $y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
if(isTer($file)) {
$line .= get_terrain($type, $r, $g, $b);
} else {
$line .= get_map($type, $r, $g, $b);
}
}
$data .= $line . "\n";
}
write($write_dir . substr($file, 0, -4), $data);
}
header('Location: pixel.php');
?>