O que é uma alternativa ao dano por arranhões para solucionar um conflito de combate?


37

O dano por arranhões é uma mecânica de jogo em que qualquer ataque bem-sucedido sempre causa uma quantidade mínima de dano. Isso é frequentemente usado em sistemas de combate subtrativos, onde a defesa é subtraída diretamente do dano causado por um atacante. Portanto, o alvo sempre sofrerá um dano mínimo.

A desvantagem de tal sistema, pelo menos para mim, é que é um hack. É preciso uma fórmula simples como Damage = Attack - Defensee transforma-lo em um (ligeiramente) mais complexa: Damage = max(Attack - Defense, 1).

Eu também sinto que isso diminui a habilidade de um jogador em desenvolver seu personagem / etc. Não importa quantos bônus de defesa recebam, cada ataque causará um pequeno dano. Então, por que sua defesa é tão alta, se não significa nada?

Além disso, isso agora incentiva o uso de números maiores de Hp e danos, para que os danos causados ​​por arranhões sejam realmente desprezíveis. Afinal, se o dano mínimo for 1 e você tiver apenas 10 Hp, ainda será 10% da sua saúde. Mesmo com 20 cv, são 5%. E prefiro evitar usar números maiores assim, a menos que seja absolutamente necessário.

No entanto, há uma vantagem muito importante dos danos causados ​​por riscos: resolve o problema do impasse.

O impasse acontece quando nenhum dos lados é capaz de causar dano ao outro. Se você investir todos os seus recursos em defesa e poucos em ataque, seu personagem poderá não sofrer dano, mas também não conseguirão lidar muito. Assim, você pode encontrar um encontro em que nenhum dos lados será capaz de causar dano, portanto a batalha continua para sempre. Isso é especialmente se você não tem mecânicas aleatórias, como hits críticos (que eu também odeio).

Pelo menos com danos causados ​​por arranhões, alguém acabará vencendo. Pode ser apenas aquele com o maior número de Hp ou mais alto de ataques, mas a batalha terminará.

Então, eu gosto de ter um sistema de combate onde sempre haverá um resultado. Mas não gosto de sofrer arranhões. Quais são minhas alternativas?

Alternativas que não envolvem rolar números aleatórios; Eu quero que o combate seja 100% determinístico. Se a mesma batalha for travada, o mesmo resultado exato deve acontecer.

Se você quiser detalhes específicos sobre o jogo, pense em termos de combate por turnos, onde a batalha pode ser automatizada (você projeta suas forças e as lança contra outras).


8
Você poderia fazer um sistema de armadura em deterioração (por encontro) para resolver o problema do impasse?
Tetrad

11
Eu sugiro que você dê uma olhada em "Padrões de design de jogos bem-sucedidos": rpg-design-patterns.speedykitty.com/doku.php/start
Exilyth

3
Posição do advogado do diabo: em vez de forçar os jogadores a jogar da maneira certa, por que não deixá-los decidir se querem usar construções estúpidas que podem causar um impasse?
Patrick Hughes

3
@PatrickHughes: Porque acredito que é um design de jogo ruim permitir que o jogador se coloque em uma posição ruim sem aviso prévio. E mesmo com o aviso prévio, eles devem ser capazes de sair disso quando perceberem que está acontecendo. Se suas escolhas de design de personagens não puderem ser retomadas, eles precisam saber de antemão que não estão se ferrando permanentemente fazendo escolhas que pareciam uma boa ideia na época.
Nicol Bolas

11
A combinação de rpg-design-patterns.speedykitty.com/doku.php/… com rpg-design-patterns.speedykitty.com/doku.php/pattern:hit_points e uma falta de randomização leva ao problema descrito na pergunta. O problema pode ser atenuado usando rpg-design-patterns.speedykitty.com/doku.php/… ou um rpg-design-patterns.speedykitty.com/doku.php/… .
Exilyth

Respostas:


41

Você pode implementar um sistema de fadiga / resistência. À medida que mais e mais ataques são feitos, o jogador fica cada vez mais cansado, o que significa que eles são incapazes de manter uma defesa tão boa (esse braço do escudo começa a se sentir muito pesado depois de balançar a espada 50 vezes) à medida que a fadiga aumenta, a defesa cai. Isso significa que um jogador que desenvolveu um bom personagem não sofrerá dano em encontros rápidos, mas um combate prolongado resultará em dano crescente, impedindo um impasse.


21

Parece uma pergunta muito aberta. Soluções (que ainda não foram mencionadas) para evitar conflitos:

  • Permitir conflitos como um resultado final viável. Esta é a solução menos esperada ou típica. Em um jogo de RTS, por exemplo, isso pode ser um cessar-fogo desconfortável ou um conflito tenso, mas discreto, em um equilíbrio violento.
  • Uma limitação de tempo com laços permitidos
  • Limitação de tempo em que o primeiro acerto / pontuação / ponto após o limite vence (morte súbita / hora extra)
  • Perigos aleatórios no sistema (a la bombs em Super Smash Bros ). Isso muda o foco da situação de ataque para defesa.
  • Qualquer fator externo para desequilibrar o sistema (por exemplo, um terceiro agente com alto dano e armadura baixa, um acordo de ambos os lados para "duelar" sem toda essa armadura)
  • Defesa como% reduzida (provavelmente a solução mais simples, desde que a defesa seja limitada)
  • Habilidades ou táticas que alteram a dinâmica da jogabilidade (escolhas que não resultam em dano, como uma habilidade Cloak / Invisibility)
  • Meios de causar dano muito maior (acertos críticos clássicos, bônus furtivos, bônus de altura, bônus de terreno, uma habilidade que transforma porções aleatórias de solo em lava)
  • Meios de danificar ou diminuir a armadura, ou causar um dano diretamente direcionado a personagens de alta defesa (habilidade que inverte a armadura no cálculo, para que agentes com menor defesa recebam menos dano)
  • Itens ou habilidades de uso limitado (por exemplo, bombas, habilidades poderosas mas drenantes). Útil apenas se houver metas de longo prazo além do impasse para equilibrar o uso limitado
  • Termine o combate artificialmente (opção clássica "Fugir")

7

Como variante, você pode adicionar o acúmulo de feridas. Certamente, um machado de cobre gigante não penetrará em armaduras pesadas de aço, mas causará alguns danos bruscos e poderá até quebrar ossos. O mesmo vale para balas e coletes.

Toda vez que um personagem é atingido, converta parte do dano penetrante e cortante em dano contundente, que se acumula. Após certo limiar (que depende da resistência, por exemplo), o dano acumulado irá interferir nas habilidades de combate do personagem. Algumas opções aqui:

  • A armadura pode ser menos eficiente ao receber ataques nas mesmas partes do corpo.

  • Feridas significativas: dano periódico, fraqueza devido à dor.

  • Feridas graves: perda de consciência a curto prazo (tornando o personagem muito vulnerável).

  • Ferimentos extremos: perda permanente de estatísticas (se o personagem conseguir sobreviver).

Related: Mecânica de danos em Dwarf Fortress


2
Eu sugeriria causar dano a toda arma que não pudesse ser bloqueada pela armadura. Espadas e punhais teriam pequena capacidade de espancar, mas machados e maças seriam muito eficazes.
Jmegaffin

5

Implemente diferentes tipos de danos, com armaduras que apenas protegem contra alguns tipos de danos. Por exemplo, dano cinético, ácido, dano por fogo, etc. Nenhuma armadura deve proteger contra cada tipo de dano.

Os usuários podem colocar suas armaduras em camadas para proteger contra todos os tipos de danos, mas não podem proteger contra todos os tipos de danos ao mesmo tempo. Isso também implementa alguma estratégia nas batalhas, onde os jogadores precisam mudar os tipos de dano para passar pelas várias camadas de armadura.


4

Você não pode ter um status de defesa e apenas dar a inimigos maiores um maior hp. Eu sei que você deseja evitar números gigantescos, mas se você quer um jogo determinístico por turnos, em que os ataques não se baseiam diretamente na entrada dos jogadores (não há chance de erro humano atrapalhar o ataque), o status da defesa parece um pouco inútil também.

Se você está preocupado com o aspecto da apresentação, pode dividir a HP em Corações ou em pips de saúde EG 100 hp = 1 coração. Os corações começam a ficar pretos quando um personagem perde HP e depois desaparece completamente. Dessa forma, é mais fácil para o jogador entender do que 129301239103123hp, mas você não precisa se preocupar em equilibrar alguma equação mágica.

Se você está preocupado com o realismo, sempre pode ser animado para parecer que o alvo do ataque bloqueia com sucesso ou é apenas levemente arranhado até o golpe fatal.


11
" se você quer um jogo determinístico baseado em turnos, onde os ataques não se baseiam diretamente na entrada [...] dos jogadores, a estatística de defesa também parece um pouco inútil. " A defesa não se baseia no conceito de "chance de senhorita". É mais como redução de danos em D&D, não THAC0 (ou o que eles estão chamando nos dias de hoje). Defesa significa que um ataque de 40 de dano pode ser reduzido para 10 de dano se você tiver 30 de defesa. Eu não vejo como isso pode nunca ser "inútil.
Nicol Bolas

11
Eu sei que a matemática é um pouco diferente, mas realmente não há uma grande diferença em termos de jogo entre apenas dar a um personagem uma quantidade proporcional de saúde e reduzir o dano em uma certa quantidade. Não se deve sempre haver alguma maneira de causar dano a um alvo. EDIT: Isso supõe que não haja ataques especiais que ignorem a defesa ou outros modificadores de jogabilidade.
Lewis Wakeford

Ter uma estatística de defesa subtrativa oferece algo mais do que apenas Hp (além de todas as coisas que você exceto, como ataques especiais ou modificadores). Cria estratificação entre usuários com danos ao longo do tempo e usuários com alto dano. Um personagem que ataca várias vezes, mas com dano menor, colide com um personagem de alta defesa, enquanto um personagem mais lento e com alto dano estará causando mais danos ao longo do tempo. Meros pontos de vida não criarão essa estratificação.
Nicol Bolas

4

Adicione um mecânico de desgaste para defesa. Faça todos os ataques reduzirem ligeiramente a defesa do alvo.

Eventualmente, mesmo um ataque fraco desgastará a defesa do alvo o suficiente para causar dano real.


3

Se você está bem em sair do mundo dos números inteiros e quer apimentar o sistema de subtração, pode usar o algoritmo de redução de danos do Warlords Battlecry III:

damage = attack

while DR > 0:
    usedDR = DR
    if DR > damage
        usedDR = damage
    damage = damage - usedDR * 0.5
    DR = (DR - usedDR) / 2

HP = HP - damage

Esta é a função que se comporta muito semelhante ao pseudocódigo acima:

damage(attack, DR) = attack * 2 ^ -(DR/attack)

Quando o RD é menor que o ataque (dano recebido), ele se comporta como o ataque - k * DR, onde k é 0,693 ( ln(2)para ser exato). Quando o DR estiver próximo ou maior, o dano recebido será reduzido pela metade DR/attack. Por exemplo, para DR = 30 e ataque = 10, o dano seria 1,25 (ataque pela metade 3 vezes).

Pode parecer mais complicado e difícil para o ser humano avaliar, mas é livre de hackers e as alterações nos dois parâmetros são relevantes. Se o atacante ganhar poder de ataque bônus ou o defensor ganhar ou perder DR por pequenas quantidades, o dano resultante será alterado.


1

Use carros alegóricos.

Mesmo se você apresentar HP inteiro ao player, use float para hp e float para danos.

Estou usando classes de armaduras fracionárias agora, onde armaduras de 1,0 é invencível e armaduras de 0,0 significa "leva dano total". O dano é reduzido como:

float hpReduction = hp - dmg*(1.f - armor) ;

Essa fórmula tem o efeito de permitir "dano duplo" ao definir armadura para -1.

Também classifiquei os danos em categorias, consulte os tipos de dano concussivo / explosivo de Starcraft ou o sistema de tipo de dano de Eve, por exemplo.

Então agora, um pouco de imp coçando a sua armadura de classe .99 acabará por bater em você até a morte, mas os ataques parecerão não causar dano ao jogador (ele permanecerá a 1 hp, passando de 1,15 hp para 1,1499 hp). próximo ataque ..)


0

Um gráfico de habilidades pode colocar algumas habilidades causadoras de dano como pré-requisitos para habilidades defensivas de nível superior, a fim de reduzir a capacidade de um jogador de fazer construções altamente assimétricas.

Acertos críticos podem causar algum dano, desde que a defesa não seja absurdamente alta. Se você os tornar periódicos e não aleatórios, ainda terá um combate determinístico.

Após um número de acertos com falha, você pode reduzir automaticamente a velocidade de ataque em favor de maior chance de acerto e dano. Seu personagem de raspadinha super-rápido estava fazendo dez ataques por segundo; agora, após quinze ataques sem causar dano, ele recebe três ataques por segundo a + 50% de acerto e + 200% de dano. Isso é semelhante a ocorrências críticas, mas é mais rápido para esse tipo de situação.

Você poderia usar a redução de dano percentual da armadura, mas para torná-lo mais interessante do que outra maneira de aumentar o seu HP máximo, você pode fazer com que a porcentagem de redução seja maior para ataques mais fracos. Por exemplo, redução de 90% para 1-20hp de dano, 60% para 20-30 e 30% para todo o resto.

Finalmente, não se preocupe com grandes números. Eles oferecem um grau de controle muito mais refinado do que os pequenos. Ter um personagem de nível 1 começando com 100 pontos de vida significa que você pode ter algo que os mata em sete hits, mas não em cinco. Isso significa que você pode ter danos causados ​​por veneno e outros danos ao longo do tempo que não são escandalosamente devastadores (assim como alguns que são, se você quiser). Se você não gosta de exibir números grandes, encontre uma maneira de não exibi-los.


0

Você diz que quer que sempre haja uma resolução, mas isso tem que ser uma vitória?

Considere a abordagem usada pelo Dominions - no turn 50, o atacante automaticamente rouba. No turn 75, o defensor automaticamente rouba. (Uma rota não funciona automaticamente - algumas unidades são imunes ao roteamento e, mesmo que uma unidade imóvel faça o roteamento, ela não pode realmente sair.) No turn 100, tudo o que resta é eliminado.

Embora eu discorde da maneira exata como ela funciona (há situações em que simplesmente leva muito tempo para matar o outro lado), a idéia básica permanece válida.

O que eu sugeriria:

Veja alguma medida do poder de cada lado. (Os pontos de vida são um ponto de partida óbvio, mas tenha cuidado, a Dominions tem um problema a esse respeito, onde a "perda" de pontos de vida que não é significativa está sendo contada - mudança de forma, convocação, etc., resultando no encaminhamento de exércitos devido a baixas quando eles não nem faça nada.) Acompanhe o valor mínimo atingido e observe quantas voltas foram desde que um novo mínimo foi definido. Se demorar muito sem que seja definido um novo mínimo, você tem algum tipo de impasse e o atacante deve recuar.


0

Uma alternativa que ainda não vi é que, como o valor da sua armadura torna o ataque negativo, você pode adicionar um pouco de RNG para um verdadeiro bloco:

const stratchDamage = 1;
var armour = 10; 
var blockCount = 0;

function registerAttack (incomingAttack)
{
    var incomingDamage = incomingAttack - armour;

    // Nothing unusual, deal damage
    if( incomingDamage > 0 ) 
    {
        dealDamage(incomingDamage);
    } 

    // Armour cancels out attack, deal scratch damage
    else if( incomingDamage == 0 ) 
    {
        dealDamage(scratchDamage);
    }

    // Armour over attack value, check if can block
    else
    {
        var trueBlockChance = armour - incomingDamage;

        // blockCount starts at 0, will always block first attack
        if( trueBlockChance  > blockCount ) 
        {
            // Can technically do nothing, or trigger block animations etc
            block();
            blockCount ++; // Increment block so they can't block forever
        }
        else
        {
            dealDamage(stratchDamage);
            blockCount = 0;
        }
    }
}

Quanto maior o déficit de dano após a armadura ser levada em conta, mais ataques o personagem pode bloquear antes de sofrer outro ataque de arranhão.

Isso fornece uma pequena escala extra para estatísticas defensivas, sem torná-las invulneráveis, além de permitir que ataques passem por esse mecânico de blocos, caso você queira, e naturalmente evitará impasses.

As lutas podem levar muito tempo se você tiver estatísticas acumuladas em sua defesa por ofensas, mas chegarão lá no final.


Citação do OP: Eu quero que o combate seja 100% determinístico. Isso não permite 100% de combate determinístico.
Charanor

Em seguida, o bloco também pode ser baseado em turnos, para cada nível de trueBlock em um ataque, o inimigo deve atacar muitas vezes para obter dano de arranhão. A mesma ideia pode ser aplicada.
Tom 'Blue' Piddock

@ Charanor - ajustou a resposta para ser 100% determinística.
Tom 'Blue' Piddock

-1

Muitos jogos de luta em 3D evitam danos causados ​​por arranhões. Exemplos são Tekken e Soul Calibur 2. Eles evitam isso dificultando a defesa perfeita. Alguns ataques são simplesmente muito rápidos para reagir. Eu acho que é uma solução muito boa.


-1

Eu acho que reduzir a eficácia da Defesa não é uma boa opção. Desautorizar um jogador leva a uma má experiência de jogo. Por que não fazer o contrário?

Por que não ligar o ataque com o passar do tempo. Isso aumenta os danos causados ​​por arranhões com o tempo, reduzindo o incentivo ao bloqueio. No meio da tarde do jogo, um personagem pode matar outro enquanto chora enquanto ele está defendendo.

Alguns rpgs pnp implementam um "mecanismo de tensão". Cada tensão de volta aumenta em um. Todos os testes têm o modificador adicionado do valor da tensão, empurrando a batalha para o fim.

Outra idéia, vinda dos jogos de luta, é um ataque que passa pela defesa. Não sei se o seu jogo é baseado em turnos ou em tempo real, mas esse ataque também pode abrir o oponente para um combo ou desativá-lo temporariamente.

Acredito que o truque não é defender a defesa. Faça outras opções tão boas quanto a defesa ou reduza os tempos em que a defesa é uma boa opção.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.