програмування ігрових сюжетів


28

Я розробив ігровий движок в c / c ++ та DirectX.

У мене є плитковий двигун для карт, анімовані спрацьовані програвачі / npc, розмовляю з npc, меню та зміною рівня, але гри немає, вона просто відчуває себе порожньою.

Я озирнувся і слухаю відповіді на слова, але хочу знати, як реалізувати історію у своїй грі.

Деякі люди заявляють, що файл збереження містить прапори, що керують усіма можливими діями / станами, доступними в грі, але це звучить смішно.

Це трохи амбітно, але я прагну отримати таку гру, як старі ігри Pokemon / Final Fantasy.

Хтось знає, як працюють ці ігри чи використовувана теорія?

Я деякий час шукав і дуже вдячний за будь-який внесок людей.

Відповіді:


19

Історія вашої гри, ймовірно, повинна бути у формі автоматичного автоматичного режиму (або якогось розширеного FSA). Коли трапляються певні події, ви повинні перейти до нового стану. Таким чином, вам залишається зберігати лише поточний стан та будь-яку інформацію, необхідну для того, щоб знати, куди рухатися далі у FSA (разом із деталями гравця, такими як позиція, стан здоров'я тощо).

Наприклад, якщо ми абсолютно спрощуємо ігри на Pokemon, значки для тренажерних залів складають основну гілку FSA. Ви починаєте з стану 0, коли у вас немає значків, і, коли ви б’єте лідерів спортзалу, ви переходите через штати, до стану 1, до стану 2 і т.д. їх, щоб подивитися на сучасний стан. Наприклад, NPC поза третьою залкою перевірить, у якому стані ви перебуваєте, чи побачите, що ви перебуваєте в стані, що відповідає 3 значкам, і відповів би відповідно (можливо, "Молодці!").

Вам не потрібно зберігати стан усього світу; просто стан історії. Самі суб'єкти знають, як реагувати залежно від поточного стану.


цікавий підхід, і мені подобається, що доведеться його спробувати, але як би ви відстежували бічні квести, які не залежать від прогресу історії?

Це дійсно залежить від того, наскільки складною стає ваша історія. Можливо, найпростіше мати кілька FSA (по одному для кожної підсторії), або вам може знадобитися складне розгалуження. Вам потрібно сісти і намалювати свою історію як дорожню карту. Коли ви розумієте, як все переплітається, подумайте, як ви могли зберігати поточний стан (або стани, якщо воно може бути в декількох одночасно). Деякі речі потрібно буде зберігати окремо, наприклад, позиції NPC (якщо вам потрібно їх зберегти) та стан здоров'я певних персонажів, оскільки вони не залежать від історії.

цей FSA, про який ви говорите, де я б міг знайти пояснення цього, бажано, спрощеного та без переплетених інших теорій.
Скайт

Ви можете дізнатися все про державні машини всюди, але в 99,9% часу мова не буде про ігри. Вступна книга з обчислень навчить вас про них, але вам дійсно не потрібно стільки деталей. Вам просто потрібно зрозуміти поняття перебування в державах і переміщення між ними, коли трапляються певні події. @ pwny відповідь насправді просто сказати те саме по-іншому. Читання про FSA буде чудовим способом вивчити поняття державних машин. Просто Google для ознайомлення з державними машинами!
Джозеф Менсфілд

7

Ви можете використати набір можливих станів, у яких гра. Ваші NPC та ваш світ знають про ці стани і реагуватимуть / відображатимуться відповідно. Ви також можете визначити набір тригерів, які будуть активовані деякими діями / подіями.

Наприклад, побиття певного супротивника активує тригер A, який додасть стану S у ваш світ, а в стані S ваш персонаж зазнає електричного струму, коли він виходить зі сховища опонентів. Або надворі дощить. Або ви знайдете рідкісну цукерку. Ви отримуєте бал.

Завдяки цим двом простим доповненням до вашої гри, ви можете зробити її набагато більш "живою".

Переконайтеся, що ви також створили багатий фон для свого світу, персонажів та сюжетної лінії та переконайтесь, що гра відповідає цьому фону. Сплануйте свою історію спочатку.

Спробуйте також Гамедев


це можливо, але я впевнений, що кращі професіонали - це те, що ви, напевно, тягне за собою сотні тисяч булів та інтів (я це пробував). я просто не вважаю це реалістичним підходом до великомасштабної гри. дякую за посилання

Не обов’язково, уявіть 5 незалежних суперпользовательских станів. Ви отримуєте 32 можливі гілки за 5 булів. Я думаю, що це розумно. Крім того, тригерні системи використовуються у багатьох професійних іграх, тим більше, що ви можете сценарій поведінки, використовуючи ряд тригерів.
pwny

2

Як згадував sftrabbit, це ідеальний додаток для державної машини.

По суті, у вас є така структура дерева. Кожен аркуш / вузол містить інформацію про поточний стан та правила переходу до наступного стану. Кожен вузол може містити кілька виходів, залежно від того, наскільки складним вам повинен бути потік / грати потік.

Хороший, дуже вільний аналог цьому - книга " Вибрати власну пригоду" . Кожна сторінка містить текст, що описує частину історії, та рішення, які може приймати гравець. Кожне рішення веде на іншу сторінку. Деякі сторінки можуть посилатися на попередньо відвідані сторінки тощо.

У старих текстових пригодницьких іграх, таких як Zork та Leather Godgesses of Phobos , і сумнозвісні ігри Sierra * Quest ( SpaceQuest в ролях Роджера Вілко, космонавт - один з моїх улюблених ), використовували дуже просту версію цього типу системи. Кожна кімната на карті була станом, із виходами, які пов’язані з іншими станами чи кімнатами. Придбання елемента встановлює прапор у глобальному об'єкті стану. Кожна кімната перевіряла б ці прапори, щоб визначити, які символи чи предмети були доступні в кожній кімнаті.

Отже, ваші штати можуть бути реалізовані у вигляді класу або структури, кожен із властивостей для:

Список активів - список покажчиків на фонову графіку та все інше, що вам потрібно для відображення кімнати / стану / рівня.

Умови вступу - досягнення, які вже повинні бути досягнуті для виходу на рівень

Виходи - посилання на кожен можливий "наступний" вихід. Північ, Південь, Схід і Захід - кілька прикладів цього, але ви можете також включити Door1, Teleport і т. Д. При спробі виходу з кімнати або визначенні виходу / дверей "відкритим", ваша гра може перевірити наступний стан щоб побачити, чи були дотримані його умови для входу, і змінити спосіб відображення виходу на екран, чи просто не дозволяти гравцеві рухатися в цьому напрямку.

Якщо ви хочете пофантазувати, ви можете включити іншу версію штату з різними умовами входу, що змінило б спосіб подання кімнати гравцеві або дії, наявні в цій кімнаті.

Ваш початковий екран, смерть / гра над екраном тощо можуть бути станами всередині системи, подібно до способу переходу між екранами меню. Насправді, якщо у вас є така система меню, ви можете використати її для цього. Замість стрілок вгору / вниз та "введення" для навігації по меню ви шукаєте конкретні події в ігровій зоні, такі як наступати на телепортний майданчик, виходити з правої частини екрана тощо.

З точки зору адміністратора, подумайте, чи могли б ви отримати користь від створення інструменту адміністратора, який дозволить вам створити стан машини. Додайте кімнати до карти, створюйте зв’язки між ними, призначайте об’єкти, такі як фонові зображення тощо. Це, мабуть, зайве для вашої першої спроби; надто просто поглинатися побудовою інструментів адміністрування і ніколи насправді не закінчувати гру. Пам'ятайте - ви пишете не проміжне програмне забезпечення, а гру.

Сподіваюся, це допомагає.


для цього прикладу є місто. У мене є файл, який містить макет плитки, а також графіку та розмір, списки npc та загальні речі. додавши файл, в гру буде доданий новий кулачок міста, що дозволяє іншим внести свій внесок, або такий був план, але файл стає дещо повним і складним. якщо я вас розумію, я би поставив події, які можуть відбутися у вказаному місті, у цей файл прапорами для відстеження прогресу?
Skeith

@ Скейт так, це звучить як розумний підхід.
3Dave

0

Раніше я використовував цей ігровий движок під назвою VERGE . Пограйте з цим і подивіться, як він обробляє події, мені це дуже подобається. Він також є відкритим кодом, і ви можете побачити, як вони його реалізують, тут . Ось короткий опис.

Кожна карта має різноманітні шари. Графічні шари, яких може бути кілька. Шар перешкод. А потім є шар зони. Тут важливий зональний шар. *

У кожній плитці є номер, який вказує, до якої зони вона входить. Кожну зону можна активувати двома основними способами. Або зона активується при вході в неї гравця, або в ньому є суміжне активація. Сусідня активація означає, що коли плеєр стоїть поруч із однією з плиток зони та натискає якусь клавішу, вказану як ключ активації, зона активується.

Що відбувається при активації зони, це викликає функцію зі сценарію. Тож вам потрібно вбудувати якусь мову сценаріїв. У VERGE є своя мова під назвою VergeC, і вона також дозволяє lua. Я сам вважаю за краще використовувати пітон.

Як тільки ви пережили цю перешкоду, тепер у вас є величезна сила у ваших сценаріях подій. У вас є повноцінна мова програмування, в якій ви можете зберігати та діяти на таких даних, як статистика гравців, прапорці сюжетів тощо ...

* Також є рівень Entity. Суб'єкти діють як мобільні сусідні активовані зони.


це звучить як система, яка використовується в серії виробників ігор RPG. але що робити, якщо на цій плитці є 5 різних подій на основі того, наскільки далеко ви перебуваєте в історії?
Скіт

@Skeith Це не може. Кожна плитка має лише одну зону, пов’язану з нею. І кожна зона має лише одну функцію скрипту, яку вона викликає. Але це не проблема. Пам'ятайте, у вас тут повноцінна мова програмування. Інформація про те, як далеко через історію, яку ви знаходитесь, зберігалася б у змінній (або декількох). Тож вирішити, що робити - це просте питання тестування цієї змінної у сценарії та вжиття відповідних дій на основі її значення.
Бенджамін Ліндлі

@Skeith: Хоча ви можете додати можливість зміни, до якої зони належить плитка.
Бенджамін Ліндлі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.