Estou procurando uma maneira de criar um inimigo Berserker convincente em um Roguelike que venho criando há algum tempo. Você pode assumir um jogo como o NetHack para isso ao considerar que tipos de ações podem ser executadas e mensagens de texto que podem ser alertadas.
Peço isso por duas razões:
- Estou tentando resolver esse problema há mais de um ano e falhei. Exemplos a seguir.
- Vejo uma falta geral de exemplos nesta SE que mostram como é o mapeamento dos estados de uma entidade. Seria útil para a comunidade ter esse exemplo.
O que eu preciso:
Quando digo Berserker, refiro-me a um inimigo que pode entrar em uma fúria cega e atacar outras entidades com as quais está em conflito com a violência e a sede de sangue. Não basta mudar para atacar alvos aleatoriamente, como é feito em muitos RPGs. Para esse fim, fique à vontade para assumir a adição de quaisquer efeitos ou buffs de status que desejar. Apenas certifique-se de detalhar as informações pertinentes para esses estados.
Uma entidade furiosa precisa expressar sua raiva de uma maneira que não seja simplesmente uma mudança de status com alguns aumentos de força. Esta é uma solução muito superficial para o problema. A entidade não acaba se sentindo um Berserker.
O que eu tentei:
Eu tentei três idéias diferentes ao longo do ano passado. E nenhum deles satisfaz. Uma solução para o problema pode ser totalmente nova ou uma 'correção' para um deles. Estou incluindo-os principalmente para que os sucos fluam.
- A primeira coisa que tentei foi um simples estado de Berserk que aumentou a força da entidade, selecionou seu alvo aleatoriamente (da lista de inimigos), fazendo-o gritar obscenidades, etc. Uma vez nesse estado, o inimigo permaneceria nele até a morte.
- A próxima coisa que tentei foi realmente uma modificação do exposto acima. O inimigo se sentia muito achatado, e não havia como acalmá-lo ou derrubá-lo de sua raiva que parecia irrealista. Eu adicionei a capacidade de acalmar (com um feitiço e outros efeitos) e também uma condição que retornaria o inimigo a um estado normal, do qual ele poderia fazer a transição para outros, como fugir. Isso criou mais profundidade, mas fez o estado Berserker parecer ainda mais superficial e menos destrutivo.
- A partir daqui, raspei tudo e tentei algo mais emergente. Essencialmente, um lustre que o inimigo poderia lançar sobre si mesmo com base em um estado de transição. Uma vez lançado, isso mudaria o comportamento dos inimigos (para mirar) e aumentaria o dano deles enquanto lançava insultos ao inimigo aleatoriamente. Então, ele poderia entrar em qualquer outro estado e ficar furioso. Para que ele possa fugir, mas ainda provocar. Ele pode curar, mas ainda fica enfurecido e causa muitos danos. Isso é melhor, mas a questão subjacente ainda permanece. Ele realmente não parece irritado, apenas chateado. Principalmente porque você normalmente encontra o inimigo sozinho, e não com outros inimigos de quem o berserker não gosta, então o aspecto da randomização é menosprezado.
De que outra forma posso fazer o cara parecer Berserked, e não apenas chateado / com a boca suja?
Sei que essa é uma pergunta de lista limítrofe. Por isso, imponho esses requisitos: deve ser uma resposta completa muito detalhada que mostre todos os estados e condições para a transição. E deve ser mais do que um palpite. Você deve testar isso do seu jeito, ou então deve ser óbvio por que essa é a provável 'melhor' solução para transmitir a ideia do status de Berserk.
Também não vou me ofender se isso estiver fechado. Eu percebi que dança na borda.
fonte
Suponho que a resposta dependa exatamente do que você considera um "berserker".
Os Berserkers históricos eram tropas de choque que concentravam sua atenção em envolver e matar seus oponentes com pouco respeito a qualquer outra coisa, incluindo sua própria segurança ou a dos outros do seu lado. Fontes diferentes discordam de quão indiscriminadas elas foram na matança: algumas as descrevem como matando voluntariamente qualquer pessoa e todos ao seu redor, enquanto outras apenas as descrevem como guerreiros destemidos. Aqui está uma citação do meio da estrada da saga Ynglinga , via Wikipedia:
Então, minha concepção de berserker seria algo assim:
Então, como eu traduziria essas características no comportamento da IA do jogo? Bem, aqui estão algumas idéias:
Isso deve ser um acéfalo, mas um berserker nunca deve fugir , mesmo que ele esteja com um único ponto de vida e sangrando. Apenas desative esse código. O mesmo vale para qualquer outra tática "defensiva".
Priorize as opções táticas nesta ordem: 1. Ataque. 2. Avance para o alvo. 3. Tudo o resto. Em particular, os furiosos não devem parar para pegar itens se houver inimigos à vista, mesmo que os itens sejam, digamos, melhores armas do que atualmente. (No entanto, mudar de mãos nuas para uma arma mêlée já segura pode ser razoavelmente priorizado, mesmo após o ataque.)
Se atacar e perseguir o alvo podem ser opções táticas válidas ao mesmo tempo, considere dar a seus berserkers a capacidade de fazer as duas coisas ao mesmo tempo (um ataque "de passagem"), mesmo que suas criaturas normalmente não consigam isso (possivelmente com uma penalidade de precisão para compensar). Dessa forma, seus berserkers não precisarão diminuir sua carga para receber ataques de oportunidade.
Seleção de alvos: sugiro apenas escolher o inimigo visível mais próximo (independentemente do nível) e fazer com que o berserker o persiga, pelo menos a menos que outro inimigo se aproxime significativamente (digamos, metade da distância do alvo atual). Continue perseguindo o alvo, mesmo se você perder temporariamente a linha de visão, desde que o alvo não fique muito longe. Isso deve dar uma sensação de obstinação. Quando o alvo estiver no alcance de mêlée, ataque-o.
Desbravamento: Se houver amistosos entre o berserker e seu alvo, considere deixá-lo atacá-los e abrir caminho. Depende de você o quão ansioso você o fará - pelo menos ele deve fazê-lo se não houver outro caminho para o alvo, mas você pode até pensar em fazê-lo ignorar os amistosos inteiramente na busca de caminhos.
O que foi dito acima provavelmente funciona melhor se você também fizer com que os amigos (não-berserker) tentem fugir do quadrado em que o berserker será o próximo a entrar (e talvez o próximo quadrado ou dois no caminho dele). Claro, se houver muita gente, eles podem não conseguir fugir a tempo ...
Se não houver alvos inimigos por perto, considere deixar o berserker atacar amigos próximos (adjacentes ou talvez um ou dois quadrados de distância). Obviamente, os amistosos deveriam tentar fugir. Em qualquer turno em que o berserker não tenha um alvo inimigo e não faça um ataque, faça-o se mover aleatoriamente e dê a ele uma chance aleatória por turno de se acalmar e voltar ao estado normal.
Escolha das armas: Como observei acima, os verdadeiros berserkers eram grandes no combate ao mêlée. Não use armas de longo alcance, a menos que sejam particularmente comuns e poderosas no seu jogo (por exemplo, armas em um ambiente moderno). Se você deixar seus berserkers usarem armas de longo alcance ou de efeito de área, deixe-os dispará-los enquanto persegue o alvo (veja os ataques de passagem acima). Obviamente, os danos colaterais devem ser ignorados (pelo berserker - fazer com que outros inimigos se desviem para ficar fora da linha entre você e um berserker com uma arma seria um toque muito bom).
E, é claro, o berserker deve ter buffs apropriados de ataque, defesa e velocidade. Eles provavelmente também devem estar imunes a qualquer efeito de fadiga ou medo. Se cego ou confuso, peça que eles façam ataques aleatórios na esperança de acertar alguma coisa.
Você notou que deseja que o berserking seja um estado que às vezes pode ser inserido por inimigos normais (com uma propensão a isso). Assim, você precisará decidir o que o acionará. IRL, gatilhos tradicionalmente descritos incluem combate, esforço pesado e estresse. Alguns gatilhos em potencial para um jogo podem incluir:
Nenhum desses provavelmente deve ser um gatilho automático da IMO; pelo contrário, deve haver uma chance aleatória para cada um desses eventos acionar o estado de furioso, com as probabilidades talvez variando com base na propensão individual e na gravidade do evento. Além disso, combinações de vários gatilhos podem tornar a berserking mais provável: por exemplo, a presença de um inimigo visível pode ser uma pré-condição para qualquer um dos outros eventos disparar a berserking, enquanto pontos de vida baixos podem aumentar as chances dos outros gatilhos.
Além disso, você pode considerar a possibilidade de introduzir um "medidor de raiva" em vez de apenas um simples estado de furto. Por exemplo, um furioso recém-desencadeado pode começar com, digamos, raiva = 1, com atacar e ser atacado aumentando o medidor, e não vendo nenhum inimigo diminuindo-o. Em baixa raiva, um furioso seria simplesmente destemido e polido, mas geralmente evitaria atacar amistosos, enquanto uma raiva aumentada aumentaria os polêmicos, mas também tornaria cada vez menos os ataques do furioso. Quando o medidor de raiva cai para zero, o furioso se acalma e volta ao normal.
Quanto aos gritos obscenos, na maioria das vezes eu me livrava deles: vejo um berserker muito focado em atacar para se incomodar com qualquer provocação boba. Suponho que você possa fazer ele gritar alguma coisa quando o estado de berserk for acionado, e talvez rugir ou fazer um simples grito de guerra ao se aproximar do alcance dos mêlée, mas isso me parece suficiente.
Edit: Depois de reler o que escrevi acima, acho que a essência do que estou tentando dizer é o seguinte: não se concentre muito na IA do berserker. No final, é provável que seja muito simples, provavelmente muito mais simples do que a IA normal do inimigo. Em vez disso, concentre-se em como os outros inimigos se comportarão quando virem um furioso por perto - é aí que a dinâmica realmente interessante surgirá.
fonte