Чайник считает что в мегабайте 1000 килобайт
Программист уверен что в километре 1024 метра

+--------------------------------------------------------------------------------------------------------------------------[release: 07.11.04]----+
|
|
|
|
|
|
|
  _|_|    _|_|_|    _|_|    _|_|_|    _|_|    _|  _|    _|  _|_|    _|_|_|      _|  _|    _|_|_|
_|      _|  _|  _|  _|  _|  _|        _|  _|      _|_|_|_|  _|  _|  _|        _|_|_|_|_|  _|    
_|      _|_|_|_|_|  _|  _|  _|_|      _|_|    _|  _| |  _|  _|_|    _|_|_|      _|  _|    _|_|_|
_|      _|  _|  _|  _|  _|  _|        _|      _|  _|    _|  _|          _|    _|_|_|_|_|      _|
  _|_|    _|_|_|    _|_|    _|_|_|    _|      _|  _|    _|  _|      _|_|_|      _|  _|    _|_|_|
|
|
|
|
|
|
|
+-------------------------------------------------------------------------------------------------------------------------------------------------------+
+-----------------------------------------[0x0a: Игра, как средство для программирования]-----------------------------------------+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

Сейчас если мы покупаем игру, то почти наверняка в комплекте с ней получаем и игровой редактор. В основном редакторы дают возможность создать свой уровень, карту, сценарий... Более мощные могут слегка изменять программный код и сохранять полученную информацию в виде модуля.

Я делю редактирование игр на 2 категории - непосредственное копание в файлах (например, Worms: Armageddon, где каждая миссия была "записана" в отдельный текстовик) и редактирование с помощью специального редактора , нередко встроенного в оболочку игры (Age of Empires, Age of Mythology).

Большинство редакторов работает следующим образом: поставил объекты, настроил их параметры, настроил глобальные параметры и... все. Играть на таких картах не очень интересно. Поэтому разработчики компьютерных игр создали, так называемые,триггеры. Триггеры - это специальный,скриптовый язык созданный для определенных целей (в данном случае:для настройки специальных событий).Поясню на примере Age of Empires 2. Здесь триггер - это набор условий и набор эффектов.Как только выполнятся все условия,тут же начнут выполняться эффекты, в том порядке,в котором они указаны.Также триггер имеет собственные настройки, от которых зависит:включен ли триггер с самого начала,повторится ли он в игре.

Когда я впервые увидел редактор Империй, то подумал, что ничего интересного в нем нет. Но однажды скачал из сети RPG карту. То,что я там увидел меня сильно потрясло. Я не спал пару ночей. Там и приключения, и нежить, и покупка недвижимости, и разговор с любым(!) персонажем, и квесты, и инвентарь(!), и даже магия! И это,учитывая, что Эпоха это реалистичная игра - магии и fantasy нет и в помине! Есть только хороший скриптовый язык.

Но две самых триггерно-продвинутые игры,на мой взгляд, это Герои Меча и Магии 3.5: «Во имя Богов» и WarCraft 3:The Frozen Throne. Расскажу о них подробнее.

Многие,кто играли в HoMM3.5 (Heroes of Might and Magic 3.5) уже догадываются, что речь пойдет о скриптовом языке ERM. Игроки видели его возможности в прилагавшихся к игре кампаниях. Язык основан на изменениях свойств объектов, о изменении которых картостроители могли только мечтать. Стало возможно изменение параметров монстров, артефактов, героев. Появилась возможность создавать и убирать объекты, переносить игроков из одного места в другое! Но многие картостроители так и не смогли разобраться в ERM. Главная причина в сложной системе синтаксиса. Например, пусть есть конструкция:

IF (<герой_игрока> попал на клетку 10,15,1) THEN перенести <герой_игрока> на клетку 15,10,0;

В ERM придется писать следующее:

ZVSE
!?LE10/15/1;
!!HE-1:P15/10/0/1;

Попробуй, отладь такой текст! Но в сети можно встретить ярых приверженцев такого способа записи, мол, когда нет заученных сочетаний слов, то и внимание улучшается и вероятность ошибок,следовательно,меньше. Теперь способ помещения скрипта на карту. Надо просто в настройках карты создать глобальное событие, которое случится после 600 дня и в него скопировать текст из редактора.Кстати в комплекте с игрой поставляется редактор ERM_se, в папке с таким же именем. Данная программа облегчает работу с языком, но интерфейс слегка кривоват. В целом очень сложный, но интересный язык.

Вторая игра,о которой я хотел бы рассказать - это WarCraft3:TFT. Многие люди, которые играли в него знают, что в WorldEditore (редакторе для WC) есть встроенный редактор триггеров.Конечно хороший редактор,много событий,условий, действий. Многие считают,что на движке WarCraft’a можно сделать очень многое: стрелялки, гонки, RPG, бродилки, квесты - это, что уже сделано игровым сообществом. И все это только с помощью редактора триггеров и редактора объектов. Но я расскажу не о данных редакторах, а встроенном в игру языке программирования. Называется язык JASS, был разработан, как язык высокого уровня, но для игры. Но этот язык очень малораспространен, во-первых, из-за сложности,во-вторых,из-за отсутствия толкового официального редактора. Второе особенно плохо, так как при ошибке карта просто вылетает, без вразумительных сообщений об ошибках. А «изгонять чебурашек» из сплошного текста почти невозможно. Хорошо, что фанаты игры (редактора?) выпустили неофициальные JASS-редакторы. Вот пример кода:
function SimpleFunction takes unit summon, unit master returns nothing
 local integer o=GetUnitCurrentOrder(summon)
 local real tx=GetUnitX(master)
 local real ty=GetUnitY(master)
 local real angle
 local real dist
set dist=SquareRoot(Pow(tx-GetUnitX(summon),2) + Pow(ty-GetUnitY(summon),2))
  if (dist > UnitGuardUnitAI_maxdistance() ) and (o == 0 or o == OrderId("attack") 
     or o == OrderId("move") or o == OrderId("stop") or o==851971) then call 
     IssuePointOrder(summon, "move", tx,ty)
  elseif dist >= UnitGuardUnitAI_cometomindist() and (o == 0 or o == 851971)
     then set angle = GetRandomReal( GetUnitFacing(master)-80,
        GetUnitFacing(master)+80) * IntegerTertiaryOp( ModuloInteger(
           GetUnitPointValue(summon), 2) == 0,1,-1)
set dist = GetRandomReal(UnitGuardUnitAI_cometomindist(),
   UnitGuardUnitAI_cometomaxdist() )
  if not IssuePointOrder(summon, "attack", tx+dist*CosBJ(angle), ty+dist*SinBJ(angle) ) 
   then call IssuePointOrder(summon, "move", tx+dist*CosBJ(angle), ty+dist*SinBJ(angle) )
  endif
  endif
set summon=null
set master=null
endfunction
Одного взгляда достаточно,чтобы расхотеть заниматься таким программированием. А ведь данный язык еще чувствителен к регистру букв! Тем не менее, JASS был и остается самым лучшим языком программирования. Зачем же картостроители используют JASS? Не хватает World Editor’a? «Не хватает!» - ответят вам. JASS позволяет более гибко редактировать объекты,вмешивается в саму механику игры, контролируя все даже положение мыши! JASS-выбор настоящего, профессионального картостроителя. Простым смертным лучше даже не пробовать. Только если чуть-чуть...

На свете много разных скрипто-триггерных языков. Но чтобы разбираться в них лучше, надо выучить хоть один «нормальный» язык программирования, например Pascal или Basic. Знаете «нормальный» язык поймете и «игровой». Засим откланяюсь. Отзывы шлите на [email protected].
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+-----[content]-----------------------------------------------------------------------------------------------------------------------[mail us]-----+