Разработка и ромхакинг > Ромхакинг и программирование
SGDK
<< < (5/40) > >>
ALKOSHA:
Переменная fix16 странно себя ведёт.
Вроде бы инкрементируешь её на 1, а значение меняется так, словно инкрементируешь на сотые доли.
Эдакая целочисленно-дробная переменная.

Вот ещё попробовал сделать рикошет мяча, когда он достигнет 17500, а fix16ToStr показывает значение ~260.00
worm:

--- Цитата ---А вообще, сколько палитр по 16 цветов на спрайтовом слое может присутствовать, две или одна?
--- Конец цитаты ---
Хоть все 4 :) но тогда на слои background'а не останется (разве что использовать одну и ту же палитру со спрайтами.


--- Цитата ---Какие-то роботы могут быть галубыми, а какие-то розовыми среди одного и того же вида, что наводит на мысль о 2-ух палитрах на спрайт-слое.
--- Конец цитаты ---
Апельсиновый эмуль в руки и вперёд, бороздить vdp контры)))
По аналогии сделаны ниндзя в МК, один и тот же набор спрайтов с разными палитрами) Дерутся скорпион и саб зиро - это один спрайт, нарисованный дважды на экране. В слоты палитр записываются ихние палитры, в одном слоте палитра скорпиона, в другом - палитра саб зиро. Эти 2 спрайта на экране всего лишь используют разные слоты для того, чтобы отличаться по цвету друг от друга. А слоты палитр используются как угодно, нет деления для BG или спрайтовых слоёв.
ALKOSHA:
В таком случае, как заполнить 4-ый палитровый слот ?
А то первые три автоматом заполняются, а четвёртый - чёрный.

Добавлено позже:
смущает то, что тайлы ракетки налезли на бэкграунд.
А бэкграунд 320*240. То есть в видео-ОЗУ нужно каким-то образом отодвинуть тайлы ракетки чуть дальше по адресу, ведь само О3У наполовину пустое (правда там ещё буковки находятся, и собираюсь динамически менять бэкграундовую картинку).


Добавлено позже:
Надо бы на меняющийся бэкграунд ещё и палитру менять. А то одна палитра на все кадры бэкграунда не красиво смотрится. :wall:

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

--- Цитата: ALKOSHA от 02 Декабрь 2015, 02:38:26 ---Переменная fix16 странно себя ведёт.
Вроде бы инкрементируешь её на 1, а значение меняется так, словно инкрементируешь на сотые доли.

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

Этот момент вчехлил. Каждый раз, когда происходит где-то присвоение или проверка какого-то значения, нужно это делать через функцию FIX16().

--- Код: ---if(ballx>=FIX16(300)||ballx<=FIX16(1))balldx=-balldx;
--- Конец кода ---
worm:

--- Цитата ---В таком случае, как заполнить 4-ый палитровый слот ?
--- Конец цитаты ---
писАть в слот PAL3.


--- Цитата ---бэкграунд 320*240
--- Конец цитаты ---
максимальное разрешение сеги - 320x224, попробуйте подогнать картинку под этот размер.


--- Цитата ---Надо бы на меняющийся бэкграунд ещё и палитру менять.
--- Конец цитаты ---
Проще всего менять палитру с каждым кадром анимации бекграунда) на помощь придут массивы.
ALKOSHA:
Вот только где хранить разные наборы палитр ?
Насколько я понимаю, PAL0-PAL2 генерятся во время компиляции картинок.
Или же есть какая-то утилита, для импорта и хранения палитр *.act ?
worm:

--- Цитата: ALKOSHA от 02 Декабрь 2015, 17:34:09 ---Вот только где хранить разные наборы палитр ?
Насколько я понимаю, PAL0-PAL2 генерятся во время компиляции картинок.
Или же есть какая-то утилита, для импорта и хранения палитр *.act ?

--- Конец цитаты ---
Это то, за что я ненавижу SGDK - все автоматизировано. Фиг что поймешь. Все данные (бинарная графика и палитры), извлекаются во время компиляции и тут же зачищаются. Нужно все это дело разбить на отдельные задачи. Палитра берется из изображения при конвертации в генресе, чтобы разработчик игры не парился по поводу добавления тайлов и палитры напрямую. Инициализировал картинку - готово. Только отрисуй и палитру указывать не надо. Это просто ужасно.
ALKOSHA:
Подсказали заюзать VDP_setPalette(PAL3, ball_sprite.palette->data);

Ещё спрошу по динамической кастомизации набора цветов. Чтоб менять цвета внутри программы.

Добавлено позже:
Помогло.


Ещё бы разобраться с этими  синими катышками на бэкграунде.
По идее это прозрачные пиксели получились. Но в таблице цветов на первом месте стоит чёрный, а катышки находятся отнюдь не на чёрных участках.
worm:

--- Цитата ---катышки находятся отнюдь не на чёрных участках.
--- Конец цитаты ---
Похоже, конвертер графона так не считает) попробуйте перекрасить эти участки.
ALKOSHA:

--- Цитата: worm от 02 Декабрь 2015, 16:30:26 ---максимальное разрешение сеги - 320x224, попробуйте подогнать картинку под этот размер.

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

Подогнал:


Добавлено позже:
Во, теперь значительно лучше.  :cool:
worm:
Фоновый рисунок лучше ставить на BPLAN. Там используются все 16 цветов (прозрачный цвет автоматически используется как фоновый).
ALKOSHA:
Что на APLAN, что на BPLAN - синие катышки (а точнее - дырки, сквозь которые виден синий фон)

А какое основное отличие  VDP_drawImageEx() от  VDP_drawBitmapEx() ?

Добавлено позже:
Понял как убрать тайлы ракетки с бэкграунда (то бишь сместить их дальше по адресу в видео-ОЗУ). Опять же, это делается автоматом. Зависит от того, какой массив инициализировать под спрайты.
SPR_init(512); - больше адресного пространства выделится под спрайты, меньше под задник. И наоборот SPR_init(128); - при таком значении тайлы ракетки расположены уже подальше от тайлов бэкграунда.


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

--- Цитата: worm от 02 Декабрь 2015, 16:30:26 ---максимальное разрешение сеги - 320x224

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

есть функция VDP_setScreenHeight240(). Только разницы между VDP_setScreenHeight240() и VDP_setScreenHeight224() не заметил. С шириной при этом тоже игрался. Разница по ширине очевидна, а высота остаётся без изменений.
worm:
Ну тут я ещё сам не разобрался, поэтому особо толку от меня не будет. В сгдк очень много мусора, как и лишнего кода в библиотеке. segaman говорил, что больше половины поудалял хламья. Уломать бы Стефа убрать всю эту джигурду...

--- Цитата ---VDP_setScreenHeight240
--- Конец цитаты ---
странно, то наверно для ntsc aspect)
ALKOSHA:
Есть массив партиклов.


--- Код: ---int i;
for(i=0;i<80;i++)
SPR_initSprite(&sprites[i], &rain_sprite, i, i, TILE_ATTR(PAL3, TRUE, FALSE, FALSE));

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

Теперь, чтоб их всех отобразить, надо выполнить SPR_update(sprites, 80);
А как поступить, если нужно не все партиклы отобразить, а лишь определённые из этого массива?

Добавлено позже:
Хочу ещё помимо задника добавить скроллирующийся туман, и ещё всяких деталей на декорации.
Примерно как тут

Только ещё в 16 бит сатаничнее и кровавее.
Полупрозрачность тумана можно сделать дизерингом пикселей.
А вот как быть с остальными декорациями ? Слоёв бэкграунда ведь всего лишь два. Можно ли как-то динамически подгружать каждый слой из памяти в процессе отрисовки кадра?
worm:

--- Цитата ---А как поступить, если нужно не все партиклы отобразить, а лишь определённые из этого массива?
--- Конец цитаты ---
Все, что приходит на ум - рисовать по отдельности, но может ребята посоветуют что-то получше)


--- Цитата ---Можно ли как-то динамически подгружать каждый слой из памяти в процессе отрисовки кадра?
--- Конец цитаты ---
Можно использовать спрайтовых слой как слой переднего плана. Есть ещё такая вещь, как "окно", пока сам не знаю о нём ничего.
ALKOSHA:
Опа, сунулся в типы переменных, а типа bool не нашёл. 0_0
Неужто в качестве флага 0\1 нужно использовать как минимум char ?
ALKOSHA:
Этот компилятор ресурсов и спрайтовый движок - сплошной вынос мозга.

Вот, например, тут одна палитра как у мяча, так и у партиклов. Но у мяча прозрачные пиксели есть, у партиклов их нет, при том, что в таблице те пиксели находятся на первом месте у мяча и партиклов.



Далее sprite_engine.h , какой-то он мутный.

Хотел немного структурировать, чтоб всё не сливалось в единую кашу.

Sprite sprites[80];

Попытался для начала отделить спрайт мяча от остального

Sprite ball[1];
Sprite sprites[79];
...
SPR_initSprite(&ball[0], &x_sprite, fix32ToInt(ballx), fix32ToInt(bally), TILE_ATTR(PAL2, TRUE, FALSE, FALSE));
...
SPR_update(ball, 1);
SPR_update(sprites, 79);
   
Но получил полностью чёрный экран.
blackbird_ru:
Дай незнающему человеку интрумент, тот тут же его заклеймит негодным, херово сделаным, и вообще неудобно этим вашим микроскопом гвозди забивать.  :lol:

Для начала не плохо было бы игру запускать в Gens kMod Или Gens r57shell mode, чтобы была возможность смотреть как загрузились твои спрайты, палитры и бекграунды.
ALKOSHA:
 :lol: :lol: :lol: :lol:

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


--- Цитата ---Для начала не плохо было бы игру запускать в Gens kMod Или Gens r57shell mode, чтобы была возможность смотреть как загрузились твои спрайты, палитры и бекграунды.
--- Конец цитаты ---



blackbird_ru:
А ты уверен что он первым идёт в палитре на другой картинке?
В том же гимпе легко можно цвета переставлять у изображения с палитрой.

Добавлено позже:
Ну и об этом

--- Цитата: ALKOSHA ---что знающие человеки подскажут
--- Конец цитаты ---

Ты вывел только спрайт на бекграунд, а уже 3 страницы заспрашивал. Это уже что-то уровня ланкастера же.
ALKOSHA:
В Зеро Толерасте как-то на одном слое рисуют кучу НЕ-аппаратных спрайтов (будь они аппаратными, можно было бы лицезреть характерные артефакты в виде прозрачных полосок и мерцаний, как это происходит в БладШоте).
Вот этот момент интересует. Таким макаром хотелось бы сделать партиклы, декорации и мобов на одном спрайтовом слое.

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

--- Цитата ---В том же гимпе легко можно цвета переставлять у изображения с палитрой.
--- Конец цитаты ---

Да, действительно легко. Но как сделать одну палитру на разные png-файлы ?
При сохранении png палитра сохраняется именно с теми цветами, которые присутствуют на изображении.
В одном файле у меня 4 цвета,  в другом 12. И я хочу, чтоб в программе эти два файла корректно отображались при одной палитре.
В фотошопе можно сохранять и загружать палитру, но при сохранении она урезается именно до того кол-ва цветов, сколько их есть на картинке.

Было бы неплохо замостить один файл всеми спрайтами. Но какие-то спрайты могут быть 8*16, какие-то 32*32. А размер фрейма в спрайт-движке фиксированный (который указывается в gfx.res).
Навигация
Главная страница сообщений
Следующая страница
Предыдущая страница

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