В конце первой половины 90-х на рынок СНГ попала первая консоль от фирмы Sony — Playstation 1 или PSX. Ее можно считать уникальной со многих точек зрения, но для всех нас главным отличием пожалуй было то, что наконец-то в играх появилось полноценное видео, вменяемая 3D-графика, а также возможность сохранятся не при помощи пароля, судорожно ища бумажку(да простят меня читатели за неловкое сравнение, возникшее в их головах), а, как и подобает белому человеку, на цифровой носитель.
На самом деле эта консоль обозначила собой тихую революцию и в программировании игр. Именно об этом я бы и хотел рассказать сегодня. И более того, если вы захотите написать свою игру для пылящейся в кладовке приставки, отомстив таким образом за творческое бессилие, испытанное в отрочестве, то под катом вы сможете получить представление о том, как это сделать.
Некоторые факты
Это важно знать:
- Playstation была первой распространенной консолью, которая поддерживала нормальное воспроизведение полноцветного видео. Для этого в консоли имелся специальный чип, который поддерживал аппаратное декодирование формата, близкого к JPEG. Но тем не менее разработчикам приходилось вручную отрисовывать каждый кадр и синхронизировать звуковую дорожку.
- Из-за аппаратных ограничений было невозможно за один раз скопировать в видеопамять битмап размером больше 256x256 пикселей — так что все панорамы на заднем плане рисовались в 2-4 прохода.
- Для игры с пиратских дисков нужно было производить операцию «чипования» консоли, для этого на материнскую плату консоли припаивался специальный контроллер, дававший Playstation стойкую продолжительную иллюзию того, что дешевая болванка в ее недрах является лицензионным диском. Найти нечипованную консоль в СНГ скорее всего было невозможно. На западе эта же проблема решалась более легально — для этого использовался трюк с подменой диска: во время загрузки BIOS вставлялся лицензионный диск, а сразу же после него болванка с игрой, которую требовалось запустить.
- Memory card — обычная флэшка с емкостью 128 кбайт.
- Для Playstation таки существовала мышь. Но кто знал об этом?
- На консоли можно было проигрывать Video CD. Но кто знал, где их можно достать?
- Выпуск Playstation 1 на бескрайних просторах дальней Азии был приостановлен только лишь потому, что Sony нужны были большие производственные мощности, чтобы увеличить выпуск Playstation 3. Днем траура можно считать 23 марта 2006 года.
- Большинство игр для Playstation имеют разрешение 320x240.
- Практически все китайские клоны Playstation, имеющиеся на рынке сегодня, запускают игры в режиме эмуляции, железо же отличается от оригинального, что ведет к неработоспособности некоторых игр. Зато вы сможете посмотреть купленный в соседней палатке DVD.
- Последняя игра для Playstation, не являющаяся ни переизданием, ни кустарной поделкой, вышла в 2005 году. Всего игр было выпущено около 8000.
- Также как сейчас проводятся мероприятия вроде Perl Workshop, тогда проводились слеты разработчиков для обмена опытом и демонстрации прототипов игр, находящихся в разработке. Материал каждого такого слета выпускался на диске, содержимое которого было очень похоже на то, что было на черных демо-дисках, поставлявшихся вместе с Playstation. Если соберете их все, то, сможете смотреть на местных филателистов свысока.
- Самым распространенным приемом «урезания» игр с целью создания пиратских сборников была замена всех видеофайлов на короткие «заглушки» — секундные клипы с черным экраном.
- В игровых клубах имели место драки из-за того, что места на картах памяти всем не хватало. Вообще же относительная дешевизна Playstation привела к тому, что первые игровые клубы массово открывались именно на ее базе. Так было в периферии, в столицах же клубы с Sega или просто компьютерами были и раньше.
С чего начинается разница
Мало кто знает, но программирование для других распространенных консолей того времени представляло сущий ад(с точки зрения программиста не питающего любви к ассемблеру). Геймдев того времени скорее напоминал современное программирование микроконтроллеров, со всеми вытекающими последствиями — отсутствием нормального интерфейса к файловой системе, ручное генерирование частоты звука, обращение к I/O портам для каждой операции, и ассемблер, ассемблер, очень много ассемблера. Были и прочие мелкие радости вроде нескольких процессоров в одной консоли, или же оперативной памяти не имеющей непрерывного диапазона. Всех мелочей и не припомнишь. Единственной приставкой того времени, которая могла бы похвастать гуманизмом по отношению к программистам была Panasonic 3DO, которая все же не сыскала популярности в СНГ(да и в остальном мире тоже).
Чтобы понять ту степень безысходности, которая имела место при программировании для тогдашних наиболее распространенных приставок взгляните на эти характеристики:
Консоль | Процессор | Объем ОЗУ | Ограничения носителя | Объем видеопамяти |
---|---|---|---|---|
Dendy/Nes | 1,66-1,79 Мгц | 2 КБ | 48 КБ | 2 КБ |
Sega Mega Drive | 7,61 Мгц | 64 КБ | 4 МБ | 64 КБ |
Playstation 1 | 33,8688 МГц | 2 МБ | около 700 МБ | 1 МБ |
Конечно, имели место хитрости с целью увеличения возможностей картриджных консолей — картридж, по сути дела,электронная схема, со множеством выводов, далеко не все из которых были предназначены для считывания данных из ПЗУ картриджа. Что можно разместить на схеме? Да что угодно — дополнительное ОЗУ, контроллер ПЗУ с возможностью маппинга данных больших игр в допустимое адресное пространство ввода-вывода. Главное, чтобы консоль поддерживала интерфейс для взаимодействия с подобными устройствами картриджа. И она, как правило, поддерживала! Таким образом программирование игр не сводилось только к разработке кода, порой требовалось «доделывать» игру аппаратно, чтобы хоть как-то превзойти скудные возможности консолей того времени. Однако, немногим из многих, имеющих 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 части, движок которой перекочевал через кучу платформ и имел свой собственный интерпретируемый ассемблер. Про создание обеих игр можно почитать тут:
Crash Bandicoot:http://all-things-andy-gavin.com/2011/02/02/making-crash-bandicoot-part-1/
Final fantasy: http://q-gears.sourceforge.net/gears.pdf
Как это делалось у нас
Значимость 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 имеет более «железную» направленность, вроде моддинга консолей. Таким образом происходит распыление усилий и без того небольшого числа людей. Разнятся и места обитания членов обеих коммьюнити:
Psy-Q:
irc: irc.eversible.com #psxdev
форумы:http://psxdev.net/
PSXSDK:
irc: irc.freenode.net #unhaut
форумы:http://unhaut.fav.cc/forums
сайт проекта:http://code.google.com/p/psxsdk
Если вам известны какие-либо русскоязычные коммьюнити, занимающиеся разработкой под Playstation или переводом игр, или же вы занимались переводами этих игр в свое время, или же у вас остались какие-то инструменты или документация от людей,которых вы знали и которые этим занимались, пожалуйста напишите мне! Более того, если вы обладаете сведениями об аппартно-независимых С-библиотеках для рендеринга 3D-графики, которые к тому же нетребовательны к ресурсам, то опять таки — пишите!
Автор: PerlPower