Підхід% зловмисника% може бути розширений, щоб включити інформацію, яка не є лише іменами об'єктів:
- Дієслово може бути однини або множини. Це залежить від теми. "Ви атакуєте X" (єдиний предмет 2-ї особи) проти "Екстракун атакує Х" (сингулярний предмет 3-ї особи) проти "Гобліни атакують Х" (множина суб'єкта 3-ї особи). Більшість дієслів просто потребує
-s
додавання, але є кілька винятків.
- Іменник може бути власним іменником (« Гоблін атакує Х») або загальним іменником (« А гоблін атакує Х»). Загальні іменники, що починаються з голосного звуку, повинні вживати "а" замість "а". Це може бути звичайним іменником, але мати лише один екземпляр у поточному контексті (" Гоблін атакує X").
- Іменник може змінюватись за кількістю: від нуля ("Ви не б'єте гоблінів ") до одного ("Ти вдарив одного гобліна ") до багатьох ("Ти вдарив трьох гоблінів "). Багато іменників просто потребують
-s
або -es
додаються, але є багато винятків.
- Предмети та предмети можуть бути простими (" гоблін ") або складними (" Гоблін та її брат ").
- Поширені іменники на початку речення потребують великої літери, але якщо у іменника є стаття або якщо вона є складовою, ви хочете використовувати лише великі літери першого слова. Власні іменники завжди з великої літери.
- Предметна позиція (" Вона вдарила за гобліном") та об'єктна позиція ("Гоблін ударив її ") використовують різні займенники.
- Присвійні може бути отримано шляхом додавання ,
's
якщо єдине число ( «A гобліна сокири»), '
якщо множина ( «Два гоблінів вісь"), але займенники мають свої власні правила ( " Ваш сокиру»).
Для англійської мови я написав Python бібліотеку генерації тексту, отриману з MUD під назвою JaysHouseMOO. Не соромтеся вивчати або копіювати код . У ній немає гарної бібліотеки виняткових випадків; вам доведеться додати це зі словами, які використовуються у вашій грі. Я боюся, що мій перенесений код недостатньо перевірений. Також може знадобитися більше випадків для ігор (він був розроблений для соціальних MUD, а не для ігор MUD).
Ваш приклад буде записаний як "%1I %1:(inflicts) a serious wound (%2n damage) on %3i"
. Числа %1
, %2
, %3
сказати йому , який об'єкт повинен бути заміщений; I
/ i
скажіть йому, якщо потрібно, додайте непряму статтю ("a", "an"); n
підказує відображати іменник без статей; :(inflicts)
підказує сполучити дієслово для цього об’єкта.
Ось результат, який можна показати нападникові, захиснику та всім іншим:
$ python
>>> import msg
>>> m = "%1I %1:(inflicts) a serious wound (%2n damage) on %3i."
>>> attacker = msg.GenderedObject('Amit', 'm', 'proper')
>>> defender = msg.GenderedObject('goblin', 'm', 'unique')
>>> points = (12, 'point')
>>> msg.Msg().sub_parties({1: attacker, 2: points, 3: defender},
m, [attacker, defender])
(['You inflict a serious wound (12 points damage) on the goblin.',
'Amit inflicts a serious wound (12 points damage) on you.'],
'Amit inflicts a serious wound (12 points damage) on the goblin.')
Зверніть увагу, якби ви її дали, на ній (1, 'point')
було б надруковано "1 бал" замість "1 бал". Це щось, що мене заважає в тексті гри, тому я переконався, що я включив функцію, щоб полегшити її належне друкування.
Ось ще один приклад зі складеними іменниками та "a" vs. "an":
>>> m = "%1I %1:(hits) %2'n %2'(head)."
>>> a1 = msg.GenderedObject('goblin', 'm', 'normal')
>>> a2 = msg.GenderedObject('orc', 'm', 'normal')
>>> d1 = msg.GenderedObject('Amit', 'm', 'proper')
>>> d2 = msg.GenderedObject('Extrakun', 'm', 'proper')
>>> msg.Msg().sub_parties({1: [a1, a2], 2: [d1, d2]}, m, [d1, d2])
(["A goblin and an orc hit your and Extrakun's heads.",
"A goblin and an orc hit Amit's and your heads."],
"A goblin and an orc hit Amit's and Extrakun's heads.")
Ці приклади є англійською мовою, і відслідковуються лише чоловічі / жіночі, займенники, однини / множини дієслова / іменники та належні / загальні іменники. Те, що вам потрібно відстежувати, залежить від мов та типу тексту у вашій грі. В іспанській мові є офіційні та неофіційні займенники. Кілька мов мають чоловічі та жіночі форми дієслів. Японські займенники залежать від статусу предмета щодо об’єкта. У деяких мовах сполучення дієслів може неявно включати тему. Визначте всі види тексту, які ви бажаєте створити, та мови, які ви хочете перекласти, і це підкаже, що вам потрібно відстежувати в ігрових об'єктах. Створюючи вміст, ви можете включати необхідні примітки та виняткові випадки.