roh/conf.old/area/
roh/config/code/python/
roh/config/game/area/
roh/config/game/signs/
roh/help/dmhelp/
roh/help/help/
roh/log/
roh/log/staff/
roh/monsters/ocean/
roh/objects/misc/
roh/objects/ocean/
roh/player/
roh/rooms/area/1/
roh/rooms/misc/
roh/rooms/ocean/
roh/src-2.47e/
<?

/*
 *  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');



?>