| Разработка и ромхакинг > Ромхакинг и программирование |
| SGDK |
| << < (33/40) > >> |
| worm:
Ну что, вот и 1.6 вышла) прям как CS теперь Главная особенность - багофикс хэндлера вертикальных прерываний, который переехал в SYS_doVBlankProcess() во избежание потенциальных багов из-за забытых включений/отключений. |
| ALKOSHA:
Как средствами СДК выжать резолюцию 320х448 ? |
| SPOT:
--- Цитата: ALKOSHA от 21 Январь 2021, 08:51:12 ---Как средствами СДК выжать резолюцию 320х448 ? --- Конец цитаты --- Присоединяюсь к вопросу. |
| Segaman:
я бы не стал: 1) это разрешение понимают только телевизоры. захватить его с консоли будет нельзя 2) графен переключается в какой-то хитрый режим. кажется тайлы становятся вдвое выше. т.е. 8*16 вместо 8*8 3) в доке по сеге об этом режиме написано ничтожно мало 4) никогда не видел этот режим где-то кроме второго соника. в СГДК этот режим скорее всего обойдён стороной 5) время потраченное на изучение этого режима можно более эффективно потратить на разработку в обычном разрешении |
| ALKOSHA:
--- Цитата: Segaman от 21 Январь 2021, 15:11:35 ---никогда не видел этот режим где-то кроме второго соника. --- Конец цитаты --- Ещë в combat cars при игре на двоих, если мне память не изменяет. Ещë в спайдермэне в финале когда бомба взрывается строчную развëртку начинает колбасить. Подозреваю, тоже трюки с этим режимом, или с HBlank-ом. Наверное, и режим этот на самом деле никакой не режим, а всë те же программные трюки с HBlank + Scroll по прерыванию H_Int. Но это лишь догадки. |
| Werton:
зарелизена версия 1.62 вот что автор отмечает --- Код: ----Easier SGDK usage (not anymore requiring PATH patching nor using GDK env var) -A nice optimization on sprite resource. Before associated metadata (sprite size, frame info..) could take quite a bit of space (~15% of the total resource size) which has been reduced to about a quarter of that (less than 5% of total size). -Even easier bank switching mechanism (do not require anymore data alignment and spending time with the symbol file for that). -Several new samples (h-int effects for instance). --- Конец кода --- еще из заметного, максимальный размер спрайта вырос до 248 пикселей, максимальный размер рома до 12 MB, из-за оптимизации спрайта, также частично изменилась его структура. |
| worm:
--- Цитата: Werton от 13 Март 2021, 08:27:01 ---зарелизена версия 1.62 --- Конец цитаты --- Отлично :cool: как раз хотел возобновить разработку одного проекта, который начал еще с незапамятных времен, когда прерывания приходилось вручную отключать))) сейчас затестим Товарищи модеры, может переименуем таки тему в просто "SGDK" наконец?) Тема настройки давно себя исчерпала и общение перешло на глобальную тему) |
| mr287cc:
--- Цитата: Dragon от 02 Май 2020, 20:30:15 ---Скиньте, пожалуйста, примеры хороших игр, написанных благодаря SGDK. Я тут почитал, Segаman жаловался на баги в ней --- Конец цитаты --- Небольшие но симпатичные игры делают у нас в Новосибирске. Кажется, на их сайте все игры для MD сделаны на SGDK. Вот эта, возможно, тоже SGDK. |
| bolon667:
Здравствуйте. Скажите пожалуйста, как реализовать в SGDK, коллизию между спрайтом и тайлами? :neznayu: |
| Sharpnull:
bolon667, также как и везде. У спрайта не может быть коллизий, это графика (если не учитывать VDP sprite collision flag). Для движущегося объекта задать структуру описывающую размеры (несколько прямоугольников, например), хранить уровень в сетке (двумерный массив). Перед движением получить будущие координаты объекта, разделить на 8 (или 16 в зависимости от размера блоков уровня), чтобы получить индекс в сетки уровня и проверить можно ли двигаться. Придётся считать для нескольких точек. В зависимости от ситуации и оптимизацией есть варианты. В самом SGDK нет возможностей для расчёта коллизий, кроме структур BoxCollision, CircleCollision, Collision в sprite_eng.h. Можете поискать примеры кода на SGDK, спокойно найдёте реализацию. |
| rep-stosw:
Попробовал этот SGDK в действии. В целом неплох, но есть несколько замечаний с практической точки зрения: 1) Нельзя задавать разную задержку между кадрами в разных анимационных циклах: к примеру тот же Соник - в WAIT у него 2 кадра, в RUN - 6 кадров. В итоге либо RUN медленный, либо WAIT слишком быстрый: А хочется каждый анимационный цикл со своей задержкой... 2) Нельзя сделать "двунаправленную" анимацию: вся анимация проигрывается от начала до конца, а нужен ещё такой вариант: от начала к концу, затем обратно - с конца к началу. Это заставляет дублировать некоторые фреймы. К примеру нужна анимация: 0,1,2,3,4,3,2,1... Это требует вставки дублей фреймов - 1,2,3. В то время как "двунаправленная" анимация потребует на 3 фрейма меньше 3) Нельзя сделать переходные анимации по двум направлениям. К примеру: одновременно приседание + вскидывание руки с оружием. Здесь уже задействованы разные фреймы по двум направлениям. 4) Проблемы с потерей цветов. Исходный файл 4 бита на точку - 16 цветов. Палитра 8 бит на компоненту. Из-за ограничений сеги, палитра должна приводиться в 3 бита на компоненту. SGDK неправильно это делает. Он просто делит каждую компоненту на 32( сдвиг вправо на 5) , а затем сдвиг влево на 5 (умножает на 32). В итоге часть цветов приводятся к одному и происxодит потеря цвета. Например - два оттенка зелёного цвета: 17,68,1 и 26,92,4 - SGDK сконвертит в одинаковые: 0,64,0 А должно быть: 32,64,0 и 32,96,0 тоесть - не откидывать дробную часть, а арифметически округлять. Придётся допиливать самостоятельно и очень многое... |
| Sharpnull:
--- Цитата: rep-stosw от 31 Октябрь 2021, 07:46:42 ---Придётся допиливать самостоятельно и очень многое... --- Конец цитаты --- Это не игровой движок, пункты 1), 2), 3) не обязаны быть, возможности анимации сделаны "чтобы было", нет смысла улучшать, потому что разные требования у разных игр. Можно было бы много всего добавить для удобства. --- Цитата: rep-stosw от 31 Октябрь 2021, 07:46:42 ---4) Проблемы с потерей цветов. --- Конец цитаты --- Исходную картинку нужно добавлять уже с кратными значениями, которые вам нужны, и не будет проблем, заодно будете видеть результат сразу. Проблема решается элементарным скриптом. В любом случае, когда делается игра хорошо и нужно использовать цвета по максимуму, то используется одна палитра сразу для нескольких объектов, значит объекты рисуются исходя из общей конечной палитры. Это уже исключает бездумное добавление картинки без подготовленной палитры. --- Цитата: rep-stosw от 31 Октябрь 2021, 07:46:42 ---А должно быть: 32,64,0 и 32,96,0 тоесть - не откидывать дробную часть, а арифметически округлять. --- Конец цитаты --- Нет, не должно. Не знаю что такое "арифметически округлять", а "откидывать дробную часть" - это округление к меньшему. Кому как нравится. |
| rep-stosw:
--- Цитата: Sharpnull от 31 Октябрь 2021, 08:26:35 ---В любом случае, когда делается игра хорошо и нужно использовать цвета по максимуму, то используется одна палитра сразу для нескольких объектов, значит объекты рисуются исходя из общей конечной палитры. Это уже исключает бездумное добавление картинки без подготовленной палитры. --- Конец цитаты --- А как быть, если нужно сделать порт с игры ПК на сегу? Допустим, есть спрайтовый атлас, но там RGB 8:8:8 . Стоит задача эффективно конвертнуть в 16 цветов с минимальной потерей качества. Я пока делаю так: в IrfanView уменьшаю число цветов до 16 и сохраняю в 16-цветный PNG или BMP. Качество меня не радует. Есть ли скипт- или способ сделать круче? Например - как дизеринг на этой картинке : Это атлас из Alien Soldier - на спрайтах виден дизеринг в "шахматную клеточку", который увеличивает качество изображения. Есть ли программы, превращающие RGB 8:8:8 в такой дизеринг? В Irfan View дизеринг НЕ подходит, он слишком шумный и без шага настройки. |
| Sharpnull:
--- Цитата: rep-stosw от 31 Октябрь 2021, 11:54:39 ---Стоит задача эффективно конвертнуть в 16 цветов с минимальной потерей качества. --- Конец цитаты --- Для Mega Drive нужно 15 цветов, не считая фонового или прозрачности. Photoshop хорошо уменьшает цвета (вкладка Save fo Web), но это неудобно делать, если много однотипно обрабатывать. Ещё на основе существующей палитры можно подогнать картинку, похожее можно сделать в Python через Pillow (PIL). Color quantizer (http://x128.ho.ua/color-quantizer.html) - хороший, рядом с кнопкой OK опции, там много вариантов дизеринга. И я не нашёл лучше этой программы для PNG с альфа-прозрачностью, когда у каждого цвета в палитре ещё значение прозрачности (от 0 до 255). Консольный вариант - TruePNG (http://x128.ho.ua/pngutils.html) имеет меньше возможностей и немного другой алгоритм, но тоже хороший для альфа-прозрачности, а через Python это получалось не очень. Картинки с индексированным цветом и альфа-прозрачностью нужны для PS2/PSP, например. Нужно пробовать другие варианты, где могло улучшиться. Я пробовал когда-то ImageMagick, но что-то не нравилось. На счёт округления цветов, если делать как вы хотели, то будет неравномерное округление: 0-15 -> 0 (16 значений), 16-47 -> 32 (32 значения), ..., 208-255 -> 224 (48 значений). |
| Ti_:
--- Цитата: rep-stosw link=topic=70308.msg1511669#msg1511669 ---А должно быть: 32,64,0 и 32,96,0 --- Конец цитаты --- Уже неправильно. Цвета должны быть: 0,36,72, .. с шагом в 36. Такие выдаёт большая часть эмуляторов. А если под железо делать там тем более другие цвета, из эмулей их выдаёт например blastem. Добавлено позже: --- Цитата: rep-stosw от 31 Октябрь 2021, 11:54:39 ---Есть ли скипт- или способ сделать круче? --- Конец цитаты --- Можешь попробовать RetroGraphicsToolkit, там есть на выбор несколько алгоритмов дизеринга и уменьшения цветов. Только сама программа крайне неудобная, сложно разобраться. Добавлено позже: --- Цитата: rep-stosw от 31 Октябрь 2021, 11:54:39 ---Есть ли скипт- или способ сделать круче? Например - как дизеринг на этой картинке : --- Конец цитаты --- Что сделать? Ты выложи для начала исходную картинку и что у тебя получилось. |
| Ogr:
--- Цитата: rep-stosw от 31 Октябрь 2021, 11:54:39 ---Допустим, есть спрайтовый атлас, но там RGB 8:8:8 . Стоит задача эффективно конвертнуть в 16 цветов с минимальной потерей качества. Я пока делаю так: в IrfanView уменьшаю число цветов до 16 и сохраняю в 16-цветный PNG или BMP. Качество меня не радует. --- Конец цитаты --- А нужно еще при сохранении использовать сеговскую палитру, Которая состоит всего из 512 цветов: в результате чего качество упадёт еще ниже. в общем, если хочешь чтобы графика выглядела вменяемо, без ручной работы не обойтись. |
| Werton:
--- Цитата: rep-stosw от 31 Октябрь 2021, 07:46:42 ---Нельзя задавать разную задержку между кадрами в разных анимационных циклах...А хочется каждый анимационный цикл со своей задержкой... --- Конец цитаты --- Нет же, хочется отдельную задержку на каждый кадр, но не очень, т.к. делается это просто :) --- Цитата: rep-stosw от 31 Октябрь 2021, 07:46:42 ---2) Нельзя сделать "двунаправленную" анимацию: вся анимация проигрывается от начала до конца, а нужен ещё такой вариант: от начала к концу, затем обратно - с конца к началу. Это заставляет дублировать некоторые фреймы. К примеру нужна анимация: 0,1,2,3,4,3,2,1... Это требует вставки дублей фреймов - 1,2,3. В то время как "двунаправленная" анимация потребует на 3 фрейма меньше --- Конец цитаты --- rescomp выкидывает дублирующие кадры из конечных ресурсов, так что от дублей ром жирнее не станет. |
| ALKOSHA:
Есть же тулза, через которую можно регулировать исходную палитру. Genesis Optimizer : Pals http://gendev.spritesmind.net/page-tools.html Радует, что наконец-то добавили нативную поддержку фонов более физических размеров плейна. Но карту коллизий всё равно надо велосипедить. а у VDP нет ли часом аппаратной проверки оверлапа спрайта с конкретным тайлом? Даже у Атари2600 было подобное (консоль затачивалась чисто под понг). |
| rep-stosw:
--- Цитата: Sharpnull от 31 Октябрь 2021, 12:39:29 ---Color quantizer (http://x128.ho.ua/color-quantizer.html) - хороший, рядом с кнопкой OK опции, там много вариантов дизеринга. --- Конец цитаты --- Спасибо, программа действительно конвертит в 16 цветов лучше, чем IrfanView. --- Цитата: Ogr от 31 Октябрь 2021, 16:16:23 ---А нужно еще при сохранении использовать сеговскую палитру, Которая состоит всего из 512 цветов --- Конец цитаты --- Использую палитру Sega Genesis.pal : https://gendev.spritesmind.net/forum/viewtopic.php?t=3192 --- Цитата: Werton от 31 Октябрь 2021, 20:13:57 ---rescomp выкидывает дублирующие кадры из конечных ресурсов, так что от дублей ром жирнее не станет. --- Конец цитаты --- Это очень хорошо! :) --- Цитата: Werton от 31 Октябрь 2021, 20:13:57 ---Нет же, хочется отдельную задержку на каждый кадр, но не очень, т.к. делается это просто --- Конец цитаты --- Как это сделать средствами SGDK ? Пока приходят в голову 2 идеи: 1) Распилить атлас на отдельныве анимации и задать им разное время. 2) Сделать самостоятельно процедуры анимации - с нужными задержками и переходами между фреймами в одном большом атласе. --- Цитата: Ti_ от 31 Октябрь 2021, 14:00:45 ---Что сделать? Ты выложи для начала исходную картинку и что у тебя получилось. --- Конец цитаты --- На ТВ изображение теряет деталицацию: не видно лица девушки, костюм сливается в один цвет. Исходный фрагмент атласа (RGB 8:8:8): Сконверченный в 16 цветов: Вот к примеру, на этих спрайтах размытие на экране ТВ не убивает детализацию - у лисы видны глаза, уши, а корабль прорисован чётко: Есть ли какие-нибудь правила, которыми руководствуются художники при рисовании спрайтов для экрана ТВ (ЭЛТ) ? Вот, набросал небольшой полигон для испытаний: Ещё на счёт коллизий не совсем понятно. Можно ли сделать коллизию с точностью до пиксела? Или только на сетку, которая кратна 8 ? Сейчас получается - нога слева может висеть в воздухе (расстояние менее 8), нога справа - нормально. |
| ALKOSHA:
--- Цитата ---Есть ли какие-нибудь правила, которыми руководствуются художники при рисовании спрайтов для экрана ТВ (ЭЛТ) ? --- Конец цитаты --- В древности пиксель-артисты сразу видели результат прямо на своём ЭЛТ экране. Щас лучше рисовать с учётом того, как видно на ЖК. ЭЛТхи вымирают. А тобло у твоей бабы плохо видно просто из-за того, что оно 4х4 пикселя. Тут не то что на ЭЛТ, на ЖК особо не разберёшь, если не вглядываться. Не нравится такой расклад - делай гидроцефала чиби-онимэ, либо делай с естественными пропорциями, но крупный спрайт. Вообще редко у кого в 2д платформерах с ОТНОСИТЕЛЬНО естественными пропорциями были различимы физиономии. Вспомни контру хард корпс, или же кастлу симфонию ночи (шо то, шо это одинаково красиво на ЖК и ЭЛТ, но при этом рож не разглядеть) . Под суб-пиксели ты всё равно не подстроишься, так как у тебя спрайт подвижен. Да и это было более актуально для CGA composite. Добавлено позже: --- Цитата --- - у лисы видны глаза, уши --- Конец цитаты --- Потому что оно более онимушное (лупоглазое), чем твоя бабца. Ваш кэп. Добавлено позже: --- Цитата ---Сейчас получается - нога слева может висеть в воздухе (расстояние менее 8), нога справа - нормально. --- Конец цитаты --- Разве нельзя сделать проверку с оффсетом, и в зависимости от этого поменать кадр позы , будто стоит на краю обрыва? Ладно. Ну допустим, есть у тебя per-pixel колижн, дальше что?) Бабца всё равно на раскорячку стоит. То есть энивей нужен кадр другой стойки. Или придумать что-то с левел-дизайном, как в том же варлоке: чтоб особо не париться со стойкой на наклонных поверхностях,сделали foreground, закрывающий ноги. Добавлено позже: проверка коллизий откуда-то из примеров взята, или же свой велосипед? Добавлено позже: --- Цитата ---костюм сливается в один цвет --- Конец цитаты --- Ещё бы он не сливался. Синий и зелёный находятся по соседству друг с другом в спектре. Читни теорию цвета,пагугли цветовые круги Вообще, твоей тйолке не хватает объёму. Пропорции ещё более-менее сносные. Но вот шейдинг хромает. И светотень, это не просто изменение яркости одного и того же цвета. Тут меняются все три компоненты HSL Сега своими цветовыми ограничениями наставляет тебя на путь истинный (это на снес криворукие никогда не исправлялись, и делали мыльно-пластиновое убожество), а сежка - самое то для закалки художественного скилла. |
| Навигация |
| Главная страница сообщений |
| Следующая страница |
| Предыдущая страница |