Защита от ошибок
Здесь приведён список всевозможных мелочей, призванных улучшить взаимодействие пользователя с программой. Все эти детали следует учесть при портировании Тасэдитора на другие платформы.
- Когда пользователь выходит из эмулятора, тот сначала подаёт запрос Тасэдитору, чтобы Тасэдитор мог сохранить текущий проект. Если в проекте имеются несохранённые данные, Тасэдитор выводит диалог Yes/No/Cancel. Пользователь может либо сохранить изменения, либо не сохранять их, либо отменить выход из эмулятора.
- При проигрывании fm3-проектов вне Тасэдитора (в виде обычных мувиков) пользователь может переключить эмулятор в режим Записи и попытаться осуществить перезапись. В этом случае эмулятор сообщает пользователю, что текущий мувик является проектом Тасэдитора, и предлагает начать его редактирование. В случае отказа эмулятор отключает режим Записи и продолжает проигрывание Ввода из файла проекта. В случае согласия эмулятор подаёт сигнал Тасэдитору, и в конце текущего кадра тот запустится и загрузит текущий проигрываемый проект.
- Когда в эмулятор загружен РОМ, запустить Тасэдитор можно в любой момент. Если открыть окно Тасэдитора во время записи или проигрывания мувика, Тасэдитор автоматически создаст безымянный проект, содержащий Ввод из этого мувика. При этом, если мувик начинается с сэйва, Тасэдитор выдаст предупреждение об отсутствии поддержки таких мувиков и создаст чистый мувик.
- Пока проекту не присвоено имя, функция автоматического сохранения не работает.
- При первом сохранении безымянного проекта Тасэдитор предлагает в качестве имени fm3-файла имя текущего РОМа с расширением, изменённым на fm3.
- Так как формат fm3 является надстройкой над форматом fm2, пользователь может открывать fm2-файлы как обычные проекты – через диалог "Open TAS Editor Project", выбрав фильтр "All Files (*.*)". При открытии fm2-файлов Тасэдитор дополнительно информирует об этом с помощью диалога Yes/No. Пользователь может либо загрузить fm2-файл в качестве проекта, либо отменить загрузку.
- После открытия fm2-файла или запорченного fm3-файла этот проект считается безымянным, хотя в заголовке окна Тасэдитора отображается имя загруженного файла. При первом сохранении (Ctrl + S) появится диалог SaveAs, где в качестве имени будет предложено имя загруженного fm2/fm3-файла с расширением, изменённым на fm3. Пользователь может либо сохранить проект под этим именем, либо изменить имя. Таким образом Тасэдитор акцентирует внимание пользователя на том, что сохраняемый проект значительно отличается от имеющегося на диске файла под тем же именем.
- В fm3-проектах хранится номер версии используемого fm3-формата. Разные версии могут быть полностью или частично не совместимы между собой. Если при загрузке проекта его версия не совпадает с текущей поддерживаемой версией, проект считается запорченным. Тасэдитор выводит диалог Yes/No/Cancel. Пользователь может либо продолжить попытку загрузки всего проекта (не рекомендуется), либо загрузить из проекта только fm2-данные о Вводе (рекомендуется), либо отменить загрузку.
- Формат fm2 (а значит, и fm3) поддерживает хранение MD5-чексуммы РОМа, использованного при создании мувика/проекта. При загрузке проектов Тасэдитор сверяет чексумму текущего РОМа с чексуммой из проекта, и если они не совпадают, выводит диалог Yes/No, отображающий оригинальное и текущее имя РОМа. Пользователь может либо продолжить загрузку, либо отменить её. Далее, при сохранении этого проекта Тасэдитор вновь обнаружит несовпадение чексумм и предложит заменить в сохраняемом файле имя РОМа и его MD5-чексумму. Пользователь может либо подтвердить замену, либо сохранить проект со старым именем и чексуммой, либо отменить сохранение.
- При загрузке запорченных файлов проектов Тасэдитор в меру сил пытается не допустить зависание эмулятора. При обнаружении ошибки во время загрузки дальнейшая загрузка прекращается, и незагруженные данные заменяются данными по умолчанию. В частности, если ошибка произошла во время загрузки Гринзоны, в проекте останутся только кадры Гринзоны, успешно вытащенные из файла, остальные кадры будут бледными. Сообщения об ошибках, произошедших при загрузке проекта, помещаются в Message Log эмулятора FCEUX.
- Во время загрузки проекта Тасэдитор принимает во внимание текущие настройки "Greenzone capacity" и "Undo levels". Например, если при сохранении проекта Greenzone capacity = 5000, а при загрузке Greenzone capacity = 3000, часть кадров во время загрузки будет пропущена. Это необходимо для того, чтобы проекты, сохранённые на более мощном компьютере, легко загружались на слабом компьютере, у которого могло бы не хватить памяти для загрузки проекта в том же виде, в котором он был сохранён.
- При запуске Тасэдитор загружает данные о шаблонах из файла taseditor_patterns.txt. Если этот файл невозможно открыть (например, он удалён), Тасэдитор создаёт небольшой набор шаблонов по умолчанию, чтобы меню Patterns никогда не пустовало.
- Сохранения, используемые Гринзоной, немного отличаются от обычных сохранений. Они не содержат данные мувика, так как для Гринзоны это лишняя информация. Кроме того, они всегда сжаты. Это необходимо для экономии памяти.
- Если в результате операции Delete или Lua Change пользователь удалит весь Ввод из мувика, Тасэдитор в тот же момент создаст один пустой кадр в начале мувика.
- Во время выделения региона кадров с помощью растягивания мышкой пользователь может второй рукой нажимать акселераторы и хоткеи. Чтобы не было конфликта, во время DRAG_MODE_SELECTION не срабатывают функции, свзанные с изменением выделения:
- ClearSelection()
- SelectAll()
- SelectBetweenMarkers() – Ctrl + A
- selection.undo() – Ctrl + Q
- selection.redo() – Ctrl + W
- ReselectClipboard() – Ctrl + B
- selection.Transpose() – Ctrl + Вверх, Ctrl + Вниз, Ctrl + Home, Ctrl + End
- selection.JumpPrevMarker() – Ctrl + Page Up
- selection.JumpNextMarker() – Ctrl + Page Down
- При перетаскивании Курсора Проигрывателя действует небольшое ограничение, связанное с добеганием. Обычно в Тасэдиторе сразу после щелчка левой кнопкой по столбцу иконок начинается перетаскивание (DRAG_MODE_PLAYBACK), при котором Курсор Проигрывателя перемещается на строку, на которую указывает курсор мыши при зажатой левой кнопке. Однако возможна ситуация, когда пользователь щёлкнул по кадру далеко от головы Гринзоны и не хочет тащить голубой курсор туда вручную. При щелчке запустилось добегание к этому кадру, и началось перетаскивание голубого курсора, но из-за галочки "Follow cursor" Piano Roll прыгнул к текущему положению голубого курсора, и курсор мыши стал указывать уже на другой кадр. Пользователь может не успеть отпустить левую кнопку мыши до момента, когда курсор мыши стал указывать на другой кадр. Чтобы разрешить данную ситуацию, Тасэдитор при перетаскивании считает, что самое первое добегание имеет более высокий приоритет, чем перетаскивание Курсора Проигрывателя. Поэтому во время первого добегания, запущенного при щелчке по столбцу иконок, пользователь не может перетаскивать голубой курсор вверх и вниз. Он может только отменить перетаскивание, отпустив левую кнопку мыши, а затем сделать новый щелчок по столбцу иконок, если требуется. Во время первого добегания курсор мыши заменяется на стрелку с песочными часами. Как только первое добегание окончено, перетаскивание Курсора Проигрывателя будет полноценным.
- Так как столбец иконок в Piano Roll довольно узкий, пользователь может случайно промахнуться во время щелчка по этому столбцу. При щелчке по левой границе Piano Roll, а также по пространству слева Piano Roll Тасэдитор считает, что был осуществлён щелчок по колонке иконок. В результате пользователю не нужно точно прицеливаться, когда требуется передвинуть Курсор Проигрывателя или начать его перетаскивание. Благодаря этому возрастает скорость и комфортность работы.
- Когда эмулятор стоит на паузе, средняя кнопка мыши работает только при условии, что правая кнопка мыши отпущена. Так как средняя кнопка обычно является колесом, пользователь может случайно надавить её при вращении колеса с зажатой правой кнопкой (перемещение Курсора Проигрывателя). Вращение колеса с зажатыми клавишами-модификаторами используется гораздо реже, поэтому для них защита не требуется.
- Щелчок средней кнопкой по окну FCEUX передаётся окну Тасэдитора. Точно так же передаётся сообщение в вращении колеса, когда фокус у окна FCEUX. А щелчок правой кнопкой по окну FCEUX никак не действует. Благодаря этому пользователь может использовать среднюю кнопку (колесо мыши), даже когда курсор мыши находится над окном FCEUX.
- Даже если включен режим Записи, во время добегания Тасэдитор не будет менять Ввод. Благодаря этой особенности можно свободно перетаскивать Курсор Проигрывателя без выключения режима Записи, не опасаясь затереть Ввод.
- Когда запущен Тасэдитор, следующие команды в меню FCEUX доступны только в режиме Записи и при отсутствии добегания:
- NES -> Reset
- NES -> Power
- NES -> Eject/insert Disk
- NES -> Switch Disk Side
- Когда запущен Тасэдитор, следующие команды в меню FCEUX не доступны:
- File -> Open ROM
- File -> Close
- File -> Recent
- File -> Savestate -> Load State
- File -> Savestate -> Save State
- File -> Savestate -> Load State From
- File -> Savestate -> Save State As
- File -> Savestate -> Next save slot
- File -> Savestate -> Previous save slot
- File -> Savestate -> View save slots
- File -> Movie -> Recent
- File -> Movie -> Record Movie
- File -> Movie -> Play Movie
- File -> Movie -> Stop Movie
- Config -> Enable -> Auto-savestates (всегда отключено во время работы Тасэдитора)
- Config -> Enable -> Backup Savestates (всегда отключено во время работы Тасэдитора)
- Config -> Enable -> Compress Savestates (всегда включено во время работы Тасэдитора)
- Config -> PAL Emulation (следует настроить это до запуска Тасэдитора)
- Config -> PPU -> New PPU / Old PPU (следует настроить это до запуска Тасэдитора)
- Tools -> Open TAS Editor
- Также необходимо, чтобы пользователь не изменял настройки синхронизации мувика во время редактирования проекта. Когда запущен Тасэдитор, следующие элементы GUI в окне "Input Configuration" заблокированы:
- галочка "Attach four-score"
- галочка "Replace port 2 Start With Microphone"
- ListBox с выбором port0
- ListBox с выбором port1
- ListBox с выбором port2
- Когда запущен Тасэдитор, следующие хоткеи не работают:
- Hide Menu Toggle
- Fastest Speed
- Save State As...
- Load State From...
- Record Movie To...
- Play Movie From...
- Stop Movie
- Insert Coin / Toggle Dipswitch – эти команды пока не поддерживаются форматом fm2
- Load Last Auto-save
- View save slots
- Open TAS Editor
- Open ROM
- Close ROM
- Undo/Redo Savestate
- Toggle Fullscreen
- Хоткеи, поведение которых меняется при запущенном Тасэдиторе:
- Power
- Reset
- Eject or Insert FDS Disk
- Switch FDS Disk Side
- Savestate Slot 0 – Savestate Slot 9
- Save State
- Save State to Slot 0 – Save State to Slot 9
- Load State
- Load State from Slot 0 – Load State from Slot 9
- Play Movie From Beginning
- Reload ROM or TAS Editor Project
- Так как клавиши Alt и F10 активно используются при работе в Тасэдиторе, их стандартное действие (открытие меню программы) отключено.
- Так как клавиша Пробел по умолчанию используется в качестве хоткея, её стандартное действие (симуляция щелчка по элементу GUI, на котором находится фокус клавиатуры) отключена. Также для каждого элемента GUI в окне Тасэдитора реализована обработка щелчка средней кнопкой мыши, чтобы этот щелчок срабатывал независимо от положения курсора мыши.
- Так как контекстное меню при щелчке правой кнопкой по Piano Roll почти никогда не требуется, оно появляется только когда пользователь щёлкает по выделенной строке в столбце номеров кадров (Frame#). В остальных случаях контекстное меню не появляется, зато при щелчке правой кнопкой по Piano Roll начинается удобное перетаскивание содержимого Piano Roll во все стороны.
- Так как правая кнопка часто используется для перемещения Курсора Проигрывателя колесом, пользователь может щёлкать ею без оглядки на текущее положение курсора мыши. При этом возможен случайный щелчок по Закладке и, соответственно, перезапись Закладки. Чтобы этого не допустить, Список Закладок и Дерево ответвлений требуют от пользователя нажать и отпустить правую кнопку на одной и той же Закладке. При этом, если между нажатием и отпусканием правой кнопки пользователь совершил вращение колесом, установка Закладки отменяется.
- Пользователь может осуществлять прыжки на Закладки одинарным щелчком по желаемой иконке в Дереве ответвлений. При этом он ожидает, что голубой треугольник (Курсор Проигрывателя) после щелчка окажется на этом месте в Дереве ответвлений. Это справедливо для Закладок, ответвления которых находятся в текущей хронологии, но это не так для Закладок, представляющих альтернативные стратегии прохождения. При прыжках на кадры этих Закладок Курсор Проигрывателя будет находиться в другом ответвлении (хотя и на том же самом кадре). Чтобы заранее уведомить пользователя о возможном недопонимании с его стороны, при наведении на иконки таких Закладок курсор мыши превращается в стрелку с вопросительным знаком.
- Во время трансформации Дерева ответвлений наведение курсора мыши на его элементы не работает, потому что активная область элементов постоянно перемещается и убегает от курсора мыши. Наведение начинает работать сразу после остановки всех иконок.
Created with the Personal Edition of HelpNDoc: Full featured Documentation generator