Moteur Physique : Présentation


Qu'est-ce qu'un moteur physique ?

Il s'agit d'un ensemble de fonctions, qui permettent de calculer différentes actions tirées du monde réel, telles que les collisions ou la gravité.

Je le développe en même temps que toute une série de scripts, pour un jeu communautaire dont je pourrai bientôt vous parler.


Le moteur physique que je développe a pour but de :
- remplacer toutes les formes d'obstacles créées par RM (RPG Maker)
- gérer la hauteur, et les déplacements tels que les sauts, de façon optimale grâce à l'utilisation de la gravité, et, surtout de la 3D.

Oui, il s'agit d'un moteur physique en 3D.

Attention ! Moteur physique, pas graphique !
Il sert à calculer les contacts de façon parfaite, pas à afficher des images !


Et, en tant que tel, il est parfaitement adapté pour gérer toute forme de contact.
Que ce soit :

- pour les jeux en pure 2D
A-RPG comme Zelda, plateforme comme Super Mario, etc...

- pour les jeux en semi-2D
Alundra par exemple, qui est un A-RPG avec des hauteurs.

- pour les jeux en 3D isométrique
Baldur's Gate, Diablo, ...

- pour les jeux en Full-3D
Bien qu'il n'y en aura sûrement jamais sous RMXP. :D


------------------------------


Je place à présent ici les liens vers toutes les vidéos que j'ai créées jusqu'à présent.
Il s'agit de vidéos de démonstration montrant les différentes étapes de création du moteur physique.

Si vous voulez savoir directement où en est le développement, regardez la dernière vidéo. :)

A noter que, pour chaque vidéo, vous pouvez soit la regarder ici, soit la télécharger en qualité maximale (format 640 x 480 pixels).


Vidéo 01
Contact entre des rectangles

Sur DailyMotion (choisissez "taille originale" pour améliorer le rendu dans le menu en bas à droite) :



Si vous voulez la télécharger, c'est ici (0.9 Mo) (oui, c'est minuscule !) :

http://www.mediafire.com/download.php?nnfw2x2jy5u

Quelques explications : les carrés noirs de chacun des events (y compris celui en mode parallèle, en haut à gauche) sont créés automatiquement.
Quand un event est touché, son interrupteur local A est touché.

Le reste... c'est de l'event, tout simplement. :)



----
Vidéo 02
Contact entre un rectangle et un cercle

Sur DailyMotion (choisissez "taille originale" pour améliorer le rendu dans le menu en bas à droite) :



Pour la télécharger sur Mediafire (0.9 Mo) :
http://www.mediafire.com/download.php?4lvdytmzqum



----
Vidéo 03
Lien entre les events et les obstacles

Sur DailyMotion (choisissez "taille originale" pour améliorer le rendu dans le menu en bas à droite) :



Pour la télécharger sur Mediafire (3.2 Mo) :
http://www.mediafire.com/download.php?qmkjin2x5ua


La zone de contact de chacun des events est créée par un commentaire du style :
rectangle(10, 10)
cercle(15)
ou
rectangle(0, -6, 10, 10)
(pour les décalages par rapport à l'event)

Reste à programmer les fonctions nécessaires pour que les éléments de décor eux aussi deviennent des obstacles.


----
Vidéo 04
Première version des étages

Sur DailyMotion (choisissez "taille originale" pour améliorer le rendu dans le menu en bas à droite) :



Pour la télécharger sur Mediafire (1 Mo) :
http://www.mediafire.com/download.php?zbytnsil2io

La première version d'affichage des étages.

Le déplacement d'un personnage sur un seul étage fonctionne.


----
Vidéo 05
Premier test de la fonction de saut

Sur DailyMotion (choisissez "taille originale" pour améliorer le rendu dans le menu en bas à droite) :




Pour la télécharger sur Mediafire (0.6 Mo) :
http://www.mediafire.com/?29jjmygjoty

Un test raté sur la fonction saut...

Pourtant, sur papier, ça marchait.
Mais bon, c'est assez amusant à regarder. :)


----
Vidéo 06
Représentation des étages en couches


Sur DailyMotion (choisissez "taille originale" pour améliorer le rendu dans le menu en bas à droite) :



Pour la télécharger sur Mediafire (3.3 Mo) :
http://www.mediafire.com/?tkwm2wme24y


Le niveau actuel du moteur de collision.
On voit la représentation des différents étages grâce aux couleurs.

Le héros ne se cogne que contre les murs (représentés en couches) correspondant à son niveau, la tache noire sous lui représentant son ombre.

Bien sûr, pour ces tests, il "flotte" en l'air. :)



----
Vidéo 07
Passage sur et sous un pont

Sur DailyMotion (choisissez "taille originale" pour améliorer le rendu dans le menu en bas à droite) :



Pour la télécharger sur Mediafire (3.6 Mo) :
http://www.mediafire.com/?vnj3mlgnmye


Un test de déplacement au-dessus et en desous d'un pont, géré en 3D (rendu 2D).

Les tests sont concluants. :)


Note : je n'ai pas encore programmé la fonction saut à ce stade.
Par conséquent, je fais grimper le héros d'un étage, et le fait qu'il puisse tomber n'est vérifié que lorsqu'il marche.



----
Vidéo 08
Editeur 3D


Sur DailyMotion (choisissez "taille originale" pour améliorer le rendu dans le menu en bas à droite) :




Télécharger la vidéo :
Pas encore.


Voici la première version de l'éditeur 3D.
Je l'ai développé en moins de 24 heures, alors il manque quelques fonctions, mais ça donne déjà une idée des possibilités offertes.

La vidéo montre volontairement des interactions assez complexes, comme on en verra assez peu dans des jeux utilisant ce moteur.
Mais c'est justement pour montrer les premières possibilités développées pour l'éditeur.

L'affichage des niveaux est légèrement défectueux : dans certains cas, il affiche des rayures (pour les murs) à la place de carrés, ce qui fausse un peu certaines représentations, notamment lors de la surabondance de blocs jaunes.

La prochaine verson de l'éditeur affichera les blocs "avec profondeur", plutôt qu'un simple dessin superposé comme un calque, comme c'est le cas actuellement.

Grâce à ça, on verra le héros tantôt sur les blocs, tantôt derrière les blocs.




----
Vidéo 09
Edition 3D d'une map


Sur DailyMotion (choisissez "taille originale" pour améliorer le rendu dans le menu en bas à droite) :




Télécharger la vidéo :
Pas encore.


Ici, je montre l'édition d'une map, et quelques tests de déplacements du personnage.
La fonction de saut est programmée à la va-vite, et j'utilise toujours ma téléportation vers le haut, mais le moteur fonctionne à 100% et il n'y a aucun bug de collision, ni de hauteur.

J'utilise un moment l'affichage en rangée, qui est une nouvelle fonction de l'éditeur.

Remarquez que l'affichage des différents niveaux peut maintenant se faire depuis l'écran "normal" de manipulation du personnage.
Ce sera un mode debug réservé aux développeurs.


Prochaine étape : gérer l'affichage des décors et leur superposition par rapport au héros.
(parce que pour l'instant, ce n'est pas fait, et c'est pour ça que le héros apparaît toujours au-dessus de tout)