У меня была чуть другая идея, пробовал собирать маску из стандартных блоков, которые в UDG есть + ещё несколько дополнительных.
Вид для печати
попробуй варианты OR и AND по всем маскам (одного байта)
- - - Добавлено - - -
емнип в Capitan Trueno маска сжатая и вдвое меньшего разрешения (по обеим осям)
в одном байте хранится маска сразу для четырёх байт спрайта
чётные и нечётные биты кодируют разные строки маски
Т.е. это статистика по исходным спрайтам без сдвигов? Тогда идея не прокатила, со сдвигами будет еще хуже. Выходя за рамки темы - у Tony фишка в графике, и если однострочная автомаска будет ее портить, то лучше поискать другие варианты. Трехстрочная в реализации на 8080 будет довольно медленной. Может поделить игру на части или сделать подгружаемые с магнитофона уровни? А в MX можно и все сразу загрузить.
не, по уму тогда нужно две таблицы масок - отдельно для левого и правого края
причём для именно таких нешироких спрайтов без промежутков результат получится почти идеальный
чтоб при сдвигах ширина маски не плавала - маскировать не просто крайний байт, а от края первый ненулевой
CityAceE, Ну как прогресс?
CityAceE, основаня идея быстрого сдвига без таблиц у меня была в том, при копировании спрайта из места хранения в буфер, который уже выводится на экран использовался сразу сдвиг на 1 пиксель влево или вправо, или без сдвига. Тут смысл в том, что если спрайты например хранились в отдельном банке, а вывести сдвинутый спрайт нужно на 5/7 экраны и спрайты у и тебя упакованные по строкам. Используется примитивный RLE, где ты можешь повторяющиеся строки или даже части спрайта не хранить повторно. Так вот, быстро сдвинув (RRA/RLA) при распаковки и копировании в буфер и получив предсдвинутый спрайт, при выоде на экран его нужно всего лишь досдвинуть до нужной фазы... например для фазы 0: выводим как есть, сдвигать не надо, для фазы 1 используем предсдвинутый при коприровании в буфер спрайт, для фазы 2 - используем предвинутый при коприровании и дополнительно сдвигаем его при выводе на экран на 1 пиксель. Самые меделенные фазы это сдвиг на 3 и 5 пикселей, понятно как быстро сдвинуть на 6 и 7 пикселей. Для 7 используем двиг влево, и для 6 используем сдвиг влево + доп сдвиг на пиксель, только нужно сместить указатель на адрес буфера. Ну, а для сдвигов на 3 и 5 используем RLD/RRD команды, сдвиг на полубайт, в сочетании с предсвдинутым буфером. Эта же команда используется для сдвига на 4. Рабочий пример этого способа, я выкладывал здесь на форуме. Сама процедурка получилась очень компактной и достаточно быстрой, конечно табличный метод работает чуть быстрее на 30% где-то, но если поджимает память то выкручиваться можно вот таким способом.