Другое > Разное
Tool-Assisted Superplay - искусство сверх-игры
<< < (2/4) > >>
feos:
Assasin, спидраны какого формата тебе нужны?
просто эмуляторные?
Brick_Man:
Assasin, о, я тоже за. :)
Тебе нужны Тул-Ассистед прохи или просто мега задротский спидран без перезаписей?
Assasin:
Brick_Man,feos,УльтраБлокС,Street Fighter,
Пойдёмте обсудим.
http://www.emu-land.net/forum/index.php/topic,47762.new.html
feos:
Открыта группа ВКонтакте.
http://vkontakte.ru/club20287165
Также, я влился в число команды TASVideos.

А вот вам анимашка на затравку, взято из новогоднего пробега Супер Марио.




DeniSS:

Лучший TAS 2010 года. С 6-й минуты начинается хаос, а концовка вообще убила  :)
OmKol:

--- Цитата: DeniSS от 14 Февраль 2011, 15:52:41 ---http://www.youtube.com/watch?v=_lnogpRPvY4

Лучший TAS 2010 года. С 6-й минуты начинается хаос, а концовка вообще убила  :)

--- Конец цитаты ---
Такого издевательства над игрой я ещё не видел. В избранное.
metSyS:
Интересно а где, люди которые это делают, покупают себе нервы и терпение?
Brick_Man:
Я вот не понимаю, как они, тупо подойдя к стенке, попадают "внутрь"? Я знаю прикол, что стена отталкивает героя в противоположном направлении, но как они туда залезают? Иногда кажется, что фрейм адванса маловато. :D
Fly:

--- Цитата: Brick_Man ---Иногда кажется, что фрейм адванса маловато.
--- Конец цитаты ---
Иногда игру дизассемблируют и изучают код, чтобы узнать, где могут быть глюки и как их использовать.
feos:
AnSstuff Re: Новый рокмен

Нихрена себе, что творится... на 3 минуты обогнали, да ещё как.
А я ещё хотел когда-то сделать обзор ТАСа Deign'а - там помимо известных мегаменовских фишек (типа wallzip) использовался очень классный баг с побегом от Катмена и последующей порчей памяти оставшимся от Катмена объектом.
Но тут вообще Матрица... Короче, разбираюсь.

***

Да, надо всё-таки обзор по первому мегамену писать - развёрнутый, с таблицами и фрагментами исходного кода. Жаль только, скорее всего, его поймут только ромхакеры (то есть в России это Санчез, Хоррор, может GManiac и ещё парочка).

Ну я сейчас на пальцах тебе объясню основу.

Думаю, ты в курсе, что у процессора 6502 ограниченная адресация, так что большие игры делят себя на банки и вовремя переключают эти банки, так что процессор всё время видит нужный разработчику фрагмент РОМа.

Смысл такой - в каждой NES-игре 60 раз в секунду вызывается NMI-прерывание, которое перерисовывает экран, играет музыку и т.д. И в процессе работы NMI требуется поменять текущий банк (чтоб, например, достать из другого куска РОМа музыкальные данные), а при выходе восстановить банк, чтоб прерванная игра ничего не заметила и поехала дальше, как ни в чём ни бывало. Это стандартная схема работы NES-игр.

Как NMI узнаёт, на какой банк возвращать маппер? Узнаёт по значению переменной (в рокмене - по адресу 0x42), так что сама игра после каждого переключения банка обязательно сразу же сохраняет в ячейке 42 номер этого уже переключенного банка. Например, когда начинается процедура обработки AI объектов (а у каждого объекта, даже мелкого приза, есть своя процедура обработки каждого кадра), то игра переключает банк с 05 (в этом банке хранится основной цикл игры, код управления мегаменом и т.д.) на банк 06 (в этом банке хранятся обработчики поведения объектов и ещё куча всяких данных).

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

Весь трюк состоит в том, чтобы с помощью жуткого лага и невероятного везения сделать так, что NMI-прерывание произойдёт между двумя критическими инструкциями:

sta $C006 - сменить банк на 06
sta CurrentBank - запомнить шестёрку в ячейке 42
...тут идёт запуск кода из шестого банка

Если получилось, то происходит следующее:

sta $C006 - сменить банк на 06
*** внезапно NMI
***** обновить экран
***** переключить банк на 04, достать оттуда следующую ноту музыки и озвучить
***** восстановить банк (взяв значение из 42, в котором пока что хранится пятёрка, а не шестёрка)
***** продолжить основной цикл
sta CurrentBank - запомнить шестёрку в ячейке 42 - а банк-то остался пятым
... тут идёт запуск кода, но не из шестого, а из пятого банка, в котором совсем другие данные

В результате почти всегда это даёт зависание, т.к. исполняется какой-то левый код. Иногда просто портится память - в ряд ячеек пишутся ненужные данные.
Но FinalFighter нашёл оптимальное стечение обстоятельств, когда после ошибки в переключении банка происходит запуск кода окончания уровня (подсчёт очков и т.д.). Повезло, что этот код хранится в пятом банке (хотя почему повезло, в этом банке вся основная игровая логика).

Тут самое невероятное - что удалось так точно поймать NMI между двумя инструкциями. Это просто нереал, ведь в течение кадра исполняется несколько тысяч инструкций (это ещё хорошо, что процессор с частотой 1 мегагерц), и так точно спозиционировать лаг - это только методом миллиадрных проб и ошибок можно (ботами только).

Причём, как я думаю, теоретически этот трюк возможен в любой игре с подобной схемой игрового цикла. С другой стороны, если бы в игре было так

sta CurrentBank - заведомо запомнить шестёрку в ячейке 42
sta $C006 - сменить банк на 06
...тут идёт запуск кода из шестого банка

то этот трюк уже не сработал бы.
Я, наверное, как-нибудь поищу подобные игры. Вообще, достижение громкое - заставить игру выполнять другой код - это натурально смахивает на сюжет фильма Matrix. Не знаю, сподоблюсь ли я начать обзор ТАСа Мегамена, но такие события реально вдохновляют.
Добавлено позже:
Brick_Man, в каждой и гре это может слегка отличаться
в мегамене в основном герой проникает не в стены, а в потолок.
в марио это связано с субпикселами и местом приземления на стенке.
в других играх при получении урона персонаж подпрыгивает. это использовано в утиных историях и мегамене.
http://www.youtube.com/watch?v=Y1v9B158P6M#t=318s
DeniSS:
feos, я подозревал, что дело в нерасторопности процессора, но что там такой милиметраж...
feos:
http://tasvideos.org/forum/viewtopic.php?t=10646

--- Цитата ---Congratulations to [1686] NES Mega Man (JPN) in 12:24.56 by Shinryuu & FinalFighter, the TAS of 2010, and to all of the nominees!
--- Конец цитаты ---

Ну то есть то, что это лучший ТАС 2010 года - официальное мнение сообщества.  :shifty:

Добавлено позже:
http://www.youtube.com/view_play_list?p=073B34F918460667
Плейлист моих энкодов для ТАСВидеос.
69 видео
Dagoth Ur:
Многие считают, что TAS используют неточности эмуляции и что большинство трюков на реальной приставке не работают. Некто под ником micro500 доказал обратное: TAS на реальной NES возможен (ссылка на плейлист)!
http://www.youtube.com/view_play_list?p=7D18A575A69D2832
Вместо контроллера используется самодельный девайс, скармливающий приставке последовательность нажатий. Пока не все опробованные прохождения работают, но и то, что уже достигнуто, достаточно любопытно.
Brick_Man:
Крутой девайс!!! :jumpy:
Dagoth Ur:

--- Цитата: Brick_Man от 20 Февраль 2011, 22:14:40 ---Крутой девайс!!! :jumpy:

--- Конец цитаты ---
Кстати, автор сделал инструкцию, как самому создать такое чудо.
feos:
Dagoth Ur, лол я его сегодня просил оформить это в плейлист.
вот тред по этому вопросу
http://tasvideos.org/forum/viewtopic.php?t=9580&start=11
DeniSS:
Brick_Man, ага, почти как нёрдовская кнопка "пройти игру"  :lol:
feos:

--- Цитата: DeniSS от 20 Февраль 2011, 22:54:04 ---Brick_Man, ага, почти как нёрдовская кнопка "пройти игру"  :lol:

--- Конец цитаты ---
ну да, только в отличие от той кнопки игра РЕАЛЬНО проходится сама, да еще как!
Brick_Man:
А почему не все прохи работают? o_0 :-\
feos:
Brick_Man, глюки с таймингом.
эмулятор принимает инпут раз в кадр, длина которого примерно 1/60 секунды (не точно)
консоль же выдает разницу в частоте опроса джоя и в лаге. так как лаг в мувиках учтен эмуляторный, а даже в разных версия эмуляторов он может отличаться, то и от консольного тем более. хотя это связано и с несовершенством девайса. сначала он не мог играть СМБ 3, теперь может.
Навигация
Главная страница сообщений
Следующая страница
Предыдущая страница

Перейти к полной версии