Création d'une Metaroom - Partie 5: Agents - Posted Thursday, 24th August 2006 by Liam, translated by Deacon

Ceci est la cinquième partie de Création d'une Metaroom: De l'idée à la sortie

Les agents sont ce qui rend une pièce intéressante, unique et interactive. Sans eux, une metaroom est juste une jolie image, qui n'a pas vraiment de but ou de fonction. Il y a géneralement 2 buts principaux pour les agents; l'interraction avec les norns, ettins et grendels, et ceux pour l'utilisateur (ou juste pour regarder).

Introduction

Les agents sont ce qui rend une pièce intéressante, unique et interactive. Sans eux, une metaroom est juste une jolie image, qui n'a pas vraiment de but ou de fonction. Il y a géneralement 2 buts principaux pour les agents; l'interraction avec les norns, ettins et grendels, et ceux pour l'utilisateur (ou juste pour regarder).

Il faut décider à quoi va servir votre pièce - est elle un environnement pour les norns, ettins et grendels ou juste pour le plaisir du joueur? Les agents que votre metaroom va contenir vont varier de façon importante selon l'utilisation que vous allez choisir.

Géneralement, il faut pour qu'un norn puisse survivre :

• Des sources de nourritures
o Des protéines (critters)
o Des graisses (souvent fruits)
o De l'amidon (graines, vegetaux)
• Cellular Automata (cf partie 6)
• De quoi transporter vos norns dans et hors de la zone
• Des jouets


Pour une metaromm plutôt orienté joueur, les trucs comme la nourriture et les jouets ne sont pas vraiment indispensable - l'infirmerie en est un parfait exemple de ce type de salle. Il n'y a pas de nourriture ni de jouet, mais juste une interface pour le joueur.

IL y a des guides (en anglais) sur les agents comme :

o Script d'ascenseur (Wiki)
o Plante simple (Wiki)
o Critter simple de surface (en dessous)

Une introduction aux subroutines

Les subroutines sont une des choses les plus importante quand vous codez des critters, des plantes, le temps etc... En faite une subroutine est une partie du script qui est exectuée quand l'utilisateur le spécifie. Une subroutine est placée dans le script temporisateur, même si je crois que la commande 'executer cette subroutine' (gsub) peut être utilisé dans n'importe quel script.

La syntaxe est la suivante:

*Ceci exécute la subroutine
gsub votre_test_subroutine

*Ceci est la subroutine
subr votre_test_subroutine

accg 0

retn



Donc là tout agent avec ce code dans le script temporisateur va flotter (je pige pas trop là). Simple non?




Tutorial des bases d'un animal

Abant de regarder plus en avant, il vaudrait mieux que vous ayez quelques bases en CAOS pour comprendre ce qui se passe ici. Je vais expliquer les parties les plus complexes, mais je pars du principe que vous connaissez les commandes comme :
simp and attr 199.

Pour trouver les bases du code, je suggère le Creatures Development Network (le CDN), caos chaos.

Okay! Pour ce tutorial, nous allons utiliser le Gerana du Grendel Hideout, codé par moi même. C'est une petite créature du genre limace qui se déplace assez doucement, et les mouvements sont assez simple. Et pour l'instant nous voulons juste un animal qui bouge.

Pour commencer, un petit coup d'oeil aux variables que nous allons utiliser dans ce tutorial.

*ov10 direction (1 gauche, 2 pour droite)
*ov11 direction du mur que l'animal approche (si applicable)
*ov40 (aléatoire) combien de 'pas' l'animal fait dans une certaine direction

Pas besoin d'explication supplémentaire je pense. Rappellez vous, commentez TOUJOURS votre script en détail, dans le cas où vous devriez rapidement revenir sur quelque chose.

Si vous ne comprenez pas encore les variables, vous y arriverez dans un moment, pas de soucis!

Premièrement nous devons créer le Gerana.

*Injecte le Gerana et initialise ses propriétés
new: simp 2 15 21021 "b1-snett" 42 18 2000
attr 194
elas .1
accg 1
perm 100
base 0
*Met les variables de base à 0
setv ov40 0
setv ov10 0
setv ov11 0

*Bouge dans le Grendel Hideout (change ses coordonnées quoi!)
mvsf rand 9900 10500 340
tick 1


Ok maintenant que ça c'est fait, c'est partit pour la vrai programmation, la timer script. Le timer script est là ou tout ce qui marche au moment dans l'animal. Comme dans le script de plante de zareb sur le Wiki, il est plus facile de faire fonctionner les animaux avec les subroutines -ça aide à diviser le timer script et à le rendre plus compréhensible.

Pour cet animal, qui va rester dans votre monde jusqu'à ce que vous l'enleviez, nous n'avons pas besoin de créer un script de mort ou de reproduction. Si vous voulez des animaux dans votre pièce, ils n'ont pas besoin de se reproduire, mais c'est cool si ils le font!

Bon un coup d'oeil sur le Timer Script.

scrp 2 15 21021 9

*C'est là où toutes les subroutines que vous voulez voir arriver doivent être.
*Là c'est juste la subroutine de mouvement
gsub walk

*La subroutine de marche
subr walk

*Met dans la variable nombre de pas un chiffre aléatoire entre 3 et 9
*Plus vous voulez de pas, plus le 2ième chiffre doit être grand
setv ov40 rand 3 9

*Choisis la direction droite ou gauche au hasard
setv ov10 rand 1 -1

wait rand 1 10

*Si il y a un mur à droite, met 1 dans ov11
doif obst rght lt 5
setv ov11 1

*Si il y a un mur à gauche, met 2 dans ov11
elif obst left lt 5
setv ov11 2

*Autrement met 0 dans ov11 (pas d'effet)
else
setv ov11 0
endi

*Si l'animal n'est pas porté ou ne tombe pas
doif carr eq null and fall = 0



*Vérifie pour les murs (avec les variables d'avant)
*Si mur à droite, va à gauche
doif ov11 = 1
gsub left
endi

*Si mur à gauche, va à droite
doif ov11 = 2
gsub right
endi

*Regarde si l'animal va à droite
*Si oui, va dans la subroutine 'right' (droite)
doif ov10 = 1
gsub right
endi

*Regarde si l'animal va à gauche
*Si oui, va dans la subroutine 'left' (gauche)
doif ov10 = -1
gsub left
endi

*Autrement STOP
else
stop
endi


Un problème pour comprendre? J'espère que non! Comme mentionné précedemment, la clé pour comprendre le script est de mettre beaucoup de commentaire. Regardons de plus près les subroutines left et right. Pas d'inquiétude, c'est très facile à comprendre!


*La subroutine je vais à droite
subr right

*Repète 0v40 fois (aléatoirement entre 1&6)
*L'animation et le mouvement sont séparés
*Ce qui fait plus naturel.
reps ov40
anim [8 9]
velo 1 -1
over
anim [10 11]
velo 1 -1
over
anim [12 13]
velo 1 -1
over
anim [14 15]
velo 1 -1
over
repe
retn





*subroutine je vais à gauche
subr left

*Repète 0v40 fois (aléatoirement entre 1&6)
reps ov40
anim [0 1]
velo -1 -1
over
anim [2 3]
velo -1 -1
over
anim [4 5]
velo -1 -1
over
anim [6 7]
velo -1 -1
over
repe
retn

endm



Pour le mouvement c'est bon, c'est fini! C'est à dire ce qui est vraiment indispensable pour un animal. Pour lui faire une évolution et éventuellement une mort, c'est dans la deuxième partie.







Les bases d'un animal Tutorial partie 2 - Cycle de vie

Dans cette partie, nous allons ajouter une subroutine avant le script de mouvement, qui va être en faite un compteur qui va déterminer combien de temps l'animal va vivre. Cela peut permettre ensuite de faire mourir et reproduire les animaux!

Premièrement, ajoutez les lignes suivante dans le script d'injection, sous les autres variables:

setv ov01 0

*La variable qui suit instaure la vie de l'animal
*Nous voulons qu'il vive, disons 200pas
setv ov50 200


ov01 est souvent utilsé pour le compteur de vie dans mes scripts, et dans pas mal de script de Creatures Labs aussi je crois. J'utilise ov50 comme le nombre maximum de pas que l'animal doit faire avant de mourir. Vous pouvez changer ça en ce que vous voulez.

Ensuite, dans le Timer script, juste au dessus de 'gsub walk', rajoutez le code suivant:

*C'est ici que les compteurs doivent être
*Nous ajoutons le nombre de pas que l'animal a fait au
*life timer (compteur de vie)
addv ov01 ov40

**C'est là où toutes les subroutines que vous voulez voir arriver doivent être.
*Premièrement la subroutine de vie, ensuite la subroutine de mouvement.
gsub live
gsub walk


Ok, maintenant nous avons un compteur qui ajoute le nombre de pas que l'animal a fait la dernière fois que le script est allé jusqu'au compteur d'âge et donc nous avons l'âge de l'animal. Maintenant, c'est au tour de la subroutine où on met tout ce qui concerne l'âge!

*Subroutine de vie
subr live

*Si la variable 'age' est superieur ou égale à
*la durée de vie de l'animal
doif ov01 >= ov50

*Va à la subroutine de mort (die)
gsub die
endi

*C'est ici que vous ajoutez aussi les lignes qui
*dotent votre animal de période de viemais nous *n'allons pas en parler ici.

retn


Facile! Maintenant nous avons juste besoin d'ajouter la subroutine mort et la subroutine naissance, qui sont toutes les deux simples.

*subroutine de mort
subr die

*Va à la subroutine de naissance
*C'est pour qu'il y est toujours un Gerana
gsub givebirth

*Si l'animal allait à droite
doif ov10 = 1

*Ralentit l'animation et montre l'
*animation de mort à droite
anim [20 21 22 23]

*Sinon si il allait à gauche
elif ov10 = 2

*Ralentit l'animation et montre l'
*animation de mort à gauche
anim [16 17 18 19]
endi

*Ajoute des nutriments à l'environnement
setv va12 grap posx posy
altr va12 3 0.3

*Supprime le Gerana mort
kill ownr
retn


C'est au tour de la subroutine de naissance, qui va créer un nouveau Gerana pour être sur qu'il n'en manque pas!

*Subroutine de naissance
subr givebirth

setv va00 posl
setv va01 post

*Injecte le Gerana et ses propriétés
new: simp 2 15 21021 "b1-snett" 42 18 2000
attr 194
elas .1
accg 1
perm 100
base 0
frat 2

*Met les variables à 0
setv ov40 0
setv ov10 0
setv ov11 0
setv ov01 0

*La variable qui suit défini la durée de vie
*Nous voulons qu'il vive disons 200pas
setv ov50 200


*Retourne à la variable précedemment changée
mvsf va00 va01
tick 1

retn


C'est bon, c'est fini. Maintenant vous devez y revenir pour comprendre. Vous pouvez changer pas mal de choses dans ce code pour vous aider à comprendre...la durée de vie, ou même rajouter si ils ont des bébés, ce qu'ils ont besoin pour survivre, ajouter des stades de developpement...tout ça en subroutines.

Vous pouvez télécharger les sprites du Gerana ICI et le code ICI.

Vous pouvez télécharger ce tutorial en anglais mais en coloré au format .doc ICI.


Intro - Partie 1 - Partie 2 - Partie 3 - Partie 4 - Partie 5 - Partie 6 - Partie 7

[English] [Français] [Deutsch]