Bonjour, aujourd'hui au lieu de préparer le BAC et de mettre le nez dans les cours, nous allons plutôt nous intéresser aux inventaires. Nous allons essayer de refaire un système d'inventaire à la
DOTT (un inventaire pour chaque personnage jouables) ; c'est très simple de faire ce système.
Tout d'abord, dans ce tuto je ne ferai que deux personnages, vous adapterez en fonction du nombre de personnage de votre jeu.
J'utilise également la version 3.1 d'
AGS. Z'êtes prêts ? Alors on y va !
1°) Gestion des personnages :Bon, ici nous aurons deux personnages,
Roger et
Sam, que je vous présente :
Initialement,
Roger sera le joueur de départ, il faudra cliquer sur
Sam en mode
Interact pour switcher de joueur (par exemple) et inversement, j'utilise pour cela la fonction
Character.SetAsPlayer() :
- Code:
-
function cSam_Interact()
{
cSam.Say("A mon tour !");
/*Message permettant d'indiquer au joueur que le personnage est sous contrôle. */
cSam.SetAsPlayer();
}
function cEgo_Interact()
{
cEgo.Say("C'est parti !");
cEgo.SetAsPlayer();
}
Dans le jeu, je dirige
Roger, puis quand je clique sur
Sam en mode
Interact, je dirige ce dernier, puis à nouveau quand je clique sur
Roger en mode
Interact, celui-ci devient actif, etc...
2°) Création des GUI :Vous devez faire maintenant au moins un
GUI (ici on considérera que tous les
GUI d'inventaire seront identiques), dans
DOTT seule la couleur des cadres changeait ; ok, donc voici mon magnifique inventaire :
Oui, je sais, c'est celui du
template default, ça va hein !
Vous devez bien évidemment insérer un minimum de contrôles au
GUI, le plus important étant sans aucun doute l'
Inventory Window permettant de stocker les items, eh bien c'est lui qui va être important, sélectionnez-le dans votre
GUI, maintenant, regardez la propriété
CharacterID en bas à droite :
Cette propriété va nous permette d'assigner un inventaire à un joueur particulier (-1 signifie joueur, donc quand on switcherait ça serait le même inventaire, ce que l'on ne veut pas), on va assigner l'
ID de l'un de nos personnages, par exemple 0 pour
Roger :
Désormais quand nous serons dans ce
GUI avec un autre joueur que
Roger, nous ne verrons rien.
Voilà, premier
GUI OK, plus que le second.
Pour copier un
GUI il y a une manière très simple : l'
export/importTout d'abord sélectionnez votre
GUI dans l'arbre à onglet :
Puis clique-droit dessus :
Export GUI... Donnez-lui un nom bidon...
Puis clique-droit sur
GUIs :
Import GUI... Sélectionnez celui que vous venez d'exporter.
Et voilà il s'affiche avec un petit 2 à la fin pour chaque propriétés communes.
Il ne vous reste plus qu'à aller dans la propriété
CharacterID et de la changer en 1 pour l'inventaire de
Sam.
3°) Afficher les bons GUI :Maintenant que nous avons nos
GUI pour chaque personnage, nous devons afficher les
GUI en fonction du personnage actif, si c'est
Roger, alors on affiche le premier, si c'est
Sam, alors on affiche le second, etc pour chaque personnage.
Les appels des inventaires se font quand on clique sur la petite mallette dans le
template default, si vous avez fait autrement il suffit d'adapter.
Donc on va sur ce
GUI, soit
gIconbar, on sélectionne la mallette puis on modifie la fonction
btnIconInv_Click :
- Code:
-
function btnIconInv_Click(GUIControl *control, MouseButton button) {
show_inventory_window();
}
Ah ? une autre fonction, elle a été créée par
AGS pour configurer au mieux l'affichage du
GUI. Pour aller la voir, cliquez sur le menu déroulant en haut et sélectionnez-la :
- Code:
-
function show_inventory_window ()
{
gInventory.Visible = true;
// switch to the Use cursor (to select items with)
mouse.Mode = eModeInteract;
// But, override the appearance to look like the arrow
mouse.UseModeGraphic(eModePointer);
}
Ici nous devons modifier le
GUI à afficher en fonction du personnage ; on va le faire avec de simples conditions :
- Code:
-
function show_inventory_window ()
{
if(player == cEgo) gInventory.Visible = true;
else gInventory2.Visible = true; // cSam
// switch to the Use cursor (to select items with)
mouse.Mode = eModeInteract;
// But, override the appearance to look like the arrow
mouse.UseModeGraphic(eModePointer);
}
L'avantage de l'écrire dans la fonction
show_inventory_window, c'est qu'elle est appelée autre part également :
- Code:
-
if (keycode == eKeyTab) show_inventory_window(); // Tab, //show inventory
Ainsi, quelle que soit la manière d'afficher l'inventaire, ce sera toujours le bon
GUI !
![^^](/users/3313/62/11/77/smiles/697251.png)
Et pour finir, dans la fonction permettant de quitter le
GUI (en général c'est un bouton qui le fait), on efface tous les
GUI pour être sûr :
- Code:
-
function btnInvOK_Click(GUIControl *control, MouseButton button) {
// They pressed the OK button, close the GUI
gInventory.Visible = false;
gInventory2.Visible = false;
mouse.UseDefaultGraphic();
}
C'est une méthode pas si barbare parce que quand les
GUI sont déjà effacés, cela prend moins de temps au
CPU.
Et voilà, c'est finit !!! Alors pas très dur
4°) Activer les items au départ :Dans la liste d'items vous avez certainement reconnu la propriété
PlayerStartsWithItem qui permet de débuter le jeu avec l'item en possession, le problème c'est que l'on ne peut que le faire avec le joueur de départ, donc pour ajouter des objets aux autres personnages (par exemple le scalpel de
Laverne ou le décapsuleur de
Hoagie) vous devez vous créer une petite fonction
items_start et vous énumérerez les items de départ des personnages :
- Code:
-
function items_start()
{
cHoagie.AddInventory(iDecapsuleur);
cLaverne.AddInventory(iScalpel);
...
}
Et vous faite un appel à cette fonction dans le
game_start :
- Code:
-
function game_start() {
// Put the code all in a function and then just call the function.
// It saves cluttering up places like game_start.
initialize_control_panel();
items_start();
// Use the KeyboardMovement module to, per default, replicate the standard
// keyboard movement of most Sierra games. See KeyboardMovement.txt for more info
KeyboardMovement.SetMode(eKeyboardMovement_Tapping);
}
Et voilà, si vous avez des questions, des remarques ou des suggestions, hésitez pas à me les communiquer
![sourire](/users/3313/62/11/77/smiles/247843.png)
A bientôt !