| Разработка и ромхакинг > Ромхакинг и программирование |
| SGDK |
| << < (4/40) > >> |
| worm:
--- Цитата ---Похоже, что transparent в любом случае 0x00 (чёрный, вне зависимости от расположения в таблице индексов). --- Конец цитаты --- Нет) Скорее всего, Вы поменяли местами цвета только для графического редактора. Для проверки, можно взять апельсиновый эмулятор, залезть в VDP RAM и глянуть палитры. --- Цитата ---В процессе компиляции крашит --- Конец цитаты --- Попробуйте "почистить" проект - удалите все созданные в процессе компиляции файлы, включая res/music.h и res/gfx.h Также отслеживайте ошибку couldn't allocate heap, эксклюзив для счастливых обладателей виндузы, начиная с висты. Если выскочила - перекомпилируйте проект. С нуля. |
| ALKOSHA:
--- Цитата: worm от 26 Ноябрь 2015, 03:30:22 ---Попробуйте "почистить" проект - удалите все созданные в процессе компиляции файлы, включая res/music.h и res/gfx.h --- Конец цитаты --- Разве эти хэдеры создаются в процессе компиляции? Они ведь нужны до начала компиляции. Добавлено позже: По-моему, надо предварительно удалять файлы с расширениями *.o ; *.bin во всех каталогах. Тогда ничего не зависает во время компиляции. Добавлено позже: --- Цитата: worm от 26 Ноябрь 2015, 03:30:22 --- Вы поменяли местами цвета только для графического редактора. --- Конец цитаты --- тогда не ясно, как поменять нумерацию. Что фотошоп, что IrfanView позволяет лишь редактировать цвет определённого индекса, но сами индексы по кастомному порядку выстроить не получается. |
| worm:
--- Цитата: ALKOSHA от 26 Ноябрь 2015, 06:43:08 ---Разве эти хэдеры создаются в процессе компиляции? Они ведь нужны до начала компиляции. --- Конец цитаты --- Создаются :) --- Цитата: ALKOSHA от 26 Ноябрь 2015, 06:43:08 ---тогда не ясно, как поменять нумерацию. --- Конец цитаты --- Ну я же предложил Вам способ) 1) заходите в ФШ в mode > color table. 2) берете в наглую первый цвет, делаете его сиреневым. 3) заливаете им фон - вуаля! У нас прозрачный фон. 4) заделываете сиреневые пиксели в спрайте другим цветом. Готово) |
| ALKOSHA:
--- Цитата: worm от 26 Ноябрь 2015, 07:56:47 ---Создаются :( --- Конец цитаты --- Действительно... :-\ С индексами разобрался, спасибо. Просто думал, что можно как-то иначе, не прогибаясь под палитру, прогнуть её под себя. Теперь пора и в исходник залезть. Чего-то виснет прога, словно указатели на адрес спрайта выходят за пределы оного. На два плэйна вывести картинку успевает, музло инициализируется (и играется), idle-спрайт тоже выводится. Но дальше - виснет. Не реагирует на нажатие кнопок, да и через некоторое время образуется пиксельная каша (скрин ранее уже привёл) Спрайт-щит разрешением 640*480 (пока что). Может там нужно какое-то особое разрешение по высоте\ширине ? |
| worm:
--- Цитата: ALKOSHA от 26 Ноябрь 2015, 14:22:29 ---Спрайт-щит разрешением 640*480 (пока что). Может там нужно какое-то особое разрешение по высоте\ширине ? --- Конец цитаты --- Дело явно не в этом. Только что проверил, с 640*480 работает корректно, хоть и тормозит. Похоже, Вы где-то наколдовали не того) Попробуйте взять девственного соника и вставить туда свой спрайт (не забывая про параметры в gfx.res). |
| ALKOSHA:
--- Цитата: worm от 26 Ноябрь 2015, 16:06:55 --- хоть и тормозит. --- Конец цитаты --- А какова причина тормозов ? По крайней мере девственный сцаник нормально прыгает, почти как в оригинале. |
| worm:
--- Цитата: ALKOSHA от 26 Ноябрь 2015, 17:50:00 ---А какова причина тормозов ? --- Конец цитаты --- Скорей всего - сам движок данного примера, любезно набыдлокоденныйписанный для нас разрабом на скорую руку. Опять же, можно взять апельсина и сравнить сцанников (оригинальную игру и sgdk пример) в VDP. Тайлы синяка оригинальной игры анимируются "на месте", в то время, как анимация спрайтов из sgdk примера больше походит на бегущую строку. А вот в пингвинах-насильниках такого безобразия нет :) |
| ALKOSHA:
В тех пингвинах даж не знаю с чего начать. Залез в мэйн. Думаю, что функцию SetupSystem(), в которой инициализируется движок, можно даже и не трогать. Далее LevelManager_Init(), затем следует бесконечный цикл из функций опроса кнопок и апдейта объектов. :ohmy: тут уже мега-сложна. :ohmy: В частности рассмотрим тот же менеджер уровней, вроде бы безобидные полторы сотни строчек кода, но обращается он ещё к уйме функций остальных файлов.... охххх.... Переделать движок под себя будет крайне сложно. Добавлено позже: Видать там даже проверка коллизии с точностью до пикселя. |
| worm:
--- Цитата: ALKOSHA от 26 Ноябрь 2015, 18:54:49 ---Видать там даже проверка коллизии с точностью до пикселя. --- Конец цитаты --- Там есть коллижен боксы (в паузе можно сделать их видимыми) :) |
| ALKOSHA:
Так или иначе, но за основу придётся всё же брать быдлокод с тем голубоватым ежом, а не пингвином. |
| worm:
--- Цитата: ALKOSHA от 26 Ноябрь 2015, 19:51:12 ---Так или иначе, но за основу придётся всё же брать быдлокод с тем голубоватым ежом, а не пингвином. --- Конец цитаты --- Как учебный материал - сгодится, а вот для написания конечного проекта - врагу не пожелал бы :lol: |
| ALKOSHA:
На форуме автор SGDK обещал к следующей версии допилить оптимизацию на спрайты. Спрайты в примере не только напрямую из ROM'a читаются, но и вхолостую выводятся те знакоместа, где пикселей не должно быть (transparent). Тупо монолитный прямоугольник. На спектруме idle-спрайт агрессора мне удавалось запихнуть в 241 байт (по отдельным знакоместам). |
| worm:
--- Цитата: ALKOSHA от 28 Ноябрь 2015, 19:21:51 ---На форуме автор SGDK обещал к следующей версии допилить оптимизацию на спрайты. --- Конец цитаты --- Наверно, с пингвинов движок свистнет :lol: |
| ALKOSHA:
Чего-то у XGMTool поперёк горла застряют vgm-трэки, взятые с tfmmaker от Ширу. Добавлено позже: И ещё на счёт инициализации спрайтов. Вот инициализируется один спрайт. --- Код: --- SPR_initSprite(&sprites[0], &x_sprite, X1, Y1, TILE_ATTR(PAL2, TRUE, FALSE, FALSE)); SPR_update(sprites, 1); --- Конец кода --- Дабы инициализировать второй, нужно приписать что-то типа такого? --- Код: --- SPR_initSprite(&sprites[1], &y_sprite, X2, Y2, TILE_ATTR(PAL2, TRUE, FALSE, FALSE)); SPR_update(sprites, 2); --- Конец кода --- И затем в бесконечном цикле апдейтить SPR_update(sprites, 1); SPR_update(sprites, 2); ? Добавлено позже: компилятор ресурсов крашит, когда добавил строчку ещё одного спрайта в gfx.res. --- Код: ---IMAGE bgb_image "bgb.png" -1 IMAGE bga_image "bga.png" -1 SPRITE ball_sprite "ball.png" 4 4 -1 SPRITE x_sprite "x.png" 8 4 -1 --- Конец кода --- |
| worm:
--- Цитата: ALKOSHA от 29 Ноябрь 2015, 23:02:50 ---Чего-то у XGMTool поперёк горла застряют vgm-трэки, взятые с tfmmaker от Ширу. --- Конец цитаты --- Если Вы имеете в виду искажения при воспроизведении, это, скорее всего, "фича" проигрывателя. У меня была та же проблема, не исправил. --- Цитата: ALKOSHA от 29 Ноябрь 2015, 23:02:50 ---И ещё на счёт инициализации спрайтов. --- Конец цитаты --- Тут уже методом "ошиб и пробок", пока не добьетесь желаемого результата :) я пока до добавления спрайтов не дошел - стараюсь меню оптимизировать и выбор персонажа. --- Цитата: ALKOSHA от 29 Ноябрь 2015, 23:02:50 ---компилятор ресурсов крашит, когда добавил строчку ещё одного спрайта в gfx.res. --- Конец цитаты --- Проверьте спрайт. Замените его на уже существующий с новым именем, вот так... --- Код: ---IMAGE bgb_image "bgb.png" -1 IMAGE bga_image "bga.png" -1 SPRITE ball_sprite "ball.png" 4 4 -1 SPRITE x_sprite "ball.png" 4 4 -1 --- Конец кода --- Если ошибки не возникнет - дело в самом png. |
| ALKOSHA:
Таки дело в png-файле. :cool: --- Цитата ---Если Вы имеете в виду искажения при воспроизведении, это, скорее всего, "фича" проигрывателя. --- Конец цитаты --- До воспроизведения дело не доходит. Фатал эррор во время компиляции. :cool: :cool: Добавлено позже: Всё. Дошло. Надо было во music.res не XGM указывать, а VGM. Но почему-то в случае с музлом из вСуника стояло именно XGM, при том, что сам файл *.vgm. Добавлено позже: Скомпилировало, но музла не слыхать. |
| worm:
--- Цитата: ALKOSHA от 30 Ноябрь 2015, 17:42:25 ---Скомпилировало, но музла не слыхать. --- Конец цитаты --- Попробуйте на девственном сцанике с параметром xgm. Если кина не будет - причина в файле. Либо возьмите сразу другой vgm, музыку из МК1, например (проверено лично). Если ошибки не будет и будет воспроизводиться - причина, опять же, в самом vgm файле. И не забывайте чистить проект перед каждой компиляцией (желательно блендаметом), следить за ошибкой couldn't allocate heap и каждый раз, при ее возникновении, проклинать виндузу :D |
| ALKOSHA:
Добавлено позже: Добавлено позже: Музло с мортал-комбата тоже молчит. http://www.zophar.net/music/vgm/mortal-kombat-[mortal-kombat-shinken-kourin-densetsu]-vgm-.html Добавлено позже: При перемещении спрайта - он подрыгивался, словно происходил рассинхрон с кадровой развёрткой. закомментировал в цикле //VDP_waitVSync(); - подрыгивания пропали. Разве должно происходить не наоборот? |
| worm:
Насчет палитр, проверьте, чем она может перебиваться. Возможно, вы загружаете палитру фона в тот же слот, который использует для своей палитры спрайт, тем самым искажая цвет спрайта. --- Цитата ---Музло с мортал-комбата тоже молчит. --- Конец цитаты --- При обоих XGM и VGM? Даже на девственнике? --- Цитата ---Разве должно происходить не наоборот? --- Конец цитаты --- Значит где-то еще синхрон выполняется, одно другое сбивает (возможно в самой библиотеке, хотя не должно быть такого). |
| ALKOSHA:
--- Цитата ---Насчет палитр, проверьте, чем она может перебиваться. --- Конец цитаты --- Перебивается она палитрой первого спрайта. А вообще, сколько палитр по 16 цветов на спрайтовом слое может присутствовать, две или одна? Если глянуть на содержимое VDP, то там 4 палитры - первый план, второй план, спрайтовый слой... и ещё одна палитра - все чёрные цвета, пока неясно для чего отведена. Но мне кажется, это вторая палитра для спрайт-слоя. В той же Contra Hard Corps когда набегает армия робытов-убийц на нашего бесстрашного героя, то среди этого рандомного месива можно заметить, что они разделяются на два оттенка. Какие-то роботы могут быть галубыми, а какие-то розовыми среди одного и того же вида, что наводит на мысль о 2-ух палитрах на спрайт-слое. А может она просто динамически переключается по индексам, чёрт этих японцев знает. Добавлено позже: Если написать SPR_initSprite(&sprites[1], &ball_sprite, fix32ToInt(posx - camposx), 10, TILE_ATTR(PAL3, TRUE, FALSE, FALSE)); то спрайт получается абсолютно чёрный. То есть та палитра существует, но как её заполнить нужными цветовыми индексами ? Добавлено позже: В рот мне ноги... |
| Навигация |
| Главная страница сообщений |
| Следующая страница |
| Предыдущая страница |