Инди
Bornozaver
613

Прототип игры три-в-ряд с сюжетом для инди-джема

Вот и подходит к концу инди-джем. Тут вас ждут несколько слов про процесс разработки, будущие идеи и ссылка на прототип.

В закладки

Как не надо делать игры

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

Мобильная платформа Android как безальтернативный выбор. У нас нет техники от Apple, и тем более лицензии разработчика для релиза в AppStore.

Неожиданным плюсом оказался C #, на котором пишутся скрипты. «Шарп» я изучал лет 12 назад, но знакомый «сишный» синтаксис позволил поскорее переходить к делу.

Первой ошибкой стала именно спешка. Потому что я не стал изучать важные особенности Unity, тонкости языка программирования, сейчас многие моменты потребуется переписывать и переделывать почти с нуля. К счастью или нет, прототип удалось заставить работать, пускай и с заметкой: «переделать все, когда будет время».

Даже если очень нужно что-то реализовать, не стоит сразу копировать чужое решение. Как минимум лучше изучить принцип работы предложенного метода. Моей второй ошибкой стало игнорирование этого правила.

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

Эти ошибки, плюс ноль опыта, и породили такой кривой прототип, которому только предстоит стать игрой.

Вот он, во всей красе.

А позитивный опыт то есть?

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

Скажу избитую, но актуальную фразу. Если у вас есть идеи, не бойтесь программирования и трудностей, просто попробуйте. Если не пойдет – поищите инструмент для создания игр без кода, такие есть. Но если зашло – поздравляю, одним хобби стало больше (а то и специальностью).

Планы на дальнейшее развитие

Пока реализовали только основную механику и пару противников. Много не успели, а что есть работает кривовато. Будем исправлять. Еще игра получила предварительное название Warrior Seeker.

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

Самое главное, что не успели сделать в прототипе: выдадим герою оружие и инвентарь для его менеджмента. По сюжету персонаж в крутой автономной чародейской броне (привет космодесантникам из Warhammer 40 000), потому ничего кроме пушек ему не надо.

Наброски положения рук для стойки с мечом.

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

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

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

Ниже ссылка на прототип.

Материал опубликован пользователем.
Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

Написать
{ "author_name": "Bornozaver", "author_type": "self", "tags": ["\u0438\u043d\u0434\u0438\u0434\u0436\u0435\u043c","indiejam"], "comments": 4, "likes": 10, "favorites": 6, "is_advertisement": false, "subsite_label": "indie", "id": 57733, "is_wide": false, "is_ugc": true, "date": "Sat, 06 Jul 2019 22:29:37 +0300", "is_special": false }
(function(d, w) { var wrapper = d.getElementById('apost-tsr'), isMobile = w.matchMedia('(max-width: 400px)').matches, isArticle = wrapper.classList.contains('in-article'), gif = d.createElement('img'); gif.onload = function() { wrapper.classList.add('is-loaded'); }; gif.src = (isArticle) ? 'https://leonardo.osnova.io/b2b69d93-806a-d2f2-4697-577683765baa/' : (isMobile) ? 'https://leonardo.osnova.io/82f3c702-be47-2c95-ed12-15741ca2f2e9/' : 'https://leonardo.osnova.io/5121d3f7-d8f5-4cf1-7b61-a184c726c32f/'; }(document, window));
0
{ "id": 57733, "author_id": 147143, "diff_limit": 1000, "urls": {"diff":"\/comments\/57733\/get","add":"\/comments\/57733\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/57733"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 64960, "last_count_and_date": null }
4 комментария
Популярные
По порядку
0

из-за душной программы

Что означает эта фраза? Часто встречаю слово "душный" в различном контексте, но, так понимаю, чуть менее, чем все употребляют это в разных значениях. Так для себя и не понял, что сие значит.

Ответить
1

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

Ответить
0

Понятно, спасибо

Ответить
0

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

Ответить

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fizc" } } }, { "id": 4, "label": "Article Branding", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "cfovz", "p2": "glug" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-250597-0", "render_to": "inpage_VI-250597-0-1134314964", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=clmf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Баннер в ленте на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudo", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "chvjx", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvc" } } }, { "id": 20, "label": "Кнопка в сайдбаре", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "chfbl", "p2": "gnwc" } } } ]