Участие в TWG12 и ТипоНетСпасения

Участие в двухнедельном конкурсе "Two Weeks Game 12" и разработка хоррор-платформера "Типо Нет Спесения"

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

Начальная версия размещения объектов, тюрьма еще не на своём месте, по идее это сперва была свалка в которой нужно было копаться.
В качестве основного инструмента создания игры был выбран Construct Classic r2, бесплатный конструктор для Windows, вполне подходит людям не знающим языков программирования. Единственное релиз нужно было использовать r1.2 или даже 0.99.96, типо работают стабильнее. Графика рисовалась на Flash'e, частично на Aseprite, ну и в самом конструкторе.

Первая неделя началась. Появился начальный сюжет, который вписывался в основную тему конкурса, налажена механика взаимодействия с окружением, было решено не использовать мышь, хотя это проще для игрока и не сложно в реализации, в общем в результате кидание бананов в тригеры. Банан был выбран из за сходства главного героя с Глушко из "Необъяснимо, но факт", позже банан был заменён на черепок.


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


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


На форумах писали разные причины, одна из которых это сырая версия канстракта, но это уже "точка не возврата", запускать на версии ниже не получится, а делать заново выйдет дольше. Так же в ошибке обвиняли сторонний объект "Audiere".  Начал проверять. Дело в том, что звук в канстракте можно было воспроизвести 3-мя способами:

1. Через объект "System" и единственную команду касательно звука "Play sound (for apps)", в ней две строки, первая путь к файлу, вторая "Flags" непонятно зачем она нужна, так как опросить её нет открытой возможности. То есть звуки нужно держать в папке с игрой. Проигрываются не сжатый wav и сжатый в adpcm. А самое "приятное" при проигрывании игра как бы зависает. Вариант не подходящий.

2. Объект "XAudio2", читает уже больше форматов: wma, wav, wav-adpcm, ogg, mp3, xwm, не все управляются из ресурсов и некоторые палятся в трее в виде значков кодека. Уйма возможностей, управлять звуками можно назначив ему номер "Channel", каналов 64 и можно расширить. Есть независимый один канал для музыки, работает с форматами wma и mp3. У всех звуков есть свойства, панорама, громкость, скорость, пауза, возможность проигрывать непрерывно, назначаться на объект. Есть так же общая громкость и полно свойств в самом объекте.

3. Последний вариант, сторонний объект "Audiere", еще больше форматов включая модульные, весь список: ogg, mp3, wav не сжатый, mod, xm, s3m, it, aiff, flac. Управлять можно назначив звуку "Alias" уже удобнее чем у предыдущего, понятными словами, а не только цифрами. Свойства же есть только у звуков, так же панорама, громкость, скорость, пауза и непрерывное проигрывание. Настройка общая только касается используемой памяти.

Возвращаемся к ошибке и вылету игры

Поспешно был выбран третий вариант "Audiere", логичным было предположение что по мере добавления звуков нагрузка на "Audiere" увеличилась и он не справлялся и крашил игру. Проигрывание звуков было исключительно из ресурсов, а на форумах писали меньше нагрузки будет если читать звуки из файлов (лежащих рядом с игрой), это было сделано, все звуки воспроизводились из файлов, но вылеты все равно не исчезли, потом было решено не использовать сжатые форматы звуков, вылеты все рано остались, были перепробованы все (не модульные) форматы, не помогло. Объект "Audiere" был забракован и за 3 дня до окончания конкурса было решено переходить на второй вариант "XAudio2", хотя точно не было известно в звуке ли вообще дело, может сам констракт виновник.


Оптимизация процесс "божественный", её нужно делать с чистой душой и добрым сердцем

С неохотой, периодически рыча на экран, начиная с первого Layout'a на котором висел первый звук, постепенно были переназначены сперва 12, а затем остальные 20 каналов, они были задокументированы, что бы не запутаться. Вылеты прекратились, ошибка исчезла как бы не стараться нагрузить множеством звуков падающих черепков. Теперь настало время оптимизации, пункт "держать звуки в ресурсах" не отпадал, форматов не много, но некоторые светятся 2-мя значками кодеков в трее и не работаю из ресурсов, форматы ogg и mp3 были исключены. Формат для музыки был выбран wma, а для звуков wav-adpcm и xwm.


Про особенность сжатия в wav-adpcm

Если звук больше характерен высокими частотами, лучше сжимать в максимальном качестве 44100кгц 4бит (да, выглядит смешно в 2018 году). В особых случаях можно сжать в xwm c 48000кгц, разница не большая на самом деле, но размер меньше.

Чем сжимать формат wav-adpcm?
1. SoundForge до 6 версии, седьмая и выше обрезают концы зачем-то.
2. В Audition (бывший CoolEdit) сохранять нужно не в "Microsoft ADPCM (*.wav)" ибо глючит режим loop, а в "ACM Waveform (*.wav)" и уже в нём выбирать соответствующий пункт "Microsoft ADPCM".
3. Может есть хорошо работающие конвертеры, но таких не было обнаружено (если кто-то подскажет, будет здорово).

Левый клик мыши всегда левый
Еще была выяснена одна особенность окон созданных игр на Construct Classic. Один популярный в малоизвестном кругу стример (не буду его рекламировать), обозревая "Типо Нет Спасения", пытаясь перетащить за верхнюю часть окно игры, объявил что окно не двигается. Заинтересовавшись этим вопросом, игра была протестирована на 10 версии винды, всё двигалось. Через какое-то время работая левой рукой (как и стример видимо), кнопки мыши были переназначены, и действительно окно не реагировало если пытаться перетащить правой кнопкой мыши. Чуть позже решение было найдено, но оно пока тестируется.

На этом пожалуй всё, всем добра и не бомбите.

Комментариев нет: