Сообщение от
Andrew771
буду делать.
Зеркалирование байта сделать несложно и не торомзно.
Сообщение от
denpopov
Одна табличка в 256 байт, и ты в шоколаде
Воистину, в Саботере я это оптимизировал так (в A - номер тайла, тайл выводится в буфер PaintedChar):
Код:
ld l,a
ld h,#00
add hl,hl
add hl,hl
add hl,hl
ld de,Game.Sprites.Saboteur - #08 ; tile number was incremented
add hl,de
ex de,hl
ld bc,PaintedChar
ld h,high MaskTable
ld iyl,#08
.out_saboteur_loop:
ld a,(de)
ld l,a
dec h
.saboteur_mirroring_command:
ld l,(hl)
inc h
ld a,(bc)
and (hl)
or l
ld (bc),a
inc bc
inc de
dec iyl
jp nz,.out_saboteur_loop
Там тока еще и автомаскирование применяется, табличка зеркалирования находится перед табличкой маскирования, зеркалирование отключается засылкой nop'а в .saboteur_mirroring_command.
А вот отзеркалить тайлы при выводе спрайта сложнее. Особенно, если спрайт частично может выходить за границы экрана. Надо либо в обратном порядке идти по тайломапу, либо по тайловому слою. Поскольку в Саботере эта процедура занимается четырьмя вещами одновременно (заполняет слой маски, копирует тайлы из фона в буфер, предотвращает вывод тайла поверх непреодолимого препятствия и, собственно, копирует тайлмап в нужный слой), ее переписывание я отложил до 128-й версии.