Войти
ФлеймФорумПроЭкты

Contra Force Advance (15 стр)

Страницы: 114 15 16 1719 Следующая »
#210
(Правка: 8:11) 8:10, 27 сен. 2018

zcojam

P.S.

Про массив opt только нужно учесть одну важную вещь.
В GBA тайлы что в фоне что в спрайтах могут быть перевернуты по горизонтали или вертикали (зеркально) или сразу и то и другое одновременно.
Этим управляют два битовых флага в номере спрайта что на 10-ой и 11-ой позиции двоичного представления числа (биты при этом нумеруются с нуля).
Например в video.h есть две функции для переворачивания тайла по его номеру:

inline int tileFlipH( int tile ) { return tile ^ (1 << 10); };
inline int tileFlipV( int tile ) { return tile ^ (1 << 11); };
Если с битовым представлением непонятно, то можно трактовать это следующим образом:
- номер тайла который можно указать в плитке фона это число от 0 до 4095 и оно состоит из следующих компонент:
- число от 0 до 1023 указывает порядковый номер тайла в таблице
- если при отображении этот тайл нужно перевернуть слева-направо к номеру добавляется 1024
- если при отображении этот тайл нужно перевернуть сверху-вниз к номеру (еще) добавляется 2048

К чему это я всё говорю - дело в том, что упаковка тайлов фона и его массив opt создаётся собственно с учётом этих вещей - тайлы считаются дублирующими даже если их можно получить друг из друга зеркальным отображением по вертикали и/или горизонтали. При этом, если тайл оптимизирован с переворачиваниями, то в массив opt просто запишется число большее 1023 - с выставлением этих бит чтобы тайл перевернулся и совпал в итоге с тем что было на его месте в неоптимизированной таблице.

Насколько я понимаю тебе надо учитывать это, если ты хочешь делать очень длинные таблицы тайлов с подгрузкой - или отключать оптимизацию с переворачиваниями (тут потребуется править код tmx2incl) или продумывать так, чтобы в каждой отдельной таблице тайлов их таки не могло быть более 1023 после оптимизации. Иначе биты номера плитки наползут на биты переворота спрайтов и изображение сломается.


#211
(Правка: 14:44) 14:34, 27 сен. 2018

*Lain*
Бродилку/квест/РПГ с видом сверху, что-то такое.

+ Показать

=A=L=X=

или продумывать так, чтобы в каждой отдельной таблице тайлов их таки не могло быть более 1023 после оптимизации. Иначе биты номера плитки наползут на биты переворота спрайтов и изображение сломается.

Тогда получается, что бесконечно длинные тайловые карты я не смогу делать. Тогда можно создать отдельный длинный тайл лист и в build_graphics поставить у него флаг b вместо bct, чтобы не затрагивать его оптимизацией. И уже из него подгружать участки.
#212
14:49, 27 сен. 2018

zcojam
> поставить у него флаг b вместо bct, чтобы не затрагивать его оптимизацией. И
> уже из него подгружать участки.

Да, пожалуй сейчас это самое простое - так как нужно ручное управление типа страницами тайлов, то и автоматическая их оптимизация становится вещью более сложной чем сейчас. Самое простое в плане сохранения программной совместимости - это выкинуть автоматическую оптимизацию из тайлов карты и проводить таким образом её вручную в редакторе карт самостоятельно. Пожалуй да.
Заметь, тогда, что текущий движок начнёт просить как раз ссылок на массив opt - можешь там вставить в присвоении вместо него nullptr и потребуется по всему коду убрать редирекцию на тайлы через tilesOpt - просто оставить вместо tilesOpt[ something ] одно только something.

#213
10:38, 3 окт. 2018

=A=L=X=
Это наверное можно с лёгкостью нагуглить, но чот у меня ступор какой-то, ибо всё, что я нахожу по структурам не очень похоже на то, что у тебя в коде. Вот как делаю:
game_states.h:

struct SuperTiler
{
  int stTO; //куда копируем
  int stFROM; //откуда
  int stLGHT; //сколько
};
game_states.cpp:
SuperTiler superTiler[2]={
  {774,1719,175},
  {774,2230,175}
};
Ступор возникает здесь. Не совсем понимаю, как обратиться к нужной переменной. Обычно в 2D массиве я бы обратился так: superTiler[X][Y], но компиляция ругается. Я смотрю, как сделана смена тайлсетов и там у тебя как-то через поинтеры, поэтому я попробовал что-то такое: superTiler[nextSuperTile]->stTO, но конечно это не так работает
Вроде как это должно просто делаться, но я чего-то не понимаю.
#214
(Правка: 10:41) 10:40, 3 окт. 2018

zcojam

Это массив структур, поэтому просто superTile[nextSuperTile].stTO - просто через точку, а не разыменование указателя ->
Когда переменная ссылается прямо на структуру пишется через точку.
Когда переменная является указателем на структуру, то можно или разыменовывать как обычно (*ptr).field или есть шоткат через размыменующую ptr->field

#215
(Правка: 4:42) 4:41, 17 окт. 2018

Гы, в рамках адаптации движка к SDL вывел уровень из сабжа в FullHD.
Лол, фрагмент уровня который на GBA казался довольно длинным на ПК без проблем влазит в один экран почти весь:

Изображение

Задний фон множится из-за того, что просто слишком мал оказывается для мощного разрешения и ему приходится задваиваться.

#216
18:41, 17 окт. 2018

=A=L=X=

+ Показать
#217
8:50, 18 окт. 2018

nes

Хм. Движок форума что ли режет сжимает картинки по длине? Оригинальная картинка не сжата: https://www.vgmaps.com/Atlas/NES/Battletoads-Level03-TurboTunnel-Part2.png
Вообще сейчас заметил, что мою картинку тоже чуток пожало.

#218
9:51, 19 окт. 2018

nes

Хахаха! Спасибо тебе огромное, что напомнил про этот сайт с картинками уровней игр с денди.
Фишка в том, что имея слепок уровня в BMP я применил уже написанный для сжатия тайловой карты код и получил автоматическую генерацию уровня в формате TileEd - открытого редактора тайловых карт.
Это вообще круто. :)

Изображение

То есть это реальная карта для TileEd полученная из картинки https://www.vgmaps.com/Atlas/NES/ContraForce-Stage1.png
Прикольно, прикольно....

#219
11:15, 19 окт. 2018

=A=L=X=
)

#220
20:07, 19 окт. 2018

=A=L=X=
Я правильно понял, что TileEd на вход получает отрисованный уровень, и на выход дает тайлсет и тайлмэп?

Если так, то это офигенно. Надо взять на вооружение.

#221
(Правка: 23:57) 23:55, 19 окт. 2018

alexey.ch
> Я правильно понял, что TileEd на вход получает отрисованный уровень, и на выход
> дает тайлсет и тайлмэп?

Не сам TileEd, а утилита написанная мной.
Берём любой уровень с сайта vgmaps.com и прогоняем его через утилиту и получаем готовый уровень для TileEd. Пока для простоты кода утилиты она сохраняет тайлсет в файл tileset.ppm - нужно еще открыть редактором и сохранить как tileset.bmp.
Конкретно с Contra Force есть косяк - движок игры не выводит одну полоску пикселей первой карты - и это было бережно перенесено в карту на вышеобозначенном сайте, так что большую часть времени работы над утилитой я провёл дорисовывая в GIMP эту чёртову полоску пикселей копируя данные с очевидных тайлов.
И исходный код утилиты и все промежуточные файлы тут: Dendy Map Generator

#222
10:33, 20 окт. 2018

=A=L=X=
> Не сам TileEd, а утилита написанная мной.
А, понятно.

#223
(Правка: 30 окт. 2018, 16:48) 20:59, 29 окт. 2018

Привет. У меня тут проблема, с которой я уже и раньше сталкивался, но тогда было решено забить болт, а сейчас нельзя никак.
В общем, я создал новый уровень, делаю build_graphics и эта штука добавляет + 2048 к каждому тайлу в аррее в таких файлах, как gr_backr_03.inc, который является фоновым слоем этого нового уровня. Да-да, я помню, что ты говорил, что числа выше 2048 - это ссылки на оптимизированные тайлы, но нет, тут это совсем не работает. В моём случае уровень превращается в месиво из тайлов, какие-то непонятные ссылки. В общем, build_graphics ни в коем случае не должен добавлять 2048

+ Показать

Я решил проверить, будет ли всё нормально отображаться, если я отниму 2048 от номеров тайлов и закину в gr_backgr_03.inc новый аррей. И да, теперь всё отображается, как положено
+ Показать

Короче говоря, проблема, что и в прошлый, что и в этот раз в твоём инструменте, который конвертирует тайловые карты в арреи (tmx2incl вроде), он просто в какой-то момент начиная с какого-то слоя начинает прибавлять 2048 ко всем тайлам. Я наверное и сам попытаюсь покопаться в нём, но тебе, как автору, должно быть виднее, в каком моменте это происходит. Могу кинуть свои исходники, чтобы нагляднее было.

upd. ошибка была из-за того, что битмап уже использовался для альтернативного тайлсета на первой карте

#224
12:14, 7 ноя. 2018

Перенос движка на Windows/SDL2 состоялся сокрушительным успехом:

Изображение
Страницы: 114 15 16 1719 Следующая »
ФлеймФорумПроЭкты