Help - Search - Member List - Calendar
Full Version: Реактивное введение в программирование под GBA
GBX.ru > Карманные игровые системы > Game Boy > GB: Программирование
Pages: 1, 2
aa-dav
Столкнувшись сам несколько дней назад с отсутствием русских вменяемых введений в предмет на днях решил создать некую очень короткую и сжатую, но по возможности достаточно полную для начала программирования реальной игры вводную в программирование под GBA.
Начал делать это тут: http://antistupd.livejournal.com/842.html

При этом цель не состоит в обучении программированию - напротив, целевая аудитория уже должно хорошо знать C/C++ и представлять себе архитектуру компьютера, что такое память, указатели в неё, зачем нужен volatile и т.п.

Два вопроса:
- нужно ли? есть ли еще интересующиеся темой?
- (потому что возможно, что) есть ли уже проделанная такая же работа? (сам не нашёл)
MoonTurtle
может и не прав, но мне кажется что это нафиг не нужно.
Делать абы сделать, для мертвой платформы...
Есть энтузиасты которые пишут сеговские 16 битные игры, видел их поделки, мне не зашло.
Профита не получить, опыт сомнителен, применение ...
Писать игру на си , сейчас так делают? вроде не тренд.

А вообще как хош так и раби и дэвай что хош, только бы прикалывало.
aa-dav
QUOTE (MoonTurtle @ Thursday, 20 April 2017, 11:12)

Писать игру на си , сейчас так делают? вроде не тренд.


Я там во введении сразу же и написал, что GBA обладает интересным соотношением в архитектуре.
ЦП мейнстримовый 32-битный ARM, поэтому свободно можно писать код на C/C++ и не парится - компилятор обычный GCC, никаких заморочек нет, связанных с необходимостью шпарить на ассемблере или прикладывать бит к биту как на микроконтроллерах или тех же 16-битках.
Но при этом он обладает всеми характерными особенностями аппаратуры 16-битных консолей - особенно это касается программирования видеоадаптера, сами выполняемые действия, спрайты, фоновые задники и регистры их сдвига - всё это ровно то, чем занимались бессчисленные геймдевелоперы на широчайшем классе консолей былых лет, от NES и выше.

Поэтому для меня лично это именно что "прикоснуться к тому чем дышали раньше", но уже достаточно простое, чтобы мозги не закипали.

Почти все мощные игры пишутся на C++ сейчас. Наиболее часто распространён подход, когда ядро движка на нём написано для дого чтобы давить самый мощный графон, в то же время присутствует скриптовый или околоскриптовый интерфейс для логики, аддонов и в целом ускорения разработки.
DUX
QUOTE (aa-dav @ Thursday, 20 April 2017, 11:39)

Я там во введении сразу же и написал, что GBA обладает интересным соотношением в архитектуре.
ЦП мейнстримовый 32-битный ARM, поэтому свободно можно писать код на C/C++ и не парится - компилятор обычный GCC, никаких заморочек нет, связанных с необходимостью шпарить на ассемблере или прикладывать бит к биту как на микроконтроллерах или тех же 16-битках.
Но при этом он обладает всеми характерными особенностями аппаратуры 16-битных консолей - особенно это касается программирования видеоадаптера, сами выполняемые действия, спрайты, фоновые задники и регистры их сдвига - всё это ровно то, чем занимались бессчисленные геймдевелоперы на широчайшем классе консолей былых лет, от NES и выше.

Поэтому для меня лично это именно что "прикоснуться к тому чем дышали раньше", но уже достаточно простое, чтобы мозги не закипали.

Почти все мощные игры пишутся на C++ сейчас. Наиболее часто распространён подход, когда ядро движка на нём написано для дого чтобы давить самый мощный графон, в то же время присутствует скриптовый или околоскриптовый интерфейс для логики, аддонов и в целом ускорения разработки.
*

Ну, если наклепаете контр, кастельваний и марио

Добавлено спустя 50 секунд:
Хочу Контру Operation C на 2 игрока
MoonTurtle
QUOTE (aa-dav @ Thursday, 20 April 2017, 11:39)

Я там во введении сразу же и написал, что GBA обладает интересным соотношением в архитектуре.
ЦП мейнстримовый 32-битный ARM, поэтому свободно можно писать код на C/C++ и не парится - компилятор обычный GCC, никаких заморочек нет, связанных с необходимостью шпарить на ассемблере или прикладывать бит к биту как на микроконтроллерах или тех же 16-битках.
Но при этом он обладает всеми характерными особенностями аппаратуры 16-битных консолей - особенно это касается программирования видеоадаптера, сами выполняемые действия, спрайты, фоновые задники и регистры их сдвига - всё это ровно то, чем занимались бессчисленные геймдевелоперы на широчайшем классе консолей былых лет, от NES и выше.

Поэтому для меня лично это именно что "прикоснуться к тому чем дышали раньше", но уже достаточно простое, чтобы мозги не закипали.

Почти все мощные игры пишутся на C++ сейчас. Наиболее часто распространён подход, когда ядро движка на нём написано для дого чтобы давить самый мощный графон, в то же время присутствует скриптовый или околоскриптовый интерфейс для логики, аддонов и в целом ускорения разработки.
*
[/quote

не в этом дело, то что арм и так понятно.

ты будеш писать и скрипты и движок. ихмо зачем изобретать велосидед, я про движок, если игра не в стиле атари то будет сложно и долго добиться норм эффекта.
Возьми к примеру в сравнение фьюжн, гэйммэйкер, юнити или рпг мэйкер на худой конец. Там можно сконцентрироваться на игре а не движке...
Есть еще прикольная тема pico8.


Платформа не популярна.
я не говорю что си плох, просто с нуля писать игры на нем не эффективно.
aa-dav
А у кого-нибудь тут есть возможность заливать на какой-нибудь Flash-картридж образы *.gba и запускать их на настоящем аппаратном (не эмуляторе) Game Boy Advance?
Просто накопилось несколько тестовых примеров уроков (уже написал 6 частей по ссылке в первом сообщении) и хотелось бы проверить хотя бы дистанционно насколько они адекватно ведут себя на настоящем железе. На эмуляторе конечно же проверено - на нём всё нормально. Спрайтики всякие вращаются да фоны летают, типа такого.
Boris
Тема интересная, спасибо! Надо срочно купить флэху, с удовольствием буду тестировать ваши разработки. На чем пишете то?
dimm0505
QUOTE (MoonTurtle @ Thursday, 20 April 2017, 21:01)

Платформа не популярна.
я не говорю что си плох, просто с нуля писать игры на нем не эффективно.
*

А что из высокоуровневых языков может быть более эффективным чем С для GBA? =))) Платформа очень интересна с точки зрения первого опыта, имеет крайне низкий порог вхождения, создано несколько (!) IDE для разработки. Сцена и форум еще живы:
http://gbadev.org/

QUOTE (aa-dav @ Tuesday, 23 May 2017, 17:54)

А у кого-нибудь тут есть возможность заливать на какой-нибудь Flash-картридж образы *.gba и запускать их на настоящем аппаратном (не эмуляторе) Game Boy Advance?
Просто накопилось несколько тестовых примеров уроков (уже написал 6 частей по ссылке в первом сообщении) и хотелось бы проверить хотя бы дистанционно насколько они адекватно ведут себя на настоящем железе. На эмуляторе конечно же проверено - на нём всё нормально. Спрайтики всякие вращаются да фоны летают, типа такого.
*

Лет 10 назад пробовал кодить в Visual HAM-е, очень мошная вещь была, можете попробовать, здесь есть версия 2.7:
https://www.zophar.net/utilities/gbadev/ham.html
А вообще самая последняя версия ХАМа была 2.80 вроде бы.
Насчет теста твоих прог. Есть GBA SP и Gameboy Micro, где то флэшкарик EZ-Flash IV валяется. Есть еще EZFlash V для NDS, на ней тоже можно попробовать. Так что при случае могу проверить твои "примеры". Только давай в формате *.gba.
aa-dav
Сейчас запаковал текущее состояние проекта так сказать, и с исходниками и вместе с уже собранными образами GBA сюда: http://www.gamedev.ru/files/?id=125957
Там помимо прочего есть файл "Описания примеров.txt" и в нём написано какой пример как должен себя вести и на какие кнопки реагировать.
Буду признателен за отчёт о полевых испытаниях на реальном железе.

Я лично делаю даже не в средах компиляции, а прямо в командной строке и FAR-е фигачу, но это мой бзик. Поэтому там инструкции как завести с *.bat-файла (даже не make, а тупо батник, т.к. некогда даже на это заморачиваться).
Использую GNU C/C++ (под Windows) сборку под GBA.
В первых уроках использовал древнюю как окаменелое гэ мамонта Dev Kit Advance (2003 год сборки), но с 6-ой (и на пока последней) части перешёл на свежий и пахнущий розами Dev Kit Pro - там тоже всё есть как установить и через те же *.bat файлы компилировать.

Наверное будет составлять определенную проблему то, что я как раз без всяких сред и IDE фигачу - для новичков не очень удобно.
dimm0505
Качнул, попробую в ближайшие 2-3 дня "на риале".
dimm0505
Запускается все, но вот только что там должно быть - непонятно.
5_scroll_bg.gba вроде что-то толковое, управляется стрелками и тп.
А там где спрайты мне кажется, что они некорректно отображаются (как будто они из точек состоят). Мне кажется спрайты там другие должны быть. Как будто какие-то тайминги некорректные. Было бы неплохо, чтобы ты по каждой проге дал краткое описание (что она должна делать) и скрин из эмуля (как это должно все выглядеть по твоей задумке). Ну а так все запустилось на реальном GBA SP =))
aa-dav
Спасибо большое! Да, похоже что всё верно работает. Описание что там и как должно работать словами содержится в текстовой файле "Описание примеров.txt", там написано примерно что должно быть на экране и на какие кнопки и как оно должно реагировать по каждому из примеров.

Спрайты и фоны действительно "никакие" по одной простой причине - это примеры и чтобы максимально их упростить всё необходимое содержится прямо в коде программы, что исключает сложные битмапы и красивые рисунки.
dimm0505
QUOTE (aa-dav @ Wednesday, 24 May 2017, 22:31)

Спасибо большое! Да, похоже что всё верно работает. Описание что там и как должно работать словами содержится в текстовой файле "Описание примеров.txt", там написано примерно что должно быть на экране и на какие кнопки и как оно должно реагировать по каждому из примеров.

Спрайты и фоны действительно "никакие" по одной простой причине - это примеры и чтобы максимально их упростить всё необходимое содержится прямо в коде программы, что исключает сложные битмапы и красивые рисунки.
*

Ну тогда поздравляю, все запустилось, правда я забыл по запарке 8_intrs.gba запустить =))
aa-dav
Ну отлично. Большое спасибо! Просьба еще, если уже этого не делали, потом как будет время - прочитать всё таки "Описание примеров.txt" по каждому примеру и сверить реакцию на кнопки с тем что там написано. Написать, если где-то будут отличия.
Номера перед примерами это названия глав из ссылки в первопосте. Таким образом каждый пример рассматривает по очереди те или иные аспекты железа - фоны обычные, спрайты, спрайты вращающиеся, фоны вращающиеся, таймеры, прерывания, и т.п. Сейчас осталось изучить и написать на русском у себя про генерацию звука и в общем то этот цикл обучалок будет завершен. Единственное что не смогу охватить наверное важного для создания игры - это перезаписываемая память в катридже для сохранений. А так вроде всё что нужно для какой нибудь зельды охвачено. Очень забавная действительно система с нижайшим порогом вхождения, основное описание "API" на 200 строк всего лишь С-кода. smile.gif
Gashik
С сохранением ничего сложного. Была библиотека, которая создавала файл srm заданного объема и сохраняла значение любых заданных переменных. Две строчки текста, если правильно помню.
Прикольное ты дело затеял smile.gif я пробовал когда-то в HAM, все получилось без опыта программирования.
hqqddy
aa-dav тебе бы железку купить за недорого с флешкой или для мелких хомбрюх кабель запилить для заливки, на лпт был такой, я делал, помнится. А вообще, какой-то проект есть или просто так инересно?
aa-dav
QUOTE (hqqddy @ Friday, 26 May 2017, 18:20)

aa-dav тебе бы железку купить...
*


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

=== 2 ALL ===

Порылся, кстати, насчёт savegame-ов, действительно всё не так уж и трудно. На деле самый примитивный SRAM на батарейке программно выглядит как просто 32Кб памяти по определенному адресу. Нужно только соблюдать одно правило - побайтовый доступ к ней. В самом обстоятельном руководстве еще написано, что при чтении код выполняющий чтение из SRAM должен находится в WRAM - это вот заметное усложнение, но в других руководствах и даже примерах это требование игнорируется. На эмуляторе элементарный тест работает, но через еще одну хитрость - т.к. картридж никак не отчитывается перед системой о наличии SRAM, просто при её отсутсвии запись в эту область памяти будет проигнорирована, а чтение вернет мусор, то эмулятору нужно как то сообщить - и сообщается очень просто - достаточно в ROM-е иметь строку "SRAM_Vnnn" в любом месте, начиная с адреса кратного 4-м. Это воспринимается эмулятором как сигнал, что надо имитировать SRAM. На деле такие строчки действительно, как я понял, остаются в коде при использовании тулчейнов от самого Нинтендо, хотя для реального картриджа это совершенно необязательно.
Вот когда звук доделаю наверное подобью в один пакет с ним еще тест записи/эмуляции SRAM - тут уже вопрос как эмулирует его тот чип в который образ прошивается - потянет или нет, вот это тоже будет любопытно посмотреть...
MichaelForExample
А почему на гитхабе репо не создать? Хоть следить было бы удобнее.
aa-dav
Когда будет законченная версия и каждая строчка будет еще раз перечитана - тогда я перевыложу куда-нибудь в более адресное место, скорее всего gamedev.ru. Гитхаб не знаю нужен ли, просто архив с исходниками и текстом будет достаточно мне кажется.
MichaelForExample
QUOTE (aa-dav @ Saturday, 27 May 2017, 19:38)

Когда будет законченная версия и каждая строчка будет еще раз перечитана - тогда я перевыложу куда-нибудь в более адресное место, скорее всего gamedev.ru. Гитхаб не знаю нужен ли, просто архив с исходниками и текстом будет достаточно мне кажется.
*

Ну неужели лишний пуш сделать в ремут ветку трудно?
Просто интересно смотреть именно на эволюцию, может кто и подключился бы заодно.
УльтраБлокС
Я бы сказал так - игры пишутся в основном на "C с классами" всё-таки. Ибо современный C++ с его умными указателями уже практически позволяет писать код в стиле Java и ко, можно даже сборку мусора организовать. И тормозить это дело тоже будет хорошо.
aa-dav
QUOTE (MichaelForExample @ Вчера, 20:05)

Просто интересно смотреть именно на эволюцию
*


Да ну, имхо тут это совершенно не нужно. Просто объёмистая статья с несколькими исходниками-уроками, зачем тут видеть эволюцию и эволюцию чего даже? Эволюция это каждая следующая глава в настоящий момент, они и так пишутся отдельно в виде статей в жж. В самом конце же еще перепишу скорее всего начало под новый SDK на который перешел с 8-ой главы и в общем то всё.
aa-dav
Вновь прошу проверить на настоящем GBA тест воспроизведения звука: http://www.gamedev.ru/files/?id=126261

Ожидаемое поведение:
По нажатию на кнопку "START" должен включится небольшой зацикленный фрагмент музыки, "SELECT" музыку отключает.
Нажатия кнопок ВВЕРХ/ВПРАВО/ВНИЗ каждая по отдельности запускает свой отсчёт 1-2-3-4-5 голосом, они должны накладываться. Нажатие ВЛЕВО запускает однократное воспроизведение того же фрагмента выше.

При воспроизведении этих звуков как по отдельности так и вместе не должно быть слышно щелчков и подобных "помарок".

Но очень интересно подолбить подряд раз 40 быстро на кнопку "A" и оценить не появятся ли шелчки уже при обычном воспроизведении, а так же нажать (однократно) в разных местах кнопку "B" - она устраивает "стресс-тест" и после неё я ожидал, что воспроизведение испортится (всё) до перезагрузки рома. Но на эмуляторе почему то всё нормально.
hqqddy
Все работает. Стресс-тест не вешает ром, срабатывает только по нажатии, но потом все ок.
aa-dav
QUOTE (hqqddy @ Wednesday, 07 June 2017, 16:06)

Все работает. Стресс-тест не вешает ром, срабатывает только по нажатии, но потом все ок.
*


Большое спасибо! Это радует, значит осталось совсем чуть-чуть.
В связи с этим оставшимся "чуть-чуть" возник заранее просто вопрос - flash-картридж он же поддерживает сохранения игр (перезаписываемый ROM в оригинальных картриджах) как то совсем бесшовно - или при прошивке образа на него надо что-то указывать или дополнительно делать? Просто следующий и наверное последний тест будет как раз про сохранение игр, но это попозже, интересно как это выглядит с точки зрения аппаратуры.
Gashik
провалится smile.gif многие флешки как-раз патчат ром в части сейв-файла. У меня на SuperCard SD не запускался с сейвом.
aa-dav
Ну всё, дописал цикл эти уроков, обрамил оглавлением и дал все нужные ссылки http://antistupd.livejournal.com/842.html

Большая опять просьба - проверить на реальном GBA последний пример - из архива https://yadi.sk/d/hTiV6uUB3K8Adq взять последний скомпилированный образ - 11_sram.gba.

Описание что должно происходить и как реагировать на нажатия кнопок:

Это экран из черных и белых квадратиков над которым мы можем (DPad-ом) водить курсором. Нажатие кнопки ( A ) окрашивает клетку под курсором в белый, а ( B ) - в чёрный цвет. Нажатие START окрашивает все клетки чёрным, нажатие же ( R ) сохраняет карту клеток в SRAM, а ( L ) - загружает из неё.

Собственно "порисовать" что-нибудь, сохранить ®, выключить GBA, вытащить флеш-картридж, потом всё включить обратно и нажать ( L ) - должно восстановится сохранённое состояние клеток.
hqqddy
Не работает сейв/восстановление. По крайней мере, на EDGBA. На нем удобно сейвы контроллировать мигание диода. Так вот нет.
aa-dav
Хмм... Жалко что не всё так просто, но там этого стоило ожидать. Т.к. в образах картриджей просто нет по нормальному информации о дополнительных чипах на картридже, а видов ППЗУ для сохранения с разным интерфейсом общения не менее трёх, то те же софтовые эмуляторы либо поддерживают БД игр откуда берут информацию о том как ожидать от игры сохранения, либо сканируют образ игры на предмет встречи специфичных маркеров - что мною и было использовано. Логично ожидать, что у flash-картриджа возможности в этом смысле будут ограничены. Это на самом деле даже интересно, как удовлетворить железку и выйти на 100%-ую аппаратную совместимость...
Я реализовал (причём не совсем на 100% удовлетворяя спецификациям от no$gba) механизм сохранения в SRAM на батарейке. Есть еще EEPROM, но это дичь, и 2 варианта Flash-памяти. Подозреваю, что с последним у аппараток наверное будет меньше проблем - ведь они сами и есть Flash-ки, но 2 варианта несовместимы, поэтому гхм...
Хотелось бы ради продолжения исследований уточнить:
1) EDGBA - не гуглится совсем никак - что это за девайс в полном наименовании?
2) перечень из нескольких (чем больше тем лучше) игр с которыми сохранения у него точно работают.
3) если есть противоположный опыт - он тоже крайне интересен - перечень игр с которыми сохранения у него не работают.
Если у кого то есть другие Flash-картриджи - всё так же интересна работоспособность уже имеющейся демки выше и если она не работает - ответы на эти же вопросы. Заранее благодарен.
hqqddy
Ну это я сократил. EverDrive GBA
http://krikzz.com/store/home/42-everdrive-gba-x5.html
Игры совместимы если не все, то почти все. Полного списка нет. Т.ч. берите любую с типом сейвера, который вам интересен.
aa-dav
QUOTE (hqqddy @ Вчера, 22:04)

Т.ч. берите любую с типом сейвера, который вам интересен.
*


Читаю вот здесь https://gbatemp.net/review/everdrive-gba-x5.489/ и вижу, что написано, что в меню выбора игр можно как раз выбирать тип сохранения используемой в игре. Вы пробовали играться этим параметром? (тип памяти используемой демкой - SRAM, 32Кб)
hqqddy
Я совсем на это не посмотрел. Как-то поигрался в свое вермя и забыл. Никогда не было необходимости. Да, все работает, SRAM.
aa-dav
QUOTE (hqqddy @ Saturday, 17 June 2017, 00:44)

Я совсем на это не посмотрел. Как-то поигрался в свое вермя и забыл. Никогда не было необходимости. Да, все работает, SRAM.
*


Отличные новости!!! smile.gif Спасибо за тестирование! Dreams come true как говорится. smile.gif
По меньшей мере на одном flash-Картридже всё работает, значит верным путём идём, товарищи. lol.gif
Если у кого-то есть другие типы картриджей - всегда любопытно и их проверить на совместимость.
hqqddy
aa-dav как руки до SuperCard дотянутся, я проверю. но думаю, что все и так ок.
подскажите, как пропатчить ром на тип сейвера? PDшный ром, использует стандартный sram. При запуске в эмуле или при выборе типа сейвера в EverDrive все ок. Но при открытии рома тулзой типа GBATA тип сейвера не определяется. Вручную в хексе что на что заменить?
aa-dav
QUOTE (hqqddy @ Monday, 19 June 2017, 06:39)

aa-dav как руки до SuperCard дотянутся, я проверю. но думаю, что все и так ок.
подскажите, как пропатчить ром на тип сейвера? PDшный ром, использует стандартный sram. При запуске в эмуле или при выборе типа сейвера в EverDrive все ок. Но при открытии рома тулзой типа GBATA тип сейвера не определяется. Вручную в хексе что на что заменить?
*


Мне остаётся только процитировать сабжевый туториал, часть про сохранения: http://antistupd.livejournal.com/3580.html

QUOTE

...
Однако просто начать писать и читать байты в адреса 0xE000000-0xE007FFF недостаточно. Дело в том что все остальные виды перезаписываемой памяти в GBA мапятся тоже на эти же адреса, но с другим интерфейсом, а заголовок картриджа не содержит никаких отметок о том какой тип перезаписываемой памяти используется. Игра просто знает сама какой чип находится в картридже и записывает в него данные нужным способом. С настоящим картриджем естественно никаких проблем это не вызывает, а вот нам придётся предпринять еще один шаг.
Дело в том, что эта проблема актуальна и для эмуляторов GBA и их разработчики подметили, что картриджи созданные с использованием официального SDK от Nintendo как правило содержат небольшие строчки помогающие идентифицировать чип сохранений:
EEPROM_Vnnn для EEPROM 512 байт или 8 Кб
SRAM_Vnnn для SRAM 32 Кб
FLASH_Vnnn для FLASH 64 Кб
FLASH512_Vnnn для FLASH 64 Кб (в новых картриджах)
FLASH1M_Vnnn для FLASH 128 Кб
Эти строчки должны располагаться по адресам кратным 4, а их длина тоже должна быть кратна 4 байтам (с заливкой нулями остатка). Официальные утилиты Nintendo как правило вставляют вместо 'nnn' цифры версий, но нам лучше так и оставлять их как 'nnn'.
Поэтому всё что нам остаётся сделать - это вставить в программу static массив из char с текстом "SRAM_Vnnn" и убедиться, что оптимизатор не выкинет его из финального образа.
...


Больше никакой информации о сохранениях в ROM-е быть не может, но даже эти строчки не дают 100%-ой гарантии, потому что в некоторых образах они не присутствуют или присутствуют сразу несколько. Поэтому большинство эмуляторов кроме анализа файла на маркеры всё-таки содержат базу данных игр (код игры прописывается обязательно в заголовке - в первой сотне байт картриджа) и ориентируются на неё. Последним можно тоже попытаться сманипулировать - прошить код известной игры с нужным типом сохранения, вот и все возможные варианты.
Формат заголовка можно посмотреть тут http://problemkaputt.de/gbatek.htm#gbacartridges
0A0h 12 Game Title (uppercase ascii, max 12 characters)
0ACh 4 Game Code (uppercase ascii, 4 characters)
hqqddy
Спасибо. Помогло не очень, но интерес был спортивный. При указании сейвера вручную все работет нормально. Но просветили малость.
aa-dav
Как нынче говорят - тизер. Кто вспомнит с какой платформы и что? smile.gif
» Нажмите, для открытия спойлера «
hqqddy
Четно, не имею понятия. Что мутите? Игру?
aa-dav
Да на денди была такая Contra Force, сегодня повыдирал из первого уровня тайлов, можно уже карту делать.

Добавлено спустя 1 час 5 минут:
Назову Contra Force Advance, понатырил уже прилично тайлов из первого уровня Contra Force с NES:

user posted image

Это получается задел под скроллящийся задник - "параллакс", чего в денди не было.
Какой то неимоверной крутизны не обещаю - постараюсь максимально сохранить геймплей и оформление, но сделать новые уровни. Скорее всего будет долгострой, так как много времени нет.
hqqddy
А, щас вспомнил. Но в нее не часто играли, она из Контр как-то особняком стоит.
aa-dav
QUOTE (hqqddy @ Сегодня, 00:51)

Но в нее не часто играли
*


Да, сейчас когда вспоминают про игры с денди её редко кто вспоминает в контексте "лучших боевиков", что на мой взгляд есть ужасная несправедливость. У игры, имхо, просто нет полных аналогов в плане сочетания геймплея и сеттинга - это самый настоящий "Call of Duty: Modern ..." тех лет. Графон и сеттинг "под реал" и надо сказать отменнейший графон, даже приводящий иногда к просадкам фпс (!). Сейчас вот сканировал когда первый уровень снова вспомнил как много там платформерных разнообразий - и обваливающиеся и ездящие платформы, и вентиляторы и катящиеся бочки и тот же погрузчик, пытающийся надеть на шипы, наклонные плоскости, прогулки по крыльями самолётов под шквалом ветра и т.п. и т.д. Во всех аспектах игра есть triple A.
Единственное - это должна была быть игра с другим названием - Arc Hound, но её из маркетинговых соображений переименовали в контру. Что в общем то не умаляет ни капли, имхо.
По геймплею отличия с классическими контрами действительно минимальны - враги спавнятся только попадают на экран, а не бесконечно бегут со всех сторон, и выбор оружия происходит осознанно, со специализацией по четырём героям, а не просто что прилетело с неба то и прилетело.
В общем на мой взгляд совершенно незаслуженно забытый шедевр.
И если классические контры портировали куда не лень, то про эту действительно быстренько забыли почти сразу же.
Вот этот момент я и собираюсь немного исправить.
hqqddy
Круто. Дрезайте)
aa-dav
Получено разрешение на использование каверов фоновой музыки из Contra Force от нашего соотечественника: http://darkman007.untergrund.net/covers.php
Gashik
Крутяк! Если получится, можно в конце нанять художника, чтобы перерисовал графику.
aa-dav
Готова технодемка Contra Force Advance:

Закачиваем образ картриджа с технодемой Contra Force Advance отсюда: https://yadi.sk/d/WqH7C9ya3KTLow

Поле можно скроллить туда-сюда во всех четырёх направлениях, зажатие бампера ® приводит к ускорению перемещения.
Напоминаю, что за замечательный трек надо благодарить DarkMan007: http://darkman007.untergrund.net/covers.php

Скрин:
user posted image

Добавлено спустя 2 дня 18 часов 21 минуту:
Немного скриншотов процесса снятия копий спрайтов.
Муторное довольно дело...


user posted image

user posted image

В верхних половинах изображений массив тайлов как он вшит в память - квадратно-гнездовой.
Снизу примеры того как из этих тайлов игра будет собирать спрайты человечков. Как видно тайлы часто переиспользуются, третья анимация (если считать слева-направо) непися с гранатой это вторая анимация с измененной "спиной" и добавленной сверху рукой.
Ноги и у игроков и у неписей одинаковы, только цвета меняются. В оригинале - подменой палитры, а я решил с палитрой не заморачиваться и делаю просто копии разных расцветок.
aa-dav
Маленький шажок для спрайта, большой шаг для девелопера...

dimm0505
QUOTE (aa-dav @ Saturday, 08 July 2017, 23:38)

Маленький шажок для спрайта, большой шаг для девелопера...


*

Красавчик! Поздравляю, это действительно большой шаг.
aa-dav
QUOTE (dimm0505 @ Sunday, 09 July 2017, 01:31)

Красавчик! Поздравляю, это действительно большой шаг.


Спасибо! Сегодня еще продвинулся

Ох уж эти пиксельные пиксели, довольно забавно как приходится каждый кадр сверять с образцом из эмулятора.
Gashik
Респект! Слежу с удовольствием и жду результатов.
aa-dav
Ностальгическая нотка.

Картридж с Contra Force был жемчужиной моей небольшой коллекции из буквально трех-четырех штук. После развода родителей да еще на фоне кризиса девяностых она прекратила пополняться и замерла на этой печальной цифре вплоть до смены игровой платформы много позднее на ПК.
Если быть совсем точным, то владел я пиратским клоном с названием Super Contra 6.
В недрах интернета нетрудно найти его фото:

user posted image

у меня был у меня точь-в-точь такой же.
Саму игру, поэтому, я зашлифовал до дыр - многократно проходил, ставил рекорды "без потери жизней" и т.п. И естественно мне отчаянно не хватало новых уровней в ней. И я мечтал их раздобыть и мечта эта многократно усиливалась и самой подачей пиратской китайщины, воспетой Кинаманом. Ведь раз у меня была Super Contra 6, то воображение услужливо дорисовывало, что где то есть как минимум 5-ая, 4-ая и 3-я части. В первую контру и супер контру я играл и понимал, что это видимо первые две части, хотя оставалась возможность, что Super Contra 2 была всё-таки отдельной игрой. А могла быть и Super Contra 7 - ведь видно же было, что шлёпают как горячие пирожки.
И вот я перепроходил её на сотый раз, не теряя жизней, с закрытыми глазами и грезил, что где то есть новые уровни, новые лабиринты, закоулки и площадки - вот точно они где-то есть, но не у меня.

Так что не без оснований можно сказать, что сейчас я воплощаю жгучую мечту детства - заполучить новые уровни к этой игре. Даже сразу две мечты - создавать игры для игровой консоли и новые уровни к супер контре 6.
Впервые желание делать компьютерные игры тоже связано с денди. Я даже помню когда и что это было - игра с трудным названием на одной классической многоигровке, которые продавались в комплекте с приставкой - Yie Ar Kung-Fu - простенький файтинг. Там когда побеждаешь всех бойцов первого круга - начинается второй круг с усилением сложности. И когда проходишь каждый круг аватар игрока прыгает и бьёт в гонг, висящий в центре экрана с ноги, отчего раздаётся гулкий звук. И вот в какой то момент я подумал что было бы классно, если бы в очередной раз этот гонг бы отвалился, упал и разбился бы. И я понял что это в принципе теоретически возможно - ведь кто-то сделал саму игру, а значит можно с ней делать и такие вещи. И сама эта возможность замаячила тоже чем то очень интересным, загадочным и манящим.

Добавлено спустя 1 день 6 часов:
Начав делать пули столкнулся с проблемкой - из оригинальной Contra Force выдрать звуки оказалось нереально.
И не могу найти трудов никаких хакеров, которые бы такое сделали бы.
В общем то неудивительно. Кто помнит тот знает, что в той же Super Contra был спец-режим, если зажать какие то кнопки в титульном экране в котором можно было как раз прослушать аудиоэффекты игры. Грабь в своё удовольствие.
Проблема Contra Force же в том, что там ни на секунду не выключается нигде музыка и все звуки "замусорены" оказываются ею - отсюда просто невозможно снять качественные самплы.
Потенциально это можно сделать, если расковырять код игры и хачить образ прямо в эмуляторе - но это уже недосягаемый для меня уровень.
В общем легко нагуглились как раз звуки эффектов из первой Contrsa и Super Contra - так что возьму их для первых опытов, возможно и оставлю.
Жаль, там были аутентичные звучки иногда. Но ладно. Не так уж и часто. В основном типовые шумы.
Давно не брал в руки шашки... то есть С++ и немного удивлён сейчас как быстро разрастается код, модули и текст прут как на дрожжах, по любому поводу.
Одно только управление персонажем это какая то дичь. Все if-case-ы идёт он или приседает, под углом или вертикально - дикое количество кода, ощущение лапши не покидает, уж как ни старался распихивать смещения и по массивам "круговых направлений" для краткости извлечения, но всё равно постоянно лезут исключения и побочные случаи.

Так или иначе, код управляющий персонажем почти готов - остались только веревки по которым можно лазать кажется. Но это потом, в первом уровне оригинала их не было, зато было много чего другого.
Результат на сегодня:

This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.