Блог разработки — Портирование: Часть 1
Всем привет! Разработка идет очень медленными шагами, так как она лежит сейчас только на мне одном. Я сегодня расскажу о том, как была портирована игра, какие вещи надо было предпринять для этого, что переписать и многое другое. Часть первая будет посвящена портированию сетевого режима игры и онлайн-функций на новый движок
Раннее, онлайн-составляющая игры была написана на известной в узких кругах библиотеке 39dll. Она является расширением для Game Maker 7 и выше. Ее использует множество начинающих разработчиков, несмотря на встроенные в Game Maker тогда функции взаимодействия с сетью. Стандартные функции были довольно ужасными и ограниченными. В 39dll все было более-менее понятнее и более работоспособнее
Для своей игры я впервые применил 39dll для внедрения системы автоматических обновлений. Я воспользовался готовым решением от zxc76 (спасибо ему за скрипт get_text). После почти готовой одиночной игры я начал писать кооперативный режим
И тут начались беды. Я совершенно не понимал, как же работают сокеты, отправка данных и получение (да и до сих пор не совсем понимаю, если честно). Поэтому пришлось много-много гуглить. Находил только примеры единого сервера и подключения к нему кучи клиентов. Но мне была нужна другая связь сервер-клиент — это связь, когда один игрок создает игру и является сервером, а другой подключается и является клиентом соответственно. Долгие поиски привели меня к примеру реализованной на 39dll игры Pong. С примера я весь код почти и выдрал, поменяв передаваемые данные. Ну да, такой я программист 🙂
И все работало на удивление неплохо. Позже пришлось придумывать разные алгоритмы для правильной работы уничтожения монстров у обоих игроков, падения люков и движения клонов. Но все бы хорошо, если бы не приход GameMaker: Studio и новых платформ. Так как 39dll не было нигде, кроме Windows, меня это сильно расстроило
После переноса основных функций игры на новый движок, я попробовал запустить сетевую игру на Windows с помощью 39dll, но почему-то игра не хотела работать в ко-опе. Может, я что-то не так написал, может GameMaker глючит. За время моего безделья 39dll появился на OS X под названием 39dylib. Его я и стал использовать. Но и он не работал…
Так я забросил переписывание онлайна до последнего момента. А до этого перенес онлайн-составляющую на этот самый 39dll и в GameMaker: Studio он работает до сих пор. Поэтому игра по-прежнему использует данную библиотеку. В случае с Ubuntu я нашел кем-то сделанную библиотеку 39dll для Linux. Я скомпилировал ее и все стало работать на третьей платформе. Но на iOS и Android пришлось придумывать другие способы для активации онлайн-функционала
BJtH-Online использует GET-запросы для обработки запросов со стороны игры, то есть работает некая PHP-прослойка. В случае с настольными платформами (Windows, OS X, Ubuntu) используется 39dll и скрипт get_text. Для iOS и Android я написал вручную собственные библиотеки HttpGet. Пришлось быстро осваивать Java и Objective-C и кое-как приделать функцию. Мучился я долго, но это из-за незнания языков, скорее
Да, я не использовал стандартные в GameMaker функции для этого, так как они были работали асинхронно, что для меня было неприемлемо. С кооперативным режимом была такая же бяка, но перенести было все намного проще из-за схожей работы онлайна в 39dll
Как пришло время переписывания онлайна, я приступил. Из-за крайне ужасной документации стандартных функций Networking мне было тяжело понять, что к чему. Нашел информацию про буферы, кое-как освоил. Потом долго мучился с работой сокетов. Получилось немного кривое, но работоспособное! Но по факту, перенос был не таким уж и сложным, даже не смотря на то, что ни одного примера работы сервер-клиент я не нашел. Чему я очень рад, так это доступность кросс-платформенного мультиплеера в моей игре. Теперь пользователи любой платформы может поиграть с любым другим игроком, использующего любую платформу. Позже напишу более техническую статью по переносу онлайн-составляющей для новичков, здесь ограничусь лишь этим. Ну и уже не в цикле блога разработки, конечно
Все секреты я раскрывать не намерен, но малой частью поделился. Думаю, было интересно прочитать такую заметочку от разработчика! Во второй части я расскажу про перенос редактора уровней на новый движок
С уважением, Silver Sword!