Role Playing Games

Preview:

DESCRIPTION

Role Playing Games. Game AI 2007 CASANAS Sylvain PASTOR Antoine PERCHET Frederic VERHEYE Fabien. Plan. Principe Architecture Animation Analyse de RPG Modèles de comportement Avenir du RPG. Principe. Issu du JDR papier Un personnage ou groupe à incarner Des quêtes à accomplir. - PowerPoint PPT Presentation

Citation preview

Game AI 2007

CASANAS Sylvain

PASTOR Antoine

PERCHET Frederic

VERHEYE Fabien

PrincipeArchitectureAnimationAnalyse de RPGModèles de comportementAvenir du RPG

Issu du JDR papier

Un personnage ou groupe à incarner

Des quêtes à accomplir

Différents types de JDRClassique : Baldur’s Gate, Fallout, NeverwinterNigthsAction/aventure : Oblivion, GothicHack ’n slash : Diablo, Titan QuestMMORPG : WoW, EverquestTactical : FF Tactics, Golden Sun…

Différents universMédiéval FantastiquePost ApocalyptiqueSpace OpéraContemporain…

Définis par une feuille de personnage

Fallo

ut 2

Possèdent un inventaire

Neve

rWin

terN

igt

hs2

Un personnage unique ou un groupe

Acteurs de l’histoire Contrôlés par le joueurEvolue au fil du jeu

Neve

rWin

terN

igt

hs2

Contexte

Moteur Graphiqu

e

Moteur de son

Jeu

Carte

Element Objet

Personnage

PNJ

PJ

IA_PNJ

Journal

Quête InventaireFeuille de

Perso

Compétence

Dons Sorts

Moteur physiqu

e

Model du personnage structuré en 2 parties :

SqueletteAnatomie

MeshMaillage du model 3D

VertexLes sommets du maillages

BoneOs du squelette

2 models de skinning :Rigid skinningSmooth skinning

• On récupère la rotation du bone.

• On transforme cette rotation dans le repère du mesh.

• On récupère les vertices influencés par ce bone dans le mesh.

• On applique la rotation sur chaque vertex.

• Chacun de ces bones a une influence appelée “un poids” sur un vertex.

• Pour chaque vertex on récupère les matrices de rotation des n bones qui l’influencent ainsi que les poids correspondant.

• On modifie les vertices et les normales au vertex avec la formule suivante : V = M0*V*W0 + M1*V*W1 + … + Mn*V*Wn

Animé par le squelette

SqueletteContient les animations

MeshMaillage du model 3D

VertexLes sommets du maillages

BoneOs du squelette

Bones influençantsPoids des bones

Vertices à influencer

Vertices attachés au bone

AnimationClés d’animation

Interpolation de mouvementsUne animation se compose de keyframes

(translation et rotation sur un bone à l’instant ti)Connaître à chaque instant t les positions des

bones

• On récupère les 2 keyframes bornant t• On utilise une formule d’interpolation de mouvement pour trouver la position des bones à l’instant t

Interpolation de mouvements avec tangentesPermet des mouvements plus soupleDirection dans laquelle on arrive ou on part :

tangente in et tangente out

Composition de mouvements (Animation blending)

Enchainement de mouvements : même principe d’interpolation mais entre 2 keyframes d’animations différentes.

Un poids croissant ou décroissant sur les animations.

Cross fade, continuous blending.

Composition de mouvements (Animation blending)

Mélange de mouvements : Feather blending.Exemple : un personnage qui marche et fait

tourner son épée.Un modificateur de poids sur chaque os d’une

animation :Anim1 (marcher) : 100% sur les jambes, 20% sur les

bras.Anim2 (tourner épée) : 100% sur les bras, 0% sur les

jambes.

Motion CaptureM

akin

g o

f Th

e

Witch

er

Interactions PNJ :Quêtes : OblivionDialogues : Fallout 2Combat : NeverWinterNigths 2

Journal de quêtesDéfinie par une prioritéUne quête divisée en « quest stages » avec une

valeur indiquant l’avancement de la quêteMise à jour du journalEvolution du dialogue des PNJMise à jour du marqueur sur la carte

Exemple

10 : quête acceptée20 : 1ère étape validée30 : 2ème étape validée40 : quête terminée

Journal de quêtesO

blivio

n

Journal de quêtes

Ob

livion

Con

structio

n

Set

IA des PNJ de Fallout 2Les fichiers .ssl

procedure pickup_p_proc : Si le joueur tente de voler le PNJ procedure talk_p_proc : Début du dialogue procedure destroy_p_proc : Décès du PNJ procedure look_at_p_proc : Le joueur regarde le PNJ procedure description_p_proc : Le joueur regarde le PNJ avec

attention procedure use_skill_on_p_proc : Le joueur utilise une compétence

sur le PNJ. procedure damage_p_proc : Le PNJ perd des points d'impact. procedure map_enter_p_proc : Le joueur entre sur la map du PNJ.

C'est ici par exemple qu'est définie la team du PNJou son ia.

Exemple de dialogueprocedure talk_p_proc begin Evil_Critter:=0; Slavery_Tolerant:=SLAVE_VERY_INTOLERANT; Karma_Perception:=KARMA_PERCEPTION1;

if (dude_iq < 4) then begin start_gdialog(NAME,self_obj,4,-1,-1); gSay_Start; call Node012; gSay_End; end_dialogue; endelse if (global_var(GVAR_ARROYO_DOG) == DOG_FINISHED_BAD) then begin floater(128); end

else if (global_var(GVAR_ARROYO_DOG) == DOG_ACCEPTED) then begin set_local_var(LVAR_Herebefore,1); start_gdialog(NAME,self_obj,4,-1,-1); gSay_Start; call Node005; gSay_End; end_dialogue; end

procedure Node012 begin Reply(129); NLowOption(130,Node999);End

procedure Node005 begin Reply(114); NOption(115,Node004,004); NOption(116,Node999,004);end

{129}{}{J'ai à faire, imbécile. Va jouer ailleurs.}{130}{}{Gaaaah…}

{114}{}{As-tu retrouvé Fumace ?}{115}{}{Non, pas encore. Où as-tu dit que se trouvait le terrain de chasse ?}{116}{}{Non, pas encore.}

{128}{}{Fumace me manque. Pourquoi ne peux-tu pas le sauver ? Tu es l'Etre Elu.}

Autres procédures procedure damage_p_proc beginif (source_obj == dude_obj) then begin set_local_var(LVAR_Personal_Enemy,1); set_global_var(GVAR_ENEMY_ARROYO,1); end

end

procedure pickup_p_proc begin if (source_obj == dude_obj) then begin set_local_var(LVAR_Hostile,2); endend

Dépend de la distance au joueurLOD (Level of detail)

Dépend du type de créature

1

2

22

3

1

3

33

4

4

4

4

4

4

5

5

5

5

5

1

2

3

4

5

PJ

25%

10%

5%

2%

Charge CPU

Animaux Animaux « d ’ambiance » : oiseaux, insectes…

Déplacements basiques…

Autres animaux : ours, loups, cerf… Algos de « vie » : nourriture, protection, chasse,

errance Ob

livion

OursNormal errer(); si (a_faim() et voit_nourriture() ) { aller_a(nourriture-vue); animation(manger); }

Est_attaque while(est_vivant(attaquant)) {attaquer();}

VillageoisErrent dans la villeOccupation naturelles en fonction du moment

de la journéeDéplacements dans la foule

Assa

ssin’s

creed

Marchand Accroche du PJComportements dépendant des actions du PJ

Achats précédentsAide apportéeNégociationPopularité dans la ville

GardeSuit un tour de gardeRenseigne le PJEnquête sur les évènements suspects (cadavre,

inconnu…)Donne l ’alerte

Recommended