Skip to content

Create image from .mapa file (map format of the game Need For Kill)

License

Notifications You must be signed in to change notification settings

NeedForKillTheGame/nfkmap-viewer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

63 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NFK Map Viewer

Генерирует изображение карты из файла .mapa игры Need For Kill

Пример работы скрипта: http://harpywar.com/test/nfkmap/

Требования

PHP >= 5.3 с включенными расширениями php_gd2 и php_bz2

Установка через Composer

Менеджер пакетов Composer упрощает установку сторонних скриптов в вашем проекте. Он сам загрузит необходимые файлы и добавит их в vendor/autoload.php, который будет достаточно включить в начале вашего скрипта.

  1. Откройте папку, где будет размещен NFK Map Viewer, и создайте в ней файл composer.json со следующим содержимым:

     {
         "minimum-stability": "dev",
         "require": {
             "nfk/mapviewer":"dev-master"
         }
     }
    
  2. Положите в эту папку файл http://getcomposer.org/composer.phar и выполните команду:

     php composer.phar install
    
  3. После установки пакета должна появиться папка vendor, внутри которой, помимо автозагрузчика composer'a, расположены исходники MapViewer.

  4. Теперь в начале вашего скрипта достаточно включить загрузочный файл, после чего можно использовать MapViewer:

     include "vendor/autoload.php";
    

Обычная установка

Если вы не используете Composer, то в начале своего скрипта добавьте встроенный автозагрузчик классов:

include("lib/autoloader.php");
Autoloader::register();

Примеры использования (более подробно в examples):

Сохранение полноразмерного изображения из существующей карты:

use NFK\MapViewer\MapViewer;

$nmap = new MapViewer("tourney4.mapa");
$nmap->LoadMap();
$im = $nmap->DrawMap();
imagepng($im, $nmap->GetFileName() . '.png');

Можно создать свою карту, или изменить существующую:

// хелперы для удобного создания объектов
use NFK\MapViewer\MapObject\SimpleObject
use NFK\MapViewer\MapObject\SpecialObject

$nmap = new MapViewer("test.mapa");

// следующий код заполнит бриками границу карты
for ($x = 0; $x < $nmap->Header->MapSizeX; $x++)
	for ($y = 0; $y < $nmap->Header->MapSizeY; $y++)
		if ($x == 0 || $x == $nmap->Header->MapSizeX - 1 || $y == 0 || $y == $nmap->Header->MapSizeY - 1)
			$nmap->Bricks[$x][$y] = 228;

// респавн в левом нижнем углу
$nmap->Bricks[1][$nmap->Header->MapSizeY - 2] = SimpleObject::Respawn();

// установим в правом нижнем углу портал, с телепортом в левый нижний угол
$obj = SpecialObject::Teleport
(
	$nmap->Header->MapSizeX - 2, // x
	$nmap->Header->MapSizeY - 2, // y
	2, // goto x
	$nmap->Header->MapSizeY - 2 // goto y
); 

$nmap->Objects[] = $obj; // добавить портал в массив объектов

$nmap->SaveMap();

Можно извлечь и сохранить карту .mapa из демки:

$nmap = new NFKMap("demo.ndm");
$nmap->LoadMap();

// хеш содержимого карты
$filename = md5( $nmap->GetMapBytes() );

$nmap->SaveMap($filename);

Использование памяти

На очень больших картах может потребоваться большое количество памяти для создания изображения. Поэтому, в скрипте желательно убрать ограничение памяти, или установить его до максимально возможного значения:

ini_set('memory_limit', '-1');
ini_set('memory_limit', '256M');

Расход памяти на примере большой карты http://ge.tt/5uyLLIW/v/0

  • 0.7 мб до загрузки карты
  • 5.7 мб после загрузки карты в память
  • 6.7 мб после загрузки ресурсов (картинки палитры и объектов)
  • 151 мб после создания слоя карты через imagecreatetruecolor размером 7776х3888 px
  • 151 мб после рисования всех объектов
  • 237 мб после сохранения картинки через imagepng

Замер производился функцией memory_get_peak_usage


Разбор формата карты

About

Create image from .mapa file (map format of the game Need For Kill)

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages