Улучшения эффектов уничтожения механоидов
Убиение врагов стало радовать чутка больше :)
Банальный звук взрыва делать не стал, "рассыпание чего-то металлического в хлам" подходит лучше по-мойму. Посмотрю на это несколько дней, поровняю ещё...
Убиение врагов стало радовать чутка больше :)
Банальный звук взрыва делать не стал, "рассыпание чего-то металлического в хлам" подходит лучше по-мойму. Посмотрю на это несколько дней, поровняю ещё...
Окончательно разведены потоки движка.
Исправлены последние редкие ctd при очистке мусора (наконец-то)
Добавлена обработка клавиш в первом приближении.
Все еще до конца не перешел из состояния "втупляю" в состояние "поперло", но через полторы недели отпуск, там разгонюсь.
Система обработки клавиш на данный момент использует калбаки glfw с дополнительной оберткой в виде темплейтов биндов - для создания класса с привязкой к конфигу и системой делегатов для получения вызовов по по событию (на данный момент OnPress и OnRelease).
Выглядит это следующим образом:
Оглашается раскрытие темплейта и вызов его статичного метода для регистрации в системе обработки ввода.
Бинд привязывается к текстовой метке UserSettings конфига
А дальше, где-нибудь в коде на один (или сразу на все) делегаты вешается нужный метод
При этом в лог будет записано страшное, ибо я не придумал ничего умнее, чем связать бинд с конфигом через систему Property (т.е. сейчас каждый бинд это полновесный метакласс фреймворка):
Глубоко прорабатывать систему пока не буду - нет необходимости. Добавлю обработку для мыши, чтобы все таки можно было камерой гулять, и продолжу со светом.
День 3 съёмок нашего семейного блокбастера – в прошлый раз мы научили героя создавать магические печати, а сегодня проверяем, умеет ли он отправлять их точно в цель 🪄
Кажется, мы наконец-то поняли, зачем нужны эти печати.
SUCCESS — магия отправляется в цель.
FAIL — магия не отправляется.
А дальше мы просто начали нажимать всё быстрее и быстрее. 😄
SUCCESS, SUCCESS, SUCCESS…
FAIL, FAIL, FAIL…
Проверяем, насколько хорошо печать успевает отрабатывать, когда игрок не церемонится.
Пока тренируемся на манекене.
Но, кажется, скоро ему станет не до тренировок. 😏
Это уже пиксельная версия текущей сборки — 360 px. Поэтому при масштабировании на экране картинка может выглядеть немного мягче, чем в исходнике.
Переместились на съёмочную площадку. 🎬
У печати, оказывается, целых три варианта:
🟢 SUCCESS — зелёная улетает вверх.
🔴 FAIL — красная схлопывается в персонажа.
⚪ CANCEL — просто исчезает.
Последнее вы уже видели в M&D #1. 😉
Длиннопост
Предыстория:
Решил я вернуться к мечте юности и погрузиться в геймдев. Много раз до этого пробовал разные идеи и разные подходы, но до сих пор не удавалось довести даже до стадии рабочего прототипа.
В этот раз я поставил себе цель именно выпустить игру. Т.е. пройти полный путь от идеи до выхода на торговые площадки.
Постарался придумать максимально простой проект для этой цели и взялся за его реализацию. И даже не смотря на видимую "ультимативную простоту" проект растянулся с запланированных 2-3 до 9 месяцев на данный момент.
История:
В далеком не то 1991, не то 1993 году существовала обучающая среда разработки/графический исполнитель "Кенгуренок (ROO)"
Идея сделать его осовремененную версию мне показалась довольно простой в реализации. Поэтому, не имея глубоких познаний в разработке и геймдизайне в целом, мной было принято решение учиться в бою.
Я пожалуй опущу длинную историю о том, сколько и каких конкретно шишек было набито в процессе и как я три раза переписывал компилятор. Если эти подробности интересны - пишите в комментариях, постараюсь рассказать в отдельных постах.
Что получилось:
(я намешаю старые и новые скриншоты, проект успевает изменяться быстрее, чем я их делаю)
Используется Си-подобный язык программирования, упор сделан на процедурное программирование.
Основные команды управления кенгуренком: шаг, прыжок, поворот и смена цвета (если игрок подобрал их несколько)
Реализованы типы данных int (целочисленный) и bool (логический) а так же все стандартные математический операторы +, -, *, /, %, унарные операторы ++, --, операторы присваивания +=, -=, *=, /=, %=, логические операторы !, ==, !=, &&, ||, if-else, циклы while, for, команды управления циклами continue, break.... Может быть что-то ещё, но вообще всё во встроенном учебнике описано.
Добавлен встроенный учебник и некая система последовательного открытия контента.
По мере прохождения открывается больше статей в учебнике и более сложные уровни.
Предусмотрены размеры поля 8x8, 16x16, 32x32 и 64x64 клетки.
Так же я предусмотрел механизм локализации на любые языки. Достаточно будет создать каталог под новую локализацию (назвать соответственно языковым стандартам), скопировать в него все файлы из соседней локализации и перевести их на нужный язык. На этапе разработки поддерживаю только русский и английский языки.
Дополнительно:
Короткое описание игры на моем сайте: https://in-term.ru/portfolio/dev/roocoder (раз уж пост пилю, пусть и ссылка на меня будет)
Steam - пока отсутствует. Я в процессе разбирательства, как сейчас лучше на нем регистрироваться разработчику из России. Как разберусь со стимом, возьмусь за остальные площадки. Хочу выложить везде, куда дотянусь, куда сил хватит.
(кстати если кто-то имеет опыт выпуска игр в текущее время - буду благодарен за информацию о подводных камнях на любых площадках)
Игра будет бесплатной. Но возможно я добавлю пустое DLC "сказать спасибо"
P.S. Чукча не писатель.
P.P.S. Но рассказывать о своей работе миру как-то нужно, поэтому начинаю с поста на пикабу.
Всегда любил симуляторы с упором на экономику. Симсити, цивила, карьера менеджера в фифе, ММО-шки различные, да даже Царь горы в Арме. Ну люблю, че поделать. Поэтому и в своей игре решил сделать такую механику. А получилось ли?
Идея была такова - мы торгуем с 5 фракциями, которые воюют друг с другом. От каждой фракции есть торговец, который может предложить Trade Offer. Ну бартер, грубо говоря. Каждая сделка с торговцем меняет баланс военной мощи этой фракции в войне. Обменял товар на золото - считай поставка, военная мощь фракции ползет вверх. Купил товар за золото, значит ослабил материальное присутствие на поле боя. В этот же момент мощь истинного соперника, одного из оставшихся 4-х, двигается ровно противоположно. Вроде пока что ничего интересного. Но!
Есть же еще и система репутации у фракции. Чем выше она - тем больше различных офферов нам становится доступно. И репутация тоже движется соответственно - повышаешь у одной фракции, понижается у другой, следовательно количество офферов у последней фракции уменьшается. Вот тут уже становится немного интереснее, да?
И тут в дело вступает крафт и зачарование - помимо обычных офферов от фракционных торговцев, есть возможность крафтить вещи и продавать их напрямую. Смысл от этой продажи, на первый взгляд - золото, чтобы продолжить торговлю. Но не только для этого. Мы можем зачаровать меч на + и продать фракции, тем самым увеличив их военную мощь. Или. Или зачаровать на - , тогда мощь упадет. То есть это наш инструмент влияния на общий ход войны.
Получается что мы эдакий мускулистый торговый мостик, лавирующий среди 5 фракций (есть еще деревенские торговцы, которые торгуют предметами для крафта и офферов, но торговля с ними не влияет на войну).
Профит от увеличения военной мощи одной из фракций - а его нет. Если фракция начинает побеждать в войне, цены на товары растут, некоторые вообще исчезают. Да даже торговец одной из фракции может вообще пропасть из деревни. Вот и будем пытаться усидеть сразу на пяти стульях, да и не остаться с голой задничкой и гейм овером.
Вот так примерно выглядит экономическое ядро моей игры. Что думаете?
Я фронтэнд разработчик по профессии, в IT уже 8+ лет. Разработкой игр начал заниматься не более года назад.
Выбрал godot, потому что не так давно делал для себя и компании аналог тетрис плюс (игра на ps1), в котором был pvp режим но только 1х1, после некоторого количества вечеров где 2 человека играют, а остальные ждут своей очереди решил что надо сделать свою версию где можно играть сразу хоть в 8м, буквально за пару-тройку недель сделал играбельную версию, после нескольких тестовых игр и правок после них, была готова полностью играбельная версия.
Если будет кому интересно могу рассказать о нём подробнее
Процесс очень понравился и решил сделать чтото посложнее. Так как я большой поклонник RTS и PVP-состовляющей, решил что делать просто RTS смысла нет, их можно без труда найти, тем более что C&C generals для нашей компании сложно чемто перебить и поэтому от RTS в игру добавил только элементы строительства, сделав основным геймплеем экшн-шутер.
Игра вдохновленная старыми RTS играми и экшн шутерами времен PS1.
Хочется сделать относительно простую, но затягивающую PVP игрушку для компании, в будущем планируется приобрести полноценный dedicated-сервер для игры онлайн, сейчас уже есть статический IP и серверная часть стоит на старом пк дома
Работу над проектом веду один, на данный момент сделана база игры, механики стрельбы, строительства, управления, урона и пр., недавно добавил обучение и несколько уровней для pve-компании с целью раздачи игры для оффлайн тестов
Сейчас по большей части нужны тесты для настроки баланса, критические баги уже устранены.
Скачать игру и попробовать оффлайн режимы можно тут: https://boosty.to/us_inc
Если когото заинтересует, приглашаю на онлайн тесты вместе со мной.
Привет, для ЛЛ : я сделал игру, раздаю её бесплатно на itch.io , скачивать не нужно, она есть в и в web версии. Прошу взглянуть и высказать своё фу проекту, а то и похвалить (да ладно, я знаю, что ни кто хвалить не будет).
Подробнее.
Привет меня зовут Антон, мне 48 и я 30 лет тружусь в ИТ сфере (да, я начал заниматься этим когда это ещё не было мейнстримом).
Занимался всем, от ремонта ПК и сисадминства до ИТ безопасности и руководства ИТ отделом, но последние лет 7 работаю разрабом на Qt\c++. Однако истиной моей мечтой всегда было делать игры. Сейчас, когда моя жизнь стала поспокойнее, я решил реализовать свою мечту. И пусть я даже ничего с этого не заработаю, но хоть получу удовольствие от процесса.
Итак что я имел для реализации год назад:
Стабильную работу, чтобы не думать о мелких расходах
Небольшие знания программирования
Желание сделать хотя бы простую игру, а в идеале игру своей мечты
Не малейшего представления о том, как всё эти игры делают
За год я изучил какие есть движки, какие языки в них можно использовать, попытался их освоить, написал себе диздок и лор будущей игры аж на 83 страницы, нагеренировал к ней кучу артов, попытался научиться рисовать 2D и 3D, понял что художник их меня еще хуже чем программист, отчаялся и забил на Unreal Engine и игрострой в целом, стер все свои наработки в акте отчаянья, одумался и восстановил их из копии, а месяц назад начал писать маленькую, но работающую игру на Godot вместо огромной игры своей мечты на Unreal.
Итак что за проект и как я его делал:
Сам проект называется Core Burrow, название ничего не значит и по сути просто выбрано случайно, чтобы не быть похожим на остальные бесчисленные игры, выходящие тысячами каждый день.
Итак, в чем идея игры. Так как я застал эпоху Commodore 64 и Atari то решил начать с малого и отдать дань уважения играм эпохи 80х. Игра в целом навеяна такими шедеврами той эпохи как Boulder Dash и The Adventures of Robbo и что греха таить - при разработке я вначале пытался копировать их стиль и механики. Но на самом деле получилось не плохо, через какое-то время пришла идея добавить в игру немного лора и хорора (для таинственности) и ряд других механник.
В целом Core Burrow это смесь того самого Boulder Dash и The Adventures of Robbo с добавлением большого числа текстовых сообщений для погружения в лор. В игре есть камни которые могут упасть на голову, стреляющие пушки, алмазы которые надо собирать (спойлер - на самом деле это кристаллы памяти сумасшедшего суперкомпьютера ) и многое другое.
И есть герой, вот такой забавный робот – «Разведчик 'SUB-ROBOT 04'». За него и играем.
Слабой стороной игры я считаю её лабиринты. Откровенно говоря, можно и лучше – больше и масштабнее, хотя для первой игры сойдет, их всегда можно переделать.
Процесс разработки. Собственно, на Godot и его GDScript я вначале смотрел с недоверием. В конце концов ни где кроме Godot эта технология не встречается. Был большой соблазн писать на C#, но как выяснилась сборка на C# не работает в WEB, так что я отбросил лишнюю гордость и полез в документацию Godot. Оказалось, что не так страшен черт, как его малюют. Самое сложно там это не сам язык, он проще Python. Страшно обилие строенных классов и их методов, вот от них действительно разбегаются глаза. Особенно если не знать, для чего они. После системного программирования и GUI на Qt многие вещи казались мне тут не совсем очевидными. Не смейтесь, но на помощь пришел ИИ, оказывается с его помощью можно не только сочинять глупые рассказы и рисовать мемы, но и не плохо обучаться незнакомым языкам программирования.
За пару дней я узнал, что есть в Godot в целом (ну или большую часть) и много нового об игровых технологиях и алгоритмах. Это дало мне понимание почему в игровых движках всё работает именно так, а не иначе. Блин, великая вещь нейронки.
Смешно, но такие вещи как цикл программы или сигналы были мне хорошо знакомы по Qt. А вот тайлы это что-то новое. Должен заметить, что работа с тайлами в Godot это настоящее искусство, мне показалось, что движок специально под них заточен. Не думаю, что нужно делать урок по тайлам, их полно в интернете, но не отметить их прекрасную работу в Godot было просто невозможно.
Первую неделю я делал только игровые механики: ловушки, игрока, окружение. Оказалось, что это самая быстрая часть, гораздо больше времени отнял простой GUI и локализация на английский, хотя кода там было в разы меньше.
При том что механик было сделано не мало. Падающие камни и земля как в Boulder Dash, бомбы и пушки с автострельбой как в The Adventures of Robbo, разноцветные двери и разноцветные ключи к ним, телепорты, заброшенные сервера для чтения лора и главное игрок, который со всем этим взаимодействовал. Всё это позволяет создавать действительно сложные лабиринты.
Сами лабиринты я рисовал в прямо в TileMapLayer с помощью встроенных в редактор средств, так что остро стоял вопрос как заставить камни падать, а бомбы взрываться. Вопрос решился просто, камни, бомбы и другие интерактивные элементы заменялись на сцены Area2D прямо при старте лабиринта. А замену выполняет … скрипт игрока. Каждый раз на новой сцене у него отрабатывает void _ready(): так что там вызывается метод для обхода всех тайлов на уровне и замены некоторых их на сцену bomb или rock . И нет, заменяются не все тайлы, в этом просто нет необходимости. На самом деле у падающих камней и бомб нет физики, они проверяют соседний тайл и если там пустота начинают проигрывать анимацию падения (перемещения на соседнюю клетку - twin) и по прошествии анимации мгновенно перемещаются на нужную позицию. Если там в этот момент игрок – ему сразу хана, если и под этой клеткой ничего нет, то продолжаем падение.
Так что никакой перегруженности лишними вычислениями – CPU по возможности отдыхает.
А чтобы все это красиво смотрелась на многие тайлы наложен шейдер, который так же не загружает CPU (только GPU – но этот пусть работает) .
Итак в результате получилась гремучая смесь из кое-как нарисованной мной векторной графики, музыки с Suno (вот только не надо смеяться и показывать пальцем, кто тут из нас композитор? ) звуков со стоков и моего говнокода (опять же кое где его помогал писать бесплатный Gemini ибо в шейдерах я не смыслю).
К своему удивлению я так же узнал что у itch.io есть образ для сборки проектов на Godot, но нет никакого api для создания ачивок. Если первое очень обрадовало, так как сразу удалось настроить полноценный CI/CD на GitLab (делаю git push и игра обновлена), то второе откровенно расстроило – ачивки нужны, раз уж я делаю свой минимальный работающий продукт.
Вопрос был решен радикально – своя система ачивок. Ну да, это не настоящие ачивки, это их имитация. Просто GUI сделан так, что при достижении определенных результатов появляется всплывающее окно похожее на получение ачивки и программа ведет учет получения этих ачивок в специальном скрытом файле. Вы получаете псевдо ачивки и можете их увидеть в соответствующем меню игры
И коллекция ваших достижений))
Там же можно сбросить свои ачивки (технически вы просто очистите файл системного сохранения) и получить их заново.
Так как игра во многом является оммажем старым играм, я реализовал демонстрацию игрового процесса, то что в старых играх называлось Attract Mode. На него можно посмотреть на самой первой сцене при просмотре стартового меню. Робот будет имитировать хождение по карте и пытаться что-то делать. На самом деле все его движения четко запрограммированы, если присмотреться, то можно увидеть, как он ходит по одному и тому же маршруту. Как говориться мелочь, а приятно.
Чтобы не растягивать статью, пожалуй, подведу небольшой итог.
Что сделано:
готов минимальный продукт – в игру можно играть, её можно пройти.
Реализованы все механики (хотя можно и расширить их список)
Сделано 20 уровней
Сделаны кат сцены начала игры и победы
В конце игры можно увидеть статистику – ничего особенного, просто сколько раз вас убило током, сколько собрали кристаллов итд
Все красиво свистит и пердит
Я придумал свою систему ачивок не привязанную не к одному API
Настроен CI/CD для itch.io
Черт, я узнал много нового, воистину - век живи век учись.
Что можно улучшить:
Расширить количество получаемых ачивок, раз есть такая система, то можно и её расширить. Спойлер: уже нарисовал 6 новых иконок для новых достижений.
Надо сделать редактор уровней, как в старом Lode Runner или Mario Forever. Пусть кому хочется рисует свои лабиринты.
Графика и код, мне есть куда расти. Доделаю этот проект, переделаю брошенные проекты (сейчас их два) и напишу такую крутую игру чтобы все сказали вау.
Короче, приглашаю всех посмотреть мой проект тут https://greatskydrake.itch.io/core-burrow
Если зайдет хоть одному человеку я старался не зря.
