King's Bounty III: расширенный римейк DOS-игры в браузере

genes1s.net — Механика игры в основных чертах повторяет механику оригинальной игры — формулы атаки, магии и т.д. полностью соответствуют оригиналу. Также из оригинальной игры взяты графика (дополнена небольшим количеством новых объектов) и карта первого материка (с минимальными изменениями). Сюжет заметно расширен, материков не 4, а 5, при этом вторая карта имеет больший, чем в оригинальной игре, размер. Добавлены разного рода шуточки, секреты, новые повороты сюжета.
Новости, Игры | oulenspiegel 16:53 12.09.2015
39 комментариев | 81 за, 0 против |
#1 | 17:15 12.09.2015 | Кому: Всем
прикольно, вот бы только поле зрения расширили.
#2 | 17:17 12.09.2015 | Кому: Всем
Вотт это круто!!!111!
Еще бы и Герои первые в браузере можно было запускать.
#3 | 17:26 12.09.2015 | Кому: nikopol
Сделал как в оригинальной игре. Можно просто увеличить масштаб в браузере, если мелко.
#4 | 17:27 12.09.2015 | Кому: Hrtorika
В принципе, если найдутся энтузиасты, переписать их под браузер довольно просто)
У меня на KB ушло примерно полтора месяца работы вечерами.
#5 | 17:40 12.09.2015 | Кому: oulenspiegel
> Сделал как в оригинальной игре. Можно просто увеличить масштаб в браузере, если мелко.

ну я про то чтобы видимость карты размер увеличить
#6 | 17:44 12.09.2015 | Кому: nikopol
Тогда пришлось бы слишком радикально переделывать логику оригинальной игры, чего я не хотел.
#7 | 17:46 12.09.2015 | Кому: oulenspiegel
> Тогда пришлось бы слишком радикально переделывать логику оригинальной игры, чего я не хотел.

ясно, крутую вещь сделал!!!
#8 | 17:48 12.09.2015 | Кому: Всем
Ты что со мной сделал!!!??? Я завис, залип и потерялся!!! Где мои 20 лет? А, вот они. Нашёл. :-)
#9 | 17:53 12.09.2015 | Кому: oulenspiegel
> Тогда пришлось бы слишком радикально переделывать логику оригинальной игры, чего я не хотел.

Это ты сделал????
Если так, то моё тебе почтение.
Ты знаешь толк в олдскуле.
#10 | 18:06 12.09.2015 | Кому: Exfo
Да, я) Вот тут короткий отчёт:[censored]
Спасибо)
#11 | 18:09 12.09.2015 | Кому: Всем
А, важный момент, из недокументированных функций управления. Плюс и минус на клавиатуре служат для включения и отключения музыки и звуковых эффектов.
#12 | 18:17 12.09.2015 | Кому: Всем
вот это да. спасибо автору. возникли вопросы: боссы теперь раскиданы рандомно по континентам? просто раньше на 1 были слабыЕ, теперь те, что раньше на 3-4 зависали.
#13 | 18:17 12.09.2015 | Кому: oulenspiegel
> Вот тут короткий отчёт

Страница не найдена.
Но ты всё равно крут.
#14 | 18:19 12.09.2015 | Кому: oulenspiegel
> Вот тут короткий отчёт:[censored]

404
Как они сами любят подобные ярлычки и группы в соц.медиях, typical habr.
#15 | 18:24 12.09.2015 | Кому: Чингачгук
Ну раз не видно снаружи, тогда вот:

Предпосылки и философские размышления

Как и у многих моих коллег по программистскому цеху, особенно у тех, кто рано начал пробовать свои силы в области компьютерных технологий, у меня где-то на задворках сознания хранится набор самых тёплых и романтических воспоминаний о первых опытах. Когда-то, в далёком 1987 году, отец впервые взял меня в выходной к себе на работу, где торжественно усадил на стул перед гудящей «Искрой-1030-11». Примерно тогда я твёрдо понял, чем хочу заниматься в своей дальнейшей жизни.

В наши дни, запустив DOSBox, можно без особого труда окунуться в аромат беззаботного детства, вспомнить то прекрасное ощущение детского всемогущества, головокружительного интереса, волнующих новых знаний и умений. Сейчас мне 34, под моим началом работает больше сотни человек, я по-прежнему пишу достаточно много кода — особенно там, где требуется применение сложных алгоритмов для интеллектуальной обработки данных. Позади — в арсенале студенческих достижений — финал ACM'овской олимпиады, победы моего шахматного движка в ex-USSR-чемпионатах, один из алгоритмов на поисковых деревьях, названный моим именем, сотни тысяч строк моего кода в проде, но ничто не приносит такой радости и не вдохновляет так, как возврат в беззаботный мир детства.

Лет 10 назад мне в руки попал эмулятор БК-0010-01 — моего первого домашнего компьютера. Тогда стоило огромного труда не начать программировать под него. Однако в этот раз очередная волна ностальгии всё-таки сподвигла меня на весьма бессмысленный шаг, оправданием которому может стать разве что то чувство эмоционального подъёма, которое я испытал, завершив своё безумное предприятие — изготовление римейка/сиквела King's Bounty — древнего прародителя всех игр линейки Heroes of Might & Magic.

В общем-то, это секрет Полишинеля, что время программистов-одиночек прошло. Герои-одиночки остались в 90-х, когда в условиях отсутствия Интернета и большого объёма специализированной литературы, а также в атмосфере нехватки вычислительных ресурсов, очередной левша ловко выкраивал в короткие сроки 7 шапок из шкуры неубитого медведя. Сегодня труд программистов в большинстве случаев коллективный, и успех разработчика в куда большей мере зависит не от алгоритмических знаний и технологических умений, а от способности быстро найти необходимую информацию и коммуникационных скиллов (в т.ч. способности писать хорошо читаемый код соответствующий заданным требованиям).

В целом ситуация, когда один человек сегодня пишет игру от начала до конца (включая разработку сюжета, логики игровых взаимодействий, создание графики, подбор музыки, написание игровых диалогов, непосредственный кодинг) — для современной индустрии совершенно ненормальная. Сапоги должен тачать сапожник, а пироги печь — пирожник, в противном случае производительность труда будет не самой высокой. Но на другой чаше весов лежит высокий уровень мотивации, который в ряде случаев позволяет с лихвой компенсировать возникающие издержки. Развитие мобильных платформ и Web сделало возможным своеобразный флэшбек — в точном соответствие с законом отрицания отрицания — многие современные успешные игровые стартапы созданы либо одиночками, либо микрокомандами, которые демонстрируют удивительные успехи благодаря неотчуждённому труду.

Конечно, в моём случае проект чисто развлекательный — нет никаких идей по поводу монетизации, да и в случае подобного «подпольного» римейка она вообще вряд ли возможна. Задача сильно упрощалась тем, что львиная доля игровой графики и логики была позаимствована из оригинальной игры. В этом плане очень помог брошенный в настоящее время проект OpenKB (http://sourceforge.net/projects/openkb/), автор которого проделал большую работу по реконструкции оригинальной игровой логики и анализу форматов данных оригинальной игры. Мануалы, написанные автором этого проекта, а также несколько других любительских мануалов, найденных в сети, позволили серьёзно сэкономить силы.

Технологии

С самого начала была сделана ставка на кроссплатформенность, а поскольку в отношении Javascript и HTML5 таковая титаническими усилиями разработчиков к настоящему моменту более-менее достигнута, особой альтернативы при выборе языка разработки, в общем-то, не было.

Конечно, есть ряд языков транслируемых в JS и обладающих некоторыми преимуществами, но желания создавать лишний слой в небольшом проекте не возникло. Кроме того, в силу распространённости JS всегда можно рассчитывать на то, что любую задачу, которую потребуется решить в ходе работы над проектом, кто-то уже решил до тебя, великодушно предоставив фрагменты кода на всеобщее обозрение.

В силу сравнительной простоты игрового интерфейса оригинальной игры было принято решение отказаться от использования каких-либо тяжеловесных игровых фреймворков. Из библиотек использовалась только jQuery (в принципе, можно было бы обойтись и без неё — фактически понадобились только $.inArray, $.trim и работа с триггерами событий браузера; честно говоря, пугали возможные проблемы кроссбраузерности как раз в отношении событий, поэтому jQuery была всё-таки оставлена в проекте).

Графика и музыка реализовывались при помощи стандартных механизмов HTML5 (Canvas, Audio). Стандартных методов Canvas более чем достаточно для реализации спрайтовой графики с минимальными трудозатратами. Audio же предоставляет всё необходимое для снабжения игры звуковыми эффектами. Все требуемые сниппеты легко обнаруживаются на stackoverflow при помощи простых запросов, так что некоторого опыта практического программирования в современной экосистеме разработки вполне хватит для того, чтобы разобраться во всех технологических нюансах за один-два вечера.

Ход работы

Работа велась урывками в течение почти полутора месяцев. С самого начала я дал себе полушутливый зарок писать по 500 строк кода в день и первое время этот показатель даже удалось соблюдать. Конечно, когда дело дошло до готовности первой условно-функциональной версии, темпы заметно снизились, т.к. заметная часть времени стала уходить на исправление ошибок и мелкий рефакторинг уже написанного кода. Некоторые решения, принятые на скорую руку в первую неделю работы, не оправдали себя — в частности, по итогам пришлось написать мини-библиотеку для работы с диалогами, окнами и другими компонентами GUI, хотя сначала казалось, что можно обойтись в этом плане совсем малой кровью.

Отдельного внимания заслуживает работа над логикой сохранения в игре. Здесь я поддался ещё одной своей слабости — любви к алгоритмам сжатия данных, поэтому сэйвы пакуются при помощи встроенного алгоритма сжатия (словарный + LZW с динамическим битовым выравниванием). Прибегая к ретроспективной рационализации, оправдаю это желанием экономить место на мобильных устройствах (распакованный сэйв всё-таки тянет больше чем на сотню килобайт), а также стремлением хотя бы немного разнообразить жизнь читеров.

Графику из оригинальной игры я уже однажды добывал в конце 90-х, когда написал на C версию KB, включающую только бои (с расширенным набором магии и другими развлечениями). Правда старый код погиб вместе с умершим винтом ещё в 1999-м, но я примерно помнил что и где брать. Дополнения были дорисованы при помощи Pixlr и найденных в сети картинок, взятых за основу. Одну из картинок помогла обтравить моя невеста, так что строго говоря над игрой работал не только я.

Музыка — подборка подходящей по смыслу бесплатной классики из сети, звуковые эффекты — записи из оригинальной игры DOSBox -> Audacity, либо немного обработанные бесплатные сэмплы из[censored]

От половины до 3/4 времени занял кодинг — в полученном проекте немногим менее 12 000 строк (не считая jQuery) (380 килобайт скрипта). Остальное — написание игровых текстов (их, в отличие от оригинальной игры, заметно больше, кроме того игра двуязычная), а также тестирование.

Результат

Механика игры в основных чертах повторяет механику оригинальной игры — формулы атаки, магии и т.д. полностью соответствуют оригиналу. Также из оригинальной игры взяты графика (дополнена небольшим количеством новых объектов) и карта первого материка (с минимальными изменениями). Сюжет заметно расширен, материков не 4, а 5, при этом вторая карта имеет больший, чем в оригинальной игре, размер. Добавлены разного рода шуточки, секреты, новые повороты сюжета. Тестировалась всё хозяйство на Chrome, FF, Edge, IE, мобильной версии IE.

Буду благодарен за нахождение багов, советы по развитию проекта и вообще любые отзывы.
#16 | 18:33 12.09.2015 | Кому: oulenspiegel
> Ну раз не видно снаружи, тогда вот

Совсем другое дело! Круто!

> Оправдаю это желанием экономить место на мобильных устройствах


Вот тут не совсем понятно, т.е. играть предполагается и на мобильных устройствах? Но ведь клавиатура нужна?
#17 | 18:35 12.09.2015 | Кому: Чингачгук
Можно управлять кликами/тапом.
#18 | 18:44 12.09.2015 | Кому: oulenspiegel
> Да, я) Вот тут короткий отчёт:[censored]

А как насчёт перевести игру на русский язык?
#19 | 18:49 12.09.2015 | Кому: Кирилл Борисенко
> А как насчёт перевести игру на русский язык?

Так есть же русский.

> Буду благодарен за нахождение багов, советы по развитию проекта и вообще любые отзывы.


А куда писать-то?
#20 | 18:49 12.09.2015 | Кому: Кирилл Борисенко
Там есть русский — выбор языка в самом первом меню при запуске.
#21 | 18:50 12.09.2015 | Кому: Чингачгук
Можно прямо сюда) Можно на sergei.markoff (собака) gmail.com
#22 | 20:29 12.09.2015 | Кому: oulenspiegel
ошибку нашел: если в замке есть некий род войск, и я перемещаю в замок такой же род войск - они не складываются, перемещаемое число аннулируется :(
#23 | 20:35 12.09.2015 | Кому: Creator
Сейчас проверю.
#24 | 20:56 12.09.2015 | Кому: Creator
Починил, обнови страничку.
Только не забудь перед этих сохраниться)
#25 | 20:38 13.09.2015 | Кому: oulenspiegel
а ещё при брожении по третьему и туда дальше материку пропадают отдельные отряды из армии, что охуенно печалит :(
Возможно, это нормальное поведение - не читаю я еженедельных сводок)
#26 | 20:49 13.09.2015 | Кому: Creator
Это у тебя кончаются деньги на содержание отрядов, и они от тебя разбегаются. Не забывай, что в KB, в отличие от heroes, всем юнитам ты платишь зарплату.
#27 | 20:55 13.09.2015 | Кому: oulenspiegel
балин, точно
#28 | 17:24 14.09.2015 | Кому: oulenspiegel
А разве количество дней на решение задачи не должно зависеть от сложности?
#29 | 17:29 14.09.2015 | Кому: nichts
Кстати, да. Сейчас поправлю.
#30 | 17:38 14.09.2015 | Кому: nichts
Починено.
#31 | 19:29 14.09.2015 | Кому: Всем
В общем, народ, собираю идеи для аддона) Поскольку я всё равно сломал ногу и сижу дома.
Смотрите какие вводные:

1. В принципе, в игре есть редактор карт. Просто он вам недоступен. Можно его немного облагородить, сделать доступным и сделать возможность делать кастомные сценарии.
2. Можно добавить новых юнитов. Скажем, довольно просто сделать, например, заапгрейженные юниты путём перекраски и минимального редактирования существующих, т.к. хочется, чтобы не было диссонанса в стилистике старых и новых юнитов. Полноценный новый пикселарт я не потяну, скорее всего, разве что кто-нибудь поможет. В принципе, можно добавить артефактов без проблем, новую магию, какие-то спецэффекты.
3. Можно сделать мобильные версии. js/html5 легким движением руки при помощи trigger.io или phonegap превращается в нативное приложение под Android, яблофон и даже под Windows Phone и более редкие платформы.
4. Можно сделать какую-то серверную часть и хотя бы минимальное взаимодействие разных игроков: общая таблица рекордов, может быть даже какие-нибудь в перспективе соревнования или дуэли на одной карте :)
5. Можно просто сделать продолжение, добавив ещё несколько штучек типа того же Коннора Варвара, каких-то заданий на карте и т.п. — в принципе, развивать в ту сторону, в которую развивает Nival свои современные римейки.

Что думаете?
#32 | 15:29 17.09.2015 | Кому: oulenspiegel
> один из алгоритмов на поисковых деревьях, названный моим именем,

> Можно на sergei.markoff (собака) gmail.com


Так это твои алгоритмы я в ВУЗе изучал !!!
#33 | 15:32 17.09.2015 | Кому: OctopusVulgaris
Не думаю) Мой алгоритм используется в очень узкой области — поисковых деревьях для шахматных программ. А в институте, скорее всего, тебе преподавали марковские цепи и марковские процессы, которые разработал мой очень-очень дальний родственник.
#34 | 15:33 17.09.2015 | Кому: oulenspiegel
> В общем, народ, собираю идеи для аддона) Поскольку я всё равно сломал ногу и сижу дома.

Идея отличная, вот только как бы не получился клон Героев.

Есть предложение - высказаться всем, кому чего не хватает в Героях и попытаться реализовать.

Эх, где мои годы студенческие - писал в том числе и игрухи на БК-0010.
#35 | 15:34 17.09.2015 | Кому: oulenspiegel
> Не думаю) Мой алгоритм используется в очень узкой области — поисковых деревьях для шахматных программ. А в институте, скорее всего, тебе преподавали марковские цепи и марковские процессы, которые разработал мой очень-очень дальний родственник.

Шутю я, не зря три ВСК поставил. Тот Марков лет 60 назад это все придумал.
#36 | 16:02 17.09.2015 | Кому: OctopusVulgaris
Уже больше ста лет назад) Ключевая работа была им написана в 1906 году.
#37 | 04:58 18.09.2015 | Кому: oulenspiegel
> Уже больше ста лет назад) Ключевая работа была им написана в 1906 году.

Вот те самые алгоритмы, которые нам преподавали - говорили, что в 40-х годах он разработал. Хотя хрен его знает, может я и не помню уже, столько лет прошло.
#38 | 11:32 18.09.2015 | Кому: OctopusVulgaris
Тогда это уже Марков Андрей Андреевич (младший). Он руководил лабораторией математической логики и структуры машин в Вычислительном Центре АН СССР.
#39 | 21:50 11.11.2015 | Кому: oulenspiegel
Камрад, спасибо за отличный заполнитель внезапной бессонницы и поездок в метро.
Однако, есть наблюдение: на виндофоне (WP 8.1 Lumia 1520, IE) сохранение не работает. Т.е. кнопка "Сохранить" не ругается, но и найти сейв нигде нельзя потом.
А так все супер!
Из идей аддона разве первый Jagged Alliance в голову приходит. Но это совсем другая история.
Надеюсь, твой больничный не затянулся. Здоровья и ещё раз благодарствую.
Войдите или зарегистрируйтесь чтобы писать комментарии.