Université Montpellier 2 / DESS TNI /2000-2001 / Objets

Dans le cadre de ce module, a été réalisé en JAVA, de Octobre à Novembre 2000, un projet par groupe de 2 personnes. La personne avec qui je travaillais était Gauthier HADERER. Le sujet était libre: il suffisait de réaliser un jeu. Ayant déjà une certaine pratique de la programmation et du langage JAVA, j'ai choisi de réaliser un projet ambitieux: celui de réaliser pendant cette période courte de 2 mois, un véritable jeu 3D en réseau (assez impressionnant comparé à d'autres groupes qui avaient choisi de réaliser des jeux aussi simples que le "tic tac toe"...).

Gauthier HADERER s'est occupé de la partie réseau.

Moi, je me suis occupé de la partie 3D. Pour cela, j'avais commencé à regarder la librairie JAVA 3D. Mais je remarquai très rapidement que dès que l'on mettait quelques textures, ça ramait énormément... JAVA 3D ne semble pas adapté au temps réel. J'ai donc décidé de réaliser mon propre moteur 3D. Pour cela, je me suis inspiré du tutoriel sur le Raycasting de F. Permadi. Le "Raycasting" était le moteur 3D utilisé dans le 1er jeu 3D sorti par ID-Software en 1992: Wolfeinstein3D. Le monde de Wolfeinstein 3D était relativement simple:tous les mursde même hauteur... C'était une simple projection 3D d'un monde en 2D. Bien loin de simplement réimplémenterle même algo,je l'ai grandement amélioré pour afficher des mondes bien plus complexes. Les objets 3D (murs faits de parallélépipèdes rectangle) ont pour moi une altitude (hauteur au-dessus du sol à laquelleon affiche le bas de l'objet (plafond)) et une hauteur (hauteur au-dessusdubas de l'objet à laquelle on affiche le haut de l'objet(sol)). Ces objets bénéficient d'améliorations visuelles comme le mapping de textures (éventuellement transparentes), et l'ombrage enfonctionde la distance. J'ai bien entendu ensuite grandement optimisé l'affichage pour éviter le calcul de l'affichage des objets masqués. La technique que j'ai réalisée est détaillée dans le rapport fourni plus bas. Des connaissances mathématiques, notamment dans la trigonométrie 3D me furent très utiles.

Cette technique, au départ inspirée du Raycasting, permet d'afficher des mondes bien plus complexes et bien plus réalistes que ceux pour quoi elle était prévue au départ en 1992, comme vous pouvez le voir sur la page des screenshots .

Suite à ce projet, j'ai publié une version allégée jouable directement "online" (en ligne) via un navigateur Internet et le plug-in Java. La version allégée ne présente pas de support réseau. (la gestion du réseau dans un environnement en ligne, n'est pas simple et consiste en un projet à elle toute seule, dont je me suis occupé plus tard, voir ci-dessous) C'est cette démo que je vous propose de jouer ci-dessous. Mise à part une note excellente, J'ai eu la récompense de voir ma démo listée par divers sites spécialisés dans les jeux Java en ligne, avec à l'époque un commentaire ou lien vers le jeu directement à partir de la page d'accueil. En voici 2: JavaGames4Free et JavaBoy. Il est trouvable sur diverses pages similaires plus récentes qui ont fleuri un peu partout depuis, ainsi que sur divers moteurs de recherche.

applet de démo (pas toutes lesfonctionnalités) (avec le plug-in Java)
(n'oubliez pas d'installer le plug-in Java (1.2.2 minimum) si nécessaire avant d'aller voir... ceci n'est pas la dernière version, mais a pour intérêt de vous montrer que ça marche. la dernière version est intégrée au monde virtuel en ligne The World of Pikastle 3D, voir ci-dessous)

rapport détaillé (version HTML)
rapport détaillé (version Word 2000)

code du projet (archive RAR)

Université Montpellier 2 / DESS TNI /2000-2001 / Projet
Pikastle 3D, le retour!!!

3 mois apres avoir réalisé ce jeu, je me devais de réaliser le projet de fin d'année universitaire (juste avant le stage).
J'ai choisi de reprendre Pikastle 3D, dans le but de créer un monde virtuel. Les utilisateurs auraient le choix de créer leur propre personnage 3D, leur propre carte ou monde 3D... de créer des parties et d'y accueillir d'autres utilisateurs via un réseau, pas forcément pour se taper dessus d'ailleurs... Ce principe de monde virtuel 3D pourrait également s'appliquer à diverses autres choses comme les chats (la partie serait alors considérée comme un salon de discution, et le moteur 3D sert entre autres à la décoration de la salle de discution... on peut alors également introduire des micros et gérer des sons 3D, c'est-à-dire leur porté si les utilisateurs veulent se séparer en plusieurs groupes au sein de la même salle ou murmurer entre eux... un personnage peut ensuite aller éventuellement de groupe en groupe...). Les applications sont multiples...

En gros il s'agissait de reprendre le code du moteur 3D ainsi que celui du réseau, et de mettre une base de données derrière pour enregistrer les créations des joueurs.
De la 3D, en plus en ligne et en réseau en même temps, à ma connaissance, personne ne faisait encore ca sur Internet, et je pensais avoir une idée novatrice. Pour moi, la 3D en réseau et en ligne, c'était l'avenir des jeux vidéos et du multimédia.

Toutefois vu le peu de temps dont nous disposions avant le stage, j'ai du réviser mes ambitions à la baisse vu les difficultés que nous avons rencontrées. En effet, le plug-in Java est doté d'une politique de sécurité sévère, lui interdisant par défaut d'accéder à des fichiers locaux, ou situé sur d'autres serveurs web. Or, cela faisait partie des exigences de base: qu'un utilisateur puisse choisir une image pour faire son personnage n'importe-ou sur Internet. La procédure pour autoriser ces opérations est très peu documentée par Sun, et en prime il existait alors différentes versions totalement incompatibles de ces politiques de sécurité. La majorité des informations que l'on trouvait ne s'appliquait pas à notre dernière version de Java.

J'ai donc remis à plus tard mon ambitieux projet, et nous avons rélisé ce monde virtuel avec les Java RMI en réseau local selon une architecture client/serveur, ce qui ne pose donc pas de problème de sécurité.

code du projet (archive RAR)

Pikastle 3D 2002
Pikastle 3D, le retour 2!!! (il se croit dans une série télé?...)

Nous en sommes maintenant presque 1 an après, et cette fois-ci j'ai travaillé tout seul. Malgré plusieurs lettres de motivations "passionnées" envoyées à diverses entreprises, quasiment aucune n'a daigné me répondre ou n'a semblé me prendre au sérieux.
Je ne vais pas me décourager pour autant, et parallèlement à mon emploi, j'entame donc le travail de titan qu'était "adapter le projet précédent au monde de l'Internet". Le tout a été publié en GPL (aucun intérêt d'interdire de copier une technologie déjà vieille de 15 ans). Donc, un peu de code PHP pour enregistrer les utilisateurs, leur faire accepter la licence, enregistrer leurs crétions (personnages 3D, mondes 3D, cartes 3D...), tout autour du HTML pour faire joli, et le tour était joué. Les utilisateurs pouvaient s'enregistrer, créer, et partager les oeuvres (ils choisissaient des droits d'accès pour chacune, précisant si leur crétion était librement utilisable et/ou modifiable).
Je me suis donné beaucoup de mal afin de rendre ce projet accessible à tous (pas de manipulations compliquées: directement en ligne, aucun fichier à installer...) et "universel": multi-platte formes et multi-navigateurs, et ce par l'utilisation de code HTML conforme à la norme W3C et de code Javascript au minimum et très propre, et des moteurs Java originaux multi-platte formes. J'ai testé mon projet avec succès sous divers navigateurs à l'époque tels que Internet Explorer (évidemment il faut commencer par là pour être universel...), mais aussi Netscape Navigator, Mozilla et même Opera.

Concernant les problèmes de sécurité énoncés au projet précédent, j'ai signé mon code électroniquement. C'est-à-dire que l'utilisateur se voit présenter une fenêtre lui expliquant que moi, Xavier Andréani garantit ce code comme non dangereux et l'invite à l'exécuter sur son ordinateur. Il lui reste à cliquer oui ou non...
Ma réalisation est toujours en ligne: pika3d.free.fr

Il ne manquait plus que le moteur réseau que je prévoyais de faire dès que tout irait parfaitement bien. Néanmoins mon projet n'alla pas bien plus loin.
En effet, je précisais bien sur le site que j'avais besoin de l'aide des utilisateurs afin de l'améliorer. C'était la seule chose que je demandais en échange de tout ce travail gratuit. Et les gens qui sont venus n'ont pas "joué le jeu". Sur plus de 1000 utilisateurs enregistrés en quelques semaines (beaucoup plus maintenant), seuls 10% (près d'une 100aine) ont réussi à jouer le jeu correctement (c'est-à-dire ont un score cumulé non nul dans la base de données).

Les raisons de cet échec d'après moi?
  • La plus simple: à cette époque les connexions Internet par cable ou ADSL ne faisaient pas légion. Se voir proposer le téléchargement du plug-in Java de 5Mo par modem à l'époque pouvait décourager une partie des visiteurs, surtout quand ils ne savaient pas à quoi ressemblait le jeu derrière...
  • Une autre pourrait être l'alerte de sécurité dont je viens de parler... Elle pourrait faire peur à certains utilisateurs.
  • Pour les "paranos", certaines options de sécurité de divers navigateurs poussées à l'extrême bloquent l'exécution des applets Java... (et si l'utilisateur n'est pas un minimum expérimenté, il ne comprendra pas...)
  • Enfin, une applet Java même signé, peut ne pas obtenir tous les droits dont elle a besoin... (partie "obscure" peu documentée de la sécurité des applets Java selon Sun) Tout avait l'air de marcher sous windows, mais on m'a dit que sous Linux les images n'étaient pas chargées par le moteur... Il est possible que ce problème se soit aussi produit sur certains systèmes Windows. Il était question d'aller modifier un fichier de configuration Java pour spécifier les droits accordés par défaut aux applets signées de tel ou tel auteur... Si encore l'interface graphique de configuration de Java permettait de faire ca, mais non... On s'éloignait radicalement du but initial: faire quelque chose qui marche tout seul chez tout-le-monde!

Si nombre d'utilisateurs ne voulaient déjà pas télécharger un plug-in, et tremblaient devant l'alerte de sécurité "faites-vous confiance à Xavier Andréani?", il était utopique d'aller leur demander de modifier manuellement un fichier de configuration...
De plus, si certains systèmes refusaient déjà que l'applet accède à une image d'un autre serveur Internet, ca aurait été encore moins facile qu'un utilisateur crée une partie réseau et accepte des connexions clients. Voilà pourquoi le moteur réseau online ne vit jamais le jour...

Si les gens avaient été plus coopératifs, j'aurais peut-être continué, mais mis à part les gens que je connaissais (étudiants de mon université amis...) je n'ai recu qu'un seul email de "beta-testing" en 1 an... Sans aide je ne pouvais identifier clairement d'où venaient les problèmes et le projet dans sa forme actuelle est officieusement abandonné.


Un dernier mot... Les problèmes de droits ci-dessus peuvent être facilement contournés à condition de disposer de mon propre serveur. Les images distantes pourraient alors être téléchargées de facon plus ou moins transparente dans un espace attribué à l'utilisateur. Elles sont alors locales au serveur web, et plus de problème. Cela corrige également le problème du serveur réseau lancé par l'utilisateur pour gérer une partie. Il peut alors parfaitement s'agir d'un processur exécuté sur le serveur Web, et alors aucun problème de connexion non plus. Toutefois, ce sont des opérations impossibles (interdites) sur la grande majorité des hébergeurs de sites web gratuits, et si j'ai accepté par passion de travailler gratuitement sur ce projet, ce n'est pas du tout dans mes projets d'aller maintenant payer pour une reconnaissance quasi-nulle.

Toutefois je dois avouer que ce fut pour moi une expérience très enrichissante. Je n'avais encore jamais utilisé beaucoup le PHP, ni géré de base de données multi-utilisateurs. Ce projet m'a également permis de m'améliorer grandement, dans tout ce qui concerne la programmation HTML et Javascript multi-navigateurs.

Il est à noter que mon code PHP de gestion d'utilisateurs dans une base de donnés (publié lui aussi en GPL) a été repris avec succès par des étudiants réalisant un site web surle temps de la Nouvelle-France: Une vie de colon.

Autre fait intéressant, j'ai proposé mon idée de cartes créees par les utilisateurs et partagées entre eux à mon employeur Tactical Soft pour le jeu Arsenal. L'idée a été accepté et implémentée, et ca marche!!! (c'est tout-de-même malin... au lieu de payer des graphistes à faire des cartes, on fait travailler les joueurs gratuitement, rien que parce qu'ils veulent avoir leur carte publiée sur le serveur ;-)

Pikastle 3D 2004
"Ah non il exagère..."

On se retrouve maintenant 2 ans après. Mon pressentiment était juste: de plus en plus de "mondes virtuels" émergent ca et là sur Internet, et les technologies gérant la 3D sont là (VRML, Java3D...).
Je ne peux pas me battre contre nombre d'entreprises spécialisées, et c'est sous une autre forme que je fais survivre mon petit jeu:

Bien plus modeste, si je n'ai pas su intéresser monsieur tout-le-monde à venir jouer en réseau en ligne, je tente d'intéresser les webmasters à décorer leur site par ce jeu en version "stand-alone" (en gros l'applet de démo tout en haut... on remonte loin! en changeant les images à volonté)
Et curieusement, ca marche très bien... J'ai optimisé une fois de plus le moteur, j'ai déjà de nombreuses personnes intéressées. J'ai ainsi changé de classe d'utilisateurs... Les webmasters semblent plus ouverts aux diverses applications de l'Internet et aux idées nouvelles, et plus compréhensifs aussi. C'était peut-être ca mon erreur initiale: j'avais mal choisi ma catégorie d'utilisateurs: il faut savoir reconnaître ses erreurs.

Le kit personnalisé pour moonparadise2002.free.fr (version complète Internet uniquement)
Le kit personnalisé pour moonparadise2002.free.fr (démo)

J'ai aussi un autre projet qui serait de faire tourner le jeu sur téléphone portable. Les téléphones portables deviennent de plus en plus de véritables micro-ordinateurs, et ca me semble donc possible. En théorie, le code Java est multi-platte formes et devrait compiler sans problème pour téléphone, si Sun a tenu ses objectifs initiaux de portabilité. Je n'ai pas testé encore. Mais ce qui n'a pas marché il y a 2 ans, marcherait peut-être maintenant sur les téléphones qui sont justement faits pour communiquer et jouer... Nombre de jeux 2D sortent en Java pour ces téléphones, alors pourquoi pas de la 3D? Et évidemment, l'idée du jeu où l'on combat son correspondant vient immédiatement à l'esprit tant qu'à être sur un téléphone...

Je pense sincèrement que ce style de projet a aujourd'hui plus de chances de trouver des joueurs "passionnés" dans le domaine du portable que de celui de l'Internet. Les gens n'allant pas principalement sur l'Internet pour jouer, ou en tous cas pas encore quand ils n'ont rien à faire... Par contre les gens jouent sur leur portable quand ils n'ont rien à faire! Mais évidemment, suite à mon échec j'hésite à me lancer surtout dans une technologie qui m'est encore inconnue.