Вход

Просмотр полной версии : WarCraft 1 - под классический 128+TR-Dos



Страницы : 1 [2] 3 4

jerri
27.03.2021, 09:56
Джерри, чтобы ты точно понимал, что делать надо и потом не рвал волосы с криками "что же вы мне раньше не сказали!":


занятно



Мы пока сами не знаем, будет вывод по маске или нет. Хочется оценить скорость и того и другого. Посему подход такой: процедура кидания спрайта ОДНОПРОХОДНАЯ. Т.е. кидает спрайт на экран БЕЗ маски. Если нам понадобится маска, то мы вызываем ту же самую процедуру ещё два раза с другим параметром наложения, со сдвигами вправо/влево на один пиксель. То есть, всего три раза вызываем. И получается вывод спрайта с маской.

Если будет принято решение выводить с маской, потом доинтегрируешь эти сдвиги и вывод двух дополнительных копий (маску) в саму процедуру, чтобы "down HL" не юзать по сто раз без надобности. То есть однопроходно.


эээ чтойто я вижу геморой какой-то.
я, наверное, тогда не буду браться за это.

DragonsLord
27.03.2021, 12:28
Конечно же берись за это. :biggrin:

DragonsLord
04.04.2021, 13:56
Куда ты торопишься. К зиме может и напишу.
Джерри, ну ты что там, - пишешь/нет? Начал хоть?

jerri
04.04.2021, 22:06
Джерри, ну ты что там, - пишешь/нет? Начал хоть?

Нет. У тебя требования противоречивые.

автомаска это не 5 раз нарисовать а максимум в 2 прохода генерить.
ну и свитч способов рисования - такое себе.

DragonsLord
04.04.2021, 23:21
эээ... что?

Не надо никакого свича, а также всё сделать в ОДИН проход. Ты недопонял, видимо.

Повторяю: спрайты лежат в верхней странице. Нужна выводилка (или две) в оба экрана. Логика такая:
- перещёлкнуть на страницу спрайтов, считать спрайт (или сколько-то байт, как удобнее)
- перещёлкнуть на страницу верхнего экрана (если вывод туда)
- сместить оригинал на 1 бит влево, вывести по XOR
- сместить оригинал на 1 бит вправо, вывести по XOR
- вывести оригинал без сдвигов по AND

Всё, собсно. ИЗИ. Ничего противоречивого.
Я смогу для теста, когда мне надо будет, просто закомментить строчки в коде, отвечающие за это:
- сместить на 1 бит влево, вывести по XOR
- сместить на 1 бит вправо, вывести по XOR

и получится вывод без маски. Потом оценю скорость и красоту обоих вариантов и выберу, какой будет в релизе. Тебе ничего для этого не надо будет переделывать.

Если что не понятно, спрашивай.

DragonsLord
05.04.2021, 01:37
Давай, помоги мне с этим, и я пожалуй сам буду варик писать. Не буду Слипа отвлекать. ASM по ходу дела вспомню.

jerri
05.04.2021, 08:38
эээ... что?

Не надо никакого свича, а также всё сделать в ОДИН проход. Ты недопонял, видимо.

Повторяю: спрайты лежат в верхней странице. Нужна выводилка (или две) в оба экрана. Логика такая:
- перещёлкнуть на страницу спрайтов, считать спрайт (или сколько-то байт, как удобнее)
- перещёлкнуть на страницу верхнего экрана (если вывод туда)
- сместить оригинал на 1 бит влево, вывести по XOR
- сместить оригинал на 1 бит вправо, вывести по XOR
- вывести оригинал без сдвигов по AND

Всё, собсно. ИЗИ. Ничего противоречивого.
Я смогу для теста, когда мне надо будет, просто закомментить строчки в коде, отвечающие за это:
- сместить на 1 бит влево, вывести по XOR
- сместить на 1 бит вправо, вывести по XOR

и получится вывод без маски. Потом оценю скорость и красоту обоих вариантов и выберу, какой будет в релизе. Тебе ничего для этого не надо будет переделывать.

Если что не понятно, спрашивай.

вот как раз по выделенному я вижу что ты не понимаешь как это работает.

Еще раз продумай вывод. Быстрая скорость отрисовки подразумевает отсутствие лишних телодвижений.

DragonsLord
05.04.2021, 13:06
Не вижу противоречий. Сказано же, когда мне нужна "быстрая отрисовка без телодвижений", я эти выделенные фрагменты просто закомменчиваю в коде и их типа нет.

А если мне нужно роскошный графоний, то я сознательно иду на некую заторможенность и код уже включает эти выделенные фрагменты.

Тебя совсем не должно беспокоить какой вид пойдёт в релиз, и как быстро это будет. Это я смогу оценить только когда полный код будет готов.


вот как раз по выделенному я вижу что ты не понимаешь как это работает.
Если ты намекаешь на необходимость предпросчёта сдвигов, то нет. Нужно именно реалтайм. Без хранения лишней информации.

Таблицу можешь зафигачить для хранения адресов вывода (замена down_HL), как у Санчеза. Это самый быстрый способ. Я бы даже настаивал на этом способе...

Или сам предлагай. Я не понимаю, что тебя останавливает. Не тот скилл :biggrin:

DragonsLord
05.04.2021, 15:34
Быстрая скорость отрисовки подразумевает отсутствие лишних телодвижений.
И ты метишь строчки "отрисовка, отрисовка, отрисовка".
Куда ещё быстрее??? :tongue:

Lethargeek
05.04.2021, 16:52
Если ты намекаешь на необходимость предпросчёта сдвигов, то нет. Нужно именно реалтайм. Без хранения лишней информации.

Таблицу можешь зафигачить для хранения адресов вывода (замена down_HL),
предположу, что намекает он на возможность зафигачивать таблицу сразу для маски

DragonsLord
05.04.2021, 17:16
Да нету маски и возможно она вообще не нужна.
А в остальном он волен фигачить всё, что хочет. Я же его не ограничиваю. Типа "знаешь, как сделать быстро, - делай быстро".

jerri
05.04.2021, 17:39
Да нету маски и возможно она вообще не нужна.
А в остальном он волен фигачить всё, что хочет. Я же его не ограничиваю. Типа "знаешь, как сделать быстро, - делай быстро".

это не так работает.
Ты задачу поставить не можешь.

"Или так или эдак, я не знаю может сделаю так, а может не сделаю" вот этого не надо.

DragonsLord
05.04.2021, 17:47
Короче не будешь писать, я так понял.
Сам сделаю. Непонятные нравоучения мне пул знаний не раздвигают.
Возможно, на форуме, где никто ничего сделать не может нифига, я сильно занизил собственные возможности.
На любое моё предложение говорят "это нельзя, это невозможно", хотя я вижу, что это реализуется на изичах. Так это не мой скилл никакой, - тут всё строго наоборот...

jerri
05.04.2021, 21:54
Короче не будешь писать, я так понял.
Сам сделаю. Непонятные нравоучения мне пул знаний не раздвигают.
Возможно, на форуме, где никто ничего сделать не может нифига, я сильно занизил собственные возможности.
На любое моё предложение говорят "это нельзя, это невозможно", хотя я вижу, что это реализуется на изичах. Так это не мой скилл никакой, - тут всё строго наоборот...

Так я тебе так и написал - будет желание, возможно и напишу. Но к зиме. Но это не точно.

А насчет с маской/без маски но как бы с маской - не надо вот этого.
тут и клиппинг и маску желательно делать в один проход.

DragonsLord
05.04.2021, 22:16
возможно и напишу. Но к зиме. Но это не точно.

Хоспаде, что там писать то? Там строк 100 асма от силы. За вечер пишется. За второй прилизывается до идеала. Чё там растягивать на года?


тут и клиппинг и маску желательно делать в один проход.

Делай. Я именно так и сказал. Дважды. Причём, если сдвигов боишься, можно без сдвигов вообще, выводить для маски спрайтовые байты выше и ниже на строчку от позиции их оригинала. Какая нам разница - по горизонтали или по вертикали маска лепится. Никакой разницы.



Вчера присел поиграть в Ворона, дай думаю поюзаю мышку, а то в молодости с клавы корячился, и.... и фиг собачий, а не поиграл! Этожжж надо было так извратиться, чтобы кнопки на мыши сделать наоборот от стандарта классического Варика на PC. Явшоке! Инверсия кнопок в эмуле не решает ничего, потому что половина управления по интерфейсу сделана в "зеркальном" стандарте. Короче, побекался-помекался и ну его нафиг, нервы дороже. Причём и опрос нажатий гнилой, только длительные нажатия чекает, быстрые прощёлкивания фиг. Короче рука/лицо. Чего там боготворят я не понял, через ж*пу всё сделано. Не для человеков.

Потом все версии Шакалов поюзал. В какую то там даже поиграл часок до полной зачистки карты. И то клики быстрее ворона чекает раза в три!!! Правда начинает вытормаживать на "поиске пути", когда родишь штук 10 пезантов. Ну и ДЦПешные подёргивания юнитов вместо анимаций, это конечно не для слабонервных... Собсно, пацан так и писал в описалове: "я не ходожник, заманался рисовать, помогите". Прям находка бы для меня была, я то всё давно отрисовал, теперь кодить надо. Никто не помогает...

DragonsLord
06.04.2021, 13:21
В шакалах, кстати есть шикарное усовершенствование. В вороне можно выделить группу только 6 челов, что гиморойно. В Шакалах выделяется группа любого количества юнитов и все прекрасно одновременно трэйсятся. Сам то трассер не тормозной. Тормозит игрушку расход пробок, если организовать трафик через коридор в одно знакоместо. Что интересно, юниты умеют отбегать назад, чтобы дать пройти встречке. Я когда увидел, вааще в культурном шоке был.

Stl75
06.04.2021, 14:28
Короче не будешь писать, я так понял.
Сам сделаю. Непонятные нравоучения мне пул знаний не раздвигают.
Возможно, на форуме, где никто ничего сделать не может нифига, я сильно занизил собственные возможности.
На любое моё предложение говорят "это нельзя, это невозможно", хотя я вижу, что это реализуется на изичах. Так это не мой скилл никакой, - тут всё строго наоборот...

Привет всем...

DragonLord, знаешь - на Спектруме -
не было особо популярным занятием -
составлять игры...

На Спектруме - западных игр - было полно...
Часть народа - демы пошло писать...
???

ZX_NOVOSIB
06.04.2021, 16:50
Потом все версии Шакалов поюзал.
Чо за игра?

DragonsLord
06.04.2021, 17:07
Шакалы - Jackals

v.0.00 - https://zxart.ee/rus/soft/game/tactical-combat/jackals/qid:290643/
v.0.01 - https://zxart.ee/rus/soft/game/jackals-demo-v001/qid:290643/
v.0.02 - https://zxart.ee/rus/soft/game/jackals1/qid:290643/

DragonsLord
07.04.2021, 05:00
В последних Шакалах лютейшая подстава. МегаБАГ. Как только количество юнитов вываливается за определённый предел (около 32 челов), все новые производящиеся вылазят из казарм сразу врагами. Рука/лицо.... Этот чувак вообще тестировал свои произведения?...

DragonsLord
11.04.2021, 00:33
NewArt помог мне все мои дискеты оцифровать в образы. Теперь имею доступ к своим сокровищам. Кто-то там в начале спрашивал не те ли это "Heroes II", которые я писал. Нет, "те" - это от Рината. Но теперь у меня есть мой проект на руках. Не знаю, что с ним делать, дописывать я его не собираюсь, мне сейчас не интересен этот жанр. Наверное, самое логичное открыть другую ветку и выложить все наработки? Мож кому пригодятся....

https://d.radikal.ru/d00/2104/8b/f0807a35dbd0.png

Куча графики осталась: все менюхи, предметы и т.д. Герои полноэкранные отрисованные вручную с нуля в фотографичном режиме цветные. Тайловые карты полностью прорисованные. Даже есть демо сборка пустого уровня со всеми объектами и артефактами. :cool_std:

DragonsLord
12.04.2021, 07:26
Возможно Медноногов и не виноват, что кнопки мыши инвертированы. Всё зависит от того, какой их двух стандартов существующих кемпстонов он поддерживал. Например в Unreal эмулируется нормальная мышка, как на PC. А на Spin эмулируется с обратными кнопками. Эт я ща заметил, - сижу интегрирую кемпстом маус в свою графическую библиотеку. Апгрейжу её перед началом продакшена Варика.

По идее надо делать автоопределение истинной "левой" кнопки в самом начале, предложив юзеру нажать любую кнопку в менюшке.

jerri
12.04.2021, 10:08
Возможно Медноногов и не виноват, что кнопки мыши инвертированы. Всё зависит от того, какой их двух стандартов существующих кемпстонов он поддерживал. Например в Unreal эмулируется нормальная мышка, как на PC. А на Spin эмулируется с обратными кнопками. Эт я ща заметил, - сижу интегрирую кемпстом маус в свою графическую библиотеку. Апгрейжу её перед началом продакшена Варика.

По идее надо делать автоопределение истинной "левой" кнопки в самом начале, предложив юзеру нажать любую кнопку в менюшке.

В ZX Format драйвер мыши был с автонастройкой - первая нажатая кнопка считалась LMB

DragonsLord
12.04.2021, 18:24
В ZX Format драйвер мыши был с автонастройкой - первая нажатая кнопка считалась LMB
Я знаю :)

Такс, посоны, перестановки кадровые. Слипу дико жалко, что я собрался выкинуть всю графику "HEROES II" в мусорку, а также она ему СИИИИЛЬНО понравилась (как и любая от меня :biggrin: ), короче, я ему отдаю весь графен и он пишет Героев. ВарКрафт пишу я сам.

Открыл ветку "Heroes II", куда выложил демку и буду выкидывать весь заготовленный графоний для неё:
https://zx-pk.ru/threads/33190-heroesii-pod-klassicheskij-128-tr-dos.html

DragonsLord
24.04.2021, 01:08
Успешно привинтил мышку к своей старой графической библиотеке. Осталось написать ей небольшую доработку по клиппированию и можно начинать запиливать первую альфу с демонстрацией тайлового поля.

DragonsLord
24.04.2021, 17:45
Джерри, Санчез, Алоний, меня все тщательно отговаривают от реализации с 2-мя экранами и принуждают к рисовке через буфер, аля 48к режим. А как, простите, выбросить буфер на экран, чтобы мышка не мигнула? Наврядли эта переброска вообще будет меньше фрэйма по таймингам.

Все говорят о якобы высоконаучных мегареализованных способах синхры не фрэймового игрового поля с фрэймовой мышкой. Как минимум я слышал о "по Медноногову, как в ЧВ", "по Алонию, как в Аллодах", можно ещё придумать, как "не у Медноногова и не у Алония". Прошу объяснение вариантов алгоритма отрисовки в студию! Словами.

jerri
24.04.2021, 19:20
Джерри, Санчез, Алоний, меня все тщательно отговаривают от реализации с 2-мя экранами и принуждают к рисовке через буфер, аля 48к режим. А как, простите, выбросить буфер на экран, чтобы мышка не мигнула? Наврядли эта переброска вообще будет меньше фрэйма по таймингам.

Все говорят о якобы высоконаучных мегареализованных способах синхры не фрэймового игрового поля с фрэймовой мышкой. Как минимум я слышал о "по Медноногову, как в ЧВ", "по Алонию, как в Аллодах", можно ещё придумать, как "не у Медноногова и не у Алония". Прошу объяснение алгоритма отрисовки в студию! Словами.

Тебя никто не отговаривает от 2хэкранки. Тебе говорят о 80 кб графики в страницах которую придется кидать через буфер в 7ой экран.
Но поскольку у тебя свой путь, то тебе по нему и идти.

Синхра мыши по Медноногову.
есть счетчик текущей рисуемой строки
если он меньше координаты У мыши то рисуем строку
если больше то проверяем не попадает текущая строка под курсор, если да то проверяем флаг восстановления фона, устанавливаем флаг и восстанавливаем фон.

на прерывании в случае флага исключаем восстановление фона.

DragonsLord
24.04.2021, 20:12
А "по Алонию"?
А где ещё способы? "По Джерри", например?

- - - Добавлено - - -


если больше то проверяем не попадает текущая строка под курсор, если да то проверяем флаг восстановления фона, устанавливаем флаг и восстанавливаем фон
У него что, учитывая минимышку, 8 флагов запоминания подложки и 8 отдельных процедур восстановления или засасывания 2 байт? Тупо в лоб, но эффективно.

jerri
24.04.2021, 20:47
У него что, учитывая минимышку, 8 флагов запоминания подложки и 8 отдельных процедур восстановления или засасывания 2 байт? Тупо в лоб, но эффективно.

зачем?


W_INTV.a80



;Kурсор на прерываниях ******

BLITER ;обновл экр с уч прерыв
CALL MEM7
XOR A
LD (P_FLAG),A
DEC A
LD (V_LINE),A
LD A,2
LD (V_FLAG),A
CALL V_GET2
CALL V_MRK2
LD A,1
LD (V_FLAG),A
CALL DS2SC
CALL V_copy ;м.быть уч P_FLAG=1 :)
XOR A
LD (V_FLAG),A
RET

DS2SC ;регенер экр
LD HL,DSCR
LD DE,SCR
LD B,192
DSS0 LD A,H
CPL
AND %11000
RET Z
PUSH BC
PUSH DE
PUSH HL
LDI;
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI;
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI;
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LD HL,V_LINE
INC (HL)
POP HL
POP DE
POP BC
INC H
INC D
LD A,H
AND 7
JR NZ,DSS1
LD A,L
ADD A,32
LD L,A
LD E,A
JR C,DSS1
LD A,H
SUB 8
LD H,A
LD A,D
SUB 8
LD D,A
DSS1 LD A,(P_FLAG)
OR A
CALL NZ,V_BLIT
DJNZ DSS0
RET

Vforce ;принудительный выв A строк
EXX
LD B,8
CALL DSS0
EXX
RET

V_BLIT ;выв курс во время рефреша
DI
EXX
XOR A
LD (P_FLAG),A
LD HL,V_LINE
LD A,(G_MY) ;очистка
CP (HL)
JR C,vbt1
JR NZ,vbt2
vbt1 ADD A,8
CP (HL)
JR C,vbt4
CALL Vforce
vbt4 CALL V_copy
vbt2 CALL V_PUT1
CALL V_PUT2
LD HL,(MX) ;взятие в буф
LD (G_MX),HL
LD A,H
LD HL,V_LINE
CP (HL)
JR C,vpt1
JR NZ,vpt2
vpt1 ADD A,8
CP (HL)
JR C,vpt4
CALL Vforce
vpt4 CALL V_GET1
CALL V_GET2
LD A,(GBAD2+1)
XOR #60
LD (GBAD1+1),A
CALL V_copy
CALL V_MRK1
JR vptR
vpt2 CALL V_GET1
CALL V_GET2
CALL V_MRK1
CALL V_MRK2
vptR EXX
EI
RET

ON256 LD A,%10000
JR M2
OFF256 XOR A
M2 LD BC,#1FFD ;скорп
OUT (C),A
LD A,%11000
LD B,#7F
OUT (C),A ;пент
RET


INAR0 ;Обр прерываний
PUSH$
EXX
PUSH$
PUSH AF
EX AF,AF
PUSH AF
PUSH IX
PUSH IY
LD A,(R128)
LD (IR128),A
;анти-теневик
antiTM LD HL,(G_MX) ;[**]
LD A,H
OR #C0
LD H,A
CALL ON256
LD E,(HL) ;д.быть #A4 байт-заполнитель или (HL)
CALL OFF256
LD A,E
CP #A4
JR Z,INAMM
CP (HL)
RET NZ
;музыка
INAMM CALL MEM6
LD A,(MUSONF)
OR A
JR Z,INA0FX
;патч к музыке
XOR A
LD (#EEC9),A
LD (#F221),A
CALL WMUSIC+6 ;6
JR INA0M
INA0FX LD BC,#FFFD
LD A,7
OUT (C),A
LD A,B
LD B,#BF
OUT (C),A
LD (#EEC9),A
INA0M CALL pSOUND ;эффекты
CALL MMOV
LD A,(V_FLAG)
CP 1
JR Z,INA01
JR NC,INA02
CALL MEM7
LD HL,(JP_SUB+1)
PUSH HL
LD HL,(SET_SP+1)
PUSH HL
LD HL,(SCRADR)
PUSH HL
CALL V_PUT1
LD HL,(MX)
LD (G_MX),HL
CALL V_GET1
CALL V_MRK1
POP HL
LD (SCRADR),HL
POP HL
LD (SET_SP+1),HL
POP HL
LD (JP_SUB+1),HL
JR INA02
INA01 LD (P_FLAG),A
INA02 LD A,(IR128)
CALL MEM
POP IY
POP IX
POP AF
EX AF,AF
POP AF
POP$
EXX
POP$
RET


;---------------------------------------

G_IMG1 DEFB %11111100,%11111100 ;обычн курсор
DEFB %11111110,%10000110
DEFB %11111110,%10000010
DEFB %11111110,%10000110
DEFB %11111111,%10000011
DEFB %11111111,%11010001
DEFB %01111111,%01111011
DEFB %00001110,%00001110

G_MAP1 DEFB %11111100,%00000000 ;курсор на карте/при нажатом FIRE
DEFB %11111110,%01111000
DEFB %11111110,%01000100
DEFB %11111110,%01001000
DEFB %11111111,%01010100
DEFB %11111111,%00101010
DEFB %01111111,%00000100
DEFB %00001110,%00000000

G_FIX1 DEFB %11111100,%00000000 ;курсор при зафикс. цели
DEFB %11111110,%01111000
DEFB %11111110,%01111100
DEFB %11111110,%01111000
DEFB %11111111,%01111100
DEFB %11111111,%00101110
DEFB %01111111,%00000100
DEFB %00001110,%00000000


V_copy ;gbu2->gbu1
LD BC,16
LD HL,GBU2
LD DE,GBU1
LDIR
RET

V_PUT1 ; gbu1->[SCR]
LD HL,(GBAD1)
LD DE,GBU1
JR v1pEN

V_PUT2 ; gbu2->[DSCR]
LD HL,(GBAD2)
LD DE,GBU2
v1pEN CALL v1p0
LD A,L
AND 31
CP 31
RET Z
INC L
v1p0 LD B,8
PUSH HL
v1p1 LD A,(DE)
LD (HL),A
INC DE
INC H
LD A,H
AND 7
JR NZ,v1p2
LD A,L
ADD A,32
LD L,A
JR C,v1p3
LD A,H
SUB 8
LD H,A
JR v1p2
v1p3 LD A,H
CPL
AND %11000
JR Z,v1p6
v1p2 DJNZ v1p1
POP HL
RET
v1p5 INC DE
v1p6 DJNZ v1p5
POP HL
RET


V_GET1 ; HL->gbad1 [SCR]->gbu1
LD DE,(G_MX) ;выв гр курс
CALL STS
CALL PCOORD
LD (GBAD1),HL
LD DE,GBU1
CALL v1g0
INC L
v1g0 LD B,8
PUSH HL
v1g1 LD A,(HL)
LD (DE),A
INC DE
INC H
LD A,H
AND 7
JR NZ,v1g2
LD A,L
ADD A,32
LD L,A
JR C,v1g2
LD A,H
SUB 8
LD H,A
v1g2 DJNZ v1g1
POP HL
RET

V_GET2 ; HL->gbad2 [DSCR]->gbu2
LD DE,(G_MX) ;выв гр курс
CALL STD
CALL PCOORD
LD (GBAD2),HL
LD DE,GBU2
CALL v2g0
INC L
v2g0 LD B,8
LD A,L
AND 31
CP 24
JR C,v2g00
PUSH HL
LD HL,GBU1-GBU2
ADD HL,DE
LD BC,8
LDIR
POP HL
RET
v2g00 PUSH HL
v2g1 LD A,(HL)
LD (DE),A
INC DE
INC H
LD A,H
AND 7
JR NZ,v2g2
LD A,L
ADD A,32
LD L,A
JR C,v2g2
LD A,H
SUB 8
LD H,A
v2g2 DJNZ v2g1
POP HL
RET


V_MRK2 ;mrk->SCR
LD BC,(GBAD2)
JR vmr1

V_MRK1 ;mrk->SCR
LD BC,(GBAD1)
vmr1 LD HL,(G_MX)
LD A,H
SUB 185
JR C,vmr2
XOR 7
JR vmr3
vmr2 LD A,8
vmr3 LD (G_SIZE),A
LD A,L
AND 7
LD HL,HE_N
CALL WT
LD (JP_SUB+1),HL
LD HL,(G_IMG)
LD E,(HL)
INC HL
LD D,(HL)
INC HL
LD (SET_SP+1),SP
LD SP,HL
LD L,C
LD H,B
LD A,(G_SIZE)
LD B,A
JP JP_SUB

DragonsLord
24.04.2021, 21:40
Очень интересно :biggrin:
Но, пожалуй, сперва сделаю без учёта синхры. Пусть помигивает. Потом прикостыляю чёнить, чтобы стабилизировать.

- - - Добавлено - - -

Уже забыл кто (Димас, кажись) спрашивали, как сделать мультиопрос клавы без меню выбора в начале игры. Вот мой код:



KBDJOY in a,(31)
ld e,a
and 3
cp 3
jr nz,KBDJ1
ld e,0
KBDJ1 ld hl,DKEY
KBDJ2 ld c,(hl)
inc c
dec c
ld a,e
ret z
inc hl
ld b,(hl)
inc hl
in a,(c)
cpl
and (hl)
inc hl
jr z,KBDJ3
ld a,(hl)
or e
ld e,a
KBDJ3 inc hl
jr KBDJ2
DKEY defb #FE,#FD,2,8 ;S
defb #FE,#FE,4,4 ;X
defb #FE,#FB,1,8 ;Q
defb #FE,#FD,1,4 ;a
defb #FE,#DF,2,2 ;O
defb #FE,#DF,1,1 ;p
defb #FE,#7F,8,16 ;n
defb #FE,#7F,4,16 ;m
defb #FE,#EF,16,2 ;ЛЕВО
defb #FE,#EF,8,1 ;ПРАВО
defb #FE,#EF,4,4 ;ВНИЗ
defb #FE,#EF,2,8 ;ВВЕРХ
defb #FE,#EF,1,16 ;ОГОНЬ
defb #FE,#7F,1,16 ;SPACE
defb #FE,#BF,1,16 ;ENTER
defb 0 ;END


можно сколько угодно кнопок добавлять. работают сразу все одновременно.

Думаю, код максимально прозрачен. В описателе пишете порт строки на клаве и номер кнопки, и значение бита, которое выставлять в результирующем накопителе. В конце описателей НОЛЬ. На выходе получите этот накопленный байт с нужными включёнными битами.

DragonsLord
25.04.2021, 04:58
Закончил с мышиной процедурой полностью. Расширил диапазон елозинья на весь экран с клавы и физической мыши. Реалтайм клиппирование по правому и нижнему краю. Мыша 2х2 знакоместа. Сделано с запасом на кривой инт на кривых клонах, - всё будет отрисовываться нормально везде. Идеалити :tongue:

Также она уже умела (функционал сохранён):
- реалтайм анимировать саму мышь при необходимости
- автоматически учитывать анимирование фона при сохранении подложки

DragonsLord
25.04.2021, 19:37
Нужна помощь звукарей.

Моя звукоизвлекалка из AY:



;**SOUND*** ЗВУКОВЫЕ FX - 6 ШТУК
;ВХ: b - 1 КОЛОКОЛЬЧИК
; 2 УПАЛ МЕШОК
; 3 РАСКАТ ГРОМА
; 4 КОЛОКОЛЬЧИК + ПОДЗВУЧКА
; 5 ВЫБОР ОБЪЕКТА
; 6 РАССЫПАЛОСЬ
;ВЫХ: ...
SOUND ld a,b
AY_EFF ld hl,EFFECT1
ld bc,#000E
NEFF add hl,bc
dec a
jp nz,NEFF
dec hl
ld a,#0D
ld c,#FD
NREG ld b,#FF
out (c),a
ld b,#BF
outd
dec a
jp p,NREG
ld a,50
ld (AY_MET),a
ret

AY_MET defb 0,0
EFFECT1 defw #0080,#0001,#0000
defb #00,#38,#10,#10,#10
defw #1500
defb #01
EFFECT2 defw #030A,#0930,#0004
defb #02,#10,#10,#10,#10
defw #12FF
defb #01
EFFECT3 defw #0282,#A901,#03A3
defb #00,#38,#03,#10,#06
defw #30AA
defb #01
EFFECT4 defw #0282,#0121,#0020
defb #00,#38,#10,#10,#10
defw #1500
defb #01
EFFECT5 defw #0282,#0001,#0000
defb #00,#38,#10,#10,#10
defw #1500
defb #01
EFFECT6 defw #0F00,#0000,#0000
defb #03,#00,#10,#10,#10
defw #3000
defb #01

;**RES_AY** ВЫКЛЮЧИТЬ ЗВУК 'AY 8112/10'
;ВХ: ...
;ВЫХ: ...
RES_AY ld hl,DATREG+7
ld (hl),#FF
ld hl,DATREG+13
ld d,13
ld c,#FD
OUTR1 ld b,#FF
out (c),d
ld b,#BF
outd
dec d
ret m
jr OUTR1
DATREG defs 14


Звуки из "детства" меня не устраивают. Прошу дать мне много готовых разнообразных в таком же формате даты, как я показал.

В первую очередь нужны клики и чпоки для озвучки нажатия кнопок в меню.
А также звуки боя, типа стрел, мечей, возможно иммитация криков атаки и смерти.
Рассмотрю и другие оригинальные звучки. Не обязательно самогасящиеся, можно и длительные или бесконечные. Благо AY-затыкалка есть.

goodboy
25.04.2021, 19:55
а ты в курсе что OUTD сначала уменьшает B и только потом пишет в порт ?
(на наших компах это прокатывает из-за `простой` адресации порта)

DragonsLord
25.04.2021, 20:18
Первый раз слышу. Как конкретно исправить код для всеобщей совместимости?

goodboy
25.04.2021, 20:22
можно оставить как есть и так прокатит, это критично в более полных выборках порта

DragonsLord
25.04.2021, 20:32
Подкиньте звуков :biggrin:

DragonsLord
26.04.2021, 16:02
Видел вчера демку "RIP zx-pk_ru" - похоже на правду :tongue:
Никто ничем не помогает. Закрадывается подозрение, что посещаемость сего информационного субъекта равна нулю.
Слип, Алоний, Санчез - да все, с кем я так или иначе сталкивался, говорят синхронно: "чё мы там забыли?"...

Stl75
26.04.2021, 19:58
Джерри, Санчез, Алоний, меня все тщательно отговаривают от реализации с 2-мя экранами и принуждают к рисовке через буфер, аля 48к режим. А как, простите, выбросить буфер на экран, чтобы мышка не мигнула? Наврядли эта переброска вообще будет меньше фрэйма по таймингам.

Все говорят о якобы высоконаучных мегареализованных способах синхры не фрэймового игрового поля с фрэймовой мышкой. Как минимум я слышал о "по Медноногову, как в ЧВ", "по Алонию, как в Аллодах", можно ещё придумать, как "не у Медноногова и не у Алония". Прошу объяснение вариантов алгоритма отрисовки в студию! Словами.

Привет всем...

Про пересылку - буфера на экран...

Тесты на примере - 1 строки...

Вариант 1 -

pop hl
pop de
dup 32
ldi
edup

Число тактов - 20+16*32=532 т...

Вариант 2 -

ld sp,
dup 16
pop de
ld (hl),e
inc l
ld (hl),d
inc l
edup

Число тактов - 10+(10+14+8)*16-4=518 т...

Вариант 3 -

ld sp,
dup 16
pop hl
ld (adr),hl
edup

Число тактов - 10+(10+16)*16=426 т...

Вариант 4 -

dup 2
ld sp,
pop af
pop bc
pop de
pop hl
ex af,af'
exx
pop af
pop bc
pop de
pop hl
ld sp,
push hl
push de
push bc
push af
ex af,af'
exx
push hl
push de
push bc
push af
edup

Число тактов - (10+80+8+10+88+8)*2=408 т...

Число тактов в прерывание - у Pentagon - 71680 т...

???

По последнему варианту - ха прерывание пересылается - 175 строк...
71680/408=175 округленно...
???

Ну как бы, 128 строк - 2/3 экрана - переслать реально...
Вместе с музыкой...
???

Lethargeek
26.04.2021, 20:26
Никто ничем не помогает. Закрадывается подозрение, что посещаемость сего информационного субъекта равна нулю.
поздравляю, можешь ник теперь сменить с Драгонслорда на Зоркоглаза :D

Stl75
26.04.2021, 20:34
Есть еще - один супер хитрый вариант...

ld sp,
dup 16
ld hl,данные
push hl
edup

Число тактов - 10+(10+11)*16=346 тактов...
Данные буфера - хранятся в последовательности -
ld hl,
???

Теоритически, экран пересылается - за прерывание...
71680/346=207 строк...
???

jerri
26.04.2021, 20:39
Есть еще - один супер хитрый вариант...

ld sp,
dup 16
ld hl,данные
push hl
edup

Число тактов - 10+(10+11)*16=346 тактов...
Данные буфера - хранятся в последовательности -
ld hl,
???

Теоритически, экран влазеет - за прерывание...
71680/346=207 строк...
???

только код вывода будет 12кб

Stl75
26.04.2021, 20:41
только код вывода будет 12кб

Правильно...
(3+(3+1)*16)*192=12864 байта...

Ну буфер - он тоже место - занимает...
Экран - 6912 байт...
???

Ну если, пересылку через стэк - по вариантам 2 - 4 -
посчитать по длине кода -
то они все большие будут...

Выигрываешь в скорости - проигрываешь в размере...
???

DragonsLord
26.04.2021, 22:06
На самом деле, сначала запрограммирую весь вывод в лоб. Потом оценю скорость полученного образца. И если не буду удовлетворён fps - полезу в специализированные варианты. Если же всё прокатит, то так и останется. Ибо прирост скорости во всяких высоко-гиморойных способах оставляет большие сомнения. Типа образца от Пьяной Мухи, по поводу движка которого Алоний пускал радужные слюни, а когда зарелизил и на 6 спрайтах картинка стала не фрэймовой - несколько подкис :biggrin: Сам Муха 25 объектов обещал на стриме, а показал демку с 10 и там уже все фри тайминги в нулину. Гыгы....

Особенно лол выкрики на прерываниях в стиле "я НЕ проверял бысродействие, я НЕ считал такты, я НЕ сравнивал с другими способами" - просто ржу...

Всё это, как правило, громкие крики, под слащавые аккорды которых впариваются никому не нужные железки "Купите Evo! Купите Карабас-Profi!" :biggrin:

DragonsLord
27.04.2021, 02:04
поздравляю, можешь ник теперь сменить с Драгонслорда на Зоркоглаза
Могу, в принципе, без проблем, выделить область на своём форуме по геймдеву чисто под ZX платформу. И вновь собрать всё сообщество в одном месте. Если это, конечно, кому-то нужно. Мне не сложно. Он у меня всё равно есть и поддерживается десятилетиями. Реклама отсутствует, рега свободная, говорить можно о чём угодно, репрессий нет, материться можно :biggrin:
Если надо, - так намекните....

izzx
27.04.2021, 12:47
Могу, в принципе, без проблем, выделить область на своём форуме по геймдеву чисто под ZX платформу. И вновь собрать всё сообщество в одном месте.
А сейчас где вся тусовка? Тонким слоем по десяти адресам? Я просто не знаю.

DragonsLord
27.04.2021, 15:24
Тонким слоем везде.
Распугали банами всех.

DragonsLord
28.04.2021, 07:18
Ибо некогда пока собирать тайловый массив и рисовать карту без редактора, то воспользовался уже существующими от "HeroesII". Привинтил побыстрому мышь, чтобы оценить удобство юзабилити, как лежит рука, как машется мышкой, на сколько всё быстро и отзывчиво... Снапшот можно пощупать здесь:
https://zx-pk.ru/threads/33190-heroesii-pod-klassicheskij-128-tr-dos.html?p=1115011&viewfull=1#post1115011

Напоминаю, там нет тенефого буфера. HeroesII не rts, посему рисовка прям на экране. Сейчас переделываю область вывода, скроллеры под варик (скроллеры там по 1 методу по классификации Stl75). Естессно, будет сделано через буфер. Работа идёт.

DragonsLord
28.04.2021, 18:30
Определился с распределением памяти и форматом вывода.

1. РАСПРЕДЕЛЕНИЕ ПАМЯТИ
---------------------------------

После долгих размышлений пришёл к выводу, что оптимальный размер массива тайлов это 227 штук в комплекте.

https://a.radikal.ru/a21/2104/48/00d1ef50dc0f.png

Почему? Потому что 36 байтов на 1 тайл. Итого 36х227=8172 байта массив тайлов. Это позволяет держать на той же самой странице карту 64х64=4096 байтов и там же буфер под волновой алгоритм трассера пути 64х64=4096. Последний буфер также по совместительству содержит туман войны в старшем бите. и он же является картой проходимости, т.е. базисом для отрисовки миникарты. Все чёрные точки - пройти нельзя, все белые - пройти можно. Таким образом, миникарта - стандартный монохром. Точки юнитов будут мигать с некоторой периодичностью.

Итого, в верхней странице памяти:
4096 - карта
4096 - туман
8172 - тайлы
---------------
16364 ИТОГО

При какой то важной необходимости можно эпизодически добавить тайлов в нижнюю память. т.к. разрядность для их присутствия на карте есть (до 255 разных).


2. ФОРМАТ ВЫВОДА
-----------------------

Также после долгих раздумий я перебрал все существующие реализации спрайтования и пришёл к внутреннему консенсусу (просто/эффективно). Будет теневой буфер размером 6912, т.е. стандартный экран. В него в центральной позиции печатаются тайлы, квадратом 12х12 тайлов. По бокам остаются полоски по 4 знакоместа без тайлов.

Чёрнобелое спрайтование стандартно переключает верх в банк со спрайтами, выводит их напрямую в этот теневой экран БЕЗ КЛИППИНГА. Монохромная графика рисуется по всему теневому экрану. В конце отрисовки центральная часть теневика (24х24 знакоместа) быстро перекидывается на видимый экран в 16384. Таким образом осуществляется автоклиппинг всего монохрома. При данном способе, очевидно, можно автоклиппировать спрайты до 4х4 знакоместа. В моём Варкрафте максимальные 3х3, так что хватит.

Итого расписание нижней памяти:
#4000,6912 - стандартный экран
#6000,6912 - теневой экран (буфер)


Средняя память:
32768...42000 - управляющая программа
42000...49152 - графическая библиотека низкого уровня

Да, знаю, что грёбаный ULA не благоволит к размещению видеобуфера в медленной странице памяти, но, как это обойти пока мыслей нет. Так что попытаюсь втиснуться в этот формат.
:v2_dizzy_punk:

jerri
28.04.2021, 19:09
Итого расписание нижней памяти:
#4000,6912 - стандартный экран
#6000,6912 - теневой экран (буфер)

это неразумно


#05,#4000,6912 - теневой экран (буфер)
#07,#c000,6912 - стандартный экран

это логичнее

DragonsLord
28.04.2021, 20:22
Кстати, да. Более лаконично. Так и сделаю.
Придётся мышку мальца переписать. Ибо она должна елозится по #07,#c000
И процедуры интерфейсного вывода: текстовыводилка, окнооткрывалка, спрайторисовалка и всё такое....

DragonsLord
28.04.2021, 22:43
Вспомнить бы ещё, чем я тайлы нарезал. Ваще забыл в нулину :biggrin:

Verm-V
29.04.2021, 05:29
Привинтил побыстрому мышь, чтобы оценить удобство юзабилити, как лежит рука, как машется мышкой, на сколько всё быстро и отзывчиво... Снапшот можно пощупать здесь:
В эмуляторах Spectaculator и Spectacol (android) происходит дрифт мыши вправо если переместится в правую часть карты туда где много воды. Если переместится в правый верхний угол карты, то дрифт идет вверх.
В эмуляторах unreal, unreal speccy portable (pc и android), ZX-MAK2 такого нету.

Управление с мыши вполне комфортное. А вот с клавиатуры неудобно тем, что скроллинг не прерывается при отпускании клавиши направления. Приходится отодвигать курсор от края в обратную сторону. При выставленной скорости скроллинга это неудобно.

Пример дрифта курсора:

https://i.ibb.co/tLzC3xz/heroes-2.gif

Lethargeek
29.04.2021, 07:13
там еще и ложные нажатия проскакивают, похоже

haywire
29.04.2021, 12:17
Извиняюсь, конечно. Но зачем оптимизировать игру под различные эмуляторы? Оптимизировать надо под реальное железо, а если его нет, то достаточно объявить один эмулятор правильным. Мышь, кстати, на реальном железе - штука экзотическая. ИМХО гораздо больше внимания надо уделять управлению с клавиатуры, а на данный момент она сделана "на отстань".

DragonsLord
29.04.2021, 13:20
происходит дрифт мыши

Здесь я описал эту проблему, выложил применяемый код и попросил помощи:
https://zx-pk.ru/threads/33190-heroesii-pod-klassicheskij-128-tr-dos.html?p=1115119&viewfull=1#post1115119

У меня на Spin детектится такая проблема с мусором в порту. На Unreal всё чисто.


там еще и ложные нажатия проскакивают, похоже
Не замечал.


А вот с клавиатуры неудобно тем, что скроллинг не прерывается при отпускании клавиши направления.
Ну, потому что код для клавы и мышки это разный код. И этот разный код должен переключаться в меню настроек мануально. Так и будет собсно. Сейчас меню нет. Было в 98 года версии управление с клавы - там, где скроллится только если нажимать кнопки. Я ради теста в версии 21 года переключил на чисто мышовое - там где просто курсор подвести к краю надо и оно само скроллит.

Это всё норм. Это не проблема :tongue: Это так и задумано было в тесте.


Извиняюсь, конечно. Но зачем оптимизировать игру под различные эмуляторы? Оптимизировать надо под реальное железо, а если его нет, то достаточно объявить один эмулятор правильным. Мышь, кстати, на реальном железе - штука экзотическая. ИМХО гораздо больше внимания надо уделять управлению с клавиатуры, а на данный момент она сделана "на отстань".

Качните версию 98 года и посмотрите - там управление для клавиатуры и оно не на отстань. Посмотрим правде в глаза - 90% конечных потребителей в 21 году будут оценивать игру на эмуляторах. Что касается железа - будет конечно возможность играть с клавы, как в Чёрном Вороне, но мышовый режим - ОСНОВНОЙ, ибо это rts и я создавая игру первым делом думаю об удобстве, чтобы играть можно бы было не напрягаясь в привычном для PC темпе и с таким же управлением.

Есть ещё моментик, игра на столько перенасыщена данными, что обязательно или код, или буфер, или данные для обращения находятся в зоне медленных страниц памяти. На самом реально реальном железе это будет приводить к полной неиграбельности проекта, т.к. будет происходит дикое вытормаживание при обращении ULA. Так что гейма будет онли 128к и онли для русских клонов аля Пентагон, тем более, что онли с TR-DOS :) Это не я такой рукожоп, - а по другому rts не сделать.

Lethargeek
29.04.2021, 13:23
Не замечал.
оно будет видно только над белыми кнопками
иногда мерцало, как при нажатии

DragonsLord
29.04.2021, 13:43
оно будет видно только над белыми кнопками
иногда мерцало, как при нажатии
В принципе, не исключаю. Если мусор в порте, то вполне логично, что может.
Хотелось бы понять почему в порте мусор? Надеюсь я не первый в мире, кто столкнулся с этим. И наверняка копали проблему, и наверняка придумали костыль.

- - - Добавлено - - -


Вспомнить бы ещё, чем я тайлы нарезал. Ваще забыл в нулину
Вчера потренировался нарезать. Всё норм. Всё вспомнил. Сегодня весь тайловый пак будет готов.
:v2_dizzy_punk:

Lethargeek
29.04.2021, 14:39
В принципе, не исключаю. Если мусор в порте, то вполне логично, что может.
Хотелось бы понять почему в порте мусор? Надеюсь я не первый в мире, кто столкнулся с этим. И наверняка копали проблему, и наверняка придумали костыль.
яхз, но вот ты ругал survivisection в соседней ветке, а как раз с ней в моём эмулеподелии проблем нет, а вот с этой демкой героев есть (не дрифты, а дрожание при движении, причём не по направлению сдвига)

DragonsLord
29.04.2021, 15:06
Прикол в том, что на чистой демке графической библиотеки нет этого эффекта.
Отсюда ещё одно предположение:важно в какой момент времени от начала инта происходит чтение из порта. Возможно при начале инта порт эмулем чистится и выставляется в нужное значение, а по ходу кадра туда подбрасывается мусор. И чем более позднее считывание, тем больше мусора. Как вам идея?

LW
29.04.2021, 15:40
Бред.

Дело не в мышиных портах, а в опросе клавиатуры, смотри в эту сторону. Или отключи вообще опрос клавиатуры и проверь как работает.

DragonsLord
29.04.2021, 15:42
Так это две независимые процедуры. Причём и та и другая ничего в порт не пишут. Только читают. И порты эти разные.

LW
29.04.2021, 15:51
Курсор управляется от клавиатуры? Да. Значит уже не независимые процедуры.
Отключи опрос клавиатуры и увидишь эффект.
Банально в Spine выруби клаву хотя бы. И дрожание тут же прекращается.

DragonsLord
29.04.2021, 15:53
Вот это уже интересная конкретика. Спасибо за намёточку, - я подумаю...

LW
29.04.2021, 16:07
У тебя там по адресу #AA6D переход похоже неправильный.
Из-за этого при нажатии SSHIFT`а всё улетает в нирвану

DragonsLord
29.04.2021, 16:43
Мы не тестим Героев. Мы тестим мышку. :tongue:

LW
29.04.2021, 16:45
Ну тогда отключай управление от клавиатуры, и оставляй только мышку.

DragonsLord
29.04.2021, 22:18
Алиллуя, братие и сестры! Варик начат!

https://d.radikal.ru/d23/2104/f0/6f7b6b7a5b00.png

Тайлы все оцифровал.

Джерри, есть чёнить ультрабыстрое на тему тайлинга? Мысли там, подходы?
Я храню их в стандартном виде:
монохром линейно, т.е.
2 байта первой строчки
2 байта второй строчки
...
2 байта шестнадцатой строчки
+
2 байта цвета первой строчки знакомест
2 байта цвета второй строчки знакомест
-----------------
32+4=36 байт ИТОГО

Быстрая мегакидалка-спрайтовалка-на_экран_выводилка существует?


И касательно процедуры определения адреса в экране по координатам знакоместа 32х24

Я юзаю:



;**SCRAD2** АДРЕС В ЭКРАНЕ ПО X И Y (в знакоместах)
;ВХ: hl - X И Y В ЗНАКОМЕСТАХ
;ВЫХ: hl - АДРЕС В ВИДЕОПАМЯТИ
SCRAD2 ld a,h
ex af,af'
ld a,l
call 3742
ex af,af'
or l
ld l,a
ret


Но видел у Санчеза такую:


;расчёт экранного адреса по координатам с точностью до знакоместа
;вх - hl - координаты в знакоместах
;вых - hl - адрес на теневом экране
get_screen_adr_sym ld a,l
rrca
rrca
rrca
and #e0
or h
ld h,a
ld a,l
and #18
add a,high shadow_screen
ld l,h
ld h,a
ret


Кто такты умеет считать? Сколько та и другая жрут?

Lethargeek
30.04.2021, 10:21
Кто такты умеет считать?
как ты собираешься кодить игры, сам не научившись такты считать в уме??



Сколько та и другая жрут?
вторая 67 тактов, первая заведомо медленней (пзу, серьёзно?)

навскидку, с таблицей можно сделать раза в полтора быстрее:


ld a,h
ld h,high TABLE
or (hl)
set 5,l ; или "inc h", если разбить таблицу
ld h,(hl)
ld l,a

DragonsLord
30.04.2021, 16:23
Готовые примеры в студию, пожалуйста.
Такты это не ко мне. Я только Варик умею писать. Считать такты не умею :tongue:

Lethargeek
30.04.2021, 20:03
Готовые примеры в студию, пожалуйста.
чем тебе это не готовый пример был?


Такты это не ко мне. Я только Варик умею писать. Считать такты не умею
а ты учись, как завещал нам дедушка Ленин, а не то получится недо-варик

DragonsLord
30.04.2021, 20:14
чем тебе это не готовый пример был?
Таблица то где?


а ты учись, как завещал нам дедушка Ленин, а не то получится недо-варик
Ты много Вариков написал? :biggrin:
Видел на стриме Алония, что сам Unreal умеет показывать такты. Я только не понял, как конкретно ему сказать откуда и до куда считать.

jerri
30.04.2021, 20:58
Джерри, есть чёнить ультрабыстрое на тему тайлинга? Мысли там, подходы?


тут товарищь Сергей Смирнов будет стрим делать
можешь ему на стрим записаться (https://docs.google.com/forms/d/e/1FAIpQLSc3go3Ik2mA0jY5Mqofk1lYTvvgCnq9X93vaJaWKZnm ZFr9yQ/viewform) и предложения, что узнать хочешь, внести.

goodboy
30.04.2021, 21:12
Unreal умеет показывать такты. Я только не понял, как конкретно ему сказать откуда и до куда считать.
между двумя BreakPoint`ами

DragonsLord
30.04.2021, 23:03
тут товарищь Сергей Смирнов будет стрим делать
Зачем мне неизвестно кто, когда есть проверенный годами Джерри.


между двумя BreakPoint`ами
Осталось узнать, как их в код вставлять.

Lethargeek
01.05.2021, 00:15
Таблица то где?
в памяти :p из кода элементарно и очевидно, какой должна быть


Ты много Вариков написал?
незачем, достаточно тех, что видел


Видел на стриме Алония, что сам Unreal умеет показывать такты.
такты для таких коротеньких фрагментов в уме считают
почитай доки о машинных циклах z80, и сам так же сможешь

- - - Добавлено - - -

а для длинных такты в xpeccy смотреть удобней

DragonsLord
01.05.2021, 00:17
элементарно и очевидно, какой должна быть
Я тупой, мне надо готовое.


а для длинных такты в xpeccy смотреть удобней
Раз так быстро и удобно, всего парой кнопок посмотреть, то какова длина в тактах моей процедуры, использующей ПЗУ?

jerri
01.05.2021, 07:10
Зачем мне неизвестно кто, когда есть проверенный годами Джерри.

Смелое утверждение.
У меня специализация другая.

jerri
01.05.2021, 07:11
Я тупой, мне надо готовое.

Значит объяснения ты не поймёшь.
Увы тебе

DragonsLord
01.05.2021, 08:05
Ну, придётся всё самому писать. Как обычно.
Никто ничё не помогает...

https://c.radikal.ru/c29/2105/8a/a8d204036808.png

Чёт Unreal яркость так контрастирует - просто капец! Помню, на реальном железном Спеке яркости почти не отличались, а тут просто кошмар. Придётся переделать и всю игру запилить на повышенной яркости онли. А то слишком клэшинг палится в таком режиме...

Lethargeek
01.05.2021, 08:49
Ну, придётся всё самому писать. Как обычно.
Никто ничё не помогает...
знаешь ли, просто мало у кого есть столько свободного времени, чтобы думать и считать за тебя там, где ты и сам вполне успешно справился бы, если бы только не ленился и не капризничал

Beaver
01.05.2021, 13:11
знаешь ли, просто мало у кого есть столько свободного времени, чтобы думать и считать за тебя там, где ты и сам вполне успешно справился бы, если бы только не ленился и не капризничал

Вы не понимаете. Повелитель драконов - он на то и Повелитель, чтобы геймдизайнеричать и раздавать ЦУ. А считать такты и кодить - не царское дело. Его дело - организация и мудрое руководство, подбить инертное комьюнити на создание чего-то сверх-технологичного с уходом в чёрное. На изичах, разумеется.

Со всем уважением к Повелителю и нетерпеливым ожиданием релизов)

DragonsLord
01.05.2021, 17:17
ты и сам вполне успешно справился бы, если бы только не ленился
В каком месте я ленюсь? Мой продакшен выше целой группы. Научите брэкпоинты ставить, я сам в Анриле буду такты смотреть. Быстро и эффективно.


Со всем уважением к Повелителю и нетерпеливым ожиданием релизов)
С огромным удовольствием закодирую каждый байтик игры лично. И получу от процесса тройной кайф. :v2_dizzy_punk:

izzx
01.05.2021, 18:04
Научите брэкпоинты ставить, я сам в Анриле буду такты смотреть.

https://zx-pk.ru/threads/20012-kak-izmerit-kolichestvo-taktov-v-debaggere.html

Пробелом две точки останова поставить, потом внизу слева напишет delta time.
У меня правда странно получается
ldir при значении bc=1024 выдаёт 10755t. А должно бы 1024*21=21504t?

krt17
01.05.2021, 18:53
ldir при значении bc=1024 выдаёт 10755t.
https://i.imgur.com/7vBkNlN.png
последний без перехода -5 тактов
Сори за оффтоп, поддержать на уровне идиотизм треда не могу.

izzx
01.05.2021, 19:36
последний без перехода -5 тактов

А у меня наверно особый случай, в районе ПЗУ код. Вот и дуркует.
И на реале сильно отличается количество тактов в прерывании.
UnrealSpeccy 0.37.7
Ну это не по теме уже.
https://pic.maxiol.com/thumbs2/1619886610.2990913286..png (https://pic.maxiol.com/?v=1619886610.2990913286..png&dp=2)

jerri
01.05.2021, 19:36
В каком месте я ленюсь?

В главном


SPACE установить/снять точку останова под курсором

DragonsLord
01.05.2021, 20:17
Пробелом две точки останова поставить, потом внизу слева напишет delta time.
У меня правда странно получается
Правильно покажет, если по F8 прошёлся по нужному call, не заходя в него, - он его длину напишет в тактах.
Пока не совсем понятно, как навигацию осуществлять в этом дебагере, как сразу в нужную точку исходного текста попасть при останове по Escape. А то он тупо в то место попадает, где сейчас исполнялся.

Ещё он бывает белый треугольник ставит в конце строки. Потом, как от него избавиться ваще не понятно. От него начинает считать всегда.

Нашёл в Анриле некий менеджер брэкпоинтов. Шо сие? Ещё вспоминается, что Алоний в исходниках продуцирует некую таблицу меток, - наверняка же для подобных шастаний в дебагере, да/нет?

Один тайл у меня ща выводится за 1736t (это с подготовленными данными, куда выводить)
И вместе с подготовкой данных 2000t

jerri
01.05.2021, 20:36
Нашёл в Анриле некий менеджер брэкпоинтов. Шо сие?

очень мощный инструмент.



менеджер точек останова оперирует тремя типами точек останова:

1. условные остановы (conditional breakpoints) и on-screen watches
используют Си-подобный синтаксис выражений.

операции (перечислены в порядке убывания приоритета):
() ! ~ M(x) -> * % / + - >> << > < == = <= >= != & ^ | && ||
операнды:
a,b,c,d,e,h,l,bc,de,hl - основной набор регистров
a',b',c',d',e',h',l',bc',de',hl' - альтернативный набор регистров
ix,iy,pc,sp,i,r - прочие регистры
FD - порт памяти #FD (также известен как #7FFD)
OUT - порт, использованный в команде OUT (или 0FFFFFFFF, если OUT не было)
IN - порт, использованный в команде IN (или 0FFFFFFFF, если IN не было)
VAL - значение, считанное/записанное в порт (имеет смысл, только
если OUT != 0FFFFFFFF или IN != 0FFFFFFFF)
числа - шестнадцатеричные, должны начинаться с цифры: DFFD - нельзя, 0DFFD - можно
коды символов - заключаются в апострофы ('A','B' и т.п.)
Все вычисления производятся в 32-битной беззнаковой целой арифметике.
Если вы плохо знакомы с Си, ставьте скобки, где возможно,
т.к. приоритет операций неинтуитивен, например:
out & 0FF == 0FE понимается как 'out & (0FF == 0FE)' <- всегда 0

M(x) - байт, считанный из адреса x (можно записать как x->0)
'=' - то же, что '==' (для паскалистов)

Примеры:

(out+1) | (in+1) - IN/OUT в любой порт
(in & 8001) == 0 - чтение клавиш от <B> до <SPACE>
!(out & 1) - любой вывод в порт #FE
(out & 0FF)==0BB && (val==0F3 || val==0F4) - сброс General Sound
(out & 0FF)==0FD && (val&7)==3 - установка 3-й банки памяти
(FD & 7) == 3 - то же самое
M(pc)==0CB && pc->1 >= 10 && pc->1 <= 17
- останавливается во время выполнения команды RL <reg>

Надеюсь, этих примеров достаточно для понимания идеи

Чтобы редактировать точку останова, щёлкните на ней мышью два раза

2. точки останова по адресам (также ставятся в окне дизассемблера кнопкой
"пробел"). В окне менеджера точек останова легко расставить точки
останова на большой диапазон памяти, например, 6000-FFFF

3. остановы по чтению/записи памяти. Похожи на остановы по адресам,
но имеют флаги "R" и "W", означающие останов по чтению/записи
указанных адресов памяти (можно установить оба флага)


но тебе не подойдет.

izzx
01.05.2021, 20:43
Также не понятно, как сразу в нужную точку исходного текста попасть при останове по Escape.
Перейти на нужный адрес Ctrl+G

DragonsLord
01.05.2021, 21:07
Дык, если я в душе не знаю, где у меня этот адрес скомпилировался?
Я знаю, где у меня в асмовском тексте метка допустим стоит в виде начала процедуры.
Как мне на неё попасть?

В идеале, чтобы я мог в самом асме чёнить написать в нужном месте, а дебагер потом мне на эту надпись остановился, или бы позволил на неё в один клик прилететь.



Обсчитал все выводилки. Прикинулся по таймингам.
Короче, любой совокупный вывод в игре будет не более 2 кадров, т.е. вывод графена с 25fps.
Это касается, как скроллеров карты, так и игрового процесса с выводом динамических юнитов.
Никаких проблем со скоростью не вижу.

DragonsLord
02.05.2021, 01:00
вторая 67 тактов, первая заведомо медленней (пзу, серьёзно?)
навскидку, с таблицей можно сделать раза в полтора быстрее

Замерил, свою (с ПЗУ) и Санчаза.
Моя 10t на загрузку HL + 127t call
Санчеза 10t на загрузку HL + 84t call
итого в 1,5 раза Санчезная быстрее.

Где ваша мегатаблица, уважаемый Lethargeek. Дайте для теста, для замеров скорости. Я теперь знатный специалист по замеру тактов :biggrin:

- - - Добавлено - - -

Готово. Скроллеры во все стороны дописал. Тайловая карта теперь свободно просматривается мышкой. Кто там говорил про лень? :tongue:

Lethargeek
02.05.2021, 01:30
Дык, если я в душе не знаю, где у меня этот адрес скомпилировался?
Я знаю, где у меня в асмовском тексте метка допустим стоит в виде начала процедуры.
Как мне на неё попасть?
:v2_dizzy_facepalm: что, не в курсе даже, что ассемблер листинг с адресами выдавать может?


Где ваша мегатаблица,
вычисляется на изичах, глядя в код :p
задаёшь побитное символьное представление входных данных и результата
смотришь, что должно из таблиц читаться, чтобы результат получился

DragonsLord
02.05.2021, 01:57
что, не в курсе даже, что ассемблер листинг с адресами выдавать может?
А почему я должен быть в курсе? Мне об этом кто-то сообщил? Научил выводить листинг?


вычисляется на изичах, глядя в код
На изичах, это когда кладут сюда таблицу :v2_dizzy_roll:

- - - Добавлено - - -

Уже ТРИ раза ускорял тайловыводилку.

Было:
1736 - вывод 1 тайла по расчитанным адресам
2000 - расчёт адресов + вышеописанное

Стало:
1369 - вывод 1 тайла по расчитанным адресам
1633 - расчёт адресов + вышеописанное

367 тактов экномии на изичах (18%)! Пляшем! :v2_dizzy_punk:

DragonsLord
02.05.2021, 05:04
Доускорялся, - времянки сдвинулись вверх, стэк накрывать всё стал медным тазом. Хаха! :biggrin:

Lethargeek
02.05.2021, 08:59
А почему я должен быть в курсе?
потому что нужно RTFM


На изичах, это когда кладут сюда таблицу
нет, когда кладут - это на халяву :p
так что не ленись и считай на изичах!

DragonsLord
02.05.2021, 14:18
потому что нужно RTFM
Каким образом я вдруг стану понимать ничего не говорящие сокращения? Это примерно, как сказать "ну, тебе нужен АБЫРВАЛГ".


нет, когда кладут - это на халяву
С каких это пор на Спеке стали заявлять копирайты на интеллектуальную собственность. Очнись, те времена прошли 30 лет назад. Сейчас все исходники открыты для всех. Как ты называешь "нахаляву".

DragonsLord
02.05.2021, 16:52
Столкнулся с проблемой, в Анриле мой разогнанный код бажит, а в Спине всё работает на отлично. Вот как это может быть? А?! :confused_std:
У обоих одинаковая настройка стоит: Pentagon 128

...
Нашёл. Пофиксил. Победа!
Даже на Скорпионовских таймингах теперь не крашит, а идеалити!
Можно ускорять дальше.
:v2_dizzy_punk:

jerri
02.05.2021, 19:53
С каких это пор на Спеке стали заявлять копирайты на интеллектуальную собственность. Очнись, те времена прошли 30 лет назад. Сейчас все исходники открыты для всех. Как ты называешь "нахаляву".

ну так и бери то что выложили на халяву (http://opensourcezx.untergrund.net/a_games.html).
Никто не запрещает.

DragonsLord
02.05.2021, 20:01
Чёт, смотрю на результаты - слишком гладко всё идёт. Прям на изичах. Мож я знатный гуру, только не знаю об этом?
Да не.... Это просто Спек такой элементарный калькулятор, где любой мегасложный проект делается за неделю без раскачки. :cool_std:

jerri
02.05.2021, 20:25
Чёт, смотрю на результаты - слишком гладко всё идёт. Прям на изичах. Мож я знатный гуру, только не знаю об этом?
Да не.... Это просто Спек такой элементарный калькулятор, где любой мегасложный проект делается за неделю без раскачки. :cool_std:

конечно никаких сложностей

21.01.2021, 21:36 - 02.05.2021, 21:01 - ровно неделя.

ZX_NOVOSIB
02.05.2021, 21:02
Каким образом я вдруг стану понимать ничего не говорящие сокращения?
С помощью гугла: https://en.wikipedia.org/wiki/RTFM

DragonsLord
02.05.2021, 22:58
21.01.2021, 21:36 - 02.05.2021, 21:01 - ровно неделя.
Нет, нет, это вы сопли жуёте 5 месяцев, - помощи ноль. Я же начал писать день назад, о чём и сообщил в топике.

Только что закончил новую версию тайловыводилки писать. Со стэком. Наврядли можно быстрее.
Уложил таки на самых медленных Скорпионовских тактах самый длинный вариант сроллинга (из восьми).
Всё скроллится ровно за 2 кадра на любом компьютере.

36 тактов на 2 байта
1109 - выводилка 1 цветного тайла по входным параметрам
1373 - с расчётом этих входных параметров

31,35% выигрыша от изначальной афигенски быстрой процедуры, которая применяется в Героях.
:v2_dizzy_punk:


Снапшот с тайловым скроллером чуть позже. Хочу карту первого уровня набрать для красоты.

- - - Добавлено - - -

Так сказать, чтобы осталось в аналах ДЛЯ ПОТОМКОВ.

Была тайловыводилка, показанная в "HeroesII", написанная в 98 году. Достаточно быстрая, вся инлайновая. Определение адреса в экране сделано через ПЗУ.



;323774t - 12x12=144 тайла (2248t)
;2000t - 1 тайл
GAMEPOLE ld b,12
GAMEMET2 push bc
ld a,(POZXY)
ld (POZX),a
ld a,4
ld (PSP+1),a ;X начала вывода карты на экране
ld a,(POZXY+1)
dec b
add a,b
ld (POZY),a
ld a,b
add a,b ;b*2
ld (PSP),a ;Y начала вывода карты на экране
ld b,12
GAMEMET1 push bc
call SPPECH
ld a,(POZX)
inc a
ld (POZX),a
ld a,(PSP+1)
inc a
inc a
ld (PSP+1),a
pop bc
djnz GAMEMET1
pop bc
djnz GAMEMET2
ret
;1736t
SPPECH ld de,64
ld a,(POZY)
call MUL_8
ld a,(POZX)
ld e,a
ld d,0
add hl,de
ld de,karta
add hl,de
OGOGO2 ld a,(hl)
ld e,36
ld d,0
call MUL_8
ld de,tiles
add hl,de
OGOGO push hl
pop ix
ld hl,PSP
ld a,(hl)
inc hl
ld c,(hl)
push bc
push af
call 3742
ld a,l
add a,c
ld l,a
ld (PTBL4),hl
ld a,(ix+0)
ld (hl),a
inc l
ld a,(ix+1)
ld (hl),a
dec l
inc h
ld a,(ix+2)
ld (hl),a
inc l
ld a,(ix+3)
ld (hl),a
dec l
inc h
ld a,(ix+4)
ld (hl),a
inc l
ld a,(ix+5)
ld (hl),a
dec l
inc h
ld a,(ix+6)
ld (hl),a
inc l
ld a,(ix+7)
ld (hl),a
dec l
inc h
ld a,(ix+8)
ld (hl),a
inc l
ld a,(ix+9)
ld (hl),a
dec l
inc h
ld a,(ix+10)
ld (hl),a
inc l
ld a,(ix+11)
ld (hl),a
dec l
inc h
ld a,(ix+12)
ld (hl),a
inc l
ld a,(ix+13)
ld (hl),a
dec l
inc h
ld a,(ix+14)
ld (hl),a
inc l
ld a,(ix+15)
ld (hl),a
pop af
inc a
call 3742
pop bc
ld a,l
add a,c
ld l,a
ld a,(ix+16)
ld (hl),a
inc l
ld a,(ix+17)
ld (hl),a
dec l
inc h
ld a,(ix+18)
ld (hl),a
inc l
ld a,(ix+19)
ld (hl),a
dec l
inc h
ld a,(ix+20)
ld (hl),a
inc l
ld a,(ix+21)
ld (hl),a
dec l
inc h
ld a,(ix+22)
ld (hl),a
inc l
ld a,(ix+23)
ld (hl),a
dec l
inc h
ld a,(ix+24)
ld (hl),a
inc l
ld a,(ix+25)
ld (hl),a
dec l
inc h
ld a,(ix+26)
ld (hl),a
inc l
ld a,(ix+27)
ld (hl),a
dec l
inc h
ld a,(ix+28)
ld (hl),a
inc l
ld a,(ix+29)
ld (hl),a
dec l
inc h
ld a,(ix+30)
ld (hl),a
inc l
ld a,(ix+31)
ld (hl),a
ld bc,(PTBL4)
ld a,b
and #18
sra a
sra a
sra a
add a,#58
ld b,a
ld a,(ix+32)
ld (bc),a
inc bc
ld a,(ix+33)
ld (bc),a
ld hl,31
add hl,bc
ld a,(ix+34)
ld (hl),a
inc hl
ld a,(ix+35)
ld (hl),a
ret

PTBL4 defb 0,0 ;временно храним адрес
POZX defb 0
POZY defb 0
PSP defb 0,0 ;Y,X


В 2021 году я заметил, что судя по структуре проекта, применение индексного регистра IX не обосновано, а значит следует отказаться от него, ибо все операции с IX жрут больше тактов, чем аналогичные с другими регистровыми парами. Заодно убрал повторный расчёт адреса в экране второй линии знакомест. И заменил процедуру расчёта адреса в экране с обращения в ПЗУ на самописную, увиденную у Санчеза. Выигрыш 18% относительно исходника.



;269486(1871);276398(1919);308942(2145);323774 - 12x12=144 тайла (2248)
;1633;1671;1897;2000 - 1 тайл
GAMEPOLE ld b,12
GAMEMET2 push bc
ld a,(POZXY)
ld (POZX),a
ld a,4
ld (PSP+1),a ;X начала вывода карты на экране
ld a,(POZXY+1)
dec b
add a,b
ld (POZY),a
ld a,b
add a,b ;b*2
ld (PSP),a ;Y начала вывода карты на экране
ld b,12
GAMEMET1 push bc
call SPPECH
ld a,(POZX)
inc a
ld (POZX),a
ld a,(PSP+1)
inc a
inc a
ld (PSP+1),a
pop bc
djnz GAMEMET1
pop bc
djnz GAMEMET2
ret
;1369 - заменил 3742 на Санчеза
;1407 - убрал вывод через IX
;1633 - убрал второй обсчёт через 3742
;1736 - было изначально
SPPECH ld de,64
ld a,(POZY)
call MUL_8
ld a,(POZX)
ld e,a
ld d,0
add hl,de
ld de,karta
add hl,de
OGOGO2 ld a,(hl)
ld e,36
ld d,0
call MUL_8
ld de,tiles
add hl,de
OGOGO ex de,hl
ld hl,PSP
ld a,(hl)
inc hl
ld c,(hl)
ld l,a
rrca
rrca
rrca
and #e0
or c
ld h,a
ld a,l
and #18
add a,high 16384 ;shadow_screen
ld l,h
ld h,a
ld (PTBL4),hl
dup 7
ld a,(de) ;Выводим 2 байта
ld (hl),a
inc de
inc l
ld a,(de)
ld (hl),a
inc de
inc h
dec l
edup
ld a,(de) ;Выводим 2 байта
ld (hl),a
inc de
inc l
ld a,(de)
ld (hl),a
inc de
;-------------
ld hl,(PTBL4)
ld a,l
add a,#20
ld l,a
dup 7
ld a,(de) ;Выводим 2 байта
ld (hl),a
inc de
inc l
ld a,(de)
ld (hl),a
inc de
inc h
dec l
edup
ld a,(de) ;Выводим 2 байта
ld (hl),a
inc de
inc l
ld a,(de)
ld (hl),a
inc de
;-------------
ld bc,(PTBL4)
ld a,b
and #18
sra a
sra a
sra a
add a,#58
ld b,a
ld a,(de)
ld (bc),a
inc de
inc bc
ld a,(de)
ld (bc),a
inc de
ld hl,31
add hl,bc
ld a,(de)
ld (hl),a
inc de
inc hl
ld a,(de)
ld (hl),a
ret

PTBL4 defb 0,0 ;храним адрес начала (адрес в экране),тайл
POZX defb 0
POZY defb 0
PSP defb 0,0 ;Y,X


Гулять так гулять, подумал я. Свербит в мозгу желание брать и класть регистровыми парами, а не отдельными регистрами. Посмотрев таблицу существующих мнемоник Z80 пришёл к выводу, что и взять парой и положить парой не получится, нет таких команд, ибо адреса откуда и куда у нас всегда расчитываются в преамбуле и всё время разные. Ну, хотя бы ВЗЯТЬ я регистровой парой могу, и то хлеб. Выигрыш относительно исходника увеличился до 35%.



;233486(1621);269486(1871);276398(1919);308942(214 5);323774 - 12x12=144 тайла (2248)
;1373;1633;1671;1897;2000 - 1 тайл
GAMEPOLE ld b,12
GAMEMET2 push bc
ld a,(POZXY)
ld (POZX),a
ld a,4
ld (PSP+1),a ;X начала вывода карты на экране
ld a,(POZXY+1)
dec b
add a,b
ld (POZY),a
ld a,b
add a,b ;b*2
ld (PSP),a ;Y начала вывода карты на экране
ld b,12
GAMEMET1 push bc
call SPPECH
ld a,(POZX)
inc a
ld (POZX),a
ld a,(PSP+1)
inc a
inc a
ld (PSP+1),a
pop bc
djnz GAMEMET1
pop bc
djnz GAMEMET2
ret
;1109 - sp через стэк
;1369 - заменил 3742 на Санчеза
;1407 - убрал вывод через IX
;1633 - убрал второй обсчёт через 3742
;1736 - было изначально
SPPECH ld de,64
ld a,(POZY)
call MUL_8
ld a,(POZX)
ld e,a
ld d,0
add hl,de
ld de,karta
add hl,de
OGOGO2 ld a,(hl)
ld e,36
ld d,0
call MUL_8
ld de,tiles
add hl,de
OGOGO di
ld (SPgo+1),sp
ld sp,hl ;6 - откуда брать
;-------------
ld hl,PSP
ld a,(hl)
inc hl
ld c,(hl)
ld l,a
rrca
rrca
rrca
and #e0
or c
ld h,a
ld a,l
and #18
add a,high 16384 ;shadow_screen
ld l,h
ld h,a
ld (PTBL4),hl
;-------------
dup 7
pop de ;10 - берём оттуда
ld (hl),e ;7
inc l ;4
ld (hl),d ;7
inc h ;4
dec l ;4 итого: 36
edup
pop de ;10 - берём оттуда
ld (hl),e ;7
inc l ;4
ld (hl),d ;7
;-------------
ld hl,(PTBL4)
ld a,l
add a,#20
ld l,a
;-------------
dup 7
pop de ;10 - берём оттуда
ld (hl),e ;7
inc l ;4
ld (hl),d ;7
inc h ;4
dec l ;4 итого: 36
edup
pop de ;10 - берём оттуда
ld (hl),e ;7
inc l ;4
ld (hl),d ;7
;-------------
ld hl,(PTBL4)
ld a,h
and #18
sra a
sra a
sra a
add a,#58
ld h,a
;-------------
pop de ;10 - берём оттуда
ld (hl),e ;7
inc hl ;6
ld (hl),d ;7
ld bc,31
add hl,bc
pop de ;10 - берём оттуда
ld (hl),e ;7
inc hl ;6
ld (hl),d ;7
SPgo ld sp,#0000
ret

PTBL4 defb 0,0 ;храним адрес начала (адрес в экране),тайл
POZX defb 0
POZY defb 0
PSP defb 0,0 ;Y,X


Буду рад, если вам пригодится мой код. Надеюсь у гуру нет вопросов относительно оптимизации печати тайлов? Если нет, - считаю этот вопрос закрытым.

DragonsLord
03.05.2021, 07:36
Как в Tiled Map Editor сделать отписку карты не с теми номерами тайлов, которые он сам по умолчанию ставит, беря их с атласа по порядку, а чтобы мои номера тайлов были (у меня номера не по порядку следования на атласе)?

Грубо говоря при отписывании сделать конверт одних значений на другие, типа так:
если 1, то 89
...
если 33, то 92
...
...
если 227, то 52

Скрипт какой то надо писать для экспорта или что?

jerri
03.05.2021, 09:16
Нет, нет, это вы сопли жуёте 5 месяцев, - помощи ноль. Я же начал писать день назад, о чём и сообщил в топике.


Ок та и запишем

игра будет написана за майские праздники
02.05.2021, 21:01 - 09.05.2021, 23.59

- - - Добавлено - - -


Как в Tiled Map Editor сделать отписку карты не с теми номерами тайлов, которые он сам по умолчанию ставит, беря их с атласа по порядку, а чтобы мои номера тайлов были (у меня номера не по порядку следования на атласе)?

Грубо говоря при отписывании сделать конверт одних значений на другие, типа так:
если 1, то 89
...
если 33, то 92
...
...
если 227, то 52

Скрипт какой то надо писать для экспорта или что?

попробуй скрипт.
я писал вырезалку.

DragonsLord
03.05.2021, 16:54
Ок та и запишем
игра будет написана за майские праздники
Так и запиши: "при условии, что Джерри предоставит все необходимые процедуры готовыми из своих запасов, игра будет написана за майские праздники. Если не предоставит, не будет написана за праздники. Буду писать всё сам. Долго и нудно" :cool_std:

Но я сам тоже быстро пишу:
- 1 день на подключение кемпстон мауса +кроппинг,
- 1 день на скроллеры карты
- 1 день на тайло-выводилку
это всё при нуле помощи по теме.

Сегодня в планах дособрать карту уровня полностью, зумутить какойнить конвертер, плюс прикрутить систему анимации фоновых тайлов + изготовить эти самые анимации, да не просто абы какие, а сграбить через видеоряд с оригинала и потом переложить через фотошоп.


попробуй скрипт.
я писал вырезалку.
Образец бы. Экземпл на лапу. Пример в кармашек. А лучше готовое на пару строк, я привёл пример как, а я сам расширю до всего пула тайлов.

NEO SPECTRUMAN
03.05.2021, 16:59
Но я сам тоже быстро пишу:
- 1 день на подключение кемпстон мауса +кроппинг,
- 1 день на скроллеры карты
- 1 день на тайло-выводилку
это всё при нуле помощи по теме.
так ты говорил за неделю на изичах любой дурак
а тут выходит такими темпами ужо четыре месяцо делаиттсо

DragonsLord
03.05.2021, 18:00
Напоминаю людям, страдающим беспамятством, что я на самом деле говорил: "опытный чел, у которого на руках есть полная библиотека уже готовых процедур и практикующий в кодинге 30 лет без перерыва, сможет собрать за неделю".

Как показала практика, таких индивидов на Спеке нет. Либо ничего не знаю и не умеют, либо всё то же самое один в один, но с пафосом ходят щёки раздувают в стиле "мы не будем, нам некогда, это недостойно нашего внимания". Толку от тех и от других ноль.

История типа Алония. Я говорю, ты же Чёрного Ворона переделывал, красил спрайты, а это значит спрайты в новом формате заменял полностью на свои и выводилки делал полностью свои и остальной код уже весь готов. Что тебе мешает за два дня запихать мои спрайты и тайлы в уже готовую игру?! И получится готовый Варик. - Правильно, ничего. Чих-пых и продакшен на изичах. Так нет же,.. хочу только цвет, только под Evo,... не буду делать...

Ню-ню... И это, замечу, самый адекватный из. Осталные только одну песню хором напевать умеют: "не сделаешь, не сможешь, тактов не хватит, графен в память не влезет, трассер ниасилишь, гиблое это дело, даже не пытайся, это невозможно"... Я так понял эти все индивиды по себе судят. Ну, не можете, так не можете. Смотрите, как батя сам сделает в одно жало на изичах.

jerri
03.05.2021, 18:44
Ню-ню... И это, замечу, самый адекватный из. Осталные только одну песню хором напевать умеют: "не сделаешь, не сможешь, тактов не хватит, графен в память не влезет, трассер ниасилишь, гиблое это дело, даже не пытайся, это невозможно"... Я так понял эти все индивиды по себе судят. Ну, не можете, так не можете. Смотрите, как батя сам сделает в одно жало на изичах.


Да ладно, тебе сразу сказали: Делай что хочешь. Это только твое дело.
И вот спустя полгода ты наконец взялся. Ну удачи тебе.

DragonsLord
03.05.2021, 19:16
Кстати, нет у меня ещё одного навыка, который я бы хотел получить для полноты свободы в кодинге.
Я не понимаю, как конкретно работает $. И судя по коду 3d движка, даже Алоний постоянно путается.

Понятно. что все инструкции имеют длину в байтах. Это можно посмотреть в таблицах.
Не понятно, где конкретно сейчас на момент исполнения находится точка $ в инструкциях длинее 1 байта.

Например, скажите точно, что будет записано в этом примере:



org 32768
ld hl,$ ;21XXXX
ld (met+1),hl ;22XXXX
met ld sp,#0000 ;31XXXX


Или какое точно смещение должно быть записано в конструкции типа:



cp 1
jp nz,$+? ;C2XXXX
ld a,100 ;3EXX
ret ;C9
ld a,200
ret


чтобы получился аналог этого



cp 1
jp nz,quit ;C2XXXX
ld a,100 ;3EXX
ret ;C9
quit ld a,200
ret



Где конкретно в нескольких байтах стоит $? Допустим 3 байта инструкция в исполняемой строчке, где?
$здесь? ... 1 байт... $здесь? ... 2 байт... $здесь? ... 3 байт... $здесь?
от какого места отсчитывать?

- - - Добавлено - - -


И вот спустя полгода ты наконец взялся.
Можно подумать я полгода ваньку валял, а не Алониевский движок продвигал и дописывал :biggrin:

Lethargeek
03.05.2021, 19:33
Не понятно, где конкретно сейчас на момент исполнения находится точка $ в инструкциях длинее 1 байта.
по адресу начала инструкции (и да, это есть в документации, и по листингу элементарно можно проверить)


Можно подумать я полгода ваньку валял, а не Алониевский движок продвигал и дописывал
да ты и сейчас продолжаешь ваньку валять вместо того, чтобы наконец начать читать мануалы

NEO SPECTRUMAN
03.05.2021, 19:34
org 32768
ld hl,$ ;21XXXX
ld (met+1),hl ;22XXXX
met ld sp,#0000 ;31XXXX




тоже самое что



org 32768
aaa ld hl,aaa ;21XXXX
ld (met+1),hl ;22XXXX
met ld sp,#0000 ;31XXXX






Или какое точно смещение должно быть записано в конструкции типа:



cp 1
jp nz,$+? ;C2XXXX
ld a,100 ;3EXX
ret ;C9
ld a,200
ret




это быдло код
никогда так не пиши

если не хочешь выдумывать название метке
делай так


cp 1
jp nz,1f ;C2XXXX
ld a,100 ;3EXX
ret ;C9
1 ld a,200
ret



так же вот это быдлокод





ld (met+1),hl ;22XXXX


никогда так не делай

делай так



ld (met),hl ;22XXXX

;дето там
met = $+1 : ld sp,$0000

DragonsLord
03.05.2021, 19:40
по адресу начала инструкции

То есть здесь $+6 ?



cp 1
jp nz,$+6 ;C2XXXX
ld a,100 ;3EXX
ret ;C9
ld a,200
ret


А здесь получим ld sp,32768 ?



org 32768
ld hl,$ ;21XXXX
ld (met+1),hl ;22XXXX
met ld sp,#0000 ;31XXXX


Всё верно?


это быдло код
никогда так не пиши
Вот Алоний то порадуется. Оказывается он только *****код пишет. Онли :biggrin:
Чем *****код то? На сколько я помню 30 лет уже как ВСЕ сохраняют значение стэка именно так: ld (met+1),sp

NEO SPECTRUMAN
03.05.2021, 19:42
jp nz,1f ;C2XXXX
ld a,100 ;3EXX
ret ;C9
1 ld a,200
важное замечание

вот такое компилятор не понимает
ld hl,1f
1 ld a,10

и аффтару компилятора недокажешь что это должно работать
и насколько это нужно...


ну и до можно переходить туда сюда
и иметь кучу временных цифровых меток


cp 2
jp nz,2f
cp 1
jp nz,1f ;C2XXXX
ld a,100 ;3EXX
ret ;C9

1 ld a,200
2 ld b,100
100500 xor a
ret

jp 2b ;так переходить назад
jp 100500b

Lethargeek
03.05.2021, 19:46
это быдло код
никогда так не пиши

если не хочешь выдумывать название метке
делай так
и так тоже быдлокод, кроме случая, когда нужно постоянное число тактов (и то cp 1 лучше заменить на dec a)

- - - Добавлено - - -


То есть здесь $+6 ?
да

NEO SPECTRUMAN
03.05.2021, 19:51
Чем *****код то?
всем
не понемаешь чем
ну не используй
потом добавишь 1 команду между
забыв поменять смещение
и будешь думать чего оно не работает....

и не будешь задавать глупых вопросов
типа

То есть здесь $+6 ?
и постоянно считать а сколько же байт смещения нужно добавить
или на что тепперь оно нужно исправить....


Вот Алоний то порадуется
пусть радуется
общеизвестно
что алоносорцы непригодны к повторному использованию

правда щас он перешел на сджасм и клиническая картина несколько улучшилась

но перемещаемость его кода все равно оставляет желать лучшего...

а так алоний силен в других направлениях...


я как раз недавно пытался заюзать этот движок под свои нужды
но тк там сплошные +6 +7 _ = $
и куча дичайших конструкций
итоговый код слабоперемещаем...

а еще есть мнение что мануалы алония понимает только сам алоний
но это не точно :)

- - - Добавлено - - -


когда нужно постоянное число тактов (
песец умнек нашелся...
придрался к командам когда речь шла про временные метки
а команды были для примера....

DragonsLord
03.05.2021, 19:58
Ещё интересно бы было обсудить "замены" в коде, сокращающие байты/такты. Я на вскидку, знаю две:
- вместо ld a,0 писать xor a
- вместо cp 0 писать and a

Ещё есть такие приколюхи?

NEO SPECTRUMAN
03.05.2021, 20:04
DragonsLord вот те наглядный пример
илюстрирующий почему +100500 в неположенном месте это *****код



var = 0

cp 1
jp nz,$+6 ;C2XXXX
ld a,100 ;3EXX

if var = 1
ld b,200
else
ld bc,$0000
xor e
endif

ret ;C9
ld a,200
ret

неужели еще нужно для jp nz писать условие и делать такое?
if var = 1
jp nz,$+6
else
jp nz,$+100500
endif

зачем создавать себе и другим головную боль?
когда можно использовать метки и временные метки

уже давно не 90-е
и писать экономя на весе исходника
никакое не оправдание
а только плохая привычка...

- - - Добавлено - - -


Ещё есть такие приколюхи?
add hl,hl для вращения hl например

их то куча
но сходу не вспомнить
ну и они все не на 100% передают заменяемое
а приминимы только в конретных случаях

например если не надо +-1 точность
то можно вместо
neg 8t
юзать
cpl 4t

самая крутая фишка как по мне это sbc a
в случае
carry = 0
A = 0
в случае
carry = 1
A = $FF

DragonsLord
03.05.2021, 20:25
зачем создавать себе и другим головную боль?
когда можно использовать метки и временные метки
Ты недопонял для чего такое применяется, как $+
Не для дикости, которую ты привёл, а если заранее гарантированно известно, что код будет законсервирован навсегда и не изменяем, никакого повторного использования, и лень придумывать 100500 меток. Вот например, ща я буду конвертер делать карты. Самое оно. В данном случае *****код это как раз метки лепить.

NEO SPECTRUMAN
03.05.2021, 20:43
как раз метки лепить.
нахрена тратить свое время выщитывая смещение (с вероятностью допустить ошибку)
когда можно одним пальцем поставить временную цифровую метку?
в придачу которая позволит перевернуть потом весь код с ног наголову без пересчету добланного смещения

- - - Добавлено - - -


Ты недопонял для чего такое
я тоже юзал такую гадость по началу
особенно когда юзал убогие ассемблеры типа emuzwin-овского...
но потом это прошло...


а если заранее гарантированно известно, что код будет законсервирован навсегда и не изменяем,
ну до
а потом когда ВНЕЗАПНО все же нужно будет его подправить
а там 60+ ld (****+1),hl (в придачу в разных файлах :v2_lol:)
вот это удовольствие :v2_dizzy_roll:
тебе непременно понравится

ну а в моем случае всякие jp xxx+6 вообще не применимы
тк умя весь замкнутый код фрагментирован
и при сборке ложится в память часто совершенно не в той последовательности в которой он написан в исходнике :v2_dizzy_vodka2:

- - - Добавлено - - -


Не для дикости, которую ты привёл,
ну может тебе и не дико
а вот тому кто откроет твой г*вно сорец
потом придется высчитывать а куда мать его ведет каждый срaный jp nz,$+17
чтоб элементарно понять куда оно мать его ведет
вспоминая того урода который додумался такое изваять...

...на а еще бывает такое
"открываешь свой сорец спустя 2 года"
ну ты понел...

- - - Добавлено - - -

кстате еще из моего опытка грабленаступания

конечно есть фанатичные фанатеки того что коменты нужно писать строго на инглише
ради какой то великой непостижимой цели...

но вот когда этих коментов на инглише целая куча (сопоставимая по размеру с самим кодом)

искать поиском по сорцу становится невозможным
вводя название метки или части команды
ты постоянно натыкаешся на эти же буквы в коментах...
это дикий пипец

тоесть если утя поиск в редакторе не умеет отличать каменты от команд

пиши коменты кирилицой и не морочь себе голову... ;)

goodboy
03.05.2021, 21:01
вместо ld a,0 писать xor a
xor a сбрасывает флаги в отличии от ld
в некоторых конструкциях это критично

krt17
03.05.2021, 21:05
нет вопросов относительно оптимизации печати тайлов?
Вопросов нет, хороший пример как не надо делать, держи, пол часа и бутылка пива.

Lethargeek
03.05.2021, 21:27
песец умнек нашелся...
придрался к командам когда речь шла про временные метки
я придрался не к командам, а к "делай так"

Bedazzle
03.05.2021, 21:52
Ещё интересно бы было обсудить "замены" в коде, сокращающие байты/такты.

http://z80-heaven.wikidot.com/optimization

DragonsLord
03.05.2021, 22:29
Карта из тайлов полностью набрана:

https://c.radikal.ru/c04/2105/1b/45b9181fc2bb.png

Один в один, как в оригинале. 100% копия вплоть до мельчайшего камешка.

Lethargeek
03.05.2021, 22:35
конечно есть фанатичные фанатеки того что коменты нужно писать строго на инглише
ради какой то великой непостижимой цели...
ради ясной и понятной цели не иметь потом проблем с кодировками
вплоть до разных кодировок кириллицы в одном файле после шибко умных редакторов
что еще не сразу заметить можно

DragonsLord
03.05.2021, 22:44
держи, пол часа и бутылка пива.
Точка перед меткой это чаго?

Ещё вижу некоторые ставят

метка : инструкция

а некоторые двоеточие не ставят. Это зачем двоеточие? А бывает, что асм ругается и надо так писать

метка
инструкция

Это почему?


хороший пример как не надо делать
Не всё так просто, горячий финский парень. Там подпрограмма с GOGOGO юзается из других мест. Поэтому она сделана изолированной процедурой.

- - - Добавлено - - -


ради ясной и понятной цели не иметь потом проблем с кодировками
Не спорьте, я инглиша не знаю. Все комменты русские. Имею проблемы с кодировками. Ну, и пофиг :biggrin:

NEO SPECTRUMAN
03.05.2021, 23:19
А еще есть jp\jr оптимизация


jr c,l1
;часто выполняемое условие

l1
;редко выполняемое условие



выиграш в сравнении с jp
есть даже при соотношении
40+% 7 тактовых jr
60-% 12 тактовых jr
на случай если "часто выполняемое условие" не всегда часто выполняется

jr - 7*4 +12*6 = 100
jp - 10*4+10*6 = 100


если условие выполняется в соотношениях то 39\61 то 61\39
нужно использовать JP

- - - Добавлено - - -


не иметь потом проблем с кодировками
это совсем с натяжкой...


ради ясной и понятной цели не иметь потом проблем с кодировками
а так цель у фанатеков такая
чтоб любой филипинскийафроизуит
мог открыть ваш сорец и прочитать коменты на каком то "стандартном" языке
который должны хоть как то знать все...

...но чем писать на непереводимом engrish-е
уж пусть лучше оно будет в переводимом национальном виде...


- - - Добавлено - - -


а некоторые двоеточие не ставят. Это зачем двоеточие? А бывает, что асм ругается и надо так писать
ну в некоторых асмах\языках метки пишутся c :
label:
и это есть обязательным условием

а в некоторых не пишотся
label
или есть опциональным (сджасму пофиг)

но зато сджасм не может метку не сначала строки...
что иногда очень даже мешает
по моему такая конструкция тоже НЕвозможна
label1 xor a : label2 di : halt
но это нужно уточнять....


я даже их принципиально удаляю когда мне они попадаются в чожом коде
тк мне они мозолят глаза (тк ЯВУ\сищниковая мерзость)
да и писать без : явно быстрее...

- - - Добавлено - - -


метка : инструкция
если вида
label : xor a
это синоним
label
xor a


можно писать вот так по людски
ld b,a : ld c,e : ld a,h

вместо мерзкого
ld b,a.e.c.hl.(hl),ix+4
которые некоторые ***** практикуют
чтоб сэкономить 3 байта на исходнике :v2_lol:


ну и это единственная возможнсоть сделать
var = $+1
ld a,0
в виде
var = $+1 : ld a,0

ТАК вроде НЕЛЬЗЯ
var = $+1 ld a,0
компилятор может даже не выдать вменяемую ошибку
а скомпилит неправильно

- - - Добавлено - - -

а так RTFM
http://z00m128.github.io/sjasmplus/documentation.html

там можно даже помещать чужой код с конфликтующими метками в "неконфликтующие" модули
и делать всякую порнографию


MODULE main ; module "main"
Main: ; main.Main
CALL SetScreen ; SetScreen
CALL vdp.Cls ; main.vdp.Cls
.loop: ; main.Main.loop
LD A,(.event) ; main.Main.event
CALL ProcessEvent ; label not found: main.ProcessEvent
DJNZ .loop ; main.Main.loop

MODULE vdp ; module "main.vdp"
@SetScreen: ; SetScreen
.loop: ; main.vdp.SetScreen.loop
RET
Cls: ; main.vdp.Cls
!KeepClsForLocal: ; main.vdp.KeepClsForLocal (since v1.18.0)
.loop: DJNZ .loop ; main.vdp.Cls.loop
RET
ENDMODULE

Main.event DB 0 ; main.Main.event
ENDMODULE

правда таким изращением уже нужно пользоваться с осторожностью
сначала проверяя работоспособность

ато в sjasm-е долгое время много чего работало с ошибками...
например раньше неправильно работал disp (компилить код который будет ложится по другим адресам)
по моему в последнем старом sjasm-е то что rc7 или около того (тот которые многие еще используют)
ата бага еще есть
и некоторые адреса получается не теми которые должны
и никто не гарантирует что все пофикшено в новых ветках sjasm-а

krt17
03.05.2021, 23:50
Не всё так просто

Все очень просто, моя 107к т твоя 233. Цена этого ускорения 160 байт

NEO SPECTRUMAN
03.05.2021, 23:56
Карта из тайлов полностью набрана:
все бы хорошо но масты и красные дороги смотрятся стремно
нельзя их больше пожелтить?
может дороги будут смотрется лучше вообще желтым?

DragonsLord
04.05.2021, 01:00
Пробовал, - жёлтое редкостное г*внище. Красные зашибись.
На самом деле и тайловая карта и сборка карты будут ещё сто раз переделываться по ходу пьесы.
Сейчас у меня пока цель максимально быстро сделать первую сборку.


Все очень просто, моя 107к т твоя 233. Цена этого ускорения 160 байт
Не спорю, код великолепен, но опоясывающие циклы я снова выкину из подпрограммы наружу :tongue:
Выводить змейкой я сам хотел, но чёт в мозгу щёлкнуло, мол регистровыми парами работаю, значит не получится. И не стал.
И напоминаю, мы не байты бережём, а такты. Времянки превыше всего. Это rts, тут особо не забалуешь.

krt17
04.05.2021, 01:18
я снова выкину из подпрограммы наружу
Еще раз, это 160 байт оно выполняет вполне определенную задачу, выбросить весь экран быстро. Если тебе надо печатать отдельно анимации или фон восстанавливать, делаешь отдельную процедуру, другая задача, другая оптимизация. Тут развороты небольшие, а цена в тактах велика.

DragonsLord
04.05.2021, 03:22
Еще раз, это 160 байт оно выполняет вполне определенную задачу, выбросить весь экран быстро. Если тебе надо печатать отдельно анимации или фон восстанавливать, делаешь отдельную процедуру, другая задача, другая оптимизация. Тут развороты небольшие, а цена в тактах велика.
Как раз весь экран выбрасывается только 1 раз в самом начале. На скорость вааще пофиг. Основная - это подпрограмма вывода одиночного тайла. Она юзается отовсюду. Ты же не думаешь, что скроллер карты сделан перерисовкой всего поля? :biggrin:

Я знаю, знаю, не хочется иметь лишние call/ret во время зависимых процедурах, но тот факт, что ускоряя внутреннее ядро я ничего не делал с внешним предпросчётам говорит о том, что он не важен :tongue: Что-нибудь типа совсем очевидных вещей, как заменить MUL_8 на изи код "сложением" при мерности карты в 64 и подобное. Ну, ты понял.

Также не будет никакой перерисовки поля и при выводе юнитов. Только части, которые действительно необходимо перерендерить. ИЗИ!

DragonsLord
04.05.2021, 05:58
попробуй скрипт.
я писал вырезалку.
Мы не ищем лёгких путей. :biggrin:
Накодил конвертер прям на спеке. Сконвертил карту. Всё удалось. Карта уровня уже в проекте!
Осталось сварганить анимацию водички и можно выкладывать первый альфа билд в снапшоте для честного народа на обозрение...

https://b.radikal.ru/b42/2105/f5/5ceb4801eab4.png

На Unreal, конечно, палитра жёстко поганая. Миксер мне в глаза.
На Spin такого непотребства нет. Там всё красиво.

https://a.radikal.ru/a07/2105/19/3d3e3ab46730.png

как в Анриле палитру сменить на нормальную?

drbars
04.05.2021, 07:06
как в Анриле палитру сменить на нормальную?
Video --> Palette --> выбрать pulsar.

По-умолчанию там палитра alone.

DragonsLord
04.05.2021, 20:25
Предлагается вашему вниманию первая рабочая демка

WARCRAFT - Orcs & Humans
version 0.01 alpha
http://dragons-world.ru/ZX_Spectrum/WarCraft_0_01_alpha.zip

https://d.radikal.ru/d31/2105/a1/8d1caae36ac1.png

Решил, что анимации воды в Варике не будет. Нет смысла значительно вытормаживать RTS на никому не нужном эффекте, которого во время игры и не замечаешь. К тому же, это сильно бы повлияло на нестабильность/разницу fps.

P.S.: На сечение картинки лучом обращать внимание не нужно, ибо на экране показан теневой буфер, а не результируючий чистовой экран. По той же причине мигание стрелки это нормально. Её на теневом экране вообще быть не должно.

jerri
04.05.2021, 22:03
DragonsLord, туман войны где?

DragonsLord
04.05.2021, 22:13
Давайте уточним, что такое "туман войны". Например, в "Чёрном Вороне" тумана войны нет. Вообще.

Есть два способа зачернения невидимой области:
1. неисследованная карта
2. туман войны, т.е. исследованная часть снова покрывается туманом, если там нет вижена (юнита с глазами или ещё какого способа видеть).

Вот тот второй туман войны я в Варике не признаю, и играю каждый день в него БЕЗ тумана. Туман реализован в "Шакалах", - там туман войны есть реально.
В моём ZX Варике тумана войны не будет.

Если ты про зачернение неисследованной карты, то будет позже, когда появятся юниты.

Lethargeek
04.05.2021, 22:27
на экране показан теневой буфер, а не результируючий чистовой экран
в связи с чем нет уверенности в 25fps с чистовым экраном

- - - Добавлено - - -

на дорогах плохо смотрится бригхт

DragonsLord
04.05.2021, 22:30
В связи с чем есть полная уверенность в отсутсвии 25fps с чистовым экраном :biggrin:
Сейчас грубо:
- 1 фрэйм занимает скролл
- 1 фрэйм занимает тайлование
итого 50/2=25fps

Добавится грубо:
- 1 фрэйм юниты
- 1 фрэйм переброска на чистовой
итого 50/4=12.5fps

И ходит молва, что на юнитов не факт, что 1 фрэйм.
Но всё равно "Чёрный Ворон" будет утёрт в сcанину.


на дорогах плохо смотрится бригхт
Смени палитру на pulsar.

Lethargeek
04.05.2021, 22:56
Смени палитру на pulsar.
а я твой снап смотрел сейчас не в анрыле (там всё еще хуже даже с пульсаром)

- - - Добавлено - - -

бригхт слишком выделяется, отвлекает, не должна дорога быть ярче юнитов

Bedazzle
05.05.2021, 00:12
Предлагается вашему вниманию первая рабочая демка



Курсор влево-вправо при нажатии клавиш перемещается дикими скачками, в Спекуляторе дальше не получилось прорваться.
https://i.imgur.com/WPyqyHb.png

В спекему после нажатий каких-то клавиш, что-то отрисовалось, курсор бешено скачет туда-сюда, через некоторое время сброс.
https://i.imgur.com/8mupM4D.png

https://i.imgur.com/bD316PG.png

В фусе клаву не трогаю, курсор дрожит на пару пикселей туда-сюда.
https://i.imgur.com/UpMml1v.png

Самое мягкое движение курсора получилось в эмузвине.
https://i.imgur.com/5iEZe9o.png

DragonsLord
05.05.2021, 00:34
Хм...Благо у меня есть в запасниках EnuZWin. Проверил. Всё отлично работает. Так что ваш отчёт отклоняется, как недостоверный :tongue:
Скачайте файл нормально, без бэдов.

https://a.radikal.ru/a10/2105/f3/6aec66753fcb.png

https://c.radikal.ru/c04/2105/76/6a7b3da0aa54.png

LW
05.05.2021, 08:23
бригхт слишком выделяется, отвлекает
поддерживаю

OMu4
05.05.2021, 09:23
Не проверял другие, но за Spectaculator покажу так:
75361

Может быть битый снэп? Уж больно похожие ошибки в разных эмуляторах... :v2_dizzy_roll:

DragonsLord
05.05.2021, 09:35
поддерживаю
Я уже весь графоний перерисовал :biggrin:

DragonsLord
05.05.2021, 19:41
https://c.radikal.ru/c30/2105/5e/ba061feace87.png

DragonsLord
06.05.2021, 00:30
Готово, обновлённая карта и обновлённая тайловая сборка в проекте:

https://c.radikal.ru/c39/2105/be/a0ad5e9e76cc.png

- убрана яркость с дорожек
- пересобраны по новому лес и шахты
- спрятаны и замаскированы все клэшинги по контуру строений
- отрисован новый замок Альянсу.

DragonsLord
06.05.2021, 20:20
Нашёл в Анриле мегабаг. Если отписывать снапшот в режиме device zxspectrum48, то можно юзать память только до 65319. Верхние 217 байт чем то портятся. В режиме device zxspectrum128 такой гавнины нет.

goodboy
06.05.2021, 20:56
Нашёл в Анриле мегабаг. Если отписывать снапшот в режиме device zxspectrum48
ты asm с эмулем не попутал ?

DragonsLord
06.05.2021, 23:52
Или асм.

- - - Добавлено - - -

Ёёёёшкин кот, фиг бы догадался до такого маразма. Ща опрашивал клаву, оказца в Анриле шифты на PC-клаве не равнозначны. Левый это CAPS SHIFT, правый это SYMBOL SHIFT. Gtrl на PC-клаве вааще не используется. Отсюда весь гиморой был, что мешало мне высекать всякие G-режимы и до сих пор гимороит по поводу невозможности нормально набирать капслоковские буквы в TR-DOS и прочие несуразицы.

Как переделать на Спиновский стандарт клаву в Анриле? Чтобы писюшный и левый и правый Shift были бы спековскими SS. А левый и правый писюшный Ctrl были бы спековскими CS? И все проблемы улетят, как пыль.

goodboy
06.05.2021, 23:54
Script kiddie - detected

DragonsLord
07.05.2021, 02:00
Чаго? :eek_std:
По старословянски для истинного старовера можно кириллицей?

Dart Alver
07.05.2021, 13:05
Ёёёёшкин кот, фиг бы догадался до такого маразма. Ща опрашивал клаву, оказца в Анриле шифты на PC-клаве не равнозначны.
Ёёёёшкин кот, а вы посты читаете в которых вам отвечают или чукча не читатель - чукча писатель ? :D


В Unreal по дефолту левый шифт CS а правый шифт SS.
Если поменять хочешь - в .ini в секции [ZX.KEYS.default]
найди строки
Код:

LSHIFT=CAP
RSHIFT=SYM

и замени на
Код:

SHIFT=CAP
CONTROL=SYM

Ну или в секции [INPUT] поменяй KeybLayout на более подходящую.
А вообще там (в .ini файле) есть несколько наборов раскладок - подставляй ту что надо и не парься.

scl^mc
07.05.2021, 16:56
Предлагается вашему вниманию первая рабочая демка

WARCRAFT - Orcs & Humans
version 0.01 alpha
http://dragons-world.ru/ZX_Spectrum/WarCraft_0_01_alpha.sna

https://d.radikal.ru/d31/2105/a1/8d1caae36ac1.png

Решил, что анимации воды в Варике не будет. Нет смысла значительно вытормаживать RTS на никому не нужном эффекте, которого во время игры и не замечаешь. К тому же, это сильно бы повлияло на нестабильность/разницу fps.

P.S.: На сечение картинки лучом обращать внимание не нужно, ибо на экране показан теневой буфер, а не результируючий чистовой экран. По той же причине мигание стрелки это нормально. Её на теневом экране вообще быть не должно.
unreal speccy portable крашится через несколько секунд после открытия снэпшота, дальше вступительного текста не идёт.

DragonsLord
07.05.2021, 18:15
Всё дальнейшие снапшоты будут предоставляться в режиме 128к. Возможно, проблема уйдёт сама собой. Там единственно известный глюк - это проставление 7 страницы в верхний слой по дефолту вместо 0. Но это можно обойти правильным кодом.

Кстати, краш по SS я нашёл и пофиксил. Какой-то атавизм кода был в графической библиотеке, который делал непонятно что и непонятно для чего. Теперь всё стабильно, можно плясать по всей клаве без боязни зависона.

Сижу прикручиваю реализацию скроллинга карты через курсорные клавиши, как попросил Алоний. Причём одновременно с управлением мышью и клавой и безконфликтно.

- - - Добавлено - - -


А вообще там (в .ini файле) есть несколько наборов раскладок - подставляй ту что надо и не парься
Наборы то есть, места куда подставлять - отсутствует.

Решил проблему так. В дефолтной раскладке поменял это

LSHIFT=CAP
RSHIFT=SYM

на это

SHIFT=CAP
CONTROL=SYM

- - - Добавлено - - -


дальше вступительного текста не идёт
Опишите ваше мнение от увиденного. Как вам мой новый шрифт, который я специально для Варкрафта разработал?
Шрифт Шрёдингера, - он как бэ 4 пиксельный, но в то же время и 5 пиксельный тоже :biggrin: Я такую фичу у Некста в заставке высмотрел и реализовал. Результат: как бэ шрифт Медноноговский из Ворона, но с большем вмещением информации в строке.

RU раскладку всю по новому сделал, адаптированной к PC клаве + неконфликтность с системными кнопками и символами асм'а. Ещё там есть графические токены, псевдографику рисовать.

Dart Alver
07.05.2021, 19:54
Наборы то есть, места куда подставлять - отсутствует.


Ну или в секции [INPUT] поменяй KeybLayout на более подходящую.

Пример:

[INPUT]
; default/bk08/quorum
ZXKeyMap=default
; you can define own layout, naming section in this INI file [ZX.KEYS.myname]
; create layouts for xas/storm/zxasm/alasm/zxword/sts/etc yourself, i'm bored
KeybLayout=ACEdit
KeybPCMode=0 ; when enabled, using pc defaults, ex: SHIFT+7 => &

- - - Добавлено - - -


Как вам мой новый шрифт, который я специально для Варкрафта разработал?
Шрифт Шрёдингера, - он как бэ 4 пиксельный, но в то же время и 5 пиксельный тоже Я такую фичу у Некста в заставке высмотрел и реализовал. Результат: как бэ шрифт Медноноговский из Ворона, но с большем вмещением информации в строке.
В смысле как бы 4 и как бы 5 ? Обычный 5-ти пиксельный формат по ширине, такой формат в BGE используется. Кстати вот вытащил шрифты из старых скинов BGE в формате скринов.

https://pic.maxiol.com/thumbs2/1620405631.3556999716.fonts.png (https://pic.maxiol.com/?v=1620405631.3556999716.fonts.png&dp=2)

По фонту: прописное русское т лучше заменить печатным не так сливаться будет, ю и ы может попробовать сплющить, хотя тут х.з. А так вполне читаемо ))

DragonsLord
08.05.2021, 07:21
Закончил писать скроллер карты с клавиш, мышки и курсорных кнопок со стрелками одновременно и безконфликтно.
Закончил код, позволяющй менять режимы скроллинга с клавиатуры на мышь и обратно.

DragonsLord
08.05.2021, 23:42
Дописал системное меню настроек:

Позволяет выбрать метод скроллинга:
- предназначен для игры с клавиатуры, при достижении указателем курсора мыши границы экрана требует продолжать нажимать кнопки дальше для скроллирвания,
- предназначен для игры мышкой, при достижении указателем курсора мыши границы экрана начинает скроллировать карту автоматически.

Позволяет выбрать прямой или инверсный опрос кнопок мыши: левая/правая или правая/левая. Напоминаю, в Варкрафте двухкнопочное управление с мыши. Как известно, существует две реализации железного обеспечения мыши. Симуляторы также используют разные версии опроса порта. Например в Unreal одно, а в Spin инверсное.

Позволяет выбрать скорость передвижения курсора мыши по экрану. Симуляторы также по разному считывают данные из порта. В Unreal мышка ездит в два раза быстрее, чем в Spin.

DragonsLord
09.05.2021, 04:36
Кстати, со всеми этими опросами из портов выяснил, что Спин не корректно справляется с чтением из буферизированной PC клавиатуры. Не правильно чекает событие "кнопка отпущена". В связи с чем затыкается на чтении при сложных манипуляциях с курсорными кнопками. Анрил читает всё корректно, как настоящий железный Спекки. И это я уже исправить кодом не смогу. Это проблема на внешней стороне самого Спина.

scl^mc
09.05.2021, 09:44
запустил снап, и сразу вопрос: почему скролл карты начинается только при достижении курсором края экрана, а не при совпадении двух условий: край экрана + кнопка движения в соответствующем направлении?

DragonsLord
09.05.2021, 10:45
Я описал уже дважды.

goodboy
09.05.2021, 11:21
Симуляторы также по разному считывают данные из порта. В Unreal мышка ездит в два раза быстрее, чем в Spin.
"MouseScale=0 ; logarithmic scale: ZX_mouse=PC_mouse*2^(Scale), valid: [-3;3]"

DragonsLord
10.05.2021, 02:47
https://d.radikal.ru/d05/2105/96/ee711a9b8756.png

Плюс к ускорению кемстон маус курсора, написал и х2 speed ускорение клавиатурной мышки. Чтобы юзер себе ни в чём не отказывал. Фулл комплект. :cool_std:

В принципе, ща небольшой рефакторинг сделаю и можно приступать к началу экспериментов со спрайтованием юнитов с точностью до пикселя.

DragonsLord
11.05.2021, 07:29
Оттестировал вывод по таблицам. Тестил на спрайте 2х2 знакоместа с маской.

Скорость отрисовки 1 байта с его маской = 232t.
Весь спрайт выкидывается на экран за 7421t прямой, 7463t зеркальный.

Не знаю пока, много это или мало. Если память не изменяет у Алония после кидания стэком было около 280t.
Плюсы метода:
- он есть и работает :biggrin:
- есть клиппинг по правому и нижнему краю (любое мануальное значение),
- есть миррор на лету,
- всегда константное время вывода.

Минусы метода:
- так как рисуется сверху-вниз, появляется проблема отрисовки спрайта выходящего за верхний предел экрана, его тупо невозможно нарисовать, ибо координата Y вывода начинается с 0 (у Алония в Аллодах было рисование, начиная с ног персонажа и там нет этого трабла),
- нехилые таблицы, требующие размещения по красивому адресу. Учитывая вывод OR/XOR имеем 4096 таблицу прямого вывода + 4096 таблицу миррор вывода. Это КАПЕЦ КАК ПЛОХО, ибо нужно иметь эти таблицы в нижней памяти, и получается на программу условно ноль места.

По поводу необходимости функции миррора: прикинул, "отражённой" основной графики будет более 12000. Отсюда, заменить их на 4096 видится целесообразным.

- - - Добавлено - - -

Не в курсе, у Медноногова какой способ вывода? По таблицам или сдвигом в регистрах? Или ветвлением на подпроцедуры?

LW
11.05.2021, 08:11
MACRO OnPage nPage
ld a,nPage
call OpenRamPage
ENDM

jerri
11.05.2021, 09:47
Не в курсе, у Медноногова какой способ вывода? По таблицам или сдвигом в регистрах? Или ветвлением на подпроцедуры?

сдвигом в регистрах и ветвлением на подпроцедуры
16 вариантов отрисовки спрайта смотри WLIB2.A80

DragonsLord
11.05.2021, 11:57
Значит таблицами Медного можно обогнать раза в два.

- - - Добавлено - - -

Первый спрайт выведен процедурой с точностью до пикселя:

https://b.radikal.ru/b02/2105/87/713a3c5e7e08.png

Чуть не опух подбирать как же должны выглядеть маска и спрайт... Но всё же осилил.

jerri
11.05.2021, 11:59
Значит таблицами Медного можно обогнать раза в два.

тебе его не обогнать. Он уже выпустил игру в 1997 году.

DragonsLord
11.05.2021, 14:00
Медный будет опрокинут с пьедестала и точка :cool_std:

Ввёл в меню пунктик, позволяющий мануально отрубить искусственно введённую паузу в анимацию юнитов, что позволит посмотреть работу программы на максимальной скорости:

https://b.radikal.ru/b19/2105/25/8bf6f03fc22d.png

- - - Добавлено - - -

P,S,: Конкретно это меню на русском капец как не смотрится. Пробовал. Посему, инглиш.

jerri
11.05.2021, 17:11
Медный будет опрокинут с пьедестала и точка :cool_std:

Пока ты все рисуешь вот так.
https://zx-pk.ru/attachment.php?attachmentid=75391&d=1620742203

Медноногова тебе не переплюнуть.


75391

DragonsLord
11.05.2021, 21:45
Не "я рисую", это автоматическая функция графической библиотеки. Когда лень делать кнопки и надо побыстром собрать рабочий код - самое оно.
Медный был утёрт ещё на этапе тайлов. У меня цветные, что ему было недостижимо сделать. Он просто не смог. Сдулся. Ниасилил. Не потянул...
:v2_dizzy_punk:

jerri
11.05.2021, 21:52
Не "я рисую", это автоматическая функция графической библиотеки. Когда лень делать кнопки и надо побыстром собрать рабочий код - самое оно.

ты атрибутами красишь - некрасиво.
а надо пикселя инвертить.

вот так
https://zx-pk.ru/attachment.php?attachmentid=75392&d=1620759058


75392

DragonsLord
11.05.2021, 22:25
Тебе заняться нечем? :biggrin:

https://b.radikal.ru/b33/2105/68/9c565a438032.png

Эта кнопка вообще не имеет никакого смысла, потому что все изменения вступаю в силу мгновенно "по горячему", как только ты их переткнул в меню.

goodboy
11.05.2021, 23:18
надо пикселя инвертить
сразу вспомнилась игра (где из-за нехватки памяти) #FF`ы для полоски брались из ROM,
а на 128ых моделях там был код
https://c.radikal.ru/c37/2105/ca/4f81f8d8e4c9.png (https://radikal.ru)https://c.radikal.ru/c41/2105/30/ae0bd399c878.png (https://radikal.ru)

DragonsLord
11.05.2021, 23:39
Ооооо!!! Божественная "Королевство Эйфория"!!!....
Каждый день порываюсь написать современный ремейк :biggrin:

jerri
12.05.2021, 05:42
Тебе заняться нечем? [emoji3]
Это ты на пьедестал хочешь.
Хочешь - соответствуй.



https://b.radikal.ru/b33/2105/68/9c565a438032.png

Эта кнопка вообще не имеет никакого смысла, потому что все изменения вступаю в силу мгновенно "по горячему", как только ты их переткнул в меню.

Я говорю не об этой кнопке в частности.
А о методе выделения в целом.
Инвертированные атрибуты на фоне мышиной стрелочки смотрятся как голимое ламерство.

Ламерам на пьедесталы пути нет.

jerri
12.05.2021, 05:48
Ооооо!!! Божественная "Королевство Эйфория"!!!....
Каждый день порываюсь написать современный ремейк [emoji3]Разуй глаза
Это Defenders of the crown.
https://zxart.ee/rus/soft/game/strategy/war/defender-of-the-crown/qid:309274/

hood
12.05.2021, 09:17
Dorogije druzja,

kogda ja mogu zdat, sdelajte toze versiju po angijskomu. Bolsoje spacibo, i blagodarju mnogo stestija s delom. BRAVO!!


Hood

Shadow Maker
12.05.2021, 11:07
сразу вспомнилась игра (где из-за нехватки памяти) #FF`ы для полоски брались из ROM,
а на 128ых моделях там был код
https://c.radikal.ru/c37/2105/ca/4f81f8d8e4c9.png (https://radikal.ru)https://c.radikal.ru/c41/2105/30/ae0bd399c878.png (https://radikal.ru)
david это переписал кстати, чтобы нормально работало без пзу

DragonsLord
12.05.2021, 11:11
Инвертированные атрибуты на фоне мышиной стрелочки смотрятся как голимое ламерство.

Сделал я нормально. Посмотрел. Поблeвал. Вернул назад. Это не ламерство, это СТИЛЬ. Ностальгический ретро-стиль. И он мне аxpененно нравится. Прям до писка. Это дань уважения ретро Спеку и атрибутным методам подсветки, ибо только на спеке такое возможно. Остальные платформы наcacывают.

https://zxpress.ru/chapters_images/kakasm/mic1.gif

На самом деле, в конечном продукте не будет никаких выделений атрибутами. Это системный мод для отладки в моей графической библиотеке.


Разуй глаза
Это Defenders of the crown.
А то я не знаю. Гыгы. Все эти игры от "Кооролевства Эйфория" начало берут. И кстати она в моём исполнении где-то на старых дисках есть. А конкретно в эту "Defenders of the crown" я зависал сутками. Супер игрушка.


sdelajte toze versiju po angijskomu. Bolsoje spacibo, i blagodarju mnogo stestija s delom. BRAVO!!
Концептуально я не против, но я не знаю английского. Да и наврядли в Варике будет лишнее место. Думаю, там скорее будет ноль памяти свободной :tongue:

Только что глубочайший рефакторинг доделал, по сути собрал всё с нуля по другому. Сделал на манер Винды ПиСюшной. Типа полностью развязал прерывания и тело основного цикла программы. Создал обработчики ENTER_FRAME, MOUSE_DOWN и подобные штучки, аля проект на PC. Генерацию событий. Обработчики событий. Всё по взрослому. Короче, я к чему это: всё упихал в 48к, но там ща практически ноль памяти. Ща буду раздвигать проект на 128к. Выбранная метода вывода увеличит объём хранимой графики на 20% относительно изначально планируемых. Так что там реально всё под завязочку забито.

Сейчас так:


> DOWN SLOT
> ---------- 24600 .. 31610 size 7010
> ---------- 31610 .. 32768 free 1158
> MIDDLE SLOT
> ---------- 32768 .. 37591 size 4823
> ---------- 37591 .. 37632 free 41
> ---------- таблицы плотно до 49152
> TOP SLOT
> ---------- 49152 .. 65516 size 16364
> ---------- 65516 .. 65536 free 20


Спрайтование с точностью до пикселя уже в проете. Евойные таблицы длиной 8192 тоже. Миррор присутствует и успешно работает.

CodeMaster
12.05.2021, 12:29
Ооооо!!! Божественная "Королевство Эйфория"!!!....
Каждый день порываюсь написать современный ремейк

nzeemin восстанавливает паскалевский исходник (https://zx-pk.ru/threads/29331-igra-quot-zona-quot-na-dvk.html?p=1116788&viewfull=1#post1116788). Но это уже порт на PDP. Если это, вообще, та игра.

DragonsLord
12.05.2021, 13:25
Закончил раздвижку на 128к. Написал первые в жизни макросы :v2_dizzy_punk:
Сейчас по свободной памяти так:



> DOWN SLOT 5
> ---------- 24600 .. 25677 size 1077
> ---------- 25677 .. 32768 free 7091
> MIDDLE SLOT 2
> ---------- 32768 .. 37591 size 4823
> ---------- 37591 .. 37632 free 41
> ---------- таблицы плотно до 49152
> TOP SLOT 0
> ---------- 49152 .. 65516 size 16364
> ---------- 65516 .. 65536 free 20
> TOP SLOT 7
> ---------- в 49152 второй экран 6912
> ---------- 56064 .. 62681 size 6617
> ---------- 62681 .. 65536 free 2855


Поясняю, если не понятно: В 7091 байт должен уложить весь код игрушки. Трассеры, боёвку, анимационный вывод.
2855 байт - запас на 7 странице для некритических или не частых процедур.

- - - Добавлено - - -


восстанавливает паскалевский исходник. Но это уже порт на PDP. Если это, вообще, та игра.
Нафиг её 30 дней восстанавливать, если новую с нуля можно за 2 вечера написать полностью. Лол...

Sandro
12.05.2021, 21:08
nzeemin восстанавливает паскалевский исходник (https://zx-pk.ru/threads/29331-igra-quot-zona-quot-na-dvk.html?p=1116788&viewfull=1#post1116788). Но это уже порт на PDP. Если это, вообще, та игра.

1) Это НЕ та игра.
2) Это НЕ порт, а самостоятельная разработка нашего соотечественника.
3) И вообще, она текстовая.

DragonsLord
13.05.2021, 00:30
Эйфория как раз текстовая.
Столько то коров пустить на мясо, столько то зерна засеять, столько то заплатить армии золотишка...
Прикрутить графоний к Эйфории не сможет разве ленивый.

DragonsLord
13.05.2021, 03:27
Джерри отплясывает. Сегодня явно его день :biggrin:

https://b.radikal.ru/b29/2105/33/c03b35c3518d.png

jerri
13.05.2021, 05:46
Сегодня явно его день [emoji3]


Мой день наступит когда ты научишься понимать прочитанное. [emoji19]

DragonsLord
13.05.2021, 08:46
Вот так выглядит логика подготовки данных для вывода спрайта с маской по методике OR/XOR:

https://b.radikal.ru/b24/2105/dd/f733c6cbfd80.png

Вот к таким данным приходится приводить нормальную изначально графику:

https://d.radikal.ru/d07/2105/10/36b27c0c6799.png

Спасибо, что не "ковёр" :eek_std:

jerri
13.05.2021, 09:17
Спасибо, что не "ковёр" :eek_std:

Если тебе не нравится формат то просто поменяй.

DragonsLord
13.05.2021, 09:46
Скорость вывода моё мнение не спрашивает. Оно будет так, хочется мне этого, или нет...
Медный должен пасть к подножию пьедестала. Полюбасу! Мы за ценой не постоим! :cool_std:

jerri
13.05.2021, 11:30
Скорость вывода моё мнение не спрашивает. Оно будет так, хочется мне этого, или нет...


Видишь, ты постепенно идешь к уже известным решениям.
Что мешало слушать опытных людей в самом начале?
Спрайты нарезаешь чем?

DragonsLord
13.05.2021, 17:58
SpriteMaster5.11


Что мешало слушать опытных людей в самом начале?
"Опытные люди" все, как один, сказали одно и то же - "это невозможно, это не сделать".
Нафиг мне такой "опыт" не нужОн :biggrin:

jerri
13.05.2021, 18:25
SpriteMaster5.11

Спрайтмастер не лучшее решение.

Возьми нарезалку из coreengine
Она а папке gfx лежит.
Даже с исходником



"Опытные люди" все, как один, сказали одно и то же - "это невозможно, это не сделать".
Нафиг мне такой "опыт" не нужОн [emoji3]

Опытные люди говорили тебе:

Спрайты без масок не смотрятся.

Автомаска для спрайта медленно.

Краснозеленые пятна на дорожках смотрятся Хренова.

100500 спрайтов в память Спектрума неполезут.

Но ты слышишь только
"это невозможно, это не сделать"
Здесь регулярно выкладывают невозможное.

DragonsLord
13.05.2021, 20:53
100500 спрайтов в память Спектрума не полезут.
Но ты слышишь только "это невозможно"
Я думаю, тебе стоит посмотреть в словаре значение слова "синонимы". :cool_std:

Лично у меня "полезет" всё, что я запланировал.

krt17
13.05.2021, 20:59
Говорили что за неделю никакой дурак не сделает, так и вышло. И не полезла пока только анимация воды, все остальное впереди.

DragonsLord
13.05.2021, 21:02
За неделю на изичах.

На сколько позволяют измеряющие возможности, у меня байт с маской усреднённо выводятся за 210t. Это со всем высокоуровневым обвесом логики. У Алония на сверхскоростных Аллодах с кидалкой через стэк было 320t примерно. Это означает, что у Медного с его сдвигами в регистрах от моих значений вывод тормознее минимум в два раза, а то и в три.

DragonsLord
14.05.2021, 04:23
Возьми нарезалку из coreengine
Она а папке gfx лежит.

Она лепит левый байт перед каждым нужным:

db #FF,#1F,#FF,#00,#FF,#FA,#FF,#0C
...

здесь каждый #FF не нужен, т.к .его нет в исходнике.

jerri
14.05.2021, 09:11
Она лепит левый байт перед каждым нужным:

db #FF,#1F,#FF,#00,#FF,#FA,#FF,#0C
...

здесь каждый #FF не нужен, т.к .его нет в исходнике.

здесь нет левых байтов. он тебе спрайт в png раскатывает в формат маска+спрайт

75401

красный - маскируемая часть
черный - 0
белый - 1

если надо добавит высоту и ширину спрайта
если надо обрежет по ширине
если надо много спрайтов разного размера добавляй через разделитель.

75402

Dexus
14.05.2021, 10:09
Мне одному эти "дороги" видятся как красные реки лавы?
Вообще красно-зеленое нагромождение пикселей на реале выглядит не очень хорошо.

DragonsLord
14.05.2021, 11:34
Мне дороги напоминают.... о том, что это максимально близкий конверт оригинала в палитру Спека.

:v2_dizzy_punk:

* * *

Программа научена по хедерам героев отрисовывать:

https://c.radikal.ru/c17/2105/d7/6a571e393a0a.png

- пересчитывает координат x,y юнитов "на карте" в x,y на экране с точностью до пикселя
--- автоматом клиппирует, если не в видимой области
- понимает в каком режиме находится юнит, т.е. что он сейчас делает
- понимает куда конкретно моськой смотрит юнит
--- определяет автоматом прямой спрайт нужен или отрисовывать по mirror

чуть позже

- будет сечь, какой конкретно кадр анимации сейчас надо брать

Изи, посоны, ИЗИ!!!!

- - - Добавлено - - -


здесь нет левых байтов. он тебе спрайт в png раскатывает в формат маска+спрайт

Хорошо, попробую орочьего пеона сконвертить твоим спрайтонарезателем.

vlad-kras
14.05.2021, 17:05
Мне одному эти "дороги" видятся как красные реки лавы?
Вообще красно-зеленое нагромождение пикселей на реале выглядит не очень хорошо.

А можно на эмуляторе Unreal самому сделать палитру цветов, ну не из предустановленных? Хочу сам задавать какой RGB цвет соответствует какому из палитры спектрума, а в эмуле в ini непонятный способ создания палитр - похоже что не сами цвета задают, а просто меняют яркость.

jerri
14.05.2021, 17:49
А можно на эмуляторе Unreal самому сделать палитру цветов, ну не из предустановленных? Хочу сам задавать какой RGB цвет соответствует какому из палитры спектрума, а в эмуле в ini непонятный способ создания палитр - похоже что не сами цвета задают, а просто меняют яркость.

можно.
unreal.ini смотри там

vlad-kras
14.05.2021, 19:24
Так смотрел уже, если брать стандартные - это не RGB
Mars=00,80,C0,E0,FF,C8:100,00,00;40,C0,00;00,40,C0

А если дополнительные, то вроде какие-то значения на RGB похожие, но у меня просто черный экран на этих стандартных пресетах
atari.fl_shark_red_palette=06:EE666600
atari.test=70:00132177,0F:001199FF,34:33119944

DragonsLord
15.05.2021, 04:35
Ставь pulsar и не парься. Это максимально близкая к оригиналу палитра.

DragonsLord
15.05.2021, 12:33
Вот так орочий пеон сконвертился твоей нарезалкой-спрайтовалкой:

https://b.radikal.ru/b19/2105/32/d69388723dd2.png

- - - Добавлено - - -

Выяснил причину. хз почему, но конвертер хочет проинвертированную графику.

https://c.radikal.ru/c29/2105/53/761dfffc66c4.png

1 вариант не сосёт. 2 вариант тру стайл на изичах.

Переконвертил с инверсией исходника:

https://c.radikal.ru/c43/2105/16/ad9a6a8562bc.png

DragonsLord
15.05.2021, 19:28
Аьфа версия рефрэшера фона под статическими юнитами написана:

https://b.radikal.ru/b24/2105/ce/9204d7545e8a.png

Причём, это делается не так: "выводим юнита, давайте выведем под него подложку".
А так:
- обходим всех юнитов,
- пишем в таблицу тайлового рефрешера экрана, размером с видимое окно карты - единицу, если нужен рефреш, и ноль, если не нужен,
- пробегаем двойной цикл, отрисовываем рефрешный фон по подготовленной таблице,
- выводим юнитов, если в видимой области.

Зачем? Чтобы не было повторных выводов и затираний соседей, когда юниты трутся близко друг от друга, ибо они могут ходить по диагонали и требовать на рефреш более 2х тайлов.

DragonsLord
15.05.2021, 22:38
Всё, дописал аниматор, запустил наконец с шевелящимися юнитами, посмотрел скорость, которую удалось достичь.
Три юнита выводятся в один фрэйм чисто, т.е. с частотой 50fps. Скорость шевеления ручками ножками при 8 фазной анимации можете себе представить.
Запустил шестерых за 2 фрэйма - красотища. Всё работает.
:v2_dizzy_punk:
Понятно, далее будут расширяться процедуры в сторону универсальности при добавлении новых юнитов и новых размеров спрайтов. То есть затормаживаться. Но пока запас времянки, вроде, есть. Ощущение, что написано на бейсике пока не появляется :biggrin:

DragonsLord
16.05.2021, 07:32
Для тех, кто не понял, как посчитать. Есть скорость вывода. Та самая, на которой юнит должен идти без тормозов. Отрисовка:
- 3 юнитов опережает эту скорость в 6 раз (50fps),
- 6 юнитов опережает в 3 раза (25fps),
- 9 юнитов опережает в 1,5 раза (16,6fps),
- 12 юнитов идут с нормальной скоростью без тормозов, как и должны (12,5fps).

Это всё касается плавности вывода и перемещения спрайтов. Но сама анимация визуально гораздо быстрее от этих значений. По оценочным тестам примерно около 70 юнитов одновременно на экране будут визуально двигаться с анимациями нормальной скорости.

Чтобы натягивать одно значение на другое и будет пункт "нормалайз анимэйшн" в меню, вводя искусственную задержку в анимацию юнитов.

DragonsLord
17.05.2021, 01:50
Процедура бэкРефрэшера значительно оптимизирована. Когда я говорю ЗНАЧИТЕЛЬНО, это означает, что было 3 юнита за прерывание. Сейчас на Скорпионе 4 юнита, на всех остальных типах компов 5 юнитов за прерывание. :eek_std:

25 юнитов одновременно с 10fps - нехило
:v2_dizzy_punk:

Фреймовый вывод:

https://a.radikal.ru/a00/2105/c6/0898265b02a5.png

Голубой - вывод мышки с подложкой
Жёлтый - кое какие просчёты в прерывании
Чёрный - формирование таблицы для рефрешера фона
Зелёный - тайловый рефрешер фона
Красный - вывод спрайтов с точностью до пикселя

Времянки показаны от компа Profi (практически идентичны фирменному 128k).

DragonsLord
18.05.2021, 23:53
Дописал 2 версию рефрэшера фона, который теперь интеллектуально сечёт юнитов в движении и обновляет фон по более сложным ветвлениям. Цвета на бордюре и растактовка от PROFI сохранены, как в прошлом посте.

https://c.radikal.ru/c39/2105/ac/b9bce8296aad.png

Кстати да, в вороне нет волнового алгоритма. Прям загадочно. Есть обход "по левой" или "по правой руке".

- - - Добавлено - - -

Юниты успешно побежали по карте!
До второй демки - рукой подать.
:v2_dizzy_punk:

https://a.radikal.ru/a07/2105/5a/b425cf946195.png

P.S.:Всё-таки можно печатать юнитов выше верхнего края экрана. Это круто. Проблема визуального выбега за верхний край окна снята.

Sandro
19.05.2021, 05:12
Кстати да, в вороне нет волнового алгоритма.


А его, насколько я помню, и в первом варкрафте не было. Поэтому посылать юнитов через всю карту не стоило, они постоянно застревали во всяких лесных углах.

В Dune II они вообще ехали по прямой к заданной точке и всё. Именно поэтому там и пустыня.



Прям загадочно. Есть обход "по левой" или "по правой руке".


Ну, если вспомнить, сколько памяти и процессора жрёт волна, то ничего странного. Кроме того, её надо уметь писать, там есть неочевидные грабли с выбором отптимального маршрута.



Юниты успешно побежали по карте!
До второй демки - рукой подать.


Поздравляю! Где-то 2% работы сделано.

PS: Про два процента -- я серьёзно.

Syntal
19.05.2021, 08:42
https://a.radikal.ru/a07/2105/5a/b425cf946195.png

P.S.:Всё-таки можно печатать юнитов выше верхнего края экрана. Это круто. Проблема визуального выбега за верхний край окна снята.
Если предполагается, что белая пустая область будет использоваться под всякие иконки действий, может лучше ее все-таки справа расположить?

Mor-Da
19.05.2021, 10:10
может лучше ее все-таки справа расположить?
А если человек левша? Как-то не толерантненько получается... LOL

DragonsLord
19.05.2021, 10:59
Справа неудобно. Панель будет, как в оригинале, слева.
Тыкать по игровому полю с удобством - в 10 раз важнее, чем тыкать по иконкам.
Тут будет полноценный расклик правой+левой кнопкой. Так что можно менюшки вообще не касаться.

Bedazzle
19.05.2021, 16:01
А если человек левша? Как-то не толерантненько получается... LOL

Подозреваю, что если собрать статистику, то правшей среди спектрумистов окажется больше, чем левшей.

Кроме этого, у европейцев визуальное восприятие идёт справа налево.

DragonsLord
19.05.2021, 19:45
Оригинальный Варик сделан слева-направо не просто так. Потому что так в сто раз удобнее, чем наоборот. Я юзер варика с 30 летним стажем (каждый день). Знаю, о чём говорю.

Biland
19.05.2021, 19:56
Приветствую!

Во вложении способ рисовки ландшафта змейкой. Там, конечно, ПЗУ подменена ОЗУ и полностью забита киданием графики через push, но когда ставишь 2000 тактов в эмуляторе, то видно, что быстро отрабатывает, скролл там тоже есть, графики нет. Кстати, видел когда-то на другом сайте, клоны с расширенной памятью, с пояснениями как страницами управлять и где можно ПЗУ заменять, а какой-то клон ещё мог туда любую страницу подключить. Найти её сейчас не смог, может осталась инфа эта (на этом сайте нашёл похожее, но немного не так информативна для понимания)?

DragonsLord, у меня к тебе несколько вопросов будет. Ты всё считаешь вывод графики, спрайты и fps. А почему ты не учитываешь алгоритмы, их скорость отработки, там будет совсем всё туго с математикой и скоростью, тем более в 7к всё уложить? Как понимаю, чем меньше кода, тем дольше результат высчитывается.

Ты хочешь уложиться в 128к. Для чего? Чтобы пользовались, те у кого реальное железо? А то, что там на разных версиях разная память медленная, что влияет на совместимость. Тогда получается код подгонять под разные фирменные zx надо будет?

С jerry вы, конечно, не даёте скучать здесь )). Они тебя не поняли с самого начала, ты тоже импульсивный (с изичами и посонами) )). Медноногова хочешь скинуть с "трона", хотя он отрабатывал теорию объектно-ориентированного программирования на zx. И как понимаю, он много чего выдернул для работы с экраном из существующих игр, сделав упор на алгоритмы. Ты же это сам пытаешь внести, но то что ты выбиваешь всё из сообщества силой, говорит о том, что они ни не хотят, а просто устали от стартапов, которые глохнут. А так да, библиотеки разные в одном месте и ещё с поддержкой - это было бы очень хорошо, хотя может и есть просто я не знаю. Это бы повысило скорость проектов, не тратя время на осмысление и изобретения велосипедов, за исключением частных случаев.

И, да, тропинки-дорожки реально какие-то не такие. Может лучше их сделать как в демке warcraft - жёлтыми, там они симпатичнее.

А так похвально твоё усердие. Молодец.

* - вложение работает на NEMO KAY memory logic.

vlad-kras
19.05.2021, 20:28
Ну, если вспомнить, сколько памяти и процессора жрёт волна, то ничего странного. Кроме того, её надо уметь писать, там есть неочевидные грабли с выбором отптимального маршрута.
Какие грабли ?

DragonsLord
19.05.2021, 21:06
Спасибо за напутствия, но с процедурами вы несколько припозднились. Ровно как сегодня я полностью закрываю этап низкоуровневого программирования и выпускаю 2 демку (слип уже видел бегающих юнитов). Далее идёт этап высокоуровневого ИИ.


Во вложении способ рисовки ландшафта змейкой
В проекте НЕТ никой отрисовки ландшафта, ни змейкой, ни ещё как. Вы не понимаете, что такое rts и какие это накладывает ограничения на применяемые алгоритмы вывода графики.


полностью забита киданием графики через push
Я все время-затратные процедуры писал в нескольких вариантах и сравнивал скорость. Кидалка через PUSH писалась в том числе, но показала значения хуже, чем ту, которую я применяю.


Ты хочешь уложиться в 128к. Для чего?
Это КАНОН. Для меня не существует никаких других спектрумов, кроме 128к+TR-DOS.


подгонять под разные фирменные zx надо будет?
Не надо будет ничего подгонять. Понятие "фирменный" растяжимое. У разных моделей разные банки памяти медленные. В rts на столько плотный код и данные, что невозможно ВСЁ разместить только в быстрой памяти. Следовательно, на фирменных будет тормозить. Хотя, естессно, всё самое времязатратное я стараюсь рассовывать по быстрым банкам.

Biland
19.05.2021, 22:19
В проекте НЕТ никой отрисовки ландшафта, ни змейкой, ни ещё как. Вы не понимаете, что такое rts и какие это накладывает ограничения на применяемые алгоритмы вывода графики.

Вот это интересно, что ограничения?



Я все время-затратные процедуры писал в нескольких вариантах и сравнивал скорость. Кидалка через PUSH писалась в том числе, но показала значения хуже, чем ту, которую я применяю.

Что есть быстрее этого, очень интересно (2 байта за 21 такт?):


LD BC,очередные два байта
PUSH BC

Способ затратный и не гибкий, но всё же...



... я полностью закрываю этап низкоуровневого программирования и выпускаю 2 демку ... Далее идёт этап высокоуровневого ИИ.

"высокоуровневого ИИ" - это что? Я понимаю, что Медноногов учился на это, в отличии от нас, НО! уйти "с низкоуровневого программирования " это значит уйти от ассемблера совсем или на бейсик перейти. Хотелось бы понять смысл сказанного, если можно.



Про ландшафт. В примере концепция есть. Сначала готовится ландшафт (змейкой) - это около 2-х прерываний, на весь экран. Потом этот ландшафт push методом кидается за одно прерывание в экран. Отсюда, если скролла нет, ландшафт не нарушается, то его генерировать не нужно лишний раз, только за прерывание кидается в экран. Потом накидываются спрайты и эффекты. После обсчёта алгоритмов, опять кидаем ландшафт за прерывание, спрайты и т.д. Это всё справедливо для полно-экранной картинки, разумеется.
Или есть способ раз нарисовать всё, а потом через буферы ландшафт под спрайтами запоминать-восстанавливать, так что-ли?

Dart Alver
19.05.2021, 23:02
Понятие "фирменный" растяжимое. У разных моделей разные банки памяти медленные. В rts на столько плотный код и данные, что невозможно ВСЁ разместить только в быстрой памяти. Следовательно, на фирменных будет тормозить.
Насколько я понял (поправьте если обшибаюсь) у всех 2-я банка ( это та что #8000-#BFFF ) быстрая ( и 0-я вроде тоже ). Значит вектор прерывания, если IM2 используется, придётся сюда класть, иначе на классике вечные тормоза и снег пойдёт )) А так с небольшими тормозами ещё жить можно.
Не ещё конечно можно извращаться меняя каждый раз вектор, но это просто лютый гемор будет.

DragonsLord
20.05.2021, 03:55
Уважаемые дамы и господа, представляю на ваш суд вторую версию игрового движка

WARCRAFT - Orcs & Humans
version 0.02 alpha
http://dragons-world.ru/ZX_Spectrum/WarCraft_0_02_alpha.zip

https://a.radikal.ru/a38/2105/90/ab073242bff9.png

Напоминаю, что вы видите черновой бэк-буфер, так что мерцание стрелки или спрайтов это нормально. На чистовом экране впоследствии таких негативных эффектов не будет. Также стоит заметить, что я специально не предпринимал никаких действий по маскировке спрайтов, выезжающих за пределы игрового поля, дабы идущие по стопам, могли чётко понимать, как работает система. Выезд спрайтов за пределы поля сделан специально с целью последующего автоклиппирования при переброске чернового экрана в чистовой.

Парочку юнитов с умыслом пустил бегать по дорожкам и мосту. Буду делать дорогу чёрно-жёлтой. Мост тоже.

В меню есть галочка "нормалайз анимэйшн" - снимает исскуственно введённую паузу в анимациях юнитов. Хотя, маленькую паузу я там всё равно оставил, чтобы они совсем не пропадали при определённых стечениях обстоятельств. Как видите, запас по скорости, перед этапом наращивания высокоуровневого ИИ, обеспечен. Что и следовало доказать. Это возможно!


------------------------------------------------------------------------------------------------------------
Донат для поддержки идей разработчика можно осуществлять на следующие кошельки:

Яндекс.Деньги (они же yoomoney): 41001318897076
WebMoney: WMID: 890037554880
R418046365227 - рубли
Z401891667965 - доллары

DragonsLord
20.05.2021, 12:25
Вот это интересно, что за ограничения?
Ограничения в доступном времени на исполнение. В вашем представлении нужно рефрэшить весь фон каждый кадр, по сути пересоздавать его с нуля. В моей же интерпретации - никогда ни при каких обстоятельствах не перерисовывается более 2 полосок тайлов из 12 присутствующих. Ни при скроллинге, ни при статическом выводе бегающих юнитов. Мораль сей басни такова: разница во времени вывода В ШЕСТЬ РАЗ.


Что есть быстрее этого, очень интересно (2 байта за 21 такт?):
Я не про развёрнутый цикл говорил. Для такой роскоши типа "LD BC,очередные два байта: PUSH BC" нет места. Я говорил про конструкцию типа "PUSH BC.DE.HL,IX,IY exx PUSH BC.DE,HL и потом POP в обратном порядке". Проблема в том, что такой код, конечно быстрее, но у него ограничение - зона скроллирования не больше 16 знакомест. Для варианта, когда у нас 24 знакоместа, приходится делать в два прохода, и это получается на 10% медленнее, чем тупо переброска по таблицам. Могу показать в виде кода, если есть интерес.


"высокоуровневого ИИ" - это что?
Назкоуровневыми процедурами в случае писания rts можно назвать процедуры:
- мышки
- оконный интерфейс
- вывод текста
- скроллинг
- печати 1 тайла с точностью до знакоместа
- печати 1 спрайта с точностью до пикселя
это базовые процедуры фундамента, вызываемые многократно за 1 кадр, и следовательно, нуждающиеся в максимальной оптимизации на скорость исполнения.

Процедуры среднего уровня, это всевозможные обвязки низкоуровневых процедур:
- посмотреть по таблице, какой тип юнита
- посмотреть какая фаза анимации сейчас
- определить, в какую сторону носом смотрит юнит
- определить тип действия, выполняемого юнитом
- рассчитать его позицию на экране из координат юнита на карте
- вывести спрайт
и вот таких интеллектуальных обвязок будет куча для всех типов низкоуровневых процедур.

Далее пишутся высокоуровневые процедуры, манипулирующие только хэдерами и обсчитываюшие ситуационные алгоритмы. Типа:
- по имеющимся координатам начала и конца пути проложить курс, обходя все препятстявия
- должен ли юнит реагировать на появление другого юнита
- атаковать ли, появившегося врага
и так далее...
Это высокоуровневый ИИ. Никакого отношения условные уровни процедур к языку программирования не имеют.


Или есть способ раз нарисовать всё, а потом через буферы ландшафт под спрайтами запоминать-восстанавливать, так что-ли?
На примере скроллинга карты:
- пишете 8 скроллеров для всех направлений в стиле "взять информацию и переложить на размерность 1 тайла в сторону"
- это сдвинет весь экран на 16 пикселей в любую из сторон, открыв одну полоску тайлов на месте, откуда сдвигали, или две полоски тайлов, если сдвигали наискосок
- допечатываете 1 полоску тайлов (12 штук) или две полоски (23 тайла) по ситуации.
анимацию обычно при скроллировании полностью останавливают. Можно, конечно, не останавливать, но появится неприятный эффект снижения чувствительности мыши и замедление скроллинга. Точнее даже не это неприятно, а то, что времянка скроллинга перестанет быть постоянной и станет переменной, в зависимости от загруженности экрана юнитами.

На примере печати спрайтов юнитов, перемещающихся по карте:
- есть таблица видимой области, т.е. 12х12=144 байта (можно и в битах, но не суть)
- перебираете всех юнитов, чекаете тех, кто сейчас в видимом окне, по их кординатам запоняете таблицу единичками. Это будут места, которые необходимо обновить
- вызываете процедуру рефрэшера фона, который по этой таблице отрисовывает только необходимые тайлы (среднестатистически это также в пределах 24 тайлов)
- далее по верху отрисовываете всех юнитов, кто находится в видимой области.
здесь отмечу, что процедура подготовки таблицы должна учитывать, что при нахождении спрайта не по целым координатам, нужно обновлять не один тайл а зону из нескольких, чтобы перекрыть задник спрайта гарантированно. Для спрайтов, отличающихся по размеру от тайлов - ситуация ещё сложнее.


2-я банка ( это та что #8000-#BFFF ) быстрая ( и 0-я вроде тоже ). Значит вектор прерывания, если IM2 используется, придётся сюда класть, иначе на классике вечные тормоза и снег пойдёт
У меня прерывание обслуживается полной таблицей в 257 байт и обработчик находится в конце средней банки, которая у всех моделей Спектрума быстрая. Могу показать в виде кода, если вам интересно. Вообще, всё, что касается процедур, требующих отсутствия тормозов, - они находятся в средней странице.

В условно медленных банках находятся:
- в нижней банке лежат таблицы сдвигов для процедуры спрайтов (8 килобайт)
- в верхних банках лежат сами спрайты юнитов (эти банки на некоторых официальных спеках медленные)
и вот от этого никак не уйти при таких объёмах информации, которые необходимы rts для функционирования.

jerri
20.05.2021, 20:13
DragonsLord, настрой нормально отдачу файлов.
чего он sna как txt отдает?

- - - Добавлено - - -

запрещать прерывания перед переключением страницы - необязательно.

DragonsLord
20.05.2021, 21:47
Проверил: sna отдаёт, как sna.
Настраивай свой комп.


запрещать прерывания перед переключением страницы - необязательно
Кстати, да. У меня же обработчик не вверху а в средней трети лежит.

Уже работаю над продолжением:

https://b.radikal.ru/b38/2105/d3/6373e23e2a65.png

Меня вот пока волнует вопрос перекидывания на чистовой экран. Пока не сложилось в голове. Ведь кидалка будет минимум 85000 тактов. Как сделать то, чтобы луч не сёк скрин на две половины со смещением? Есть мысли?
А делать:
ei
halt
call pause (20000t)
и выводить догоняя луч, как-то жалко просирать фрэйм в никуда...

Ещё эта мышка долбаная, хз, как красиво сделать, чтобы не мигнула. Кидалка ведь будет трогать стэк полюбасу, а это значит di, и мышка будет выключена всё время вывода...

jerri
20.05.2021, 22:05
Проверил: sna отдаёт, как sna.
Настраивай свой комп.

настраивать что?
по клику по твоей ссылке (http://dragons-world.ru/ZX_Spectrum/WarCraft_0_02_alpha.sna)- sna открывается как страница
75438

vtrd (https://vtrd.in/release.php?r=ddccc4ff68afcf73a6318acab312ba85) например открывает окно с предложением сохранить.
75439

- - - Добавлено - - -



Ещё эта мышка долбаная, хз, как красиво сделать, чтобы не мигнула. Кидалка ведь будет трогать стэк полюбасу, а это значит di, и мышка будет выключена всё время вывода...

попробуй переделать под два экрана.

DragonsLord
20.05.2021, 22:06
Видимо, упаковка в zip устранит эту проблему для всех систем. - ща запакую.


попробуй переделать под два экрана.
Всё под два экрана? Я заманаюсь потом интерфейс отслеживать.
эээ... не, это вообще не возможно, ибо экран в верхней банке, и дата спрайтов тоже в верхней банке. И спрайтовалка не подразумевает сие непотребство.

Отдельно саму мышку и там и там рисовать одновременно тоже нельзя, я думал про это. Потому что мышка7 будет потом елозиться по неподвижному скрину, где мышка5 уже будет впечатана намертво.

jerri
20.05.2021, 22:38
Отдельно саму мышку и там и там рисовать одновременно тоже нельзя, я думал про это. Потому что мышка7 будет потом елозиться по неподвижному скрину, где мышка5 уже будет впечатана намертво.

обсолютели вронг.
думай, думай, думай!

DragonsLord
20.05.2021, 22:51
Чего вронг? Намёки где? А лучше нормальную развёрную мысль.
....сложна! сложнаааа!!!!....

jerri
21.05.2021, 05:50
Чего вронг? Намёки где? А лучше нормальную развёрную мысль.

Рисуем экран 5
Нарисовали
Стираем стрелку на включенном экране
проверяем необходимость переключения экрана. Включаем нужный экран.
Рисуем стрелку на включенном экране.



Рисуем экран 7
Нарисовали
Стираем стрелку на включенном экране
проверяем необходимость переключения экрана. Включаем нужный экран.
Рисуем стрелку на включенном экране.

Повторяем.



....сложна! сложнаааа!!!!....

Ты всегда можешь бросить и уйти и тогда Медноногов будет смеяться вслед тебе со своего пьедестала, почесывая жирное брюшко.

DragonsLord
21.05.2021, 10:01
Ты демку вааще смотрел? Что я писал ДО того, читал?
Не могу я на двух экранах рисовать всё. Всё заточено - рисовать на теневом экране с перекидыванием в чистовой по готовности.

Забей. Я уже придумал, как вывести стрелку ИДЕАЛЬНО. :cool_std: Вам старикам не понять...


и тогда Медноногов будет смеяться вслед тебе со своего пьедестала
Судя по скорости моего вывода спрайтов, а также по цветному графонию тайлов, - Медный уже улетел с пъедестала лицом вперёд :biggrin:

jerri
21.05.2021, 11:28
Ты демку вааще смотрел? Что я писал ДО того, читал?


Читал видел. Ничего прогрессивного пока не заметил.



Не могу я на двух экранах рисовать всё. Всё заточено - рисовать на теневом экране с перекидыванием в чистовой по готовности.



А тебе это и не надо.
Надо просто в теневом экране держать полную копию чистового.



Забей. Я уже придумал, как вывести стрелку ИДЕАЛЬНО. :cool_std: Вам старикам не понять...


Судя по скорости моего вывода спрайтов, а также по цветному графонию тайлов, - Медный уже улетел с пъедестала лицом вперёд [emoji3]

Ты пока ещё вот это https://vtrd.in/demo_ver/WARCRAFT.ZIP не переплюнул.

DragonsLord
21.05.2021, 12:03
Надо просто в теневом экране держать полную копию чистового.
Чего? Всё, Джерри совсем стар. Пустить в расход старика на мясо. Несёт какую-то ерунду.


Ты пока ещё вот это .. не переплюнул.
Где ты в этом шлаке "Варкрафт" увидел? В каком месте "это" Варкрафт?

jerri
21.05.2021, 12:05
Чего? Всё, Джерри совсем стар. Пустить в расход старика на мясо. Несёт какую-то ерунду.Ну давай концептолог. Выкладывай свой вариант.

DragonsLord
21.05.2021, 12:27
Ну давай концептолог. Выкладывай свой вариант.
Подправляем текущую мышку, делаем не одну по 2х2 знакоместа, а две по 1х2 знакоместа. Соответственно, и два буфера подложки для 5 и 7.
Выводим мышку и туда и туда одновременно. Всегда. В верхнюю полоску бордера от момента прихода прерывания до верхней кромки основного экрана должны уложиться на изичах.

- ei : halt
- рисуем мышки и оставляем отрисованными обе

Если всё готово для переброски экрана, у нас уже установлен разрешающий флаг.

- смотрим флаг, если установлен начинаем волшебное действо
- di : переброска экрана стэком по таблицам
- после переброски осуществляем магический ритуал замены буфера подложки мышки7 на данные буфера подложки мышки5
- ei

При попытке начала перемещения мыши7 по экрану, на котором нарисована мыша5, всё прекрасно и правильно затрётся. Мыша не мигнёт, потому что она тупо никогда не отключается. Не зависимо от таймингов конкретного компа, где бы там луч не был в любой момент времени. Метода отработает всегда..

Надо дать название "метод по DL" :cool_std:
Метод позволяет не лезть в код перебросчика и сделать переброску максимально быстрой. А также не лезть в код мышки. И мышку иметь максимально быструю. И никакой реалтайм синхры между этими двумя блоками. ИЗИ!!!


Ничего прогрессивного пока не заметил.
Новое слово в алгоритмах на Спектруме! Революция!!!

DragonsLord
21.05.2021, 15:25
Фаза 1: Ты не сможешь. Не напишешь. Даже не пытайся. Графика не влезет. Памяти не хватит. Быстродействия не достаточно. Варик невозможен.
Фаза 2: Да, ты напишешь и что?
Фаза 3: Пф... да rts на Спектруме любой пионЭр напишет за 5 минут на изичах! Легче лёгкого!

Я так понял, мы перешли во вторую "фазу принятия"? :biggrin:

jerri
21.05.2021, 20:17
Фаза 1: Ты не сможешь. Не напишешь. Даже не пытайся. Графика не влезет. Памяти не хватит. Быстродействия не достаточно. Варик невозможен.
Фаза 2: Да, ты напишешь и что?
Фаза 3: Пф... да rts на Спектруме любой пионЭр напишет за 5 минут на изичах! Легче лёгкого!

Я так понял, мы перешли во вторую "фазу принятия"? :biggrin:

Лихо ты сову на глобус натянул.

а давай вспомним как было

фаза 1. да я за неделю в одно рыло.


Я думаю Ворон делается, если без уровней - за неделю в одно рыло. Так что я вас не понимаю.

вот тебе разумный ответ.


Привет всем...
Думаю такой проект - ни за неделю,
ни за две - сделать нельзя...
???



Я имел в виду за столько напишет чел.

внезапно ты даже имел ввиду не себя. ок.

а дальше тебе подсказывали (https://zx-pk.ru/threads/32718-warcraft-1-pod-klassicheskij-128-tr-dos.html?p=1100716&viewfull=1#post1100716) направляли (https://zx-pk.ru/threads/32718-warcraft-1-pod-klassicheskij-128-tr-dos.html?p=1100896&viewfull=1#post1100896) корректировали (https://zx-pk.ru/threads/32718-warcraft-1-pod-klassicheskij-128-tr-dos.html?p=1100972&viewfull=1#post1100972) мотивировали (https://zx-pk.ru/threads/32718-warcraft-1-pod-klassicheskij-128-tr-dos.html?p=1102617&viewfull=1#post1102617) снова направляли (https://zx-pk.ru/threads/32718-warcraft-1-pod-klassicheskij-128-tr-dos.html?p=1102645&viewfull=1#post1102645) снова подсказывали (https://zx-pk.ru/threads/32718-warcraft-1-pod-klassicheskij-128-tr-dos.html?p=1102758&viewfull=1#post1102758) указывали на ошибки (https://zx-pk.ru/threads/32718-warcraft-1-pod-klassicheskij-128-tr-dos.html?p=1102831&viewfull=1#post1102831) защищали (https://zx-pk.ru/threads/32718-warcraft-1-pod-klassicheskij-128-tr-dos.html?p=1102938&viewfull=1#post1102938) снова подсказывали (https://zx-pk.ru/threads/32718-warcraft-1-pod-klassicheskij-128-tr-dos.html?p=1115091&viewfull=1#post1115091) снова мотивировали (https://zx-pk.ru/threads/32718-warcraft-1-pod-klassicheskij-128-tr-dos.html?p=1117705&viewfull=1#post1117705).

ну ок удачи.

DragonsLord
21.05.2021, 20:49
Определённо - вторая фаза. По всем признакам :biggrin:

Лично я считаю, что программировать высокоуровневую логику - это вообще САМОЕ ЛЁГКОЕ, что есть в проекте. И самое быстрое. И никаких проблем я там вообще не вижу. А всё низкоуровневое уже успешно написано. Всё в одно рыло пришлось расхлёбывать... Ох уж мне эти "помошники"...


да я за неделю в одно рыло.
Непрекрытое враньё и искажение смысла сказанного. Каждый раз я буду жёстко пресекать этот поклёп и попытки приписать мне то, что я не говорил.

jerri
21.05.2021, 21:29
Непрекрытое враньё и искажение смысла сказанного. Каждый раз я буду жёстко пресекать этот поклёп и попытки приписать мне то, что я не говорил.

ссылочка - вон там за стрелочкой.
но ты можешь передергивать сколько хочешь.

DragonsLord
22.05.2021, 11:20
а дальше тебе подсказывали направляли корректировали мотивировали снова направляли снова подсказывали указывали на ошибки защищали снова подсказывали снова мотивировали.
Гoвнa кусок это, а не мотивация. Гнобили, высмеивали, унижали, спускали в бан с первой же секунды. То-то я смотрю, ВСЕ, кто что-то делает на спек кого я встречаю в Интернет, держутся от этого форума максимально подальше. Видимо, я проектом ошибся изначально. Здесь максимально неприятно находиться... Никакой радости от творчества ЗДЕСЬ испытать не удаётся, и перспективы не просматриваются.

Я не обобщаю. Если конкретно вы не делали описанного выше, не принимайте на свой счёт. Но общее впечатление от форума у меня сложилось именно такое. Когда на одного вяло похвалившего тебя, 20 челов oбocpут, то не может сложиться другого впечатления... Не умеете вы радоваться чужим маленьким победам.

krt17
22.05.2021, 12:01
Неплохой заход на слив, че цирка больше не будет?

- - - Добавлено - - -

Тут как бы нет проблемы с мотивацией, но если ты влетаешь такой весь красавчик и начинаешь всех обсирать, то логично получать соответствующее отношение.

DragonsLord
22.05.2021, 12:34
Вот о чём я и говорю: чел со статкой в "7 спасибо от юзеров" за 14 лет указывает участнику со статкой "144 спасибо от юзеров" за пару месяцев, что его деятельность - это цирк. Ваше мнение очень важно для нас. Продолжайте oбcиpaть всё, до чего дотянетесь. Это очень мотивирует общению в этом прекрасном месте.

krt17
22.05.2021, 12:46
Тоесть все таки слив, жаль.

scl^mc
22.05.2021, 13:22
камон, ну мы ж не в детском саду же

DragonsLord
22.05.2021, 13:23
Тоесть все таки слив, жаль.
И раз нет лайкосов, значит твои посты никому пользы не принесли, и из твой статки я заключаю, что 600 постов - это ровно 600 oбcиpoв других людей и их проектов. Ты вообще на что-то полезное годен?


камон, ну мы ж не в детском саду же
Пока тут свободно шныряют такие, как тот кадр, безнаказанно oбсиpaя всё шевелящееся, это даже на детский сад не тянет. Это просто зловонный гaдюшник.

krt17
22.05.2021, 13:42
Не истери, спасибы тут обнуляли, ты моргалку то доделывать будешь или нет?

DragonsLord
22.05.2021, 13:47
ссылочка - вон там за стрелочкой.
Давай-ка мы проще сделаем. Ты показываешь мой пост, где прямо написано "Я за неделю напишу Варкрафт". Посты все промаркированы либо датой публикации, либо датой последней редакции, т.е. их неизменяемость и первоначальный вид легко доказывается. Если такое заявление от меня ты не найдёшь, то прилюдно извенишься и добровольно выпросишь у Админа полугодовалый бан за открытое враньё и приписывание мне того, чего я никогда не говорил. По моему, справедливо.

А то я прям в толк не возьму, какое такое заболевание тебе мешает нормально читать и воспринимать информацию. Рассеянный склероз, ранний Альцгеймер или быть может просто низкий уровень IQ с диагнозом имбецилия. Прямым текстом говорю: ты меня уже ЗАМАНАЛ этими подколочками, что я якобы это писал.

Для больных всеми указанными болезнями, по сути инвалидов, повторяю в миллионный раз, ЧТО Я ПИСАЛ: "Я не трогал спек уже 25 лет. Я не помню асм от слова совсем. Я не напишу Варик не только за год, а вообще в принципе. У меня есть графика, и я ищу кодера, так или иначе причастного к продакшену rts, чтобы он, имея на руках исходники и готовые все необходимые процедуры, побыстрому пересобрал любую имеющуюся rts под новую графику. Требования к кодеру: непрерывный стаж программирования на асме условно с 1995 года и по сей день". Под эти описания условно подходили Алоний - как уже пересобиравший Ворона под новый перекрашенный графон, или Санчез - который rts может и не писал, но у которого в загашниках наверняка все готовые процедуры имеются. И им подобные перцы.

Никто на данный зов, как известно, не откликнулся. Посему я пишу сам и ровно с той скоростью, которая мне необходима для вспоминания асма.



Если взять движок от империи 3 то получится империя 3+ или империя 4
А здесь планируется другая игра.
Редкостная чушь, а не мнение. ЛЮБЫЕ rts по базовым механикам совпадают на 99,99%. Есть строения, которые можно строить и разрушать. Есть добывающие юниты, которые затариваются ресурсами и строят. Есть военные юниты, которые тупо ходят, мочат других и умирают сами. Остальные левые изыски вырезаются кнопкой делит из исходников примерно за 1 секунду времени.


- - - Добавлено - - -


Не истери, спасибы тут обнуляли, ты моргалку то доделывать будешь или нет?
А я разве где-то заявил, что прекращаю продакшен? Я уже говорил ранее - проект будет доделан не зависимо от моего присутствия или отсутствия на данном форуме.

"Мигалка" она не потому, что я рукожоп, а потому что на данной стадии сборки мне НУЖНО, чтобы оно мигало, ибо я ещё не дописал вывод спрайтов 3х3. И по миганию некоторых областей определяю правильную работу рефрешера. Как убрать мигание - я уже описал выше.

vlad-kras
22.05.2021, 14:34
Требования к кодеру: непрерывный стаж программирования на асме условно с 1995 года и по сей день". Под эти описания условно подходили Алоний - как уже пересобиравший Ворона под новый перекрашенный графон, или Санчез - который rts может и не писал,

Или Медноногов, который может и не имеет непрерывный стаж, но RTS все-таки выпустил да и в коде Черного Ворона разбирается. Но, к сожалению, он был с пьедестала позорно «сброшен, повержен» или как там - искать лень. Для меня даже не столько важно, оптимально Ворон написан или можно было лучше, а важно что Ворон написан и выпущен, а Warcraft1 под TR-DOS пока нет. Не говори гоп, пока не перепрыгнешь.

scl^mc
22.05.2021, 15:03
то, что есть уже сейчас, внушает оптимизм.
в дальнейшем (если у кого-то или даже у меня) возникнет желание перерисовать графику - пересобрать будет реально?

Dimon spb
22.05.2021, 15:59
Ты слишком много времени тратишь на полемику. Делай, как считаешь нужным и если это действительно будет революция - все злопыхатели утрутся.
А пока всё идет как будто бы неплохо. Интересно, сколько сожрёт ИИ. Ну и реальные баталии это минимум по 10 юнитов с каждой стороны.

Beaver
22.05.2021, 16:03
Вот, набросились на Повелителя, за неделю на изичах. Повелитель в рабочем процессе, на изичах сверг Медноногова, он счастлив! А счастливые часов (недель, месяцев, лет) не наблюдают. Варкрафт же. Тем более с уходом в чёрное. Тут особое понимание процесса требуется. Повелитель, шоу маст го он :v2_dizzy_priest: