Разработка игры HexFrontier

Небольшое вступление обо мне. Всем привет. Меня зовут Дима, а в сети я известен как xverizex. Я разработчик софта на C/C++. Впервые я связался с компьютером в 2000 годы, но то был не мой компьютер и я уже хотел программировать. Жаль не знал в то время, что был zx spectrum. Шло время и в 16 лет мне купили компьютер. Тогда я начал играть в игры и немного изучать программирование. Потом пришлось работать и я забросил развитие в IT сфере. После 2012 года начал изучать C и так как мне нравился Linux, то писал под Linux. Мне нравятся Языки, близкие к системному уровню. Также очень люблю ассемблер.

Так как я люблю писать на вышеназванных языках, то мне unity не зашёл вообще никак. Мне хотелось понимать, что я владею всей информацией о том как работает игра. Сначала, я писал на sdl1.2, потом на sdl2. Позже научился писать на opengl и так развивался. Да, использование sdl2 как прослойки очень помогало мне сначала не вникать в одни тонкости, пока я изучаю другие. Сейчас я могу взяться и написать свою прослойку, но всё же оставлю эту работу для разработчиков sdl2, так как они выпускают этот продукт бесплатно. Бесплатно - это то, что я ищу, когда использую что-то в своих играх. Если рисовать, то сам, если писать музыку, то сам. Я познакомился с замечательной программой для создания музыки MuseScore. Но для такой игры, которую я сделал сейчас, такую музыку я не хотел бы использовать, а FL STUDIO пока под санкциями и невозможно купить этот продукт. Бесплатные звуки и музыку не хочу использовать, я люблю делать всё сам и из-за этого иногда слышу хейты в свою сторону о том, что мол плохо рисую или музыка это набор звуков. Со временем я всему научусь и буду гуру разработки, тогда как остальные будут использовать готовые ассеты из unity store и всех будут игры по моделям похоже друг на друга.

Я подписан на одну группу стримера разработчика игр по unity. Он выкладывает новости о своей жизни. Как-то раз появилась новость, где требовался разработчик игр (к моему сожалению, сейчас все на unity пилят), и была там интересная игра про киберпанк. Вся сцена игры была на гексагональных тайлах. Я посмотрел игру и у меня появилась идея сделать подобную. Только мне ничего не приходило в голову, только идеи этого гейм дизайнера, который их до этого уже озвучивал. Тогда я решил взять тетрадку и получилось набросать много идей что может быть в игре. Она уже отличалась от той, что было у того геймдизайнера. Первый вариант игры был такой. Мы выбираем хакеров с нужными способностями.

выбор хакеров
выбор хакеров

Я хотел создать такую игру, где ты управляешь командой и взламываешь, но в попытке обдумать игру, я понимать, что она не играбельна. Были не те идеи, которые могли бы выстроить интересный геймплей. Время шло, я пока подзабил на эту игру.

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

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

Итак, была идея, я начал делать графику и сделал в pixel art поле для игры, хакера, ловушки, данные, систему защиты, это всё анимировалось и выглядело хорошо. Потом вспомнил совет из книги о том, что нужно поиграть в другие игры и посмотреть как они устроены. Так как я люблю такой жанр, то у меня уже в steam были куплены такие игры. Я открыл HexHacking Simulator и офигел от графики. Да, я люблю такой жанр, но заставить меня играть порой очень сложно. Это стало так после того, как я начал получать больше удовольствия от разработки программ. И поэтому я мог просто скупать все понравившиеся игры и играть потом, когда появиться вдохновение. Могло даже пройти несколько месяцев, прежде чем я возьмусь играть. Я даже в киберпанк 2077 поиграл только через год после покупки.

В общем я понял что нужно делать в векторной графике игру. Да, это определенно выглядело лучше.

Я когда мечтал о своей новой игре, я всегда хотел добавить в неё туториал, уж очень хотелось. И вот мой первый туториал выглядел как набор правил о том как играть в игру.

туториал, где рассказывается про ловушки
туториал, где рассказывается про ловушки

Мне нравиться linux like управление приложениями и я решил сделать выход из игры простым нажатием клавиши q. Это настолько удобно и практично, а всё потому, что в меню как такового ничего больше нет. Понимаю, если были бы настройки какие-нибудь, но их нет. Единственное что можно сделать в этой игре, если не хочется играть, так это выйти из неё. )

Я сделал в векторе тайлы и кстати в linux графика выглядит намного лучше, чем в windows. Не знаю что там с цветами, но в windows почти не видно задний фон, когда как в linux это отчётливо видно. Вот как выглядит карта без ничего.

карта игры
карта игры

Это офигенно. Я так впечатлился, что я смог такую красоту сделать. Да, может профессионал в рисовании или дизайне напишет, что мол здесь нет ничего сложного. Ну да, так и получилось, но у меня было несколько вариантов, этот получился самый лучший. Другие даже показывать не буду.

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

Каждый уровень я делал в сишной программе, в которой менял название файлов и набор байт. Это был бинарный формат для карт. После написал сборщик уровней и залил в игру. Сделал изменения в игре и начал проверять каждый уровень. Так я нашел несколько ошибок, где нельзя было пройти хакером через ловушки. Пришлось Hex редактором править байты в уровне и заново пересобирать. Работа интересная, кстати.

Раньше в движках я делал игры и файлы лежали просто как tile.texture, tile_floor.texture terminus.ttf. В этот раз я захотел написать упаковщик ресурсов и сделать хотелось бы это грамотно, чтобы было удобно упаковывать и использовать эти ресурсы при разработке игры.

Я сделал упаковщик. Ему требуется файл data.list и он выглядит вот так.

6 defender_system.texture 2 7 hacker.texture 2 8 input.texture 2 9 rect.frag 0 10 rect.vert 0 11 sprite.frag 0 12 sprite.vert 0 13 sprite_with_camera.frag 0 14 sprite_with_camera.vert 0 15 terminus.ttf 1

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

#ifndef RES_ENUM_H #define RES_ENUM_H enum { R_SHADERS, R_FONTS, R_TEXTURES, N_R }; enum { RES_RECT_FRAG, RES_RECT_VERT, RES_SPRITE_FRAG, RES_SPRITE_VERT, RES_SPRITE_WITH_CAMERA_FRAG, RES_SPRITE_WITH_CAMERA_VERT, RES_TEXT_FRAG, RES_TEXT_VERT, N_SHADER_RES };

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

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

Игра
Игра

Да кружочки может и не очень кому-то нравятся, но это очень интересный объект, не напрягающий. Я кстати подумываю сделать гексагоналы вместо кружков, но нужно посмотреть как это выглядит.

Я сначала не мог нормально ориентироваться с такими цветами, но потом пришло некоторое понимание где что может быть и всё равно сложно.

UI я не делал с помощью движка, я сделал также в векторе интерфейс и просто использую эти текстуры. Из-за этого размер каждой картинки в обучении занимает около 2 мб.

Да, я собираюсь и дальше делать игры на своём движке и мне нравиться сам процесс творчества, как ты делаешь движок, рисуешь, пишешь музыку. Это всё очень круто, когда полно свободного времени. Жаль не у каждого есть такая возможность, да и кто знает, как человек в такой ситуации, которой оказался я, как бы он жил. Гулял бы, развлекался или занялся бы самообразованием и развивался до небес.

Желаю, чтобы каждый нашёл то, что ему интересно.

Игра доступна в vkplay и в rustore.

1313
14 комментариев

Движкописательство как отдельная болезнь. Должна быть очень конкретная причина писать свой движок, если цель делать игру, а не движок.

1

Автор назвал причину - хочет сделать всё сам, а не пользоваться готовым. Насколько твоя игра является твоей, если ты просто собрал её в конструкторе движка из готовых ассетов?

1

Программист может ты и хороший, но писать тексты не твоё)
Ссылку бы оставил на игру то в конце.

Ссылку да можно было, но я позже отредактировал и просто написал где эта игра есть. Она есть на rustore и в vkplay. В vkplay есть версия демо и обычная игра платная.