RPG Maker MV sur casio
Posté le 02/04/2022 00:56
Hello Hello !
Alors comme je me suis dit que mon poste d'avant était claqué et que j'allais le détailler, et oui c'est l'heure.
Bon tout d'abord, pour ceux qui ont essayé le programme (d'avant), ils ont pu voir le logo Particule.
Donc est-ce que RPG Maker Casio est fait avec Particule ?
La réponse est Non, car le programme réutilise bien des morceaux de Particule (car flemme de refaire à zéro) mais le moteur est totalement différent à Particule (il n'y a pas de component ici).
Si vous avez déjà essayé RPG Maker (sur ordi) vous avez remarqué qu'il y a beaucoup d'images et donc vous vous demandez comment toutes ces images peuvent tenir en 2 Mo ?
Bah on ne peut pas, sauf si on triche un peu.
Première optimisation :
Pour commencer il faut savoir comment fonctionne RPG Maker (sur PC), alors je me suis documenté en cherchant sur internet et je suis tombé sur cette
page.
Elle explique comment fonctionnent les Tiles et toutes les variances de blocks
Exemple :
Bon vous imaginez bien qu'il est impossible pour la casio de garder en mémoire toutes les variations possibles de tous les blocs, du coup j'ai "découpé" en quatre tous les blocs.
Ensuite j'ai conservé les coordonnées de ces sous-blocs pour recréer toutes les combinaisons.
Exemple:
(en bleu : un block complet, en rouge : la décomposition en sous blocs)
Donc pour résumé, le programme conserve un ensemble de quatre coordonnées pour chaque bloc et il utilise la fonction subimage pour découper, réassembler et afficher l'image en temps réel pour chaque bloc.
Deuxième optimisation:
Les images sont très grandes, alors on n'a pas le choix de réduire la résolution.
Mais vous allez dire : "On ne verra rien sur l'écran ça sera trop petit"
C'est pourquoi il y a un agrandissement de l'image finale en temps réel lui aussi (zoom x3)
Troisème optimisation:
Dans RPG Maker il y a beaucoup de Background et ces images sont censées prendre toute la taille de l'écran.
Alors ici on pourrait utiliser la méthode de l'agrandissement aussi mais ça ne suffit pas, ça pèse trop lourd.
Du coup j'ai sauvegardé les images à l'extérieur du programme et celui les charges quand il en a besoin et les décharges régulièrement.
Bon ensuite le système d'évènement (les PNJ, les ennemis, etc...) c'est la partie la plus complexe (et elle n'est pas totalement finie).
Chaque évènement encode son script et le sauvegarde dans la map, la question est : "Comment fonctionne cet encodage ?"
Je ne vais pas trop rentrer dans les détailles mais en gros, chaque ligne de code possède un identifiant et des paramètres.
Le programme appelle la fonction qui correspond à l'ID et lui donne les paramètres.
Exemple :
ID : 101
Paramètres : ["Hello"]
Programme:
101 correspond à afficher du texte, donc le programme va afficher "Hello"
Voilà comment fonctionne grossièrement RPG Maker, sauf que RPG Maker est codé en Java et en Java on a droit de faire ça ["Hello", 1, 0.23f, true].
Bon vous l'avez compris, le C++ n'aime pas ça du tout. Du coup j'ai dû créer un type particulier pour qu'il puisse supporter cette horreur.
Ensuite voilà la partie amusante (c'est ironique bien sûr), j'ai dû recréer toutes les fonctions de chaque ID (alors pas toutes pour l'instant, car il y a 2 mille lignes de code à rendre compatibles en C++).
Pour ceux qui se posent la question, RPG Maker possède le code sources en lisible, donc je me suis pas trop cassé la tête de ce côté-là.
Gestion des inputs :
Oui vous avez bien lu, il y a dans le programme un menu des inputs.
Comme dans mes programmes on me fait souvent la remarque que certaines touches sont mal choisies, je me suis dit que je vais vous laisser la possibilité de les changer (comme ça vous allez arrêter de me critiquer sur ça
).
Évidemment, lorsque vous quittez le menu des inputs, le jeu les sauvegardes.
Seul le menu principal qui n'est pas soumis à cette gestion des inputs (donc le menu principal utilise uniquement les touches par défaut).
(Par défaut, la touche de validation est "EXE")
Si vous voulez réinitialiser les inputs il vous suffit de supprimer le fichier "DATA_RPG/Inputs.bin"
Les commandes par défaut sont :
KEY_Action = KEY_CTRL_EXE;
KEY_Cancel = KEY_CTRL_EXIT;
KEY_ExitGame = KEY_CTRL_MENU;
KEY_MoveDown = KEY_CTRL_DOWN;
KEY_MoveLeft = KEY_CTRL_LEFT;
KEY_MoveRight = KEY_CTRL_RIGHT;
KEY_MoveUp = KEY_CTRL_UP;
KEY_NextPage = KEY_CTRL_F6;
KEY_OK = KEY_CTRL_EXE;
KEY_Pause = KEY_CTRL_DEL;
KEY_PreviousPage = KEY_CTRL_F1;
KEY_Shift = KEY_CTRL_SHIFT;
Il existe aussi une touche KEY_Debug mais celle-ci m'est uniquement réservée, car elle permet d'ouvrir un terminal de commande dans le jeu.
Voilà pour l'instant
Vous pouvez tester la démo
ici (car trop lourd en pièce jointe).
Décompresser le zip à la racine de la casio.
Sur la Map1 vous pouvez parler au personnage en appuyant sur KEY_Action
Allez à la scène suivante/précédente en appuyant sur KEY_NextPage/KEY_PreviousPage.
Dernière nouveauté aussi : les éléments qui sont devant (arbres, etc.) cache désormais le joueur (voir dernières images)
Il y a 20 maps de test (attention Map n°3 n'existe pas)
Animation des Textures (Tiles, perso, etc...) (Contient les Tilesets : Intérieur, Extérieur, Donjon, Overworld)
Fonctionne avec de grandes Maps (50x50)
Gestion des collisions
(Uniquement pour Graph 90)
Images
Cliquer pour enrouler
Drop the mic !
Citer : Posté le 02/04/2022 01:21 | #
Le château identique mais enneigé c'est tellement big brain. Lore immédiat. J'ai envie de RPG maintenant... !
Citer : Posté le 02/04/2022 02:00 | #
Les RPGs sont à la mode de ce que je vois !
Je n'ai pas testé, ça a l'air d'être du très bon boulot. Tu as ton repo quelque part ou tu souhaites le garder priver le temps du développement ?
(Et de toute façon, vous pouvez pas dire le contraire)
MultipliCasio
RDM Calculs
Back Mirror
A Switch To The Top C
Citer : Posté le 02/04/2022 02:28 | #
Le château identique mais enneigé c'est tellement big brain
Moi aussi ça me le fait à chaque fois quand je fais mes tests
Il faut savoir qu'il y a toutes le combinaisons des Tilesets (les coins, les intersections, les variations de climats, toutes les animations) de RPG Maker MV. C'est pour ça que je dis qu'il y a une optimisation de malade en terme de mémoire et de performance.
Je n'ai pas testé, ça a l'air d'être du très bon boulot.
Merci pour le compliment
Tu as ton repo quelque part ou tu souhaites le garder priver le temps du développement ?
Pour l'instant il n'y a pas de repo et je ne sais pas s'il y en aura, je le garde en priver pour l'instant mais je mettrais à disposions le convertisseur de map pour ceux qui voudrons créer les leurs.
Ajouté le 11/04/2022 à 15:26 :
UPDATE DU TOPIC !
Albert Einstein
Citer : Posté le 11/04/2022 15:27 | #
Juste une remarque en passant... ce que tu as fait avec les tilesets ressemble à ça : https://www.tilesetter.org/docs/generating_tilesets
Que j'aime beaucoup, je pense que c'est une très bonne idée que tu as eue.
Citer : Posté le 11/04/2022 15:31 | #
Tu a lu tout l'Update du topic en moins de 2 min gg XD.
Merci
En effet, je me suis dit que c'est plus sympa de faire ça
Albert Einstein
Citer : Posté le 11/04/2022 15:34 | #
J'ai lu trèès en diagonale ha ha. Ça a l'air vachement solide en tous cas. Vu que tu utilises pas Particule, tu penses que tu pourrais montrer une vue d'ensemble de ce qu'il y a dans le projet ? Par exemple ici, quel outil tu utilises pour faire la map (Tiled/intégré/autre ?), comment tu édites tes scripts, combien il y a de code C/C++ s'il y en a, ce genre de trucs ?
Histoire de donner aux potentiels intéressés une idée de ce en quoi utiliser ton projet consiste
Citer : Posté le 11/04/2022 15:41 | #
Oui bien sûr,
Du reste j'ai mis à jours les images (dans le spoiler) et je montre du code.
Pour ce qu'il s'agit des outils j'en parlerai plus tard.
(Je sais pas si t'as lu la partie input, mais tu devrais )
Albert Einstein
Citer : Posté le 11/04/2022 15:42 | #
Oui j'ai vu l'éditeur d'inputs, c'est pas mal ! C'est aussi assez chiant à coder de façon générale, donc vraiment bienvenu je pense (j'ai passé un temps fou sur celui de CGDoom c'est dingue xD).
Citer : Posté le 11/04/2022 15:44 | #
ha non c'est pas compliqué je trouve, ça m'a pris 20 min à tout cassé
Ajouté le 11/04/2022 à 15:50 :
En j'ai fait une struct global :
struct Input
{
int KEY_ExitGame;
int KEY_MoveUp;
int KEY_MoveDown;
int KEY_MoveLeft;
int KEY_MoveRight;
int KEY_Action;
int KEY_Pause;
int KEY_OK;
int KEY_Cancel;
int KEY_Shift;
int KEY_NextPage;
int KEY_PreviousPage;
int KEY_Debug;
};
extern Input InputManagers;
Albert Einstein