Partagez
Aller en bas
Yoshi-Dragon
Membre

Nombre de messages : 752
Date d'inscription : 19/06/2009
http://smashbrosbrawl.e-monsite.com

Re: un RPG multi ?

le Jeu 5 Jan 2012 - 19:43
Bah un Jeu Open World avec possibilité d'inviter des Amis en ligne Smile
C'est pas du MMO, c'est du Online toussa toussa ^^
avatar
Drace
Membre

Nombre de messages : 177
Age : 28
Localisation : Sud de la France
Distinction : aucune
Date d'inscription : 27/12/2011

Re: un RPG multi ?

le Jeu 5 Jan 2012 - 20:51
En restant dans le thème RPG, il est possible de faire un tower defense.
avatar
Berka
Administrateur

Nombre de messages : 1831
Age : 28
Localisation : Paris
Distinction : rubyste déglingué
9ème dan en scripting-no-jutsu

Nouveau Justine Beber ;P
Date d'inscription : 16/12/2007
http://rpgruby.olympe-network.com

Re: un RPG multi ?

le Ven 6 Jan 2012 - 0:52
Bon, allez ! Je m'y colle pour expliciter un peu. Ce que je vais dire, je l'ai testé: j'ai beaucoup réfléchi sur la question et je pense avoir avoir essayé l'ensemble des techniques susceptibles de permettre le support de plusieurs joueurs avec RM. Parce qu'on dit beaucoup trop d'idioties sur les orpg avec rgss. J'en profite pour tenter de dresser un état des lieux de ce qui se fait et de ce qui a été trouvé en la matière.

Je vais aborder les principaux problèmes successivement.

I) L'interraction de RM avec l'extérieur.

Un jeu multijoueur nécessite deux choses: un logiciel client (Rpg Maker) et un logiciel serveur (un script ruby, un programme plus complexe en C, Perl, Php, etc.).
La programmation du serveur ne pose pas de probleme: son rôle est de réceptionner les données envoyées par le client, de les traiter et de lui en envoyer des nouvelles.
La programmation du client est plus complexe du fait des limitations natives de Rgss et de RpgMaker.

a) Le bridage de Rgss

Rgss est une version modifiée de Ruby et non une simple bibliothèque comme on l'entend souvent dire. C'est-à-dire que c'est une compilation de Ruby embarquée dans un exécutable écrit en C++. En fait, nous avons un programme Game.exe qui charge une librairie RGSS300J.dll (par exemple) contenant l'interpréteur Ruby et dont les fonctions sont exportées dans Game.exe. D'autres fonctions et objets, non natives de Ruby, sont également codées, comme Bitmap, Input, etc. En outre, certaines fonctions de Ruby sont bridées: supprimées ou limitées. C'est notamment la fonction Kernel#require de Ruby qui permet de charger des fichiers externes (*.rb ou *.rbw) ou compilés (*.so pour les librairies unix). Dans VX la fonction a été masquée (rendue privée, plus précisément), mais un petit hack permet de la restaurer. Toutefois, on ne peut pas modifier ce qui n'a pas été codé: elle ne supporte pas l'importation de fichiers compilés. Or, de tels fichiers sont très utiles en ruby car ils permettent l'utilisation de librairies externes. Certes, on pourrait utiliser des fichiers décompilés, mais quoiqu'on fasse on se retrouve au bout de la chaine des require à devoir appeler un fichier compilé. Du coup, Rgss ne le supportant pas, ça plante. Donc exit les librairies online de ruby:

Un autre bride de RpgMaker est la perte du focus de la fenêtre. Vous avez pu le remarquer dès que l'on change de fenêtre, le jeu se met en pause. Plus précisément, il ne se raffraichit plus: Rgss arrête de s'exécuter et ne redémarre qu'au focus de la fenêtre. Cela gène considérablement les jeux online où la synchronisation entre les joueurs doit etre permanente.

b) Contourner ce bridage

Je pense que c'est la chose la plus intéressante de tout ce que l'on peut faire avec un script. Sans tomber dans le lyrisme informatique, c'est une sorte de combat entre le programmeur et sa machine. Bref. Comment, tout d'abord, faire communiquer Rgss avec le monde ? Les développeurs de Rgss ne nous ont pas complètement oublié: ayant besoin de faire appel aux librairies de Windows pour le programme en lui-même (accès au registre pour trouver les RTP, affichage de la fenêtre de jeu, etc.) ils ont laissé dans Ruby la classe Win32API. Celle-ci permet l'utilisation de fichiers *.dll externes. Un peu comme les fichiers *.so dont je parlais tout à l'heure. Windows utilise de nombreuses bibliothèques pour ses propres logiciels. Vous pouvez les trouver dans le dossier WINDOWS/System 32/*. Dans le lot, pas mal permettent un accès à internet. J'en ai pas mal utilisé dans mes différents scripts: FTP / HTTP / MYSQL, etc.
Vous avez beaucoup parlé des sockets dans la discussion. Ils sont eux aussi gérés par Windows dans la dll Winsock. Les sockets ont toujours beaucoup intéressé les scripteurs, en témoigne la foultitude de scripts qu'on peut trouver. C'est la solution la plus classique pour mettre un jeu en réseau: envoyer et recevoir des trames (bribes de chaines) du serveur.

II) La création d'un jeu online.

a) Possible en théorie

Il est possible de faire un jeu multijoueur avec RpgMaker. Aucun scripteur ne peut le contredire en théorie. Les méthodes par socket sont actuellement fonctionnelles, c'est-à-dire que l'on peut faire communiquer un serveur avec un jeu tournant avec Rgss. L'échange des trames se réalise correctement en réseau local ou distant (via le protocole TCP/IP ou le protocole UDP). Il existe de très nombreux essais se basant sur les sockets, notamment le fameux netplay des communautés anglophones, plus stable encore la PMO du français Tonyryu. Cependant, à l'heure actuelle, je n'ai jamais vu un seul jeu terminé supportant un mode multijoueur.

b) Beaucoup trop lent en pratique

Toutefois, le système, même s'il roule sous Ruby, n'est pas exécuté nativement par l'interpréteur. Chaque accès réseau passe par une dll externe qui s'occupe de la communication. Les fonctions de cette librairie sont invoquées par l'objet Win32API qui a le défaut d'être extrêmement lent. Le temps d'exécution que l'on gagne en utilisant un langage bas niveau donc plus rapide comme le C (qui code la dll) on le perd dans le chargement de l'API.
En créant le système de communication avec mysql, j'ai voulu accélérer les transferts en réduisant les étapes nécessaires aux sockets: connexion, envoi, transfert, écoute, transfert, réception, interprétation, confirmation. Dans mon script, il n'y a qu'une connexion, un envoi, une réception et l'interprétation. La connexion se fait principalement au chargement du jeu. L'envoi est moins complexe que l'envoi d'une trame car il se fait sous forme de requête SQL, ce qui est optimisé. La réception est peut-être un peu plus longue du fait de l'utilisation de boucles pour transcoder le résultat du C à une chaine Ruby (et donc par l'utilisation de nombreux pointeurs). Bref, le résultat s'il est meilleur n'est toujours pas satisfaisant.
Il faut naturellement écarter la technique du téléchargement de fichier, beaucoup trop lente.
Pour avoir un ordre d'idée, on va prendre un jeu à 5 joueurs, ce qui est minime. RM tourne à 40 frames par seconde. En gros l'interpréteur Ruby fait 40 tours en une seconde: rafraichissement graphique, du clavier et des données de jeu. Il faut multiplier par deux les connexions car il s'agit à la fois de recevoir et d'envoyer des informations. Ce qui fait 80 opérations par seconde (donc chacune doit s'exécuter en 0,0125 secondes). Bien sur, on ne peut faire ce rafraichissement non pas à chaque frame mais seulement 2 fois par seconde. Mais il ne faut pas oublier qu'il y a également 5 joueurs à gérer, pour chacun il faut télécharger les données et les transposer dans le jeu (mise à jour de la position, de la direction). En s'en sortant bien, on peut tirer à 50 opérations par seconde.

Mais ces communications ne doivent pas bloquer le jeu (la mise à jour graphique notamment). Par conséquent, il faut utiliser des Threads (exécution parallèle de code). Ceux-ci, même s'ils sont correctement gérés par Ruby, ne sont jamais très efficaces dans des langages interprétés car l'interpréteur a plus de boulot. Du coup, chaque opération nécessite plus de temps que si elle était gérée nativement.

Conclusion.

On ne peut pas être formellement certain de l'impossibilité de faire des jeux multijoueurs avec RpgMaker. Cependant, comme il a été dit précédemment, beaucoup de scripteurs s'y sont cassés les dents. Le principe est parfaitement fonctionnel mais il reste un très gros travail d'optimisation du système. A titre d'exemple, il faut réfléchir au gain de précieuses millisecondes. C'est un peu ce que j'ai tenté dans ma gestion mysql (on m'a pas mal reproché le fait que mon code soit incompréhensible): il faut optimiser jusqu'au nom des variables utilisées. Cette optimisation requiert une très grande maîtrise du Ruby et de la programmation en général. Pas question de croire que l'on peut développer un jeu multijoueur en sachant bidouiller des scripts). Pour connaitre votre niveau, essayez de créer un jeu fonctionnel en ayant effacé l'ensemble des scripts du jeu. Pas question non plus d'essayer de partir d'un script online: vous n'en comprendrez qu'à peu près le fonctionnement et il ne sera jamais totalement adapté à vos besoins.

Quoiqu'il en soit, il faut bannir toute idée de jeu massivement multijoueur dans la mesure où je ne pense pas que RpgMaker soit capable de gérer plus de 5 joueurs sur une meme carte. L'avenir le plus proche est l'échange de scores ou de variables au cours du jeu (pour cela je recommande mysql: promo... promo... Laughing)

Bonne soirée,

Berka


Dernière édition par Berka le Sam 7 Jan 2012 - 0:58, édité 1 fois
avatar
XHTMLBoy
Membre

Nombre de messages : 28
Localisation : Bruxelles
Distinction : aucune
Date d'inscription : 03/01/2012
http://funkywork.github.io

Re: un RPG multi ?

le Ven 6 Jan 2012 - 16:29
L'envoi est moins complexe que l'envoi d'une trame car il se fait sous forme de requête SQL,
pour cela je recommande mysql
:npnwk:

Je suis globalement d'accord avec toi...mais:
Ce n'est pas parce qu'on ne peut gerer que 5 joueurs par map qu'on ne peut en gerer que 5. Si le serveur est organisé il est possible de les répartir en salons.
Tout ce que tu dit me semble vrai dans le sens où oui, faire un MMO est impossible (idée que je maintiens depuis le début), je n'ai jamais parlé que d'une simple couche réseau. (même si je pense qu'en jouant bien avec les délais de raffraichissements, il soit possible de gerer plus que 5 joueurs).

Mais bon, au final, je pense que tu me donnes raison. Donc je suis content Wink
Reviens nous dire coucou sur FunkyWork Smile
avatar
Korndor
Staffeux retraité

Nombre de messages : 4959
Age : 105
Localisation : Erem Vehyx
Distinction : Champion de boxe et au lit ! :O [Wax]
Être Mythique [Mister]
Papi Korndor qui a l'ostéoporose [Skillo]
Soldat Ikéa [Coco']
Un bonhomme, un vrai ! [Neresis]
Vieillard acariâtre [Didier Gustin]
Date d'inscription : 16/12/2007
http://www.rpgmakervx-fr.com/

Re: un RPG multi ?

le Ven 6 Jan 2012 - 17:03
Il n'est pas là question de donner raison à qui que ce soit, Berka a simplement fait un résumé objectif sur l'utilisation de RPG Maker pour créer des jeux en ligne Smile
En somme, dire que RM n'est pas le plus adapté et qu'il demande un très gros travail revient à valider nos deux avis, si c'est ce qui compte pour toi :
- RM n'est largement pas le plus efficace des moyens de créer un jeu en ligne, et demande des connaissances de scriptage de "haut niveau".
- Cependant, il est possible d'arriver à créer un jeu potable qui fasse du multi limité à un faible nombre de joueurs.
Voilà, égalité des scores si tu ne vois que ça à tirer de cette synthèse Laughing

Sinon pour ma part j'ai trouvé ce speech très instructif, il serait intéressant de trouver un moyen de le rendre visible à tous ceux qui se posent la question du RPG multijoueur Smile
De plus il est facilement compréhensible, même pour un incompétent de mon espèce Laughing



PS :
Pour connaitre votre niveau, essayez de créer un jeu fonctionnel en ayant effacé l'ensemble des scripts du jeu.
> Moi j'arrive à placer des # dans les scripts ; c'est déjà pas mal, tu crois que je peux y arriver ? :B
avatar
Berka
Administrateur

Nombre de messages : 1831
Age : 28
Localisation : Paris
Distinction : rubyste déglingué
9ème dan en scripting-no-jutsu

Nouveau Justine Beber ;P
Date d'inscription : 16/12/2007
http://rpgruby.olympe-network.com

Re: un RPG multi ?

le Ven 6 Jan 2012 - 17:35
Ce n'est pas parce qu'on ne peut gerer que 5 joueurs par map qu'on ne peut en gerer que 5. Si le serveur est organisé il est possible de les répartir en salons.

Sinon on peut aussi faire 5 salons de 1 joueur. Rolling Eyes

Je suis content de t'avoir donné raison. Mais sache que je n'aime pas trop les gens qui cherchent à prouver quelque chose.

Berka
avatar
dricc
Membre

Nombre de messages : 2756
Localisation : Lille
Distinction : Altruiste - Incarnation de la Patience [Mist']
Date d'inscription : 10/08/2009

Re: un RPG multi ?

le Ven 6 Jan 2012 - 19:53
Ooooookkkkk . Et moi qui pensais que au moins techniquement c'était jouable ...

Mais le débat ne portait pas seulement sur les MMORPG (dont berka a clos le débat pour de bon , je pense) .
Je me dit qu'a la reflexion , il serait possible d'imaginer qq chose de désynchronisé . Pour le coup , ce serait un peu anachronique mais bon .
Je pense en particulier à un jeu de type gestion d'équipe de foot auquel on ajouterait un coté RPG beaucoup plus prononcé . Remplace les joueurs de foot par toute sorte de combattant et tu as qq chose qui pourrait etre amusant . Chaque joueur controlerait une équipe et il y aurait un combat tout les soirs . ça , ça me semble jouable .
D'un point de vue technique , ça signifie des transferts de données controlés dont on pourrait même pardonner la lenteur . Vous avez peut-etre d'autres idées ? Drace proposait un tower defense et ça aussi , ça me semble jouable ... à condition que l'un des 2 joueurs (ou meme les 2) prépare à l'avance ses troupes pour que ce ne soit pas synchronisé .
avatar
XHTMLBoy
Membre

Nombre de messages : 28
Localisation : Bruxelles
Distinction : aucune
Date d'inscription : 03/01/2012
http://funkywork.github.io

Re: un RPG multi ?

le Ven 6 Jan 2012 - 23:54
Je suis content de t'avoir donné raison. Mais sache que je n'aime pas trop les gens qui cherchent à prouver quelque chose.
Juste pour mettre les choses au claire, je n'ai jamais dit que j'y arriverais et je ne cherche pas a le prouver.
Et puis mon avis ne compte pas vraiment, je suis déjà partit d'ici Smile

Berka: Très bien.
avatar
Irzyka-Monos
Membre

Nombre de messages : 440
Age : 34
Localisation : Reims (51)
Distinction : aucune
Date d'inscription : 11/01/2008
http://offgame.org/site/

Re: un RPG multi ?

le Sam 7 Jan 2012 - 10:19
Moué. Je viens de lire le gros post de Berka, et divers post. Quand un "débutant" pose la question et commence à rêver de faire ce type de jeu (car un "débutant" pense à un MMO heins, il ne faut pas se mentir), la réponse de kiki est quand même la bonne chose à dire \o/. Cela évite vraiment le bordel, et les discussion interminable qui posera et donc certaine personne "qualifier" répondre et se tira les cheveux.

Le type qui veux vraiment faire ça, ou tester de faire ça pour x raison à mon avis il ne posera pas la question, il se lancera directement avec ses connaissances. Et à croire les spécialiste, se cassera la gueule comme tout le monde xd. Mais dire à Kevin oui c'est possible va y fait joujoux... Alors que 99% des Kevin ne savent pas mettre des gens sur RM !

Contenu sponsorisé

Re: un RPG multi ?

Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum