23 марта 2018 г.

Недавно я наткнулся на симпатичный маленький проект GitHub, который конвертирует анимированные GIF-файлы в спрайты Commodore 64. Этот инструмент преобразует в спрайты высокого разрешения, поэтому я написал инструмент .NET, который преобразует в многоцветные спрайты.

Как описано в C64-Wiki, в многоцветных спрайтах биты сгруппированы попарно, а поскольку каждый такой многоцветный пиксель определяется двумя битами данных, а не одним, каждый пиксель может делать одну из четырех вещей:

  • Пиксели с битовой парой 00 кажутся прозрачными, как биты «0» в режиме высокого разрешения.
  • Пиксели с битовой парой 01 будут иметь цвет, указанный в адресе $d025.
  • Пиксели с битовой парой 11 будут иметь цвет, указанный в адресе $d026.
  • Пиксели с битовой парой 10 будут иметь указанный цвет, назначенный рассматриваемому спрайту в диапазоне $d027–d02e.

Таким образом, каждый цвет соответствует определенному делегату, который принимает позицию бита пикселя и возвращает значение, которое нужно добавить к байту, которому принадлежит пиксель:

public static IDictionary<C64Colors, Func<int, int>> ToByteAdds(this ColorsString colorsString) => new Dictionary<C64Colors, Func<int, int>> { {colorsString.Value[0].ToC64Color(), x => 0}, {colorsString.Value[1].ToC64Color(), x => (int)Math.Pow(2, 6 - x)}, {colorsString.Value[2].ToC64Color(), x => (int)Math.Pow(2, 7 - x) + (int)Math.Pow(2, 6 - x)}, {colorsString.Value[3].ToC64Color(), x => (int)Math.Pow(2, 7 - x)} };

В этом методе colorsString представляет собой строку из четырех символов, состоящую из шестнадцатеричных чисел, определяющих цвет в каждом из регистров $d020, $d025, $d026, $d027.

Партийные попугаи в Slack — это анимированные рисунки попугая какапо Сирокко. Я преобразовал некоторых милых попугаев на https://cultofthepartyparrot.com/ и позволил этим маленьким ребятам проскользнуть на экран.

В результате получилось довольно забавно:

https://www.youtube.com/watch?v=q8wslJgwOWo

Репозиторий содержит простую демонстрацию C64, так что вы можете попробовать ее сами!

Первоначально опубликовано на kristofferjalen.github.io 23 марта 2018 г.