| Разработка и ромхакинг > Ромхакинг и программирование |
| SGDK |
| << < (22/40) > >> |
| Sharpnull:
--- Цитата: Werton от 30 Январь 2019, 14:24:06 ---но фпс маловато --- Конец цитаты --- Там рейкастинг использует неэффективный постоянный шаг, если сделать по уму, то должно быть не меньше 20 FPS. Я просто сразу не осилил и не тратил время. Плюс можно доп. оптимизации сделать, в том числе fix32 на fix16 заменить, но тогда макс. размер уровня 256x256. Конечно на ASM стабильные 30FPS с простым геймплеем возможны. --- Цитата: Skay от 30 Январь 2019, 12:38:05 ---Е.В. Шишкин, А.В. Боресков - Компьютерная графика - 2001 --- Конец цитаты --- Читал немного начало, тогда мне тоже показалась хорошей. На русском таких книг в принципе не много и все старые. -------- ALKOSHA, я забыл сказать одну идею: можно сделать половинки тайлов, тогда градации высоты увеличатся на 2. |
| ALKOSHA:
Линейная матеша тема очень жоская для меня, в рейкастинге я теоретик. Но в мега-шустрое псевдо-3д на основе тайлов я верую. Тайлы - это стихия сеги (как и любой другой консоли тех лет). https://youtu.be/XZljQT8k3Wg?t=1265 Добавлено позже: Да чё там "псевдо" На тайлах даже полноценное 3д вполне реально, если даже спектрум это дело тянет. Чего уж говорить про сегу. https://youtu.be/weFH_y1LGBw?t=207 Добавлено позже: --- Цитата: Sharpnull от 30 Январь 2019, 19:50:04 --- я забыл сказать одну идею: можно сделать половинки тайлов, тогда градации высоты увеличатся на 2. --- Конец цитаты --- На ZX и такое встречал в демах, уменьшение размера атрибутов за счёт мультиколора. Но опять же, Z80-ому для этого дела надо впрягаться по полной, а в сеге на это отведён VDP. |
| Sharpnull:
--- Цитата: ALKOSHA от 30 Январь 2019, 19:50:53 ---Но в мега-шустрое псевдо-3д на основе тайлов я верую. Тайлы - это стихия сеги (как и любой другой консоли тех лет). https://youtu.be/XZljQT8k3Wg?t=1265 --- Конец цитаты --- Вроде, деревья - горизонтальный скроллинг, фон и земля - вертикальный. Гениально. Правда впечатляющих козырей у сеги не много, в Overdrive 2 показано наверно максимальное на что способна приставка. |
| ALKOSHA:
Деревья - скроллинг? Разве? Там одно дерево относительно другого смещается. То есть на одном из слоёв тайлы обновляются раз за разом, а не скроллятся, вроде как. Скроллами анимированы фон/земля + имитация наклона камеры + руль мотака построчными скроллами. А сцена эта ни что иное как калька всё с того же спектрума. И это 83-ий год, а какой шустрый графон. Тем более делалось для ранних 16кб тачек. https://youtu.be/snpr8hFIf3U Добавлено позже: --- Цитата: Sharpnull от 30 Январь 2019, 20:10:56 ---в Overdrive 2 показано наверно максимальное на что способна приставка. --- Конец цитаты --- Да, видел, мощнейшее, особенно зум фракталов заставляет лезть глаза на лоб 0_0. Жаль демка требует дешифратор банков памяти Street Fighter 2 и аж 8 метров флехи. Ну и полигональное 3д в конце можно было бы развить в полноценную игру. Но никто, конечно, этим заниматься, увы, не станет. |
| Skay:
Sharpnull --- Цитата: Sharpnull от 30 Январь 2019, 19:50:04 ---Читал немного начало, тогда мне тоже показалась хорошей. На русском таких книг в принципе не много и все старые. --- Конец цитаты --- Ну этож матчасть, особо нового там ничего нет. По сути немного алгебры и проективная геометрия в прикладном виде, разбавленое чуть теорией. Да и книга полностью самодостаточна, это большой плюс. После нее уже складывается понимание что есть что, и куда примерно двигаться. Если конечно интересно пилить свой движок :) |
| mgdriver:
Привет всем форумчанам! Помните уровень от первого лица в Toy story (SMD), там где в лабиринте надо было на время найти всех игрушек-инопланетян? Так вот создатель этой игры на своём ютуб канале показывал исходник этого уровня на ассемблере. Здесь прикрепляю видео файл, если разбить его на кадры, то можно разобрать практически весь исходник. Код снабжён комментариями, а в конце файла есть также и карта самого уровня в текстовом представлении. |
| Sharpnull:
mgdriver, дали бы ссылку на видео сразу: Осталось только выучить ASM. |
| mgdriver:
--- Цитата: Sharpnull от 12 Март 2019, 17:52:23 ---Осталось только выучить ASM. --- Конец цитаты --- Это да. (Ну может кому-то и сгодится этот сурс.) |
| xenudo:
https://yadi.sk/d/FDqrrtTQumvDHw дальше сами: удалить красный цвет с иллюстраций, а потом можно пытаться что то распознать лол. Самых первых и самых последних строк на кадрах нет. |
| m4x1k:
Подскажите, плжалуйста, как в SGDK можно легче всего затемнить/осветлить цвет? К примеру, на заднем фоне есть вывеска, цвет палитры изначально неизвестен, поэтому загружать в цикле заранее готовые палитры не получится. На заднем плане, нужно сделать цикл, чтобы цвет моргал на три-четыре тона ярче, тускнее. От неё же блики на некоторые объекты. То есть не вся палитра должна меняться, а лишь несколько цветов из палитры заднего фона. Все функции Fade работают по полной палитре и до полного затемнения экрана. Сейчас сделал задуманное через прерывание Фейда. Более-менее на безрыбье, но темнится вся палитра в слоте. Ищу универсальный способ. Теоретически можно для каждого цвета в палитре использовать SetColor, но там нужна замудрёная формула, которая будет по 9 битам из нынешнего цвета высчитывать оттенок ниже/выше... |
| Sharpnull:
m4x1k, алгоритм есть в исходном коде, можно сделать на основе него. VDP_fade() - общая функция, там в fromcol и tocol задаются начальный и конечный индексы из палитр (0-63). Если индексы цветов идут подряд и нужно одновременно затенять/осветлять только одну последовательность, то всё просто. Если вы не собираетесь менять другие цвета в палитре, то можно пропускать произвольные индексы, для этого в конечную палитру нужно поставить те же начальные значения, тогда они не будут изменяться. По коду алгоритм преобразования цветов несложный, обычная интерполяция. В VDP_initFading() задаются массивы начального цвета fading_palR/G/B и шаг fading_stepR/G/B. Шаг равен (цвет_конечный - цвет_начальный) / количество_кадров и хранится как s16 с 8 битами дробной части. В VDP_doFadingStep() прибавляется шаг, а в setFadePalette() компоненты цвета округляются, отбрасывается дробная часть и объединяются в конечный цвет. --- Цитата: m4x1k от 15 Март 2019, 22:37:18 ---прерывание Фейда --- Конец цитаты --- Что это? Кстати, не так давно имена функций fade изменились, так что не забывайте обновлять SGDK. И вместо: --- Код: ---#define fix32Mul(val1, val2) (((val1) * (val2)) >> FIX32_FRAC_BITS) --- Конец кода --- стало --- Код: ---#define fix32Mul(val1, val2) (((val1) >> (FIX32_FRAC_BITS / 2)) * ((val2) >> (FIX32_FRAC_BITS / 2))) --- Конец кода --- Что менее подвержено переполнению, хотя на одну операцию и больше. |
| m4x1k:
--- Цитата: Sharpnull от 16 Март 2019, 04:08:45 ---Что это? --- Конец цитаты --- VDP_interruptFade, тормозит выполнение функции. Дело в том, что сам Fade работает немного не так, что хотелось бы. Fade затемняет цвет и может в момент притухания из коричнего, к примеру, тёмнозелёный цвет сделать. Но всё равно, ответ очень помог, не додумался под себя изменить функцию. Sharpnull, ответьте, если не сложно, ещё на пару вопросов. Скажите, пожалуйста, а в sgdk поддержка Sega Cd присутствует, помимо аудиодорожек? Интересует именно увеличение объёма данных в игре. Сейчас на 4мб не разгуляешься. Я ранее читал, что на маппере от SSFII можно РОМ до 32мб сделать, есть в sgdk поддержка подобного? Каким образом изображения редактируете? Через Фотошоп палитра постоянно выстраивается таким образом, что чёрный цвет оказывается самым дальним. И потом приходится вручную редактировать палитру, дабы выставить его первым. Есть какой-то более удобный способ? |
| Ogr:
--- Цитата: m4x1k от 16 Март 2019, 05:41:08 ---Каким образом изображения редактируете? Через Фотошоп палитра постоянно выстраивается таким образом, что чёрный цвет оказывается самым дальним. И потом приходится вручную редактировать палитру, дабы выставить его первым. Есть какой-то более удобный способ? --- Конец цитаты --- в фотошопе перед конвертации в ргб и редактированием сохраняешь палитру, потом при индексации цветов её загружаешь. |
| Sharpnull:
--- Цитата: m4x1k от 16 Март 2019, 05:41:08 ---Сейчас на 4мб не разгуляешься. Я ранее читал, что на маппере от SSFII можно РОМ до 32мб сделать, есть в sgdk поддержка подобного? --- Конец цитаты --- У SSFII смена банков. Stef (разработчик SGDK), сделал демо BadApple на 8MB без смены банков. Исходный код (bin на 8MB). Там же MetalliC (присутствует на нашем форуме) пишет про поддержку в Mega Everdrive. Проверил эмуляторы: Fusion, Genesis Plus GX, Exodus - не поддерживают; GensKMod, Picodrive - поддерживают. В общем, проблемы одни, здесь ещё что-то про отсутствие поддержки Sega CD и 32X, если > 4MB. --- Цитата: m4x1k от 16 Март 2019, 05:41:08 ---Через Фотошоп палитра постоянно выстраивается таким образом, что чёрный цвет оказывается самым дальним. --- Конец цитаты --- В какой момент у вас это происходит? Например, если открывать png, то палитра остаётся какой была. Ogr дал совет, как поступать, если у вас есть готовая палитра и вы хотите из RGB изображения сделать индексированное. У меня мало опыта, всё никак не доделаю свой маленький проект. Для рисования лучше использовать специальные редакторы вроде GraphicsGale. Не нужно забывать, что цветов 512 и компоненты у них кратны 32 (начиная с 0). У меня был код на Python с использованием PIL, чтобы разные спрайты подгонять под одну палитру, которую я вручную вводил в коде. Хотя для любителей терминала, ImageMagick тоже умеет заменять на заданную палитру. |
| MetalliC:
--- Цитата: Sharpnull от 16 Март 2019, 08:01:02 ---В общем, проблемы одни, здесь ещё что-то про отсутствие поддержки Sega CD и 32X, если > 4MB. --- Конец цитаты --- всё так, можно сделать картридж больше 4Мбайт, но оно будет работать только на "голых" мегадрайвах, а на SegaCD или 32X - шиш. |
| m4x1k:
--- Цитата: Sharpnull от 16 Март 2019, 08:01:02 ---В какой момент у вас это происходит? Например, если открывать png, то палитра остаётся какой была. Ogr дал совет, как поступать, если у вас есть готовая палитра и вы хотите из RGB изображения сделать индексированное. У меня мало опыта, всё никак не доделаю свой маленький проект. Для рисования лучше использовать специальные редакторы вроде GraphicsGale. Не нужно забывать, что цветов 512 и компоненты у них кратны 32 (начиная с 0). У меня был код на Python с использованием PIL, чтобы разные спрайты подгонять под одну палитру, которую я вручную вводил в коде. Хотя для любителей терминала, ImageMagick тоже умеет заменять на заданную палитру. --- Конец цитаты --- Происходит с самого начала. Я делаю скриншот с нужного мне ресурса (в моём случае — это эмулятор Neko Project) и у меня уже изначально палитра в таком порядке, где чёрный цвет не первый идёт. Это решается с помощью Save for web в Фотошопе, но я думал, есть более быстрые способы. По поводу размера, я так понял, нет возможности универсальной на данный момент. Мне размер нужен для большого объёма PCM. Вижу два пути: 1) Я почитал ещё раз про маппер SSFII, тот же Stef говорит, что это маппер самой Сеги, а не особенность одной игры. И что, теоретически, мы все можем использовать его. Теоретически это до 32мб объём данных, где в РОМе можно по мере необходимости подгружать данные по адресам. Одно лишь остаётся проблемой: как эмуляторы детектят саму игру с маппером и будет ли выделяться ли под неё больший объём памяти, или она фиксированно будет видеть игру с 5мб. К примеру, когда только вышел Pier Solar, он позиционировался как первый 64мбитный картридж, на деле же там, насколько я помню, РОМ 2мб, который дублируется в данных несколько раз. Ни о каких 8мб и не пахло. 2) Второй способ упомянутый режим Sega CD, который так же был показан в примере Stef’ом. Благо сейчас, наверное, большинство эмуляторов поддерживает эту функцию. В примере он сказал, что таким образом можно получить доступ не только к музыке, но и файловой системе. Возможно ли как-то будет читать и проигрывать PCM данные с диска с помощью SGDK? :neznayu: И ещё вопрос: может, кто-то уже сталкивался. Каким образом можно проще всего организовать вывод собственного VWF (разноширинной шрифт) 8x16, 16x16? Сейчас при помощи функции можно выводить моноширинной шрифт 8x8, и самое неудобное — выводится всего два цвета. Может, у кого-то уже есть написанная функция?.. Или есть другой способ вывода? :-\ Спасибо всем за ответы. А так, мне очень понравился SGDK, я честно лет 10 хотел научиться под Сегу делать хоть что-то, но думал, что это в сто раз сложнее. Оказалось всё очень понятно и доступно даже для новичков. |
| MetalliC:
--- Цитата: m4x1k от 16 Март 2019, 18:11:09 ---1) Я почитал ещё раз про маппер SSFII, тот же Stef говорит, что это маппер самой Сеги, а не особенность одной игры. --- Конец цитаты --- что-то ты не так понял. маппер это чипы на картридже, т.е. таки "особенность" игры или игр, а не самой приставки. --- Цитата: m4x1k от 16 Март 2019, 18:11:09 ---как эмуляторы детектят саму игру с маппером и будет ли выделяться ли под неё больший объём памяти, или она фиксированно будет видеть игру с 5мб --- Конец цитаты --- маппер типично детектится по коду игры в заголовке ROM-а, памяти выделяется столько сколько надо --- Цитата: m4x1k от 16 Март 2019, 18:11:09 ---К примеру, когда только вышел Pier Solar, он позиционировался как первый 64мбитный картридж, на деле же там, насколько я помню, РОМ 2мб, который дублируется в данных несколько раз. Ни о каких 8мб и не пахло. --- Конец цитаты --- где ты вычитал такую глупость ? игра там реально 8 мегабайт |
| m4x1k:
--- Цитата: MetalliC от 16 Март 2019, 19:41:23 ---что-то ты не так понял. маппер это чипы на картридже, т.е. таки "особенность" игры или игр, а не самой приставки.маппер типично детектится по коду игры в заголовке ROM-а, памяти выделяется столько сколько надогде ты вычитал такую глупость ? игра там реально 8 мегабайт --- Конец цитаты --- Про маппер немного напутал. Говорил это Chilly Willy и он имел ввиду, что это маппер самой Сеги, а не SSFII. Про Pier Solar, я понятия не имею, как я так мог подумать... Я помню, что когда появились первые дампы, я ковырялся в игре и определённо помню, что у меня ввшло то, что я описал выше. Сейчас я смотрю РОМ, действительно, 8мб. Мистика какая-то. :blush: Либо я кривой дамп смотрел, либо того хуже — демку. У них тоже был свой маппер, или схожий с тем, что у SSFII? |
| m4x1k:
Подскажите, как работать с сырыми данными, которые через Rescomp (BIN) грузишь? Как он записывается? Я загружаю в него данные (шрифт), затем мне нужно разбить всё это добро на массив по 32 байта (тайл 8 на 8). Как обращаться к этим данным? Сперва пытался организовать это через TILESET, но так и не смог понять, как присвоить в массив определённый тайл, не загружая весь тайлсет в VRAM. Помогите советом. Какая-то хрень получается. Через Tileset делаю всё верно, но выходит ошибка. Обозначаю ресурс: TILESET vwf_font "gfx/font.bmp" NONE Создаю переменную массива. u32 myTiles[2][8]= {{ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }}; Передаю массиву данные из тайлсета: myTiles[0] = vwf_font.tiles[32/4*1]; Ругается на: src\main.c|142|error: assignment to expression with array type| В чём может быть проблема? --------------- Решил проблему иным путём. Воспользовался memcpy. |
| Sharpnull:
--- Цитата: m4x1k от 16 Март 2019, 18:11:09 ---Каким образом можно проще всего организовать вывод собственного VWF (разноширинной шрифт) 8x16, 16x16? Сейчас при помощи функции можно выводить моноширинной шрифт 8x8, и самое неудобное — выводится всего два цвета. Может, у кого-то уже есть написанная функция?.. Или есть другой способ вывода? :-\ --- Конец цитаты --- Начинал делать порт одной текстовой игры, сделал вывод текста со сглаживанием через копирование отдельных символов в тайлы. Главная проблема - медленно, полное заполнение экрана текста заметно (заполнял построчно), хотя можно отображать весь экран после заполнения VRAM, главное чтобы видеопамяти хватило. Задача несложная, но есть коварные моменты. Могу скинуть позже, только код не очень. |
| Навигация |
| Главная страница сообщений |
| Следующая страница |
| Предыдущая страница |