Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Autres questions


Index du Forum » Autres questions » Création d'un RPG
Dyn4moo Hors ligne Membre Points: 19 Défis: 0 Message

Création d'un RPG

Posté le 16/12/2017 19:56

Bonjour à toutes et à tous,
Si je poste ce topic aujourd'hui, c'est parce qu'il y a depuis quelques temps déjà, j'ai eu l'envie de créer un jeu style Goblins sur Casio pour ceux qui connaissent.. La programmation du jeu n'est pas un soucis. Là où je rencontre des problèmes, c'est pour afficher mes images (maps, ennemis ...). Plusieurs alternatives s'offraient à moi. Entre autre : coder des sprites comme me l'a gentiment suggéré Zezombye (merci à toi), puis les afficher en super Drawstat. En soit ce n'est pas une mauvaise idée mais je ne trouves pas l'intérêt de coder des sprites que je n'utiliserais qu'une seule fois. En fait, j'aimerais, dans l'absolu, coder toute la map en drawstat, super drawstat ou multidrawstat. Peut-être que le problème vous apparaîtra plus clairement en jetant un coup d'oeil au fichier joint. C'est une des maps en question. Le problème c'est que coder cette map manuellement en draw star prendrait beaucoup de temps, il y a surement une meilleure solution. Si vous avez une idée, je vous prie de me la donner en commentaire.
Merci à tout ceux et celles qui auront pris le temps de lire cette petite question et; si possible, d'y répondre.

Fichier joint


Zezombye Hors ligne Rédacteur Points: 1756 Défis: 13 Message

Citer : Posté le 16/12/2017 20:28 | #


Le problème c'est que coder cette map manuellement en draw star prendrait beaucoup de temps, il y a surement une meilleure solution.


Non seulement ça te prendrait du temps, mais ça prendrait aussi du temps pour l'afficher (pour ça que je n'ai pas implémenté le PNG->drawstat dans BIDE, il n'y a pas de raison de l'utiliser).

Dans ce cas il faut l'encoder sous forme de picture, comme ça ta map est affichée instantanément.
Par défaut, les pictures prennent 2048 octets, mais il y a moyen de diviser par 2 la taille dans BIDE en mettant #Size: 0x400 au lieu de 0x800. Attention, il faudra l'afficher avec BG-Pict au lieu de RclPict. Du coup, il faut compter 1 ko par picture.

Après si tu as beaucoup de maps il faudra faire un compromis. Un bon exemple de RPG en basic est Zelda de Remiweb, qui utilise un mix de pictures et de sprites. Par exemple ici le contour de la maison, assez complexe, est stocké dans une picture, tandis que le reste est dessiné en super drawstat.


Pour pouvoir mieux t'aider il faudrait que tu montres d'autres maps : vas-tu réutiliser les sprites des maisons, des panneaux, l'encadrage, etc ?
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Dyn4moo Hors ligne Membre Points: 19 Défis: 0 Message

Citer : Posté le 18/12/2017 19:05 | # | Fichier joint


Merci pour ta réponse,
Je n'ai pas encore réalisé les autre maps mais elle seront dans le même genre que la première. Ça ne me dérange pas d'utiliser les pictures si elles sont réduite à 1k car il n'y aura pas beaucoup de maps.
Ci-joint, un des ennemis du jeu. Par contre là j'imagine qu'il va falloir utiliser le drawstat ?
Lephenixnoir Hors ligne Administrateur Points: 24582 Défis: 170 Message

Citer : Posté le 18/12/2017 20:06 | #


Tu ne peux pas réduire impunément toutes les Picture à 1024 octets ; ça va te poser des problèmes du genre afficher deux Picture en même temps lorsque tu appelles RclPict.

Pour les ennemis, un Super DrawStat est classiquement l'option privilégiée : ils sont trop nombreux pour tenir dans des Picture, à la fois en termes de nombre de fichiers (au plus 20) et d'espace mémoire.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Dyn4moo Hors ligne Membre Points: 19 Défis: 0 Message

Citer : Posté le 18/12/2017 20:12 | #


Des problèmes ? Peux tu m'en dire un peu plus ? Et sinon sais tu comment je peux convertir l'ennemi en Super DrawStat ?
Lephenixnoir Hors ligne Administrateur Points: 24582 Défis: 170 Message

Citer : Posté le 18/12/2017 20:18 | #


C'est pas compliqué ; RclPict affiche 2048 octets en deux images. Si tes Picture font 1024 octets, il va t'en afficher deux superposées. À la base c'est prévu pour afficher un « fond » en-dessous de l'image ; peut-être quelque chose lié au Background mais j'ai des doutes. Je crois que c'est toujours un rectangle blanc.

La « conversion » des images en Super DrawStat est une opération réellement compliquée du point de vue algorithmique. Il n'y a que des heuristiques et elles ne sont pas forcément très performantes. Peut-être que BIDE le gère ; il n'y a pas de solution miracle. Le Sprite Coder a peut-être su faire, mais je ne sais pas s'il est encore en service...

Edit : Je lis mes MP et le forum avec le même niveau de détail ; je ne peux pas physiquement répondre plus vite par l'un que sur l'autre !
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Dyn4moo Hors ligne Membre Points: 19 Défis: 0 Message

Citer : Posté le 18/12/2017 20:23 | #


Excuse moi pour le MP, je suis un peu trop impatient Du coup si j'ai bien compris, pour convertir une image en Super DrawStat, je dois le faire manuellement ?
Lephenixnoir Hors ligne Administrateur Points: 24582 Défis: 170 Message

Citer : Posté le 18/12/2017 20:26 | #


C'est la façon d'obtenir le meilleur résultat. Mais pour des sprites de la taille que tu manipules pour tes ennemis, tu vas y passer un temps fou.

Pour l'instant, attends de voir si d'autres membres ont des solutions applicables. Je ne code quasiment jamais en Basic donc je ne suis pas bien placé pour tenir un propos autre que général ; peut-être que tu peux trouver une automatisation de la conversion qui t'économisera bien du boulot.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Dyn4moo Hors ligne Membre Points: 19 Défis: 0 Message

Citer : Posté le 18/12/2017 20:32 | #


J'ai tenté mais comme tu l'as souligné l'algorithme est très compliqué. J'avais essayé de traduire déjà l'image en points stockés dans des listes puis de parcourir ces listes pour savoir si la liste de points est une ligne horizontale (donc, si l'abscisse qui vient = l'abscisse précédente + 1 && ordonnée suivante = ordonnée précédente). J'ai fais ça pour les lignes verticales mais il faut aussi le faire pour les lignes obliques et c'est là que ça se corse réellement.
Merci tout de même pour ta réponse, je vais suivre tes conseils et attendre
Lephenixnoir Hors ligne Administrateur Points: 24582 Défis: 170 Message

Citer : Posté le 18/12/2017 20:37 | #


Je vais essayer de me pencher sur le problème d'algorithmique pour voir si je peux trouver une idée implémentable. Enfin c'est pas dit que je vais trouver quelque chose...

Ajouté le 18/12/2017 à 20:51 :
Bon, après avoir regardé le problème pendant, euh... 8 minutes, ce qui risque de se produire c'est que :

- Décider s'il existe une liste permettant de représenter la figure en au plus k lignes (pour k donné) pourrait être NP-complet ;
- Trouver la combinaison optimale pourraît NP-difficile (voire pas du tout dans NP).

Ce n'est pas garanti, mais c'est possible. Je vais voir si j'arrive à faire une réduction correcte.

Grosso modo, ça voudrait dire que vous ne pourriez pas trouver d'algorithme qui permettre de calculer quoi que ce soit au sujet de ce problème en un temps raisonnable (ie. polynomial en la surface de l'image).

La bonne nouvelle, c'est qu'on a peut-être des supers heuristiques toute cuites qui vont nous tomber dessus.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Dyn4moo Hors ligne Membre Points: 19 Défis: 0 Message

Citer : Posté le 18/12/2017 20:58 | #


Merci de te pencher sur ce problème,
Effectivement trouver une combi optimale relève presque de l'impossible, même manuellement ça me parait très très compliqué à vue d'oeil. En tout cas je te souhaite bon courage si tu tentes de percer le problème ^^. Si tu y arrives, je pense que tout programmeur Basic t'en sera éternellement reconnaissant (moi le premier)
Zezombye Hors ligne Rédacteur Points: 1756 Défis: 13 Message

Citer : Posté le 19/12/2017 08:11 | #


Bof, perso tu passerais moins de temps à faire le sprite manuellement qu'à attendre qu'on te sorte un algo D'ailleurs, ce sprite tu as bien dû le faire (sous paint ou autre), du coup ça te prendrait à peu près autant de temps de le faire avec le générateur de multi drawstat.

Tu pourrais à la limite stocker cet ennemi sur une picture, ça dépend si ton RPG est comme dans pokémon où il y a plein de sprites d'ennemis (dans ce cas non), ou si c'est juste l'un des 2-3 boss (dans ce cas oui). Il faut noter qu'il y a moyen de compresser l'espace non utilisé en bas des pictures, dans ton cas l'ennemi est sur la moitié haute donc tu peux réduire la taille (pour être plus précis, ça fait 0x10 octets/ligne, la dernière ligne occupée est la 35e -> 0x220 pour la taille).
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Dyn4moo Hors ligne Membre Points: 19 Défis: 0 Message

Citer : Posté le 19/12/2017 18:19 | #


Merci beaucoup pour ta réponse,
Le jeu comportera une petite dizaine d'ennemis donc on va devoir oublier pour les pictures. La meilleure alternative comme tu l'as souligné c'est de tout simplement dessiner le sprite directement sur Bide pour qu'il puisse le convertir en Multi DrawStat. Ca va être un peu long de redessiner tous les ennemis par contre :/

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 54 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd