Это снова то время года. Если вы не читали мой последний постмортем, то это его небольшое продолжение с тех пор, как я последний раз джемовал. Здесь я подытожу свои мысли и другие вещи, которые я обнаружил во время Ludum Dare. Надеюсь, вы узнаете столько же, сколько я сделал этот джем в этом посте. Но, безусловно, это был самый веселый джем, который я делал с этим движком.

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

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

Ограничения пользовательского движка:

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

В этой части я еще раз расскажу о скоупе, так как считаю, что это сложная задача для любого проекта. Если вы хотите, чтобы ваш проект увенчался успехом, вам нужно определить масштаб, сократить его, а затем снова масштабировать. Это, безусловно, в сочетании с работой с программным обеспечением, когда люди гнусно полны плохих оценок, — отличный рецепт для катастрофы на каждом шагу. Для того, чтобы сделать объем хорошо, вам нужно понять набор проблем, которые вы пытаетесь решить, к счастью, это было то, что вы имели в виду, входя в этот Jam.

Учитывая, что двигатель стал лучше, но все еще далек от совершенства, нам приходится сталкиваться с новым уровнем проблем, которые приходят.

  • Нет анимации

Я не планировал никаких анимаций, спрайт-листов или каких-либо причудливых тайлов, которые другие движки могли бы дать бесплатно. Были случаи, когда я сожалел об отсутствии анимации спрайтов, например, анимация пламени в центре, а также анимация кнопок (при наведении/нажатии/отпускании).

Но Стивен, вы можете подделать анимацию, удалив старый спрайт и заменив его новым! Ну, я тоже так думал, переходя к этому джему, к сожалению, была еще одна ошибка, из-за которой мы не можем отсортировать, в каком порядке рисуются спрайты. Это означает, что мы не можем просто удалить и снова добавить спрайты :(.

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

  • Никаких игр с физикой

Физическая система очень неэффективна. С большим количеством движущихся объектов на сцене Box2D ужасно тормозит. Я получаю ужасные падения FPS, когда достигаю около 500 активных объектов. Частично это связано с тем, что у меня нет переработчика объектов, поэтому перемещение/создание/уничтожение объектов на данный момент довольно дорого. Здесь много работы, которую нужно сгладить, но я скоро начинаю сталкиваться со стеной «это может быть ограничением библиотеки».

Во время Jam я обнаружил, насколько ужасно пытаться одновременно переместить 500 объектов в одном регионе. Я понял: «Лучше вообще избегать моделирования физики, когда это возможно». Это может относиться к любой физической системе. Я уверен, что некоторые системы имеют встроенную оптимизацию.

В результате мало что было сделано в физике за это время. Мышь моделируется физически (для столкновений), но это все. В какой-то момент каждый порожденный объект сталкивался с огнём, чтобы вызвать событие, выполняющее другие действия. Это оказалось слишком много для физики. Это было вырезано из игры, и, вероятно, к лучшему!

  • Нет опыта работы с «настоящим» Python

Сюрприз! И я, и моя команда на этот раз писали игру на языке, с которым никто из нас не знаком. Я имею в виду, что мы уже коснулись скриптов Python, чтобы сказать здесь обновить переменную и изменить вывод там. Но мы никогда раньше не писали что-то на Python с нуля. В языке Python было много вещей, которыми мы не воспользовались, таких как необязательные именованные параметры, сопрограммы, класс enum, стандартная библиотека Python и бесплатные переменные без типа. Отчасти потому, что большая часть наших знаний в области программирования исходит из C++, поэтому большинство этих концепций не являются для нас бесплатными в этом языке.

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

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

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

  • Без предварительной загрузки ресурсов

Да, мой плохой здесь! Я немного опустил мяч, переходя в этот джем из-за добавления предварительного загрузчика. Мы хотели звуки, и мы хотели спрайты. Мы получили их обоих! Но теперь у нас есть проблема, когда ресурсы загружаются с диска во время игры. Иногда это может привести к большому падению FPS! Плохо.

К счастью, у нас не так много ресурсов в игре, но это определенно удерживало нас от того, чтобы сойти с ума от количества вещей, которые мы хотели добавить. Самый большой актив, который у нас есть, — это концовка «тада», и мы не возражаем против небольшого падения FPS, чтобы отображать там титры.

  • Очень плохой внутриигровой редактор

В прошлом джеме я жаловался, что нет визуального способа отладки систем. Так что я добавил несколько вещей с прошлого Jam, например, средство просмотра сущностей в игре, а также визуализатор физики Box2D. К сожалению, решение, которое я считал достаточно хорошим, оказалось совсем не очень полезным :(. Было несколько случаев, когда оно решило несколько ошибок для нас, так что это не совсем ерунда! Но это определенно далеко не так. полезное, что я себе представляю!

Некоторые вещи, которые я хочу увидеть в будущем:

  • Возможность именования сущностей в отладчике

  • Возможность загрузки из снапшота (сохранения)

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

  • Улучшенный рабочий процесс при работе со скриптами

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

  • Возможность редактировать сущности + скрипты в игре

Было бы неплохо иметь возможность редактировать сущности во время работы игры, а затем перезагружать сущность в игру, но это возможно только после того, как у нас есть сохранения!

  • Только один реальный рабочий день (~12 часов)

Как и в случае с любой проблемой определения масштаба, вы должны понимать, что ваш главный ресурс — это время, и сколько из этого времени вам нужно потратить на вещи (стоимость). Мы были ограничены одним днем, чтобы действительно собрать все вместе, а затем разбрасывали часы туда и сюда, чтобы сделать все остальное. Поэтому для нас было важно сосредоточиться на том, чтобы сделать то, что мы считали наиболее важным, в первую очередь.

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

Что мне понравилось:

  • Мы действительно перешли к мышлению «давай джемовать», много хаков слева, справа и по центру

Это наш третий джем. Вот несколько замечательных выводов: приступайте к джему с мыслью «просто доставьте его, не беспокоясь о его поддержании». Люди, работающие в сфере программного обеспечения, проводят множество тренингов, чтобы «не делать свой код ужасным для других».

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

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

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

  • Сценарии Python оказались неоценимым преимуществом в сокращении времени итерации

На этот раз у нас было много ценных разговоров, где мы сказали «просто попробуйте это вместо этого» и попробовали, чтобы посмотреть, сработает ли это. Возможность быстрой итерации была причиной, по которой мы добавили Python. И мальчик сделал это показать!

Мы смогли сделать множество вещей полностью на питоне, без необходимости выполнять долгую 1-2-минутную перекомпиляцию. Мы могли прототипировать 2–3 разных решения для одной проблемы и просто выбирать, какое из них работало лучше.

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

В целом очень доволен таким результатом! Также очень доволен комбинацией системы сериализации, я могу легко добавлять новые привязки к Python. Это все еще боль, но определенно было бы больше боли, если бы ее не было.

  • Диалоговая система

Во время джема мне удалось быстро собрать систему ввода текста. Хотя качество «заедания» системы ввода проявилось ближе к концу, когда я не мог точно контролировать диалог. Один диалог скорости, но отсутствие возможности упорядочивания строк обошлось небольшой ценой.

Я надеюсь интегрировать что-то вроде YARN в обновление движка, чтобы мне было проще управлять текстовыми подсказками. На самом деле это будет очень интересно для меня, так как это, вероятно, будет первая система на чистом Python / комбинированная, которую я предоставляю.

  • Больше времени для искусства и других вещей, не связанных с программированием

Возможность потратить свои первые 2-3 часа Jam только на разработку концепта и создание всех арт-объектов была на самом деле довольно забавной. Кроме того, что время, потраченное на написание истории, тоже было забавным. Я думаю, что игры со смыслом — это те, которые больше всего привязываются к людям. Видеоигры сочетают в себе визуальные, слуховые и интерактивные элементы, чтобы передать смысл игроку. Это то, что не многие другие среды могут сделать так же легко, и это то, что я больше всего люблю в играх!