Разработка и ромхакинг > Программирование

[SMD] SGDK

<< < (39/42) > >>

SPOT:
Кто подскажет как используя

--- Код: ---Map * MAP_create (const MapDefinition *mapDef, VDPPlane plane, u16 baseTile)
--- Конец кода ---
Назначать приоритет слоя отдельным тайлам на картинке?

DON:
в доке компилятора ресурсов сказано, что можно использовать
https://github.com/Stephane-D/SGDK/blob/master/bin/rescomp.txt


--- Цитата ---Tips:
You can use the extra bits of 8 bit indexed image to specify extra information in the tilemap data but then you have to ensure
that all pixel from a same tile (block of 8x8 pixels) use the same value otherwise rescomp will generate an error.
    bit 4-5: palette index (0-3) so it allows to use the 4 available palettes to draw your MAP.
    bit 6: should be 0 (not used)
    bit 7: priority information (0=LOW 1=HIGH)
--- Конец цитаты ---

Ясно? Если что гуглопереведи
UPD: Очень кропотливая работа, если использовать те редакторы, которые использует 95% юзеров.
То есть создав свою палитру с этими битам-шмитами, сможешь сделать тайлы всех вариантов (только они будут выглядеть странно на ПК из-за служебных битов в палитре.)
Поэтому народ пишет свои редакторы тайловых карт, что не сложно.

SPOT:
Это я всё видел, мне неясно как на исходной картинке менять приоритет тайла.

--- Код: ---bit 7: priority information (0=LOW 1=HIGH)
--- Конец кода ---
Вот каким инструментом и как это можно сделать? Учитывая, что исходным изображением является картинка уровня.

DON:
я там отредактировал.
Ну не важно совершенно каким инструментом.
у тебя есть палитра 16 цветов, например.
оставляешь ее
добавляешь на нужных местах в палитре новые цвета с учетом использования этих служебных битов.
И рисуешь изображение "новыми цветами" для тех тайлов, где этот приоритет == 1.

Рисовать можно любым редактором Photoshop, Gimp, Aseprite, GALE, MOTION ND и т.п.
лишь бы палитра была indexed. И что важно, в каждом тайле 8х8 на рисунке
цвета должны иметь одни и те же служебные биты. Чтобы ресурс компилер смог правильно тайлу выбрать номер палитры и  приоритет.

Мне скоро это понадобится самому. Я буду использовать Aseprite, скорее всего. + в 1.3 версии встроят TileEditor/ надеюсь, он тоже подойдет.

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

УПД: А вообще на этот вопрос ответили 2 страницы назад. Там варианты решений с картинками ) + автор написал себе утилитку, которая все делает .
https://www.emu-land.net/forum/index.php/topic,70308.720.html
Нам такое не подходит.
И да, палитру можно держать в спецальном отдельном файле, если что.

rep-stosw:

--- Цитата: SPOT от 31 Январь 2022, 09:33:50 ---Вот каким инструментом и как это можно сделать? Учитывая, что исходным изображением является картинка уровня.
--- Конец цитаты ---

Пришлось самому писать утилиту.  Потому что из стандартных решений ничего не подошло.  Уровни рисую в Tiled, два слоя - видимые (платформы по приоритетам), третий слой - для физики,  плюс размещаю противников.

Ниже скрин: T-образная платформа имеет приоритет ниже, чем спрайты.  Остальные платформы  -приоритет выше, чем у спрайта.

ALKOSHA:
Вынес ф-цию в отдельный модуль.
В хэдере

--- Код: ---#ifndef BACKGND_H_INCLUDED
#define BACKGND_H_INCLUDED
void update_box();
public void init_back();
public void update_back();
#endif // BACKGND_H_INCLUDED

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

В Си-файле backgnd.c


--- Код: ---#include <genesis.h>
#include "globalvar.h"
#include "gfx.h"
#include "sprite.h"
public void init_back()
{
..
}
и тд.

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

В каких случаях может выбивать такой эррор?


--- Цитата ---src\backgnd.c|14|error: expected '=', ',', ';', 'asm' or '__attribute__' before 'void'|
--- Конец цитаты ---



Добавлено позже:
убрал "public", собралося. Странно. Ладно...

rep-stosw:

--- Цитата: ALKOSHA от 06 Февраль 2022, 18:48:37 ---убрал "public", собралося. Странно. Ладно...
--- Конец цитаты ---

В Си-шных хедерах слово public никогда не ставится. Это лишнее и приведёт к синтаксической ошибке.

Добавлю: к переменным в хедере ставится слово extern.

Werton:

--- Цитата: ALKOSHA от 06 Февраль 2022, 18:48:37 ---В Си-файле backgnd.c

Код:
#include <genesis.h>
#include "globalvar.h"
#include "gfx.h"
#include "sprite.h"
public void init_back()
{
..
}
и тд.

--- Конец цитаты ---
Еще #include "backgnd.h" забыл, ошибка конечно не из-за этого была, но всё же.

rep-stosw:
Вышел новый релиз SGDK v. 1.7 : https://github.com/Stephane-D/SGDK/releases/tag/v1.70

Кто-нибудь пробовал перенести свои существующие проекты на эту версию SDK ?
У меня почему-то в игре в какой-то момент пропадают спрайты, карта уровня перестаёт прокручиваться, и всё повисает (кроме музыки) с этой версией SDK.

Пока принял решение остаться на предыдущей версии (в которой собственно начинал делать свой проект) v. 1.65 , в которой проект идёт стабильно.

Сделал "гибрид": компилятор ресурсов и папку bin взял с нового SDK. Сами библиотеки оставил от 1.65.

P.S. В плане воспроизведения звуков  - в новой версии XGM-движка всё также уныло, приходится передефайнить:


--- Код: ---#define HALT_Z80_ON_DMA     0 /*1*/
#define HALT_Z80_ON_IO      0 /*1*/

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

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

Werton:

--- Цитата: rep-stosw от 17 Февраль 2022, 02:02:21 ---Кто-нибудь пробовал перенести свои существующие проекты на эту версию SDK ?
--- Конец цитаты ---
Сейчас попробовал, вроде норм работает.
--- Цитата: rep-stosw от 17 Февраль 2022, 02:02:21 ---У меня почему-то в игре в какой-то момент пропадают спрайты, карта уровня перестаёт прокручиваться, и всё повисает (кроме музыки) с этой версией SDK.
--- Конец цитаты ---
Ну как ты сам говорил :lol:

--- Цитата: rep-stosw от 26 Январь 2022, 10:53:46 ---А если у вас НЕ does,  то кто-то говнокодер!  :lol:

--- Конец цитаты ---
Проверяй код, где то накосячил, возможно превысил лимиты ram или еще что.
Посмотрел, у себя, после всех инициализаций в моем проекте на sgdk1.70 доступной ram примерно на 1 KB меньше чем в 1.65, т.е. фреймворк стал прожорливее, возможно этого килобайта тебе и не хватает.

ALKOSHA:
А вы пре-лоадед спрайтс юзаете ? Или на лету вытягиваете из ROM'а?
Пытался вникнуть через примеры, чёто сложновато.

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

rep-stosw:

--- Цитата: ALKOSHA от 12 Март 2022, 22:05:49 ---А вы пре-лоадед спрайтс юзаете ? Или на лету вытягиваете из ROM'а?
Пытался вникнуть через примеры, чёто сложновато.
--- Конец цитаты ---

Я юзал. В примере с Соником. Всё предельно ясно.  :D

SERGK393:
Всем привет!
Я совсем недавно в этой теме, но хотелось бы узнать, можно ли пропустить оригинальные звуки Соника (файлы bin) через SGDK?
Вроде они в формате SMPS, но в данном SDK в списке драйверов нет SMPS. Ситуация такая: начал с примера Соника, там есть звук прыжка, переведенный с WAV, но на XGM звучит он очень коряво. Запускал с PCM драйвера - звучит лучше, но он музыку глушит. Файлы smps (бинарники из дизасма соника) не получилось прочитать. Вписывал как BIN, но в итоге шипит, притом неважно, какой файл будет вписан. Пробовал даже перевести из SMPS в MID, а MID в VGM (прямого переводчика не нашел) - mid не формируется нормальный. Пробовал перевести из WAV в MID - более-менее, но в VGM, оказывается, тоже не получилось (находил программы от двух разных разработчиков). Скажите, пожалуйста, возможно ли запустить в игре качественный звук прыжка, или любой другой (скольжение тоже плохо звучит)? Я все еще не изучил как следует, поэтому пока только тыкаюсь как в черный ящик.

SeregaZ:

--- Цитата: SERGK393 от 02 Апрель 2022, 02:32:02 ---можно ли пропустить оригинальные звуки Соника (файлы bin) через SGDK?
--- Конец цитаты ---
неа. нельзя. хотя я точно не знаю... если звук прыжка записан сэмплом в игре Соника - тогда можно. но я подозреваю что он записан FM звуком. спецэффекты - те-же прыжки, или стрельба - в SGDK, точнее его аудиодрайвер XGM - не умеет проигрывать если они FM или PSG. то есть все спецэффекты могут быть только сэмплами. следовательно надо записать оригинальный прыг Соника в вавку, после конвертануть в моно 14khz PCM и только потом загружать. ясное дело качество будет похуже, чем оригинальный FM или PSG звук.

по поводу перевода из SMPS в MID и прочих, перечисленных извращений - это конечно тот еще анекдот :) в данном случае будут переводится ноты, но не сэмплы и не инструменты. поэтому смысла от этого никакого нет. и поэтому происходит шипение - потому что формат совсем другой.

SERGK393:
Начинаю потихоньку делать эксперименты с Соником в примере, нашел такой затык, после которого думаю, стоит ли дальше делать соника на Си или уж проще освоить хакинг.

Скорость анимации здесь одинаковое для одного спрайта, в итоге нет разницы, когда Соник идет медленно, а когда быстро (до бега). Решил добавить анимацию из повторяющихся кадров (в итоге не 6, а 12 кадров), сделал на скорую руку в GIMPе, с расположением были огрехи (что, возможно, одинаковые кадры в анимации могли быть технически разными). В итоге анимация действительно теперь разная по скорости (как бы), но игра в целом стала идти не так плавно, как раньше. Вернул старый спрайт - плавность вернулась.

Поэтому вопросы - 12 кадров в анимации - это для всей сеги в целом много? И влияет на работу так же, как здесь?
Можно ли использовать анимацию своим способом, через асм, или проще сделать нормальный файл спрайта из повторяющихся кадров и будет работать хорошо?
Так как видел, что асм код можно вставлять в Си, то реально ли подключиться к анимации и написать свою функцию в итоге?

Segaman:
SERGK393, я решил эту проблему отключением анимации и написанием своего таймера.
таймер срабатывает и меняет кадр анимации. все

DON:
а зачем свой таймер отдельно?
Если у каждого спрайта есть callback на смену кадра анимации.

или ты про него и написал? типа кодить ничего не надо - просто там берешь и ставишь нужную величину

ALKOSHA:
Чего-то не понимаю, как задать начальный адрес графики под спрайт
По-умолчанию он получается 6F80
Пытаюсь втулить SPR_setVRAMTileIndex, ничё не меняется.

--- Код: ---   u16 ind = BMP_FB1ENDTILEINDEX    ; //TILE_USERINDEX;


VDP_setPalette(PAL0, cabin.palette->data);
VDP_drawImageEx(BG_A, &cabin, TILE_ATTR_FULL(PAL0, FALSE, FALSE, FALSE, ind),0, 0, FALSE, TRUE);
ind += cabin.tileset->numTile;

SPR_setVRAMTileIndex(&earth,ind );
SPR_init();
VDP_setPalette(PAL2, earth.palette->data);
sprites[0] = SPR_addSprite( &earth ,160, 5, TILE_ATTR(PAL2, FALSE, FALSE, FALSE));
SPR_update();
SYS_doVBlankProcess();
--- Конец кода ---

Sharpnull:
ALKOSHA, оно вообще не должно компилироваться, вы передаёте earth в bool SPR_setVRAMTileIndex(Sprite* sprite, s16 value) и Sprite* SPR_addSprite(const SpriteDefinition* spriteDef, s16 x, s16 y, u16 attribut), где разный тип 1-го параметра. Вызов SPR_setVRAMTileIndex() должен быть после SPR_addSprite().

ALKOSHA:
Тэээк-с...

--- Код: ---
Sprite *sprites[80];
...
SPR_init();
VDP_setPalette(PAL2, earth.palette->data);
sprites[0] = SPR_addSprite( &earth ,160, 5, TILE_ATTR(PAL2, FALSE, FALSE, FALSE));
SPR_setVRAMTileIndex(sprites,ind);
SPR_update();
SYS_doVBlankProcess();
--- Конец кода ---

Ничего не поменялось. Оффсет адреса тот же.

Навигация

[0] Главная страница сообщений

[#] Следующая страница

[*] Предыдущая страница

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