Какой формат игр на sega
ROM - (англ. Read-Only Memory, постоянное запоминающее устройство, дословно "Память только для чтения"), масочное ПЗУ, изготавливается фабричным методом. В дальнейшем нет возможности изменить записанные данные. В нашем случае это копия (дамп) ПЗУ картриджа (т.е. файл), обычно это игра. Другими словами, все файлы игр, которые вы скачиваете с нашего сайта, для дальнейшего запуска на эмуляторе, называются РОМы.
В свою очередь, РОМы бывают разных форматов, соответственно, должны запускаться на эмуляторах, поддерживающих эти форматы. Например, скаченный ром - nazvanie-igri.bin, как мы видим данный файл имеет расширение bin, но что же это означает? Давайте рассмотрим самые популярные форматы РОМов и на какаие платформы приставок они рассчитаны.
Самыми популярными расширениями РОМов, которые вы можете встретить, являются BIN, SMD и GEN. Данные расширения говорят о том, что игры принадлежат платформе Sega Mega Drive, данное расширение можно запустить с любого эмулятора Сега. Sega Mega Drive, кстати говоря - это та же самая Sega Genesis, просто в Европе приставка называлась - Sega Mega Drive, а в Америке - Sega Genesis. Реже вы можете встретить расширение 32Х, оно указывает, что игра предназначена для платформы Sega Mega Drive 32Х. Еще реже, можно встретить расширени GG, которое принадлежит Sega Game Gear.
Знак (E) означает, что игра выпущена специально для Европы, а (J) и (U) - для Японии и США. Знак (С) - Китай, (A) - Австралия, (I) - Италия, (F) - Франция, (G) - Германия, (K) - Корея.
Знак [b] - плохой дамп (копия). Плохие дампы часто получаются при неудачной попытке снять образ с катриджа. Например, плохой контакт в разъеме картриджа может привести к плохому дампу. Часто люди занимающиеся дампингом игр ленятся проверить качество полученного рома, это и является основной причиной появления плохих дампов в сети.
Знак [f] - игра была исправлена некоторым образом, чтобы лучше запускаться на копировальном устройстве или эмуляторе.
Знак [h] - что-то в таком роме не совсем так, как должно было быть. Часто такой ром просто имеет измененный заголовок или дает возможность запускать игру в различных регионах. Иногда такие ромы содержат интро релизных групп, некий вид читинга или просто прикольный хак (измененные текстуры в игре и т.п.).
Знак [o] - означает, что образ рома содержит больше информации, чем есть в оригинальном картридже. Такой ром может быть вполне работоспособным и чаще всего отличается от качественного рома только размером.
Знак [p] - этот код обозначает, что игра была выпущена пиратами. Часто в таких ромах присутствуют разнообразные хаки или множество модификации одной и той же игры.
Знак [!] - это очень хорошо, он означает "хороший дамп", т.е. ром оригинален и был правильно скопирован с носителя (например с картриджа).
Знак [x] - неверная контрольная сумма рома. Такие ромы могут не работать с эмуляторами.
Знак (Unl) - игра с таким кодом не была выпущена фирмой производителем в качестве лицензионной версии. Часто ромы с таким кодом содержат бета-версии никогда официально не выпускавшихся игр.
Знак (-) - год выпуска не известен.
Знак [c] - такой код означает, что картридж содержит верную контрольную сумму.
Знак [t] - это специальный код, который запускается перед началом игры. Он позволяет обмануть, добавить в нее вечные жизни, переключить уровни и т.д.
В 1987 году персональные 16-битные компьютеры показывали себя не с лучшей стороны. В тоже время Nintendo имела 95% процентов рынка США и 92 % в Японии со своим NES. Sega осознала что дальнейшее борьба Master System с NES бесполезна…
Использование 16-битных технологий со своих игровых автоматов для Sega подходило как нельзя кстати. И тогда же руководство компании решает, что настала пора внедрить эти технологии и в домашние приставки…Компания решила разработать новую 16-битную консоль на основе System-16 позаимствованную у игровых автоматов. Рабочее название консоли было MK 1601, но это название быстро отклонили, так как для грамотного маркетинга оно абсолютно не подходило. Тогда же было придумано новое название хорошо знакомое нам, а именно Mega Drive. В США консоль не смогли назвать тем же именем, так как посторонняя, не имеющая к играм компания зарегистрировала это название. И поэтому в штатах консоль назвали Genesis.
Также в то время к выходу готовился конкурент Mega Drive – PC Engine (Turbo Grafx-16) и Sega было чего опасаться так как за этой приставкой стояла довольно крупная и богатая компания NEC. Запуск PC Engine состоялся 30 октября 1987 года в Японии и не произвёл особого фурора, также как и запуск Mega Drive годом позже 29 октября 1988 года…Но это только поначалу.
Вскоре, 9 января 1989 года Sega объявила дату американского релиза первой по настоящему 16-битной системы так как другие 16-битки до этого официально в штаты не поставлялись, дата была назначена на 14 августа 1989 (только в Лос-Анджелесе и Нью-Йорке) года и цена на консоль составляла 190$,в остальные города США консоль поступила месяцем позже 15 сентября.
Европейский релиз произошёл как всегда в последнюю очередь 30 ноября 1990 года. Первым делом консоль поступила в продажу в Великобритании (так как в этой стране был популярен Master System) по цене в 190 фунтов. Также в 1990 году консоль поступила в продажу в Австралии.
Вскоре геймеры стали замечать, что на их новую консоль выходит слишком много портов с игровых автоматов и ни одного по настоящему убойного хита они не наблюдают. Несмотря ни на что к середине 1990 года продажи приставки в одной только Северной Америке достигли 1.000.000 экземпляров. Тем временем Nintendo стала понимать, что Sega стала отбирать у них клиентов и Nintendo зашевелилась. Она также стала разрабатывать новую 16-битную консоль (кстати их Famicom (NES) изначально тоже планировался 16-битным, но для 1983 года это было бы безумно дорого и от этой затеи отказались) Super Famicom и уже 21 ноября 1990 года новая консоль появляется в Японии. В США она выходит, под названием Super Nintendo, 1 сентября 1991 года. Война 16-битных приставок началась!
Чтобы дать отпор Nintendo, Sega должна была срочно изобрести какой-нибудь нестандартный ход и этот ход был найден в лице всем нам известного синего ежика. Это был гениальнейшая идея, просто поразительная графика, бешеный темп игры, запоминающийся герой все это вкупе с прекраснейшим маркетингом приставки просто вознесли Sega на пьедестал почёта. Продажи взлетели.
1992-1993 годы были лучшими в истории компании. Все усилия потраченные на рекламу, продвижение окупились сполна, каждый ребёнок мечтал иметь дома консоль от Sega. Выходило множество хитов, сторонние разработчики игр также охотно поддерживали Mega Drive.
В тоже время было выпущено дополнение к Mega Drive, приставка с CD-приводом которая носила название Mega CD (Sega CD). В 1993 году выходит видоизменённый Mega Drive имевший более стильный дизайн, и отсутствие входа для наушников. В то время Sega лидировала на рынке Северной Америке и могла позволить себе такие эксперименты.
Все эти дополнение, в лице Mega CD, уже не были так уж хороши для стоящего на дворе 1994 года, также сказалась скупость на их рекламном бюджете и вследствие этого продажи Mega CD оставались удручающи малыми. Далее сомнительные эксперименты были продолжены новым подопытным стал 32-X, расширение для оригинального Mega Drive позволяющее сделать её 32-х битной. Также постоянно возникали споры и разногласия между Японским и Американским отделением компании, всё это не могло не сказаться на имидже компании.
И ко всему прочему по Америке развернулась борьба с насилием, которое присутствовало на консолях от Sega, и если Nintendo как-то ограждала детей от жестких сцен, то Sega из игр абсолютно ничего не вырезала. Вспомнить хотя бы историю с выходом Mortal Combat который был выпущен на Mega Drive в оригинальном варианте, то есть с морем крови и кровавыми Fatality, а на Super Nintendo вышел вариант игры для детей “дошкольного” возраста без малейшего намека на какую-то там либо кровь в игре. Чтобы попытаться восстановить уважение к компании ввела VRC (некий совет по оценке игр который присваивал игре определённый ценз возраста играющего) и это несколько разрядило ситуацию с общественностью.
Но доля рынка занимаемого компанией продолжала падать, всего лишь за год Sega упала с 65% занятости рынка до 35%. Также в это время заявляют о выходе своих новых консолей такие гиганты как Sony и Nintendo. Sega крайне нуждалась в новой консоли, чтобы остаться на рынке консолей и им стал Saturn (но это другая история).
В 1996 году Sega объявила, что прекратит поддержку Mega Drive, для того чтобы полностью сконцентрироваться на разработке новой консоли Saturn. Это было не самое лучшее решение компании, люди купившие Mega Drive посчитали себя обманутыми…
Mega drive продержался до 1998 года дольше всего в Европе. Также до 1998 года Genesis имел просто феноменальный успех в Бразилии где занимал 75% рынка всех консолей.
По всему миру за всё время существования приставки было выпущено огромное количество клонов этой приставки
Mega Drive действительно оставил свой след в истории как самая коммерчески успешная в истории Sega консоль и просто любимая многим геймерами планеты приставка.
Plane B — плоскость фона. Отображает тайловую графику при помощи тайловых карт.
Plane A — плоскость переднего плана. Отображает тайловую графику при помощи тайловых карт. Window subplane — подплоскость для Plane A, графика которой не скроллится с остальной плоскостью.
Каждая строка тайлов рендерится столбец за столбцом. Тайлы на каждой плоскости могут иметь приоритет: высокий или низкий.
Тайлы для спрайта, отрендеренные в обычном формате (4x4 тайла)
1 спрайтовая плоскость
Отрисовывает спрайтовую тайловую графику.
Внутри консоли спрайты рендерятся в обратном порядке, т.е. каждый столбец тайлов рендерится по строкам.
Спрайты располагаются в виртуальном пространстве 512x512 пикселей, где координаты (128,128) совпадают с верхним левым углом телеэкрана.
Genesis одновременно может отображать на экране до 80 аппаратных спрайтовGenesis может отображать примерно 20 спрайтов в одной растровой строке, при большем количества возникают проблемы с переполнением спрайтов и они перестают отображаться.
Для аппаратных спрайтов размеры ограничены (w x h), где w — ширина, h — высота, принимающие значения 1-4 тайла.
Спрайты больше размеров аппаратных спрайтов можно получить при помощи нескольких спрайтов.
Как и в случае с плоскостями, тайлы для спрайтов могут иметь низкий или высокий приоритет. Спрайты с низким приоритетом отображаются под тайлами с высоким приоритетом других слоёв. (На самом деле всё немного сложнее, но в целом концепция такова).
Тайлы для спрайта внутри консоли рендерятся в спрайтовом формате (перемещённые и размером 4x4 тайла)
Наглядное представление приоритета слоёв плоскостей
Источник: Genesis Software Manual
VDP CRAM ("Color RAM" — «цветовое ОЗУ»)
4 строки палитр, в каждой из которых 16 цветов
Каждый цвет имеет глубину 4bpp (4 бита на пиксель)
Первый цвет — это прозрачный цвет графики тайлов
Строки палитр могут рендериться в слегка более светлых или тёмных цветах при включении режимов highlight или shadow
Sega Genesis имеет 2 плоскости тайловых карт: плоскость фона («Plane B») и плоскость переднего плана («Plane A»). В зависимости от типа машины (NTSC или PAL) и используемого видеорежима (H40 или H32), полноэкранная тайловая карта будет занимать в ширину 32 или 40 тайлов и в высоту 28 или 30 тайлов. Каждый тайл состоит из изображения размером 8x8 пикселя, а каждый пиксель соответствует индексу цвета (0-15). Строго говоря, window plane является подплоскостью Plane A; её графика не скроллится с остальной частью Plane A. Плоскости можно использовать множеством разных способов, например, для полноэкранных слоёв переднего плана и фона, или для техники, которой знамениты многие игры для Sega Genesis: параллаксного скроллинга. Выполняя скроллинг отдельных строк тайлов на плоскостях с разной скоростью, можно создать иллюзию глубины. Тайлы на тайловых картах разных плоскостей могут иметь параметр приоритета: высокого или низкого. Этот параметр определяет, где должны отображаться спрайты (которые тоже имеют высокий или низкий приоритет), под тайлом, или над ним.
VSRAM (Video Scroll RAM — видеопамять скроллинга)
Слои Plane A и Plane B могут иметь тайловые карты плоскостей скроллинга размером (w x h), где w — ширина в тайлах, h — высота в тайлах. Каждый из размеров может быть равен только 32, 64, или 128 тайлам. Эти плоскости скроллинга «прокручиваются внутрь/наружу» активного разрешения экрана (размер определяется типом машины и режимом H32/H40). Плоскости скроллинга размерами 128x64/64x128 и 128x128 недопустимы. По умолчанию части VRAM по стандартным адресам VRAM 0xC000 и 0xE000 отображаются как «мусорные тайлы», но на самом деле каждый пиксель в этих «мусорных тайлах» компактным образом кодирует тайловую карту VSRAM. Пользователь никогда не должен записывать в эти «мусорные тайлы» настоящие тайлы, иначе возникнут странные графические баги/сбои, замедления, или мусорные тайлы начнут отображаться на плоскостях скроллинга. Плоскости могут использовать 1 из 3 режимов скроллинга: по растровой строке, по тайлу, или по блоку (секции из 2x2 тайлов). Каждая плоскость может скроллиться одновременно по горизонтали и вертикали.
Тайлы одновременно могут использовать только 1 из 4 строк палитр. Каждая строка палитры содержит 16 цветов. Первый цвет зарезервирован под прозрачный цвет, который рекомендуется делать розовым (255,0,255) (RGB). Чтобы сохранять в игре целостность стиля, для отдельных элементов можно выделить 1 или 2 палитры. Например, строка палитры 1 может использоваться для персонажа игрока, а строка палитры 2 — для элементов UI. Для отрисовки врагов, фонов и других изменяющихся элементов можно использовать различные палитры.
Для оптимального использования цвета на этом скриншоте применяется две палитры, по одной для каждого слоя плоскости тайловых карт. Два первых изображения — это отдельные слои (Plane B и Plane A), а третье — готовое полноэкранное изображение, на котором обе плоскости объединены. Так как каждый тайл одновременно может использовать индексированные цвета только из одной строки палитры, применение такой схемы изображения с двумя плоскостями позволяет обеспечить количество цветов, недоступное для изображения с одной плоскостью.
Существуют две популярные техники работы с палитрами — циклическая смена палитр (palette cycling) и растровые эффекты (raster effects). Благодаря смене цвета определённых элементов в отдельной строке палитры каждые несколько кадров можно реализовать такие эффекты, как водопад, пульсирующее освещение, и так далее.
Пример эффекта циклической смены палитр для мерцающих полос Берсерка в Zombie Football League
Растровые эффекты заменяют все или некоторые цвета строки палитры после определённой растровой строки. Мы не будем подробно рассматривать эту технику, но по сути она заключается в замене части всех цветов CRAM после прохождения электронного луча телевизора определённой горизонтальной строки развёртки. Эта техника полезна для реализации смены палитр для объектов, находящихся под водой. В частности, она используется для подводных цветов уровня Labyrinth Zone в игре Sonic the Hedgehog.
Спрайты
Спрайт позы Эшли из Coffee Crisis
Спрайты в Sega Genesis задаются как изображения с размером (w x h), где w — ширина в тайлах, а h — высота в тайлах, которые могут принимать значения 1-4 тайлов. Каждый спрайт одновременно может использовать только одну строку палитры. Аппаратные спрайты могут иметь максимальный размер 4x4 тайлов. Sega Genesis может обрабатывать до 80 экранных спрайтов, по 20 спрайтов на одну растровую строку, однако чтобы избегать тормозов, лучше не достигать этого предела. Чтобы обойти ограничение на размеры аппаратных спрайтов, многие игры используют несколько спрайтов, собирая из них одного персонажа/объект. Принцип создания классического пиксель-арта заключается в том, чтобы выбрать достаточно большое разрешение для обеспечения нужной детализации и читаемости изображения, но достаточно малое, чтобы его можно было легко анимировать. Вся графика тайлов Sega Genesis всегда должна делиться на 8 пикселей, чтобы соответствовать размерам тайлов. Спрайты могут зеркально отображаться по горизонтали («hflip») и/или по вертикали («vflip»), а также иметь флаг высокого или низкого приоритета. Этот параметр определяет, должен и спрайт отображаться под или над тайлами других плоскостей (которые также имеют параметр высокого или низкого приоритета). Аппаратные спрайты также могут иметь значение «link»; каждый спрайт должен иметь собственное уникальное значение link. Среди прочего, оно влияет на отрисовку: спрайты с низкими значениями link отрисовываются поверх спрайтов с высокими значениями link.
Анимация
Бегущий бронированный минотавр-футболист из Zombie Football League
В большинстве игр графика анимируется, а не является простыми статичными спрайтами. Постепенно изменяя кадры спрайтов, можно создать иллюзию движения, и использовать её для отображения ходьбы, атак и так далее. Художникам игр для Sega Genesis необходимо было помнить о количестве спрайтов и тайлов каждой анимации, чтобы слишком большое количество не привело к замедлению игры. Создание анимации спрайтов часто превращается в поиск компромисса между стремлением к низкому количеству спрайтов и созданием убедительного движения; особенно это относится к анимациям на Sega Genesis.
Сегодня среди разработчиков ROM-хаков Sonic the Hedgehog распространена техника под названием "Dynamic Pattern Load Cues" (DPLC). Она заключается в динамической загрузке тайлов для спрайтов во VRAM на лету вместо хранения всех тайлов для кадров спрайтов во VRAM одновременно. Очень часто детализированные спрайты (например, спрайты главного героя), занимают слишком большое количество тайлов во VRAM, используемых для кадров спрайтов. Если загружать в видеопамять только те тайлы, которые необходимы для текущего отрисовываемого кадра спрайта, можно экономить ограниченную память VRAM и занять её другой тайловой графикой. К сожалению, тайлы, используемые для DPLC, необходимо распаковывать в ROM, чтобы загрузка во VRAM была быстрой и не замедляла игру. (Распаковка сжатой графики тратит ресурсы процессора и занимает слишком много его циклов.) Функции спрайтового движка SGDK (в файле заголовка ) обычно используют техники DPLC для вырезания неиспользуемых тайлов.
Рекомендуемые инструменты для отладки и создания графики
Поиск хорошего ПО для создания ретро-графики, разделения пиксель-арта на тайлы и снижение количества цветов до 4bpp может оказатся сложной задачей. Ниже представлен список рекомендуемого ПО для создания ретро-графики, а также специализированных эмуляторов, позволяющих пользователю изучать содержимое VRAM и плоскостей.
Игры для SEGA GENESIS, которые стоит изучить
Существует множество красивых игр для Sega Genesis, из которых можно почерпнуть различные техники и спецэффекты. В том числе:
Это документ, написанный мной в 1995 году, когда я работал над первой игрой студии Neversoft: Skeleton Warriors. Это была первая игра, в которой я не использовал язык ассемблера 68K.
Фото сделано примерно в то время. Комплект разработчика (dev kit) («Small Box» и ICE) стоит справа от меня.
Состояние игры
В представленном ниже документе вкратце описывается состояние кода Skeleton Warriors для Sega Saturn, а также упоминаются некоторые из множества аспектов, которые нужно было ещё сделать.
Документ нужен был, чтобы ускорить Дэну, Кену и Джеймсу знакомство с уже готовым кодом, объяснить им назначение каждого модуля и взаимодействие между ними. Также он позволил мне оценить печальное состояние этого кода, и, надеюсь, заставил меня взяться за ум.
Также я немного рассказываю о встраивании данных (файлы .GOV и .GOB) в программу, и о том, что мы будем делать в будущем.
Оборудование для разработки
Наша целевая платформа — Sega Saturn, имеющая два Risc-микропроцессора SH2 и один 68000. Пока мы используем только основной процессор Master SH2, вспомогательный slave SH2 будет использоваться, когда мы разберёмся, как это сделать. 68000 применяется для управления звуковым чипом, нам не пришлось писать для него код, потому что он будет использовать предоставленную Sega звуковую библиотеку.
Программа почти целиком написана на чистом C. Мы используем компилятор GNU SH2 для получения выходного ассемблера SH2. В коде есть несколько модулей SH2, в которых в основном находятся исключительно данные. Пока я не написал ничего значимого на SH2.
В качестве системы разработки мы пользуемся PsyQ. Это не стандартная система разработки Sega, однако все, кто с ней работал, считают её лучшей. Альтернативой ей является SNASM, созданная принадлежащей Sega студии Cross Products. Основная часть поставляемых Sega примеров кода должна работать в системе разработки SNASM, но легко конвертируется под PsyQ.
Система PsyQ состоит из платы интерфейса SCSI, которая устанавливается в PC, картриджа, вставляемого в Saturn и соединяющего их кабеля. Исходники компилируются на PC и скачиватся на Saturn, где и запускается программа. Код можно отлаживать с PC.
Система разработки PsyQ
Связь контролируется резидентной программой (PSYBIOS), обрабатывающей коммуникации между машинами. Это позволяет консоли Saturn загружать файлы с PC почти так же, как она загружала бы их с CD. Мы используем эту функцию для загрузки файлов каждого уровня.
У меня в комнате есть пара больших и громких ящиков, а ещё два PC. Меньший из двух ящиков — это E7000PC, являющийся встроенным эмулятором SH2. Он помогает разобраться, где вылетает программа, если отладчик PsyQ её не остановил. Также он полезен для отслеживания записи в память, но пока я почти не пользовался этой функцией.
Второй из громких ящиков — это нечто под названием «Small Box» (первый «Large Box» был размерами примерно с небольшой холодильник). По сути это Saturn с дополнительными интерфейсами для E7000 и эмулятора CD. На передней панели у него есть переключатели ID стран и переключатель между PAL и NTSC.
Внутри второго компьютера находится эмулятор CD — большая плата, благодаря которой жёсткий диск компьютера притворяется CD-приводом. В нём можно собрать образ CD и эмулировать его в реальном времени, чтобы посмотреть, как будет выглядеть игра, когда доберётся до настоящего CD. Эмулятор более-менее работает, хотя у него есть некоторые проблемы, над решением которых мы сейчас работаем вместе с Sega.
Dev kit самой компании Sega
Компилирование и компоновка
Общая сборка готовой программы управляется одним makefile: MAKEFILE.MAK. Он содержит зависимости и целевые объекты для всего проекта, в том числе компиляцию файлов .GOB и .GOV.
Отдельные модули исходного кода C (файлы .C) компилируются программой CCSH в объектные модули SH2 (.OBJ). Она сначала вызывает препроцессор GNU C под названием CPPSH (находится в C:\GNUSH2\BIN), затем вызывает CC1SH для его выходных данных, чтобы создать ассемблерный код SH2, и, наконец, вызывает ASSH (в C:\PSYQ) для сборки его в готовый объектный формат.
Мы не используем C++, потому что мне сказали, что он создаёт огромные объектные файлы. Однако я не работал с ним, можете поэкспериментировать.
Несколько файлов на языке ассемблера SH2 (с расширением .S) просто собираются при помощи ASMSH напрямую в файлы .OBJ (это не то же самое, что ASSH, а более сложный макроассемблер). В настоящее время они используются только для встраивания данных, и не содержат машинно-зависимого кода.
ОЗУ Saturn, в которое можно загружать код, разделено на два блока по 1МБ. Один начинается по адресу $06000000, а другой — по $00200000. Блок по адресу $00200000 используется исключительно для хранения графики главного персонажа. Код программы записывается по адресу $06010000 (первые $10000 байт используются для системного пространства, стека и тому подобного.)
Код позиционно-зависимый и компилируется так, чтобы выполняться по этому конкретному адресу ($06010000) и никак иначе.
Файлы .OBJ компонуются вместе при помощи программы PSYLINK для создания файла MAIN.CPE — исполняемой программы с небольшим заголовком, который можно скачать в Saturn командой RUN. PSYLINK использует файл TEST.LNK для указания того, какие файлы .OBJ нужно включать и куда их помещать.
Данные
Игра разбита на несколько уровней, во многих уровнях используются одинаковые данные, но в основном они для каждого уровня свои. Все данные для каждого уровня собираются в два огромных файла .GOV и .GOB. (в случае шахты это MINE.GOV и MINE.GOB). Файл GOV содержит короткий заголовок, а затем идут все данные, которые должны находиться в видеопамяти. Файл .GOB содержит все данные, которые должны находиться в ОЗУ.
Уровень состоит из части показанных ниже файлов данных.
.SSQ — файл секвенсора спрайтов
.SBM — файл битовой карты, используемый для битовых фонов
.MAP — обе карты для заполняемых символами фонов.
.TIL — тайлсеты и палитры для заполняемых символами фонов.
.PTH — данные точек дороги и триггеров.
.TEX — текстуры для дороги.
Файлы .SSQ и .SBM созданы моим становящимся всё более неудобным секвенсором «SEQ». Файлы .MAP, .TIL, .PTH и .TEX созданы становящимся всё более потрясающим редактором карт «TULE», написанного Дэном.
Эти файлы при помощи ассемблера ASMSH собираются в соответствующие файлы .GOV и .GOB. Чтобы посмотреть, как это делается, см. файлы LEVEL.S и LEVEL1.S. В файл .GOV также включается часть данных конкретного уровня.
Модули
TEST.S — ничего особенного, задаёт несколько меток.
MAIN.C — верхний уровень программы. Содержит инициализацию оборудования, настройку уровней, код прохождения уровней и различные другие мелкие элементы, которые на самом деле стоило бы поместить в более подходящие модули. В нём довольно много мусора, потому что в этот модуль проще всего добавлять что-то новое для быстрого тестирования. Содержит код загрузки с CD или файлового сервера на PC. Содержит флаг для включения и отключения цветных полос TIMING.
GFXLIB.C — различные процедуры для доступа к оборудованию и выполнения различных графических функций. Почти все они написаны с нуля Дэном и часто очень неэффективны. Если вы часто используете процедуру отсюда, то неплохо было бы взглянуть, что она делает и написать более быструю версию в своём коде.
Тем не менее, все функции работают и обеспечивают превосходный фреймворк для черновой реализации и тестирования. Поблагодарим Дэна, без него это было бы невозможно.
SMP_PAD.C — различные процедуры для считывания с джойстика Saturn, очень зависимые от оборудования.
GLOBALS.C — все глобальные переменные и несколько общих функций. Использование глобальных переменных — приемлемая практика программирования. Однако по различным причинам реализация глобальных переменных в SH2 довольно медленная, поэтому со временем я возможно преобразую часть в глобальные структуры, если понадобится. Содержит переменные, описывающие состояние MAN и PATH.
MAN.C — обрабатывает движение и отображение человека (Prince Lightstar, Talyn, Guardian или Grimskull — персонажа, которым управляет игрок). Пока это в основном логика движения и коллизий с дорогой. Кроме того, он обеспечивает соответствующую анимацию для каждого действия. Тут ещё нужно сделать много работы.
OB.C — обрабатывает движение и отображение объектов в игре, в особенности объектов врагов, например, воинов-скелетов и маленьких инопланетян. Здесь программируется основная часть геймплея: вражеский ИИ, основные движения и срабатывание триггеров. Структура данных готова ещё не полностью, в частности, не совсем проработаны проблемы с коллизиями и анимацией. Предстоит ещё куча работы.
DATA.S — различные таблицы, в настоящее время в основном анимации основных персонажей игрока.
LAYER.C — скроллинг фонов с параллаксом. Обновляет состоящие из символов фоны и скроллит битовые карты. Также выполняет скроллинг линий (эффект волн) в слое тумана. Пока таблицы для слоёв карт символов хранятся без сжатия. Их нужно сжать в формат RLE, который я использовал для версии на Genesis. Эта задача может перейти к Кену, если мы получим систему разработки под Saturn раньше, чем для Sony.
PAL.C — палитра. Можно выбирать из 2048 цветов. Любой пиксель на экране может быть одного из этих цветов. Я логичным образом разделил палитру на восемь палитр по 256 цветов. В PAL.C содержится код для их инициализации, подготовки и код для их циклической смены. Также им понадобится затемнение и более сложная циклическая смена, а также вспышки яркости и т.д.
BUL.C — примитивная система для обработки снарядов (бросок меча, удар рукой, выстреливаемые из рук ракеты и т.д.) как отдельных объектов. По-прежнему требуется довольно много работы для более сложного использования снарядов. Также нужен правильный код коллизий и анимаций.
PAD.C — простой модуль для запоминания состояния джойстика в более удобном формате. Запоминает, была ли недавно нажата кнопка, и нажата ли она сейчас.
START.C — одна строка, сообщающая, какой уровень будет первым, для простоты его смены в командном файле.
PANEL.C — простые процедуры для вывода полоски силы.
PATH.C — чудовищные процедуры для отрисовки дороги, а также обработки коллизий с дорогой.
MATH.C — простые синус, косинус и поворот точки на угол.
[Обновление] Вот пример кода из MAN.C. Всё жёстко прописано в коде и ссылается на глобальную структуру данных Man. Куча прописанных в коде чисел.
OB.C разросся до чудовищного файла из 9000 строк, в которые включены все паттерны поведений отдельных объектов в игре. Также там есть огромное количество прописанных в коде чисел, например таких:
Неприятное зрелище. Такой стиль кода пришёл из времён, когда игры были очень маленькими и наработал я его при работе с 68K.
Краткая история игровой приставки Sega Mega Drive в России. Появление, краткие технические характеристики, особенности,выпущенные игры и влияние на игровую индустрию в стране.
реклама
«- Саня-а! Саня-а! - кричал белобрысый пацан, сидящий на мощном велике "Салют" с хулиганскими "трещотками" на колёсах и обмотанным синей изолентой рулём. Рядом с ним, под окнами типовой хрущёвки, июньским утром субботы, на потрёпанном "Орлёнке" с глубоко презираемой "девчачьей" рамой, сидел Мишка, по кличке Сопля. У Мишки даже летом из носа всегда текли сопли, за что он почти каждый день страдал от насмешек сверстников. Да и от друзей тоже перепадало.
- Чо? - сказала конопатая физиономия Саньки, высунувшаяся из открытого с третьей попытки окна второго этажа.
- Гулять пойдёшь?- щурясь, крикнул белобрысый Миха.
реклама
- Не, я потом. Ща не могу. - с озабоченным видом ответил Санька.
- Как хотел! Мы на карьере, если чо. - сказал Миха и под треск почтовых открыток, прижатых бельевыми прищепками к вилке, скрылся вместе с Соплёй в известном направлении».
Сопля и Миха ещё не знали, что вчера вечером типичное и пока ещё счастливое постсоветское детство Саньки оказалось под угрозой — мама с папой подарили ему многострадально выклянченную Sega Mega Drive! Позже они пожалеют об этом, неустанно высказывая Саньке про "посаженые" кинескоп и зрение.
В 1988 японская компания Sega явила миру 16-битную игровую приставку Mega Drive. Годом позже она начала продаваться под именем Genesis в США. Название было изменено из-за невозможности зарегистрировать в США торговую марку Mega Drive. Еще через год приставка начала своё шествие по странам Европы. В России же консоль начала появляться лишь с 1994 года. Мы, как всегда, никуда не торопились.
реклама
Sega Mega Drive - это успешная и массовая игровая приставка своего времени. Стать "хитом всех времен" в нашей стране ей помешала довольно высокая цена, как на саму консоль, так и игры к ней. Приставка привнесла графику нового уровня, от которой испытывали "вау-эффект" все, кому посчастливилось впервые лицезреть её в действии. Правда для этого нужно было запустить на ней игру ААА-уровня (как бы выразились сейчас). Простенькие 2D игры мало чем отличались от игр на том же Dendy, который стал для россиян входным билетом в мир видеоигр на телевизионных приставках.
В отличие от Dendy, приставки Mega Drive поступали в нашу страну по легальным каналам. Это сказалось на их стоимости. Но и качество «Сег» было лучше многих клонов Dendy. В комплекте с приставкой шел лишь один джойстик с тремя основными игровыми кнопками. Раньше все геймпады называли джойстиками! В дальнейшем появились более компактные приставки Sega Mega Drive 2 (вариант Genesis) c двумя “шестикнопочными» джойстиками. Никаких акселерометров, датчиков давления и прочих «наворотов» в джойстиках в те времена не существовало и в помине, но геймеры отчаянно размахивали ими и давили кнопки со всей силы, как будто от этого что-то зависело. А в гоночных играх самые погрузившиеся в виртуальную реальность качались всем телом на каждом повороте. Мозг сам имитировал инерцию и другие законы физики. И даже не нужно было его об этом просить.
реклама
Подключалась приставка к телевизору при помощи провода с так называемыми «колокольчиками» (rca кабель). Невероятного качества фантастическая картинка достигалась за счёт вывода цвета из палитры 512 цветов при разрешении экрана 320x240 пикселей.
Сами игры продавались на картриджах. «Спиратить» или переписать у друга их было невозможно. Оставалось только меняться. Причём игры для обмена должны были быть равноценными. Никто не стал бы менять какого-нибудь «Пакмана» на «Алладина». Ну только если на время и только хороший друг. В магазинах, где продавали «сеги» и игры к ним, всегда стояла кучка подростков, которые как загипнотизированные часами смотрели на демо-режим какого-нибудь «Mortal Combat».
Но время шло и обладателями «Сег» становилось всё большее количество постсоветских детей. Парк игр расширялся. Возможности обмена увеличивались. Причём большинство картриджей для американского региона «Genesis» нормально запускались и на наших «сегах». Позже, для приставки Mega Drive было выпущено множество устройств для апгрейда. Был даже считыватель компакт-дисков - Sega CD. Но скажу честно, у нас их вряд ли кто-то видел. В то время наскрести на картридж было уже невероятным счастьем для большинства геймеров.
«Может хватит уже, что там с играми?» – спросит читатель. Да, игры. Это самое главное. После того, как Dendy избаловала россиян цветной графикой, в которой на квадрате из 8х8 пикселей было больше двух цветов, в отличие от ZX Spectrum, казалось бы, Mega Drive не предлагает особого прорыва. Разрешение не сильно выше, чем у Dendy, цветов всего в 8 раз больше. Но не видеокартой единой тогда жили игры. Более мощный микропроцессор делал движения игровых персонажей более плавными и разнообразными, а игровой мир более насыщенным. Звуковое сопровождение поднялось на новый уровень. После двух-трёх кадровых движений персонажей, более статичного мира и бедного звука на Dendy, именно эти качества вызывали тот самый вышеупомянутый эффект «Вау!». Правда вместо «Вау!» дети и молодёжь тогда говорили несколько иные слова.
Конечно, у каждого геймера свой «лавлист» игр.
Я приведу ТОП-10 игр на Sega Mega Drive. Не то чтобы это мой топ, это скорее те игры, от которых «тащились» большинство геймеров тогда. Естественно, тех геймеров, которых я знал. Ведь интернета у нас не было и круг общения был невелик.
10. The Lion King.
Знаменитая эпопея про львиного котёнка. В описании не нуждается.
9. The Lost Vikings.
Приключения трёх викингов, обладающих разными навыками (а вы думали откуда в Trine эта идея?). Для достижения цели и преодоления всех препятствий требовалось научиться правильно использовать навыки всех трех скандинавов. Очень затягивающая игра. Кажется, я прошел её до конца.
8. Comix Zone
Самому мне в неё поиграть не посчастливилось, но слышал что очень интересно.
7. Urban Strike
Отличная псевдотрёхмерная игра, где вы управляете вертолётом и выполняете опасные задания. Существовало несколько частей этой игры. Прошёл их все.
6. Zero Tolerance
Моё первое знакомство с трёхмерной графикой и шутерами в стиле DOOM. Вы находитесь в многоэтажном здании и у вас есть ответственное задание – убить всех. Игра затягивала на много часов и дней. Но в ней было пустовато и одиноко порой.
5. Red Zone
Чрезвычайно захватывающая игра, в которой «русский» маньяк-полковник, захватив ядерный арсенал, угрожает западной демократии. Командос должны остановить его. Ничего не напоминает? В игре были очень классные графические эффекты. Геймплей был нов для меня. Ведь в игре можно было управлять и вертолетом и человечками. И даже был сюжет из более, чем одного предложения. А заставка! Она была потрясающая! Настоящий короткий видеоролик, от которого мурашки прям прыгали с кожи. Так зарождались "свидетели графона".
4. Aladdin
История воришки. Её знают все. В игре была потрясающая анимация персонажей и мультяшная графика с элементами юмора.
3. Mortal Kombat II
Фаталити! Что тут ещё скажешь.
2. Earthworm Jim 2
История червяка-супергероя, который надыбал супер скафандр и пошел устанавливать свои порядки. Ставлю эту игру в ряд с Аладдином по анимации и потрясающей графике.
1. Лучшая игра на Sega Mega Drive.
Это место я оставлю вакантным. Пусть каждый, кто тепло и с благодарностью вспоминает легендарную Sega Mega Drive, которая принесла столько радости и злости, насытила детство и опустошило его одновременно — поставит сюда свою игру!
Подпишитесь на наш канал в Яндекс.Дзен или telegram-канал @overclockers_news - это удобные способы следить за новыми материалами на сайте. С картинками, расширенными описаниями и без рекламы.
Читайте также: