Pull to refresh

Comments 81

Хорошая статья, очень подробно всё описано (хотя я читал немного по-диагонали, т.к. лично для меня тут всё довольно очевидно, тем не менее 1-2 момента для себя всё же отметил). При этом интра не шибко сложная, но симпатичная. Для начинающего демомейкера в категории PC tiny intro, ИМХО, довольно хороший туториал получился.

Я бы с удовольствием почитал разбор навороченных интр типа тех, что делает Digimind, к примеру. Или Rrrola, Red Sector Inc и другие ребята такого уровня. Hellmood/DESiRE, кстати, в своих микро-интрах (32/64 байта) обычно оставляет исходники с подробными комментами, за что ему большой респект. Вот, кстати, полезный ресурс в его соавторстве: sizecoding.org.

p.s. Жоре привет! ;)

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

Вы не правы.
Способ реализации напрямую диктуется задачами.
Ну а так… Здесь и написан по сути шейдер.
Если говорить про современный 3D-движок, который работает только с текстурами, мешами, выводя графику через DX/OGL, конечно же.
UPD: а я не говорю про демки, скорее про реализацию подобного эффекта в какой-нибудь игре.
Демки на готовых движках никто не делает.
Есть всякие там Tooll2, fxEngine и т.п. штуки. Другое дело, что это не всегда приветствуется и порой вызывает споры.
Ну и к слову сказать (хотя это уже несколько другое), группы нередко делают кастомные движки, но в основном для себя. И это уже не критикуется, ибо работа получается полностью авторская.
Эти штуки явно не попадают под определение «современный 3D-движок», не?
Кто-то делает демки под минимальный размер на Unity?
Демы пишут не только под определённый размер.
Довольно много компо не имеют требований по размеру.
Ну в данном то месте вроде как именно демки под мини размер обсуждаются. Это даже в названии статьи описывается.
В статье вообще 128-байтовая интра под DOS обсуждается :)
Тогда и обсуждение 3D-движков/OGL/DX не в тему.
Но мы же уже давно отклонились от темы в этой ветке обсуждения…
тут речь как про про демосцену, если там и делают движок, то свой.
Ну или покажите из мира демосцены, что-то на юните или Unreal
Мне кажется тут как в спидранах: есть набор правил под любую ситуацию.
Более чем уверен, что есть какой нибудь набор правил и для «демо на UE»
Это нетипично, но бывает. Искать такие демы я не буду, т.к. таких критериев поиска на pouet, к примеру, нет. Но я думаю, что нагуглить при должном старании можно. Собственно, а почему нет, если это не запрещено правилами, а размер неограничен?

Я был как раз на обозначенном автором CAFePARTY, и там была лекция про Tooll2 и даже дема на нём же (которая заняла призовые места и вызвала много дискуссий). Да, это не 3D-движок, но не все демы 3D. Кроме того, есть конкурсы типа One Scene Compo, где прямо в правилах написано, что можно использовать Unity, Unreal и пр.: cafeparty.org.ru/2019/compo-rules/#demointro
Работа шейдера и подобной интры принципиально разная.
В шейдере каждый кадр вычисляется цвет каждого пикселя.
А в подобной же интре меняется (вычисляется) координата точки и там определяется цвет. Грубо говоря, рисуется линия по-точечно (а не вычисляется цвет на основе принадлежности координаты линии для всего экрана). И изображение соответственно меняется отдельными точками, а не кадрами (тут даже нет ожидания начала кадра – ретрейса).

Пример интр, работающих по принципу шейдеров – Puls by Rrrola (на основе рей-марчинга) или фракталы (Мандельброт/Жюлиа). Т.е. где идёт проход по всему экрану и вычисляется цвет каждой точки. Правда, без многопоточности :))
Возможно у нас разное понимание значения слова «по сути»?
При этом шейдер скорее всего будет занимать меньше места чем попытка реализовать что-то подобное на CPU

В общем-то многие из современных демок и являются небольшими программами, которые инициализируют OpenGL/DirectX, и почти весь их объем — один или несколько сложных шейдеров.

К примеру демка из 2010 «elevated» 4кб
вот тут можно посмотреть на ютубе
www.youtube.com/watch?v=jB0vBmiTr6o
вот тут портированный на ShaderToy шейдер
www.shadertoy.com/view/MdX3Rr
Сам 4кб бинарник можно найти тоже (Windows), только под win10 (и может даже win7) нужно искать пофикшенную версию
Да, 4k обычно – это шейдер с кодом его запуска + музыка, созданная в 4klang (с плеером из той же коробки).

А по поводу места (меньше CPU-код или шейдер), то есть 32- и 64-байтовые демки, которые далеко не всегда можно уложить в такой шейдерный код. Да и многие 256-батовые тоже. Тут всё зависит от сложности эффекта, пожалуй ;)
Помнится, Сысоев с товарищами тетрис в 4К уложил, может в загашниках у меня где и лежит ещё.

Спасибо! Это моя любимая демка с детства. Тогда воспринималась как нечто совершенно магическое. Вдохновившись, даже пытался что-то столь же миниатюрное на асме сделать, но у меня даже банальный летающий по экрану кирпич не получилось в 256 байтов вместить )
В свое время я начал изучать ассемблер, будучи впечатлен именно такими демками.

Ах какой сложной задачей казалось нарисовать окружность! Нет, через тригонометрию — элементарно, но нет же тригонометрии у ассемблера! Впрочем, черт с ней с окружностью, точку, точку как нарисовать на экране.

Волшебный режим 10h…

P.S. Вдохновила меня, на самом деле, демка, вращавшая трехмерные фигуры из точек, морфившиеся в процессе. Занимала она порядка 4 килобайт и был это экзешник.
P.S. Вдохновила меня, на самом деле, демка, вращавшая трехмерные фигуры из точек, морфившиеся в процессе. Занимала она порядка 4 килобайт и был это экзешник.

Я тоже помню такую. Интересно, кто нибудь знает где её сейчас найти?

Именно оно, спасибо! И забыл же про неё совсем, а такие первые впечатления были… Пошёл впадать в детство.

А вот и её исходный код Morph3d на ГитХабе. Плюсом COM & EXE

Про открытый код не знал, спасибо. Ассемблер там разобрать будет нелегко.

Ну ассемблер там не такой ужасный, код даже вполне прокомментированный. Можно даже статью написать, с его подробным разбором.
если мне не изменяет память, то я гдето видел её исходники на ассемблере.
А помимо цели минимизации размера, ещё есть и другая цель, например, когда нужно реализовать сложный алгоритм одной функцией без условных переходов, без тернарный оператора и тд.
Это может пригодится например для FPGA во время оптимизации алгоритмов на HDL.

Вот для примера алгоритм на Си летающего по диагоналям кирпича и отскакивающего от стенок. Он в виде всего одной формулы (см строки 16 и 17). Очень не оптимальный т.к. например, в Си нет возможности взять и раскопировать бит влево или в право и поэтому использую вычитание из нуля. На верилоге это выглядело бы в разы проще и понятнее.
Этот пример иллюстрирует так работали игровые приставки первого и второго поколения типа понга (которые без проца: транзисторы и/или рассыпная логика).

gist.github.com/Mirn/26174833464eb5403d2cd4c7bf26ccf5#file-opencv_demo3-cpp-L16
Этот пример иллюстрирует так работали игровые приставки первого и второго поколения типа понга (которые без проца: транзисторы и/или рассыпная логика).

Приставки на транзисторах работали иначе. Они вообще, по сути, аналоговыми были, там размеры и положение элементов определялись генераторами с регулируемой частотой, а меняя частоту генераторов, производилось движение. Потенциометры, подключенные к генераторам ракеток, были в качестве джойстиков, разряжающиеся/заряжающиеся конденсаторы двигали мяч в одну-другую сторону.
Моя любимая демка называется mars
Тоже сделана довольно интересно, хотя и размер намного больше.
Да, это было круто.
Mars на ютубе

Но 5 килобайт — довольно много.
Да, mars тоже крышу сносил. В моём личном рейтинге вторым номером идёт. Но там примерно понятно, как сделано, и размер бинарника всё-же не экстремально маленький.

О, а я только собрался вспоминать название. Дико понравились минималистичные атомы и ДНК, даже в качестве обоины помню пытался cделать.

У неё две версии было — первая летала сама, во второй можно было рулить.
Сейчас бы под такую задачу взяли бы несколько фреймворков, nodejs, пакеты,…
Вы не поверите, но и ТОГДА в продакшене задачи решались с помощью готовых фреймворков.
Это — спортивное программирование, оно перпендикулярно промышленным задачам.
Да, демосцена – это просто энтузиазм, творчество, хобби.
Некоторые (а может и многие) прогают графику чисто для души, на работе же занимаются совершенно другими задачами.

Вообще, конечно, сцена под DOS и под Windows очень сильно отличается как минимум наличием функций и библиотек, которые доступны на уровне ОС.
но и ТОГДА в продакшене задачи решались с помощью готовых фреймворков

Например каких?

Clipper, FoxPro для БД, Turbo Vision для интерфейса и BGI для графики?
Никто не мешал написать свою графику и почти гарантированно быстрее BGI, но так ли оно надо, если нужно просто пайчарт вывести? :-)

Из этого списка только Turbo Vision можно назвать фреймворком и то с оговорками. Clipper — компилятор, далее язык, FoxPro — язык + среда. BGI библиотека.
Меня интересовало, если уж речь шла за графику, было ли что-то высокоуровневое для создание игр тогда.
Девкиты для игровых консолей разве что шли со всеми готовыми библиотеками.
На PC под DOS все старались написать свой крутой движок. Иногда потом лицензировали его другим.
Кстати, на PC-демосцене в 90-ые некоторые использовали свои самописные движки и фреймворки. Например, у группы Doomsday была своя система со скриптовым языком.
Это если мы говорим про графику. Более распространены были библиотеки для звука — тот же Midas, Cubic, Fmod.

Вот лишь бы что ответить. Приведите пример. Я писал под турбопаскаль 5.5, clipper, foxpro2 — все только руками на языке. Не было ничего.

Ну демка-то от 1996 года. Тогда уже вовсю фреймворки юзались. В том же турбопаскале уже в версии 6.0 появился и быстро стал мегапопулярным фреймворк TurboVision, какой это год, 1990-й? А в 1996 мы уже писали на Delphi под VCL, на сях под MFC и OWL и так далее. Да и Clipper/FoxPro, учитывая, что там прям в языке можно манипулировать базой данных, сами вполне себе фреймворки.
Ага… С гигабайтами разных библиотек и IDE. Блин, у меня на ЕС-1840 был винт 20 мегабайт и это было круто! На Spectrum какое-то время вообще дисковода не было, только магнитофон. И я с помощью этого зарабатывал деньги.
логично предположить сколько сейчас зарабатываешь если объёмы увеличились многократно
здравствуй билли
Что-то подобное (код демки) было напечатано на футболках Enlight'96 на спине. Но по моему, там был перевернутый крест, а не пентаграмма. Горящий. Свою футболку давно сносил, так что не найду. А на фото в отчетах у cr качество фиговое. :(

Вот тут можно посмотреть, если кому интересно. :)
www.enlight.ru/enlight/96/report2.html

Эх, молодость, молодость…
Эх блин, ностальгия! Тоже в своё время этим увлекался… Первый на что-то годный комп у меня появился в 98-м (как раз за месяц до дефолта). Год на него копил с зарплаты 200 долларов. До того был Spectrum и ЕС-1840. Комп продавался с предустановленной DOS и набором демок. Меня они буквально поразили. Начал в них копаться, изучать алгоритмы, через месяц сам уже начал что-то подобное писать… Нда… Комп по тем временам считался если не немерянно, то во всяком случае достаточно крутым. Пентиум 120 мегагерц, и 32 мегабайта памяти. А сейчас те же 32 мегабайта на моей отладочной платке с FPGA начального уровня — de0-nano. А на телефоне гигабайты… А всего-то 20 лет прошло… Вот так…

Немного поностальгирую.


mov al, 13h ;b0 13
int 10h     ;cd 10```

Ах, эти b0 13 cd 10…
Помню, как по рукам ходило тайное знание, как вывести из строя windows XP в 7 байт.
Вот все содержимое .com файла, которое намертво и надолго делает компьютер под управлением windows xp неработоспособным до перезагрузки:
b0 13 cd 10 c4 c4 00


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


Вот и получается: "а я могу повесить ваш компьютер с 7-ми байт".

а я могу повесить ваш компьютер с 7-ми байт
А я могу повесить ваш компьютер с 4 байт )))
ru.wikipedia.org/wiki/F0_0F_C7_C8

Ну, вы только пентиум повесите, а я любой компьютер, под управлением windows XP, возможно еще и 2000.

9х в 3 байта вешали. «ълю» писалось в блокноте и сохранялось как .exe.
В 9X намертво повесит систему:
cli
jmp short $ ; hlt (в Win98, по крайней мере) не сработает


А перезагрузит:
mov al,1
out 92h,al
Спасибо за статью! Для меня все что связано с демосценой — это как еще раз вернуться в студенчество… Как там говорят «если пришел к ассемблеру через демосцену — ставь лайк» :))
p.s. в русской википедии в ссылках при статье «Демосцена» — одна из моих первых проб пера, и именно про демосцену… И что прикольно, рядом статья Олега Чебенеева, он же mindw0rk, рассказы которого я взахлеб почитывал в то время…

Кстати, чтобы использовать FASM (под Линукс например), нужно просто удалить директивы в начале и в конце и добавить org 100h:


-.186
-.model tiny
-.code
-.startup
+        org  100h
 ; ..... инструкции здесь
-end

Потом:


fasm demo.asm
dosbox demo.com
Классная статья и реверс с разбором «как это работает» доходчиво и понятно. Читается на одном дыхании. Надеюсь увидеть еще такие же разборы демок. Пишите!
Когда декомпильнули fire.com с его «шейдерами», а точнее, фильтрами, тогда и понеслись подобного рода демки на всех платформах.

128 байт говорите? А сколько теперь один лишь калькулятор в Windows вести?
Отличная статья. Рекомендую тем, кто интересуется демосценой посмотреть ранние демки farbrausch… в те годы для меня это была полная магия запихать в 64к столько всего…

Где0то в тех же годах видел демку cross.com, рисовавшую такой же эффект, только вместо пентаграммы был крест. Видать, авторы этой демки взяли ту, переделали блок линий (он тут малех посложнее, ещё может код эффекта ужать смогли) и за своё выдали. Или наоборот, хм. Все равно всем респект.

В той деме был другой алгоритм пламени, и он был намного красивее.
Прекрасная статья! Демки — это отдельный вид искусства: компактность кода, зрелищность и производительность. Причем не понятно порой, что в этом списке первостепенно. Мне как программисту — компактность кода, разумеется. Когда впервые их увидел в 1998 году — был просто поражен.
Запустил под виртуалкой, работает…
Правда, пару байтов пришлось добавить — два раза команду hlt.
Ведь все равно в конце там есть несколько байтов незаполненных, если я правильно понял, так что в 128 все равно можно остаться.
Я в студенчестве экспериментально выяснил, что минимальня программа которая запускается, состоит из одного байта. Это символ 'b' в ASCII. Т.е берём блокнот, пишем в нём одну букву b, и сохраняем как b.exe. Сейчас в Windows 10 не работает, но в XP ещё работало. Запускалась консоль и курсор хаотически помаргивал в начале экрана. Может кто объяснить, за счёт чего эт работало?
минимальная прога, которая запускается и корректно работает — однобайтовая команда retn, и это .com файл, а никак не .exe
Охтыж. Прям ностальгия. Помню эту демку. Я в те времена как-раз 128-байтниками развлекался. Она меня вдохновила на повторить.

Полез в архивы. Нашёл ту самую дискетку! :-)
Вот моя версия, анархия:
0000000000: B0 13 CD 10 B7 A0 53 53 │ 1F 07 BD 40 01 33 F6 B1
0000000010: C8 51 8B F9 8B CD 8B C1 │ 2D A0 00 F7 E0 50 8B C7
0000000020: 2D 64 00 F7 E0 5B 03 C3 │ B0 0C 80 FC 20 75 02 88
0000000030: 04 46 E2 E2 59 E2 DA BF │ 9E 7A FE C9 F3 AA BF C6
0000000040: ED B1 5F 51 AA 2B FD AA │ 2B FD 4F E2 F7 59 83 EF
0000000050: 0F AA 03 FD AA 03 FD 4F │ E2 F7 33 C0 49 03 D9 81
0000000060: FB 7A F8 77 0D 38 07 74 │ 09 C6 87 40 01 04 02 D9
0000000070: 89 07 E2 E9 B4 01 CD 16 │ 74 93 B8 03 00 CD 10 C3

gif-ка эмулятора
image


Помню тогда собирался послать пачку работ на демо-пати, но то-ли опоздал, то-ли сессия, то-ли что-то пошло не так.

Вот еще пару работ которыми тогда гордился:
множество Мондельброта (ох, как я тогда радовался когда вместо 1 лишнего байта, после двух дней мучений придумал как сэкономить целых три байта, даже подпись влезла в конце файла):
0000000000: B0 13 CD 10 68 00 A0 1F │ BA C8 03 EE 42 32 C9 8A
0000000010: C1 EE 6E 6E E2 F9 BD 9C │ FF B9 C8 00 51 BA 50 FF
0000000020: B9 40 01 51 57 33 DB 33 │ FF 33 C9 52 8B C7 F7 E8
0000000030: 8B F0 8B C3 F7 E8 2B F0 │ C1 FE 06 5A 03 F2 52 8B
0000000040: C6 F7 E8 C1 F8 06 50 8B │ C7 F7 EB C1 F8 05 03 C5
0000000050: 8B D8 8B FE F7 E8 C1 F8 │ 06 5A 03 C2 5A 0A E4 75
0000000060: 06 49 80 F9 E0 75 C4 5F │ 88 0D 47 42 59 E2 B4 45
0000000070: 59 E2 A9 FE CC CD 16 B8 │ 03 00 CD 10 C3 00 41 73

image

кольца ньютона:
0000000000: B0 13 CD 10 68 00 A0 07 │ B1 C8 BF 80 01 51 83 E9
0000000010: 64 8B E9 B9 40 01 51 81 │ E9 A0 00 BE 70 01 51 E8
0000000020: 3A 00 86 D8 59 E8 34 00 │ 02 C3 24 03 8A D8 C0 E0
0000000030: 02 0A C3 0C 10 88 05 47 │ 59 E2 DB 59 E2 CF B1 04
0000000040: AD 01 44 F6 7D 05 FF 44 │ FE EB 03 FF 4C FE E2 F0
0000000050: 33 FF B5 7D F3 A5 E4 60 │ 48 75 AD C3 AD 2B C8 AD
0000000060: 03 C5 F7 E0 50 8B C1 F7 │ E1 5A 03 C2 C1 E8 0B C3
0000000070: 00 00 32 00 32 00 00 00 │ 09 00 00 00 00 00 F5 FF

gif
image


3d фонтан:
0000000000: B0 13 CD 10 B7 A0 53 07 │ BE 7E 01 B9 8C 00 C7 04
0000000010: 00 00 AD 89 3C AD AB AB │ 89 0C AD C7 04 60 04 AD
0000000020: E2 EC BE 80 01 B9 8C 00 │ 51 AD C1 F8 03 8B F8 AD
0000000030: AD C1 F8 05 05 64 00 81 │ C7 80 06 B9 40 01 F7 E1
0000000040: 03 F8 AD C0 E8 04 0C 01 │ 24 09 88 05 59 E2 D9 33
0000000050: FF B5 7D A5 89 54 FE E2 │ FA BE 7E 01 B9 18 01 AD
0000000060: C1 F8 04 01 04 7D 05 FF │ 44 FE EB 03 FF 4C FE AD
0000000070: E2 ED B4 01 CD 16 74 AA │ B8 03 00 CD 10 C3 41 73

gif
image
Вам неплохо было бы написать статью про свои интры.
Довольно годные :)

Поддерживаю просьбу сделать разбор. И ps: давненько не сохранял программы на диск из текста в HEXe, вспрмнил про UUE.

jin_x Cenzo
Увы, но статью не смогу. Сейчас нашел исходники — тихий ужас. Я был молод и горяч. Исходники такие же. :-) Проще реверсинжинерить как это делал Loiqig :-) А учитывая что прошло без малого 22 года (исходники середины 97-го), и отсутствие опыта ассемблера приблизительно с тех же времен — у меня уйдет не меньше суток-двух на вспомнить, и еще сутки на статью. Я просто не готов к такому подвигу (слишком много детей/домашних дел для этого).

Вот пример исходника колец ньютона
.286
.MODEL TINY
.CODE

org 100h

Start:
; MOV DX,3C8H
; OUT DX,AL
; INC DX

MOV AL,13h
INT 10h

; XOR CL,CL
;PAL:
; MOV AL,CL
;; AND AL,0111b
; SHL AL,4
; OUT DX,AL
; OUT DX,AL
; OUT DX,AL
; LOOP PAL

PUSH 0A000h
POP ES

REPEAT:
; MOV CX,200
MOV CL,0C8h
; XOR SI,SI
MOV dI,OFFSET ACTIVE
LOOP_Y:
PUSH CX
SUB CX,100
; MOV Y,CX
MOV bp,CX
MOV CX,320
LOOP_X:
PUSH CX
SUB CX,160
mov si,offset x_x1
; MOV X,CX
PUSH CX
CALL CIRCLE
; MOV DS:[dI],AL
xchg bl,al

; MOV CX,X
POP CX
CALL CIRCLE
; and al,00001111b
; or al,00000111b
; add al,15
; add DS:[dI],AL
; add al,DS:[dI]
add al,bl
and al,00000011b
mov bl,al
shl al,2
or al,bl
or al,00010000b
MOV DS:[dI],AL

INC dI

POP CX
LOOP LOOP_X
POP CX
LOOP LOOP_Y

; MOV SI,OFFSET D_X1
MOV Cl,4
MOVE:
; MOV AX,[SI] ;D_X1
lodsw
ADD [SI]-10,AX
; CMP WORD PTR [SI]-4,0
JGE DEC_X1
INC WORD PTR [SI]-2 ;D_X1
JMP SHORT END_D_X1
DEC_X1:
DEC WORD PTR [SI]-2 ;D_X1
END_D_X1:
; ADD SI,4
LOOP MOVE

; MOV SI,OFFSET ACTIVE
XOR DI,DI
; MOV CX,32000
MOV CH,7Dh
REP MOVSW

; MOV AH,01H
; INT 16H
; JZ REPEAT ;UNTIL KEYPRESSED
in al,60h
dec ax
jnz repeat

; MOV AX,03h
; INT 10h
RET

CIRCLE PROC NEAR
; SUB CX,X_X1
; MOV BX,Y_Y1
lodsw
sub cx,ax
lodsw
; mov bx,ax

add AX,bp ;Y
MUL AX
push ax
MOV AX,CX
MUL CX
POP DX
ADD AX,DX
SHR AX,11
RET
CIRCLE ENDP

X_X1 DW (0)
Y_Y1 DW (50)
X_X2 DW (50)
Y_Y2 DW (?)
D_X1 DW (09)
D_Y1 DW (0)
D_X2 DW (0)
D_Y2 DW (-11)
;X DW (?)
;Y DW (?)
ACTIVE DB 64000 DUP (?)
END Start



Ежели кто захочет покопаться, прикладываю архивчик работ:


Вот некоторые превьюшки из архива:
Огоньки. По-моему только ленивый не делал их. К сожалению на современном железе даже в эмуляторе все работает слишком уж быстро. Пришлось дополнительно замедлять внутри virtual box'а. Но даже это не помогает — смотрится хуже чем было на старых ламповых компах. Плюс рандом уже не тот (в качестве рандома используется мусор из памяти — теперь нет того мусора. Возможно то был мусор от qemm386, или еще какой).
fire2.com


fire3.com


fire4.com



Жизнь Конвея, куда ж без неё? :-)
life.com



Просто залипательный геометрический мусор.
shiza.com



Братья-близнецы с ротацией палитры.
hyper.com


water.com



Дыра — пытался повторить эффект из какой-то 4k-intro.
hole.com



Ностальжи! Я участвовал в 128 байтниках всего раз, вот результаты (мое — 6-е место):
demozoo.org/parties/804
Забавно. Я пробовал протащить 3д-графику в движок для текстовых игр. который умеет в пиксели. Получилось примерно так:
image
instead-games.ru/game.php?ID=305
Only those users with full accounts are able to leave comments. Log in, please.