GBX.ru _ GB: Программирование _ Реактивное введение в программирование под GBA
Автор: aa-dav Четверг, 20 апреля 2017, 10:47
Столкнувшись сам несколько дней назад с отсутствием русских вменяемых введений в предмет на днях решил создать некую очень короткую и сжатую, но по возможности достаточно полную для начала программирования реальной игры вводную в программирование под GBA. Начал делать это тут: http://antistupd.livejournal.com/842.html Исправленный и обновлённый текст потом перевыложил сюда: http://hype.retroscene.org/blog/872.html
При этом цель не состоит в обучении программированию - напротив, целевая аудитория уже должно хорошо знать C/C++ и представлять себе архитектуру компьютера, что такое память, указатели в неё, зачем нужен volatile и т.п.
Два вопроса: - нужно ли? есть ли еще интересующиеся темой? - (потому что возможно, что) есть ли уже проделанная такая же работа? (сам не нашёл)
Автор: MoonTurtle Четверг, 20 апреля 2017, 11:12
может и не прав, но мне кажется что это нафиг не нужно. Делать абы сделать, для мертвой платформы... Есть энтузиасты которые пишут сеговские 16 битные игры, видел их поделки, мне не зашло. Профита не получить, опыт сомнителен, применение ... Писать игру на си , сейчас так делают? вроде не тренд.
А вообще как хош так и раби и дэвай что хош, только бы прикалывало.
Автор: aa-dav Четверг, 20 апреля 2017, 11:39
QUOTE (MoonTurtle @ Четверг, 20 апреля 2017, 11:12)
Писать игру на си , сейчас так делают? вроде не тренд.
Я там во введении сразу же и написал, что GBA обладает интересным соотношением в архитектуре. ЦП мейнстримовый 32-битный ARM, поэтому свободно можно писать код на C/C++ и не парится - компилятор обычный GCC, никаких заморочек нет, связанных с необходимостью шпарить на ассемблере или прикладывать бит к биту как на микроконтроллерах или тех же 16-битках. Но при этом он обладает всеми характерными особенностями аппаратуры 16-битных консолей - особенно это касается программирования видеоадаптера, сами выполняемые действия, спрайты, фоновые задники и регистры их сдвига - всё это ровно то, чем занимались бессчисленные геймдевелоперы на широчайшем классе консолей былых лет, от NES и выше.
Поэтому для меня лично это именно что "прикоснуться к тому чем дышали раньше", но уже достаточно простое, чтобы мозги не закипали.
Почти все мощные игры пишутся на C++ сейчас. Наиболее часто распространён подход, когда ядро движка на нём написано для дого чтобы давить самый мощный графон, в то же время присутствует скриптовый или околоскриптовый интерфейс для логики, аддонов и в целом ускорения разработки.
Автор: DUX Четверг, 20 апреля 2017, 11:59
QUOTE (aa-dav @ Четверг, 20 апреля 2017, 11:39)
Я там во введении сразу же и написал, что GBA обладает интересным соотношением в архитектуре. ЦП мейнстримовый 32-битный ARM, поэтому свободно можно писать код на C/C++ и не парится - компилятор обычный GCC, никаких заморочек нет, связанных с необходимостью шпарить на ассемблере или прикладывать бит к биту как на микроконтроллерах или тех же 16-битках. Но при этом он обладает всеми характерными особенностями аппаратуры 16-битных консолей - особенно это касается программирования видеоадаптера, сами выполняемые действия, спрайты, фоновые задники и регистры их сдвига - всё это ровно то, чем занимались бессчисленные геймдевелоперы на широчайшем классе консолей былых лет, от NES и выше.
Поэтому для меня лично это именно что "прикоснуться к тому чем дышали раньше", но уже достаточно простое, чтобы мозги не закипали.
Почти все мощные игры пишутся на C++ сейчас. Наиболее часто распространён подход, когда ядро движка на нём написано для дого чтобы давить самый мощный графон, в то же время присутствует скриптовый или околоскриптовый интерфейс для логики, аддонов и в целом ускорения разработки.
Ну, если наклепаете контр, кастельваний и марио
Добавлено спустя 50 секунд: Хочу Контру Operation C на 2 игрока
Автор: MoonTurtle Четверг, 20 апреля 2017, 12:01
QUOTE (aa-dav @ Четверг, 20 апреля 2017, 11:39)
Я там во введении сразу же и написал, что GBA обладает интересным соотношением в архитектуре. ЦП мейнстримовый 32-битный ARM, поэтому свободно можно писать код на C/C++ и не парится - компилятор обычный GCC, никаких заморочек нет, связанных с необходимостью шпарить на ассемблере или прикладывать бит к биту как на микроконтроллерах или тех же 16-битках. Но при этом он обладает всеми характерными особенностями аппаратуры 16-битных консолей - особенно это касается программирования видеоадаптера, сами выполняемые действия, спрайты, фоновые задники и регистры их сдвига - всё это ровно то, чем занимались бессчисленные геймдевелоперы на широчайшем классе консолей былых лет, от NES и выше.
Поэтому для меня лично это именно что "прикоснуться к тому чем дышали раньше", но уже достаточно простое, чтобы мозги не закипали.
Почти все мощные игры пишутся на C++ сейчас. Наиболее часто распространён подход, когда ядро движка на нём написано для дого чтобы давить самый мощный графон, в то же время присутствует скриптовый или околоскриптовый интерфейс для логики, аддонов и в целом ускорения разработки.
[/quote
не в этом дело, то что арм и так понятно.
ты будеш писать и скрипты и движок. ихмо зачем изобретать велосидед, я про движок, если игра не в стиле атари то будет сложно и долго добиться норм эффекта. Возьми к примеру в сравнение фьюжн, гэйммэйкер, юнити или рпг мэйкер на худой конец. Там можно сконцентрироваться на игре а не движке... Есть еще прикольная тема pico8.
Платформа не популярна. я не говорю что си плох, просто с нуля писать игры на нем не эффективно.
Автор: aa-dav Вторник, 23 мая 2017, 08:54
А у кого-нибудь тут есть возможность заливать на какой-нибудь Flash-картридж образы *.gba и запускать их на настоящем аппаратном (не эмуляторе) Game Boy Advance? Просто накопилось несколько тестовых примеров уроков (уже написал 6 частей по ссылке в первом сообщении) и хотелось бы проверить хотя бы дистанционно насколько они адекватно ведут себя на настоящем железе. На эмуляторе конечно же проверено - на нём всё нормально. Спрайтики всякие вращаются да фоны летают, типа такого.
Автор: Boris Вторник, 23 мая 2017, 11:09
Тема интересная, спасибо! Надо срочно купить флэху, с удовольствием буду тестировать ваши разработки. На чем пишете то?
Автор: dimm0505 Вторник, 23 мая 2017, 12:59
QUOTE (MoonTurtle @ Четверг, 20 апреля 2017, 21:01)
Платформа не популярна. я не говорю что си плох, просто с нуля писать игры на нем не эффективно.
А что из высокоуровневых языков может быть более эффективным чем С для GBA? =))) Платформа очень интересна с точки зрения первого опыта, имеет крайне низкий порог вхождения, создано несколько (!) IDE для разработки. Сцена и форум еще живы: http://gbadev.org/
QUOTE (aa-dav @ Вторник, 23 мая 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 Вторник, 23 мая 2017, 14:38
Сейчас запаковал текущее состояние проекта так сказать, и с исходниками и вместе с уже собранными образами 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 Вторник, 23 мая 2017, 14:46
Качнул, попробую в ближайшие 2-3 дня "на риале".
Автор: dimm0505 Среда, 24 мая 2017, 12:42
Запускается все, но вот только что там должно быть - непонятно. 5_scroll_bg.gba вроде что-то толковое, управляется стрелками и тп. А там где спрайты мне кажется, что они некорректно отображаются (как будто они из точек состоят). Мне кажется спрайты там другие должны быть. Как будто какие-то тайминги некорректные. Было бы неплохо, чтобы ты по каждой проге дал краткое описание (что она должна делать) и скрин из эмуля (как это должно все выглядеть по твоей задумке). Ну а так все запустилось на реальном GBA SP =))
Автор: aa-dav Среда, 24 мая 2017, 13:31
Спасибо большое! Да, похоже что всё верно работает. Описание что там и как должно работать словами содержится в текстовой файле "Описание примеров.txt", там написано примерно что должно быть на экране и на какие кнопки и как оно должно реагировать по каждому из примеров.
Спрайты и фоны действительно "никакие" по одной простой причине - это примеры и чтобы максимально их упростить всё необходимое содержится прямо в коде программы, что исключает сложные битмапы и красивые рисунки.
Автор: dimm0505 Среда, 24 мая 2017, 13:36
QUOTE (aa-dav @ Среда, 24 мая 2017, 22:31)
Спасибо большое! Да, похоже что всё верно работает. Описание что там и как должно работать словами содержится в текстовой файле "Описание примеров.txt", там написано примерно что должно быть на экране и на какие кнопки и как оно должно реагировать по каждому из примеров.
Спрайты и фоны действительно "никакие" по одной простой причине - это примеры и чтобы максимально их упростить всё необходимое содержится прямо в коде программы, что исключает сложные битмапы и красивые рисунки.
Ну тогда поздравляю, все запустилось, правда я забыл по запарке 8_intrs.gba запустить =))
Автор: aa-dav Среда, 24 мая 2017, 13:44
Ну отлично. Большое спасибо! Просьба еще, если уже этого не делали, потом как будет время - прочитать всё таки "Описание примеров.txt" по каждому примеру и сверить реакцию на кнопки с тем что там написано. Написать, если где-то будут отличия. Номера перед примерами это названия глав из ссылки в первопосте. Таким образом каждый пример рассматривает по очереди те или иные аспекты железа - фоны обычные, спрайты, спрайты вращающиеся, фоны вращающиеся, таймеры, прерывания, и т.п. Сейчас осталось изучить и написать на русском у себя про генерацию звука и в общем то этот цикл обучалок будет завершен. Единственное что не смогу охватить наверное важного для создания игры - это перезаписываемая память в катридже для сохранений. А так вроде всё что нужно для какой нибудь зельды охвачено. Очень забавная действительно система с нижайшим порогом вхождения, основное описание "API" на 200 строк всего лишь С-кода.
Автор: Gashik Среда, 24 мая 2017, 20:58
С сохранением ничего сложного. Была библиотека, которая создавала файл srm заданного объема и сохраняла значение любых заданных переменных. Две строчки текста, если правильно помню. Прикольное ты дело затеял я пробовал когда-то в HAM, все получилось без опыта программирования.
Автор: hqqddy Пятница, 26 мая 2017, 18:20
aa-dav тебе бы железку купить за недорого с флешкой или для мелких хомбрюх кабель запилить для заливки, на лпт был такой, я делал, помнится. А вообще, какой-то проект есть или просто так инересно?
Автор: aa-dav Пятница, 26 мая 2017, 18:51
QUOTE (hqqddy @ Пятница, 26 мая 2017, 18:20)
aa-dav тебе бы железку купить...
Я не железячник, я софтовик. Мне возится с железом как раз неинтересно, не самоцель, а интересно только то, что в принципе реальная работоспособность присутствует у программы. Вообще просто для интереса. На английском литературы много, а на русском ничего не смог найти, вот и решил что пока вникну как да что напишу экспресс-туториал на русском языке с выжимкой всего самого важного, может кому то не знающему английский в будущем пригодится, или по скорости вникания будет быстрее.
=== 2 ALL ===
Порылся, кстати, насчёт savegame-ов, действительно всё не так уж и трудно. На деле самый примитивный SRAM на батарейке программно выглядит как просто 32Кб памяти по определенному адресу. Нужно только соблюдать одно правило - побайтовый доступ к ней. В самом обстоятельном руководстве еще написано, что при чтении код выполняющий чтение из SRAM должен находится в WRAM - это вот заметное усложнение, но в других руководствах и даже примерах это требование игнорируется. На эмуляторе элементарный тест работает, но через еще одну хитрость - т.к. картридж никак не отчитывается перед системой о наличии SRAM, просто при её отсутсвии запись в эту область памяти будет проигнорирована, а чтение вернет мусор, то эмулятору нужно как то сообщить - и сообщается очень просто - достаточно в ROM-е иметь строку "SRAM_Vnnn" в любом месте, начиная с адреса кратного 4-м. Это воспринимается эмулятором как сигнал, что надо имитировать SRAM. На деле такие строчки действительно, как я понял, остаются в коде при использовании тулчейнов от самого Нинтендо, хотя для реального картриджа это совершенно необязательно. Вот когда звук доделаю наверное подобью в один пакет с ним еще тест записи/эмуляции SRAM - тут уже вопрос как эмулирует его тот чип в который образ прошивается - потянет или нет, вот это тоже будет любопытно посмотреть...
Автор: MichaelForExample Пятница, 26 мая 2017, 22:31
А почему на гитхабе репо не создать? Хоть следить было бы удобнее.
Автор: aa-dav Суббота, 27 мая 2017, 18:38
Когда будет законченная версия и каждая строчка будет еще раз перечитана - тогда я перевыложу куда-нибудь в более адресное место, скорее всего gamedev.ru. Гитхаб не знаю нужен ли, просто архив с исходниками и текстом будет достаточно мне кажется.
Автор: MichaelForExample Суббота, 27 мая 2017, 20:05
QUOTE (aa-dav @ Суббота, 27 мая 2017, 19:38)
Когда будет законченная версия и каждая строчка будет еще раз перечитана - тогда я перевыложу куда-нибудь в более адресное место, скорее всего gamedev.ru. Гитхаб не знаю нужен ли, просто архив с исходниками и текстом будет достаточно мне кажется.
Ну неужели лишний пуш сделать в ремут ветку трудно? Просто интересно смотреть именно на эволюцию, может кто и подключился бы заодно.
Автор: УльтраБлокС Суббота, 27 мая 2017, 22:16
Я бы сказал так - игры пишутся в основном на "C с классами" всё-таки. Ибо современный C++ с его умными указателями уже практически позволяет писать код в стиле Java и ко, можно даже сборку мусора организовать. И тормозить это дело тоже будет хорошо.
Автор: aa-dav Воскресенье, 28 мая 2017, 03:40
QUOTE (MichaelForExample @ Вчера, 20:05)
Просто интересно смотреть именно на эволюцию
Да ну, имхо тут это совершенно не нужно. Просто объёмистая статья с несколькими исходниками-уроками, зачем тут видеть эволюцию и эволюцию чего даже? Эволюция это каждая следующая глава в настоящий момент, они и так пишутся отдельно в виде статей в жж. В самом конце же еще перепишу скорее всего начало под новый SDK на который перешел с 8-ой главы и в общем то всё.
Автор: aa-dav Вторник, 06 июня 2017, 11:19
Вновь прошу проверить на настоящем GBA тест воспроизведения звука: http://www.gamedev.ru/files/?id=126261
Ожидаемое поведение: По нажатию на кнопку "START" должен включится небольшой зацикленный фрагмент музыки, "SELECT" музыку отключает. Нажатия кнопок ВВЕРХ/ВПРАВО/ВНИЗ каждая по отдельности запускает свой отсчёт 1-2-3-4-5 голосом, они должны накладываться. Нажатие ВЛЕВО запускает однократное воспроизведение того же фрагмента выше.
При воспроизведении этих звуков как по отдельности так и вместе не должно быть слышно щелчков и подобных "помарок".
Но очень интересно подолбить подряд раз 40 быстро на кнопку "A" и оценить не появятся ли шелчки уже при обычном воспроизведении, а так же нажать (однократно) в разных местах кнопку "B" - она устраивает "стресс-тест" и после неё я ожидал, что воспроизведение испортится (всё) до перезагрузки рома. Но на эмуляторе почему то всё нормально.
Автор: hqqddy Среда, 07 июня 2017, 16:06
Все работает. Стресс-тест не вешает ром, срабатывает только по нажатии, но потом все ок.
Автор: aa-dav Среда, 07 июня 2017, 16:29
QUOTE (hqqddy @ Среда, 07 июня 2017, 16:06)
Все работает. Стресс-тест не вешает ром, срабатывает только по нажатии, но потом все ок.
Большое спасибо! Это радует, значит осталось совсем чуть-чуть. В связи с этим оставшимся "чуть-чуть" возник заранее просто вопрос - flash-картридж он же поддерживает сохранения игр (перезаписываемый ROM в оригинальных картриджах) как то совсем бесшовно - или при прошивке образа на него надо что-то указывать или дополнительно делать? Просто следующий и наверное последний тест будет как раз про сохранение игр, но это попозже, интересно как это выглядит с точки зрения аппаратуры.
Автор: Gashik Среда, 07 июня 2017, 17:00
провалится многие флешки как-раз патчат ром в части сейв-файла. У меня на SuperCard SD не запускался с сейвом.
Автор: aa-dav Четверг, 15 июня 2017, 04:12
Ну всё, дописал цикл эти уроков, обрамил оглавлением и дал все нужные ссылки 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 Пятница, 16 июня 2017, 15:40
Не работает сейв/восстановление. По крайней мере, на EDGBA. На нем удобно сейвы контроллировать мигание диода. Так вот нет.
Автор: aa-dav Пятница, 16 июня 2017, 16:06
Хмм... Жалко что не всё так просто, но там этого стоило ожидать. Т.к. в образах картриджей просто нет по нормальному информации о дополнительных чипах на картридже, а видов ППЗУ для сохранения с разным интерфейсом общения не менее трёх, то те же софтовые эмуляторы либо поддерживают БД игр откуда берут информацию о том как ожидать от игры сохранения, либо сканируют образ игры на предмет встречи специфичных маркеров - что мною и было использовано. Логично ожидать, что у flash-картриджа возможности в этом смысле будут ограничены. Это на самом деле даже интересно, как удовлетворить железку и выйти на 100%-ую аппаратную совместимость... Я реализовал (причём не совсем на 100% удовлетворяя спецификациям от no$gba) механизм сохранения в SRAM на батарейке. Есть еще EEPROM, но это дичь, и 2 варианта Flash-памяти. Подозреваю, что с последним у аппараток наверное будет меньше проблем - ведь они сами и есть Flash-ки, но 2 варианта несовместимы, поэтому гхм... Хотелось бы ради продолжения исследований уточнить: 1) EDGBA - не гуглится совсем никак - что это за девайс в полном наименовании? 2) перечень из нескольких (чем больше тем лучше) игр с которыми сохранения у него точно работают. 3) если есть противоположный опыт - он тоже крайне интересен - перечень игр с которыми сохранения у него не работают. Если у кого то есть другие Flash-картриджи - всё так же интересна работоспособность уже имеющейся демки выше и если она не работает - ответы на эти же вопросы. Заранее благодарен.
Автор: hqqddy Пятница, 16 июня 2017, 22:04
Ну это я сократил. EverDrive GBA http://krikzz.com/store/home/42-everdrive-gba-x5.html Игры совместимы если не все, то почти все. Полного списка нет. Т.ч. берите любую с типом сейвера, который вам интересен.
Автор: aa-dav Суббота, 17 июня 2017, 00:28
QUOTE (hqqddy @ Вчера, 22:04)
Т.ч. берите любую с типом сейвера, который вам интересен.
Читаю вот здесь https://gbatemp.net/review/everdrive-gba-x5.489/ и вижу, что написано, что в меню выбора игр можно как раз выбирать тип сохранения используемой в игре. Вы пробовали играться этим параметром? (тип памяти используемой демкой - SRAM, 32Кб)
Автор: hqqddy Суббота, 17 июня 2017, 00:44
Я совсем на это не посмотрел. Как-то поигрался в свое вермя и забыл. Никогда не было необходимости. Да, все работает, SRAM.
Автор: aa-dav Суббота, 17 июня 2017, 01:10
QUOTE (hqqddy @ Суббота, 17 июня 2017, 00:44)
Я совсем на это не посмотрел. Как-то поигрался в свое вермя и забыл. Никогда не было необходимости. Да, все работает, SRAM.
Отличные новости!!! Спасибо за тестирование! Dreams come true как говорится. По меньшей мере на одном flash-Картридже всё работает, значит верным путём идём, товарищи. Если у кого-то есть другие типы картриджей - всегда любопытно и их проверить на совместимость.
Автор: hqqddy Понедельник, 19 июня 2017, 06:39
aa-dav как руки до SuperCard дотянутся, я проверю. но думаю, что все и так ок. подскажите, как пропатчить ром на тип сейвера? PDшный ром, использует стандартный sram. При запуске в эмуле или при выборе типа сейвера в EverDrive все ок. Но при открытии рома тулзой типа GBATA тип сейвера не определяется. Вручную в хексе что на что заменить?
Автор: aa-dav Понедельник, 19 июня 2017, 11:15
QUOTE (hqqddy @ Понедельник, 19 июня 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 Понедельник, 19 июня 2017, 15:44
Спасибо. Помогло не очень, но интерес был спортивный. При указании сейвера вручную все работет нормально. Но просветили малость.
Автор: aa-dav Суббота, 24 июня 2017, 08:49
Как нынче говорят - тизер. Кто вспомнит с какой платформы и что?
Это получается задел под скроллящийся задник - "параллакс", чего в денди не было. Какой то неимоверной крутизны не обещаю - постараюсь максимально сохранить геймплей и оформление, но сделать новые уровни. Скорее всего будет долгострой, так как много времени нет.
Автор: hqqddy Воскресенье, 25 июня 2017, 00:51
А, щас вспомнил. Но в нее не часто играли, она из Контр как-то особняком стоит.
Автор: aa-dav Воскресенье, 25 июня 2017, 04:41
QUOTE (hqqddy @ Сегодня, 00:51)
Но в нее не часто играли
Да, сейчас когда вспоминают про игры с денди её редко кто вспоминает в контексте "лучших боевиков", что на мой взгляд есть ужасная несправедливость. У игры, имхо, просто нет полных аналогов в плане сочетания геймплея и сеттинга - это самый настоящий "Call of Duty: Modern ..." тех лет. Графон и сеттинг "под реал" и надо сказать отменнейший графон, даже приводящий иногда к просадкам фпс (!). Сейчас вот сканировал когда первый уровень снова вспомнил как много там платформерных разнообразий - и обваливающиеся и ездящие платформы, и вентиляторы и катящиеся бочки и тот же погрузчик, пытающийся надеть на шипы, наклонные плоскости, прогулки по крыльями самолётов под шквалом ветра и т.п. и т.д. Во всех аспектах игра есть triple A. Единственное - это должна была быть игра с другим названием - Arc Hound, но её из маркетинговых соображений переименовали в контру. Что в общем то не умаляет ни капли, имхо. По геймплею отличия с классическими контрами действительно минимальны - враги спавнятся только попадают на экран, а не бесконечно бегут со всех сторон, и выбор оружия происходит осознанно, со специализацией по четырём героям, а не просто что прилетело с неба то и прилетело. В общем на мой взгляд совершенно незаслуженно забытый шедевр. И если классические контры портировали куда не лень, то про эту действительно быстренько забыли почти сразу же. Вот этот момент я и собираюсь немного исправить.
Автор: hqqddy Воскресенье, 25 июня 2017, 12:49
Круто. Дрезайте)
Автор: aa-dav Понедельник, 26 июня 2017, 05:54
Получено разрешение на использование каверов фоновой музыки из Contra Force от нашего соотечественника: http://darkman007.untergrund.net/covers.php
Автор: Gashik Понедельник, 26 июня 2017, 07:52
Крутяк! Если получится, можно в конце нанять художника, чтобы перерисовал графику.
Автор: aa-dav Понедельник, 26 июня 2017, 13:09
Готова технодемка Contra Force Advance:
Закачиваем образ картриджа с технодемой Contra Force Advance отсюда: https://yadi.sk/d/WqH7C9ya3KTLow
Поле можно скроллить туда-сюда во всех четырёх направлениях, зажатие бампера ® приводит к ускорению перемещения. Напоминаю, что за замечательный трек надо благодарить DarkMan007: http://darkman007.untergrund.net/covers.php
В верхних половинах изображений массив тайлов как он вшит в память - квадратно-гнездовой. Снизу примеры того как из этих тайлов игра будет собирать спрайты человечков. Как видно тайлы часто переиспользуются, третья анимация (если считать слева-направо) непися с гранатой это вторая анимация с измененной "спиной" и добавленной сверху рукой. Ноги и у игроков и у неписей одинаковы, только цвета меняются. В оригинале - подменой палитры, а я решил с палитрой не заморачиваться и делаю просто копии разных расцветок.
Автор: aa-dav Суббота, 08 июля 2017, 14:38
Маленький шажок для спрайта, большой шаг для девелопера...
Автор: dimm0505 Воскресенье, 09 июля 2017, 01:31
QUOTE (aa-dav @ Суббота, 08 июля 2017, 23:38)
Маленький шажок для спрайта, большой шаг для девелопера...
Красавчик! Поздравляю, это действительно большой шаг.
Автор: aa-dav Воскресенье, 09 июля 2017, 17:33
QUOTE (dimm0505 @ Воскресенье, 09 июля 2017, 01:31)
Красавчик! Поздравляю, это действительно большой шаг.
Спасибо! Сегодня еще продвинулся
Ох уж эти пиксельные пиксели, довольно забавно как приходится каждый кадр сверять с образцом из эмулятора.
Автор: Gashik Воскресенье, 09 июля 2017, 20:06
Респект! Слежу с удовольствием и жду результатов.
Автор: aa-dav Понедельник, 10 июля 2017, 12:34
Ностальгическая нотка.
Картридж с Contra Force был жемчужиной моей небольшой коллекции из буквально трех-четырех штук. После развода родителей да еще на фоне кризиса девяностых она прекратила пополняться и замерла на этой печальной цифре вплоть до смены игровой платформы много позднее на ПК. Если быть совсем точным, то владел я пиратским клоном с названием Super Contra 6. В недрах интернета нетрудно найти его фото:
у меня был у меня точь-в-точь такой же. Саму игру, поэтому, я зашлифовал до дыр - многократно проходил, ставил рекорды "без потери жизней" и т.п. И естественно мне отчаянно не хватало новых уровней в ней. И я мечтал их раздобыть и мечта эта многократно усиливалась и самой подачей пиратской китайщины, воспетой Кинаманом. Ведь раз у меня была 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-ы идёт он или приседает, под углом или вертикально - дикое количество кода, ощущение лапши не покидает, уж как ни старался распихивать смещения и по массивам "круговых направлений" для краткости извлечения, но всё равно постоянно лезут исключения и побочные случаи.
Так или иначе, код управляющий персонажем почти готов - остались только веревки по которым можно лазать кажется. Но это потом, в первом уровне оригинала их не было, зато было много чего другого. Результат на сегодня:
Автор: hqqddy Вторник, 11 июля 2017, 20:10
К Санчезу обрптитесь cah4e3.shedevr.org.ru думаю он на многое способен.
Автор: aa-dav Среда, 12 июля 2017, 03:35
QUOTE (hqqddy @ Вторник, 11 июля 2017, 20:10)
К Санчезу обрптитесь cah4e3.shedevr.org.ru думаю он на многое способен.
Спасибо! Да там и просто почитать интересно...
Добавлено спустя 1 час 46 минут:
Офигеть. На форуме gamedev.ru, где я тоже выкладываю эти заметки завсегдатай eMan.Lived расковырял в эмуляторе FCEUX оригинальную Contra Force так, что в ней отвалилась вся музыка при сохранении звуковых эффектов: http://www.gamedev.ru/flame/forum/?id=227447&page=3#m42 Такие дела.
Автор: hqqddy Среда, 12 июля 2017, 14:53
А уровни будут новые или сохраненные от НЕС?
Автор: aa-dav Среда, 12 июля 2017, 16:00
QUOTE (hqqddy @ Среда, 12 июля 2017, 14:53)
А уровни будут новые или сохраненные от НЕС?
Новые. Зачем мне старые? Я в них давно уже наигрался.
Ах да... Я же это всё выложу в открытый доступ и любой кто захочет сможет сделать свои уровни. Используются бесплатные редактор: - Tile Ed (itor) для редактирования уровня - Paint.NET для обработки картинок и карт тайлов (24bit BMP) - Audiacity для записи и сохранения звуков в нужном формате (16bit mono PCM WAV).
Периодически обновляемый архив с последним состоянием проекта - уже готовым образом, а так же всеми ресурсами и исходниками буду выкладывать сюда: https://yadi.sk/d/Mb15dr353KsijT Корневая папка это папка от http://antistupd.livejournal.com/842.html, собственно Contra Force Advance так и станет просто комплексным примером в материалах к этому курсу. Инструкции о том что скачать и как запустить можно прочитать там же.
В папке CFA находится собственно проект с CFA. Система сборки так же заделана через адские *.bat-ники для простоты и независимости от внешних утилсов (make из состава DevKitARM отказывается работать без msys, из-за чего я его и не использую, сборка чисто под виндой). В файле devkitpro.bat надо так же поправить путь к DevKitPro. При подключении заголовка gba_defs.h он ссылается просто на папку вверх, так что если будут перемещения, то надо будет поправить это в исходниках CFA. Ресурсы всегда зашиваются сперва в исходники с расширением .inc с просто дефиницией массивов байт или слов и подключаются к проекту на правах обычного исходника таким образом. Для конвертации в исходники звуков создана утилита wav2incl, а для битмапов и карт из открытого редактора Tile Editor - tiles2incl. Они там скомпилированы на банальном mingw32, но есть и в исходниках. Звуки зашиваются в модуль res_sounds запуском make_sounds.bat, а битмапы и карты - res_graphics через make_graphics.bat. Опять таки пути к wav2incl и tiles2incl смотрят наверх в папку уроков. Файл make.bat компилирует уже исходный код самой игры и сшивает со всеми объектниками в готовый образ. Знаю, что рожа просит мейка, но повторюсь, от внешних зависимостей для простоты избавляюсь, а встроенный в DevKitARM тоже не нравится своим подходом.
То есть, для подготовки надо скачать и установить DevKitPro (см. курс введения) и настроить путь к нему в файле devkitpro.bat А дальше: а) если менялись звуки - запустить make_sounds.bat б) если менялись тайлы или уровень - запустить make_graphics.bat в) запустить make.bat Если всё пройдёт без ошибок, то получится образ с игрой. Если окна с выполняющимися командами выше мелькают быстро и исчезают, то можно в конце эти трёх батников прописать команду pause в отдельной строчке, чтобы иметь возможность подробно рассматривать не возникало ли ошибок.
В общем пока еще время не наступило - когда доведу всё до ума напишу большое обстоятельное введение как и что для потенциальных желающих добавить или развить в своё. Конечно же смысл в новых уровнях - благо TileEd позволяет их клепать с удивительной лёгкостью. Если возникнут вопросы по содержимому архива - спрашивайте. Потому что делать свои уровни можно уже сейчас - человечек уже сможет даже по ним пробежать. Единственное пока уровень будет статичен, но заготовку на будущее уже можно делать. Посмотреть можно на map01 в комплекте (файл с расширением tmx) - это в Tile Editor надо открывать. Если будет непонятно что и как там делать - могу пояснить.
Автор: hqqddy Среда, 12 июля 2017, 16:49
QUOTE (aa-dav @ Среда, 12 июля 2017, 16:00)
Новые. Зачем мне старые? Я в них давно уже наигрался.
Допилил утилиту по перегонке данных из редактора карт TileEd в исходники на C. Выше фрагмент кодогенерации с данными двух монстров для десериализации. Ну собственно сейчас буду писать эту самую десериализацию в кишках Game Boy Advance. Огромный перерыв в прогрессе сабжевого начинания вызван огромным прогрессом в личной жизни, так что не теряйте и не думайте что проект затих. Хобби даст ист хобби. Невердай, неверенд. Просто семейные обстоятельства.
Автор: aa-dav Суббота, 28 октября 2017, 20:15
Положил начало загрузке действующих лиц (акторов) из данных TileEd, первых (еще недоделанных) врагов и реакцию их на попадание оружием. Снял видео где еще показал как выглядит редактирование уровня в новых реалиях:
Смотреть лучше в развёрнутом на полный экран виде.
Автор: aa-dav Понедельник, 04 декабря 2017, 06:24
Они научились убегать от неприятностей:
P.S.
На самом деле с последнего ролика было сделано достаточно много - объекты выстроились в space-partitioned список (sweep&prune), получили возможность проверять быстро ближайших соседей, на всём поле может быть любое разумное количество объектов, но в списке активных будут находится только необходимые. Числа в левом-верхнем углу как раз мониторят такие величины. T - полное количество объектов L - сколько объектов находится на поле A - сколько объектов активно (обрабатываются к движению и отрисовке) W - сколько раз объекты поля менялись парно местами в списке чтобы он продолжал быть упорядоченным Например объект-пуля теперь так проверяет не попала ли она в кого-то:
CODE
// такая форма ActorsRange итерирует по тем кто прикасается к объекту в this // и при этом принадлежит "сторонам конфликта" в битовой маске targets for ( auto it: ActorsRange( this, targets ) ) { it->takeDamage( 60 ); markDeleted(); // пометить себя к подчистке return; };
Автор: zarkone Понедельник, 04 декабря 2017, 10:46
офигенски! давно хотел поиграть в Contra Force на железе, да чтобы не тормозило, поэтому тоже плюсую за воссоздание оригинальных уровней. У меня есть 2 разных гба и ds lite, все с флешками, т.е могу проверять. Ну и жду ссылку куда-нибудь на гитхаб\гитлаб\etс, т.к. немного писал на С и С++, возможно чем-то смогу помочь
Автор: aa-dav Понедельник, 04 декабря 2017, 13:25
QUOTE (zarkone @ Сегодня, 10:46)
Ну и жду ссылку куда-нибудь на гитхаб\гитлаб\etс, т.к. немного писал на С и С++, возможно чем-то смогу помочь
Вот тут тема где немного больше программистской информации: http://www.gamedev.ru/flame/forum/?id=227447 А вот здесь: https://yadi.sk/d/djA-upj1-oc1hA всегда лежит архив с последним состоянием проекта. В нём есть папка CFA в ней в !!!readme!!!.txt инструкция что скачать чтобы можно было самому что-то делать, менять уровень, даже модифицировать код игры. Это был есть и будет опенсорц, так что в принципе единственное что я за собой сейчас хочу сохранить - это приоритет в написании исходного кода - я этим наслаждаюсь. С другой стороны какие то ответвления или новые уровни - да без проблем. Если хочется быстрой реакции в обсуждениях по разработке, то лучше зарегистрироваться на gamedev.ru и писать в тему туда, сюда я больше как бы для пользователей девайсов пишу, самих игроков, заглядываю реже, а разработка - по профилю - там.
Автор: T.N. Среда, 10 января 2018, 22:50
Запилить порт контры на ГБА - отличная идея. Вот только без перерисованной графики в этом смысла мало... Поэтому , предлагаю себя в качестве художника.
Присоединённые изображения
Автор: aa-dav Четверг, 11 января 2018, 00:42
QUOTE (T.N. @ Среда, 10 января 2018, 22:50)
Запилить порт контры на ГБА - отличная идея. Вот только без перерисованной графики в этом смысла мало... Поэтому , предлагаю себя в качестве художника.
В архиве с проектов (в подпапке cfa) есть 2 битмапа - mts-01.bmp и mss-01.bmp - в первом содержатся тайлы фонов во втором тайлы подвижных персонажей. Не меняя размеры битмапов и раскладку тайлов в них можно их модифицировать как вам угодно и потом перекомпиляцией проекта получить новый образ игры. Для перекомпиляции проекта нужно выполнить приложенные к нему инструкции в readme.txt. В крайнем случае передать новые битмапы мне, если этим неохота заморачиватся самому. Есть одно тут только мощное ограничение: количество разных цветов в каждом из этих двух файлов не должно превышать 256 (хотя сам файл должен быть в формате RGB 24bpp), GBA в тайловом режиме использует две 8-битных палитры (для фонов и спрайтов) и в них надо укладываться строго. Вообще данные файлы изначально содержаться в проекте в формате Paint.NET - *.pdn в котором я с ними работаю для большего удобства - дело в том что там есть второй слой с красными точками отмечающими правый-нижний угол каждого тайла 8x8, который потом отбрасывается при сохранении в *.bmp, но при компиляции важны только *.bmp.
Так же уже можно баловаться над созданием новых уровней если кому то это тоже интересно - для этого нужно скачать бесплатную опенсорсную программу TileEd и редактировать с её помощью файл map-01.tmx опять таки с последующей перекомпиляцией проекта.
Единственное - я не могу обещать, что включу чьи то труды в свои "по дефолту", мне, например, сильно нравится оригинальные тайлы (но воссоздавать оригинальные уровни напротив не вижу смысла), но создать что-то типа каталога альтернативных сборок или тайлсетов - вполне.
Добавлено спустя 11 часов 59 минут: А ведь можно поступить как сами издатели нередко делают выпуская переиздания - поддерживать 2 набора тайлсетов - в старом стиле - который есть сейчас, как в денди 24 цвета, но в меню паузы типа можно переключить на 256-цветный режим блещущий обновлённой графикой. Вариант выглядит заманчиво...
Автор: aa-dav Среда, 31 января 2018, 05:21
Ах да, тема про Contra Force Advance переехала сюда: http://gbx.ru/?showtopic=127937 Если же вдруг у кого то вопросы по сабжевым урокам - то их лучше сюда задавать.
Автор: dimm0505 Понедельник, 17 февраля 2020, 18:44
Познавательный видос про GBA и рассказ про его графическую подсистему, на английском:
Автор: aa-dav Среда, 26 февраля 2020, 07:04
А я тем временем дошёл до программирования под Famicom/NES и потихоньку пилю уроки для них. На хабре уже можно найти перевод уроков для NES на Си в составе CC65, но у меня чистый хардкорный асм только будет.
Автор: MichaelForExample Среда, 26 февраля 2020, 12:06
QUOTE (aa-dav @ Среда, 26 февраля 2020, 08:04)
А я тем временем дошёл до программирования под Famicom/NES и потихоньку пилю уроки для них. На хабре уже можно найти перевод уроков для NES на Си в составе CC65, но у меня чистый хардкорный асм только будет.
А ссылочку?
Автор: aa-dav Среда, 26 февраля 2020, 12:47
QUOTE (MichaelForExample @ Среда, 26 февраля 2020, 12:06)
А ссылочку?
Пока еще в процессе написания: http://hype.retroscene.org/blog/967.html Вообще если заинтересует, то и мне интересно насколько понятно или непонятно написано. Там, конечно, нужен определенный уровень подготовки, но по своим ощущениям стараюсь разжёвывать.
Автор: dimm0505 Среда, 26 февраля 2020, 22:13
GBA-же интересней в 100 раз. Портативный SNES можно сказать. Без кучи ограничений NES/Famicom.
Автор: aa-dav Четверг, 27 февраля 2020, 04:18
QUOTE (dimm0505 @ Среда, 26 февраля 2020, 22:13)
GBA-же интересней в 100 раз. Портативный SNES можно сказать. Без кучи ограничений NES/Famicom.
А я иду по широкому профилю. Моё хобби в целом - интересоваться всем спектром ПК и консолей прошлых лет и когда замечаю что-либо интересное, то часто об этом появляется заметка: http://hype.retroscene.org/profile/aa-dav/created/topics/page5/
Пока что только для GBA был целый цикл обстоятельных статей про программирование. Но кто как не Famicom/NES достоин аналогичного?
Автор: Boris Понедельник, 09 марта 2020, 10:00
QUOTE (dimm0505 @ Среда, 26 февраля 2020, 22:13)
GBA-же интересней в 100 раз. Портативный SNES можно сказать. Без кучи ограничений NES/Famicom.
GBA хорош, но все же мы ведь родом из детства, так что Денди/Фамиком/НЕС нам гораздо милее
Автор: dimm0505 Понедельник, 13 апреля 2020, 09:21
А у кого-нибудь остался в закромах HAM 2.8 и Visual HAM 2.4.2 для разработки под GBA? Кинулся, а кроме HAM 2.7 ничего найти не могу.