- Исправил скрипты, модели
- Добюавлена модель умений skill_model
- Добавлены базовые скилы, которые увеличиваются с каждым уровнем
  НЕ БУДУТ грузится старые сэйвы
- Исправил визуальный баг с перекладыванием вещей 

Релиз 12.01.2009 (финальный тест - 1.003)

== События для модуля global.pfs==
Добавлены новые события :
(параметры такие же как и одноименныхсобытий из unit_events.pfs)
- Функция OnUnitGetTurn - вызывается тогда, когда объект получил ход (только во время боя). Вызывается после отработки одноименного события из unit_events.pfs.
- Процедура OnUnitDeath - вызывается при смерти юнита. Вызывается после отработки одноименного события из unit_events.pfs.
- Функция OnGetDamage - вызывается при расчете силы повреждения при атаке Вызывается после УСПЕШНОЙ отработки одноименного события из unit_events.pfs. 
- Функция isDamageCritical - вызывается при расчете вероятности критического повреждения при атаке. Вызывается после УСПЕШНОЙ отработки одноименного события из unit_events.pfs. 
- Процедура OnUnitSkipTurn - вызывается, когда юнит с именем <имя_юнита> пропускает свой ход. Вызывается после УСПЕШНОЙ отработки одноименного события из unit_events.pfs.

==Процедуры и функции общего назначения==
 - Добавлена функция ExecuteGlobalMethod(ИмяМетода : String, Параметры : BasicType/Array) : BasicType – выполнить процедуру/функцию из глобального модуля global.pfs

==WorldCity==
 - Добавлен метод SetDefaultMap(ИмяКарты : String) – Установить текущему городу имя карты(локации), которая будет грузиться по умолчанию .
 - Добавлен метод GetDefaultMap(): String – Получить имя карты, которая установлена по умолчанию для текущего города.

==MapBuilder==
 - Добавлен метод GetMapName(): String – Получить имя текущей локации
 - Добавлен метод IncWorldTime(Секунды : Number) – Увеличить текущее мировое время на указанное количество секунд.
 - Добавлен метод SortObjects() – Оптимизировать положение объектов на карте. Рекомендуется вызывать после размещения всех объектов на карте
 - Добавлен метод RemoveBypassPoint(x : Number, y : Number) – Убрать точку обхода по указанным координатом мнимых тайлов
 - Добавлен метод RemoveObjects() – Убрать объекты (все, кроме стен и тайлов) с текущей - локации. Справедливо в использовании для случайных локаций. 
 - Добавлен метод GetObjectsCount():Number - Получить количество объектов на текущей карте(локации)
 - Добавлен метод GetObjectName(index : Number) : String - получить имя объекта по его порядковому индексу (от 0 до GetObjectsCount()-1)

==WorldMap==
 - Добавлен метод SetDefaultMapName(ИмяКарты : String) – Установить имя локации, которая будет грузиться по умолчанию для игры (после окна формирования персонажа при начале игры). 

==MapObject==
 - Метод SetDiscriptionID переименован в SetDescription
 - Метод GetDiscriptionID переименован в GetDescription	
 - Добавлен метод ClearInventory() – Очистить инвентарь у текущего объекта
 - Добавлен метод GetDefaultImage() : String – получить текущий префикс изображения юнита 
 - Добавлен метод AddAsAnimation(имя_изображения : String, 
имя_объекта : String, значение_x : Number, 
значение_y : Number, смещение_x : Number, смещение_y : Number) – Добавить на карту анимацию.
 - Добавлен метод SetAnimationParam(ТипПараметраАнимации : AnimationParamType, Значение : Number) – установить значение указанного параметра анимации.
 - Добавлен метод SentToBack(ОбъектНаФоне : Boolean) – Установить флаг расположения объекта «на фоне».
 - Добавлен метод DoHit(Повреждение : Number, ЮнитПадает : Boolean) – Нанести указанное значения повреждения текущему юниту. 
- Добавлен метод DoTrade() - Начать торговлю с текущим разговаривающим юнитом. Работает только, если открыто окно разговора.
- Добавлен метод isUnitDead():Boolean - возвращает true, если текущий юнит мертв

==Перечисления==
 - Добавлено новое перечисление AnimationParamType – Тип параметра анимации
    - AnimationParamType.AnimateLoop	 - Анимация в цикле
    - AnimationParamType.AnimateBackward – Анимация задом-на-перед
    - AnimationParamType.AnimateForward – Анимация вперед
    - AnimationParamType.AnimateEnabled – Анимация активна
    - AnimationParamType.EventOnAnimateEnd – Вызывать событие OnUnitActionWithObject() по завершении анимации (тип действия = ActionType.ActionOnObject)

- Добавлено новое значение перечисления UnitParam.TradeState - Статус торговца/бартера для текущего юнита. Если значение этого параметра равно true, то текущий юнит может торговать/меняться.


==InventoryItem==
-	Метод SetDiscription переименован в SetDescription

Добавлен новый объект – Collection
==Collection==
-	Метод Add(<ключ> :String, <значение> : BasicType) – Добавить значение в коллекцию
-	Метод Get(<ключ> :String или <индекс> : Number) : BasicType – Получить значение из колелкции по его ключу или индексу
-	Метод Clear() – очистить значения коллекции
-	Метод isExists(<ключ> :String) : Boolean – Узнать существует ли значение по указанному ключу. Возвращает true если значение по указанному ключу существует в коллекции.
-	Метод Count() : Number – получить количество элементов в коллекции
-	Деструктор Free()
 - Добавлен режим бега по нажатию хард кнопки (для ПК кнопка - R, для КПК = vkB). Действиет на подобии умения.
 - Добавлены события в глобальный модуль

MapObject.DoTrade() - Начать торговлю с текущим разговаривающим юнитом. Работает только, если открыто окно разговора.
MapObject.isUnitDead() : Boolean - возвращает true, если текущий юнит мертв
UnitParam.TradeState - Статус торговца/бартера для текущего юнита. Если значение этого параметра равно true, то текущий юнит может торговать/меняться.

-- Ошибки
  - Исправлена ошибка с высовобождением указателя для модулей карты
  - Исправлена ошибка с вызовом методов перехода с локации на локацию, с карты мира на локацию
  - Исправлена ошибка с конфигурированием звука для юнитов
  - Исправлены кое-какие мелкие ошибки связанные с режимом боя и неистовым кликанием юзера мышкой


==Общие процедуры==
 - Добавлена функция ExecuteGlobalMethod(ИмяМетода : String, Параметры : BasicType/Array) : BasicType – выполнить процедуру/функцию из глобального модуля global.pfs

==WorldCity==
 - Добавлен метод SetDefaultMap(ИмяКарты : String) – Установить текущему городу имя карты(локации), которая будет грузиться по умолчанию .
 - Добавлен метод GetDefaultMap(): String – Получить имя карты, которая установлена по умолчанию для текущего города.

==MapBuilder==
 - Добавлен метод GetMapName(): String – Получить имя текущей локации
 - Добавлен метод IncWorldTime(Секунды : Number) – Увеличить текущее мировое время на указанное количество секунд.
 - Добавлен метод SortObjects() – Оптимизировать положение объектов на карте. Рекомендуется вызывать после размещения всех объектов на карте
 - Добавлен метод RemoveBypassPoint(x : Number, y : Number) – Убрать точку обхода по указанным координатом мнимых тайлов
 - Добавлен метод RemoveObjects() – Убрать объекты (все, кроме стен и тайлов) с текущей - локации. Справедливо в использовании для случайных локаций. 
 - Добавлен метод GetObjectsCount():Number - Получить количество объектов на текущей карте(локации)
 - Добавлен метод GetObjectName(index : Number) : String - получить имя объекта по его порядковому индексу (от 0 до GetObjectsCount()-1)

==WorldMap==
 - Добавлен метод SetDefaultMapName(ИмяКарты : String) – Установить имя локации, которая будет грузиться по умолчанию для игры.		

==MapObject==
 - Метод SetDiscriptionID переименован в SetDescription
 - Метод GetDiscriptionID переименован в GetDescription	
 - Добавлен метод ClearInventory() – Очистить инвентарь у текущего объекта
 - Добавлен метод GetDefaultImage() : String – получить текущий префикс изображения юнита 
 - Добавлен метод AddAsAnimation(имя_изображения : String, 
имя_объекта : String, значение_x : Number, 
значение_y : Number, смещение_x : Number, смещение_y : Number) – Добавить на карту анимацию.
 - Добавлен метод SetAnimationParam(ТипПараметраАнимации : AnimationParamType, Значение : Number) – установить значение указанного параметра анимации.
 - Добавлен метод SentToBack(ОбъектНаФоне : Boolean) – Установить флаг расположения объекта «на фоне».
 - Добавлен метод DoHit(Повреждение : Number, ЮнитПадает : Boolean) – Нанести указанное значения повреждения текущему юниту. 

==Перечисления==
 - Добавлено новое перечисление AnimationParamType – Тип параметра анимации
    - AnimationParamType.AnimateLoop	 - Анимация в цикле
    - AnimationParamType.AnimateBackward – Анимация задом-на-перед
    - AnimationParamType.AnimateForward – Анимация вперед
    - AnimationParamType.AnimateEnabled – Анимация активна
    - AnimationParamType.EventOnAnimateEnd – Вызывать событие OnUnitActionWithObject() по завершении анимации (тип действия ActionType.ActionOnObject)

==InventoryItem==
  - Метод SetDiscription переименован в SetDescription

Релиз 24.10.2008 (релиз-кандидат - 1.003)

------ Новшества, дополнения :
- В список инвентаря добавлена интерактивная полоса скролла, отображающая положение скролла.
  Появляется в случае, если это необходимо (что бы не тратить место на экране)
- В списке инвентрая убрана зеленая стрелка
- Добавлена усредненная модель расчета характеристик персонажа
- Добавлена возможность установки дополнительных характеристик героя в окне создания персонажа
- Оптимизирована отрисовка объектов на карте уровня
- Изменено отображающиеся значение в графе "броня". Теперь там отображается значение класса брони
- Добавлены сообщения о промахе и нулевых повреждениях
- Добавлена вычитка очков действий при открытии инвентаря
- Добавлена вычитка очков действий при использовании вещей во время боя
- Добавлено отображение имени игрока (из cfg-файла) в окне персонажа + данное имя высвечивается в сообщениях
- В config.cfg добавлена опция draw_tile_coord={0 или 1} - отображение координат тайлов земли. Упрощает размещение объектов и оптимизацию карт

- Изменения в скриптовом движке :
  - Заведена новая СИСТЕМНАЯ константа MISSED_ATTACK для события OnGetDamage. Если событие OnGetDamage вернет эту константу,
    это означает, что атакуемая цель не получила никаких повреждений. Также изменилась логика данного события.
    Теперь OnGetDamage может возвратить :
      - результат > 0 = Fighter ударил Target с указанной силой
      - результат < 0 = Fighter ударил сам себя с указанной силой
      - результат = 0 = Fighter получил нулевые повреждения
      - результат = MISSED_ATTACK - Fighter промазал   

  == Перечисления ==
  - Добавлено нове значение для перечисления UnitParam
    - UnitParam.MeleeDamage - Рукопашный урон
  - Добавлено нове значение для перечисления WeaponParam :
    - WeaponParam.DamageType - тип повреждения оружия. Предназначено для установки/получения типа повреждения вещи-оружия
      через метод SetWeaponParam. В качестве дополнительного параметра к этому методу используется новое преречисление WeaponDamageType.
  - Добавлено новое перечисление WeaponDamageType. Служит для указания типа повреждения оружия.
	- WeaponDamageType.Simple - стандартный/колотый/огнестрельный тип повреждения 
	- WeaponDamageType.Laser - лазерное повреждение
	- WeaponDamageType.Fire - огненное повреждение
	- WeaponDamageType.Plasma - плазменное повреждение
	- WeaponDamageType.Explosion - взрывчатое повреждение
	- WeaponDamageType.Electric - электрическое повреждение

  == Процедуры и функции общего назначения ==
  - Функция GetPlayerName():String - Возвращает имя игрока
  - Процедура SetDefaultMessagesState(статус : Boolean) - Установить статус отображения (включить/выключить) режим автоматических системных сообщений
  - Процедура AddFormattedMessage(индекс_сообщения : Number, параметры : Array) - вывести форматированное сообщение. 
    В качестве <параметры> передается массив строк.
    Данная процедура считывает сообщение по его идентификатору из файла Resource\data\messages.txt. 
    Для замены параметров в строке на значения из массива <параметры> необходимо прописывать в исходной строке символы "%s", пример :
    2002={%s получил по маковке от %s}    

             
  == MapObject ==
  - Добавлен метод CalculateSkillValues() - предназначен для принудительного рассчета умений и характеристик, на основании модели S.P.E.C.I.A.L
  - Добавлен метод GetTitle() : String - получить пользовательский заголовок объекта

  == InventoryItem ==   
  - Добавлен метод GetAmmunition(): String - получить строковое представление аммуниции/патронтажа для текущей вещи
  - Добавлен метод SetAmmunition(<имя_вещи>:String) - установить аммуницию/патронтаж для текущей вещи.
    Примечание : Вещь с именем <имя_вещи> должна существовать в инвентаре юнита.

  == События модуля unit_events.pfs ==
  - Добавлено событие OnUnitSkipTurn(<имя_юнита>:String). Вызывается системой, когда юнит с именем <имя_юнита> пропускает свой ход

------ Ошибки :
- Исправлен баг со сменой изображения брони в инвентаре (быдло-герой)
- Исправлены мелкие ошибки, связанные с логикой бартера
- Исправлена ошибка с текстом "отмена" в Пип-бое
- Исправлена ошибка с отображением очков действий для оружия
- Исправлен критический баг, связанный с потоками и анимацией
- Исправлен баг с дерганием героя при тыкании на другого юнита
- Исправлен логический баг во время боя. Теперь юниты могут драться с оружием (см. default->map_build->mCreateMegaGopnik())
- Исправлена ошибка отображения отрецательных значений в окнах с циферками
- Исправлен баг с зависанием программы в диалоге выбора количества вещи
 
Релиз 25.09.2008 (релиз-кандидат)

------ Новшества, дополнения :
 - В окно разговора и сохранения/загрузки добавлен голубой курсор 
 - Для выбранной вещи в окне инвентаря отображается информация
 - Подправлен алгоритм поворота юнита после его остановки
 - Добавлена опция "Повернуть героя" в попуп-меню героя
 - Добавлена опция "Толкнуть юнита" в попуп-меню близкостоящего юнита
 - Добавлены сообщения о нехватке очков действия
 - Доработана прорисовка тайлов карты (хрен с тем 1 фпс-ом) - переь карта на экране рисуется полностью (даже за панелью)

 - Изменения в скриптовом движке :
   - Изменен метод MathModel.isObjectNearObject - Добавлен новый НЕОБЯЗАТЕЛЬНЫЙ параметр <радиус_обзора> : Чсило. 
     Новый синтаксис :
     isObjectNearObject(objectName : String, targetName : String[,<радиус_обзора> : Number]):Boolean
   - Изменен метод MapBuilder.AddExitArea - Добавлен новые НЕОБЯЗАТЕЛЬНЫЕ параметры смещение_Х:Number и смещение_Y:Number 
     Новый синтаксис :
     AddExitArea(x:Number, y:Number, имя_изображения:String, [смещение_Х:Number, смещение_Y:Number]);
   == Перечисления ==
   Добавлено новое перечисление : WaitCursorType. Предназначено для указания типа курсора ожидания (см. процедуру ShowWaitCursor)
   Имеет значения :
    - WaitCursorType.WorldMap - Курсор в виде земного шара
    - WaitCursorType.Clock - Курсор в виде маленьких часиков
   
   ==InventoryItem==    
   - Добавлен метод SetAttackFileNames(<Атака> : String, <АльтАтака> : String) - установить префиксы имен файлов анимации, 
     описывающих атаку (заменют значения по умолчанию значения : attackmain и attackalt)
   
   == Процедуры и функции общего назначения ==
   - Процедура CheckFightStack() Предназначена для "разруливания" коллизий во время боя (при неверной логике скриптов) (работает только в режиме боя)
   - Функция GetCurrentFighter() : String - Возвращает имя текущего дерущегося юнита (работает только в режиме боя)
   - Процедура ShowWaitCursor(<тип_курсора>:WaitCursorType) - отобразить (в новом паралеьном потоке) курсор ожидания.
     Внимание ! Не рекомендуется использовать данный метод при различных изменениях состояния экрана (затемнение, вызов диалогового, переход на др. карту и т.п.).
   - Процедура HideWaitCursor() - Спрятать курсор ожидания.
   - Функция GetWalkAreaValue(x : Number, y : Number) : Number - Получить проходимость МНИМОГО тайла по указанным координатам.
     Используется только в теле события модуля wmap_events.pfs OnGetUnitPath.
     Возвращает :
     1 - указанный мнимый тайл свободен
     0 - указанный мнимый тайл занят
     -1 - произошла ошибка
   - Процедура SetWalkStep(x : Number, y : Number) - Установить координаты МНИМых тайлов по которым будет перемещаться юнит.
     Используется только в теле события модуля wmap_events.pfs OnGetUnitPath.
   == События ==  
   - События для модуля wmap_events.pfs :
     - procedure OnGetUnitPath(имя_юнита : String, ex : Number, ey : Number) - Вызывается перед тем, как расчитать путь перемещения
       юнита по имени <имя_юнита> к мнимому тайлу с координатами (ex, ey). 
       Внимание ! Если событие существует в модуле wmap_events.pfs, то система передает полностью рассчет алгоритма обхода препятсвий
       данному событию.
     - procedure OnTurnToTarget(имя_объекта : String, имя_цели : String) - Процедура вызывается системой тогда, когда необходимо рассчитать
       правельное направление лица юнита <имя_объекта> по отношению к объекту <имя_цели>.
       Примечание : Вызвается после того, как система выполнила свой внутренний рассчет.
     - function isNearObject(имя_объекта : String, имя_цели : String, радиус : Number) : Boolean - Событие вызывается при определении 
       значения : находится ли рядом с объектом <имя_объекта> объект <имя_цели> с радиусом расстояния <радиус>.
	 Внимание ! Если событие существует в модуле wmap_events.pfs, то система передает полностью рассчет алгоритма определения нахождения цели
       данному событию !
       Должна возвратить :
       true - <имя_объекта> находиться рядом с <имя_цели>
       false - в противном случае
        

------ Ошибки :
 - Исправлена ошибка с коллизией во время смерти одного из дерущихся
 - Исправлена ошибка с незавершением боя, если включена малая панель
 - Исправленая ошибка с убитым героем при начале игры
 - Исправлена ошибка пересчета начальных жизней (на основании модели SPECIAL)
 - Исправлена ошибка с "зависанием" главного меню
 - Исправлен баг с "оживанием" только что умершего гопника
 - Исправлен баг с неочисткой кэша при старте игры (юниты находились не на стартовых позициях, после прошлого завершения игры)
 - Частично исправлена ошибка с отключением звука в игре после выключения/включения КПК.
   Теперь игра не виснет, звук остается, но вырубается музыка :(.
   Проверить на WM5 !!!

Релиз 14.09.2008 (релиз-кандидат)
------ Новшества, дополнения :
- !! Добавлены приметивные драки !!
- Внесены изменения в алгоритм анимации. Теперь для общих видов анимаций (относительно оружия юнита) необходим только один префикс "noweapon".
  Список общих видов анимаций :
  Run, Action, Take,FrontDeath, BackDeath, FrontHit, BackHit, FrontUprise, BackUprise, FrontFall, BackFall, FrontUprise, BackUprise,FrontMiss, BackMiss
- В конфигурацию игры добавлен параметр show_map_coord={1 или 0}. 
  Если = 1, то в левом верхнем углу игровой карты отображаются текущие координаты
- Алгоритм обхода переведен на гексагонную специфику
- Уточниул требования системы для формирования индексов тайлов. Индекс тайла должен быть > 0
- Улучшен алгоритм обмена вещей, управление ими через инвентарь
- В cfg-файл для изображений юнитов/объектов добавлен параметр legs_offset. 
  Предназначен для указания смещения ног для корректной отрисовки юнита над гексагоном
  Синтаксис :
  legs_offset={northeast_coords; east_coords; southeast_coords; southwest_coords; west_coords; northwest_coords}
- В cfg-файл для изображений юнитов/объектов изменен параметр move_offset (смещение при перемещении). 
  Теперь необходимо указывать 2 точки (для оси X и оси Y)
  Синтаксис :
  move_offset={x,y}
- В cfg-файл добавлен необязательный параметр action_frame=<кадр_на_котором_началось_фактическое_действие>
  Предназначен для корректного реагирования логики программы на отображаемую анимацию 
  (например - удар засчитывать только тогда, когда кулак в максимальной фазе удара)
- Подправлен механизм пределения юнита по клику стилуса
- Оптимизирован механиз расчета гексагенов (меньше жрет памяти + быстрее грузиться карта)
- Изменения в идентификаторах действий :
  - putout заменен на takeout
  - putinto заменен на putback

- Изменения в скриптовом движке :
  - Добавлен новый объект MathModel. Предназначен для осуществления сложных математических расчетов.
  ==Список методов объекта MathModel==
  - Метод GetStepCount(<x> : Number, <y> : Number, <xe> : Number, <ye> : Number): Number - Получить количество шагов от (x,y) до (xe, ye)
  - Метод isObjectNearObject(<ИмяОбъекта> : String, <ИмяОбъектаЦель> : String):Boolean - Установить находиться ли указанный объект рядом с другим объектом
  - Метод GetTickCount(): Number - Получить текущие тики процессора
  - Метод PointInRect(<x> : Number, <y> : Number, <xRect> : Number, <yRect> : Number, <width> : Number, <height> : Number) : Boolean - Установить находится ли точка (x, y) в указанном квадрате начиная с координат (xRect, yRect). Метод PointInRect работает быстрее чем PointInPolygon
  - Метод PointInPolygon(<x> : Number, <y> : Number, <МассивТочекX> : Array, <МассивТочекY> : Array ):Boolean - Установить находится ли точка (x, y) в указанном полигоне с координатами точек в массивах <МассивТочекX> и <МассивТочекY>

  ==Изменения в перечислениях==
  - Убрано перечисление : UnitAction.Fight (заменено на 2 служебных)
  - Переименовано перечисление CoordClass.ScreenPosition в CoordClass.Pixel
  - Переименовано перечисление UnitAction.GunPutInto в UnitAction.PutBackWeapon (Положить оружие в ножны/кобуру)
  - Переименовано перечисление UnitAction.GunPutOut в UnitAction.TakeOutWeapon (Взять оружие из ножен/кобуры)
  - Добавлено перечисление UnitActionTurn для события OnUnitGetTurn() :
    - UnitActionTurn.SkipAction - Пропустить ход
    - UnitActionTurn.ContinueAction - Продолжить действие (передать управление системе)
    - UnitActionTurn.WaitForObject - Дождаться выполнение действия объекта и передать управление системе

  - Добавлены новые значения в перечисление UnitParam :
    - UnitParam.CriticalChance - Шанс накритический удар (Number, в %)
    - UnitParam.PoisonResistance - Усточйчивость к ядам (Number, в %)
    - UnitParam.RadiationResistance - Усточйчивость к радиации (Number, в %)
    - UnitParam.DoctorLevel - Уровень доктора (Number)
    - UnitParam.Poisoning - Отравление (Boolean)
    - UnitParam.Irradiation - Облучение (Boolean)
    - UnitParam.EyeWound - Ранение в глаз (Boolean)
    - UnitParam.RightHandWound - Ранение в правую руку (Boolean)
    - UnitParam.LeftHandWound - Ранение в левую руку (Boolean)
    - UnitParam.RightLegWound - Ранение в правую ногу (Boolean)
    - UnitParam.LeftLegWound - Ранение в левую ногу (Boolean)
    - UnitParam.Scrapper - Режим "задиры". Юнит-задира будет пытаться справоцировать драку, если герой попадет в поле его видимости (Boolean)

  - Добавлены новые значения в перечисление SkillType
    - SkillType.ColdSteel - холодное оружие
    - SkillType.LiteWeapon - ручное оружие
    - SkillType.HardWeapon - тяжелое оружие
    - SkillType.EnergyWeapon - энергетическое оружие
    - SkillType.HandToHand - Рукопашная
    - SkillType.DartWeapon - метательное оружие
    - SkillType.Talk - разговор	
    - SkillType.Trade - торговля
    - SkillType.Game - игра
    - SkillType.Wanderer - скиталец	

  ==InventoryItem==    
  - Добавлен метод SetAttackCaptions(<Атака> : String, <АльтАтака> : String) - установить заголовки файлов анимации, описывающих атаку (заменют значения по умолчанию значения : attackmain и attackalt)
  - Добавлен метод SetDeterioration(<Значение> : Number) - Установить значение износа(амортизации) вещи
  - Добавлен метод GetDeterioration() - Получить износ(амортизацию) вещи

  ==WorldCity==
  - Добавлен метод SetVisible(<Статус> : Boolean) - Установить статус видимости текущего города
  - Добавлен метод GetVisible() : Boolean - Получить статус видимости текущего города

  ==MapObject==
  - Добавлен метод SetDefaultImage(<имя_изображения> : String) для установки/смены изображения юнита по умолчанию 
  - Добавлен метод BeginFight() : Boolean - Попытаться справоцировать драку текущим юнитом. Возвращает true, при успешной попытке;
  - Добавлен метод EndFight() : Boolean - Попытаться завершить драку текущим юнитом. Возвращает true, при успешной попытке;
  - Добавлен метод AddToFight() - Добавить текущего юнита в драку
  - Добавлен метод RemoveFromFight() - Убрать текущего юнита из драки
  - Добавлен метод DisplayText(<ИдентификаторНадписи> : Number) - Отобразить текст над юнтом. ИдентификаторНадписи - идентификатор текста из файла dialog_<имя_юнита>.txt
  - Добавлен метод SetTitle(<ИдентификаторНазвания> : Number) - Установить отображаемое в игре название юнита (например - "Избранный"). ИдентификаторНазвания - идентификатор текста из файла dialog_<имя_юнита>.txt
  - Добавлен метод GetObjectDirection() : Direction - Получить направление текущего объекта
  - Добавлен метод GetActiveHand() : Hands - Получить активную руку юнита
  - Добавлен метод GetItemFromHand(<ТипРуки> : Hands) : String - Получить строковое имя вещи из указанной руки юнита
  - Добавлен метод SetArmour(<ИмяВещи> : String) - Установить юниту броню с именем Имя_вещи (вещь д.б. в инвентаре юнита)
  - Добавлен метод GetArmour():String - Получить строковое имя брони, которая на данный момент установлена у юнита  
  - Добавлен метод SetMoveState(<Статус>:Boolean) - Установить статус возможности передвижения объекта (для объектов, не способных передвигаться)
  - Добавлен метод GetMoveState():Boolean - Получить статус передвижения объекта
  - Добавлен метод SetObjectActionPoints(<ТипОчков> : UnitActPoints, <Значение> : Number) - Установить значение указанного типа очков действий
  - Добавлен метод GetObjectActionPoints(<ТипОчков> : UnitActPoints):Number - Получить значение указанного типа очков действий
  - Добавлен метод SetSkillLevel(<ТипУмения> : SkillType, <Значение> : Number) - Установить значение указанного типа умения юнита
  - Добавлен метод GetSkillLevel(<ТипУмения> : SkillType) : Number - Получить значение указанного типа умения юнита
  - Добавлен метод DoAttack(<ИмяЦели> : String) : Boolean - Выполнить атаку текущим юнитом на указанную цель (атака выполняется с применением текущего оружия в текущей руке юнита)

  ==События для файла unit_events.pfs==
  - function OnUnitGetTurn(unitName) : UnitActionTurn - Событие, которое вызывается тогда, когда объект с именем unitName получил ход (только во время боя)
  - procedure OnUnitDeath(unitName) - Событие, которое вызывается при смерти юнита
  - function isDamageCritical(fighterName, targetName) : Boolean - Событие, которое вызывается при расчете вероятности критического повреждения при атаке. Вызывается системой после события OnGetDamage
  - function OnGetDamage(fighterName, targetName) : Number - Событие, которое вызывается при расчете силы повреждения при атаке

  ==События для файла map_events.pfs==
  - procedure OnBeginFight(unitName) - Событие, которое возникает в системе, когда начинается драка справоцированная юнитом unitName
  - procedure OnEndFight(unitName) - Событие, которое возникает в системе, когда завершается драка по инициативе юнита unitName

------ Ошибки :
- Исправлен баг с прорисовкой "Х" при перемещении героя
- Исправлен баг с перекладжыванием вещей в инвентарь другого юнита (не будут грузиться старые совки)

Релиз 22.06.2008 (промежуточный билд)
------ Новшества, дополнения :
- Подправил About (проверяем правильно написал имена)
- Движок проекта переведен на гексогены
- Добавлен алгоритм переноса по словам в окне разговора с юнитом. 
  Перенос автоматически производится после символов " +-*/|Ё!"№;%:?*!"
- Подправлен скролл текста в окне разговора
- Оптимизирован алгоритм создания стен
- Изменения в скрипотовм движке :
  - Добавлен новый объект, позволяющий подключать другие пользовательские модули - UserModule. 
    Пользовательские модули должны находиться в папке "Resource\modules\user\".
    Синтаксис подключения :
    var <имя_переменной> = CreateObject("UserModule.<имя_файла_без_расширения>")
    <имя_переменной>.<Имя_метода_из_модуля>([список_параметров])
    Пример подробно в maps\default
- Добавлены в скриптовой движок следующие функции :
  Работа со строками :
  - Chr(<значение> : Number) : String - Получить символ (в виде строки) по коду
  - Ord(<значение> : String) : Number - Получить код по символу (в виде строки)
  Функции отладки :
  - DbgLogValue(<значение> : Ordinal, <подсказка> : String) - Вывести в лог файл dbgscript.log информацию о переменной

------ Ошибки :
- Исправлен алгоритм очистки памяти при загрузке новой карты

Релиз 02.06.2008 (003с)
------ Новшества, дополнения :
- Проект переведен на mp3 формат звуковых файлов (22 КГц, 80 Кбит/сек). 
  Для интерфейсных звуков - используется формат WAV (PCM без зжатия, 22 КГц, 16 бит, стерео) 
  Производительность выросла в среднем на 20%
- Скорректирован механизм расчета случайных действий юнитов
- Скорректированы структура и название папок ресурсов игры 
  Все папки с глобальными текстовыми ресурсами + карты уровней лежат тепереь в папке Resource.
  Изображения для юнитов/активных объектов лежат в папке Graphics/Objects
- Добавил пример работы с репозиторием (global.pfs, default->map_build.pfs)
- Изменил имя события OnRandomMapSfx() на OnRandomMapAction() (см. map_events.pfs)
- Подправил алгоритмы обмена вещами и кражи (можно красть оружие из рук)
- Подправил алгоритм встречи случайной локации. Теперь частота случайных встреч зависит от удачи героя
- Подправлен алгоритм поворота к цели (FATH это путал с алгоритмом обхода)
- Подправлен алгоритм определения ближайшей точки к цели (FATH это путал с алгоритмом обхода)
- Добавлены в скриптовой движок следующие функции :
    Матеметические :
	log(<значение> : Number) : Number - Логарифм числа
	log10(<значение> : Number) : Number - Десятичный логарифм
	exp(<значение> : Number) : Number - Экспонента в степени значения
	tan(<значение> : Number) : Number - Тангенс числа
	Pow(<значение> : Number, <степень> : Number) : Number - Возведение значения числа в степень
    Общего назначения :
      Length(<значение> : String или Array) : Number - возвращает длину строки или массива
	RemoveValue(<имя_переменной>) - удалить переменную из репозитория по ее имени
	YesNoMessage(<индекс_сообщения> : Number) : Boolean - Уотобразить на экране окно с кнопками "Да/Нет". Возвращает true, если нажата кнопка "Да"
    Работа со строками :
 	Pos(<суб_строка> : String, <строка> : String) : Number - Возвращает индекс, с которого начинается суб_строка в строке
	SubStr(<строка> : String, <нач_индекс> : Number, <длина> : Number) : String - Возвращает часть строки из <строка>, 
		начиная от символа с позицией <нач_индекс>, длиной = <длина>
    MapObject:
	SetActiveHand(<значение> : Hands) - установить юниту активную руку
	SetItemToHand(<значение> : Hands, <имя_вещи> : String) - вложить указанную вещь из инвентаря юнита в его указанную руку
- Добавлены следующие перечисления :
	- Hands - руки. (Hands.Left - левая рука; Hands.Right - правая рука)

------ Ошибки :
- Исправлен баг с незакрытием файлов скрипта (ругался редактор скриптов на то, что занят файл другим процессом) 
- Исправлена установка через скрипт направления для юнитов
- Исправлен баг с вылетом игры на PC платформе при больших fps на переходе между картами
- Исправлен алгоритм скролла карты (в т.ч. на объект по его имени)
- Исправлена ошибка потери фокуса окна воровства
- Исправлены визуальные юаги, связанные со стрелками скролла карты

Релиз 10.05.2008
------ Новшества, дополнения :
- Добавлена новая опция в конфигурирование игры - disable_random_actions. 
  Если данную опцию выставить в 1, то в игре будут запрещены все случайные события (кроме текста над юнитом).
  Повышает производительность на слабых КПК (реагировать на действие юзера игра будет быстрее)
- Добавил кеш изображений для механизма скролла - теперь стрелки скролла подгружаются из памяти.
  Должно убрать (с большего) подергивания (наложение изображений) при скролле карты
- Изменил метод : WorldCity.CreateCity(<имя_для_программы>, <ид_заголовка>, <размер>) (см. global.pfs)
- Изменил метод : AddQuest(<ид_квеста>, <ид_заголовка_квеста>) (см. default\unit_events.pfs)
- Оптимизировал расчет мнимого тайла по координатам стилуса
- Вынес в конфигурационный файл настройки отображения :
  1. Статуса свободной памяти - memory_status = {1 или 0}
  2. Статуса заряда батареи - battery_status = {1 или 0}
- Подправлен механизм скролла для мировой карты
- Добавлено куча мелких фичей для ПИП боя  
- Изменено окно карты мира + добавлена кнопка выхода "город/мир" + убран список городов (т.к. он в ближайшем будущем не будет задействован)
- Добавлены все характеристики для юнитов, согласно модели S.P.E.C.I.A.L (не будут грузиться карты из файлов и старые совки)
  Пока данные характеристики не будут доступны из языка скриптов. 
- Перевел проект на новую версию библиотеки PocketHAL 1.0.5. Необходимо перетестить игру на КПК заново
- Подправил PocketFrog. Теперь в PC-версии проекта, окно рисуется по центру экрана + есть кнопка для сворачивания окна

------ Ошибки :
- Исправлен баг с уезжанием пола из-под ног при скролле
- Исправлен баг с долгим расчетом мнимого тайла (зависание при беспорядочном тыкании)
- Исправлен баг с неотображением ауры во время боя + шагов до цели
- Исправлен баг с сохранением в первый слот
- Исправлен баг с неотрисовкой ауры во время боя

Релиз 23.04.2008
------ Новшества, дополнения :
- Изменен алгоритм поведения системы, при возникновении любой ошибки - отображается сообщение и программа
  прекращает свое выполнение;
- Дабл клик вернулся ! Теперь бегать можно при помощи дабл клика в указанное место. Иногда, при сильной 
  загрузке процессораможет не сработать, так что кликать надо быстрее;
- Изменен MessageBox теперь он имеет Faloout-стиль
- Возможно пофиксен баг с hx4700
- Подправил отображение статуса памяти - теперь показывает, сколько свободно + в процентах
- Произвел тотальную оптимизацию использования всех графических ресурсов

------ Ошибки :
- Исправил ошибку с "зависанием" открытого ящика а режиме боя
- Исправил ошибку с вылетом карты мира (сейчас карта мира скролится в приделах окна карты мира)
  На КПК будет скролится нормально, однако на отличных от 320х240 разрешений сролл будет не корректным
  это исправиться, когда будет универсальное окно карты, созданное под конкретное разрешение
- Исправил ошибку с кешем изображений для юнитов (смена куртки при хотьбе после загрузки)
- Исправил ошибку с неверной загрузкой одежды юнита в окне инвентаря

Релиз 04.04.2008
------ Новшества, дополнения :
- Подправлен алгоритм появления яйца прозрачности;
- Оптимизирован код множества методов, где происходит работа со скриптами;
- Изменен формат лога error.log. Теперь более ясно, где произошла ошибка в скрипте

------ Ошибки :
- Исправлена ошибка записи строк в кросс-платформенные файлы
- Исправлена ошибка определения логических координат на карте мира

Релиз 24.03.2008
------ Новшества, дополнения :
- Оптимизирован алгоритм обхода. Теперь путь высчитывается в приделах квадрата, размером ребра = указаный путь +/-4 мнимых тайла
- Добавлен прогресс бар при загрузке
- Оптимизировано множество расчетов
- Убрана (временно) возможность бега

------ Ошибки :
- Исправлен баг с упорством принятия яблока
- Исправлен баг с применением умений
- Исправлен баг с прорисовкой больших изображений в окне инветаря (баг с кейсом)

Релиз 24.02.2008
------ Новшества, дополнения :
- Добавлен объект WorldMap. Методы GetCityNameByCoords, SetWorldHeroPosition, GetWorldHeroY были перенесены в этот объект; 
  Посему произошел рефакторинг имеющихся скриптов
- В объекте "InventoryItem" добавлен метод UseItemFrom(<имя_юнита>, <имя_вещи>) для того, чтобы спозиционироваться на УЖЕ СУЩЕСТВУЮЩЕЙ вещи.
  В случае успеха возвращает true
- Добавлена возможность установки скорости передвижения по мировой карте (WorldMap->SetWorldSpeed / GetWorldSpeed)
- Добавлены методы установки (SetMapCellPaint) и определения (GetMapCellPaint) состояния закраски ячейки карты (см. global->OnInitialization())
- Оптимизировал скорость расчета алгоритма обхода
- Оптимизировал скорость работы потоков
- Добавлена командная строка. Примечание : символ "|" означает "и/или" и используется ТОЛЬКО в этом описании
  PocketFallout.exe [-debug |  -map имя_карты | -load номер_слота | -nofps | -grid ]

------ Ошибки :
- Исправлены ошибки с кешем, вызывающие визуальные глюки с крутящимся юнитом
- Исправлена ошибка одетого героя в куртке, если начинать игру с начала;
- Исправлена ошибка скроллинга мировой карты
- Исправлена ошибка с зависанием возле объекта, при использовании скилзов (баг с деревом и наукой)
- Исправлена критическая ошибка - наслоение звуков, по этому ИНОГДА вылетала игра
- Обнаружена и исправлена утечка памяти  

Релиз 13.02.2008
------ Новшества, дополнения :
- Добавлен автоматический расчет базовых характиристик юнитов : очки действий, макс. вес, макс. здоровье. 
  Все пересчитывается при смене характеристик. Таких как : сила, уровень, выносливость
- Доработан алгоритм перемещения героя по мировой карте (из точки в точку). Теперь можно изменять скорость, а также герой движется под верным углом.
- Оптимизировано отображение тайлов карты (добавилось как минимум 50 фпс на открытых локациях)
- Оптимизирован кеш изображений для юнитов во время хождения
- Внимание ! Изменен тип данных переменной, хранящей максимальный уровень опыта. Если есть сохраненные игры и/или сохраненные карты , то старые версии не будут грузиться

------ Ошибки :
- Исправлен баг с "телепортацией" героя при разговоре с юнитами
- Исправлен баг с неверным расчетом текущего времени при перемещении по мировой карте
- Исправлен баг с "непослушанием" курсора позиции, в режиме боя
- Исправлен баг с вращающимся курсором
- Подправлено отображение списка городов для карты мира


Релиз 29.01.2008
------ Новшества, дополнения :
- Добавлены параметры пола и отношения юнита к герою. Устанавливается при помощи SetUnitParam. То есть в перечисление UnitParam добавлены значения :
  UnitParam.Sex - пол (новое перечисление - SexType -> содержит два значения : SexType.Male  и SexType.Female)
  UnitParam.AttitudeToHero - отношение к герою. 0 = апатия, если < 0, то тогда античувства. А если >0 - положительные чувства.
- Добавлено событие смены брони, для героя - теперь при смене брони на панели отображаются ее параметры 
- Добавлена возможность установки ЛЮБОГО разрешения игровой области (не менее 240х240). Работает ПОКА только на настольном ПК
  Для этого введены новые параметры в cfg-файл :  screen_width={ширина} и screen_height={высота}
- Оптимизировано отображение игровой области, скроллинга
- Добавлено новое свойство - AddExitPoint, для объекта MapBuilder для уточнения, на каком из мнимых тайлов будет выход. 
  Т.е. теперь выход с карты будет осуществлятся ТОЛЬКО через точки, добавленные методом AddExitPoint (а не AddExitArea, как было ранее)
- Добавлен алгоритм расчета экспы для следующего уровня 
- Добавлены функции контроля повышения уровня игрока
- Убрано событие из скриптового языка, для  определения границы передвижения героя по карте мира, сейчас это все делается автоматом по средсвам маски
- Добавлена возможность разговора юнита с любыми объектами
- Добавлена зеленая стрелка в инвентаре, которая отображается, когда для прорисовки следующей вещи в списке не хватает места
- Добавлена возможность сохранения/чтения игровой карты в бинарный файл (многократно ускоряет процесс загрузки)
- Добавлен метод SetShowPopupState(true/false) для объекта MapObject
- Добавлена возможность определения КАЖДОМУ модулю скриптов две предопределенных процедуры, одна из которых вызывается в самом 
  начале работы модуля (OnInitialization) и в самом конце - OnConclusion. Очень удобно для определения глобальых (для текущего модуля) объектов/переменных
- Добавлена возможность добавления случайных локаций на мировой карте ("мигающая" молния). Обрабатываются при помощи события wmap_events.pfs->OnGetRandomLocation()
- Добавлен метод, позволяющий человекообразного юнита отправлять на указаный мнимый тайл (unit->GoToCell - см. default->unit_events)
- Добавлен метод, позволяющий юниту выполнить ОДНО действие (unit->SetUnitAction - см. default->unit_events)

------ Ошибки :
- Исправлен баг с пересчетом даты (переход на новый год)
- Исправлен баг с прорисовкой даты в пипбое (на декабрь рисовался ноябрь)
- Исправлен баг с превышением допустимого уровня экспы
- Исправлен критический баг с неверным уничтожением звукового потока
- Подправлен дефект с дерганием юнита, при попытке отправить его в недосигаемую точку
- Подправлены дефекты с кнопкой "БОЙ"
- Исправлен дефект с "лунной походкой Джексона"
- Подправлен алгоритм выхода с карты
- Подправлены баги, связанные с отображением вещей в инвентаре
- Подправлен механизм действия умения героя на самом себе 
- Переименовал значение перечисления SkillType "наука" в SkillType.Science (орфографическая ошибка была)
- Т.к. "крутящийся" курсор рождал много исключительных ситуаций (критических ошибок), он был временно убран, пока не разберусь в чем дело его в игре не будет :(

Релиз от 19.11.2007

------ Новшества, дополнения :
- Добавлены механизмы интерактивной настройки отображения объектов для debug-режима (красная кнопочка на малой панели. Работает только если debug_mode={1})
- Подправлено отображение сетки
- Добавлено отображение точек обхода
- Добавлены скриптовые команды для определения параметрв оружия (старые совки не будут грузиться)
- Изменена кнопка переключения между большой и малой игровой панелью
- Подправлено меню над объектами
- Немного подправлен скрипт постороения дома

------ Ошибки :
- Исправлены баги, связанные с перекладыванием вещей
- Исправлен баг с определением шкафа
- Исправлен баг с "дерущемся" шкафом
- Исправлен баг со скроллом инвентаря
- Исправлен баг с созданием персонажа после перезапуска игры
- Исправлены визуальные баги с курсором точки передвижения


Релиз от 31.10.2007

- Добавлен диалог множественного выбора элементов (например, при воровстве)
- Добавлен механизм смены оружия
- Подправлен механизм выбора вещи через «рюкзак»
- Изменены параметры сохранения игры (старые совки не будут грузиться)
- Исправлены ошибки, связанные с загрузкой совков
- Подправлен механизм смены дня и ночи
- Все параллельные звуки, кручение курсора вынесены в отдельные, от основного, потоки
- Оптимизирован механизм парсинга скриптов
- Оптимизирован алгоритм обхода препятствий
- Произведен огромный рефакторинг кода игры
- Наконец-то избавился от названий и реализаций, пришедших от пра-пра-дедушки проекта – WasterlanWolf
- Заложена основа переноса игры на любые разрешения экрана (есесно надо дорисовывать интерфейсную графику)  
