Edit du 13/12/2012
Le lien de téléchargement vient d'être retiré et le serveur de la démo technique arrêté. Mais ne prenez pas ça comme une mauvaise nouvelle, bien au contraire, le lancement du projet de jeu Azaruss étant imminent, nous devons préparer l'environnement serveur. Un peu de patience, un topic de présentation du jeu Azaruss sera bientot réalisé.
______________________________
Post d'origine
Informations :Titre : Azaruss (qui sera le nom de mon projet qui en découlera)
Type de jeu : Portage d'APIs et GUIs de RMXP vers RMVX Ace
Logiciel : RMVX Ace
Créateur(s): Tonyryu Développeur, LightNox Testeur
Année: 2012
Avant propos :Quelques uns d'entre vous ont peut être aperçu ou tester mes projets sur RPG Maker XP, projet qui avaient pour vocation de proposer des passerelles multijoueurs évoluées et paramétrables. Mes 2 projets principaux étaient PMO (Passerelle Multijoueur Online) et Olympe qui posait les bases du MORPG. Ces projets avaient la particularité d'avoir un noyau logiciel ne s'appuyant absolument pas sur les scripts de base de RMXP, c'est à dire que j'avais recoder les moteurs en partant de rien, juste en utilisant ce que pouvait proposer le RGSS à l'époque. J'ai donc coder la gestion des APIs clavier, souris et réseau, ainsi que la mise en place d'une gestion de GUI (boutons, textes, saisie, zone de texte, etc...).
Je n'ai jamais terminé ce que j'avais commencé sur ces 2 projets, tout simplement, car je les avais réalisé dans un esprit communautaire, c'est à dire voué à la distribution avec la possibilité de personnaliser simplement l'outil. Hors, la complexité d'un moteur online sur RPG maker et la volonté de créer un système de paramétrage simplifié est peu voir pas du tout compatible.
Ce projet de portage est un avant gout d'un projet Online que je compte créer, et ne sera pas ou peu communautaire, dans le sens de la réutilisation du code interne pour créer un projet online différent. Certes, le code client et serveur seront partagés, afin que tous puissent profiter du code interne (prends en la graine "La Pomme" de mes deux), mais il sera très difficile de le comprendre en ayant pas un très bon programmeur. En effet, ne partant pas dans l'optique communautaire du projet, je limiterai les commentaires et la clareté du code au strict minimum, voir même au crade dans certain cas par esprit de rapidité de développement.
Scénario :Un portage de librairie n'a pas à proprement parler, de scénario. En effet, il s'agit d'une simple démo technique de l'utilisation des APIs et GUIs. Cependant, je peux détailler les objectifs qui étaient visés pour ce projet :
- Portage de l'API de gestion de souris
- Portage de l'API de gestion de clavier
- Portage de l'API de gestion réseaux
- Création des GUIs les plus utilisés
- Recodage de la gestion de Scene_Base, Window_Base afin d'y intégrer les GUIs et d'optimiser et simplifié le développement des scenes.
- Mise en place d'un serveur simplifié pour la démo technique
- Création d'une interface de connexion
- Création d'une interface de tchat
- Voir chaque joueurs connectés se déplacer de façons fluide dans 8 directions, au pixel et non plus au tile
Petit exemple de code de la fenêtre d'affichage des news :
- Code:
-
#==============================================================================
# ** Window_News
#------------------------------------------------------------------------------
# This is a window news class
#==============================================================================
# News
COULEUR_TITRE_NEWS = "E8DC00"
COULEUR_NEWS = "FFFFFF"
class Window_News < Window_Base
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
super({:rect => Rect.new(Graphics.width / 2, 0, Graphics.width / 2, Graphics.height), :active => true, :padding => 8})
fontLib = Font.new
fontLib.color = couleur_hexa(COULEUR_TITRE_NEWS)
fontLib.size = 30
add_gui("libNews", Gui_Base.new({:rect => Rect.new(0,0,contents.width,30),
:text => Vocab::News,
:textAlign => 1,
:textFont => fontLib}))
fontNews = Font.new
fontNews.color = couleur_hexa(COULEUR_NEWS)
fontNews.size = 20
add_gui("zoneText", Gui_TextArea.new({:rect => Rect.new(0,40,contents.width,contents.height - 40),
:textFont => fontNews,
:lineHeight => 25}))
end
end
Vous constaterez que l'on est très très loin, de ce que peut être la définition d'une Window sur le système par défaut.
Difficultés rencontrées :J'ai passé de nombreuses semaines dans une lutte acharnée contre l'UTF-8, qui n'était pas pris en charge par la version XP, et enfin, j'ai pu apprivoisé la bête. Pour ceux qui ne savent pas ce qu'est l'UTF-8, je ne peux que vous conseiller d'aller lire cette article de wikipedia : http://fr.wikipedia.org/wiki/UTF-8. Vous comprendrez donc que la gestion du simple "é" est complètement différent d'un encodage à l'autre. La difficulté réside dans le fait que la gestion de l'UTF-8 ne sait pas encore généralisé sur tous les systèmes (c'est bien dommage) et que la cohabitation est souvent délicate à réaliser.
La mise en place de la gestion de déplacement d'un autre joueur connecté a également été très laborieuse d'un point de vue algorytmique.
Quelques Screens :Le mot de la fin :Le projet qui suivra ce portage aura pour nom Azaruss et fera l'objet d'un topic dédié lorsqu'il sera bien avancé. Sachant que les personnes ayant le client du projet de portage sera mis à jour régulièrement pour en arriver au projet Azaruss. N'hésitez pas a essayer de vous connecter à plusieurs en même temps pour tester. Et surtout, si vous voyez le moindre bug, n'hésitez pas à le signaler.