fceux/help/taseditor-ru/SpeedrunningSynopsis.html

163 lines
23 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<html>
<head>
<title>Конспект спидраннера</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
<!--[if lte IE 8]>
<link type="text/css" rel="stylesheet" media="all" href="css/ielte8.css" />
<![endif]-->
<style type="text/css">
#topic_header
{
background-color: #EFEFEF;
}
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "index.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("SpeedrunningSynopsis");
}
</script>
</head>
<body>
<div id="topic_header">
<div id="topic_header_content">
<h1>Конспект спидраннера</h1>
<div id="topic_breadcrumb">
<a href="Reference.html">Справочник</a> &rsaquo;&rsaquo; </div>
</div>
<div id="topic_header_nav">
<a href="Reference.html"><img src="img/arrow_up.png" alt="Parent"/></a>
<a href="FAQ.html"><img src="img/arrow_left.png" alt="Previous"/></a>
<a href="TASEditorInside.html"><img src="img/arrow_right.png" alt="Next"/></a>
</div>
<div class="clear"></div>
</div>
<div id="topic_content">
<p><span class="rvts20">Конспект спидраннера</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps10"><span class="rvts22">Благодаря наличию однозначной цели, создание спидранов является наиболее простым видом ТАСинга, и соответствующие приёмы хорошо изучены. Здесь приводится классификация типовых задач спидраннера, возникающих во время шлифовки Ввода. Перед чтением этого раздела рекомендуется усвоить материалы </span><a class="rvts28" href="TASingProcess.html">Процесс ТАСинга</a><span class="rvts22"> и </span><a class="rvts28" href="TASingMethodology.html">Методология ТАСинга</a><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">В целом, при создании спидрана необходимо находить кратчайший способ прохождения каждого участка игры. Процесс поиска заключается в тестировании множества вариантов прохождения участка и выборе самого лучшего варианта. Здесь мы обсудим только проблему выбора.</span></p>
<p class="rvps10"><span class="rvts22">Для упрощения задачи ТАСеры обычно сравнивают между собой только два варианта: </span><span class="rvts26">новый рабочий</span><span class="rvts22"> вариант и </span><span class="rvts26">наилучший старый</span><span class="rvts22"> вариант, а все остальные старые варианты сразу забывают (впрочем, некоторые любопытные варианты всегда можно сохранить в Закладки).</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Самый лучший из всех старых (ранее протестированных) вариантов может храниться:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">в Закладках рекомендуется</span></li>
<li class="rvps15"><span class="rvts22">в Журнале Истории автоматически, но временно</span></li>
<li class="rvps15"><span class="rvts22">в памяти ТАСера не рекомендуется</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Когда новый рабочий вариант оказывается лучше (оптимальнее) наилучшего старого, автоматически подразумевается, что он лучше всех остальных старых вариантов, поэтому этот рабочий вариант становится наилучшим. В случае использования Закладок следует пересохранить новый вариант в тот же слот, где хранился наилучший старый вариант. По окончании поиска содержимое этого слота загружается в финальный мувик.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Критерии оптимальности в спидранах:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts22">наличие/отсутствие определённого события в новом и старом варианте </span><span class="rvts71">(bool)</span></li>
<li class="rvps15"><span class="rvts22">время наступления целевого события в новом и старом варианте </span><span class="rvts71">(int)</span></li>
<li class="rvps15"><span class="rvts22">состояние игры на одном и том же кадре нового и старого мувика </span><span class="rvts71">(string)</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Соответственно, при сравнении двух вариантов вы делаете одно из трёх:</span></p>
<p class="rvps15"><a class="rvts28" href="SpeedrunningSynopsis.html#CompareEvent">1. &nbsp;Сравнение наличия/отсутствия события.</a></p>
<p class="rvps27"><a class="rvts62" href="SpeedrunningSynopsis.html#CompareEvent-A">А. По памяти</a></p>
<p class="rvps27"><a class="rvts62" href="SpeedrunningSynopsis.html#CompareEvent-B">B. С помощью Закладок</a></p>
<p class="rvps15"><a class="rvts28" href="SpeedrunningSynopsis.html#CompareTime">2. Сравнение времени наступления события.</a></p>
<p class="rvps27"><a class="rvts62" href="SpeedrunningSynopsis.html#CompareTime-A">A. По памяти</a></p>
<p class="rvps27"><a class="rvts62" href="SpeedrunningSynopsis.html#CompareTime-B">B. С помощью зелёной стрелки</a></p>
<p class="rvps27"><a class="rvts62" href="SpeedrunningSynopsis.html#CompareTime-C">C. С помощью Маркера</a></p>
<p class="rvps27"><a class="rvts62" href="SpeedrunningSynopsis.html#CompareTime-D">D. С помощью Закладок</a></p>
<p class="rvps15"><a class="rvts28" href="SpeedrunningSynopsis.html#CompareState">3. Сравнение состояния игры на одном и том же кадре.</a></p>
<p class="rvps27"><a class="rvts62" href="SpeedrunningSynopsis.html#CompareState-A">А. По памяти</a></p>
<p class="rvps27"><a class="rvts62" href="SpeedrunningSynopsis.html#CompareState-B">B. С помощью Закладок</a></p>
<p class="rvps27"><span class="rvts47"><br/></span></p>
<p class="rvps10"><a name="CompareEvent"></a>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts26">1. Сравнение наличия/отсутствия события.</span></p>
<p class="rvps10"><span class="rvts22">Выигрывает вариант, где требуемое событие происходит в рамках текущего участка (а вредное событие, соответственно, не происходит). Появление требуемого события это всего лишь первый (и зачастую лёгкий) этап при создании Ввода, а следующим этапом будут попытки ускорить момент появления этого события.</span></p>
<p class="rvps10"><span class="rvts31">Перебор вариантов продолжается до первого успешного варианта, либо пока не надоест (тогда событие признаётся недостижимым).</span></p>
<p class="rvps10"><span class="rvts22">Аналогия с программированием: сравнение двух Boolean (переменная логического типа), сравнение двух массивов Boolean.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><a name="CompareEvent-A"></a>
<span class="rvts22">A. В большинстве случаев подходит простое понимание того факта, что требуемого события не удалось добиться в прошлых вариантах. Пример: </span><a class="rvts28" href="SemiautomaticTASing.html#FindStartButtonPress">нажатие кнопки </a><a class="rvts72" href="SemiautomaticTASing.html#FindStartButtonPress">Start</a><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><a name="CompareEvent-B"></a>
<span class="rvts22">B. Если целевое событие является комплексным (например, планируется одновременно подстрелить трёх врагов), рекомендуется в процессе перебора вариантов сохранять в Закладки те варианты, где требуемое событие выполнилось хотя бы частично (например, подстрелили двух врагов одновременно, а третьего позже). Если в конце концов целевое события окажется недостижимым, может сгодиться и такой частичный успех.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><a name="CompareTime"></a>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts26">2. Сравнение времени наступления события.</span></p>
<p class="rvps10"><span class="rvts22">Выигрывает вариант, где целевое событие наступает раньше. Время наступления целевого события определяется кадром, перед которым целевого события в игре ещё не было, а на этом кадре оно уже есть. Номер этого кадра определяется при наведении на него Курсора Проигрывателя и просмотре экрана FCEUX (или Memory Watch) для подтверждения.</span></p>
<p class="rvps10"><span class="rvts31">Перебор вариантов продолжается до тех пор, пока не надоест, либо пока не исчерпаются все возможные типы вариантов (тогда текущий лучший вариант признаётся идеальным (frame perfect), пока не обнаружены новые факторы).</span></p>
<p class="rvps10"><span class="rvts22">Аналогия с программированием: сравнение двух целых чисел.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><a name="CompareTime-A"></a>
<span class="rvts22">A. Для простейших участков и маленьких подучастков бывает достаточно запомнить лучший номер кадра в уме и сравнивать результаты новых вариантов с этим числом. Но в целом полагаться на человеческую память не рекомендуется. Подробнее: </span><a class="rvts28" href="TASingProcess.html#EndOfSegment">Процесс ТАСинга</a><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><a name="CompareTime-B"></a>
<span class="rvts22">B. На несложных участках можно сверяться с зелёной стрелкой Тасэдитора. При её использовании подразумевается, что вы каждый раз оставляете Курсор Проигрывателя на кадре целевого события (это естественное поведение). Поэтому, если новый кадр целевого события находится выше зелёной стрелки, то новый вариант быстрее предыдущего. Подробнее: </span><a class="rvts28" href="NonlinearTASing.html#GreenArrow">Методология ТАСинга</a><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><a name="CompareTime-C"></a>
<span class="rvts22">C. На сложных участках используйте отвязанный Маркер, который будет всегда указывать на текущий лучший номер кадра в Piano Roll. При каждом улучшении старого результата этот Маркер вручную перетаскивается повыше. Поэтому, если новый кадр целевого события находится выше Маркера, то новый вариант быстрее наилучшего старого. Подробнее: </span><a class="rvts28" href="ProgramCustomization.html#BindMarkerstoInput">Настройка программы</a><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><a name="CompareTime-D"></a>
<span class="rvts22">D. На участках любой степени сложности рекомендуется использовать Закладки, отображаемые в столбце иконок Piano Roll. При каждом улучшении старого результата текущий вариант вручную сохраняется в ту же Закладку, замещая собой наилучший старый вариант. Поэтому, если новый кадр целевого события находится выше иконки Закладки, то новый вариант быстрее наилучшего старого.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><a name="CompareState"></a>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts26">3. Сравнение состояния игры на одном и том же кадре.</span></p>
<p class="rvps10"><span class="rvts22">Выигрывает вариант, в котором у игры в целом более выгодные характеристики. Этот тип сравнений актуально использовать для оценки сложных и многогранных игровых ситуаций. Например, в гонках Формула-1 приходится заботиться одновременно и о скорости, и о минимальной изношенности шин, поэтому на каждом участке трассы нужно искать оптимальный баланс, а не просто торопиться.</span></p>
<p class="rvps10"><span class="rvts22">Здесь у участка есть чётко определённый кадр окончания, и каждый новый тест должен проиграть участок до этого кадра. Тасэдитор запоминает номер этого кадра в виде зелёной стрелки, которая автоматически останавливает эмуляцию при просмотре новых вариантов. Так что от ТАСера требуется только изменять Ввод (создавая новые варианты), запускать просмотр, дожидаться остановки и оценивать результат (по экрану FCEUX или Memory Watch).</span></p>
<p class="rvps10"><span class="rvts31">Перебор вариантов продолжается до тех пор, пока не надоест, либо пока не исчерпаются все возможные типы вариантов (тогда текущий лучший вариант признаётся идеальным, пока не обнаружены новые факторы).</span></p>
<p class="rvps10"><span class="rvts22">Аналогия с программированием: сравнение двух строк, сравнение двух массивов целых чисел.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><a name="CompareState-A"></a>
<span class="rvts22">A. Для простых участков бывает достаточно запомнить значение главной характеристики состояния игры, достигнутого в наилучшем варианте прохождения участка. Это значение сравнивается с характеристиками нового состояния игры, достигнутого в конце просмотра нового варианта. Если решено, что новое значение лучше, необходимо запомнить его вместо старого. Пример: </span><a class="rvts28" href="NonlinearTASing.html#LuckManipulation">манипуляция удачей</a><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22">Когда важных характеристик больше, чем одна, рекомендуется не полагаться на человеческую память.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><a name="CompareState-B"></a>
<span class="rvts22">B. На участках средней и высокой сложности, а особенно на гигантских участках (размером с целый уровень игры) используйте Закладки, хранящие альтернативные ответвления мувика. Наилучший вариант прохождения участка сохраняется в один слот, а новый тестируемый вариант сохраняется в другой слот. После этого можно легко переключаться между этими слотами и сравнивать значения каждой характеристики состояния игры. Кроме того, можно наводить курсор мыши на соответствующие Закладки, чтобы видеть скриншоты состояний игры и визуально сравнивать их характеристики с текущим изображением на экране FCEUX.</span></p>
<p class="rvps10"><span class="rvts22">Для отображения ячеек памяти на скриншотах рекомендуется использовать Lua-вывод на экран, тогда окно Memory Watch не понадобится, и об оптимальности можно будет успешно судить по одним скриншотам. Подробнее: </span><a class="rvts28" href="ProgramCustomization.html#DisplayBranchScreenshots">Настройка программы</a><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22">В ситуации, когда некоторые характеристики в новом варианте оказались лучше, а некоторые хуже, требуется хорошенько взвесить их все (в уме, или используя обобщающую Lua-формулу) и решить, какое состояние игры лучше.</span></p>
<p class="rvps10"><span class="rvts22">При каждом улучшении старого результата новый вариант вручную сохраняется в ту же Закладку, замещая собой наилучший старый вариант.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;"/>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">После нахождения самого быстрого варианта прохождения участка ТАСер может дополнительно улучшить его, добавив немного развлекательности в игровые события. Критерии оптимальности при этом могут быть самыми разными, но при этом время прохождения участка должно оставаться без изменений.</span></p>
<p class="rvps10"><span class="rvts22">А можно отложить процесс облагораживания участка на будущее и сразу перейти к следующему участку.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps8"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="http://www.helpndoc.com/help-authoring-tool">Single source CHM, PDF, DOC and HTML Help creation</a></p>
</div>
<div id="topic_footer">
<div id="topic_footer_content">
Copyright &copy; 2011-2012 АнС</div>
</div>
</body>
</html>