Pull to refresh
101
Karma
0
Rating
  • Followers 52
  • Following 2

Реверс-инжиниринг. История. Моя

Помогает в какой-то степени. Алгоритмы можно понять и изучая код — структуры данных в сеговских играх те же, алгоритмы компрессии, связанные с разработкой игр алгоритмы — AI врагов, поиск пути, допустимые упрощения в этих алгоритмах. Понимая ассемблер, можно намного лучше разобраться в низкоуровневой оптимизации, в том, какой оверхед дают скриптовые и высокоуровневые языки, в том, во что именно компилируется ваш код.
Вы будете иметь представление о том, как защитить вашу программу от исследования и модификации. И самое полезное — улучшатся ваши навыки отладки и поиска ошибок в своих программах.

Модернизация IDA Pro. Отладчик для Sega Mega Drive (часть 1)

А ещё кроме иды варианты есть какие-то для исследователя. кстати?

Устройство спецэффектов для игр под NES. Часть 2

Я явно не упоминал в статьях, что число кадров в секунду, отрисовываемое видеопроцессором — постоянное число. Нельзя добиться торможения выводом большого числа спрайтов — видеопроцессор пропускает лишние и будет рендерить дальше с прежней скоростью.

Тормоза связаны с тем, что разработчики написали слишком медленный игровой код, в примере с контрой причина в физическом движке. Там, фактически, реализована честная модель разрушаемости уровня. Любой враг выстрелом может разбить любой разрушаемый блок на уровне (например, пробить гранатой стенку, которая сдерживала катящуюся бочку), а не только попасть в игрока.

Устройство спецэффектов для игр под NES. Часть 2

В бетмене не мигает. Там разработчики реализовали интересную логику (думаю, в других играх это тоже встречается). Важные объекты, например, сам персонаж и босс рисуются в первую очередь, и из-за этого не мерцают, а пули и спрайт гуи — во вторую очередь и программно рисуются через кадр, т.е. мерцают они всегда, и пропускаться при превышении лимита в 8 спрайтов начинают тоже в первую очередь они. Вероятно, разработчики предполагали ситуацию, когда в строке с гуи будет перебор спрайтов, из-за за этого сделали спрайт с буквами «неважным», чтобы зарезервировать место для немерцающих объектов на этой строке.

В Mistume Ga Tooru такой логики разделения нет, поэтому мигает всё. Как упоминали выше, можно в эмуляторе отключить лимит на вывод спрайтов в одной строке, и мерцание пропадёт.

Устройство спецэффектов для игр под NES. Часть 2

С мерцающими объектами это не баг, а фича. Разработчики специально выводят их в каждый раз в обратном порядке, чтобы один кадр рендерились одни объекты, а пропускались другие, а затем наоборот. Это не приводит к другим артефактам, кроме мерцания — лишние спрайты (а точнее даже строки спрайтов), просто будут пропущены.

Каша из тайлов вызывается сбитыми таймингами — где-то в коде игры предполагается, что видеопроцессор находится в определённом месте кадра, а это почему-то не так. Отличий в таймингах денди от других режимов много — wiki.nesdev.com/w/index.php/Clock_rate, точно я не возьмусь предположить, что именно вызывает отличия, вполне возможно, что это связано с Time during which OAM can be written (это как раз время, за которое игра должна успеть записать данные о всех спрайтах на экране).

Устройство спецэффектов для игр под NES. Часть 2

Из-за чего имена полосок индиакторов мерцают?

Хороший вопрос. У меня глаз настолько замылился с этими спецэффектами, что я даже не замечал этого мерцания в гуи.

Аппаратных причин для этого никаких нет. То, что этот спрайт выводится через кадр просто прописано в коде игры. Разработчики, скорее всего, случайно сделали вывод его той же функцией, которой рендерятся снаряды — там как раз программный вывод через кадр оправдан, чтобы показывать более 8 снарядов в линию (на чётных кадрах выводится одна половина снарядов, на нечётных – другая). Проверю внимательнее к следующей статье.

Устройство спецэффектов для игр под NES. Часть 2

Таким же способом, как и в Super Spy Hunter, отдельный скроллинг каждой линии.

(линии в каждой строке наслаиваются и сливаются, поэтому в статье я оставил пример, в котором «слой» состоит из нескольких строк, чтобы было нагляднее).

Устройство спецэффектов для игр под NES. Часть 2

Не могу в эмуляторе такого эффекта добиться. Скорее всего тоже из-за чего-то тайминги сбиваются при скролле.

Устройство спецэффектов для игр под NES. Часть 2

Артефакты появляются вроде только если запускать PAL версию игры на денди, в NTSC-версиях всё нормально.
www.emu-land.net/forum/index.php?topic=78279.0

Да, в большинстве игр глюки именно из-за того, что момент переключения скролла неверно определяется. В Battletoads там не только скролл переключается, ещё и гашение луча происходит в ходе кадра, можете в этой и предыдущей статье примеры посмотреть.

Для Elimination Boards (версия игра для региона PAL) строки разделения экрана на слои
в режиме PAL:


в режиме Dendy (сбиты тайминги рассчёта строк, на которых надо разделять экран и тайминг переключения банка памяти с графики GUI на банк с графикой облаков):

Устройство спецэффектов для игр под NES. Часть 2

Нoстaльгируйте на здоровье. Пожалуйста

Последний шаг к «Яровой»

Это что за чёрные списки такие, поделитесь, кто и по каким законам их будет составлять?

Последний шаг к «Яровой»

Если жена вам эротическую фотографию пошлёт, вы её тоже дяденькам показать согласитесь?

10000 лайков

Трижды пробежался по статье, что найти, какой из факторов четвёртый. Это тоже ваша хитрость для того, чтобы статью внимательнее читали?

Может поможет

Надо на SkyEng зайти.

Это те, которых роскомнадзор заблокировал случайно?

Устройство спецэффектов для игр под NES. Часть 1

wiki.nesdev.com/w/index.php/PPU_palettes
Addresses $3F10/$3F14/$3F18/$3F1C are mirrors of $3F00/$3F04/$3F08/$3F0C. Note that this goes for writing as well as reading


Нулевой цвет зеркалируется для обеих палитр, т.е. если вы в цикле записываете 32 байта в две палитры, то вы сначала пишете нужный цвет в палитру фона, а потом записью в 0x3F10 его затираете. И наоборот, записью в 0x3F10 вы меняете цвет в 0x3F00.

Так что при записи палитры спрайтов нужно отдельные байты записывать, пропуская адреса, которые зеркалируются.

Устройство спецэффектов для игр под NES. Часть 1

Не согласен. Трюки и хитрости программисты графики использовали всегда, просто тогда это были трюки для того, чтобы сделать что-то, не умеет процессор. Позже — трюки, чтобы сделать то, что умеет последняя версия DirectX/OpenGL, а сейчас, чаще — трюки для обхода косяков Unity3D.

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

Устройство спецэффектов для игр под NES. Часть 1

Дык привёл же вроде…
habrahabr.ru/post/348212
dendy.migera.ru/nes/g02.html

Парой предложений понятнее целой статьи не распишешь. Если относительно NES сходу непонятно, сначала попробуйте разобраться с определениями индексированных цветов и палитровой графики.

Устройство спецэффектов для игр под NES. Часть 1

Если можно, объясните, как реализовали эффект «волн»


Это эффект изменения позиции скроллинга в середине кадра, про такие будет в следующей части. Картинка рисуется нормальной в экранной странице, а при выводе каждой строки осуществляется смещение чётных строк на X пикселей влево, а нечётных — на X пикселей вправо (это позволяет делать маппер MMC3, который используется в игре). X меняется каждый кадр — получаются волны. Вот этот эффект с наложенными зелёными линиями в тех строках, на которых меняется сдвиг.


Ну и как реализуется логика 3D в этой игре, ведь большинство уровней в трёх измерениях сделано.

Ну, это называется 2,5D — для полноценного третьего измерения не хватает изменения размеров при удалении объектов от наблюдателя. Хотя там море во втором уровне сделано с симуляцией этого эффекта. Для 2,5D особенно делать ничего и не нужно, достаточно при рендере объектов сортировать в порядке от самых дальних к зрителю к самым ближним, см. Алгоритм художника

Пощупать нейросети или конструктор нейронных сетей

Ну вот смотрите — вы выбрали интересную тему, но судя по вопросам от меня и выше, отбили интерес к программе, тем что:
— нет версии под линукс
— нет версии под веб-браузер
— не запускается под современные ОС без шаманстве (возможно, потому, что vb6.0 вышел в 1998 году, 20 лет назад).
— нет исходников (не каждый захочет запускать чужой exe-файл на своей машине).

Если бы вы использовали, например, python, то ваша программа была бы кросс-платформенной, потенциально запускалась бы в браузере (с помощью jupyter notebook), её можно было бы прочитать перед запуском и выполнить на любой современной ос, кроме того, из-за более популярного языка её вероятнее могли бы покритиковать или улучшить. А так большинство читателей посмотрят картинки, возможно запустят программу на ваших тестовых данных, и закроют навсегда.

Заодно насчёт тестовых данных – одному вам известно, как составлять обучающие выборки и прочие текстовые файлы для программы.

Пощупать нейросети или конструктор нейронных сетей

Если оно для обучения и «пощупать», то выложили бы заодно и исходники. Хотя… оно у вас на Visual Basic?

Information

Rating
Does not participate
Date of birth
Registered
Activity