Bonjour,
Introduction en 3 étapes
Courte présentation
Je m’appelle Guillaume, j’ai 17 ans et je suis en terminale S-SI. Je touche un petit peu à tout en programmation depuis que j’ai 10 ans, avec souvent de grandes pauses entre différent projets. (Je ne suis spécialiste en rien)
Génèse du projet
Ce projet a initialement débuté en 2011-2012 (je ne m’en souviens plus du tout). En regardant les projets sur zeste de savoir, et après avoir fini de réaliser un site internet pour notre classe, je ne voulais pas m’arrêter là. Mais, faire des sites tout seul dans son coin, c’est pas très gratifiant et puis ça ne m’amuse pas du tout. Hors, comme c’est sur mon temps libre que je développe, pourquoi perdre du temps avec des choses que je n’aime pas ? Je me suis dit « mais mince, ils ont tous leur projet, il est passé où mon esprit qui inventait tout le temps ?? ».
Alors j’ai relancé VS 2015, j’ai téléchargé la SFML et c’est reparti pour ce projet qu’il me tient à cœur de finir un jour.
Le but du projet
Je souhaite réapprendre le C++, non pas pour arriver à un niveau professionnel mais pour m’imposer une rigueur dans la vie de tous les jours. Je trouve que c’est un bon moyen pour y arriver (en plus du travail personnel !).
De plus, j’aimerai beaucoup faire évoluer ce projet, dans un sens qui me plaît. C’est-à-dire : y ajouter des choses que je trouve amusante, mais le fin but de ce projet est un jour d’avoir un joueur qui pourrait y jouer un petit peu en y prenant du plaisir.
Pour cela, j’ai mis le projet sur github dans le but qu’une personne, ou plus, dans le meilleur des cas, puisse m’apporter des remarques sur mon code (qu’est-ce qui est bien/pas bien, comment je pourrai améliorer tout ça…).
Eugola
Il s’agit de ce que je définirai comme un terraria-like (bien que je n’ai joué que quelques minutes à ce jeu), ce qui signifie : terrains aléatoires, biome, personnage, classes, monstres de toute sortes, etc. Pleins de choses durs à programmer pour moi en somme.
Ce qui a déjà été fait
J’avais dans le passé déjà entreprit de reprendre ce projet, j’avais donc réécrit super proprement toutes les caractéristiques (j’avais rassemblé des tonnes de liens sur de nombreux sujets : la création d’un format de sauvegarde, l’intégration de l’eau, les collisions, la génération aléatoire, les shaders pour la lumière, le scrolling, le multijoueur etc..). Au final je n’ai presque rien fait de tout ça, puisque j’avais bloqué sur l’affichage des tuiles en fonction des tuiles qui sont à côté (et oui, cela semble facile mais pas tant que ça au final !), de plus que je me rends compte aujourd’hui que je vais devoir réécrire en partie ce que j’ai fait car l’orientation de chaque bloc sera intégré dans le fichier de sauvegarde, enfin bref, un problème passager en quelque sorte.
Cependant cela m’a laissé je dirai une bonne base pour recommencer ce projet (j’avais en parallèle expérimenté de nouvelles manières de programmer des jeux notamment avec les systèmes d’états que j’avais fait en C#) qui m’a permis de reprendre ce projet sans avoir de problèmes à comprendre pourquoi j’avais fait ça comme ça! De plus j’ai l’impression que maintenant certaines solutions me paraissent évidentes alors que dans le passé, ce n’était pas le cas.
L’état actuel
Pour l’instant, je ne fais que créer un terrain de … 17100 tuiles, qui change à chaque apparition, avec chaque tuile qui s’oriente selon les tuiles qui l’entourent. On peut aussi les générer à la volée, le terrain est donc bien prépare pour l’arrivé du scrolling au sein du projet. J'ai aussi fait d'autres choses (une classe pour écrire en binaire dans les fichiers, pour préparer le format de sauvegarde, etc.. rien de visible en image presque).
On a un système flexible pour ajouter très facilement de nouvelles tuiles dans le futur. Pour illustrer mon propos, voilà comment on communique au jeu l’existence d’un bloc actuellement (l’ajout de propriétés viendra plus tard) :
1 2 3 4 5 6 7 8 | <?xml version="1.0" encoding="UTF-8"?> <Tileset path="img/tileset.png"> <path name="img/tileset.png"/> <tiles> <tile name="grass" id="0" type="1" xoffset="0" yoffset="0" frames="16" /> <tile name="sand" id="1" type="1" xoffset="16" yoffset="0" frames="16" /> </tiles> </Tileset> |
Facile, n’est-ce pas ? Mais bon, rien ne vaut une image, alors voilà ce que ça donne en visuel (rien de fou, mais bon):
(sur cette photo la génération se fait à l’aide d’un simple rand, pas de perlin noise ou de choses comme ça)
Ce qui va être fait ensuite
Prochainement, j’ai prévu de travailler sur ces différents points: - Pouvoir permettre le scrolling à l’infini la carte - Ajouter ma génération aléatoire - Travailler un peu les textures - Ajouter un premier personnage dans ce jeu
Bien d’autres.. que je montrerai sur ce topic au fur et à mesure de mes avancées.
Mélange des grosses idées pour le jeu
- Création d’un mode histoire
- Ajout d’un mode multijoueur
D’autres remarques
Etant musicien (même si j’ai arrêté il y a deux ans), j’ai toujours eu envie de faire ma propre musique, j’aimerai bien pouvoir un jour y ajouter une musique que j’ai composée moi-même.
Il n’y a aucune pression sur mes épaules : les études étant largement prioritaires, il se peut que je finisse ce projet non pas cette année mais quand je serai en bac + 2,3, ou encore plus, qui sait.
J’aimerai beaucoup me mettre en contact avec un graphiste qui pourrait réaliser quelques images pour le projet (les tilesets, icônes, et pleins d’autres choses qui devraient vite se rajouter dans le futur) au gré de son envie.
De plus rien n’étant figé quant au gameplay, si des gens ont des propositions, ne pas hésiter !
De plus, si vous avez des questions techniques (ou pas !), il ne faut pas hésiter, j’y répondrai avec grand plaisir
Des vidéos de l’ancien état (avant de tout reprendre de zéro), si ça intéresse quelqu'un:
Ressources
- Le github du projet (bien regardé la branche DEV)
- Cahier des charges actuel (à venir)
- Anciennes ressources (à venir)
Merci.