Оригинал материала: https://3dnews.ru/184172

О Colobot'е, игровой индустрии и программировании

Автор: Сергей Хорев
Конкурсный обзор
Хочу сразу сказать, что не являюсь геймером в современном понимании этого слова: не просиживаю ночами в клубах за Counter-Strike (вообще в них не бываю), да и за компьютером ночую редко. Я - профессиональный программист и это накладывает определенный отпечаток на мои вкусы. Люблю иногда поиграть во что-нибудь такое интересное. Раньше это были стандартные для большинства молодых людей Doom, Quake, суперхит Half-Life, DeusEx, перемежаемые периодами Starcraft и Heroes of Might and Magic.

И всегда в большей или меньшей степени возникало возмущение, недоумение и даже раздражение по поводу действий искусственного интеллекта. Если в "стрелялках" враги (даже слабые) тупо перли на тебя или описывали стандартные траектории несмотря на очевидную уязвимость, то в стратегиях реального времени выводил из себя дружественный интеллект. Хотя нет, не только: в Half-Life взятый с собой охранник (что было революцией само по себе) тоже мог запросто тебя пристрелить, окажись ты на линии огня, когда он увидел монстра. Вообще, про Half-Life не будем говорить: я рискую оказаться сильно пристрастным - до сих пор ее люблю, несмотря на (ее) возраст и графику.

Наверное, все игравшие в Starcraft ругались на то, как юниты находят пути, но все-таки рано или поздно они, как правило, разрешали все deadlock'и, но почему юнитам можно сказать "патрулировать", "стоять на месте", "атаковать", но нельзя скомандовать: "охранять, если напали - отстреливаться, но не лезть дальше этого предела". Господи, сколько я потерял таким образом Mutalisk'ов (люблю играть за Зергов), пасшихся на окраинах моих территорий и увязавшихся за дурацким Dropship'ом! Конечно, когда играют "папики", у них все юниты идут куда надо и делают тоже только то, что надо, но мы не говорим про хардкорных геймеров (если честно, я склонен это считать какой-то аномалией).

В принципе, у любого есть шанс улучшить свою любимую игру: выпускаются всевозможные редакторы и SDK, но, как правило, надо очень хорошо изучить движок и все равно дело ограничивается более или менее большим набором скриптов - "рецептов на все случаи жизни". А хочется чего-нибудь гибкого (шланг просьба не предлагать) и удобного.

И вот появился ОН - Colobot. Единственный виденный мной русскоязычный обзор на AG отозвался о нем не очень лестно и, по-моему, зря. Вот я и постараюсь восполнить этот пробел. Кстати, как-то встретилась мне русификация от "Фаргуса", значит, есть и другие оценившие люди.

Создала ее практически неизвестная компания Epsitec. Как я понял из credits и информации на сайте, в ней работают французы и наши братья-славяне - чехи.

Итак, что же это такое - Colobot? Расшифровка - Colonize with Bots - ничего не говорит. В общем, это стратегия реального времени с введением в программирование. Ну как вам? Звучит обескураживающе и интригующе, не правда ли? Если с первой частью все понятно - еще одна RTS (не скажешь, что эта часть уж очень хороша, она там только для интриги), то со второй надо бы подразобраться. Здесь имеется возможность ПРОГРАММИРОВАТЬ ЮНИТЫ. Теперь если твой подопечный себя плохо ведет, то вину за это можно возложить исключительно на себя. Язык программирования довольно прост, но в то же время далеко не примитивен. Больше всего напоминает С++. А, может, Java. Такая же объектно-ориентированность, доведенная до абсурда, то же отсутствие "опасных" операций с указателями и памятью. Это, кстати, практически все, что я знаю про Java.

Задача игры проста: тебя высаживают с некоторым запасом ресурсов на планету, которую нужно освоить. На ней обитают разнообразные насекомые несколько крупнее наших - пауки, муравьи, осы; все они настроены далеко не дружелюбно. Универсальным сырьем является Titanium, его надо обрабатывать, строить сооружения, создавать роботов. Роботы бывают всякие: просто транспортеры на колесах, на гусеницах, летающие. Есть и "военные" юниты, но всех их объединяет одно - им нужны батареи, которые имеют подлую манеру быстро истощаться. К сожалению, давать групповые команды нельзя: каждый бот требует индивидуального подхода. Но есть возможность писать программы почти на естественном языке, названном CBOT, и даже их отлаживать! А уж здесь открывается необъятный простор для творчества, вплоть до программирования общения между юнитами. Должен похвалить авторов: они не стали использовать синтаксис недо-языков типа *Basic, они делают из своих пользователей настоящих программистов. Действительно, такой свободы, как в конструкциях С++, нет ни в Паскале (при всем моем уважении к нему), ни в каком другом распространенном языке. Другой вопрос, конечно, стоит ли начинать обучение именно с C++? Не знаю... Может и не стоит, особенно если обучать прикладному программированию.

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

extern void object::Ant()
{
	object    item;
	aim(-20);
	while (true)
	{
		hile (radar(AlienAnt, 0, 360, 0, 20) == null)
		{
			item = radar(AlienAnt);
			turn(direction(item.position));
			motor(1,1);
			jet(0);
			
			if (position.z-topo(position) < 6)
			{
				jet(1);
			}
			if (position.z-topo(position) > 9)
			{
				jet(-1);
			}
			wait(0.2);
		}
		fire(1);
	}
	
}
Как видите, все очевидно.

Должен сказать, что разработчики очень облегчили себе задачу - все объекты, управляемые компьютером, "живут" по программам на CBOT и можно даже попробовать их поменять - они лежат в открытом виде. Естественно, у пользователя есть возможность сначала потренироваться - для этого предназначен немалый набор миссий, где постепенно, от простого к сложному, научат управлять ботами "вручную" (что довольно-таки скучно) и программно.

Если честно, я бы не смог долго играть в эту игру, если бы не мой 2.5-летний ребенок: ему что-то так запало в душу (может, мои размышления вслух, может, еще чего), что пришлось доставлять ему радость. Получалось почти как в анекдоте: приходишь домой напрограммировавшийся, хочешь отдохнуть-отвлечься, а дома тот же C++.

Ну что ж, пришла пора поговорить о графике. Впечатление она оставляет двойственное. С одной стороны, игра хочет DirectX 8.0 и якобы использует многие его фичи вплоть до Hardware T&L (нормально для RTS, да?), а с другой - не очень-то она и отличается изысканностью: вы только посмотрите на эти, с позволения сказать, модели. По-моему, использование Direct3D "по максимуму" является большим плюсом , причем не в плане красоты эффектов. Значит, разработчики не тратили время на бестолковое создание красивостей минимумом средств (типа "трехмерной" графики в Starcraft или Diablo, основанной на самом деле на спрайтах). Поэтому большая часть их усилий пошла на совершенствование игрового и языкового движка. Ну и, конечно, все-таки интересно посмотреть на круги, идущие по воде, огонь, туман, искры, взрывы, молнии. Единственная огорчительная деталь - это отсутствие вида сверху, что объясняется, видимо, тем, что игрок действует не как абстрактное сверх-существо, а как конкретный астронавт, которого, кстати, могут и убить. Зато есть вид от первого лица: можно даже смотреть на мир "глазами" конкретного робота, что может оказать полезным при необходимости сложного маневрирования (мир-то, кстати, трехмерный, соответственно, летающие роботы могут летать, эдакое эхо легендарного Descent'а).

Кстати, говоря о качестве: вроде чехи - недавние собратья по соцлагерю, но ведь выпускают нормальные игры (или вспомним хорватского Serious Sam). А наши что? Из самых последних разочарований хотелось бы вспомнить Venom: Codename Outbreak. Взял у друга на один вечер, очень понравилось, купил... Но, Господи, почему столько глюков? Даже оперативно выпущенные патчи не исправляют всех проблем. Чего стоит заботливый MessageBox при настройке: "на Windows 2000 кнопки мыши могут залипать". Разработчики пишут, что это баг в DirectInput. Может быть, но почему он больше НИ В КАКОЙ игре не встречается? Значит, это можно все-таки обойти? Про ни разу не перечитанный авторами после составления черновика readme лучше вообще молчать. Или про диски с трещинами (к чести компании "Русобит-М", диски они меняют). Я уж не говорю, про откровенно убогий и глючный графический движок. Хорошо, что хоть честно написано Copyright 1998-1999 Roman Lut. От возраста движка и все его беды. Видимо, денег жалко, или это болезнь всех программистов "все сделаю сам" не позволила приобрести нормальный? До некоторого момента абсолютно уникальный геймплей все это компенсировал, но только до некоторого момента. В конференции iXBT один гражданин заявил, что идея игры взята из Daikatana. Конечно, он заблуждается, но кое в чем он все-таки прав: действительно, одна вещь эти игры объединяет - глючность, плавно переходящая в абсолютную неиграбельность. Ну ладно, хватит отрицательных эмоций, вернемся к нашим ботам.

Приведу несколько картинок.



Figure 1. Это одна из моделей ботов, смело шагающая по воде


Figure 2. А это астронавт в тумане. Ближе к нему лучше не подходить - выглядит не очень.


Figure 3. Процесс конверсии Titanium'а, на заднем плане стреляющий бот на гусеницах.


Figure 4. Батальная сцена с участием оборонительных сооружений, ботов, пауков и муравьев. Ох, не выжить базе без толкового программиста.


Figure 5. Сцена воздушного боя.


Figure 6. Окно редактирования программы (заметьте, есть синтаксическая подсветка).

Мне кажется, что Colobot добавил еще одну нишу на восточном базаре компьютерных игр. Очень надеюсь, что этот жанр будет развиваться и дальше. По крайней мере, наборы скриптов и миссий для Colobot уже появились.

В заключение хотелось бы упомянуть еще одну деталь: помимо лицензий на копию, на сайте производителя предлагается вариант site license для образовательных учреждений, что еще раз говорит, что мы имеем дело не с простой игрушкой.





Оригинал материала: https://3dnews.ru/184172