A abordagem do% attacker% pode ser estendida para incluir algumas informações além dos nomes dos objetos:
- O verbo pode ser singular ou plural. Isso depende do assunto. "Você ataca X" (sujeito singular da 2ª pessoa) vs. "Extrakun ataca X" (sujeito singular da 3ª pessoa) vs. "Os goblins atacam X" (sujeito plural da 3ª pessoa). A maioria dos verbos só precisa de um
-s
acréscimo, mas existem algumas exceções.
- O substantivo pode ser um nome próprio (" Goblin ataca X") ou um substantivo comum (" Um goblin ataca X"). Substantivos comuns que começam com um som de vogal devem usar "an" em vez de "a". Pode ser um substantivo comum, mas com apenas uma instância no contexto atual (" O goblin ataca X").
- O substantivo pode variar em número, de zero ("Você não bate goblins ") a um ("Você bate um goblin ") a muitos ("Você bate três goblins "). Muitos substantivos só precisam de um
-s
ou de um -es
acréscimo, mas há muitas exceções.
- Sujeitos e objetos podem ser simples (" Um duende ") ou composto (" Um duende e o irmão dela ").
- Substantivos comuns no início da frase precisam ser capitalizados, mas se o substantivo tiver um artigo ou se for composto, você deseja colocar apenas a primeira palavra em maiúscula. Substantivos próprios sempre estão em maiúsculas.
- A posição do sujeito (" Ela golpeou o duende") e a posição do objeto ("O duende bateu nela ") usam pronomes diferentes.
- Possessivos podem ser gerados adicionando
's
se singular (" Machado de um duende "), '
se plural (" Machado de dois duendes "), mas os pronomes têm suas próprias regras (" Seu machado").
Em inglês, escrevi para o Python uma biblioteca de geração de texto derivada de um MUD chamado JaysHouseMOO. Sinta-se livre para estudar ou copiar o código . Não possui uma boa biblioteca de casos excepcionais; você terá que adicionar isso com as palavras usadas no seu jogo. Receio que meu código portado não seja extensivamente testado. Também pode ser necessário adicionar mais casos para jogos (ele foi projetado para um MUD social, não para um MUD de jogos).
Seu exemplo seria escrito como "%1I %1:(inflicts) a serious wound (%2n damage) on %3i"
. Os números %1
, %2
, %3
contá-la qual o objecto é para ser substituído; I
/ i
digo para adicionar um artigo indireto ("a", "an"), se necessário; n
diz para exibir o substantivo sem artigos; :(inflicts)
diz para conjugar o verbo para esse objeto.
Aqui está o resultado a ser mostrado ao atacante, ao defensor e a todos os outros:
$ 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.')
Observe que se você o tivesse fornecido, (1, 'point')
ele teria impresso "1 ponto" em vez de "1 ponto". Isso é algo que me incomoda no texto do jogo, por isso certifiquei-me de incluir um recurso para facilitar a impressão correta.
Aqui está outro exemplo, com substantivos compostos e "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.")
Esses exemplos estão em inglês e acompanham apenas masculino / feminino, pronomes, verbos / substantivos no singular / plural e substantivos comuns / próprios. O que você precisa acompanhar varia entre os idiomas e o tipo de texto no seu jogo. Em espanhol existem pronomes formais e informais. Várias línguas têm formas masculinas e femininas de verbos. Os pronomes japoneses dependem do status do sujeito em relação ao objeto. Em algumas línguas, a conjugação verbal pode implicitamente incluir o sujeito. Determine todos os tipos de texto que você deseja gerar e os idiomas para os quais deseja traduzir, e isso informará o que você precisa rastrear nos objetos do jogo. Ao criar o conteúdo, você pode incluir as anotações necessárias e casos excepcionais.