Estou desenvolvendo um RPG e estou no ponto em que preciso começar a construir um banco de dados inimigo. Existem alguns desafios associados a isso e a algumas soluções que venho considerando.
Aqui está o que eu preciso fazer no meu banco de dados inimigo:
Eu tenho duas classes inimigas principais das quais preciso representar dados:
Uma classe inimiga base que inclui o seguinte:
Base Stats
Status Resistance Table
Elemental Resistance Table
Steal Table
Drop Table
Level
Unique ID
Base XP
AI Hook
Name
Display Name
E uma classe derivada que adiciona a capacidade de adicionar equipamentos, adicionando os seguintes campos:
Main Weapon
Secondary Weapon/Equipment
Armor
Accessories
Posso adicionar campos ou classes adicionais no futuro, se fizer sentido. Eu considerei dois formatos possíveis para inimigos de banco de dados.
Arquivos XML
Eu basicamente faria assim:
<?xml version="1.0" encoding="utf-8"?>
<Enemies>
<Enemy name="Red Dragon" type="BaseEnemy" level="56" displayname="Red Dragon">
<Stats HP="55000" MP="2500" SP="2500" Strength="212" Vitality="125" Magic="200" Spirit="162" Skill="111" Speed="109" Evasion="100" MgEvasion="100" Accuracy="100" Luck="55"/>
<StatusResistances>
<Resistance name="Sleep" value="100" />
<Resistance name="Stop" value="100" />
</StatusResistances>
<ElementResistances>
<Resistance name="Fire" value="75" />
</ElementResistances>
<LootTable>
<Item name="Elixir" rate="0.03" count="1"/>
</LootTable>
<DropTable>
<Item name="Elixir" rate="0.03" count="1"/>
</DropTable>
<AIScript value="BasicBehaviour.py" />
<BaseXP value="4800"/>
</Enemy>
<Enemy name="Gaverick 1" type="HumanoidEnemy" level="33" displayname="Gaverick">
<!--Same Stuff as above here-->
<Equipment>
<Weapon name="Dark Eclipse"/>
<Armor name="Terra Defense"/>
<Accessory name="Ribbon"/>
</Equipment>
</Enemy>
</Enemies>
Vantagens:
- Fácil de estender se precisar adicionar / reorganizar parâmetros
- fácil de atribuir valores padrão
- Eu já tenho um analisador XML (pugixml) incluído para arquivos de configuração, mapas lado a lado e descrição de recursos
Desvantagens:
- potencialmente lento (meu banco de dados provavelmente atingirá várias centenas de inimigos)
- não pode procurar inimigos arbitrários, provavelmente precisará manter todos os inimigos na memória.
- Isso significa que eu preciso reiniciar o jogo para carregar dados alterados do inimigo também
SQLite
Para isso, eu basicamente faria uma tabela com colunas representando todos os dados necessários e deixaria os campos desnecessários vazios
Vantagens
- A consulta arbitrária pode manter os dados inimigos desnecessários fora da memória
- Sente-se mais estruturado
- Tamanho de arquivo menor
Desvantagens
- Mais difícil estender / reorganizar pedidos de parâmetros
- Sobrecarga desnecessária para campos não utilizados
- Será necessário escrever um wrapper de interface de banco de dados para sqlite
Com isso em mente, fiquei curioso em obter alguma experiência externa sobre o que outras pessoas fizeram. Eu posso estar pensando sobre isso totalmente errado e, se assim for, sugira uma alternativa para as duas possibilidades que tenho aqui.
Além disso, qualquer sugestão sobre como melhorar uma dessas possibilidades seria apreciada. Realmente, eu só quero saber se estou no caminho certo.
Estou aberto a usar qualquer biblioteca gratuita e já estou incorporando o impulso