Автор Тема: SGDK  (Прочитано 76677 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Онлайн Sharpnull

  • Пользователь
  • Сообщений: 5138
    • Просмотр профиля
Настройка SGDK
« Ответ #360 : 20 Февраль 2018, 01:01:07 »
ALKOSHA, по умолчанию 64 на 32 тайла (512х256 пикселей). Меняется через void VDP_setPlanSize для обоих слоёв:
// vdp.h
void VDP_setPlanSize(u16 w, u16 h)

Set background plan size (in tile).

Parameters:
    w width in tile.
    Possible values are 32, 64 or 128.
    h height in tile.
    Possible values are 32, 64 or 128.
Получить значения можно через переменные u16 planHeight и u16 planWidth.
------
В доках не сказано, но в спецификации не доступны варианты 64x128, 128x64, 128x128:
SCROLL PLAYFIELDS
Two scrolling play fields. whose size in cells is selectable from;
32*32,    32*64,    32*128,
64*32,    64*64,    128*32
« Последнее редактирование: 22 Февраль 2018, 22:53:22 от Sharpnull »

Оффлайн ALKOSHA

  • Пользователь
  • Сообщений: 805
  • Люблю донди.
    • ВКонтакте
    • Просмотр профиля
Настройка SGDK
« Ответ #361 : 23 Февраль 2018, 13:38:25 »
Да, всё. Спс. Выставил 64*64 - полегчало... На время.
Потому как при старте игры такая жесть, что в порядок всё никак не могу привести.
Там же я эффекты выжимал всякими трюками с палитрой, анимацией кешированных тайлов и построчными скроллами,
А щас вся эта дичь вообще неадекватная.  :-\ :-\ :-\ :-\


Оффлайн ALKOSHA

  • Пользователь
  • Сообщений: 805
  • Люблю донди.
    • ВКонтакте
    • Просмотр профиля
Настройка SGDK
« Ответ #362 : 25 Февраль 2018, 02:38:09 »
Не знаете почему происходит затирание спрайта, когда тот оказывается за пределами экрана ?
То есть по возвращению его оттуда - он остаётся пустым.

Онлайн Sharpnull

  • Пользователь
  • Сообщений: 5138
    • Просмотр профиля
Настройка SGDK
« Ответ #363 : 25 Февраль 2018, 05:42:09 »
ALKOSHA, без кода не обойтись, потому что при обычных условиях такого не должно быть. Неплохо было бы минимальный проект с одним спрайтом, на котором это видно. Пока будете разгребать и убирать лишний код, может сами поймёте. Если использовали код завязанный на расположении VRAM, попробуйте код из этого комментария (он должен вернуть адреса как раньше до версии 1.30):
// these lines can be used in your code to change VRAM layout as olders SGDK (<= 1.30)
VDP_setPlanSize(64, 64);

VDP_setWindowAddress(0xB000);
VDP_setSpriteListAddress(0xBC00);
VDP_setHScrollTableAddress(0xB800);
VDP_setBPlanAddress(0xC000);
VDP_setAPlanAddress(0xE000);

Оффлайн ALKOSHA

  • Пользователь
  • Сообщений: 805
  • Люблю донди.
    • ВКонтакте
    • Просмотр профиля
Настройка SGDK
« Ответ #364 : 25 Февраль 2018, 10:24:13 »
Пока будете разгребать и убирать лишний код, может сами поймёте.

Эх, да.
Видимо проще будет всё опять с нуля писать. :'(


Добавлено позже:
И ещё один момент.
Каким образом вы синхронизируете игровой процесс? Всё лень на зарубежном форуме сформулировать данный вопрос.
Дело в том, что конкретно в моём случае на экране бывает то единицы спрайтов, то резко обрабатывается траектория десятков спрайтов. Вследствие чего образуются лаги.

Я из данной статьи взял предпоследний пример
https://habrahabr.ru/post/136878/
разделив игровой цикл на две функции update() и display()
Конечно же при инициализации запустил таймер startTimer(0);
А после  проверяю  его значение u32 current =  getTimer(0, FALSE);

В эмуляторе всё ок получается. Но на железе почему-то возникали непредвиденные глюки (то палитра не присвоится, то тайлы посыпятся. Хз из-за чего, может скорости ОЗУ не хватает). По крайней мере в старых версиях.

Интересно, как синхронизируете вы. Конечно ещё как вариант можно умножать каждое перемещение на дельта-тайм, но это как-то геморно.
« Последнее редактирование: 25 Февраль 2018, 10:34:22 от ALKOSHA »

Онлайн Sharpnull

  • Пользователь
  • Сообщений: 5138
    • Просмотр профиля
Настройка SGDK
« Ответ #365 : 25 Февраль 2018, 16:59:04 »
ALKOSHA, учитывая, что железо одно и желательно постоянное FPS, лучше добиться отсутствия просадок и простой цикл подходит. Впрочем, всё зависит от ситуации, игры не приставках тоже тормозят иногда.
Но на железе почему-то возникали непредвиденные глюки
SYS_disableInts и SYS_enableInts использовали? Проблема возможна в прерываниях, но это моё дилетантское мнение.
можно умножать каждое перемещение на дельта-тайм
Умножение и деление, особенно для 32-разрядных чисел - дорогое удовольствие для такого железа, тут лучше не увлекаться.

Оффлайн Takamura-kun

  • Пользователь
  • Сообщений: 1091
  • Пол: Мужской
  • Закалён и плечист.
    • ВКонтакте
    • Просмотр профиля
Re: Настройка SGDK
« Ответ #366 : 28 Февраль 2018, 05:41:46 »
Не знаете почему происходит затирание спрайта, когда тот оказывается за пределами экрана ?
То есть по возвращению его оттуда - он остаётся пустым.
У меня он наоборот вылазит из другого конца экрана. Поставил спрайт горящего факела на задний план - при скролле картинки, он появляется где не надо. Думаю, что дело в железе и нужно допиливать это на программном уровне что в моем, что в твоем случае.

Онлайн Sharpnull

  • Пользователь
  • Сообщений: 5138
    • Просмотр профиля
Re: Настройка SGDK
« Ответ #367 : 28 Февраль 2018, 06:07:42 »
У меня он наоборот вылазит из другого конца экрана.
Говоря о спрайте (на sprite plan), он должен возвращаться с другой стороны при выходе за пределы слоя. Проблемы из вашего описания не видно. К тому же, затирание в эмуляторе, а вы, полагаю, говорите о проблеме только на реальном железе.

Оффлайн ALKOSHA

  • Пользователь
  • Сообщений: 805
  • Люблю донди.
    • ВКонтакте
    • Просмотр профиля
Настройка SGDK
« Ответ #368 : 28 Февраль 2018, 08:42:20 »
Думаю, что дело в железе

С новой версией до железа я ещё не добрался. Пока что только в Кега-Фьюжн тестирую.

Оффлайн Takamura-kun

  • Пользователь
  • Сообщений: 1091
  • Пол: Мужской
  • Закалён и плечист.
    • ВКонтакте
    • Просмотр профиля
Re: Настройка SGDK
« Ответ #369 : 01 Март 2018, 14:00:26 »
затирание в эмуляторе
Тоже возможно, однако алкаш использует тот же поганый эмулятор для проверки ромов что и я, а у меня не затирает. Скорее всего, дело в версиях сгдк.

Пока что только в Кега-Фьюжн тестирую.
попробуй ретроарч с GX модулем, вдруг результат будет другой. Фьюжен - та еще дрянь.

Онлайн Sharpnull

  • Пользователь
  • Сообщений: 5138
    • Просмотр профиля
Настройка SGDK
« Ответ #370 : 02 Март 2018, 22:59:06 »
ALKOSHA, я тут понял, что не учёл с функцией VDP_setPlanSize(): если ставить размеры 32*128, 64*64, 128*32, то изменение расположения VRAM обязательно, иначе будет пересечение памяти и соответственно вылезающие не к месту тайлы. Этот код показывал выше:
// these lines can be used in your code to change VRAM layout as olders SGDK (<= 1.30)
VDP_setPlanSize(64, 64);

VDP_setWindowAddress(0xB000);
VDP_setSpriteListAddress(0xBC00);
VDP_setHScrollTableAddress(0xB800);
VDP_setBPlanAddress(0xC000);
VDP_setAPlanAddress(0xE000);
Надо быть со всем этим осторожно, потому что вероятно влияние на другой функционал.

Оффлайн ALKOSHA

  • Пользователь
  • Сообщений: 805
  • Люблю донди.
    • ВКонтакте
    • Просмотр профиля
Настройка SGDK
« Ответ #371 : 12 Март 2018, 18:00:24 »
Начал проект с чистого листа.
Один спрайт, один слой. Скроллится / перемещается в полном здравии без багов.

Но хотелось бы более понятное для меня толкование данной ф-ции.
void SPR_init   (u16    maxSprite,
u16    vramSize,
u16    unpackBufferSize
)      


maxSprite - максимальное количество массива указателей Sprite *sprites[..]; ?
Так ведь?

То есть, если у меня на игровом экране будет, скажем, 100 спрайтов, то мне надо сперва
Sprite *sprites[100];
А затем первый параметр maxSprite тоже указывать 100?

vramSize - методом тыка подгонять, чтоб не перекрыло тайлы фона ненароком?

unpackBufferSize - Я так полагаю, что буфер распаковки всё в той же VRAM, где и спрайты, и фоны. Т.е. его лучше оставлять дефолтным.

Онлайн Sharpnull

  • Пользователь
  • Сообщений: 5138
    • Просмотр профиля
Настройка SGDK
« Ответ #372 : 12 Март 2018, 21:11:40 »
maxSprite - максимальное количество массива указателей Sprite *sprites[..]; ?
Да, там заранее выделяется оперативная память и если вызвать лишний раз SPR_addSprite(Ex), то он не сработает и вернёт NULL.
vramSize - методом тыка подгонять, чтоб не перекрыло тайлы фона ненароком?
Посмотрел код, там такая история:
Тайлы лежат в памяти с 0-го адреса, до maps_addr (из vdp.c). После установки адресов VRAM (VDP_setBPlanAddress() и т. п.) этот адрес обновляется. По умолчанию (когда размер слоёв только 64x32, 32x64, 32x32) там памяти до начала слоя B. Максимальное количество тайлов, которые можно использовать - TILE_MAXNUM (в vdp.h есть другие полезные константы). При это немного взято вначале и в конце на системный шрифт. Спрайтовый движок (sprite_eng) выделяет тайлы заранее как раз перед шрифтом. Поэтому возможно использование низкоуровневых операций со спрайтами (функции из vdp_spr и vdp_tile), в этом случае обычно используют тайлы с начала TILE_USERINDEX.
Следовательно, если под тайлами фона имеются в виду тайлы, которые расположены вначале, то придётся расчитывать как-то самому (движок проверяет границы и сам лишнего не запишет в пределах vramSize). Либо больше места для спрайтов выделять заранее, либо для всего остального. При правильной установки адресов VRAM, на сами слои (т. е. фон, plan) ничего не залезет. В случае размеров слоёв 64х64, 128х32, 32х128 будет просто меньше места на 128 тайлов.

unpackBufferSize - это выделенная в ОЗУ память, которая используется только в SPR_update(), когда необходимо подгрузить тайлы (если только включена автоподгрузка SPR_FLAG_AUTO_TILE_UPLOAD), такое случается при смене фрейма SPR_setFrame() или анимации SPR_setAnim(), а значит можно примерно представить сколько одновременно спрайтов можно сменить одновременно за один кадр. Например, у Соника размер 25 тайлов, если одновременно 11 соников сменят анимацию, то памяти не хватит (по умолчанию 256).

Ещё важное: при SPR_FLAG_AUTO_TILE_UPLOAD (по умолчанию), каждый Sprite будет использовать тайлы VRAM, это значит, что вызов 5 раз SPR_addSprite() с одним и тем же спрайтом (даже если фрейм один, т. е. нет анимации) будет занимать при отображении памяти как 5 спрайтов, а не один. В примерах есть летающие пончики sgdk\sample\astrofra\starfield_donut, там не используется автоматическая загрузка, поэтому удаётся отобразить 32 пончика одновременно. Пример нужно брать из репозитория, а не архива 1.34 (sgdk134.7z), была исправлена ошибка, но всё равно остался косяк: MAX_DONUT должен быть 32, а не 65, иначе рисуются лишние спрайты и происходит отброс спрайтов, если включён лимит в эмуляторе.

В GensKMod или других эмуляторах есть возможность отладки, например вот VRAM из примера с Cоником.
« Последнее редактирование: 12 Март 2018, 21:39:08 от Sharpnull »

Оффлайн ALKOSHA

  • Пользователь
  • Сообщений: 805
  • Люблю донди.
    • ВКонтакте
    • Просмотр профиля
Настройка SGDK
« Ответ #373 : 10 Апрель 2018, 23:25:25 »
Как в новой версии захайдить спрайты?
В старой было так
Выкл:
sprites->visibility =  0x00000000;
Включить видимость:
sprites->visibility =  0x3FFFFFFF;

Онлайн Sharpnull

  • Пользователь
  • Сообщений: 5138
    • Просмотр профиля
Настройка SGDK
« Ответ #374 : 11 Апрель 2018, 01:46:16 »
ALKOSHA,
void SPR_setVisibility(Sprite * sprite, SpriteVisibility value)

Set the visibility state for this sprite.

Parameters:
    sprite   Sprite to set the visibility information
    value   Visibility value to set.
    SpriteVisibility.VISIBLE = sprite is visible
    SpriteVisibility.HIDDEN = sprite is not visible
    SpriteVisibility.AUTO_FAST = visibility is automatically computed from sprite position (global visibility)
    SpriteVisibility.AUTO_SLOW = visibility is automatically computed from sprite position (per hardware sprite visibility)

То есть SPR_setVisibility(sprite, HIDDEN);. По умолчанию SPR_addSprite() ставит VISIBLE.

Оффлайн ALKOSHA

  • Пользователь
  • Сообщений: 805
  • Люблю донди.
    • ВКонтакте
    • Просмотр профиля
Настройка SGDK
« Ответ #375 : 11 Апрель 2018, 23:31:50 »
Спасибо.
Кровавыш после довольно продолжительного анабиоза оживает.
Но предстоит ещё море работы по его восстановлению.
У меня там было всё выверено, каждый тайлик, каждая ячейка палитры, каждый порядковый номер спрайта.... Эххх.. пичаль.
Сизифов труд.

Оффлайн ALKOSHA

  • Пользователь
  • Сообщений: 805
  • Люблю донди.
    • ВКонтакте
    • Просмотр профиля
Настройка SGDK
« Ответ #376 : 11 Май 2018, 09:49:59 »
Тестирую цикл Меню->игра->геймовер->меню.
И столкнулся с очередной проблемой.
После геймовера не отображается титульная картинка.
Разумеется все режимы ресетил, скроллы устанавливал в 0, выполнял очистку спрайтов/плейнов.

Как выяснилось позже, картинка отказывается рисоваться именно после выполнения функции SPR_Init
Сам титульный экран состоит лишь из двух плейнов, поэтому инициализацию спрайтов не делал, и картинка отображалась.
Но SPR_Init используется при инициализации игры. Решил его поставить до инициализации меню, и действительно, в нём проблема.
Шаманил с параметрами этой функци, выставлял дэфолтные, как указаны в мануале. Безрезультатно.
Но что странно, игровые фоны отображаются без проблем.
Хмм.

Онлайн Sharpnull

  • Пользователь
  • Сообщений: 5138
    • Просмотр профиля
Настройка SGDK
« Ответ #377 : 13 Май 2018, 22:16:14 »
ALKOSHA, пробовали вызывать SPR_end()? Должны освободиться все ресурсы:
End the sprite engine and release attached resources.
This releases the allocated VRAM region, memory for unpacking and hardware sprite.
Правда спрайтовый движок занимает VRAM перед шрифтом, то есть задевать тайлы от фона не должен. Если SPR_end() не поможет и надоест мучиться, я бы мог посмотреть код.

Оффлайн ALKOSHA

  • Пользователь
  • Сообщений: 805
  • Люблю донди.
    • ВКонтакте
    • Просмотр профиля
Настройка SGDK
« Ответ #378 : 14 Май 2018, 22:43:05 »
Хууух. Спасибо огромное.
вызов SPR_end() решил проблему.

Добавлено позже:
....однако после второго проигрыша в цикле почему-то всё равно чёрный бэкграунд.
« Последнее редактирование: 14 Май 2018, 22:50:20 от ALKOSHA »

Оффлайн ALKOSHA

  • Пользователь
  • Сообщений: 805
  • Люблю донди.
    • ВКонтакте
    • Просмотр профиля
Настройка SGDK
« Ответ #379 : 13 Июнь 2018, 21:52:42 »
Попробовал добавить модуль jaws.c из прошлого проекта.
Получилась такая краснота.



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

Оффлайн bgr

  • Пользователь
  • Сообщений: 534
    • ВКонтакте
    • Просмотр профиля
Настройка SGDK
« Ответ #380 : 13 Июнь 2018, 22:14:47 »
ALKOSHA, можешь что-нибудь про успехи в проектах рассказать?

Онлайн Sharpnull

  • Пользователь
  • Сообщений: 5138
    • Просмотр профиля
Настройка SGDK
« Ответ #381 : 14 Июнь 2018, 00:14:19 »
ALKOSHA, что-то явно осталось, если упоминается jaws.o. Попробуйте в командой строке в папке проекта написать:
%GDK_WIN%\bin\make -f %GDK_WIN%\makefile.gen clean
%GDK_WIN%\bin\make -f %GDK_WIN%\makefile.gen
Первая строка удалит лишние объектные файлы (*.o), вторая скомпилирует проект. Если ошибок не будет, а Code::Blocks будет ругаться, то что-то с ним не так.

Оффлайн Takamura-kun

  • Пользователь
  • Сообщений: 1091
  • Пол: Мужской
  • Закалён и плечист.
    • ВКонтакте
    • Просмотр профиля
Re: Настройка SGDK
« Ответ #382 : 14 Июнь 2018, 06:47:34 »
что-то явно осталось, если упоминается jaws.o
Вот поэтому у меня каждая компиляция с чистого листа происходит. Без этого бывало такое, что поменяешь, к примеру, координаты спрайта, а в итоговом роме нчего не меняется. Почистил проект, собрал - все четко. Да и вообще, батники - наше все :D

Онлайн Sharpnull

  • Пользователь
  • Сообщений: 5138
    • Просмотр профиля
Настройка SGDK
« Ответ #383 : 14 Июнь 2018, 15:48:58 »
worm, я замечал два случая: когда меняется .h-файл, когда меняется ресурс. В обоих случаях компилятор не видит изменения и оставляет старый объектный файл. Каждый раз чистить проект может быть долго.

На счёт jaws. По идее в Code::Blocks должна быть задана та же команда очистки, так что грешу на него.

Оффлайн ALKOSHA

  • Пользователь
  • Сообщений: 805
  • Люблю донди.
    • ВКонтакте
    • Просмотр профиля
Настройка SGDK
« Ответ #384 : 14 Июнь 2018, 20:59:41 »
можешь что-нибудь про успехи в проектах рассказать?


Нет таковых. Я НЕкодер от природы. Тяжко мне даётся это дело.

Оффлайн Segaman

  • Пользователь
  • Сообщений: 3240
  • Пол: Мужской
  • Blast Processing!
    • Youtube
    • Просмотр профиля
Настройка SGDK
« Ответ #385 : 12 Август 2018, 12:20:05 »
Кто-нить знает, почему последняя версия SGDK незапускает нормально звуковые драйвера?
Все дравины грузятся, но молчат, кроме XGM. этот вообще уводит в вечное ожидание инициализации, а в это время Z80 самовыпиливает свою память. :ohmy:

Добавлено позже:
sound.res
XGM bgmInGame "Switchblade1.vgm.xgm"
XGM bgmDemo "bad_apple_pcm.vgm"

main.c
int main()
{
VDP_setScreenWidth256();

VDP_drawText("Hello Genny World!", 10, 13);

    SND_startPlay_XGM( bgmInGame );

while(1)
{
//read input
//move sprite
//update score
//draw current screen (logo, start screen, settings, game, gameover, credits...)

//wait for screen refresh
VDP_waitVSync();
}

return (0);
}

Добавлено позже:
Я пробовал XGM и VGM
Обе уводят в переполнение стека

SGDK 1.34 (January 2018)

Добавлено позже:
вот версия SGDK 1.22a (September 2016) работает нормально, но на ней дольше собирается проект, плюс куча неприятных ошибок типа "надо определять переменные вне цикла for" и тп
попробовал SGDK 1.32 (October 2017) - тоже уходит в переполнение
« Последнее редактирование: 12 Август 2018, 12:49:16 от Segaman »

Онлайн Sharpnull

  • Пользователь
  • Сообщений: 5138
    • Просмотр профиля
Настройка SGDK
« Ответ #386 : 12 Август 2018, 15:21:57 »
Segaman,
Пара замечаний:
* Для VGM и XGM лучше использовать аналогичные функции из xgm.h, так как SND_startPlay_XGM() и прочие указаны как deprecated в документации.
* Лучше не использовать название sound.res, так как генерируется sound.h, а такой файл уже есть в SGDK, хотя компилируется нормально.

Посмотрел примеры из SGDK и выяснил, что если запускать в joyEvent, то проблем нет. Причём если написать вызов одной из функций XGM_* в joyEvent (например XGM_isPlaying(); ), то сразу будет работать ваш вызов XGM_startPlay() перед while (1).

Может баг, а может особенность архитектуры. Версия из github с таким же поведением.

Также, без использования XGM_set68KBUSProtection() остановка будет со звуковыми искажениями. Подробнее читайте в документации, не знаю почему.

Вот готовый пример, где музыка играет сразу и останавливается/воспроизводится по нажатию A (тестировал только sor2.xgm из SGDK):
// main.c
#include <genesis.h>
#include "resources.h"

static void vintEvent();
static void joyEvent(u16 joy, u16 changed, u16 state);

int main()
{
    JOY_setEventHandler(joyEvent);
    VDP_setScreenWidth256();
    VDP_setHInterrupt(0);
    VDP_setHilightShadow(0);
    SYS_setVIntCallback(vintEvent);

    VDP_drawText("Hello Genny World!", 10, 13);

    XGM_startPlay(bgmInGame);

    while (TRUE)
    {
        VDP_waitVSync();
    }

    return 0;
}

static void vintEvent()
{
    u16 in;

    // set BUS protection for XGM driver
    XGM_set68KBUSProtection(TRUE);

    in = GET_VCOUNTER;

    if ((in >= 224) && (in <= 230))
    {
        // u16 i;
        // switch(dmaMethod)
        // {
            // case 1:
                DMA_doDma(VDP_DMA_VRAM, 0, 0x8000, (6 * 1024) / 2, 2);
                //break;

            // case 2:
                // for(i = 0; i < 6; i++)
                // {
                    // DMA_doDma(VDP_DMA_VRAM, 0, 0x8000, 1024 / 2, 2);
                    // waitSubTick(1);
                // }
                // break;

            // case 3:
                // for(i = 0; i < 16; i++)
                // {
                    // DMA_doDma(VDP_DMA_VRAM, 0, 0x8000, 256 / 2, 2);
                    // waitSubTick(1);
                // }
                // break;
        // }
    }

    // remove BUS protection for XGM driver
    XGM_set68KBUSProtection(FALSE);
}

static void joyEvent(u16 joy, u16 changed, u16 state)
{
    if (changed & state & BUTTON_A)
    {
        if (XGM_isPlaying()) XGM_stopPlay();
        else XGM_startPlay(bgmInGame);
    }
}
--------
Если joyEvent не нужен, можно написать:
static void joyEvent(u16 joy, u16 changed, u16 state)
{
    XGM_isPlaying();
}
Костыль, но работает. Конечно нужна проверка в нескольких эмуляторах и на железе.
« Последнее редактирование: 12 Август 2018, 15:35:13 от Sharpnull »

Оффлайн Segaman

  • Пользователь
  • Сообщений: 3240
  • Пол: Мужской
  • Blast Processing!
    • Youtube
    • Просмотр профиля
Настройка SGDK
« Ответ #387 : 08 Сентябрь 2018, 00:47:23 »
у меня XGM всё равно самовыпиливается после загрузки в Z80  :-\

Добавлено позже:
вот здесь вроде пишут про различия в драйверах, хоть код и идентичен, всё равно ничего не работает, даже когда я гружу дравину вручную.
разве что после последнего дравина не уходит сразу в харакири, а только после вызова startPlay_XGM :neznayu:
« Последнее редактирование: 08 Сентябрь 2018, 01:38:24 от Segaman »

Онлайн Sharpnull

  • Пользователь
  • Сообщений: 5138
    • Просмотр профиля
Настройка SGDK
« Ответ #388 : 08 Сентябрь 2018, 04:31:34 »
Segaman, напишите об ошибке на гитхаб. Что интересно, пример что я кидал, при убирании коллбека джоя, работает в Fusion, но не работает в старом Gens. Может у них всё работает, потому что пользуются определёнными эмуляторами и может на железе также работает. Баг явно есть, в исходниках ассемблер, без спецов не разобраться.
--------
Можете ещё попробовать заменить старые файлы для работы с Z80, если повезёт и не будет конфликта. После замены либу нужно пересобрать build_lib.bat.

Оффлайн Segaman

  • Пользователь
  • Сообщений: 3240
  • Пол: Мужской
  • Blast Processing!
    • Youtube
    • Просмотр профиля
Настройка SGDK
« Ответ #389 : 09 Сентябрь 2018, 01:43:19 »
Sharpnull, я уже заюзал движок Echo :lol: