Библиотеки интеграции GameMaker Studio 1 для Stagecraft

Как обсуждалось в предыдущем посте, Stagecraft упрощает создание многофункциональных разветвленных диалогов по сравнению с другим подобным программным обеспечением. Возможность разделить каждый элемент каждой последовательности диалогов или сценария на поля *.JSON, безусловно, избавляет от необходимости парсить ваши экспортные файлы на пару ступеней ниже —

— Но до сих пор вам все равно нужно было иметь какой-то алгоритм распаковки в вашу игру для диалогового проекта. С интеграционными библиотеками, над которыми я работаю, это не понадобится для GameMaker Studio 1 и, в значительной степени, для GMS2!

Что такое библиотеки интеграции? Сейчас это просто объект и пара скриптов, которые запускаются внутри него. Этот объект не предназначен для рисования всего вашего диалога, он просто рисует кучу поверхностей (слоев) либо с ответом персонажа NPC, либо с отдельными вариантами диалога игрока; Что вы будете делать с этими созданными ресурсами, зависит только от вас!

Так какова же во всем этом работа пользователя, если библиотеки делают большую часть работы? Ну, это зависит от того, чего вы хотите достичь; Мой рудиментарный пример диалоговой системы, который я использовал для их тестирования, состоит только из портретного спрайта npc, экспортированного с помощью Stagecraft, диалогового окна и диалога внутри него, где выбор прокручивается с помощью клавиш со стрелками вверх/вниз. И когда я говорю рудиментарный, я имею в виду:

Ага. Тем не менее, это работает, и вам не нужно много знать о внутренней механике интеграционных библиотек (хотя они будут с открытым исходным кодом, поэтому вы можете заглянуть под капот и изменить его по своему усмотрению!). Помимо создания экземпляра диалогового объекта, чей сценарий создания экземпляра имеет документацию по аргументам, вам нужно знать только индекс выбранного объекта, индекс портретного спрайта и еще 2 переменные для поверхности текста диалога, о которых я упоминал ранее, поэтому пока 4 переменные ( в будущем могут быть добавлены некоторые дополнительные сложности). Зная все это, вам теперь нужно только установить ссылку из указателя выбора на клавиатуру или мышь, а затем рисовать то, что вам нужно!

Вот какой-то конкретный код, сначала для кода клавиатуры —

if(keyboard_check_released(ARROW_DOWN)){
 selectedChoiceNumber += 1;
  if(selectedChoiceNumber >= maxChoices){
  selectedChoiceNumber = 0;
 }
}
if(dialogIsOpened && keyboard_check_released(CONFIRM_KEY)){
 alarm[1] = alarmDelay;
 dialogObject.selectedChoiceNumber = selectedChoiceNumber;
}

— И код розыгрыша:

if sprite_exists(dialogObject.avatarSprite){
 draw_sprite(dialogObject.avatarSprite, 0, 0, 0);
}
if(sprite_exists(sprDialogBox)){// not necessary
 draw_sprite( 
 sprDialogBox
 , 0
 , dialogBoxX
 , dialogBoxY
 );
}
if(surface_exists(dialogObject.npcTextSurface)){
 draw_surface(
 dialogObject.npcTextSurface
 , dialogBoxX
 , dialogBoxY
 );
}
for(var i = 0; i < array_length_1d(dialogObject.choiceSurfaceArray); i++){
 if(surface_exists(dialogObject.choiceSurfaceArray[i])){
 draw_surface(
 dialogObject.choiceSurfaceArray[i] 
 , dialogBoxX
 , dialogBoxY + firstChoiceOffsetY + choiceDefaultHeight * i
 ); 
 }
}
draw_sprite(// not necessary
 spr_choice_arrow
 , 0
 , dialogBoxX
 , dialogBoxY + firstChoiceOffsetY + choiceDefaultHeight * selectedChoiceNumber
);

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

На этом пока все, я буду работать над этим дальше, бог знает, в примере с игрой, который я использую, это нужно!