Oniromancie: Tutoriels - EMG 4 : Un système de leviers


Comment ça marche?

Aëdemphia
Par Sylvanor

Fighting Robots Quest
Par Boulon

Forstale
Par Ødd Clock

Geex
Par roys

Inexistence
Par Falco

La Légende d'Ibabou
Par Zaitan

Lije
Par Gaetz

LoveMaster
Par Cuddlefox

Sarcia
Par Kaëlar

Super Mario RPG - Lost Souls
Par Omegabowser

Jeux: Monster World RPG / Jeux: Pif et Hercule / News: Mise à jour de RPG Maker 2003 / Tutos: Création de charset / Jeux: FAYLINAWA /

Chat  (41 connectés)

Bienvenue
visiteur !






publicité RPG Maker!

Statistiques

Liste des
membres


Contact

74 connectés actuellement

9265637 visiteurs
depuis l'ouverture

894 visiteurs
aujourd'hui

Groupe Facebook

Barre de séparation

Partenaires




TOP
GAMEMAKING


Les 5 plus
visités

Lunae, le baz'arts d'Emz0

Le studio du chat vert

Pixelandgame

Tashiroworld

HeyMakeGames

Au hasard

Hellsoft

Le Temple de Valor

Le bazar à Omega

Les deux derniers

Lunae, le baz'arts d'Emz0

Le studio du chat vert

Nos autres partenaires

Devenir
partenaire


Barre de séparation

Un site du réseau
War Paradise

Annuaires référenceurs




EMG 4 : Un système de leviers
Ecrit par François Berhn

I Introduction
Ce système a été conçu pour 2003 et je n'ai pas regardé mais je doute qu'il puisse fonctionner de la même manière sur les RMs qui suivent. Ceci dit si vous voulez faire ce genre de système sur un RM postérieur à 2003, mieux vaut passer par les scripts.

Comme dit dans la description de l'article, il s'agit d'un tutoriel où on met en pratique les concepts abordée plus tôt dans les tutos précédents. De fait, il est recommandé avant de lire ce tutoriel de regarder ceci au préalable :

Tuto #1 sur les pseudos fonction -> Cliquer ici
Tuto #3 sur la simulation d'interrupteur local -> Cliquer ici

II Concept
Le système que nous allons voir est assez simple : Le héros se retrouve face à plusieurs leviers et dois trouver lesquels activer et lesquels lasser désactivés pur pouvoir ouvrir une porte ou activer un mécanisme quelconque.

Une solution possible serait de faire plusieurs events avec deux pages et qui pour s'activer ou se désactiver utilisent un interrupteur pour pouvoir modifier leur état. La vérification se ferait alors en s'assurant que tel levier est activé s'il le faut et que tel levier est désactivé s'il le faut.
Cette technique marche bien mais souffre de plusieurs soucis :

- Le systèmes consomme un interrupteur par levier qu'il faudra réassigner pour chaque copie (pour ne pas faire de collision)
- La vérification implique d'avoir une condition pour chaque interrupteur ce qui rend ce code assez long.

Heureusement une autre solution, basée sur les deux concepts vus précédemment, permet de réduire ces soucis à l'utilisation d 'une seule variable et donc d'une seule condition de vérification.

III Un peu de théorie
Une chose à laquelle on ne pense pas forcément tout le temps quand on examine un nombre, c'est qu'il peut aussi bien être analysé comme un seul nombre que comme une séquence de chiffres. Par exmeple, 3435 peut être vu comme :
- 3435
- 3; 4; 3; 5
- 34; 35
- 343; 5
- ...

On peut alors considérer un nombre non plus comme une valeur mais comme un ensemble de valeurs. Ainsi, sin on le souhaite, on peut très bien identifier ce nombre comme représentant l'équipement d'un personnage et qu'ainsi le premier 3 désigne en fait le 3ième casque de la base de donnée.
Et comment récupérer une valeur ? C'est très simple, avec un modulo et une division.
Pour ce faire en fait on va donner à chaque chiffre un indexe qui le positionne dans la séquence, en commençant par la valeur 0 tout à droite et en ajoutant 1 à chaque déplacement vers la gauche. Ainsi :

- 5 est à l'indexe 0
- 3 est à l'indexe 1
- 4 est à l'indexe 2
- 3 est à l'indexe 3

Ce choix n'est évidement pas fait au hasard et on pourra d'ailleurs remarquer que le chiffre x en position y est égal à x * 10 ** y (x fois 10 à la puissance y). Par exemple 4 * 10 ** 2 = 400.
Et pour récupérer le 4 il suffira de faire (3435 / (10 ** 2)) % 10.

Et voilà, on peut stocker jusqu'à 7 interrupteurs dans une variable, en mettant les chiffres soit à 1 pour activé soit à 0 pour désactivé. Mais est-ce suffisant ?

En fait, une variable peut contenir des nombres de 0 à 9999999, soit 10000000 de valeurs positives. Mais nous n'en utilisons que 2**7, soit 128 (ce qui est peu). Il existe cependant une solution à ce problème -> le binaire.

En effet, une valeur binaire n'étant constituée que de 0 et de 1, cela correspond parfaitement aux valeurs qu'on voulait donner pour représenter un interrupteur. De plus, une valeur binaire ayant, à valeur égale, plus de chiffres qu'une valeur décimale, cela veut dire qu'on peut stocker bien plus d’interrupteurs sous cette forme, à savoir 22.
Ce qui est d'ailleurs cool avec ce changement de base, c'est qu'il n'y a pas besoin de convertir une valeur en binaire pour récupérer le bon bit. IL suffit seulement de remplacer cette formule :

(3435 / (10 ** 2)) % 10

Par celle-ci

(3435 / (2 ** 2)) % 2.

IV Code
Voici enfin pour vos petite mirettes le code en event :
Mais avant toute chose, pour que ce système fonctionne il faut que tous les event des leviens aient des id qui se suivent. Aussi il est recommandé de bien vérifier à la création de votre système qu'il n'y a pas de trous d'id entre vos events.

image

Je vais donc prendre le temps d'expliquer le fonctionnement du code :

image

Ici l'event met dans une variable son id. Si vous avez lu le tuto #3 ça ne devrais pas vous être étranger.

image
Ici on retire une valeur égale à l'id de l'event. Pourquoi ? Car on souhaite relier le premier event au chiffre en positon 0 dans la variable. Et c'est le moyen le plus simple de le faire.
Par exemple si nos event de leviers ont les id de 35 à 38, en retirant 35 à chacun on obtient les nombres de 0 à 4 et on pourra directement les utiliser comme indexe de variable.

image
Ici on réutilise le code de la puissance du tuto #1 pour calculer 2 à la puissance du contenu de la variable 23.

image
Enfin là rien de très surprenant, on a le même code que dans le tuto précédant. Sauf qu'ici, au lieu d'affecter directement la porte, on agit sur une variable en lui ajoutant la valeur correspondante au bit dont on avait calculé l'indexe en début de code.

Et pour finir voici un exemple d'utilisation :
image
Comme tous les interrupteurs sont sauvegardés dans une variable, il ne faut plus qu'une condition pour savir si c'est bon ou pas. Ce qui rend le code plus léger et facile à lire.
Il ne reste plus qu'à savoir comment calculer la bonne valeur selon la combinaison que vous voulez faire. Pour ce faire, lancez le jeu et rendez vous sur la map pour mettre en place la bonne combinaison. Il ne reste plus qu'à presser F9 et regarder le contenu de la variable qui stocke les interrupteurs et vous aurez la bonne valeur !

V Conclusion
Dans ce tuto, nous avons vu une application simple de ce que les concept qui nous avons abordée peuvent donner en se combinant. De plus, nous avons obtenu une preuve que cette façon de coder permet de faire du code bien plus souple et donc moins compliqué à fabriquer puisque dans ce cas, une fois le premier event terminé, il ne reste plus qu'à le copier-coller comme on le souhaite, tant qu'on ne dépasse pas les 22 leviers.


Verehn - posté le 15/06/2016 à 23:20:26. (6963 messages postés) - admin

vhehrhehn

On ne l'arrête plus !

Eldrao (mon RPG) ~ PakuPaku ~ Winged Light ~ Ruin ~ Ma galerie ~ LTDAD ~ Pack plateforme 2D


François Berhn - posté le 15/06/2016 à 23:37:16. (4564 messages postés)

Tonton Hellper

Et ça devrais tenir encore un petit moment car j'ai encore au moins 5 autres tutos en tête :D


Konnie - posté le 16/06/2016 à 11:24:05. (3856 messages postés) - geniesdumal

Les tutos sont super cools et faudrait vraiment leur donner plus de visibilité :D


Verehn - posté le 16/06/2016 à 16:51:04. (6963 messages postés) - admin

vhehrhehn

On pourrait en parler dans la prochaine news du site, ou bien leur dédier une news quand il y en aura 9 (puisque Hellper en a 5 autres en tête).

Eldrao (mon RPG) ~ PakuPaku ~ Winged Light ~ Ruin ~ Ma galerie ~ LTDAD ~ Pack plateforme 2D


François Berhn - posté le 16/06/2016 à 20:16:56. (4564 messages postés)

Tonton Hellper

Voire quand il y en aura 10, même (comme ça ça fera un chiffre rond :p)

Suite à de nombreux abus, le post en invités a été désactivé. Veuillez vous inscrire si vous souhaitez participer à la conversation.

Haut de page

Merci de ne pas reproduire le contenu de ce site sans autorisation.
Contacter l'équipe

Plan du site:

Activité: Accueil | News | Forum | Flash-news | Chat | Commentaires | Galerie | Screen de la semaine | Sorties | Articles perso | Livre d'or | Recherche
Jeux: Index jeux séparés | Top Classiques | Top Originaux | Les autres | RPG Maker 95 | RPG Maker 2000 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker VX Ace | RPG Maker MV | Autres | Jeux complets | Proposer
Rubriques: Le Wiki | Collection Oniro | Tutoriaux | Scripts | Guides | Gaming-Live | Tests | Making-of | Interviews | Articles perso | OST | L'Annuaire | Divers | Palmarès
Hébergés: Aëdemphia | Fighting Robots Quest | Forstale | Geex | Inexistence | La Légende d'Ibabou | Lije | LoveMaster | Sarcia | Super Mario RPG - Lost Souls
Ressources: Jeux | Programmes | Packs de ressources | Midis | Eléments séparés | Sprites
RPG Maker 2000/2003: Chipsets | Charsets | Panoramas | Backdrops | Facesets | Battle anims | Battle charsets | Monstres | Systems | Templates
RPG Maker XP: Tilesets | Autotiles | Characters | Battlers | Window skins | Icônes | Transitions | Fogs | Templates
RPG Maker VX: Tilesets | Charsets | Facesets | Systèmes
RPG Maker MV: Tilesets | Characters | Faces | Systèmes | Title | Battlebacks | Animations | SV/Ennemis