(12.09.2021 02:22)Berserker Wrote: Флаг 29 у отряда на поле боя говорит, что на отряде анимация жажды крови, а потому деф нужно отрисовывать с палитрой, смещённой к красному.
По смещению 1104 в структуре отряда лежит float (вещественное число) от 0 до 1.0, которое говорит, насколько нужно сдвинуть цвет каждого пикселя в цветовой модели HSV ближе к красному. 0 — ни на сколько, 0.8 — на 80%, 1.0 — полностью красный. Яркость и насыщенность тоже увеличиваются с увеличением значения поля. Если флаг установлен, то при отрисовке уже не проверяется флаг окаменения или клона. Потому при колдовстве жажды крови на клоне, клон временно рисуется без синих тонов.
Как раз занимался отрисовкой боевых дефов. Раскрашивать их в реальном времени даже современный процессор не потянет. Думал, как оптимизировать. В Г3 каждый раз копируют палитру, переводят каждый цвет в HSV, проводят манипуляции, переводят обратно в RGB — готово. 256 операций. А на картинке 200х200 операций уже 40000 + нужно успеть потом вывести картинку, даже ещё раз десять в секунду, до по 41 отряду.
(12.09.2021 03:08)Bes Wrote:хм, странно, почему разрабы решили таким путём пойти для подобного эффекта, когда у них была уже готовая схема с боевой анимацией.. лишь ещё одну картинку добавить
Так сделаны окаменение, клонирование, жажда крови.
Самый эффективный вариант. Операции над палитрой быстры.
И можно что хочешь делать: переливаться цветами, терять насыщенность, становиться конкретного оттенка.
А в PNG мы не имеем палитры. Вместо этого огромный массив пикселей. И нужны те же эффекты.
Придётся перехватить все вызовы перекраски палитры.
Идея такая: заранее для 65536 цветов считаю перекрашенные палитры по всему спектру цветов. Перехватываю функции перекраски палитры и запоминаю, какой палитрой рисовать (клон, стадия жажды крови, окаменение). При отрисовке PNG перевожу пиксель в 65536 цветов и беру для него готовый покрашенный цвет. Должно быть терпимо по скорости.
По памяти — 256 КБ * каждую из штук 10 стадией жажды крови + 1 на клон и 1 на окаменение
Короче -3 МБ памяти
Важно, чтобы эффекты на PNG-существах не выбивались из общей канвы.