С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Набросал костылями упаковку, чтобы оценить ужатие.
0+3 бита = новый тайл
10 = копирование сверху
11 = копирование слева
прогнал первые 75 оригинальных уровней, только клетки без человечков:
мин длина 175 байт
макс 239
сред 194.5
в сумме 75 уровней пожались в 14586 байт, сюда нужно добавить либо 150 байт адресов начала уровня, либо (т.к. влезаем в 255 байт) 75 байт длин
пожатые оригинальным 3 бит - 264 байта на уровень, в сумме 19800 байт
Как мне кажется, весьма недурно.
P.S.
можно попробовать сменить формат на
0 - копировать слева
10 - копировать сверху
11+3 бита - новый тайл
и посмотреть что на выходе получится
P.P.S.
мин 106
макс 228
сред 146.2
в сумме 10965 байт + 75 (150)
самый плохой случай будет, если уровень идёт шахматкой (например, лестницы), - в таком случае получим на выходе 440 байт
P.P.P.S.
Вспомнил, почему не получится полноценно использовать zx0/zx5. Потому что есть редактор, и из него нужно сохранять уровни.
Последний раз редактировалось Bedazzle; 11.11.2024 в 22:32.
Heavy on the disasm
Eric and the disasm
Mask 3: Venom strikes disasm
Bard's disasm
не, не так, не понял ты - двумя битами кодируется не действие, а СМЕНА действия
вот пример как бы для экрана 10x7 (с краю - переход на новую строку)
слева вид уровняКод:.......... =<-------- 3211111111 .WWWWWWHW. -=<----=+^ 1521111542 .W.....H.. --=<---^=< 1152111252 .W.....H.. -^-------- 1211111111 .WWWW..H.. --<--^---- 1121121111 .......H.. -<-----^-- 1211111211 WWWWWWWWWW =<-------- 5211111111
в центре переключения:
= переключение и загрузка значения (2+3 бита)
< переключение на копирование слева (2)
^ переключение на копирование сверху (2)
- повтор копирования сверху или слева (1)
+ повтор загрузки без переключения (1+3)
справа стоимость тайла (первая загрузка стоит только 3 бита, ибо подразумевается)
итого 107 бит, то есть для данного примера чуть больше 1.5 бита на тайл
- - - Добавлено - - -
у меня для шахматных атрибутов есть альтернатива с пятью действиями вместо трёх
но тут вроде не так много подобных уровней, чтобы ради них усложнять формат
- - - Добавлено - - -
для редактора, наверно, проще делать уплотнение с выкидыванием старого варианта и добавлением нового в конец + коррекция адреса в таблице
- - - Добавлено - - -
хотя чисто теоретически кто-то может заморочиться и сидеть кропотливо рисовать много шахматок
штош, в таком случае придётся выдавать сообщение "обломись, памяти не хватит, рисуй попроще"
- - - Добавлено - - -
в смысле, НЕСКОЛЬКО таких поганых уровней всё же влезет, кому надо больше - пора лечиться![]()
Прихожу без разрешения, сею смерть и разрушение...
это мне обмозговать надо, я тупенький
для редактора можно жать старым оригинальным методом, и просто указывать формат упаковки в первом байте
- ориг паковка 3 бит
- твоя паковка
- паковка zx0 (нельзя редактировать)
если жалко, то можно не отдельный байт, а пару бит пихать в те 150 байт где адреса хранятся
Heavy on the disasm
Eric and the disasm
Mask 3: Venom strikes disasm
Bard's disasm
(+) это 0??? - повтор (=)
(-) это 0 - повтор (< ^)
10 - НЕ может быть переключением на копирование сверху; может на слева и на загрузку (< =)
11 - НЕ может быть переключением на копирование слева; может на сверху и на загрузку (^ =)
на что именно - определяется по контексту (ну сам подумай, какой смысл "переключаться" на уже и так активное действие))
- - - Добавлено - - -
само собой, переключение совмещено с однократным выполнением нового активного действия
Прихожу без разрешения, сею смерть и разрушение...
Bedazzle(12.11.2024)
Последний раз редактировалось Bedazzle; 12.11.2024 в 19:13.
Heavy on the disasm
Eric and the disasm
Mask 3: Venom strikes disasm
Bard's disasm
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)