lundi 14 novembre 2011

3Arks - Arkeos - des points communs

2 Jeux en parallèle
Il y a quelques temps, j'ai expliqué que je réalisais en parallèle 2 jeux :
3arks et Arkeos( nom de code, provisoire, ou pas).

J'utilise pour ces 2 jeux certaines choses en commun :
- le même langage (purebasic) pour la version PC (windows, linux (avec wine pour l'instant)
- le même moteur graphique (et donc les mêmes lib comme directX9), lighting, fx, collision..
- le même système pour les interfaces
- le même moteur de particules, sans doute le même moteur "physique"
- les mêmes systèmes pour les gameplays équivalent : quêtes, sauvegarde, combats, inventaire et drop, ouverture de map...

Pour la plupart de cela, c'est du "fait à la main", en utilisant bien entendu les commandes purebasic (par exemple la lib sprite3D de purebasic pour l'affichage), mais il faut tout de même coder certaines choses (voir le message précédent).

Il est fort possible que j'utilise aussi les mêmes sprites.

Les différences seront surtout liées :
- à l'histoire
- mode solo (Arkeos Chronicles) / online (3arks) : donc certains gameplays seront disponibles dans 3arks (coopération) et d'autres uniquement dans Arkeos (compagnons de jeu (IA) scénario poussé mais plus ou moins linéaire)


Pourquoi développer 2 jeux en même temps ?

Il y a à cela plusieurs arguments :
- tout d'abord, le développement d'un jeu en ligne (mmorpg) est très long, et les progrès ne se voient pas forcément régulièrement.
- lorsque j'ai commencé à développer 3arks, je l'ai fait en mode solo (et je continue d'ailleurs à bosser sur la version solo, avant d'intégrer ensuite les fonctions dans la version online) : il était donc dommage de ne pas utiliser cette version solo puisqu'elle existe et est très avancée.
- Le développement d'un des 2 jeux profite à l'autre, puisqu'ils utilisent beaucoup de choses en commun.

J'aimerai réaliser le jeu en 2 mois environ (j'ai déjà commencé bien sûr), étant donné que j'ai déjà passé plus de 9 mois dessus (version 3arks).


Les PNJ et l'IA

A propos des PNJ et des IA, je vais expliquer un peu comment j'ai commencé à élaborer cela.
C'est vraiment très simple, et cela peut sans doute être bien mieux, mais en l'état ça fonctionne correctement.

Je ne parlerai que du jeu Arkeos (donc jeu solo offline) car la technique de l'IA de 3arks (online), c'est le développeur qui s'appelle Ombre qui s'en occupe.

Les Types de PNJ du Jeu

Tout d'abord, j'ai défini dans un document les types de PNJ que l'on peut rencontrer dans le jeu, et leur caractéristiques :
- compagnons (commencé): ce sont des pnj qui nous accompagne et nous aident, dans les combats, en nous donnant de la vie. Il arrive aussi qu'ils nous parlent spontanément dans certains lieux en nous donnant des informations qui peuvent nous être utiles pour terminer une étape de quête par exemple.
- PNJ (de base) ou personnage : ce sont des personnages dans le jeu. Certains nous proposent de faire du commerce, d'autres nous parlent de l'histoire ou nous proposent une étape de la quête principale. Les compagnons sont des pnj spéciaux.
- PET (ou familier - pas encore intégré) : ce sont des animaux qui peuvent nous accompagner. Il nous ajoutent des bonus à nos équipements. On ne voit pas forcément le PET à coté de nous.
- invocations : ce sont des animaux que l'on peut invoquer en magie, pour nous aider lors des combats. Il a une durée de vie limitée lorsqu'on l'invoque.
- Ennemis : ce sont les monstres (aussi appelé mob) qui nous attaquent et contre lesquels on se bat. ils sont autonomes, certains sont agressifs et nous attaquent d'eux-mêmes, mais la plupart attendent qu'on les attaque pour nous attaquer. Cela dit, je compte ajouter 3 ou 4 niveaux de difficultés dans le jeu (voir plus bas : les mode de difficultés).
- montures (pas intégré, en réflexion) : peut être vais-je ajouter la possibilité d'utiliser des animaux comme monture pour aller plus vite d'un endroit à un autre, mais je n'en suis pas encore sûr.
- Animaux : ce sont de simples animaux qui se baladent, on ne peut pas vraiment interagir avec eux.

Les paramètres des PNJ

En fonction du type de pnj, nous avons des paramètres qui nous serviront.

CODE :
Tout d'abord, il est utile de créer des structures spécifiques à chaque type de pnj, et même plus si besoin.
Nous aurons donc des structures comme : compagnon, PNJ, pet, invocation, ennemis, montures, animaux.

On a donc au moins 7 structures pour nos pnj, sauf bien sûr si on a des choses communes. Cependant, j'ai souvent l'impression qu'il est préférable de gérer des petites listes/map/tableau, car pour les trier ou les parcourir, ça va plus vite si on parcourt une liste avec 5 éléments (les compagnons) que 150 (compagnon+ennemis+pet+animaux+pnj..).
En plus, certains pnj auront juste quelques paramètres (comme les animaux du décor), Donc, il faut essayer d'utiliser plusieurs petites listes plutôt qu'une seule grosse liste pour tout gérer. Pour certaines opérations, ça permet vraiment de gagner du temps, et des ressources.

On gérera donc au moins 7 listes : list(), map() ou tableau (array/dim), ça dépend de ce que l'on choisit.
Il est intéressant d'utiliser des listes pour trier les objets si besoin. Sinon, les map() sont plus rapides.

Concernant les structures de chaque type de pnj, nous aurons donc des paramètres spécifiques à chacun de ces types.

Je vais pas trop détailler chaque structure, mais en gros, voici le genre de paramètres que l'on pourrait trouver dans une structure de pnj type ennemi :

Structure StCompagnon
x.c
y.c
lifecurrent.c
lifemax.c
manacurrent.c
manamax.c
name.s
radar.c ; distance à partir de la laquelle il rejoint le joueur
radarMob.c ; distance à partir de laquelle le compagnon attaque un mob
type.a ; le type de compagnon
EndStructure

Bon, évidemment, la structure se complexifie en avançant le développement.
Petite explication sur mon principe très simple d'IA :
- avec le paramètre radar, je teste la distance entre le joueur et le compagnon. Si je dépasse cette distance, le compagnon se dirige vers le joueur.
- type : définit le type de compagnon. J'ai donc une procédure (ou plusieurs) qui s'occupe de faire réagir chaque compagnon du jeu.

Les différents types (de base) :
- 1 : ne fait rien du tout
- 2 : soigne le joueur s'il perd de la vie
- 3 : attaque les mobs tout seul, sans raison (en fonction de radarmob)
- 4 : attaque les mobs si le joueur attaque les mobs.
- 5 : attaque les mobs si le joueur attaque, mais soigne le joueur s'il perd plus de 50% de vie
- 6 : attaque les mobs mais s'enfuit si sa vie descend en dessous de 30%
etc..

On comprend vite comment cela fonctionne. Il est aussi possible de créer plusieurs paramètres/champs dans la structure du compagnon et de définir son comportement en fonction de chaque paramètre.

Les modes de difficultés
On peut gérer l'IA avec les modes de difficultés.

- Le mode Novice : les animaux n'attaquent jamais. Les compagnons sont plus forts, et nous aident pour toutes les quêtes.
- Le mode Normal : seuls quelques mobs attaquent. Les compagnons sont normaux et nous aident régulièrement pour les quêtes.
- Le mode Expert : la plupart des mobs attaquent spontanément. Les compagnons sont moins forts et nous aident beaucoup moins pour les quêtes.
- Le mode Surhumain : tous les animaux nous attaquent, ils sont très agressifs et plus forts que dans les autres modes. Les compagnons ne sont pas très forts, et nous aident très peu pour les quêtes (mais ils peuvent être très bavard quand même :))

3 commentaires:

  1. Ben il est super classe ton blog !!!! Moi j'en chie pour la coloration...

    RépondreSupprimer
  2. héhéhé :)) Question :
    Le fait de minorer la force des compagnons lors des modes surhumains & autre permettrait il encore au joueur la possibilité de jouer sans être "floué" ? la difficulté des mobs hyper agressifs ne suffit elle pas ? Cela me semble un draconien quand même ! :p Quoi qu'il en soit vivement que l'on voit ça !

    RépondreSupprimer
  3. concernant les modes, tu auras sans doute le plaisir de tester ça mon pitit Eusk ;).

    Et j'équilibrerai le jeu en fonction de nos tests :D

    RépondreSupprimer

Merci de poster des messages sympa ou hyper sympa (et pas violent, tout ça, parce que c'est pas glup). :)