Разработка и ромхакинг > Ромхакинг и программирование
SGDK
<< < (35/40) > >>
ALKOSHA:

--- Цитата ---Ещё на счёт палитры вопрос.  Я сохраняю PNG как 16-цветный.  Но иногда цвет прозрачности в СЕГЕ не совпадает с прозрачностью в PNG.  Из-за этого изображение выводится с одним потеряным цветом и без прозрачности.   Что я делаю не так и как следует конвертить?
--- Конец цитаты ---

Лично я когда маялся сегою, перетасовывал индексы в Гимпе. (Но для рисования этот убогий редактор никудышный. Все мои пиксел-арты сделаны в пэинт дот нете, оттуда же есть опция сохранения в 4bpp).
rep-stosw:

--- Цитата: ALKOSHA от 13 Ноябрь 2021, 18:41:12 ---Лично я когда маялся сегою, перетасовывал индексы в Гимпе. (Но для рисования этот убогий редактор никудышный. Все мои пиксел-арты сделаны в пэинт дот нете, оттуда же есть опция сохранения в 4bpp).
--- Конец цитаты ---

Я вообще ничего не рисую с нуля :  работаю с готовым или рипаю с эмуляторов или покупаю новое.  Делаю только цвето-коррекцию. И может немного дорисовываю по мере своих способностей.

Делаю тоже самое: использую GIMP, открываю 16-цветный PNG.  Далее Цвет => Карта => Перераспределить цветовую карту.  Вылазит окошко со всеми цветами палитры,  перетасовываю,  чтобы нулевой - был цвет фона. 

Цвета подстраиваю Genny Optimizer Palette.  Результат на реальном телеке устраивает, и с SGDK-шным rescomiper-ом дружит. Цвета вижу 1-в-1 как нарисовал.



Новый вопрос:

как средствами SGDK  делать анимирующийся TileMap ? 

Не скролить полоски, а менять отдельные тайлы в TileMap?   Типа как крутящиеся болтики на корабле в 1-м уровне  BattleToads and Double Dragon.

На голом железе лазил напрямую ручками в VRAM Plane и менял отдельные байты (номера тайлов)

Марат:

--- Цитата: rep-stosw от 18 Ноябрь 2021, 13:44:33 ---Не скролить полоски, а менять отдельные тайлы в TileMap? 
--- Конец цитаты ---
Просто менять графику нужного тайла во время кадрового прерывания, например, пересылкой посредством DMA.
ALKOSHA:
У меня было чутка говнокодерски
 :blush:

Шлёпал имейджи по заданным координатам (пульсирующая бадяга на фоне).
На производительности особо не сказалось.




Но в идеале, да, надо как-то через TILE_USERINDEX грузить графон по нужному адресу. Оффсет, видимо, надо самому смотреть через просмотрщик VRAM.



Добавлено позже:
А прикол. До сих пор среди примеров идущих в комплекте нет такой банальной штуки, как тайл-анимашка. Даже в примере с Саником фон статичен [даже стеф не осилил ^_^]

Добавлено позже:
Я вот чё ещё думаю. Наверн шлёпанье пикч (предварительно распакованных в VRAM) таки быстрее будет, чем трансфер оных из картриджа  по DMA. Ведь в данном случае содержимое памяти остаётся статичным.
Но тут заморочка с вычислением координат позиций каждого тайла. Так что надо смотреть по обстоятельствам. Если у тебя анимашка тайлов идёт в ряд, что можно в цикле бахнуть, то быстрее как в моём случае. А если рандомно раскиданы по локации, то лучше всё же менять графику в  VRAM на лету.
rep-stosw:

--- Цитата: ALKOSHA от 21 Ноябрь 2021, 03:59:29 ---А прикол. До сих пор среди примеров идущих в комплекте нет такой банальной штуки, как тайл-анимашка. Даже в примере с Саником фон статичен [даже стеф не осилил ^_^]
--- Конец цитаты ---

Да, это бы не помешало!  :)

В случае с анимациями придётся наверное свой велосипед делать.  Две стратегии:

1. Перезаписывать весь тайл. DMA поможет.
2. Перезаписывать  участок VRAM, отведённый под TileMap (1 байт)

Первый способ более медленный, зато есть возможность подгружать тайлы с ROM.

---

Столкнулся с такой проблемой. Делаю переключение персов (1 перс - свой атлас анимаций, своя палитра, свои спрайты).  Список спрайтов заполняется(идёт вниз) до конца по мере переключения между персами.  В настоящее время нужен только один перс.

Спасла дефрагментация Sprite VRAM.  С ней перс пересоздаётся в той же VRAM и перерасхода нет:


--- Код: ---void Person_Create(struct Person *p,const SpriteDefinition *sd)
{
 SPR_releaseSprite(p->sprite);

 SPR_defragVRAM();

 p->sprite=SPR_addSprite(sd,p->X,p->Y,TILE_ATTR(PAL0,FALSE,FALSE,p->H));

 SPR_setAnim(p->sprite,0);   //always 0
 SPR_setFrame(p->sprite,27); //IDLE

 SPR_update();
 SYS_doVBlankProcess();

 VDP_setPalette(PAL0,sd->palette->data);
}

--- Конец кода ---

Ещё пришлось костыль поставить перед переключением палитры:


--- Код: --- SPR_update();
 SYS_doVBlankProcess();

--- Конец кода ---

Потому что палитра меняется сразу,  а спрайты только после SPR_Update.
Иначе видно переключение палитры во время смены персонажа и старого персонажа с новой палитрой.

Переключение персонажей сделал - так же как в Bucky O'Hare. По нажатию кнопки.

Есть ли в SGDK способ отложенно апдейтнуть палитру  синхронно с SPR_Update ?  Просто у меня уже один SPR_Update в цикле есть, а при пересоздании перса приходится его вызывать ещё раз, чтобы избежать артефактов с палитрой.

Можно конечно, программными флагами, но а вдруг есть более красивое решение?  :D

ИМХО немного нелогично получается:  палитра перезаписывается сразу, а спрайты после SPR_Update.


Werton:

--- Цитата: rep-stosw от 21 Ноябрь 2021, 15:41:05 ---Потому что палитра меняется сразу,  а спрайты только после SPR_Update.
--- Конец цитаты ---
ну на экране то спрайт перерисуется только после SYS_doVBlankProcess(), а не SPR_Update().

--- Цитата: rep-stosw от 21 Ноябрь 2021, 15:41:05 ---VDP_setPalette(PAL0,sd->palette->data);
--- Конец цитаты ---

--- Цитата: rep-stosw от 21 Ноябрь 2021, 15:41:05 ---Есть ли в SGDK способ отложенно апдейтнуть палитру  синхронно с SPR_Update ?  Просто у меня уже один SPR_Update в цикле есть, а при пересоздании перса приходится его вызывать ещё раз, чтобы избежать артефактов с палитрой.
--- Конец цитаты ---
VDP_setPalette() - устарела, вместо нее лучше юзать PAL_setPalette(u16 numPal, const u16* pal, TransferMethod tm), а для изменения палитры с задержкой до vblank используй с аргументом DMA_QUEUE в качестве TransferMethod.
зы: там еще есть PAL_setPaletteDMA (u16 numPal, const u16 *pal), но она тоже устарела и работает почему то криво.
rep-stosw:

--- Цитата: Werton от 21 Ноябрь 2021, 20:18:33 ---вместо нее лучше юзать PAL_setPalette(u16 numPal, const u16* pal, TransferMethod tm), а для изменения палитры с задержкой до vblank используй с аргументом DMA_QUEUE в качестве TransferMethod.
--- Конец цитаты ---

Теперь всё чётко, как и хотел! Спасибо! :)

SGDK позволяет отлавливать номер отрисовываемой строки, чтобы щёлкнуть палитру?  HBlank.  Хочу во время обратного хода луча по строке поменять палитру, так как штатных 4-х слотов явно не хватает.
Марат:
Заведи счётчик, который будешь обнулять во время vblank, и инкрементировать во время hblank.
rep-stosw:
Накопилось несколько вопросов по музыкальной части:

1) Есть трекер Deflemask последней версии.  Какие есть подводные камни при экспорте трека с Дефлемаска в формат XGM, пригодный для запуска не сеге?

2) Есть ли трекеры для сеги лучше, чем Deflemask?  С условием получения на выходе формата, нужного для сеги (каналы YM2612, DAC, PSG).

3) Реально ли перенести XM, IT, MOD, S3M и им подобные на XGM/VGM ?  Можно ли автоматизировать процесс?  Например, с OpenMPT перенести нотки на Deflemask, а потом вручную подобрать инструменты.

4) Пишут ли новую музыку для игр сеги или выдирают /конвертируют/каверят  уже существующие композиции?

5) Драйвер звука XGM.  Какие у него подводные камни?  Можно ли мне быть уверенным, что музыка будет хорошо играть на 5 FM каналах + 4 PSG,  а озвучки в игре (просто семплы) - в 4-х каналах , каждый семпл 14 кГц моно 8 бит.   Такая раскладка - насколько хороша в играх на практике?
ALKOSHA:

--- Цитата: rep-stosw от 25 Ноябрь 2021, 12:27:08 ---Есть ли трекеры для сеги лучше, чем Deflemask?  С условием получения на выходе формата, нужного для сеги (каналы YM2612, DAC, PSG).
--- Конец цитаты ---

YM2612, DAC, PSG используется и в VGMmusicMaker'e. Насколько он хуже/лучше ДефектМаска - не смею судить, так как последнее не пробувал.


--- Цитата: rep-stosw от 25 Ноябрь 2021, 12:27:08 ---Реально ли перенести XM, IT, MOD, S3M и им подобные на XGM/VGM ?
--- Конец цитаты ---

В этих форматах, точно нет. Да и на сеге с этим тот ещё гимор, ведь у Z80 в распоряжении всего-то 8 кб, где помимо сэмплов и паттернов нужно ещё хранить и сам плеер. Вообще трекерная музыка использовалась только в ToyStory (интро/эндинг) и Демосцене Stuck Somewhere in Time (где очень примитивные семплы с закосом под SID), ВСЁ! больше примеров нет.



--- Цитата: rep-stosw от 25 Ноябрь 2021, 12:27:08 ---4) Пишут ли новую музыку для игр сеги или выдирают /конвертируют/каверят  уже существующие композиции?
--- Конец цитаты ---

Всё это возможно при нынешнем инструментарии. Savaged Regime так и вовсе реаранжирует олдовые треки в более качественном виде.

Добавлено позже:

--- Цитата: rep-stosw от 25 Ноябрь 2021, 12:27:08 ---5) Драйвер звука XGM.  Какие у него подводные камни?  Можно ли мне быть уверенным, что музыка будет хорошо играть на 5 FM каналах + 4 PSG,  а озвучки в игре (просто семплы) - в 4-х каналах , каждый семпл 14 кГц моно 8 бит.   Такая раскладка - насколько хороша в играх на практике?
--- Конец цитаты ---

Ну там среди примеров есть же. Вроде норм играется всё.
В играх на практике у каждого был свой драйвер, у кого-то были около-биперные 1-2 бита сэмплы (Altered Beast, Golden Axe 1), у кого-то микшировалось несколько каналов с DPCM сжатием (MK3, EWJ).

Добавлено позже:
К слову, встречал даж VST для фруктов, где можно писать чиптюн на сегу. Именно не фейковый, а с возможностью дальнейшего экспорта в VGM. Но ломанной версии так и не нашёл, поэтому побаловаться не удалось.
mr287cc:

--- Цитата: rep-stosw от 25 Ноябрь 2021, 12:27:08 ---Драйвер звука XGM.  Какие у него подводные камни?
--- Конец цитаты ---

Рассинхрон FM и цифры. Очень заметно на длинных цифровых петлях. Исходный трек клеил в Deflemask, выгружал для использования с SGDK, запускал в нескольких разных билдах Gens, везде был просто адовый рассинхрон. причину искать не стал, забил. Может за два года в этой цепочке инструментов что-то поменялось и всё починили.
rep-stosw:

--- Цитата: ALKOSHA от 25 Ноябрь 2021, 17:28:23 ---В этих форматах, точно нет. Да и на сеге с этим тот ещё гимор, ведь у Z80 в распоряжении всего-то 8 кб, где помимо сэмплов и паттернов нужно ещё хранить и сам плеер. Вообще трекерная музыка использовалась только в ToyStory (интро/эндинг) и Демосцене Stuck Somewhere in Time (где очень примитивные семплы с закосом под SID), ВСЁ! больше примеров нет.
--- Конец цитаты ---

Я имел ввиду, что исходные семплы XM/MOD/IT заменять на FM-инструменты.  Ну может только голос и ударные дуть в DAC.  По идее, должно хватить.   Плюс к тому же, вроде XGM движок Стефа вычитывает музыку c ROM'a (переключением страницы), а не с ОЗУ Z80.  Можно километры играть. Но могу ошибаться.

Ну или можно весь  трек сделать в ADPCM(сжатие в 4 раза по сравнению с WAV), разжимать семплы и дуть их в DAC.  А спец-звуки наоборот - делать FM синтом+PSG.


--- Цитата ---К слову, встречал даж VST для фруктов, где можно писать чиптюн на сегу. Именно не фейковый, а с возможностью дальнейшего экспорта в VGM. Но ломанной версии так и не нашёл, поэтому побаловаться не удалось.
--- Конец цитаты ---

Этот? : https://www.youtube.com/watch?v=wU4COz6Gc4U

SEGA GENESIS / MEGADRIVE VST FM SYNTH

Копал его.  Даже готов был купить.   Но оттолкнул гемор с конверсией в VGM:

https://alyjameslab.blogspot.com/2016/02/fmdrive-vst-ym2612-and-spsg-vst-sn76489.html

Фрути лупс тем и фигов, что нифига не даёт экспорта в дамп регистров и временных задержек.   Только Wav, mp3 или midi.


--- Цитата ---Рассинхрон FM и цифры. Очень заметно на длинных цифровых петлях. Исходный трек клеил в Deflemask, выгружал для использования с SGDK, запускал в нескольких разных билдах Gens, везде был просто адовый рассинхрон. причину искать не стал, забил. Может за два года в этой цепочке инструментов что-то поменялось и всё починили.
--- Конец цитаты ---

Возьму на заметку.
ALKOSHA:

--- Цитата: rep-stosw от 26 Ноябрь 2021, 06:15:57 ---Я имел ввиду, что исходные семплы XM/MOD/IT заменять на FM-инструменты.
--- Конец цитаты ---

Я писал треки только в VGM-мейкере. Там под DAC отведён только один канал, как он есть физически на сеге. Ну и частоту/громкость/цикличность и прочие таблично-волновые выкрутасы, присущие упомянутым форматам, в vgm мейкере нельзя на ходу регулировать.

Может в Дефлекмаске можно, не вникал. Та и лимиты на продолжительность семплов не проверял.
Имхо, для музла сежный фм-синтез самодостаточный, и звучит куда сочнее амижки. А микширование 4ёх виртуальных каналов в один физический даже теряет в разрядности, вместо 8ми бит выйдет 6, никакой интерполяции, хриплый шум, нафиг оно нужно... :neznayu:
rep-stosw:
Так, я не понял.  Что за фигня с лимитами спрайтов?

Создал спрайт размером 200x168 пикселей.

Запихал его в res:

--- Код: ---SPRITE S  "S.png"   25 21 NONE 0 NONE SPRITE
--- Конец кода ---

При сборке пишет, что исчерпан лимит:


--- Цитата ---Sprite S_animation0_frame0 uses 42 internal sprites(is above limit 16). Try reduce size or split it...
--- Конец цитаты ---

Какие ещё 16 спрайтов?  Сега поддерживает до 80 спрайтов.

Ну и что, что до этого объявлял другие спрайты - я же их динамически использую, а не одновременно.

Что я делаю не так?
rep-stosw:

--- Цитата: rep-stosw от 28 Ноябрь 2021, 14:07:06 ---Какие ещё 16 спрайтов?  Сега поддерживает до 80 спрайтов.
--- Конец цитаты ---

Очевидно, Стеф залимитил максимальное число спрайтов на 1 фрейм анимации. Печально.   Толкнул в плейн свой мега-спрайт.

Обнаружил новую проблему.   Делаю по HBLANK изменение цвета:


--- Код: ---u16 gradientColor=0x0000;

Declare your H-Int function like this:

void hint()
{
 PAL_setColor(0,gradientColor);
 gradientColor^=0x0200;
}

Then prepare your H-Int gradient effect using this from your main code:

        // each 4 lines
        VDP_setHIntCounter(4);

        // enable H-Int
        VDP_setHInterrupt(TRUE);

        // set H-Int callback method
        SYS_setHIntCallback(hint);
       
        ...
       
        while(TRUE)
        {
          ..
          SYS_doVBlankProcess();

        }


--- Конец кода ---

Идут полоски чёрная-синяя-...   Но тайловая плоскость артефачит жутко: часть тайлов при обновлении не дорисовываются.

Запрещаю HINT - плоскость анимируется без артефактов.  Полоски естественно не рисуются.

Плоскость анимирую так:


--- Код: ---void BG_Update(void)
{
 static u8 t=0;
 static u8 m=0;

 if(!(t&31))
 {
  switch(m)
  {
   case 0: //0..7
    VDP_setTileMapEx(BG_A,TBG1.tilemap,TILE_ATTR_FULL(PAL3,FALSE,FALSE,FALSE,ind1),16/8,56/8,0*(208/8),0,208/8,168/8,CPU);
   break;
   case 8:
    VDP_setTileMapEx(BG_A,TBG1.tilemap,TILE_ATTR_FULL(PAL3,FALSE,FALSE,FALSE,ind1),16/8,56/8,1*(208/8),0,208/8,168/8,CPU);
   break;
   case 9:
    VDP_setTileMapEx(BG_A,TBG1.tilemap,TILE_ATTR_FULL(PAL3,FALSE,FALSE,FALSE,ind1),16/8,56/8,2*(208/8),0,208/8,168/8,CPU);
   break;
   case 10: //10..17
    VDP_setTileMapEx(BG_A,TBG1.tilemap,TILE_ATTR_FULL(PAL3,FALSE,FALSE,FALSE,ind1),16/8,56/8,3*(208/8),0,208/8,168/8,CPU);
   break;
  }

  m++;
  if(m==18)m=0;
 }

 t++;
}

--- Конец кода ---

Как связаны между собой HINT, палитра и тайловая плоскость?

P.S.  И кстати, словил ограничение на число спрайтов по горизонтали.  Уже при попытке нарисовать 17-й спрайт он затирается.  А не 20, как пишут интернеты.
ALKOSHA:

--- Цитата ---P.S.  И кстати, словил ограничение на число спрайтов по горизонтали.  Уже при попытке нарисовать 17-й спрайт он затирается.  А не 20, как пишут интернеты.
--- Конец цитаты ---
Интернеты всё правильно пишут, если речь про спрайты размером 16х16 пикселей. То есть это аккурат 320 пикселей по горизонтали.
И да, в режиме 256х224 лимиты жоще - 16 спрайтов per scanline. Стыдно сегисту не знать об этом.


--- Цитата ---Создал спрайт размером 200x168 пикселей.
--- Конец цитаты ---
Так это виртуальный спрайт, состоящий из нескольких хардварных. Смотри фрагментацию оных, оно же как мозаика складывается из комбинаций:
8×8, 8×16, 8×24, 8×32, 16×8, 16×16, 16×24, 16×32, 24×8, 24×16, 24×24, 24×32, 32×8, 32×16, 32×24, 32×32

Добавлено позже:

--- Цитата: rep-stosw от 29 Ноябрь 2021, 12:53:35 ---Идут полоски чёрная-синяя-...   Но тайловая плоскость артефачит жутко: часть тайлов при обновлении не дорисовываются.
--- Конец цитаты ---
Анимировать по Set_TileMap в данном случае не самая удачная затея, на мой дилетантский взгляд.
Возможно, корректнее использовать VDP_loadTileData, или что-то такое, чтоб просто менять содержимое графики в VRAM, а не на ходу ещё и задавать таблицу позиций тайлов.
rep-stosw:

--- Цитата: ALKOSHA от 29 Ноябрь 2021, 15:03:29 ---Интернеты всё правильно пишут, если речь про спрайты размером 16х16 пикселей. То есть это аккурат 320 пикселей по горизонтали.
И да, в режиме 256х224 лимиты жоще - 16 спрайтов per scanline.
--- Конец цитаты ---

Я не говорил, что у меня 256x224.  :)  Как раз наоборот - 320x224.   Значит 20 спрайтов в длину.


--- Цитата ---Стыдно сегисту не знать об этом.
--- Конец цитаты ---

Сегоиду!  :lol:

Итак, возвращаясь к проблеме лимита спрайтов в строку.

Есть 9 составных спрайтов 40x40 пикселей,  которые бьются на 4 сеговских аппаратных спрайта так:
32x32
8x32
32x8
8x8

Итого в длину имеем 9x2 = 18 спрайтов.   Лимита на линию быть не должно.   А он есть!   Почему?

Картинка под постом.   Начиная с 17-го спрайта идёт залимичивание.

Проверил на эмуляторах Gens Kmod и Fusion.  Со снятой галкой  "Sprite Limit"  затирания правых спрайтов нет.

Что я делаю не так?   :neznayu:


ALKOSHA:
rep-stosw, ты слишком переоцениваешь возможности сегулечки... :-\
40 (пикселей в ширину) умножь на 9, затем задумайся о сказанном мною выше.

Мне ток одно интересно, куда тебе столько спрайтов?
Ultracore перенасыщен спрайтами, фон частично состоит из них. Да, бывают незначительные артефакты при лимитах на  строку, но всё равно смотрится круто.
Ищи альтернативу спрайтам в слоях.

Ещё с этой гадостью боролись мерцанием (а-ля донди), вспомни руки Huge Robot в контре хардкорпс.
Ещё наверн за счёт HBlank_Int можно мерцать незримо для игрока, ну это в теории. На крайняк в sgdk
есть битмапа, где можно рисовать программные спрайты, тормозно, шакально и сердито.


Коль у тебя спрайты строго горизонтально относительно друг друга будут в ряд, и двигаются лишь по оси Y, то тут и слоем такой эффект "волны" можно замутить скроллами по столбцам. Шоб не двигалось всё остальное на фоне, надо это делать через window plane (но учти, "окно" сжирает VRAM  под дополнительную инфу о своих тайл-мапах.)

Ищо можно замостить левый или правый столбец экрана HUD интерфейсом, если у тебя часто будет много спрайтов в один ряд. Вспомни Gauntled, Gain Ground или Red Zone. Такой жырный интерфейс расположен сбоку там не просто так.
rep-stosw:

--- Цитата: ALKOSHA от 30 Ноябрь 2021, 09:01:22 ---rep-stosw, ты слишком переоцениваешь возможности сегулечки... :-\
40 (пикселей в ширину) умножь на 9, затем задумайся о сказанном мною выше.
--- Конец цитаты ---

ALKOSHA, решения найдены:

1. Сделать амплитуду качания спрайтов больше.
или
2. Сократить ширину спрайтов с 40 до 32.

Оба решения отлично работают в отдельности!


--- Цитата ---40 (пикселей в ширину) умножь на 9, затем задумайся о сказанном мною выше
--- Конец цитаты ---

40*9 > 320.  Ясно, понял   :)


--- Цитата: ALKOSHA от 30 Ноябрь 2021, 09:01:22 ---Коль у тебя спрайты строго горизонтально относительно друг друга будут в ряд, и двигаются лишь по оси Y, то тут и слоем такой эффект "волны" можно замутить скроллами по столбцам. Шоб не двигалось всё остальное на фоне, надо это делать через window plane (но учти, "окно" сжирает VRAM  под дополнительную инфу о своих тайл-мапах.)

--- Конец цитаты ---

В моём случае не прокатит. Потому что первые 5 спрайтов и последние 4 используют два разных слота палитры.


--- Цитата: ALKOSHA от 30 Ноябрь 2021, 09:01:22 ---Вспомни Gauntled, Gain Ground или Red Zone. Такой жырный интерфейс расположен сбоку там не просто так.
--- Конец цитаты ---

Я в такое не играл.
ALKOSHA:

--- Цитата: rep-stosw от 30 Ноябрь 2021, 10:15:30 ---Я в такое не играл.
--- Конец цитаты ---
А ты точно заСЕГер... то есть, сегоид?
В конце концов, можешь погуглить скрины.


--- Цитата: rep-stosw от 30 Ноябрь 2021, 10:15:30 ---Сделать амплитуду качания спрайтов больше.
--- Конец цитаты ---
Я ж говорю, это колыхание ты можешь сделать и фоном, дабы в пустую не расходовать спрайты. Скролл по столбцам работает с шагом 16 пикселей, что как раз вписывается в размеры 32 по ширине.


Добавлено позже:

--- Цитата: rep-stosw от 30 Ноябрь 2021, 10:15:30 ---Потому что первые 5 спрайтов и последние 4 используют два разных слота палитры.

--- Конец цитаты ---
Что мешает задать отдельные слоты на отдельные тайлы?
Палитра/приоритет/flipH/flipV задаются индивидуально на тайл же, а не на весь слой.
Навигация
Главная страница сообщений
Следующая страница
Предыдущая страница

Перейти к полной версии