• avatar Raider
  • 0
Из игрушек явно вдохновленных R-Type, советую глянуть Solaris 104 (игрушка 2001 года):
www.youtube.com/watch?v=gVAtXqESDcs
  • avatar Raider
  • 1
Zynaps — не «Зинапс», а «Зайнапс».
R-TYPE アール・タイプ в японском оригинале звучит как «Ару Тайпу»
  • avatar Raider
  • 1
Просто для информации.
Pape писал в книге что он оптимизировал код. Это очень свообразная оптимизация. Даже тот фрагмент что в книжке — без бутылки не разобраться.
Stalker (автор STS) в те годы пытался активно дизассемблировать именно R-Type. Как видно, не особо что вышло…
  • avatar Raider
  • 3
Чтобы два раза не вставать, из интересного в играх.

Savage (I) — рисует спрайты с создаваемой на лету «автомаской». «Автомаска» это биты графики спрайта, сдвинутые влево, сдвинутые вправо, наложенные по OR и инвертированные.
Т.е. из 00010000 сделает 00111000 и в итоге маска 11000111.
Примерно так же, как делается утолщеннный фонт. Но он это делает, естественно, по таблице. Хотя, припоминая дела 26-летней давности, я пробовал сранивать свою таблицу полученную описанным способом и она во многих местах не совпадала с имеющейся таблицей. Поэтому толи они вручную подредактировали таблицу (что может быть) толи сделали таблицу масок байтов вообще полностью вручную.

Dark Fusion делает 5 спрайтов бэкграунда (сдвинутых на 2pix), обеспечивая спрайты с пустым байтом-«концевиком» спереди и сзади, которым она и затирает фоновую графику при скроллинге. То есть графика шириной 3 байта имеет след. модификации:
00000000 11111111 11111111 11111111
00000011111111 11111111 11111111 00
000011111111 11111111 11111111 0000
0011111111 11111111 11111111 000000
11111111 11111111 11111111 00000000

Xecutor — определяет столкновения, читая собственную графику кораблика с экрана после того как выведет всех enemy-«тварюшек».

Jack The Nippper II не ждет int (как и подавляющее число игрушек) и использует технику как я её назвал «микробуфферинга», т.е. глобального бэкбуфера нет, локально бэкбуферится только то, что в данный момент накладывается друг на друга.

Из интересного не в играх — Shock последняя часть, с белыми «кувыркающимися» буквами SHOCK и звёздами — ВСЁ рисует ДО луча, то есть отрисовывает всё за верхний border. И вообще, интересный факт из всех демок E.S.I. А в курсе ли вы, что _ВСЕ_ они идут на 48к компьютере? Интересно, почему и зачем это. AY чип в оригинальном спектруме был только на 128к модели. Но графика вся выводится в 48к режиме, используя «гонки с лучом», и не просто графика, не используется память, все демки работают в 48к.

Из интересного. Когда-то очень давно, когда я увидел Lyra, я считал что демки _принципиально_ должны быть сделаны именно так, т.е. строго под 48к модель, несмотря на то что есть doublebuffered 128к экран. И использование doublebuffering'а мы считали «ламерством». Правда, жизнь расставила свои приоритеты, пока я усердно в поте лица устраивал гонки с лучом (например, сортируя спрайты), подъехала CB Satisfaction, где невозмутимо используется два экрана… =)

Насчет гонок с лучом. Гуглим книжку «RACING THE BEAM».
  • avatar Raider
  • 3
Вопрос именно в том как получается всё плавно но за 2 инта и без разрывов.

Любая программа, привязанная к int'у и перерисовывающая всё за 1/25sec (2*int) работает достаточно плавно.

«Разрывы» — это tearing графики? Zynaps все же синхронизируется с int'ом.
Tearing в Zynaps ещё как есть, просто он очень специфичный, надо знать, как он выглядит: время 3:52 и внимательно-внимательно смотрим далее. А столь специфичен он потому что они намеренно делают следующее. Они не обрабатывают «bulk» (т.е. широкую площадь) до и после луча (в месте потенциального сечения). Tearing будет заметен глазом когда МНОГО графики было ДО луча и МНОГО графики будет ПОСЛЕ луча, таким образом делая полосу «сечения» лучом хорошо заметной (МНОГОЕ сдвинуто до (выше луча) и МНОГОЕ (ниже луча) еще не сдвинуто). Вместо этого они обрабатывают по знакоместам (в некотором смысле симулируя столбцовый экран, бггг, вижу тут Lethargeek'а). Когда графика перерисовывается по знакоместам, проблема tearing'а случится только в нескольких «неудачных» знакоместах, попавших «под луч». Вдобавок, как я полагаю (не уверен на 100%), они используют трюк, начиная подвижную графику обновлять в рандомном порядке, таким образом делая «несчастливыми» знакоместами каждый раз разные. Это гораздо менее заметно для глаза.

Дичь с Zynaps совсем в другом. Насколько это мне известно с 90х, он рисует инверсную графику, накладывая её по AND и затирает атрибутами :))

— это изображение с paper black и white ink, т.е. в атрибутах байт 07.
  • avatar Raider
  • 1
Нет, бэкбуфера нет. Рисует прямиком на 48k экран.
  • avatar aa-dav
  • 0
P.P.S.
Вопрос именно в том как получается всё плавно но за 2 инта и без разрывов.
  • avatar aa-dav
  • 0
Потому что за 1 int (1/50sec, 50fps) не успевает.
Т.е. он где то бэкбуферит чтобы потом за два инта проскочить и вылезти как по его документации писано «за два инта на 25 фпс»?
  • avatar Raider
  • 0
каким то образом
Поэтому вопрос — как и зачем.

Вопрос до конца не понятен. Почему за 2int'а? Потому что за 1 int (1/50sec, 50fps) не успевает. Не хватает производительности CPU. Если на реальном «железном» спектруме включить 7Mhz «turbo» Zynaps начинает стабильно работать в 50fps, причем графика не сечется, спрайты монстриков не исчезают.
по геймплею чётко видно, что нижние и верхние препятствия на скроллящейся части экрана никогда не пересекаются лишь приближаясь ровно к центру
Есть фоновая графика уровня в Zynaps и по центру, это не на первом уровне.
Относительно «демо-анимы» можно поговорить отдельно, хотя не знаю интересна ли тебе эта тема. Я лично считаю аниму просто один из приёмов в репертуаре, не главным, но безусловно полезным. Я делал демо чисто на аниме, я делал демо с элементами анимации; я не знаю всё, что закодил ты, но я смотрел Iris и я могу себе представить, что для тебя как для олдскул кодера у меня анимы очень много. Поэтому скажу так. Не всё что я делаю в своих демо основано на быстро распаковываемых данных. Но я безусловно держу эту опцию в уме и при необходимости/возможности — применяю.
Я не считаю что всё нужно паковать одним компрессором. Есть компрессоры которые жмут хуже, но намного быстрее распаковывают; они полезны в своей нише. Есть компрессоры, которые прекрасно жмут, но распаковывают часами (см. Shrinkler на диаграмме в комментарии чуть выше).

Короче, есть некая условная грань оптимальности Парето. Как бы если ты готов затратить некое конечное кол-во вычислительных ресурсов, ты не сможешь получить сжатие выше, чем позволяет эта грань. Грань на данным момент показана на диаграмме в комментарии выше по треду. Глядя на эту грань, я выбираю себе лучший компрессор для текущей задачи. Например, для универсального сжатия в ядре демо я сейчас использую MegaLZ; LZSA2 для меня в этой роли сейчас на втором месте, из-за слегка худшего сжатия графики. Но если в демо что-то не будет успевать на стыках, я поставлю LZSA2 и решу эту проблему. В то же самое время, один из эффектов у меня сейчас в демо требует покадровой распаковки атрибутов (пикселы сделаны эффектом, а вот раскраска — анимацией). В этом случае скорость абсолютно важна, поэтому в эффекте задействован LZSA1.

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

И, да, запаковка на Z80 представляется мне абсолютно архаичной. С моей точки зрения в ней тупо нет смысла.
  • avatar Raider
  • 0
Напомни, что именно является «святым граалем» твоих поисков оптимального компрессора.
Могу ошибаться, но с моей точки зрения, это поиск наиболее сильного сжатия (требование №1 к любому компрессору) в то же время при самой высокой скорости _распаковки_ на z80.
При этом запаковка на z80, как таковая, абсолютно не принимается в расчет.
Видимо, всё это для целей демо-«анимы», т.е. основанных на быстро распаковываемых данных. Подтверди, так это или не так.
Изучал ли ты успехи товарищей на других 8-битных платформах? Каковы они?
  • avatar random
  • 1
2019

  ZX Spectrum 640K Demo
- -------------------------------------------------------------------------- -
       01  165 theend by thesuper ( shown 2, 34 votes, avg=4.853 )
       02  113 Hello world by moronizzz/buchaos crew ( shown 1, 35 votes, avg=3.229 )

  Combined Demo
- -------------------------------------------------------------------------- -
       01  138 mad about u by b/fly girls ( shown 1, 37 votes, avg=3.730 )
       02   84 Alistra by vertver/MZPE ( shown 2, 32 votes, avg=2.625 )

  Realtime AY Music
- -------------------------------------------------------------------------- -
       01   99 CCRT by EA/Antares ( shown 1, 21 votes, avg=4.714 )

  Realtime Graphics
- -------------------------------------------------------------------------- -
       01  181 Lost by moroz1999/dblk ( shown 2, 43 votes, avg=4.209 )
       02  177 Safe Landing by Matej 'Retro' Jan / Retronator ( shown 3, 42 votes, avg=4.214 )
       03  174 Что-то by Cangetsu ( shown 1, 43 votes, avg=4.047 )

  Realtime 53c Graphics
- -------------------------------------------------------------------------- -
       01  136 TrainOfChaos by TmK/deMarche ( shown 9, 29 votes, avg=4.690 )
       02  122 Chaos vs. Solarpunk by Matej 'Retro' Jan / Retronator ( shown 5, 30 votes, avg=4.067 )
       03  118 cc-train by nodeus/lfg ( shown 2, 29 votes, avg=4.069 )
       04  111 Рельсы для слабаков by moroz1999/dblk ( shown 7, 28 votes, avg=3.964 )
       05  107 Chaos model 968М  by BlastOff/BlastOff ( shown 6, 29 votes, avg=3.690 )
       06  105 Train entering the Chaos by Creonix/Brain Wave ( shown 3, 28 votes, avg=3.750 )
       07  104 cafechaos by neppieneppie/sibCrew ( shown 8, 26 votes, avg=4.000 )
       08  100 Might by Creonix/Brain Wave ( shown 4, 28 votes, avg=3.571 )
       09   83 No Train No Pain by Desiment/ ( shown 1, 29 votes, avg=2.862 )

  Wild Demo
- -------------------------------------------------------------------------- -
       01  197 1895 by Строков Андрей ( shown 4, 41 votes, avg=4.805 )
       02  165 Noch by Dmitry_Milk ( shown 2, 40 votes, avg=4.125 )
       03  160 Весёлая Птичка by azya ( shown 3, 39 votes, avg=4.103 )
       04  103 River by Venus Lucifer ( shown 1, 39 votes, avg=2.641 )

  Tiny Intro
- -------------------------------------------------------------------------- -
       01  149 Geometric Doodle by xmen/ ( shown 1, 38 votes, avg=3.921 )
       02  147 tunnel 253b by riddle ( shown 3, 38 votes, avg=3.868 )
       03  143 CCtro by frog/ROi ( shown 2, 37 votes, avg=3.865 )

  Animation/Video
- -------------------------------------------------------------------------- -
       01  115 северная сказка by ENOTiLAB ( shown 2, 33 votes, avg=3.485 )
       02  106 CCTT by CCTT ( shown 3, 31 votes, avg=3.419 )
       03   86 Gradiental Dancer by Creonix/Brain Wave ( shown 1, 33 votes, avg=2.606 )

  ZX Spectrum Graphics
- -------------------------------------------------------------------------- -
       01  169 Road to Spectropolis by Matej 'Retro' Jan / Retronator ( shown 5, 38 votes, avg=4.447 )
       02  164 RIP R.H. by moroz1999/dblk ( shown 6, 36 votes, avg=4.556 )
       03  160 Dog by dman/pcb ( shown 1, 37 votes, avg=4.324 )
       04  134 memories by Error/ErrorSoft ( shown 3, 37 votes, avg=3.622 )
       05  133 Entwurf by pixelrat ( shown 4, 37 votes, avg=3.595 )
       06   98 Instant Win by Jabberwock /doom2d.org ( shown 2, 34 votes, avg=2.882 )

  ZX Spectrum Beeper Music
- -------------------------------------------------------------------------- -
       01  119 Tribute to Masters by Darkman007/Quite ( shown 1, 27 votes, avg=4.407 )

  ZX Spectrum AY-Music
- -------------------------------------------------------------------------- -
       01  131 Navel of Mind by Darkman007/Quite ( shown 3, 31 votes, avg=4.226 )
       02  127 PRP by EA/Antares ( shown 5, 29 votes, avg=4.379 )
       02  127 Night City Drive by Sergei Smirnov aka Gogin ( shown 1, 31 votes, avg=4.097 )
       04  118 slowed by scalesmann/march[ing]_cats ( shown 2, 30 votes, avg=3.933 )
       05  103 pinch me in the bar by fatalsnipe ( shown 4, 28 votes, avg=3.679 )

  Tiny MP3 Music
- -------------------------------------------------------------------------- -
       01  113 Torque by Quiet/Insiders ( shown 4, 26 votes, avg=4.346 )
       02   95 The tragedy of that fat by |<ypa/)esa/Hi to M.A.M., dedanis, nagz
               & my depression ( shown 2, 25 votes, avg=3.800 )
       03   82 Rush by Saibogu/ ( shown 3, 24 votes, avg=3.417 )
       04   76 AtariSMN81 - Track for CC2019 by AtariSMN81 ( shown 1, 24 votes, avg=3.167 )

  Multichannel Traditional Music
- -------------------------------------------------------------------------- -
       01  141 Light Force Striker by Atekuro Kusoskei/OSC, AGK, and Mod Archive ( shown 7, 30 votes, avg=4.700 )
       02  134 Electronic BassMan by Darkman007/Quite ( shown 6, 31 votes, avg=4.323 )
       03  122 The Treasure Dive by adkd ( shown 5, 32 votes, avg=3.813 )
       04  117 Dancing With Fish by adkd ( shown 4, 33 votes, avg=3.545 )
       05  109 The False God by |<ypa/)esa/Hi to M.A.M., dedanis, nagz & my
               depression ( shown 3, 34 votes, avg=3.206 )
       06   95 haunebu by krotan ( shown 1, 32 votes, avg=2.969 )
       07   91 nemertini by krotan ( shown 2, 32 votes, avg=2.844 )

  Combined Photo (Heritage)
- -------------------------------------------------------------------------- -
       01  124 Skulls by Evangeliana ( shown 9, 32 votes, avg=3.875 )
       02  115 Собор Петра и Павла (вроде) by Evangeliana ( shown 6, 29 votes, avg=3.966 )
       03  114 Lumivaara by April Ryan/Aurora Hunters ( shown 10, 31 votes, avg=3.677 )
       04  110 Winter wonder forest by April Ryan/Aurora Hunters ( shown 4, 29 votes, avg=3.793 )
       05  107 Villa "Mechta" by Chichiri ( shown 8, 29 votes, avg=3.690 )
       05  107 Рыбинское водохранилище by ShaMAN ( shown 1, 31 votes, avg=3.452 )
       07  105 Baptistery by Chichiri ( shown 5, 29 votes, avg=3.621 )
       07  105 .old by Error/ErrorSoft ( shown 2, 30 votes, avg=3.500 )
       09  102 Colmar by draugven/cc^TRBL ( shown 7, 27 votes, avg=3.778 )
       10   86 Шуваловский парк by ShaMAN ( shown 3, 30 votes, avg=2.867 )

  Astro Photo
- -------------------------------------------------------------------------- -
       01  164 Moonbulb by binary animal ( shown 7, 36 votes, avg=4.556 )
       02  157 Такое удивительное небо! by Evangeliana ( shown 5, 36 votes, avg=4.361 )
       03  156 Заходы Солнца за пол-года by Rubelson ( shown 17, 35 votes, avg=4.457 )
       04  153 Toward north by binary animal ( shown 10, 35 votes, avg=4.371 )
       05  152 Обратная сторона луны by Evangeliana ( shown 3, 37 votes, avg=4.108 )
       06  151 Сияние над Крестовой горой by Darina ( shown 8, 36 votes, avg=4.194 )
       07  149 Магия Розового by Damir ( shown 11, 34 votes, avg=4.382 )
       08  148 Восход Луны by xmen/ ( shown 4, 37 votes, avg=4.000 )
       09  142 The SAR ARC by April Ryan/Aurora Hunters ( shown 18, 32 votes, avg=4.438 )
       10  138 MilkyWay by Chichiri ( shown 15, 33 votes, avg=4.182 )
       11  134 Однажды на Севере by Damir ( shown 14, 33 votes, avg=4.061 )
       12  133 У старого дуба by Darina ( shown 9, 33 votes, avg=4.030 )
       13  132 The one when I drowned my phone taking it. by Johan Lebedevski ( shown 16, 33 votes, avg=4.000 )
       14  130 8 минут и 20 секунд светового прошлого by Владимир Покалюк ( shown 2, 34 votes, avg=3.824 )
       15  129 Green Night by April Ryan/Aurora Hunters ( shown 13, 32 votes, avg=4.031 )
       16  128 The one when I didn't drown my phone taking it but wet my feet.
               by Johan Lebedevski ( shown 6, 33 votes, avg=3.879 )
       17  119 Pier to Aurora by Chichiri ( shown 12, 32 votes, avg=3.719 )
       18  107 Лунное затмение by ShaMAN ( shown 1, 34 votes, avg=3.147 )

  Aerial Photo
- -------------------------------------------------------------------------- -
       01  140 Лахта by Evangeliana ( shown 5, 33 votes, avg=4.242 )
       02  126 Кукольные коттеджи by Evangeliana ( shown 6, 33 votes, avg=3.818 )
       03  125 Петропавловская крепость by ShaMAN ( shown 3, 33 votes, avg=3.788 )
       04  113 Выше только самолёты by Владимир Покалюк ( shown 2, 34 votes, avg=3.324 )
       05  110 Муравьи by ShaMAN ( shown 4, 31 votes, avg=3.548 )
       06   91 cls by Error/ErrorSoft ( shown 1, 33 votes, avg=2.758 )

  HandDrawn Graphics
- -------------------------------------------------------------------------- -
       01  193 Ludovicus by Erik Mooi  / dSr ( shown 8, 42 votes, avg=4.595 )
       02  179 circus by Irina ( shown 6, 41 votes, avg=4.366 )
       03  176 Hangry Angry  by Irina ( shown 5, 40 votes, avg=4.400 )
       03  176 NADEJDA by GOROD_OLBANIA ( shown 4, 41 votes, avg=4.293 )
       05  133 burnt sugar by volv.victory@gmail.com/ ( shown 7, 40 votes, avg=3.325 )
       06  125 Trilobit by AtariSMN81 ( shown 1, 38 votes, avg=3.289 )
       07  114 Valentine day by AtariSMN81 ( shown 2, 39 votes, avg=2.923 )
       08  102 uH aHH Warrior by CoaXCable/CoolPHat ^ WIJ DEMOS ( shown 3, 39 votes, avg=2.615 )

  ASCII/ANSI Graphics
- -------------------------------------------------------------------------- -
       01  135 Blood by dman/pcb ( shown 2, 35 votes, avg=3.857 )
       01  135 Sweet Dreams are made of Weeds by CoaXCable/CoolPHat ^ Hoodlum ^
               WIJ DEMOS ( shown 1, 33 votes, avg=4.091 )
  • avatar Anadara
  • 0
Хорошая книга — это книга Bob Pape, или ещё какая-то была по вселенной?
Отлично, спасибо!
На этом графике показаны результаты 3х распаковщиков MegaLZ — самый медленный это старый («DEC40.asm», 110 байт), совпадающий по скорости с Hrum — это новый оптимизированный по размеру (92 байта) и тот, который чуть быстрее 3*LDIR — новый оптимизированный по скорости (234 байта).
Учти что график генерируется на основе старого корпуса (того же, что в 2017 году), а табличка выше — на основе нового. Я буду переходить на новый корпус из-за того, что в старом было маловато графики (где-то 20% данных) и великовата средняя длина файла, что слегка искажает результаты тестов (скажем, на старом корпусе LZSA2 слегка обходит MegaLZ по сжатию, т.к. имеет намного большее окно, а отставание на графике не так заметно из-за небольшого кол-ва графики в корпусе). С поправкой на эти моменты, вот где я сейчас:

Круто! А у тебя нет свежего графика «коэффициент сжатия/скорость распаковки» посмотреть где теперь что?
  • avatar aa-dav
  • 0
в данном случае я и не говорил про программиста.
программисту на опкоды тоже начхать обычно, важен только полный (со всеми дополнительными данными) размер команд, если он у всех одинаков (как в исходном арме) или можно подобрать аналоги нужного размера — тогда это еще можно с толком использовать, если нет — ну не похрен ли, сколько там опкод занимает