Просмотр полной версии : Косметический ремонт REX-2
Lethargeek
29.07.2006, 16:42
Давным-давно, впервые увидев REX, я был просто в восторге от графики и собс-но игры. Однако, пройдя первую часть и получив вожделенный код, был СИЛЬНО разочарован. Это же надо было так все испохабить! Просто глаза болели. Так и не смог тогда заставить себя ЭТО пройти.
И вот, через много лет, наконец дошли руки до сабжа. Сначала просто хотел убрать дурацкую повышенную яркость спрайтов в тени, а потом втянулся. ;) Правда, все-таки старался обойтись минимумом исправлений. Заценяйте, что получилось...
Хотел было сразу переделать версию для GS (с Vтрдоса), но там все запаковано, да и с тырдосом знаком поверхностно (так что сам могу только tap сделать). Может, кто возьмется за ре-релиз?
(аттач убит - окончательный вариант и картинки в конце)
Lethargeek
29.07.2006, 19:54
Только в GS-версии еще такая пакость, что код доступа там уже вбит, причем стремный - со старта нереально много очков и ни одной бомбы! :(
Так что надо будет еще либо бомбы добавить, либо (в идеале) вернуться к состоянию "до ввода кода доступа". Любая помощь приветствуется.
В любом случае, распакованный блок сильно облегчит дело...
Lethargeek
30.07.2006, 13:40
как я понял ты менял только аттрибуты спрайтов?
Не только... часть графики пришлось продублировать под синий фон, кое-что перерисовать, чтоб глаз не резало; некоторые тайлы подправил, и несколько комнат тоже.
Еще чтобы в последней комнате черный фон оставить, пришлось впихнуть кусочек кода на место неиспользованных тайлов (коих там дофига... вообще весьма небрежненько сделана вторая часть). Константы еще всякие в процедурах...
Ну ладно, пока покручу, что ты прислал.
Lethargeek
31.07.2006, 00:13
Вот твой переделанный trd. Бомбы я добавил и очки обнулил (хотя по-прежнему желательно вернуть код). Можно снимать заглушку и паковать обратно.
Если не сожмется в оригинальный размер - можно будет попробовать ненужные тайлы нулями забить, чтоб лучше сжималось.
(аттач убит)
Не только... часть графики пришлось продублировать под синий фон, кое-что перерисовать, чтоб глаз не резало; некоторые тайлы подправил, и несколько комнат тоже
А у тебя вместо черной тени яркостью все регулируется? А на некоторых (на моем реале, в частности) яркость не работает. Поэтому теперь определенные траблы возникают...
А у тебя вместо черной тени яркостью все регулируется? А на некоторых (на моем реале, в частности) яркость не работает. Поэтому теперь определенные траблы возникают...
Попробуй ризюки подпаяй на RGB, мне на KAY256 это помогло.
Lethargeek
31.07.2006, 02:32
А у тебя вместо черной тени яркостью все регулируется? А на некоторых (на моем реале, в частности) яркость не работает. Поэтому теперь определенные траблы возникают...
Гм, ну не ориентироваться же на дефектные компы, в самом деле?
И по-моему, даже совсем без теней будет лучше, чем в оригинале.
Я, например, и вариант с черным фоном (как в Rex-1) пробовал - тоже ничего себе.
вроде получилось,данный блок вставляется например STSом,97 секторов с 24499 на дорожку 147,сектор 3
Lethargeek
31.07.2006, 22:10
вдогонку блок с вводом пароля,как вставлять см.выше
Блин, а я уже туда вставил... ладно, щас переделаю.
кстати графика изменена на 205 байт.
В смысле? У меня или уже была в этой версии для GS?
...
Так, переделал, можно тестить. Только теперь в заставке второй части музыка пропала, а она там отличается от первой. :o
Можно ли вернуть ее обратно?
На всякий случай кидаю оба варианта. Прежние "служебные" вложения можно стирать.
(Потом еще tap с оригинальным звуком сюда кину, чтоб не обижать обладателей реала без GS.)
(аттач убит)
забыл сказать что в интро нажав одновременно BUGS,получаем чит меню.
насчёт графики это кол-во твоих изменений,насчёт пропажи музыки не знаю,прислал тебе свои TRDшки,надеюсь в них всё нормально.вряд ли стоит выкладывать такой объём сюда. а нашим обладателям реала проще перевести TRD на дискету,TAP только для буржуев. и ещё выложи для примера несколько скринов где показано что было и что стало.
Lethargeek
02.08.2006, 03:31
Сравнил. У меня то же самое получилось.
Если не сможешь (или не захочешь ;) ) включить обратно музыку, кинь распакованный файл с возвращенным паролем - может, я разберусь, в чем дело... И распакованный же файл до возвращения пароля (который ты мне первым послал) без заглушки GS.
Пока же в качестве релиза придется взять вариант с обнулением очков...
вот исправленный вариант:ввод пароля и музыка
56046 Call 56103 это и есть переход на ввод пароля,если убрать игра начинается с выбранными данными
Lethargeek
03.08.2006, 22:18
Короче, на данный момент финальным релизом можно считать вот это.
"Нулевый" код в архиве. Кому не нравится, тот может сам пройти Rex-1.
(Убрал в связи с экономией места и очередной переделкой. Новая версия под GS отправится прямиком на vtrdos.)
Все остальные временные вложения убиваю.
Чуть позже выложу AY-версию и картинки.
Lethargeek
01.09.2006, 04:29
Ну вот, наконец-то закончил (точнее, остановился... :) ремонт нельзя закончить, его можно только прекратить). Изменений тьма (в основном всякие корешки лучше подогнаны друг к другу) - будет заметнее всего в самых заросших комнатах. И специально для ленивых - правильный код теперь вводить необязательно, получите все оружие и бомбы, но только четыре жизни и ноль очков.
Все вышеперечисленное также вошло в новую адаптацию для GS-версии.
moroz1999
10.09.2006, 21:11
отлично получилось!
Lethargeek
12.09.2006, 06:24
отлично получилось!
Спасибо!
...Все вложения убираю в связи с выкладыванием обеих версий (GS и AY) на vtrdos и новыми (незначительными) изменениями.
ZX_NOVOSIB
19.11.2014, 23:58
Друзья, а у кого-нибудь остался несжатый блок измененного REX2 (http://vtrdos.ru/remix/REX2GFXF.ZIP)? А то на вирте блок сжатый, средствами бейсика я его не могу расжать, ибо он распаковывается одновременно с запуском игры. Или может кто-нибудь сумеет расжать этот блок и выложит здесь? :)
"Разжать" не проблема - http://sderni.ru/250691
Старт игры с адреса 38000
ZX_NOVOSIB
20.11.2014, 16:52
tiboh, спасибо! Я уже сам допёр )) просто открыл образ FAR'ом, с ZX плагинами, а он мне пишет, что это мол HRUM 3.5i, и можно войти в этот архив и скопировать его, что я и сделал :)
Всем хорош фикс от Lethargeek-а! Графика чуть красивше. Можно не вводить пароль, тогда всё оружие есть, а очки с нуля начинаются.
Только на стриме (https://zx-pk.ru/threads/29277-moi-krivye-strimy.html?p=1153814&viewfull=1#post1153814) выяснилось, сохранятся на платформе тяжко. Стоишь на ней, система работает, колёсики вертятся. А потом выясняется, что не сохранился.
На стриме, конечно, была не совсем эта версия, но суть та же.
Покапался я в коде, оказывается стоять долго бесполезно. Сохранение происходит мгновенно, в определённых позициях. То есть для надёжности сохранения нужно пройтись по платформочке из конца в конец.
Также, я побаловался, и сделал модификацию, в которой при сохранении выдаётся сообщение "SAVED". Вся логика работы платформ сохранена. Так что можно привыкнуть, когда происходит сохранение, чтобы надёжнее сохранятся в оригинальной версии. Или играть в эту.
Сам до конца ещё игру не проходил. Но надеюсь всё без глюков.
Lethargeek
31.05.2022, 14:55
Стоишь на ней, система работает, колёсики вертятся. А потом выясняется, что не сохранился.
сделал модификацию, в которой при сохранении выдаётся сообщение "SAVED"
а может, вместо рвущего темп игры сообщения, лучше пусть колёсики начинают (да и продолжают) вертеться, только если удалось сохраниться? если возможно
Теперь, если на чекпоинте крутилки крутятся, значит ты сохранился.
Думаю, надо и в первой части тоже самое сделать.
Lethargeek
31.05.2022, 23:15
еперь, если на чекпоинте крутилки крутятся, значит ты сохранился.
Но всё же иногда случается странное. Например, точно записался на второй базе (тут же проверил, убившись, потом перезагрузил снап) и через некоторое время, умирая в следующих комнатах, возрождался почему-то снова на первой.
- - - Добавлено - - -
А может, это именно вторая база проблемная? Не припомню, на стримах были случаи незаписи (после крутилок) на следующих?
тут же проверил, убившись, потом перезагрузил снап
Скорее ты в снапах как-то не так сохранился, до записи.
Я тестировал так: заснапшотился перед второй базой. Потом запрыгивал на неё, добивался чтобы крутилось, умирал, и возрождался на ней. И так много раз, по всякому.
Ну и код конкретный сейчас: сразу проверяется сохранены ли мы, только если сохранены - идёт крутилка, а если не сохранены, то уже проверка, так ли стоим, и если так, то сохраняем.
Сделал и первую часть m3. За основу взял оригинал.
- - - Добавлено - - -
А может, это именно вторая база проблемная? Не припомню, на стримах были случаи незаписи (после крутилок) на следующих?
Были несохранения и дальше. И в первой части были несохранения.
Особенно если "Speed Up" берёшь. Вообще не сохраняет.
Black Cat / Era CG
01.06.2022, 14:40
А давайте чтобы прямо идеал-релиз замутить. Может вместе со Слайдером. Я то точно щас буду играть в последние версии отсюда, а людям наверное было бы удобнее все в одном. Просто в природе есть DSK-версия для +3. Не уверен, но вроде они туды добавили звуков. Было бы прикольно на ее основе сделать один релиз со всеми опциями, типа читы, оригинальная/модифицированная графика, фикс платформ... Было бы круто просто.
в природе есть DSK-версия для +3. Не уверен, но вроде они туды добавили звуков.
так они и изначально были только для AY
...........
сравнил версии: кассета/дискета - отличий нет
Black Cat / Era CG
01.06.2022, 15:44
сравнил версии: кассета/дискета - отличий нетЗначит я криво смотрел. Сорри за дезинфу.
А вот что выяснилось на последнем стриме. Ввод пароля на Еве не получался. Буковки выстреливали с немыслимой скоростью. Нажав "8" получали "88888888888".
Покопался. Оказалось что отжатие кнопки ждётся... изменением считанного из порта байта. Вместе со старшими тремя битами. А если в них шум, или сигнал с мафона, то вот и получается резкое "отжатие", хотя физически кнопку палец ещё держит. А значит следом будет резкое нажатие, и так далее.
Подправил код, чтобы учитывалось изменение только младших 5 бит.
Попутно выяснилось, что вводить можно весьма странно, нажимая и пережимая одновременно несколько клавиш. А кнопку аш("H") и пробел ввести не получается.
ORG 0DD9BH ORG 0DD9BH
; DD9B - jump/call references:
; JP from DDF6H, DDFBH, DE07H
PUSH IY ;DD9B FDE5
; DD9D - jump/call references:
; JP from DDCCH
LD IX,AE1AH ;DD9D DD211AAE
LD IY,AE2AH ;DDA1 FD212AAE
LD B,08H ;DDA5 0608
; DDA7 - jump/call references:
; DJNZ from DDCAH
PUSH BC ;DDA7 C5
LD C,(IX+00H,AE24H) ;DDA8 DD4E00
LD B,(IX+01H,AE25H) ;DDAB DD4601
LD (A244H),BC ;DDAE ED4344A2
IN A,(C) ;DDB2 ED78
; Сканируем порты
LD B,05H ;DDB4 0605
LD E,00H ;DDB6 1E00
LD D,A ;DDB8 57
; DDB9 - jump/call references:
; DJNZ from DDBEH
RRCA ;DDB9 0F
; Сканируем кнопки
JP NC,DDCFH ;DDBA D2CFDD
; в поисках нажатой
INC E ;DDBD 1C
DJNZ DDB9H ;DDBE 10F9
POP BC ;DDC0 C1
INC IX ;DDC1 DD23
INC IX ;DDC3 DD23
LD DE,0005H ;DDC5 110500
ADD IY,DE ;DDC8 FD19
DJNZ DDA7H ;DDCA 10DB
JP DD9DH ;DDCC C39DDD
; DDCF - jump/call references:
; JP from DDBAH
; нашли нажатую кнопку
POP BC ;DDCF C1
PUSH DE ;DDD0 D5
; Совершенно ненужный пуш
; DDD1 - jump/call references:
; JP from DDDAH
LD C,(IX+00H,AE24H) ;DDD1 DD4E00
LD B,(IX+01H,AE25H) ;DDD4 DD4601
IN A,(C) ;DDD7 ED78
; Читаем снова, из того-же порта
CP D ;DDD9 BA
; Сравниваем, совпадает ли с первоначальным значением !!!!!!!!!
JP Z,DDD1H ;DDDA CAD1DD
; Если не совпадает, то значит кнопку отжали!!!????
; А может не отжали, а просто скачат биты 5,6,7, один из которых сигнал с мафона!
LD A,E ;DDDD 7B
SLA A ;DDDE CB27
SLA A ;DDE0 CB27
SLA A ;DDE2 CB27
LD D,47H ;DDE4 1647
ADD D ;DDE6 82
; лишняя пересылка в D. Можно сразу ADD 47h
LD (A246H),A ;DDE7 3246A2
POP DE ;DDEA D1
; соотретственно ненужный поп, в E и так нужное значение.
LD D,00H ;DDEB 1600
ADD IY,DE ;DDED FD19
LD A,(IY+00H,AE43H) ;DDEF FD7E00
POP IY ;DDF2 FDE1
CP A,20H ;DDF4 FE20
JP Z,DD9BH ;DDF6 CA9BDD
CP A,48H ;DDF9 FE48
JP Z,DD9BH ;DDFB CA9BDD
LD IY,DE13H ;DDFE FD2113DE
LD B,05H ;DE02 0605
; DE04 - jump/call references:
; DJNZ from DE0CH
CP (IY+00H,AE43H) ;DE04 FDBE00
JP Z,DD9BH ;DE07 CA9BDD
INC IY ;DE0A FD23
DJNZ DE04H ;DE0C 10F6
LD IY,DE13H ;DE0E FD2113DE
RET ;DE12 C9
Патч заключался в замене
CP D ;DDD9 BA
На
XOR D
AND 1Fh
То есть на сравнение не всего байта, а только младших 5-ти бит.
Black Cat / Era CG
02.06.2022, 05:53
А кнопку аш("H") и пробел ввести не получается.Это потому что они захардкожены на Паузу и Смарт-бомбу, видимо.
Bedazzle
02.06.2022, 15:18
Ввод пароля на Еве не получался. Буковки выстреливали с немыслимой скоростью.
Оно не только на Еве. Именно по этой причине не смог когда-то давно играть на 48м клоне.
Bedazzle, Авторы Rex-а торопились наверное. Как вообще это раньше не замечали.
Хорошо, что они оставили совершенно ненужные PUSH-POP, и LD D,NN: ADD D вместо ADD NN. Легко было пропатчить, стерев этот балласт. :)
- - - Добавлено - - -
А кто нибудь замечал, что лазер на максимальной энергии коротко бьёт? Как думаете, глюк или так и надо?
Black Cat / Era CG
02.06.2022, 17:17
Подправил код, чтобы учитывалось изменение только младших 5 бит.
Работает отлично! Никаких дребезгов!
- - - Добавлено - - -
А кто нибудь замечал, что лазер на максимальной энергии коротко бьёт? Как думаете, глюк или так и надо?Что коротко бьет замечал, не смотрел на прокачку. Может так и хотели, а может перепутали.
Иногда капельки визуально превращаются в какое то непотребство. Начал копать, и нашёл причину.
Фрагмент расшифровщика-создателя объектов, при построении экрана
ORG 0CB8FH
OR A ;CB8F B7
CALL Z,CC05H ;CB90 CC05CC
CP A,01H ;CB93 FE01
CALL Z,CC40H ;CB95 CC40CC
CP A,02H ;CB98 FE02
CALL Z,CC75H ;<-- капля ;CB9A CC75CC
; вычисляя случайное число "терпения" капли, оставляет его в A
CP A,03H ;CB9D FE03
CALL Z,CC53H ;CB9F CC53CC
CP A,04H ;CBA2 FE04
CALL Z,CC9DH ;CBA4 CC9DCC
CP A,05H ;CBA7 FE05
CALL Z,CCF3H ;CBA9 CCF3CC
CP A,09H ;CBAC FE09
CALL Z,CCD1H ;CBAE CCD1CC
CP A,06H ;CBB1 FE06
CALL Z,CC18H ;CBB3 CC18CC
CP A,0EH ;CBB6 FE0E
CALL Z,CD15H ;CBB8 CC15CD
CP A,7CH ;CBBB FE7C
CALL Z,CCBFH ;CBBD CCBFCC
; если случайно "терпение" капли будет равно 7C, то... капля превратится в это
Вылечил, минимальными изменениями, переставив вызов конструктора капли в самый конец.
Остальные конструкторы просто заполняют данные объекта константами, не меняя А
Лучше было-бы выделить этот блок CASE в отдельную подпрограмму, и все эти CALL Z заменить на JP Z, тогда не нужно было-бы помнить, что аккумулятор в конструкторах менять нельзя.
Но я ещё не закончил. Теперь хочу понять, почему от объектов, близких к левому краю, не остаётся пузырей. Это и в первом уровне Рекса так.
только мне кажется странным смерть всех врагов на экране после гибели Рекса ?
ну допустим умирая он активирует бомбу, но если бомб у него нет ?
goodboy, При желании хороший фантаст всему найдёт объяснение. Хотя это и трудно.
Почему бомбы выпадают из врагов, но враги никогда ими не пользуются? Наверное это трофейные смартбомбы, отнятые у других наёмников. Людишки ими пользоваться не могут, так как они настроены убивать всё кроме носорогов.
Почему Рекс сразу не взял весь арсенал, а собирает оружие в каких-то ракетах? Наверное он очень бедный наёмник. Даже энергию оружия с собой принёс не очень много.
Почему Рекс умирая взрывается? Наверное всегда имеет "последнюю гранату". Или эта "граната" встроена в систему возрождения, чтобы эта система не попала людишкам. Тогда как же трофейные смартбомбы? А у других, ещё более бедных наёмников, нету системы возрождения. Они с нулём запасных жизней.
Думаю придумать можно всякое. На крайняк перейти от фантастики к фэнтези. :)
Black Cat / Era CG
08.06.2022, 12:35
только мне кажется странным смерть всех врагов на экране после гибели Рекса ?
ну допустим умирая он активирует бомбу, но если бомб у него нет ?Не знаю, по крайней мере на баг это не похоже. Меня больше удивили последний "босс". Два раза удивил :)
Всё узнал, про образование пузырей слева. Осталось дело техники.
Они специально сделали чтобы слева пузырь не появлялся (проверка на C0B2), потому что пузырёк, если он появится, то не берётся.
А не берётся он потому, что работа с хитбоксами (D003) ведётся не совсем по правильным формулам. Надо переписать.
Заодно нашёл баг. процедура учёта очков (вызов 984D) портит регистр B, а в нём счётчик. (Поэтому, если если пуля убьёт кого-то, очки зачислятся, и ещё 256 "пуль" дальше по памяти могут быть обработаны как пули, хотя там не пули уже. А от этого чёрт знает что может произойти)
работа с хитбоксами ведётся не совсем по правильным формулам. Надо переписать.
похожее было в WDW2, там в процедуре попадания пули не обрабатывалась крайняя левая колонка.
Lethargeek
09.06.2022, 12:30
может, стоит и для платформ поправить обсчёт провала?
чтобы симметрично, а не как сейчас, когда просто повернулся и провалился
только проверять нужно, мб где-то нужен провал вниз на месте
может, стоит и для платформ поправить обсчёт провала?
О, это трудно. Это значительно изменит геймплей. Не возьмусь.
Я исправил косяки, в которых я уверен, что это косяки.
А платформинг... Так нарисован спрайт Рекса, что смотрит вправо, а ступни сдвинуты левее, и наоборот. Игрок должен привыкать.
-------------
Текущая версия Rex2 m5.
Исправлены пузырики с левого края.
Исправлен косяк с изображением "капли".
Устранена некоторая "утечка памяти".
Устранён глюк с авторовтором, при вводе пароля
Крутилки на чекпоинтах крутятся, значит было сохранение.
Black Cat / Era CG
11.06.2022, 01:06
Ура!
Black Cat / Era CG
11.06.2022, 02:10
Он же текущие билды постоянно выкладывает :)
Когда релиз ?
я про ре-релиз
Какой такой? С интро и читами? Возможно Слайдер сделает через какое-то время.
Он же текущие билды постоянно выкладывает
Стримы по Рексу кончились, и мотивация упала. Хотел ещё посмотреть дальнострельность лазера и индикацию заряда неиспользуемого оружия. Не уверен, что это баг или глюк, может так и надо? Но не знаю. Можно было-бы сделать выбор "системных" кнопок: пауза, сброс, смартбомба. Но тоже лениво.
Точно думаю сделать Рекс 1 модификацию 5. Капель в первой фазе нет, а пузырики слева не появляются (уже на 2-м экране есть турель слева), и "утечка памяти". Надо бы исправить по горячему. Код в первой и второй фазе в основном совпадает, только в разных адресах.
вспомнил что ещё есть играбельная демоверсия с экранами второй части, а врагами из первой.
https://archive.org/download/World_of_Spectrum_June_2017_Mirror/World%20of%20Spectrum%20June%202017%20Mirror.zip/World%20of%20Spectrum%20June%202017%20Mirror/sinclair/magazines/YourSinclair/Issue35/Tape/YSIssue35-SmashTape10.tzx.zip
(на второй стороне)
играбельная демоверсия с экранами второй части, а врагами из первой
Не видел эту.
Решил проверить, есть ли тут турели близкие к левому краю экрана. (Да я одержим ими :) )
Внезапно и случайно прошёл. Тут не так много экранов.
Пробовал непрерывно стрелять и не брать пузыри. Энергия оружия вообще не падает. И со смертью тоже. А значит не может спустится ниже жёлтых дронов. Ну, кроме дронов в этом миксе нет оружия вообще.
Поскольку он такой маленький, то возится с ним, что-то исправлять, не вижу особого смысла.
Заметил странность, пытаясь фармить мелкие пузырики на стартовом экране.
Постепенно прокачивается дронопушка, и количество дронов растёт. Докачавшись до белого, дроны встают полным кольцом. Всё пока как надо.
Копим дальше пузырики, и вот начинает качаться 5-е оружие, которого нет. Оно становится магентовым, и... дронов становится только четыре. Хотя дронопушка так и белая.
Не логично. Глюк по моему. Согласны?
Надо поэкспериментировать в классических частях Рекса. Взять только дронопушку.
Прошёл, понимаешь, первую фазу, взяв только дроны. Заметил, что та же ерунда, прокачав дроны, и прокачивая невзятое оружие, опять растёт количество дронов от 4. Хотя по логике должно оставаться максимальное.
Ладно, получил пароль(9990908307709007), ввожу его во вторую фазу. Энергию мне понизили до лазера. Лазер я не брал... но стреляю с лазера! Иконка пустая, но пульки лазерные вылетают. После первой смены оружия на дроны или наоборот, на первую пушку, больше лазер включить нельзя. Но начальная инициализация жёсткая на лазер! Стопроцентный глюк!
Black Cat / Era CG
11.06.2022, 23:58
Ты крут. Взял и прошел первую фазу.
Ты крут. Взял и прошел первую фазу
Не, не! Ничего крутого! Я откатами пользовался. Это просто эксперимент. :)
Разобрался и перелопатил (пока для первой фазы) блок процедур, контролирующих прокачку оружия и индикацию. Поисправлял косячки. Еле впихнул в то же место, пришлось даже JP шки переделать на JR-ы.
Пока глючит(сам где то понакосячил), но глючит в нужном направлении! :) Осталось отладить.
Одно тянет за собой другое, вроде всё поправил, но надо потестировать получше.
Несколько выясненных фактов:
* Изначальная пушка не теряет энергию при стрельбе. Вызывается процедура уменьшения энергии с параметром 0.
* Чтобы подзарядить оружие, надо набрать 120 энергии. При понижении уровня остаётся 50 единиц. Вот такое низкое КПД=50/120=0,41(6)
* При возрождении теряется 100 единиц энергии. Если накоплено 100-119 - уровень не понижается(например белый, так и останется белым). Если накоплено 50-99 - уровень понижается (белый станет жёлтым). Если было накоплено меньше 50, то уровень понижается два раза(белый станет циановым)!
* После взятия пузырика панель вспыхивает. Пока идёт вспышка, бегунок не бегает, время не идёт. Теоретически можно непрерывно выбивая из наступающих врагов пузырики, продержаться как угодно долго на экране.
* Взявши вопросиком "100 rapid fire", у нас возникает турбокнопка огня. Надо её держать, для непрерывного огня. А я раньше её, по привычке, продолжал тыкать.
Некоторые поправленные баги:
* Перекачав спрей(последнее оружие), остаток энергии не устанавливался на максимум. Из за этого труднее было держать его в состоянии 8-вэй (стрельба "ферзём"). Например набрав шариков до 122 единиц энергии, 120 сбрасывалось, оставалось 2, и через пару выстрелов уровень понижался до 4-вэй (стрельба "ладьёй"). А между ферзём и ладьёй большая разница. Подправил это. Теперь энергия насыщается до 120.
* Бегунок индикации времени, двигаясь вправо не писал в теневой буфер. Из-за этого, после вспышки, появлялось зелёное, там где не надо. Конечно оно затиралось проходом бегунка, но глянув до того как он пройдёт, можно было подогнаться, что времени осталось очень мало.
* Индикация заряда оружия, во время вспышки, вообще не рисовалась. Сделал, чтобы рисовалось в теневой буфер. А то из за этого, прокаченное оружие иногда оставалось жёлтым. Допустим, брались несколько пузыриков, первый запустил вспышку, а остальные прокачали лазер с жёлтого, до спрея.
Осталось разобраться:
* Лазер, всё ещё, иногда коротко стреляет
* "картошки" иногда застревают на краю экрана. Особенно на левом краю, на экране перед боссом.
* Дроны у меня как то раз неровно встали. Обычно они расставлены с равным интервалом, а тут внезапно наехали друг на друга. В процедуре добавления энергии оружия, при переходе оружия на новый уровень, вызывается костыль, который жёстко константами расставляет дроны в ряд. Хорошо бы наладить дроны, чтобы этот костыль можно было убрать.
Сейчас я мучаю первую фазу, надо будет адаптировать патч для второй фазы.
Кому интересно глянуть, прикладываю текущий снапшот. (В нём можно выбить пузырик из самой левой турели на втором экране, подобрать его, полюбоваться как панель меньше глючит... :) )
Товарищи, а реально сделать играбельной демку? Чтобы игрок сам мог побегать. https://spectrumcomputing.co.uk/pub/sinclair/games/r/RexDemo.tap.zip
Товарищи, а реально сделать играбельной демку? Чтобы игрок сам мог побегать. https://spectrumcomputing.co.uk/pub/sinclair/games/r/RexDemo.tap.zip
а где там бегать?
а где там бегать?
Юрий, если посмотреть карту, то это часть первого уровня . обрезали из-за нехватки памяти?
https://maps.speccy.cz/map.php?id=Rex
Юрий, если посмотреть карту, то это часть первого уровня . обрезали из-за нехватки памяти?
https://maps.speccy.cz/map.php?id=Rex
а гдето есть версия Рекс где все в одном включая тутор?
jerri, Изначально на кассете, на двух сторонах, ВСЁ было.
Для ТР-ДОС вот тут (https://zxart.ee/rus/soft/compilation/games/rex-1-2-demo/) нашёл релизы, где тоже ВСЁ есть.
Или ты имеешь ввиду, чтобы все части сразу загружались в 128К?
Кстати при попытке переопределить клавиши происходит сильный дребезг клавиатуры, похоже это касается всех релизов.
Кстати при попытке переопределить клавиши происходит сильный дребезг клавиатуры, похоже это касается всех релизов.
Не замечал.
Там ждётся нажатие кнопки, потом отпускания. Два раза одну и туже кнопку выбрать нельзя. Даже если дребезг, то как это помешает?
Я во второй фазе, фиксил дребезг, который мешал ввести пароль.
jerri, Изначально на кассете, на двух сторонах, ВСЁ было.
Для ТР-ДОС вот тут (https://zxart.ee/rus/soft/compilation/games/rex-1-2-demo/) нашёл релизы, где тоже ВСЁ есть.
Или ты имеешь ввиду, чтобы все части сразу загружались в 128К?
В такое конечно было бы интересно поиграть, начиная с приплытия корабля и заканчивая концовкой второй части. Не прерываясь на загрузку и ввод пароля.
начиная с приплытия корабля и заканчивая концовкой второй части
Если переделывать в 128-ю версию, то у Рекса есть большой резерв оптимизации.
Сейчас экран рисуется в теневом линейном буфере с нуля (обнуление PUSH,PUSH,PUSH...), послойно, а в конце статика. И переброска (POP DE: LDI, LDI, LDI...) Прерываний строго нет.
Можете глянуть приложенный файл, я там сделал переброску буфера в экран после рисования каждого слоя. На 30% скорости эмуляции ещё виднее.
Так вот, теоретически можно попробовать не рисовать статику в каждый цикл, а всё подвижное рисовать промеж статики (она точно по знакоместам). Синхронизировать с прерываниями. И может использовать 7-ю страницу, чтоб не перебрасывать, а переключать.
Но это всё мечты. Проще слепить 128к версию, где все уровни упаковать в доп память, и распаковывать очередную фазу по мере прохождения.
Что-то подобное сделал KSA в Stormlord's Collection: https://vtrd.in/release.php?r=23b048bdda0645a1bc5677e157fda4e8
после прохождения части грузится следущая. Ну и в случае 128к можно уместить оба рекса в памяти.
- - - Добавлено - - -
- - - Добавлено - - -
Не замечал.
Там ждётся нажатие кнопки, потом отпускания. Два раза одну и туже кнопку выбрать нельзя. Даже если дребезг, то как это помешает?
Я во второй фазе, фиксил дребезг, который мешал ввести пароль.
Странно, не могу теперь это вопроизвести. USP в Arco linux, скорей всего было неактивно окно эмулятора.
Картошками я называю летающие хреновинки, округлые, размером примерно в знакоместо, которые изначально установлены на экране, случайно ползающие. Часто они изначально спят в разрушаемом камне. Если этот камень расстрелять, то через четыре игровых цикла картошка проснётся.
Картошка всё время ходит так: выбирается случайное направление, и устанавливается счётчик прямого хода - случайное число от 8 до 15. Пройдя в одном направлении столько шажочков, этот счётчик обнуляется, и по новой, новое случайное направление со счётчиком от 8 до 15. Натыкаясь на препятствие кортошка разворачивается на 180 градусов, а счётчик прямого хода устанавливается в 4.
В оригинальной игре был такой недочёт. Проверялось, рядом ли картошка с краем экрана, и если рядом, то направление меняется на противоположенное, и счётчик прямого хода устанавливается на 4. Естественно прогер хотел, чтобы она отражалась от краёв. Но иногда, случалось неприятность. В момент попадания на край, у картошки кончался прямой ход, и она выбирала направление от края. Затем проверка показывала, что, а мы оказывается на краю, направление менялось на противоположенное, и делался ещё один шаг к краю. Плюс счётчик прямого хода в 4. И вот мы уже углубились в зоны края экрана, и постоянно меняя направление дёргаемся там. А случайное направление больше не вызывается, потому что счётчик прямого хода не обнуляется.
Пропатчил я это место (C0E0..C148). Утрамбовал всё. Добавил, чтобы проверялось конкретно: зашли на левый край, значит скорость вправо; зашли на правый край, значит скорость влево, и по вертикали то же.
Байтов хватило тика в тику.
Что получилось, см. снапшот.
Но это всё мечты. Проще слепить 128к версию, где все уровни упаковать в доп память, и распаковывать очередную фазу по мере прохождения.
Этого было бы вполне достаточно. Как вариант, можно ещё добавить возвращение на предыдущий экран, как это сделано в этом релизе - https://vtrd.in/release.php?r=ccdd276d8d6058647834ffac37ab1717
Только без оживления убитых врагов.
И ещё непонятно, как Rex из демо версии с кораблём должен переходить на первый игровой экран (первой части), судя по карте прохода там нет.
Как вариант, можно ещё добавить возвращение на предыдущий экран, как это сделано в этом релизе
Сначала надо-бы найти или придумать научнофантастическую причину, почему Рекс не может долго находится на одном экране. Потому что свободный проход несколько ломает это ограничение. Или остаток времени на экране тоже сохранять?
Только без оживления убитых врагов.
А с переносом на платформу врагов тоже не оживлять?
И ещё непонятно, как Rex из демо версии с кораблём должен переходить на первый игровой экран (первой части), судя по карте прохода там нет.
Ну это можно сделать, например так. Сделать чтобы был проход, но чтобы он заваливался после прохождения. Или чтобы Рекс попадал туда, через особую телепортационную.
Но больше всего мне нравится вариант, сделать ещё один экран, сразу под стартовым. В него мы заходим через тоннель слева из демоуровня. Из него можно идти направо, к поездам, а можно подняться наверх, и впрыгнуть в изначально стартовый экран, прям из пола под платформой возрождения.
Нарисовал
Как сделать гладкий переход из первой фазы во вторую, придумать тоже надо. Тут мы на лифту поднимаемся, а потом из телепорта выходим, негладко. Возможно, в промежутке, опять загрузить демо-фазу, и из неё использовать некоторые экраны, с голубыми блоками. Тем более голубые блоки появляются вкраплениями в конце первой фазы.
Сначала надо-бы найти или придумать научнофантастическую причину, почему Рекс не может долго находится на одном экране. Потому что свободный проход несколько ломает это ограничение. Или остаток времени на экране тоже сохранять?
Я бы вообще выкинул ограничение по времени нахождения на одном экране, но добавил запрет двигающимся врагам появляться на экране после окончания времени, чтобы Rex не смог собирать бонусы бесконечно долго.
А с переносом на платформу врагов тоже не оживлять?
По идее да, если Rex убил (взорвал) статичного врага (пушку, ракетницу), то его уже быть не должно. Можно конечно предположить, что вражеские солдаты устанавливают новую технику, взамен взорванной...
Эти два вопроса нуждаются в дискуссии.
Ну это можно сделать, например так. Сделать чтобы был проход, но чтобы он заваливался после прохождения. Или чтобы Рекс попадал туда, через особую телепортационную.
Но больше всего мне нравится вариант, сделать ещё один экран, сразу под стартовым. В него мы заходим через тоннель слева из демоуровня. Из него можно идти направо, к поездам, а можно подняться наверх, и впрыгнуть в изначально стартовый экран, прям из пола под платформой возрождения.
Нарисовал
Да, это лучший вариант. Там даже рисовать особо не надо. В демоверсии, экран следующий после корабля, направо, находится сразу над стартовым экраном, в нём есть проход вправо по тоннелю. Остаётся только проделать ещё один проход вверх, на стартовый экран.
Как сделать гладкий переход из первой фазы во вторую, придумать тоже надо. Тут мы на лифту поднимаемся, а потом из телепорта выходим, негладко. Возможно, в промежутке, опять загрузить демо-фазу, и из неё использовать некоторые экраны, с голубыми блоками. Тем более голубые блоки появляются вкраплениями в конце первой фазы.
В принципе, достаточно нарисовать на стартовом экране второй части кусочек лифта уходящий вниз, и сделать чтобы Rex по нему поднялся вверх на платформу. Получается всё логично, прямой лифт снизу из первой части, во вторую. Небольшие отличия в расцветке лифта значения не имеют, просто покрасили одну часть лифта в один цвет, другую в другой.
Black Cat / Era CG
20.06.2022, 14:07
Я бы вообще выкинул ограничение по времени нахождения на одном экране, но добавил запрет двигающимся врагам появляться на экране после окончания времени, чтобы Rex не смог собирать бонусы бесконечно долго.Ну по идее это довольно сильное упрощение :) Если делать, то лучше как опцию.
Забавное "кругосветное" путешествие по коду у меня получилось. В поисках причины почему лазер стреляет коротко.
Начал с ловушки нажатия клавиши огонь. Обнаружил, что зачем-то оно вызывается 2 раза, когда можно просто сохранить результат первого в стеке. Поправил, зачем лишнее время тратить.
Потом разбирал что делается при выстреле лазером, я-то наивный думал, что делается такая себе пуля, только длинная. Но нет, делается короткая пуля. Но эта короткая лазерная пуля помнит где она появилась, и 8 циклов делает в этом месте ещё по одной лазерной пуле, которые уже новых пуль не рождают.
Поэтому без разницы что будет с Рексом после выстрела, он может уйти, упасть и отвернуться, лазерный луч будет продолжать выходить из одной и той же точки. Но если лидирующая пуля попадёт во что нибудь, или покинет экран, то генерация луча тут-же прервётся. Поэтому стрелять лазером в упор не так эффективно. Если лазерная пуля лидер успеет создать побольше хвостовых пуль, то все они более массово вопьются в цель.
В общей куче, каждая пуля занимает 15 байт. Последний байтик, как раз, и хранит, сколько циклов осталось пуле лететь. А оно инициализируется из ячейки A068. А эта ячейка пишется.. в процедуре увеличения уровня оружия, которую я уже разбирал. И я вернулся туда, где уже был. Если бы я тогда потрудился узнать, где значение A068 используется, то уже бы наладил лазер, продолжая думать, что лазерный луч - одна длинная пуля. :)
Ячейка A068, конечно писалась, но только когда уровень оружия повышался. А когда уровень оружия понижался - нет, и когда оружие
полностью прокачивалось, и начиналось качаться следующее - тоже нет. Как будто не туда эту формулу влепили, или продублировать забыли.
Переставил так, чтобы ячейка A068 всегда соответствовала уровню оружия из которого стреляем.
Теперь стало всё работать логично. И оказалось, что лазер с минимальной прокачкой, стреляет даже ещё короче, чем нам казалось коротко. Наверное, так и было задумано, просто не работало из за слишком торопливого кодинга.
Про дроны.
Убрал костыль, который вызывался при повышении уровня оружия, из-за которого дроны сбрасывались в исходное положение. Выглядело как скачок.
Переписал саму процедуру движения дронов, чтобы работала без костыля. Заодно ускорил и сократил. Выиграл 66 байт.
Жалко, столько байт пропадает, хочу что нибудь вставить.
Например, чтобы дроны крутились в ту сторону, куда повёрнут Рекс. (Как в Киберноиде).
Или чтобы дроны не так резко появлялись и исчезали.
Вроде это не должно сломать игру?
Black Cat / Era CG
24.06.2022, 16:06
Даже не знаю.
Например, чтобы дроны крутились в ту сторону, куда повёрнут Рекс. (Как в Киберноиде).
Или чтобы дроны не так резко появлялись и исчезали.
Кажется получилось. Впихнул. Поглаже стало.
ZX_NOVOSIB
01.07.2022, 05:00
Я бы вообще выкинул ограничение по времени нахождения на одном экране, но добавил запрет двигающимся врагам появляться на экране после окончания времени, чтобы Rex не смог собирать бонусы бесконечно долго.
Ну в той версии, где можно свободно бродить туда-сюда, в ней и на одном экране можно вечно тусить.
- - - Добавлено - - -
Ну по идее это довольно сильное упрощение Если делать, то лучше как опцию.
Ага, сильное упрощение. Но та версия, где можно свободно гулять и долго сидеть на одном экране, набивая пузырики, всё равно показалась слишком сложной для Слайдера и он взял мою версию и ещё и читы туда вставил :v2_dizzy_facepalm:
А вообще я был сильно зол, что ту версию запихнули на вирт в ремиксы, куда никто обычно не заходит :mad:
Black Cat / Era CG
01.07.2022, 06:36
А вообще я был сильно зол, что ту версию запихнули на вирт в ремиксы, куда никто обычно не заходитНу так это уже по сути ремикс и есть. Ибо геймплей сильно меняет.
ZX_NOVOSIB
01.07.2022, 08:50
Black Cat / Era CG, нит. Геймплей не меняет. Вот чит на бесконечные жизни меняет, а это нет.
Black Cat / Era CG
01.07.2022, 12:51
Вот чит на бесконечные жизни меняет, а это нет.Чит -- это чит. Его можно включить, а можно не включать. Я почти на 100% уверен, что если бы фича со свободным перемещением так же была опциональной, то у Shaddow Maker'a не было бы причин помещать игру в ремиксы.
Натестировался в первой фазе так, что уже прохожу её по честному.
Заметил бажик. Когда в вопросике берёшь "ENERGY LOSS", зачем - то сбрасывается панель. Долго думал, но не понял зачем это. То есть всё оружие синеет, очки в ноль и так далее. Возможно это чтобы был визуальный эффект.
Убираю это непонятное, ставлю эффект потемнения панели. При взятии пузыря идёт просветление-потемнение-выравнивание. А тут будет без первой фазы, сразу потемнение.
Заметил при дебаженьи, что процедура вывода спрайта на теневой линейный экран достаточно неоптимальна. Особенно когда спрайт надо зеркалить. Таблицы не выравнены. Попробую сделать получше.
Заметил при дебаженьи, что процедура вывода спрайта на теневой линейный экран достаточно неоптимальна. Особенно когда спрайт надо зеркалить. Таблицы не выравнены. Попробую сделать получше.
будешь переписывать спрайты?
А как у них делается синхронизация по скорости?
будешь переписывать спрайты?
Планирую. Постепенно, хаг за хагом.
Просто посмотрите код внутреннего цикла:
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 прав, можно и поправить. Но код пока не смотрел.
Ещё заметил, что картошки, хотя теперь и не застревают на краю экрана, но всё ещё могут застрять внутри камней. Ещё не решил, как это поправить. Ведь они любят спать в камнях, это как бы логично.
Еще не знаю следует ли править, то что стреляя в камень, в упор, пуля вылетает с другой стороны. Был-бы куст - было-бы всё логично. Но ведь камень.
Еще не знаю следует ли править, то что стреляя в камень, в упор, пуля вылетает с другой стороны. Был-бы куст - было-бы всё логично. Но ведь камень.
Да, глюки нужно исправлять, по возможности.
Оптимизировал вывод повёрнутого спрайта, так что теперь он работает быстрее чем неповёрнутый. :)
Перенёс таблицы экранных адресов и разворота в свободную память перед теневым экраном.
Туда сгонялся всякий мусор. Например процедура, которая высвечивает сколько мы только что набрали очков, от 100 до 900, в каждом игровом цикле записывает два байта. Когда надо засветить, то пишет в атрибутную область, а когда очков мы ещё не набрали - писала в сгонную память. Перенаправил её в ПЗУ.
Спрайты, дроны и пули, когда персонажи вылазят за верхнюю границу игрового поля, тоже "рисовались" в этой сгонной области. Для спрайтов сделал обрезание, для дронов сделал проверку, а для пуль переставил проверку перед рисованием. Да, для пуль проверка была, но после рисования, для того чтобы удалить вылетевшую пулю.
Потом надо будет переделать вывод красной картинки "REX" перед игрой, потому как она тоже пересекается со сгонной областью, и я её попортил.
Но на скорости самой игры это особо не отразилось. :(
Хоть в игре нет компенсаторов, зато есть балласт:
1. Рисование статики в теневом экране(~84Кт(килотактов))
2. Перенос теневого экрана на видимый экран (~90Кт) (LDI:LDI...)
3. Очистка теневого экрана (~30Кт) (PUSH:PUSH...)
Пока этот балласт не трогал, а сейчас разбираю пуледвижение и пулеобразование.
А вообще планирую попробовать объединить эти 3 пункта, в один цикл, по всем знакоместам, статику выводить прямо на экран, и только когда надо. А пространство между статикой переносить и очищать сразу. Должно получиться быстрее. Если придётся, то включим кадровые прерывания, и засинхронизируемся.
Движение всех пуль, зарядов, ракет и снарядов обрабатывается в одном цикле. Изменив его, мне теперь надо подправить создание всех этих типов пуль. Они создаются множеством конструкторов, которые вызывают общий родительский конструктор с несколькими входами. Сейчас всё это надо попровлять:v2_crazy:
Каждая пуля занимает 15 байт. Она хранит двойную бухгалтерию, координаты X Y отдельно, и адрес в теневом экране отдельно. Там же хранятся, скорости (смещения за игровой цикл) по координатам и по адресу. Тип пули. Принадлежность: наша или противничья. оставшееся время жизни. Для ракет фаза движения. Статус пули: есть, нет, или исчезает. И что-то возможно ещё.
Забавное место нашёл. Для проверки пролетает ли пуля через тайл вызывалась специальная подпрограмма проверки проходимости. Она, значит, брала байтик, и искала его среди 6 байтиков, в цикле с CPI. Сначала я её "оптимизировал" заменив этот цикл на CPIR. А потом вообще заметил, что значения проходимых тайлов это 0 и диапазон от #0E до #12. Заменил весь этот вызов на простые проверки.
Пули рисуются первые, на чистом теневом экране. Поэтому авторы внаглую выводят их не по OR, а прям LD. Хотя возможно некоторое затирание одних пуль другими, но это не заметно.
Турели стреляют четырёхпиксельным крестиком. А спрей стреляет покрупнее восьмипиксельным крестиком. Тип пули один и тот-же, но по разному рисуется, в зависимости от принадлежности.
Сейчас всё это с первой фазой делаю, а потом ещё и со второй надо будет.
Подправил создание пуль, чтобы вылетали изнутри стреляющего, а не как раньше, возникали перед пушкой. Для спрея приделал костылёк, чтобы распылялось всё таки перед пушкой.
Когда покадрово сравнивал старую и новую анимацию выстрелов, внезапно заметил, что сама собой наладилась анимация попадания пульки от турели в землю. Раньше было так: 1 - рисовалась пулька , 2 - двигались её координаты, 3 - проверялось попадание, начало вспышки рисовалось в этом же кадре, 4 - потом уже смещался адрес. В результате был крестик, поверх которого точка, не OR, а LD, и получалась вертикальная палочка.
А сейчас я перенёс первый пункт после четвёртого, и такого налезания нет.
Прикладываю последнюю версию, но не пугайтесь, что Вторая заставка, красный "REX" подпорчена, это я на потом оставил поправить.
А пока взялся вникать, как рисуется статика. Оказалось, что в цикле, через стек читается адрес знакоместа в теневом экране и в "знакогенераторе", потом переносится 8 байт знака и так далее.
Данные для этого, что и куда переносить, готовятся при входе в экран. Всё закодировано 10х7 блоками, каждый состоит из 3х3 значков. Чтобы лучше понять что там, начал ляпать в Лазарусе просмоторщик уровней, с прицелом в дальнейшем на редактор.
Забавные вещи. Область в 30х21 байт выделена для того чтобы писать туда порядковый номер вывода на экран значка. И это потом нигде не используется. Наверное было для отладки, а потом забыли.
Чтобы умножить на 70, нужно все лишь семьдесят раз сделать "ADD HL,DE".
Переделать процедуру входа на экран планирую так:
1 Изменить цикл, чтобы шёл не блоками 3х3 а строками символов, для меньшего мерцания. Статику выводить прямо на экран. В команды писать вывод, опять-же на экран, статику, только ту, которая не статика, то есть всякие дёргающиеся стрелки, крутящиеся крутилки и ползающие элеваторы-транспортёры. Также сразу в те-же команды писать команды переноса строчек символов из теневого экрана в основной, те на которых могут быть спрайты.
Lethargeek
17.07.2022, 19:41
Reobne, на всякий учти, что, насколько помню, я впёр смену цвета фона на чёрный для последнего экрана куда-то в неиспользуемый тайл 3x3
Lethargeek, Спасибо, посмотрю.
В оригинале вывод работает так:
1 На теневом экране рисуются спрайты (Пули, Рекс, дроны, противники)
2 На теневом-же экране рисуется вся статика, о ней ниже поподробнее.
3 Теневой экран переносится в видимый.
4 Теневой экран стирается.
При входе Рекса на экран, формируется список того, что нужно сделать чтобы нарисовать статику. Там команды "печати значка", адреса куда и откуда переносить из набора значков в теневой экран. И в конце код завершения #FF.
Порядок переноса - блоками 3х3
01 02 03 10 11 12 19 20 21 ...
04 05 06 13 14 15 22 23 24 ...
07 08 09 16 17 18 25 26 27 ...
...
Всякие крутилки в статике реализуются изменением, на каждом игровом цикле, прямо в наборе значков.
Видно, что проделывается много лишней работы. Больший процент статики не меняется, однако печатается в теневой экран, потом переносится в основной-видимый, а потом стирается.
У меня идея этапы 2 и 3, а может и 4, делать сразу, за один проход.
Для начала изменить порядок перебора знакомест с блоков 3х3 на линейную
01 02 03 04 ...
31 32 33 34 ...
...
Всю неподвижную статику рисовать один раз, сразу на экране, чтобы потом в игровом цикле её вообще не трогать.
Список команд разнообразить.
Сделать команду печати подвижной статики, прямо на основной экран, а не в теневой.
Сделать команду переноса из теневого экран в основной, участков со спрайтами.
Ну и, конечно, команду завершения, как же без неё?
Вход в команду, через стек, по RET. Далее POP-ами берём аргументы, откуда, куда и сколько. Переносим. При выходе восстанавливаем указатель стека.
Чтобы включить прерывания, просто продублируем этот список команд, чтобы можно было быстро восстановить подпорченное.
Со стиранием теневого экрана ещё не решил. Думаю попробовать оставить как есть, стирать целиком PUSH 0; и попробовать другой вариант, стирать только то, что перенесли. Пуши, они быстрее, но стирают лишнее.
Lethargeek, Хм, а я не вижу разницы с оригиналом. Смотрел на скорости 20%. Пулька действительно немного налазит в некоторых фазах, потому что вписана в один байт. Она рисуется одним LD.
Вот запусти оригинал, там точно также. Или я чегото не замечаю?
Или ты предлагаешь это исправлять, и выводить пульки попиксельно?
Напомню, что надо смотреть в последнем тестовом снапшоте.
Самое заметное, это стрельба по блокам в упор. Раньше пуля пролетала насквозь, не задев.
Менее заметно, что улучшилась анимация попадания крупными пульками. Но там только в одном кадре налезание было, и только для крупных пуль от турели это было видно.
Ещё менее заметно ускорение при выводе отзакаленных спрайтов.
Lethargeek
18.07.2022, 13:42
я в последнем и смотрел, но блин, присмотрелся и правда в оригинале так же - от положения по горизонтали зависит (как теперь развидеть)))
меня сбило с толку
Подправил создание пуль, чтобы вылетали изнутри стреляющего, а не как раньше, возникали перед пушкой.
а что именно тогда ты подправил-то? можешь в две картинки сравнительных?
а что именно тогда ты подправил-то? можешь в две картинки сравнительных?
Сначала я подправил порядок обработки пули, чтобы она рисовалась там где она находится, а не там где она находилась в предыдущем игровом цикле.
было так:
1 - рисовалась пулька
2 - двигались её координаты
3 - проверялось попадание, начало вспышки рисовалось в этом же кадре
4 - потом уже смещался адрес.
А сейчас я перенёс первый пункт после четвёртого
И стало так
1 - Двигаются координаты
2 - Проверяются поподания
3 - Смещается адрес спрайта
4 - Рисуется
Позже нарисую.
- - - Добавлено - - -
Когда я порядок подправил, анимация попадания правильнее стала работать. И пуля изображена там, где она в самом деле находится. Но стало казаться, что они вылетают далеко от стреляющего оружия, поэтому-то я и подправил конструкторы пуль, чтобы они появлялись более глубже. И подправилось попадание в упор.
Позже нарисую
Gif-каhttps://pic.maxiol.com/thumbs2/1658175727.1840148535.rexnewfired2.gif (https://pic.maxiol.com/?v=1658175727.1840148535.rexnewfired2.gif&dp=2)
Раскадровкаhttps://pic.maxiol.com/thumbs2/1658175906.1840148535.rexnewfired3.png (https://pic.maxiol.com/?v=1658175906.1840148535.rexnewfired3.png&dp=2)
Жёлтыми крестиками я наметил координаты пуль.
В шестом кадре пульку Рекса заслонила пулька от турели.
В первом и девятом кадрах, видна палочка. Это режультат того, что пулька от турели сначала нарисовалась, потом её координаты влипли в статплатформу, после чего она превратилась во вспышку, первая фаза вспышки, это точка, была нарисована тут-же, в этом-же кадре. И получилась такая "палочка". Вспышка уже никуда не летит, и координаты, и адрес изображения не меняются.
- - - Добавлено - - -
Тем временем в просмоторщике уровней что-то нарисовалось
https://pic.maxiol.com/thumbs2/1658178120.1840148535.rexviewer.png (https://pic.maxiol.com/?v=1658178120.1840148535.rexviewer.png&dp=2)
Интересные значки "J" "RJ". Это, как я понял, джамп и рандом джамп. Подсказочки для людишек, чтобы они всегда прыгали или иногда. "D", чтобы стреляли с колена. Большая "S", похоже, пустая статика, то есть там спрайтов быть не может.
Посчитал статистику для каждого значка, сколько раз он используется в блоках_3х3. И статистику для блока, сколько раз он используется в экранах. Так больше 30 значков не используются в блоках. И 6 блоков не используются. Причём они, как бы, осмысленно нарисованы. Прям хочется довести эту лазарусную поделку до редактора, и попробовать что нибудь посоставлять из этих значков. :)
Ясно, что противники и пути их появления кодируются где-то ещё. А так-же топология переходов с экрана на экран.
Для начала изменить порядок перебора знакомест с блоков 3х3 на линейную
Сделал, отладил.
Показать нечего, всё выглядит точно так-же. :)
Просмоторщик экранов превратил в тупенький редактор экранов. Сейчас он выглядит так:
https://pic.maxiol.com/thumbs2/1659048848.1840148535.rexle2.png (https://pic.maxiol.com/?v=1659048848.1840148535.rexle2.png&dp=2)
Родилась мысль, в дальнейшем, попробовать перенести в Rex1 экраны с RexDemo. И подлодку.
Значков неиспользуемых штук 30, и 6 тайлов. Памяти я 600 байт освободил, когда таблицы адресов и зеркалирования перенёс.
А пока с помощью редактора, исследую экраны. Понял почему в лестницах, на второй ступеньке сверху повышенная проходимость.
Казалось, уже разгадал правила, по котором спамятся враги. Сделал уже галочки "сверху", "слева", "справа". Но в некоторых экранах нет ни одной галочки, а враги всё равно спамятся. Надо ещё разбираться.
Black Cat / Era CG
20.01.2023, 05:33
И тут. Тоже вроде пока обновленная версия кроме форума нигде не светится.
А тут ещё работы много. Отвлёкся.
^m00h^, Примерно год ждать.
Black Cat / Era CG
16.03.2024, 11:06
Уже год скоро ;)
Уже год скоро ;)
Обещанного (https://zx-pk.ru/threads/5076-novye-tr-dos-relizy.html?p=1216832&viewfull=1#post1216832) три года ждут!
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot