Black Cat / Era CG (26.06.2022), kyv (01.07.2022), mastermind (01.07.2022), OMu4 (03.07.2022), tiboh (29.06.2022), ZX_NOVOSIB (01.07.2022)
Ну в той версии, где можно свободно бродить туда-сюда, в ней и на одном экране можно вечно тусить.
- - - Добавлено - - -
Ага, сильное упрощение. Но та версия, где можно свободно гулять и долго сидеть на одном экране, набивая пузырики, всё равно показалась слишком сложной для Слайдера и он взял мою версию и ещё и читы туда вставил
А вообще я был сильно зол, что ту версию запихнули на вирт в ремиксы, куда никто обычно не заходит![]()
_
Личка заполнена! И чистить я ее не буду! Пользуйтесь адекватными средствами связи! Спасибо.
Seamos realistas y hagamos lo imposible!
Ernesto Che GuevaraПереехал сюда: SteinBlume (ex ATM CP/M Explorer)
http://era-cg.su
Black Cat / Era CG, нит. Геймплей не меняет. Вот чит на бесконечные жизни меняет, а это нет.
_
Личка заполнена! И чистить я ее не буду! Пользуйтесь адекватными средствами связи! Спасибо.
Seamos realistas y hagamos lo imposible!
Ernesto Che GuevaraПереехал сюда: SteinBlume (ex ATM CP/M Explorer)
http://era-cg.su
Натестировался в первой фазе так, что уже прохожу её по честному.
Заметил бажик. Когда в вопросике берёшь "ENERGY LOSS", зачем - то сбрасывается панель. Долго думал, но не понял зачем это. То есть всё оружие синеет, очки в ноль и так далее. Возможно это чтобы был визуальный эффект.
Убираю это непонятное, ставлю эффект потемнения панели. При взятии пузыря идёт просветление-потемнение-выравнивание. А тут будет без первой фазы, сразу потемнение.
Заметил при дебаженьи, что процедура вывода спрайта на теневой линейный экран достаточно неоптимальна. Особенно когда спрайт надо зеркалить. Таблицы не выравнены. Попробую сделать получше.
Black Cat / Era CG (04.07.2022), Djim (05.07.2022)
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Планирую. Постепенно, хаг за хагом.
Вообще не вижу. Прерывания строго выключены, компенсаторов никаких нет. Видимо расчет на то, что примерно половина спрайтов зеркалируется, а количество спрайтов не меняется резко. На разных экранах скорость игры заметно разнится. Очень быстрый экран, тот на котором берём оружие дроны.Подробнее о выводе спрайтовх
Просто посмотрите код внутреннего цикла:Сколько лишнего во внутреннем цикле!Код:ORG 0B317H;(B2ABH) SPRH EQU $+1: LD B,10H ; высота спрайта 16 пикселей LOOP1 ;------------\ PUSH BC PUSH HL SPRW EQU $+1: LD B,02H ; ширина спрайта 2 байта LOOP2 ;--------\ LD A,(DE) ; берём байт IF MIRR PUSH DE PUSH HL LD E,A LD D,00H LD HL,AD5DH ; таблица зеркаливания ADD HL,DE LD A,(HL) ; отзеркаленый байт POP HL POP DE ENDIF OR (HL) LD (HL),A INC DE DEC HL DJNZ LOOP2 ;--------/ POP HL LD HL,20H ADD HL,BC POP BC DJNZ LOOP1 ;------------/
Вообще большинство спрайтов выводятся одной процедурой. Она берёт значения из переменных в памяти, вычисляет адрес в буфере экрана, адрес спрайта в нужной фазе, пропатчивает высоту и ширину, и производит рисование в двух ветвях, без зеркалирования и с.
Но дроны, например, рисуются напрямую в процедуре обработки дронов(их я уже оптимизировал). Возможно пули тоже рисуются своей рисовалкой.
Сейчас планирую таблицу зеркаливания выровнить по 100H. Потом попробую развернуть самый внутренний цикл. Самый широкий спрайт это шестибайтный босс.
Далее интересно будет взглянуть, как статика(горы,лестницы, и.т.д) выводится. Нельзя-ли там чего ускорить.
[свернуть]
----------------------------------
Чем больше играю, тем больше не нравится платформинг. На лестнице, на второй ступеньше сверху, вообще чудеса проникновения происходят. Возможно Lethargeek прав, можно и поправить. Но код пока не смотрел.
Ещё заметил, что картошки, хотя теперь и не застревают на краю экрана, но всё ещё могут застрять внутри камней. Ещё не решил, как это поправить. Ведь они любят спать в камнях, это как бы логично.
Еще не знаю следует ли править, то что стреляя в камень, в упор, пуля вылетает с другой стороны. Был-бы куст - было-бы всё логично. Но ведь камень.
Black Cat / Era CG (04.07.2022), Digitizer (08.07.2022), Djim (05.07.2022), Oleg N. Cher (04.07.2022), OMu4 (07.07.2022)
Reobne (10.07.2022)
Оптимизировал вывод повёрнутого спрайта, так что теперь он работает быстрее чем неповёрнутый.
чуть подробнее
Перенёс таблицы экранных адресов и разворота в свободную память перед теневым экраном.
Туда сгонялся всякий мусор. Например процедура, которая высвечивает сколько мы только что набрали очков, от 100 до 900, в каждом игровом цикле записывает два байта. Когда надо засветить, то пишет в атрибутную область, а когда очков мы ещё не набрали - писала в сгонную память. Перенаправил её в ПЗУ.
Спрайты, дроны и пули, когда персонажи вылазят за верхнюю границу игрового поля, тоже "рисовались" в этой сгонной области. Для спрайтов сделал обрезание, для дронов сделал проверку, а для пуль переставил проверку перед рисованием. Да, для пуль проверка была, но после рисования, для того чтобы удалить вылетевшую пулю.
Потом надо будет переделать вывод красной картинки "REX" перед игрой, потому как она тоже пересекается со сгонной областью, и я её попортил.
[свернуть]
Но на скорости самой игры это особо не отразилось.
Хоть в игре нет компенсаторов, зато есть балласт:
1. Рисование статики в теневом экране(~84Кт(килотактов))
2. Перенос теневого экрана на видимый экран (~90Кт) (LDI:LDI...)
3. Очистка теневого экрана (~30Кт) (PUSH:PUSH...)
Пока этот балласт не трогал, а сейчас разбираю пуледвижение и пулеобразование.
А вообще планирую попробовать объединить эти 3 пункта, в один цикл, по всем знакоместам, статику выводить прямо на экран, и только когда надо. А пространство между статикой переносить и очищать сразу. Должно получиться быстрее. Если придётся, то включим кадровые прерывания, и засинхронизируемся.
Поподробнее
Движение всех пуль, зарядов, ракет и снарядов обрабатывается в одном цикле. Изменив его, мне теперь надо подправить создание всех этих типов пуль. Они создаются множеством конструкторов, которые вызывают общий родительский конструктор с несколькими входами. Сейчас всё это надо попровлять
Каждая пуля занимает 15 байт. Она хранит двойную бухгалтерию, координаты X Y отдельно, и адрес в теневом экране отдельно. Там же хранятся, скорости (смещения за игровой цикл) по координатам и по адресу. Тип пули. Принадлежность: наша или противничья. оставшееся время жизни. Для ракет фаза движения. Статус пули: есть, нет, или исчезает. И что-то возможно ещё.
Забавное место нашёл. Для проверки пролетает ли пуля через тайл вызывалась специальная подпрограмма проверки проходимости. Она, значит, брала байтик, и искала его среди 6 байтиков, в цикле с CPI. Сначала я её "оптимизировал" заменив этот цикл на CPIR. А потом вообще заметил, что значения проходимых тайлов это 0 и диапазон от #0E до #12. Заменил весь этот вызов на простые проверки.
Пули рисуются первые, на чистом теневом экране. Поэтому авторы внаглую выводят их не по OR, а прям LD. Хотя возможно некоторое затирание одних пуль другими, но это не заметно.
Турели стреляют четырёхпиксельным крестиком. А спрей стреляет покрупнее восьмипиксельным крестиком. Тип пули один и тот-же, но по разному рисуется, в зависимости от принадлежности.
[свернуть]
Сейчас всё это с первой фазой делаю, а потом ещё и со второй надо будет.
Black Cat / Era CG (14.07.2022), Digitizer (15.07.2022), Djim (21.07.2022), jerri (14.07.2022), Lethargeek (14.07.2022), Oleg N. Cher (14.07.2022), tiboh (14.07.2022)
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)