Хорошая новость - игра прошла квалификацию на GDWC 2022 (The Game Development World Championship).
На данном этапе не бог весть что, однако дали персональую витрину, которую можно видеть в общем списке, а если фильтровать по тэгам, тонет не очень глубоко, вполне можно долистаться.
https://thegdwc.com/games/274c91d4-a5d0-4302-88b0-98e..
Стало быть, кто-то на игру посмотрит, как минимум, по долгу службы.
На данном этапе не бог весть что, однако дали персональую витрину, которую можно видеть в общем списке, а если фильтровать по тэгам, тонет не очень глубоко, вполне можно долистаться.
https://thegdwc.com/games/274c91d4-a5d0-4302-88b0-98e..
Стало быть, кто-то на игру посмотрит, как минимум, по долгу службы.
Thegdwc
Game Development World Championship 2022
The Game Development World Championship is an annual competition for indie game developers, game development students, and anyone interested in game development to join in.
А теперь я сделал торговлю. В рамках текущего проекта пристегнуть некуда, но зато готовый виджет есть, и полностью реализована механика, связаная с навыком торговли.
Пока итем лежит в инвентаре, интерфейс показывает базовую цену, отражающую объективную ценность предмета в игре. Она зависит от сложности, полезности или уникальности вещи. А когда итем выкладывается для обмена, начинается перерасчет, зависящий от соотношения навыков персонажа и торговца.
Пока итем лежит в инвентаре, интерфейс показывает базовую цену, отражающую объективную ценность предмета в игре. Она зависит от сложности, полезности или уникальности вещи. А когда итем выкладывается для обмена, начинается перерасчет, зависящий от соотношения навыков персонажа и торговца.
Как правило, навык торговца выше, потому его товар оказывается с наценкой, а товар пресонажа - со скидкой. Чем больше разница навыков - тем шире вилка между куплей и продажей.
В принципе, если навык персонажа окажется выше, появится возможность выгребать у торговца все свободные деньги за счет многократной перепродажи одного и того же.
Однако, с ростом навыка персонажа могут встречаться все более грамотные торговцы, а у тогровцев с низким навыком количество свободных денег будет не велико, так что безпредельной наживы не будет.
В принципе, если навык персонажа окажется выше, появится возможность выгребать у торговца все свободные деньги за счет многократной перепродажи одного и того же.
Однако, с ростом навыка персонажа могут встречаться все более грамотные торговцы, а у тогровцев с низким навыком количество свободных денег будет не велико, так что безпредельной наживы не будет.
Наконец, добрался до карты. Долго откладывал, поскольку текущий мир слишком мал, заблудиться невозможно. Тем не менее, в любой приличной игре карта есть обязательно, причем даже две: локальная и глобальная. А что касается движка Unreal Engine, то средства работы с 2D графикой энтузиазма не внушают.
Показать картинку - дело плевое, но выполнить позиционирование объектов - не так просто, как кажется. Нода Set Render Translation обеспечивает комфорт лишь до тех пор, пока карта в неизменном масштабе и неподвижна. Желающий делать масштабирование вынужден сделать еще и скроллинг, а значит, обречен писать функцию вычисления отступа от верхнего левого угла.
Показать картинку - дело плевое, но выполнить позиционирование объектов - не так просто, как кажется. Нода Set Render Translation обеспечивает комфорт лишь до тех пор, пока карта в неизменном масштабе и неподвижна. Желающий делать масштабирование вынужден сделать еще и скроллинг, а значит, обречен писать функцию вычисления отступа от верхнего левого угла.
Виджет предоставляет элементы Vertical Scroll Box и Horizontal Scroll Box, которые можно положить один в другой и получить готовый скроллинг "из коробки". Однако, оно весьма криво работает, а самое страшное - нет никакой возможности узнать, на сколько пикселей уехало изображение.
Короче, реализовал я это дело так, что в Image вставил не 2D текстуру, а динамический материал, и управляю им через параметры ZoomFactor, CoordX, CoordY. Так я хотя бы известно, где верхний левый угол. На самом деле, процедура рассчета координат объектов получилась весьма мозгодробительная. Самое паскудное, выяснилось, что оно зависит от соотношения сторон экрана. Пришлось исходить из предположения, что будет либо 16:9, либо 9:6, либо 4:3. Для каждого из тех вариатнов подобрал свой набор параметров.
Короче, реализовал я это дело так, что в Image вставил не 2D текстуру, а динамический материал, и управляю им через параметры ZoomFactor, CoordX, CoordY. Так я хотя бы известно, где верхний левый угол. На самом деле, процедура рассчета координат объектов получилась весьма мозгодробительная. Самое паскудное, выяснилось, что оно зависит от соотношения сторон экрана. Пришлось исходить из предположения, что будет либо 16:9, либо 9:6, либо 4:3. Для каждого из тех вариатнов подобрал свой набор параметров.
В итоге, карта разворачивается на весь экран, имеет восьмикратный zoom, удобно и красиво скроллится правой кнопкой мыши. Откуда взял картинку? Не мудрствуюя лукаво, заскринил сцену в едиторе и немного подправил в фотошопе.
Карта показывает текущие положение и направление персонажа, а также место, куда он поставил походную палатку. Левой кнопкой мыши можно поставить собственную метку, которая будет отображаться внутри компаса. Повторный клик - метка скроется, и не будет мозолить глаз. Очень удобно, уверяю вас.
По сути, карта получилась локальная, ее хватило на весь мир, поскольку маленький. "Взрослый" мир может быть в 10 или более раз больше, и даже при максимальном увеличении позиционироание метки может оказаться слишком грубым. Но это дело будущего, имея полученный опыт, с созданием глобальной карты я точно справлюсь.
Карта показывает текущие положение и направление персонажа, а также место, куда он поставил походную палатку. Левой кнопкой мыши можно поставить собственную метку, которая будет отображаться внутри компаса. Повторный клик - метка скроется, и не будет мозолить глаз. Очень удобно, уверяю вас.
По сути, карта получилась локальная, ее хватило на весь мир, поскольку маленький. "Взрослый" мир может быть в 10 или более раз больше, и даже при максимальном увеличении позиционироание метки может оказаться слишком грубым. Но это дело будущего, имея полученный опыт, с созданием глобальной карты я точно справлюсь.
Продолжил тренировки по созданию открытого мира. Сделал "правильный" остров, окруженный океаном. По сравнению с тем что есть, в два раза длиннее и в десять раз шире. Карта состоит из 100 квадратов, импортированных из черно-белой карты высот. Оказалось, все не так просто: нужно 16 бит на канал, в этом режиме фотошоп не делает слоев и вообще многие инструменты не работают. Изображение надо вручную резать на 100 фрагментов, а после импорта выясняется, что во мноих местах высота не сходится. Приходится опять же вручную править. Как я понимаю, с раскраской тоже покувыркаться придется. Не такой уж он и безшовный на самом деле.
Поскольку предполагается глубокая вода, пришлось делать плавание. Ограждать местность невидимыми стенами слишком топортно, надо позволить персонажу искупаться. Специально для отладки выкопал маленькое озеро.
Проще всего с физикой: поставил физический объем, взвел галку Water volume. Как персонаж туда попал - так и поплыл, была бы анимация. В Миксамо все шоколадно для третьего лица, первое лицо, когда плывет, рук свих не видит. Тут на помощь приходит Майка и адское терпение. Очень жаль, плавания кролем в Миксамо нет, потому для ныряния анимация получилась терпимо, а по поверхности будем считать, что брассом
Проще всего с физикой: поставил физический объем, взвел галку Water volume. Как персонаж туда попал - так и поплыл, была бы анимация. В Миксамо все шоколадно для третьего лица, первое лицо, когда плывет, рук свих не видит. Тут на помощь приходит Майка и адское терпение. Очень жаль, плавания кролем в Миксамо нет, потому для ныряния анимация получилась терпимо, а по поверхности будем считать, что брассом
Water.mkv
21.7 MB
Вода, в которую можно нырнуть - совсем не та вода, которая по колено. При погружении надо включать целый букет пост-процессов, да еще сделать так, чтоб они не вылазили выше уровня воды.
А еще надо настроить игровые механики, чтоб персонаж не баловался под водой огнестрельным оружием, и захлебывался насмерть, если не успеет вовремя вынырнуть. Также, при достижении дна не должен срабатывать дамаг от падения с высоты.
Очень неплохо было бы пристегнуть к рукам эффекты брызг и пузыриков, да только где их взять?
Короче, что получилось - то получилось, кому интересно - посмотрите:
А еще надо настроить игровые механики, чтоб персонаж не баловался под водой огнестрельным оружием, и захлебывался насмерть, если не успеет вовремя вынырнуть. Также, при достижении дна не должен срабатывать дамаг от падения с высоты.
Очень неплохо было бы пристегнуть к рукам эффекты брызг и пузыриков, да только где их взять?
Короче, что получилось - то получилось, кому интересно - посмотрите:
Время суток - основной стержень, на котором держатся все РПГ, выживачи, вобще все открытые Миры. И этот проект я начинал с цикла дня и ночи, даже не имея главного героя. В то время мне понравилось, как солнце прилежно вертится вслед за Direction Light, мне казалось, будто получил день-ночь прямо из коробки. Однако, все познается в сравнении. По сравнению с вариантом "вообще никак" или "делай все сам" - это круто. Но только для совсем начинающих. С высоты полученного опыта недостатки становятся заметнее достоинств.
Стандартное солнце движется так, как будто дело происходит строго на экваторе. Длина дуги от восхода до заката точно такая, как от заката до восхода. Цвет неба утром и вечером, а также почти всю ночь просто отвратительный. Красивые звезды появляются кратковременно, чтоб растянуть их на все темное время, нужны программные ухищрения. Видимый размер светила утром и вечером не меняется, цвет тоже всегда постоянный. Вообще, такой вариант освещения, когда свет падает строго сверху - самый тупой и дебильный, какой только можно придумать.
Стандартное солнце движется так, как будто дело происходит строго на экваторе. Длина дуги от восхода до заката точно такая, как от заката до восхода. Цвет неба утром и вечером, а также почти всю ночь просто отвратительный. Красивые звезды появляются кратковременно, чтоб растянуть их на все темное время, нужны программные ухищрения. Видимый размер светила утром и вечером не меняется, цвет тоже всегда постоянный. Вообще, такой вариант освещения, когда свет падает строго сверху - самый тупой и дебильный, какой только можно придумать.
Sun.mkv
14 MB
Вот почему теперь, когда я немного освоился с движком, пришло время сделать более правильное солнце.
Если бы программисты из Эпика учились в советских университетах, их бы каждую осень гоняли в колхоз на картошку, и тогда б они точно поняли, как происходит цикл дня и ночи. Условная ночь длится 8 часов, условный день - 16. Значит, длина дуги днем - 2/3, а ночью - 1/3 от 360. Вблизи горизонта видимый размер светила обязан увеличиваеться, причем рассвет должен быть розовым, а закат - красным.
По ходу, Эпики об этом не знают, хотя могли бы прочесть в книжках. Но где вы видели программиста, который читает документацию?
Короче, я возился целую неделю, нарисовал целый букет кривых для цвета солнца, неба, горизонта, облаков и тумана. Сделал восход не на востоке, а северо-востоке, а закат - на сереро-западе. Траекторию сделал приплюснутой, чтобы светило никогда не поднималось в зенит. На восходе диск плавно худеет, а на закате смачно распухает.
Хотя зачем я все это пишу? Лучше возьмите, и посмотрите сами:
Если бы программисты из Эпика учились в советских университетах, их бы каждую осень гоняли в колхоз на картошку, и тогда б они точно поняли, как происходит цикл дня и ночи. Условная ночь длится 8 часов, условный день - 16. Значит, длина дуги днем - 2/3, а ночью - 1/3 от 360. Вблизи горизонта видимый размер светила обязан увеличиваеться, причем рассвет должен быть розовым, а закат - красным.
По ходу, Эпики об этом не знают, хотя могли бы прочесть в книжках. Но где вы видели программиста, который читает документацию?
Короче, я возился целую неделю, нарисовал целый букет кривых для цвета солнца, неба, горизонта, облаков и тумана. Сделал восход не на востоке, а северо-востоке, а закат - на сереро-западе. Траекторию сделал приплюснутой, чтобы светило никогда не поднималось в зенит. На восходе диск плавно худеет, а на закате смачно распухает.
Хотя зачем я все это пишу? Лучше возьмите, и посмотрите сами:
В рамках подготовки к фестивалю Gamedev Weekend пришлось заняться моддингом. Условия такие: мне предоставляют телевизор и публику, но все остальное я должен привезти с собой. Иными словами, надо ехать в Новосибирск с системным блоком. Вроде не такая уж большая и тяжелая штуковина, но для междугородних путешествий совсем не подходящая. Короче, возникла нужда добавить себе мобильности.
Сходил в строительный супермаркет, купил немного алюминиевого профиля, и много винтиков и гаечек. За два дня интенсивной работы собрал для материнки с блоком питания новый уютный домик. На первый взгляд, как системный блок был, так и остался, но поймите разницу: такой каркас намного легче, и помещается в капроновую сумку божеских размеров.
Получился вполне приличный деловой портфельчик, но открываешь крышку, вставляешь провода - и вот тебе компьютер, который заметно мощнее очень дорогого игрового ноутбука.
Сходил в строительный супермаркет, купил немного алюминиевого профиля, и много винтиков и гаечек. За два дня интенсивной работы собрал для материнки с блоком питания новый уютный домик. На первый взгляд, как системный блок был, так и остался, но поймите разницу: такой каркас намного легче, и помещается в капроновую сумку божеских размеров.
Получился вполне приличный деловой портфельчик, но открываешь крышку, вставляешь провода - и вот тебе компьютер, который заметно мощнее очень дорогого игрового ноутбука.
Использовал бесконечный город в конце игры для тренировок в процедурной генерации контента. Кроме обелиска сделал еще три варианта центральной площади, на одном из которых разместил верстак. Оживил банкоматы, мусорные баки и терминалы продажи билетов. И еще расставил в разных местах разные итемы.
Каждый раз, когда персонаж, пытаясь выйти из города, вновь попадает в прежний квартал, облик главной площади меняется рандомно, также меняется содержимое мусорных баков и расстановка халявных итемов.
Можно собирать лут, продавать его банкоматам и копить деньги на билет. Цены устроены так, что выгоднее разбирать хлам на верстаке и продавать извлеченные ресурсы.
Метро в городе высокотехнологичное, там вместо поезда окно портала. При наличии билета позволяет прыгнуть обратно на остров.
Пока это просто так, для прикола, чтоб не было грустно от того, что прошел игру.
Каждый раз, когда персонаж, пытаясь выйти из города, вновь попадает в прежний квартал, облик главной площади меняется рандомно, также меняется содержимое мусорных баков и расстановка халявных итемов.
Можно собирать лут, продавать его банкоматам и копить деньги на билет. Цены устроены так, что выгоднее разбирать хлам на верстаке и продавать извлеченные ресурсы.
Метро в городе высокотехнологичное, там вместо поезда окно портала. При наличии билета позволяет прыгнуть обратно на остров.
Пока это просто так, для прикола, чтоб не было грустно от того, что прошел игру.