Работа с конвертированными картами

Материал из Pocket Fallout для КПК на PDA PC PPC Mobile.

После того, как программа-конвертер создала скрипт строительства карты следует сделать следующие :

  1. Нужно открыть созданный конвертером файл map_build.pfs в редакторе скриптов (ну или в другом текстовом редакторе)
  2. Изменить все строковые идентификаторы, которые создала система, на значения понятные человеку.

Содержание

Пример именования объектов

Программа создала юнита (см. procedure mInitUnits() ) и назвала его ACVillgr_name_60 :

m_obj.AddAsUnit("warrior", "ACVillgr_name_60",87, 79); //Де-евен¦ина

Вам следует его переименовать значение ACVillgr_name_60 в другое. Как видно из комментария - это создание "деревенщины". Мы можем тогда дать этому юниту идентификатор "yokel" (деревенщина) :

m_obj.AddAsUnit("warrior", "yokel",87, 79); //Деревенщина

И заменить ВО ВСЕМ ТЕКСТЕ МОДУЛЯ значение ACVillgr_name_60 на yokel. Это важно, т.к. этот идентификатор может использоваться в других процедурах/функциях модуля.

Пример замены имен объектов

procedure OnCreateInventory(object_name)
	var item = CreateObject("InventoryItem");
	if (object_name=="ACVillgr_name_60") then
 		item.NewItem("spear", "", "spear_item");
		item.AddToObject(object_name);
		item.Free();
		return
	endif
....
endprocedure
  1. Пункт 2 выполнить с придельным вниманием. В особенности для содержимого процедур mInitUnits() и mInitObjects().
  2. Сохранить файл
  3. Методом проб и ошибок (загружая игру в debug-режиме) исправить смещения для объектов созданных AddAsMisc (это касается каких-либо изображений)
  4. Методом проб и ошибок (загружая игру в debug-режиме) подправить положение зон выхода (процедура mInitMisc())
  5. Расстанавливаем точки выхода (можно пользоваться скриптами из кары default)
  6. Сохранить файл

Описатели объектов

После того, как исправлен скрипт строительства карты нужно исправить текст в файле description.txt.
Открываем его в любом текстовом редакторе и по логике начинаем его исправлять (это очень похоже на игру "Поле чудес"). Почему не автоматизировано? Потому что в оригинальном Fallout какая-то не понятная OEM кодировка, которая не поддается изучению.

Пример

Исходный файл :

22={Какое--о п¦--¬нное -а--ение.}
35={В как-¦-е не- ни¬его о-обенного.}
64={П-о--ой ков-ик. Его делал -алан-лив¬й ¬еловек.}
95={П-о--ой ков-ик. Его делал -алан-лив¬й ¬еловек.}

Правим его ручками и получаем файл :

22={Какое-то пустынное растение.}
35={В кактусе нет ничего особенного.}
64={Половой коврик. Его делал талантливый человек.}
95={Половой коврик. Его делал талантливый человек.}

P.S. Если текст вообще не понятный, можно посмотреть изображение объекта, к которому он принадлежит. Думаю, что все станет на свои места.

Последние приготовления

Все. Теперь скрипт строительства карты - готов. Мы можем его сохранить в бинарный файл (этот файл будет грузиться раз в 5 быстрее скрипта).
Для этого необходимо :

  1. Создать папку с именем карты в каталоге Resource\maps\. И перекопировать файлики map_build.pfs (сгенерированный скрипт), map_events.pfs, unit_enets.pfs.
  2. В Процедуре procedure BuildMap(inMapName) скрипта map_build.pfs в конце добавить строчку: m_build.SaveMap();
procedure BuildMap(inMapName)
	m_build.InitLevelMap(75, 83);
	mInitTileImages();
 	mInitFloor(); 
	mInitRoof();
	mInitWallImages();
	mInitWalls();
	mInitBypassPoints();
	mInitObjects();
	mInitUnits();
	mInitMisc();
		
       m_build.AddMapViewPort(-1024, 1374, -330, 2507);
       m_build.SetHeroPosition(92, 75);
	m_build.ScrollMapToObject("hero");
        
        m_build.SaveMap();
endprocedure
  1. Запустить игру в debug-режиме и установить нашу карту для загрузки по умолчанию. Скрипт автоматически сохранит карту в файл.
  2. После этого смело закрываем игру и видем рядом с файлом map_build.pfs файлик <имя_карты>.map
  3. Создаем новый файл map_build.pfs, в котором можно создать всего лишь один метод - procedure BuildMap(in_map) в котором Вы загружаете карту :
m_build.LoadMap();

И пишите логику размещения на карте героя, в зависимости от вызвавшей эту карту местности. Что-то вроде :

if in_map=="имя_карты" then
    m_build.SetHeroPosition(12, 32);
endif

И также не забываем о второстепенных моментах, таких как например музыка.

Личные инструменты