Разработка и ромхакинг > Ромхакинг и программирование
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)); то спрайт получается абсолютно чёрный. То есть та палитра существует, но как её заполнить нужными цветовыми индексами ?

Добавлено позже:
В рот мне ноги...
Навигация
Главная страница сообщений
Следующая страница
Предыдущая страница

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