Воскресенье, 22 Декабря 2024, 09:33

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
В разработке RPG для Neo-Geo по мотивам Shaman King
ТомахомэДата: Воскресенье, 06 Мая 2018, 16:29 | Сообщение # 1
частый гость
Сейчас нет на сайте
...графической библиотеки DATlib v0.3.

Необычна данная RPG будет прежде всего тем, что в нём не будут использоваться вид сверху и изрядно недолюбливаемые мной chibi-пропорции спрайтов персонажей и прочей графики, игровое пространство будет наиболее близко к характерному для beat-em`up!'ов, плюс встречи с врагом будут не рандомными (как это обычно бывает с 8- и 16-битными RPG), а вызываемыми столкновением со спрайтом противника во время внебоевой прогулки по локации (похожим образом, с поправкой на трёхмерность, это реализовано в играх серии Xenosaga).

На данном этапе программа представляет собой пока что лишь модифицированный (в частности, код отображения спрайтов и фона, ранее разбросанный по разным функциям, теперь объединён в одну - она же теперь является главной в новой программе, плюс скроллинг фона управляется теперь не простым движением джойстика, а движением персонажа к краю экрана, плюс возможность персонажа перемещаться я ограничил соответствующим "полу" куском экрана, как в beat'em-up!'ах) пример работы библиотеки (собственно, этим и объясняется то, что графика в программе с Shaman King'ом вроде никак не связана), но, думаю, код её будет использован в качестве базы для внебоевой части геймплея.

Скачать программу можно здесь, (а для обеспечения возможности протестировать её на MAME кидайте XML-файл по ссылке, где уже заранее прописаны характеристики каждого ром-файла, в папку hash, затем создайте в директории MAME для ромов папку DATdemo и кидайте туда char.bin и fix.bin из папки out внутри директории непосредственно с исходниками плюс dev_p1.rom из этой же директории, а остальные нужные файлы берите из архива DATdemo.zip из папки DATdemo_rom) посмотреть видео геймплея - здесь. Скриншоты прикреплены ниже.





Надо подметить, кстати, что RPGшку свою я планирую делать по мотивам именно анимэ-сериала (по которому ещё с 2008 г. загорелся мечтой сделать RPG именно для Neo-Geo, о самом существовании которой узнал незадолго до этого) - хотя, может быть, и от оригинальной манги кое-какие элементы достанутся.
Для начала, раз уж упомянул причину отсутствия оригинальной графики, мне бы хотелось как-нибудь достать спрайт Haohmaru из первой части Samurai Shodown, чтобы с его поз и движений срисовать спрайт Йо, а также спрайт одного из противников в игре Burning Fight по имени Robert Baun (это который гангстер с револьвером) - на него в моей игре должен будет стать похож Рио (да и другие спрайты противников из Burning Fight могут понадобиться - для рядовых членов банды Рио, с которой героям поначалу придётся враждовать).

Добавлено (03 Мая 2018, 07:50)
---------------------------------------------
Тем временем я, в ожидании завоза оригинальной графики, решил хотя бы в плане геймплея хоть какого-нибудь прогресса добиться, и решил добавить первого врага. Реализовано это дело, правда, пока что на уровне вражеского спрайта, непосредственно сама функция боя и код её вызова в результате столкновения с этим спрайтом будут добавлены позже.




Добавлено (04 Мая 2018, 17:03)
---------------------------------------------
Заодно добавил также зачатки функции боевых сцен (для перехода на "арену боя" спрайты игрока и врага должны столкнуться друг с другом). Правда, есть одна проблема - всё никак не удаётся мне заставить персонажа во время атаки плавно подходить к врагу, а не "телепортироваться", как сейчас. Код, ответственный за ходы противника после игрока, будет добавлен позже.





Кстати, боево-ролевую систему, думаю, лучше всего было бы создать на основе результатов реверс-инжениринга кода Xenosaga Episode II (знать бы только, где приличный дизассемблер PS2 достать).

Добавлено (06 Мая 2018, 16:29)
---------------------------------------------
Добавил ходы противника с сопутствующей анимацией вражеских атак. Теперь прояснилась причина того, почему, несмотря на то, что в прошлых версиях я четко прописывал команду персонажу плавно подойти к врагу, затем воспроизвести анимацию удара и вернуться на прежнее место, команда эта не работала - что-то мешает программе плавно выполнять всю последовательность операций шаг за шагом (подход героя к врагу -> удар героя -> отход героя на прежнюю позицию -> переход очереди к противнику -> удар противника -> возвращение противника назад -> очередь игрока, и т. д.), и весь результат "выплёвывается" практически сразу, оттого и получается, что игрок с противником друг друга атакуют почти что одновременно.
Только вот что именно мешает, и как эту проблему решить?





Сообщение отредактировал Томахомэ - Пятница, 04 Мая 2018, 17:10
Hobo_GusДата: Воскресенье, 06 Мая 2018, 18:52 | Сообщение # 2
постоянный участник
Сейчас нет на сайте
сколько я уже видел проектов на гцупе от тебя, хоть один то закончить смогеш?

Weedman
ТомахомэДата: Воскресенье, 13 Мая 2018, 18:09 | Сообщение # 3
частый гость
Сейчас нет на сайте
Цитата Hobo_Gus ()
сколько я уже видел проектов на гцупе от тебя, хоть один то закончить смогеш?


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

Добавлено (13 Мая 2018, 18:09)
---------------------------------------------
Наконец-таки дошёл своим умом до решения проблемы.

Как выглядят теперь бои, можно посмотреть в видео по ссылке.

Неплохо бы теперь ещё научиться по прошествии определённого времени удалять с экрана только какие-то конкретные надписи, не тронув весь остальной fix layer, а также при анимации ударов выводить непосредственно бьющую часть спрайтов на передний относительно ударенного спрайта план.

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

TLTДата: Воскресенье, 13 Мая 2018, 18:37 | Сообщение # 4
Сейчас нет на сайте
Из видео чет я ничего не понял... В чём смысл такой боёвки?

Дао, выраженное словами, не есть истинное Дао.
ТомахомэДата: Понедельник, 14 Мая 2018, 04:40 | Сообщение # 5
частый гость
Сейчас нет на сайте
Боёвку я ещё пока что только начинаю делать, до нужного результата там ещё достаточно далеко.
afqДата: Понедельник, 14 Мая 2018, 05:41 | Сообщение # 6
Разработчик
Сейчас нет на сайте
Томахомэ, да кто ж так дерётся. Ты когда нибудь видел, чтобы кто нибудь подойдёт, ударит и уйдёт на своё место, потом другой подойдёт ударит и уйдёт на своё место. Сделай лучше, чтобы они рядом друг с другом стояли и не ходили туда сюда. Тогда будет похоже на драку. И блоки бы сделал ещё, чтобы один заблокировал голову, а ты в живот ударил. Ты заблокировал голову, и он в голову ударил в блок твой.
ТомахомэДата: Понедельник, 14 Мая 2018, 10:29 | Сообщение # 7
частый гость
Сейчас нет на сайте
Цитата afq ()
Томахомэ, да кто ж так дерётся. Ты когда нибудь видел, чтобы кто нибудь подойдёт, ударит и уйдёт на своё место, потом другой подойдёт ударит и уйдёт на своё место.


Почему-то в Xenosaga и многих других jRPG как раз так и сделали. А я как раз с самого начала и не скрывал, что именно как раз на Xenosaga и ориентируюсь.
Блоки также будут добавлены позже.
afqДата: Понедельник, 14 Мая 2018, 22:24 | Сообщение # 8
Разработчик
Сейчас нет на сайте
Томахомэ, ты главное не забрасывай игру. Потом будешь радоваться когда закончишь.
ТомахомэДата: Понедельник, 04 Июня 2018, 17:59 | Сообщение # 9
частый гость
Сейчас нет на сайте
Добавлены возможность проигрыша и анимации реакции на удары (как у врага, так и у игрока).






Добавлено (31 Мая 2018, 11:09)
---------------------------------------------
Меня уже давно мучает проблема с камерой во внебоевом режиме. В предыдущей запощенной здесь версии игры, если помните, в самом конце поля справа можно было заметить "двойника" спрайта противника, который, правда, в отличие от "оригинала", на столкновения со спрайтом игрока никак не реагировал. Я попробовал исправить этот баг (код ниже, правда, он немного отличается от того, что лежит в архиве по ссылке), и "двойник" действительно исчез, однако при этом сам спрайт противника стал, если игрок доходил до правого края фона, заметно смещаться вправо.
До:
После:

Код

  if((p1&JOY_LEFT)&&((x<=32)&&(x>0)))
  {
   scrl_x--;
   if ((scrl_x>FRONT_MIN_X)&&(enemyX<(320+(enemy_spr.maxWidth*16))))
   {
    clearFixLayer();
    enemyX++;
    aSpriteSetPos(&Enemy,enemyX,enemyY);
   }
  }
  
  if((p1&JOY_RIGHT)&&((x>=288)&&(x<320)))
  {
   scrl_x++;
   if ((scrl_x<FRONT_MAX_X)&&(enemyX>(0-(enemy_spr.maxWidth*16))))
   {
    clearFixLayer();
    enemyX--;
    aSpriteSetPos(&Enemy,enemyX,enemyY);
   }
  }


Интересную вещь также можно заметить в этом видео (в записанной версии добавлено отображение переменной enemyX) - оказывается, убывание переменной enemyX прекращается ещё до того, как игрок успеет упереться в конец скроллинга справа.

В чём тут дело, и какие решения проблемы можете посоветовать?

Добавлено (04 Июня 2018, 17:59)
---------------------------------------------
Ну что ж, хотя бы уродливую вертикальную тоненькую серую полосу в самом правом конце фона удалось убрать. Тем не менее, мне по-прежнему требуется помощь с камерой.

Добавлено (19 Октября 2018, 11:50)
---------------------------------------------
До меня уже, кажется, начинает доходить, что зря я внёс в игру вот этот код:

Код
if ((scrl_x>FRONT_MIN_X)&&(enemyX<(320+(enemy_spr.maxWidth*16))))
{
    clearFixLayer();
    enemyX++;
    //aSpriteSetPos(&Enemy,enemyX,enemyY);
}


Можете мне посоветовать хоть какой-нибудь другой способ предотвратить сползание вражеского спрайта на противоположный конец карты при скроллинге вправо?

Добавлено (07 Ноября 2018, 06:06)
---------------------------------------------
Наконец-то додумался решить свою давнюю проблему вот таким способом:

Код
aSpriteSetPos(&Enemy,enemyX,((enemyX>(0-(enemy_spr.maxWidth*16)))&&(enemyX<(320+(enemy_spr.maxWidth*16))))?enemyY:400);


Можете проверить результаты - всё отлично работает.

Добавлено (12 Ноября 2018, 07:12)
---------------------------------------------
Вот вам ещё пока новая версия:


  • Добавлен экран Game Over после поражения.
  • Больше нет внутриигрового дебаггинга переменных scrl_x и EnemyX в функции main.
  • Также удалён код, очищающий fix layer после первого же за игросеанс скроллинга.


Геймплейное видео можно скачать здесь.

Добавлено (17 Ноября 2018, 13:11)
---------------------------------------------
Добавлены кое-какие новые элементы интерфейса, однако вот в этом вот коде -

Код
if(turn==0&&phase==0)
{
    fixPrint(2,22,4,3,"Press 1P A, B");
    fixPrint(2,23,4,3,"or C button to");
    fixPrint(2,24,4,3,"attack enemy.");
}
else
{
    fixPrint(2,22,4,3,"             ");
    fixPrint(2,23,4,3,"              ");
    fixPrint(2,24,4,3,"             ");
}


- условие почему-то не работает, а также по какой-то непонятной причине уже на месте нижеследующего кода -

Код
if(turn==0&&phase==0)
{
    fixPrint1(17,22,3,3,"Willy the Buller");
    fixPrint1(17,23,3,3,"LIFE: %d", enemy_hp);
    fixPrint1(17,24,3,3,"SC");
    fixPrint1(17,25,3,3,"ZONE: ?");
}
else
{
    fixPrint1(17,22,3,3,"                ");
    fixPrint1(17,23,3,3,"                       ");
    fixPrint1(17,24,3,3,"  ");
    fixPrint1(17,25,3,3,"       ");
}


- происходит ошибка, компиляции, так что я этот код пока до поры до времени закомментил.




Сообщение отредактировал Томахомэ - Четверг, 31 Мая 2018, 11:15
drcrackДата: Суббота, 17 Ноября 2018, 13:57 | Сообщение # 10
старожил
Сейчас нет на сайте
Цитата
а также по какой-то непонятной причине

fixPrint1 точно не опечатка? в первом случае у тебя fixPrint без 1
ТомахомэДата: Суббота, 17 Ноября 2018, 16:30 | Сообщение # 11
частый гость
Сейчас нет на сайте
Цитата drcrack ()
fixPrint1 точно не опечатка? в первом случае у тебя fixPrint без 1


Опечаточка-то и впрямь закралась - только не там, где можно подумать: просто функция fixPrint (в отличие от функции fixPrintf, с помощью которой отображается большая часть надписей в игре), оказывается, для отображения переменных не годится. А что до цифр - это просто разные способы реализации fixPrint в DATlib (в чём их отличие, можно посмотреть в мануале по DATlib).

Тем временем версию я всё-таки исправил - сам файл архива на Гугл.Диске я заменил, последнюю ссылку с предыдущего моего сообщения теперь можно считать недействительной.


Добавлено (18 Ноября 2018, 04:44)
---------------------------------------------
Ещё раз обновил версию по последней ссылке - на этот раз пришлось сдвинуть элементы интерфейса на одну ячейку 8x8 от краёв экрана - сделано это специально для пользователей ЭЛТ-телевизоров, где верхние и нижние 8 строк скрыты от глаз зрителя.


Добавлено (10 Января 2019, 13:05)
---------------------------------------------
Ох ты ж ёлки, в праздничной суматохе совсем забыл рассказать: в игру наконец-таки добавлено стартовое меню, и теперь после game over screen'а игрока переносит уже прямо туда. Правда, пункт load game у этого меню всё ещё неактивен, ибо функции взаимодействия с Neo-Geo'вской картой памяти ещё не завезли.

Добавлено (18 Января 2019, 07:28)
---------------------------------------------
Наконец-таки я научился вставлять в игру музыку. В качестве звукового инструментария я в своём SDK использую утилиту NGFX SoundBuilder.
Что ж, теперь мне предстоит научиться работать уже со звуковыми эффектами, да и о замене цельных VAW-файлов, которые я пока что использую в качестве BGM, на MIDI- или трекерно-подобные ради экономии места в ROM'е для сэмплов тоже не худо бы.

Добавлено (13 Февраля 2019, 08:56)
---------------------------------------------
Первая попытка добавить в игру звуковые эффекты (пока что это просто взмахи кулаком или ногой при ударе) обернулась странным багом при их проигрывании (см. видео).

Есть версия, что причина ему - то, что вот в этом условии

Код
  if(turn==0) {
   if((p1e&JOY_A)&&phase==0)
   {
    phase=1;
    damage=1;
    attack_type=4;
   }
   if((p1e&JOY_B)&&phase==0)
   {
    phase=1;
    damage=2;
    attack_type=5;
   }
   if((p1e&JOY_C)&&phase==0)
   {
    phase=1;
    damage=3;
    attack_type=6;
   }
   
   if(phase==1)
   {
    if(x!=195)
    {
     aSpriteSetAnim(&demoSpr,1);
     x++;
    }
    if(x==195)
    {
     aSpriteSetAnim(&demoSpr,attack_type);
     //aSpriteSetAnim(&Enemy,4);
     
     if(attack_type==4)
     {
      send_sound_command(ADPCM_BMARY_ATTACK1);
     }
     if(attack_type==5)
     {
      send_sound_command(ADPCM_BMARY_ATTACK2);
     }
     if(attack_type==6)
     {
      send_sound_command(ADPCM_BMARY_ATTACK3);
     }
     
     if(demoSpr.currentAnim==0&&demoSpr.stepNum==0)
     {
      enemy_hp-=damage;
      textTimer=0;
      fixPrintf1(1,26,3,3,"Enemy lost %d HP.", damage);
      waitVBlank();
      phase=2;
     }
    }
   }
   if(phase==2)
   {
    if(x!=87)
    {
     flipMode|=FLIP_X;
     aSpriteSetFlip(&demoSpr,flipMode);
     aSpriteSetAnim(&demoSpr,1);
     x--;
    }
    if(x==87)
    {
     flipMode&=~FLIP_X;
     aSpriteSetFlip(&demoSpr,flipMode);
     aSpriteSetAnim(&demoSpr,0);
     turn=1;
     phase=0;
     if(enemy_hp<=0)
     {
      send_sound_command(ADPCM_LOCATION);
      clearFixLayer();
      clearSprites(1,192);
      SCClose();
      waitVBlank();
      return;    
     }
    }
   }
  }


условии что-то заставляет заключённую в него команду send_sound_command(ADPCM_BMARY_ATTACKX) бесконечно раз за разом выполняться в зацикленном режиме. Что мне сделать, чтобы вызов внутри условия происходил только 1 раз?
drcrackДата: Среда, 13 Февраля 2019, 09:27 | Сообщение # 12
старожил
Сейчас нет на сайте
попробуй в начало вставить attack_type=0;
ТомахомэДата: Среда, 13 Февраля 2019, 10:54 | Сообщение # 13
частый гость
Сейчас нет на сайте
Цитата drcrack ()
попробуй в начало вставить attack_type=0;


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

Чтобы всё заработало как надо, пришлось-таки ввести дополнительную переменную, позволяющую проигрывать звук взмаха только когда равна 0, а после первого же запуска нужного звукового эффекта переключающуюся на 1, а с началом фазы отхода от противника снова переключающуюся на 1.
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг