Простой тест замеряющий количество циклов ldir за прерывание.
Вот я недавно такой делал. Ссылка.
Филипп в чате прочитал, но молчит. Видимо всё с ним.
Простой тест замеряющий количество циклов ldir за прерывание.
Вот я недавно такой делал. Ссылка.
Филипп в чате прочитал, но молчит. Видимо всё с ним.
Titus(28.01.2023)
Шаги по направлению к синхронизации обьектов:
1. Перенес все энергоемкие активные обьекты в начало списка обьектов. Таким образом, во-первых они начинают обрабатываться несколько быстрее, во-вторых все предметы теперь обрабатываются позже, и стало быть несинхронность вывода активных обьектов практически не зависит от числа выложенных или поднятых на том или ином экране предметов.
В-третьих - группировка всех энергоемких обьектов в одном месте дает возможность быстро их перетасовывать, чтобы добиться максимального отсутствия мерцания.
2. Ну заодно убрал торговца в самый конец списка обьектов, таким образом, он больше не портит предметы выложенные на фоне него.
Кто-нибудь ведет счет глюкам, связанным с торговцем? Я - нет)
- - - Добавлено - - -
Посмотрел еще раз - логика на самом деле занимает достаточно мало времени.
Так что все тормоза из-за медленного вывода/стирания спрайтов.
Например, в классическом экране с океаном обновляется 8 спрайтов с водой. И Это занимает уже почти целый кадр. А если еще плавает рыбка, обновление которой занимает треть кадра, т.к. печать со сдвигом, да с зеркальным поворотом. И все это универсально и медленно.
Мне он тоже давал исходник первой части, когда я всю первую часть дизассемблировал, подписал и улучшил)
Хорошо, что дал, для истории и вообще)
- - - Добавлено - - -
Как бы никакой помощи от Филиппа уже не требуется.
Мне надо было только разрешение на переделку, и может какие-то советы.
А так на тему Диззи-2 мы с ним еще 2 года назад общались, и он все разрешил.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Хоть и не хотелось, но пришлось переписать функции печати спрайтов.
Зеркальная печать убыстрилась раза в два.
Печать со сдвигом на пол-байта (и зеркальная в том числе) убыстрилась раза в 3 минимум.
Само по себе это игру мало где убыстряет (разве чуть сокращает время отрисовки экрана, и экраны перенасыщенные движущимися персоажами).
Однако, возможность синхронизировать активные обьекты с лучом значительно расширилась, и можно это пробовать делать.
Bedazzle(31.01.2023), Black Cat / Era CG(30.01.2023), nikon(07.02.2023), Oleg N. Cher(30.01.2023), Reobne(30.01.2023), Xela(30.01.2023)
Как и предполагалось, благодаря быстрой печати удалось все или почти все синхронизировать для SP128 и Пентагона.
Так что можно двигаться к причесыванию.
Bedazzle(31.01.2023), Black Cat / Era CG(31.01.2023), Digitizer(31.01.2023), Froggy(01.02.2023), Gutten(31.01.2023), Oleg N. Cher(31.01.2023), Reobne(31.01.2023), Xela(31.01.2023)
Видимо, конца и края этим глюкам не будет)
Выявились, в том числе благодаря тестеровщикам, редкие глюки, а именно:
1. На экране перегруженном активными обьектами, можно случайно выложить один предмет на другой.
2. Очень редко, какая-то комбинация клавиш приводит к аналогу нажатия 'Q' и выходу на стартовый экран.
3. Еще реже (я только один раз видел), при входе на экран остается не стертым первое изображение Диззи, при входе на этот экран.
Редкие глюки сложно исправить, потому что их сложно поймать в принципе.
Black Cat / Era CG(03.02.2023), drbars(04.02.2023), Oleg N. Cher(03.02.2023), Reobne(03.02.2023)
Этот глюк примерно прояснился.
Он связан с тем, что опрос клавиатуры вызывается и из основной программы, и из обработчика Диззи из прерывания.
А так как обработчик самомодифицирующийся (например, модифицирует код команды BIT x,A, чтобы сканировать нужный бит порта), то вполне логично, что наступает момент, когда опрашивается Q (или другая клавиша) из основной программы, и в это время пришло прерывание, и перемодицифировала код, и опросилось неизвестно что).
Нда уж...
Думаю, с глючно напечатанным случайно Диззи при входе на экран та же песня. Печать идет и из прерывания, и из основного кода, причем одной и той же процедурой. Но это еще не точно.
- - - Добавлено - - -
И эта проблема выяснилась. И тот же источник - конфликт прерываний и основной программы, а именно:
После нажатия 'выстрел', включается счетчик задержки следующего выстрела на 15 кадров, чтобы успел прокрутиться скроллинг инвентаря, и отработать взятие/выкладывание предмета.
Однако, счетчик инициализируется в основном цикле, а решение о нажатии 'выстрела' принимается в обработчике прерывания. В итоге эта система работает криво, и дает два артефакта.
1) Возможность выложить один предмет на другой, если экран перегружен обьектами.
2) Именно из-за этого при брании монеты (это частный случай брания предмета), если вовремя не отпустить клавишу 'выстрел' то сразу же прокручивается инвентарь и выкладывается предмет. Приходилось брать монету очень коротким нажатием 'выстрела'.
Решение: перенес инициализацию счетчика на прерывания, туда же, где принимается решение о нажатии выстрела. И немного его увеличил.
Таким образом, теперь инвентарь работает равномернее, не выкладывается один предмет на другой, и, самое приятное, после брания монеты не выкладывается предмет сразу же, а проходит достаточное время, чтобы отпустить 'выстрел'. На мой взгляд стало комфортно брать монеты и вообще пользоваться инвентарем.
- - - Добавлено - - -
Похоже, и эта проблема решена. Во всяком случае в теории, т.к. поймать на практике ее очень сложно.
И опять же те же грабли. Печать и стирание Диззи используется не только движком, который сидит на прерываниях, но и основной программой.
Например, когда берется-кладется предмет. Или же при входе в комнату.
Но из-за косяков неучтеной многозадачности (а прерывание - это многозадачность), да еще и не в том месте поставленного DI, просходят накладки.
А именно - при печати Диззи сперва начинается какая-то математика, запоминание координаты в буфере для последующего стирания, и уже потом запрещаются прерывания и печатается Диззи.
Однако, если опять же происходит наложение вызова основной программы и то, что на прерываниях, с этими данными может произойти фигня.
Что я и видел в очень редких случаях в тестах. Заходишь на экран, и внезапно в каком-то другом месте экрана печатается Диззи и остается напечатанный висеть. А все потому, что координаты сбились.
Переписал это все, надеюсь, теперь все будет правильно.
p.s.: Минус в том, что опять все это надо тестить и гонять из-за редкости глюков.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)