В конце первой половины 90-х на рынок СНГ попала первая консоль от фирмы Sony — Playstation 1 или PSX. Ее можно считать уникальной со многих точек зрения, но для всех нас главным отличием пожалуй было то, что наконец-то в играх появилось полноценное видео, вменяемая 3D-графика, а также возможность сохранятся не при помощи пароля, судорожно ища бумажку(да простят меня читатели за неловкое сравнение, возникшее в их головах), а, как и подобает белому человеку, на цифровой носитель.
На самом деле эта консоль обозначила собой тихую революцию и в программировании игр. Именно об этом я бы и хотел рассказать сегодня. И более того, если вы захотите написать свою игру для пылящейся в кладовке приставки, отомстив таким образом за творческое бессилие, испытанное в отрочестве, то под катом вы сможете получить представление о том, как это сделать.
Некоторые факты
Это важно знать:
С чего начинается разница
Мало кто знает, но программирование для других распространенных консолей того времени представляло сущий ад(с точки зрения программиста не питающего любви к ассемблеру). Геймдев того времени скорее напоминал современное программирование микроконтроллеров, со всеми вытекающими последствиями — отсутствием нормального интерфейса к файловой системе, ручное генерирование частоты звука, обращение к I/O портам для каждой операции, и ассемблер, ассемблер, очень много ассемблера. Были и прочие мелкие радости вроде нескольких процессоров в одной консоли, или же оперативной памяти не имеющей непрерывного диапазона. Всех мелочей и не припомнишь. Единственной приставкой того времени, которая могла бы похвастать гуманизмом по отношению к программистам была Panasonic 3DO, которая все же не сыскала популярности в СНГ(да и в остальном мире тоже).
Чтобы понять ту степень безысходности, которая имела место при программировании для тогдашних наиболее распространенных приставок взгляните на эти характеристики:
Конечно, имели место хитрости с целью увеличения возможностей картриджных консолей — картридж, по сути дела,электронная схема, со множеством выводов, далеко не все из которых были предназначены для считывания данных из ПЗУ картриджа. Что можно разместить на схеме? Да что угодно — дополнительное ОЗУ, контроллер ПЗУ с возможностью маппинга данных больших игр в допустимое адресное пространство ввода-вывода. Главное, чтобы консоль поддерживала интерфейс для взаимодействия с подобными устройствами картриджа. И она, как правило, поддерживала! Таким образом программирование игр не сводилось только к разработке кода, порой требовалось «доделывать» игру аппаратно, чтобы хоть как-то превзойти скудные возможности консолей того времени. Однако, немногим из многих, имеющих Dendy на постсоветском пространстве,посчастливилось иметь дело с картриджами, вмещающими существо мифическое и полубожественное — а именно «батарейку», на которую можно было бы сохранить игру.
Сие непотребство закончилось с приходом Playstation: во-первых консоль обладала достаточно внушительными характеристиками и могла конкурировать с компьютерами того времени на которых работал DOS(что обусловило немалое число игр, которые были портированы с PC на Playstation), во-вторых игра теперь располагалась на компакт-диске, что означало невозможность каких-либо аппаратных ухищрений. Короче говоря, приход Playstation положил раздел двум эпохам — той, когда костыли считались хорошей практикой, и той, когда костыли стали считаться костылями. Но когда одна эпоха сменяет другую всегда появляются ретрограды, свято чтущие былые заветы — именно благодаря их самоотверженному труду на рынок попали несколько игр, которые работают только на самых ранних ревизиях Playstation. Так, меняя адреса портов устройств от ревизии к ревизии, инженеры Sony мягко, но настойчиво, давали разработчикам понять, что официальная SDK и подробная документация были даны им неспроста.
Программирование для Playstation было настолько простым, что помимо специальных аппаратных станций(Dev Unit), продаваемым профессиональным разработчикам игр по цене порядка 35 000 $, Sony выпускала специальную версию консоли для домашних разработчиков, называемую Net Yaroze и сравнимую по стоимости с самой приставкой.
Как это делалось
Выше уже было сказано о том, что для ранних консолей программирование велось почти исключительно на ассемблере. В случае же Playstation де-факто стандартом разработки стал язык С. Нормальный С, без ассемблерных вставок, сношений в порты и каких либо серьезных ограничений — вам больше не нужно было писать свою реализацию strncat или же писать свою библиотеку для ввода-вывода, если вы просто хотели прочитать файл с диска.
Еще одним немаловажным отличием от предыдущих консолей стало то, что разработчик получал полноценный API интерфейс для всех аппаратных возможностей консоли вроде сопроцессора для векторных вычислений. SDK, поставляемая Sony имела обертки для всего, что только могло пригодиться, что давало возможность по-настоящему абстрагироваться от особенностей консоли. В результате портирование игр из-под DOS часто оборачивалось только переписыванием слоев, отвечающих за графику и звук.
В целом же разработка для типового программиста носила такой характер: к Playstation через разъем, указанный на рисунке, подключался модуль разработки, подключавшийся к компьютеру. Через этот мост происходила загрузка EXE-файла в оперативную память приставки, и через него был возможен вывод отладочной информации на компьютер. Так же, как сейчас многие кустарные веб-студии испытывают нехватку техники Apple для тестирования своих приложений, разработчики игр для Playstation испытывали нехватку Dev Unit'ов. Таким образом большой непонятный порт на задней панели приставки должен служить немым напоминанием о том, что некоторые вещи не меняются даже спустя почти два десятилетия.
Конечно, далеко не каждому из разработчиков хватало самообладания, чтобы написать игру на опостылевшем С. И тогда в ход шло коронное оружие амбициозного разработчика — самодельный язык программирования. Достоверно известно, что как минимум 2 серии игр постигла такая участь — Crash Bandicoot, который был написан на самопальном диалекте лиспа, а также вся линейка Final fantasy до 9 части, движок которой перекочевал через кучу платформ и имел свой собственный интерпретируемый ассемблер
Как это делалось у нас
Значимость Playstation также в том, что ее диски могли быть прочитаны на любом компьютере и записаны на нем же. Что породило невиданную для остальных консолей волну пиратства. Теперь для того, чтобы сделать перевод игры достаточно было иметь дизассемблер для архитектуры MIPS, а также пишущий CD-ROM. Возможно именно тот факт, что для перевода этих игр требовалось столь мало породило столь плохое качество первых переводов. Можно расценивать это как идеальную иллюстрацию деления людей на технарей и гуманитариев: когда у человека хватало знания английского аккурат настолько, чтобы изучить справочник к дизассемблеру, на выходе мы получали перевод столь обильно сдобренный жаргоном и матом, что сюжет игры несколько терялся; с другой же стороны, когда выдранные отладчиком тексты, пересылались на перевод желающему подработать студенту филфака, на выходе получался настолько литературный и оторванный от сути перевод, что редкий технарь мог понять, как же именно пройти описываемый квест.
Другой стороной относительной легкости модификации программного кода игр стала возможность собирать несколько игр на один диск, на радость ограниченной в средствах детворе. Для самых популярных игр вшивались тренеры — загрузчики,которые до смерти запатчивали декремент жизней, патронов и т.д.
Демосцена была на удивление мала и толком не образовалась и по сей день. Поэтому я настоятельно прошу всех, кто имел хоть какое-то отношение к пиратству игр для консолей рассказать об этом! Я буду очень благодарен тем, с кем смогу пообщаться на эту тему подробно.
Особенности геймдева
Массово игры для Playstation перестали выходить примерно в 2002-2003 году, но энтузиасты не сдаются и пытаются продолжать это благородное дело. Сделать это можно двумя способами — именно столько приличных SDK существует для Playstation сегодня. О том, где можно достать обе вы сможете прочитать в конце.
Psy-Q
Это официальная SDK, выпущенная Sony для профессиональных разработчиков игр. Содержит в себе компилятор С, а так же все необходимые библиотеки. Имеется также множество инструментов для обработки графики и приведения ее к формату,пригодному для обработки Playstation, часть инструментов уже бесполезна ввиду наличия современных аналогов, часть существует непонятно для чего — документация к ним утеряна.
Данная SDK правда позволяет писать игры высокого качества, но имеет один недостаток — она рассчитана для работы под управлением ОС Windows 95-98, уже на XP вы можете столкнуться с проблемами. Но даже с ней создание игр, использующих3D-модели будет затруднено — в те времена использовались довольно специфичные 3D-редакторы, а SDK содержит лишь инструмент для конвертации моделей из форматов многолетней давности.
Вообще, эту SDK стоит попробовать только лишь для того, чтобы понять на чем приходилось работать программистам того времени и насколько несовершенны были их инструменты по сравнению с сегодняшним днем.
PSXSDK
Начиная с 2008 года на свет появилась полностью открытая SDK, базирующаяся на компиляторе GCC и развивающаяся по сей день. Она позволяет создавать только 2D-игры — ну или, если вы чувствуете в себе силы написать движок для рендеринга 3D на С, то вам дороги все открыты. Написать видео-проигрыватель на ней тоже будет проблематично, но в целом это лучший вариант для начала программирования.
Из приятных плюсов — при помощи этой SDK можно скомпилировать такие вещи как gzip, libpng и т.д. — любой современный plain C код. Так у автора получилось скомпилировать Lua ранних версий для работы на Playstation. Поэтому, если вы знаете какую-либо библиотеку, рассчитанную на работу в микроконтроллерах, реализующую базовую работу с 3D-графикой вроде рендеринга полигонов или маппинга текстур, то это будет хорошим подспорьем для проекта.
Документация на данный момент пишется мной, причем в свободное от работы время. Зато есть примеры кода, используя которые, свой Super mario или аналог почти любой флэш-игры написать более чем возможно.
К тому же данная SDK успешно работает как под Windows, так и под Linux. Да чего греха таить — подо всем под чем вы только сможете собрать ее.
Коммьюнити
Сообщество энтузиастов поделено на 2 группы, в зависимости от использования SDK. При этом группа, которая использует Psy-Q имеет более «железную» направленность, вроде моддинга консолей. Таким образом происходит распыление усилий и без того небольшого числа людей. Разнятся и места обитания членов обеих коммьюнити:
Источник
30 ЛУЧШИХ ММО ИГР
Читайте также
Последние новости