Блог разработки — Портирование: Часть 1

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

Раннее, онлайн-составляющая игры была написана на известной в узких кругах библиотеке 39dll. Она является расширением для Game Maker 7 и выше. Ее использует множество начинающих разработчиков, несмотря на встроенные в Game Maker тогда функции взаимодействия с сетью. Стандартные функции были довольно ужасными и ограниченными. В 39dll все было более-менее понятнее и более работоспособнее

Для своей игры я впервые применил 39dll для внедрения системы автоматических обновлений. Я воспользовался готовым решением от zxc76 (спасибо ему за скрипт get_text). После почти готовой одиночной игры я начал писать кооперативный режим

И тут начались беды. Я совершенно не понимал, как же работают сокеты, отправка данных и получение (да и до сих пор не совсем понимаю, если честно). Поэтому пришлось много-много гуглить. Находил только примеры единого сервера и подключения к нему кучи клиентов. Но мне была нужна другая связь сервер-клиент — это связь, когда один игрок создает игру и является сервером, а другой подключается и является клиентом соответственно. Долгие поиски привели меня к примеру реализованной на 39dll игры Pong. С примера я весь код почти и выдрал, поменяв передаваемые данные. Ну да, такой я программист 🙂

i1

И все работало на удивление неплохо. Позже пришлось придумывать разные алгоритмы для правильной работы уничтожения монстров у обоих игроков, падения люков и движения клонов. Но все бы хорошо, если бы не приход GameMaker: Studio и новых платформ. Так как 39dll не было нигде, кроме Windows, меня это сильно расстроило

После переноса основных функций игры на новый движок, я попробовал запустить сетевую игру на Windows с помощью 39dll, но почему-то игра не хотела работать в ко-опе. Может, я что-то не так написал, может GameMaker глючит. За время моего безделья 39dll появился на OS X под названием 39dylib. Его я и стал использовать. Но и он не работал…

Так я забросил переписывание онлайна до последнего момента. А до этого перенес онлайн-составляющую на этот самый 39dll и в GameMaker: Studio он работает до сих пор. Поэтому игра по-прежнему использует данную библиотеку. В случае с Ubuntu я нашел кем-то сделанную библиотеку 39dll для Linux. Я скомпилировал ее и все стало работать на третьей платформе. Но на iOS и Android пришлось придумывать другие способы для активации онлайн-функционала

i2

BJtH-Online использует GET-запросы для обработки запросов со стороны игры, то есть работает некая PHP-прослойка. В случае с настольными платформами (Windows, OS X, Ubuntu) используется 39dll и скрипт get_text. Для iOS и Android я написал вручную собственные библиотеки HttpGet. Пришлось быстро осваивать Java и Objective-C и кое-как приделать функцию. Мучился я долго, но это из-за незнания языков, скорее

Да, я не использовал стандартные в GameMaker функции для этого, так как они были работали асинхронно, что для меня было неприемлемо. С кооперативным режимом была такая же бяка, но перенести было все намного проще из-за схожей работы онлайна в 39dll

Как пришло время переписывания онлайна, я приступил. Из-за крайне ужасной документации стандартных функций Networking мне было тяжело понять, что к чему. Нашел информацию про буферы, кое-как освоил. Потом долго мучился с работой сокетов. Получилось немного кривое, но работоспособное! Но по факту, перенос был не таким уж и сложным, даже не смотря на то, что ни одного примера работы сервер-клиент я не нашел. Чему я очень рад, так это доступность кросс-платформенного мультиплеера в моей игре. Теперь пользователи любой платформы может поиграть с любым другим игроком, использующего любую платформу. Позже напишу более техническую статью по переносу онлайн-составляющей для новичков, здесь ограничусь лишь этим. Ну и уже не в цикле блога разработки, конечно

i3

Все секреты я раскрывать не намерен, но малой частью поделился. Думаю, было интересно прочитать такую заметочку от разработчика! Во второй части я расскажу про перенос редактора уровней на новый движок

С уважением, Silver Sword!



Оставить комментарий

XHTML: Вы можее использовать следующие тэги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>