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 - Projets de programmation


Index du Forum » Projets de programmation » Aventura, le Royaume Poudingue... Un long projet !
Drak Hors ligne Rédacteur Points: 1925 Défis: 40 Message

Aventura, le Royaume Poudingue... Un long projet !

Posté le 06/07/2016 23:44


Aventura, Le Royaume Poudingue est un RPG en Basic Casio (monochrome) entamé en 2016 et repris en 2018. Projet très ambitieux, ce dernier tend à s'emparer des meilleures techniques de Basic Casio pour offrir une expérience de jeu dépassant les attentes du joueur. Il aura fallu deux années complètes pour que la première version complète du jeu sorte enfin ! Ouf !


Le jeu est enfin disponible ! Cliquez ici !


Le projet en 2016
Cliquer pour enrouler
[...]
En réalité, je projette de concevoir un RPG en recommençant absolument tout de zéro. En errant sur ce forum, j'ai amassé une quantité satisfaisante de savoirs nouveaux en ce qui concerne le basic ! Toutes les techniques et les jeux que j'ai entraperçu ou étudié sur ce forum ont fait germer tout un tas de petites idées en moi !

Je vous expose le plan : l'idée n'est qu'à l'état embryonnaire, mais je compte la faire évoluer par débats et expositions d'idées. Pour l'histoire, le scénario, je n'ai pas de problème. J'ai l'imagination qu'il faut pour pondre des trucs farfelus. Ce dont j'ai besoin, c'est d'approfondir le système du jeu et tenter de construire un programme cohérent, très optimisé et performant. Procédons à tout cela par étape, je relèverai chacune de mes interrogations par la suite.

La map :
Résolu
Cliquer pour enrouler
C'est ce qui me fait me poser le plus de questions. Voici ce que j'ai décidé : sur une picture sera enregistrée une sidebar qui sera visible pareillement sur le mapmonde et en combat. J'ai pour ambition d'adopter un système de tiles pour générer les maps (qui seront statiques, comme le fameux Zelda PC de Remiweb, et pas de map scrolling). Pour commencer, je projette de concevoir un système de sauvegarde provisoire des maps. Voici un schéma pourri fait à l'arrache :

Lorsque le joueur est sur la map 1, le décor de cette map est enregistrée en picture 1 (par exemple). Arrivé sur la map 2, celle-ci est enregistrée en picture 2. Sur la map 3, elle est enregistrée en picture 3. Lorsque le joueur veut retourner sur la map 2, la picture 2 est directement affichée plutôt que de la redessiner. En passant sur la map 4, la map 1 sur la picture 1 est effacée pour laisser place à la map 4. Ainsi, le personnage peut se ballader entre les map 2, 3 et 4 sans temps de chargement !


Ensuite :
Résolu
Cliquer pour enrouler
je vais rencontrer de nombreuses problématiques concernant le dessin d'une map. Pour une map, je vais rentrer dans une matrice les ID de chaque case. Admettons que j'ai un programme "lecteur de matrice" qui dessine chaque case en fonction de l'ID. Il est évident que je vais essayer de dessiner d'une traite tous les tiles identiques avant de passer aux tiles suivants, plutôt que de faire :
For 1→A To 6
For 1→B To 11
Mat A[A;B]=1⇒{1,2,3→List 1
etc.
Next
Next
Drawstat

C'est-à-dire lire chaque case, une à une, même si elle est vide, pour dessiner une tile. après avoir entré dans la liste les coordonnées. Bref. C'est long, sale et un peu bulldozer.
Un génie de Naheulbeuk a écrit :
Baston !

J'avais prévu de faire entrer toutes les données chiffrées dans une chaîne (Str 1) plutôt que dans une matrice(qui est d'ailleurs lourde) pour pouvoir exploiter les fonctions StrSrch, StrMid, etc. Il est tout à fait possible de passer d'une chaîne à une expression numérique, donc ce point ne pose pas problème. Qu'en pensez-vous ? L'idée peut-elle être exploitée ou est-elle incohérente ?


Les tiles en eux-mêmes :
Résolu
Cliquer pour enrouler
Je cherche le bonne taille de tiles à prendre. J'avais pensé à utiliser des tiles de 10*10. Chacune de mes maps feraient alors 6*11 cases. Y a-t-il une taille préférable à 10*10 ? Qu'en pensez-vous ? Je ne sais quoi en penser. Je vais rencontrer un autre problème : le stockage de données. Avec les listes, je me demandais si une seule liste avec des coordonnées complexes est plus légère que deux listes pour les abscisses et ordonnées séparées. La différence est-elle notable ? Si oui, ça m'arrangerait bien pour ce que je pensais faire :
Il serait possible que j'exploite la technique Augment( pour dessiner tout d'une traite avec le Graph(X ; Y)=. Cette technique étant très gourmande en mémoire sur l'instant, je pourrais effectuer l'opération plusieurs fois. Mais ça serait assez confortable de pouvoir mettre :
Dim List 1→Tθmax
Graph(X;Y)=(ReP List 1[T];ImP List 1[T

J'aimerais votre avis là-dessus !


Le moteur de combat :
Alors là, j'ai pas mal réfléchi. Sur le modèle de fonctionnement Poule/Renard/Épervier, ou Feu/Eau/Plante dans Pokémon, j'ai l'intention de créer trois types d'attaque : Puissance , Dextérité et Vitesse.
Le personnage aura trois attaques pour chacun de ces types. Donc une animation différente pour chacun d'entre elle. Il maîtrisera en plus une capacité de soin, et peut-être une capacité secrète.
Il n'y aura pas de niveau à proprement dire : Selon les attaques qu'on emploie, la maîtrise dans la branche correspondante augmente et améliore les capacités du personnage : Force, Défense, Nombre de coups, précision, Esquive, etc.
Bon. Le souci, c'est que je vais devoir à dessiner des monstres et risque d'être limité sur ce point là.

Le personnage est en fait personnalisable. Au début du jeu, vous pourrez choisir une arme et une coiffe (lunettes de soleil, chapeau en pointe...) La machine génère alors sur plusieurs listes trois positions du personnage : une statique, une en tenant l'arme en l'air, une troisième en donnant le coup. Pour cela, je fais tourner l'arme, comme je l'ai évoqué dans ce topic. ce point précis est résolu. C'est grâce à ses trois dessins pré-enregistrés que je ferai les animations. Une question se pose : comment faire des animations pour les monstres potables et peu spacio-phages ?
Voici à quoi ils ressemblent !
(photos expirées)

Pour le menu :
Pas encore d'idée, si ce n'est un truc enregistré sur une autre picture qui sera beau graphiquement parlant. On y verra l'état du personnage et son niveau de maîtrise dans chaque branche.

Pour l'interaction avec des pnj :
Résolu
Cliquer pour enrouler
Je projette de concevoir un sous-programme "lecteur de texte", si je puis dire. Sur la map, le programme dessinera une boîte de dialogue dans laquelle s'écriront les paroles d personnage. Pour ce point, je compte beaucoup m'inspirer des travaux de Remiweb sur son Zelda PC. J'ai trouvé ce point absolument remarquable et incroyablement bien fait.


Voici la tronche du projet. J'aimerais vraiment avoir vos avis, savoir ce que vous en pensez, avoir de vos précieux conseils et surtout engager le débat pour progresser. Je vous remercie d'avance, et vous remercie aussi de m'avoir lu jusque là.


État des lieux du projet
modifié le 20 09 2018
À ce jour, voici ce qui est fait et ce qui reste à faire pour l'ensemble du programme de jeu.
Scénario
   100%

Moteur de combat
   100%

Graphismes (personnages, monstres, background, carte du monde, title screen...)
   100%

Moteur de dessin de map
   100%

Menus, caractéristiques
   100%

Moteur de dialogues etc.
   100%


Comme vous pouvez le voir, il reste beaucoup de travail.
Le plus difficile sera de faire tenir tout le jeu en ~ 60 000 octets. Seulement, je ne parle pas du programme seul : à présent, il ne fait que 6772 octets. Toutefois, les Pictures prennent déjà 11404 octets (avec y compris les 6072 octets des trois pictures du mon système de sauvegarde de map, et les list peuvent atteindre les 7000 octets. Actuellement, il me reste quelque chose comme 36 000 octets de libres pour faire TOUT LE RESTE.

Le jeu en quelques questions
modifié le 08 06 2018
Que sont les Poudingues ?

Les poudingues sont des petites créatures sans bras ni jambe, au corps semblable à un mélange entre une balle d'arme à feu et un pudding. Leur visage est expressif et ils déterminent généralement leur appartenance sociale par leur couvre-chef.

Quel est le but du jeu ?

Vous incarnez un de ces fameux Poudingues, vivant au sein d'un royaume dirigé par un monarque Poudingue. En tant qu'Explorateur, vous êtes convoqué par le roi lui-même pour vous confier une mission : localiser le repaire des poudingues anti-royalistes qui semblent préparer une révolte dans l'ombre...

Quel type de jeu ?

Aventura, le royaume poudingue est un RPG / jeu d'exploration. Vous devrez, pour une partie du jeu, explorer des terrains, trouver les pnj à qui parler pour faire avancer l'histoire, etc. Durant le jeu, vous devrez aussi affronter les monstres sauvages ou bien les opposants qui se dresseront sur votre chemin ! Au fil des luttes, vous affinerez votre style de combat, renforcerez vos spécialités et augmenterez votre niveau et vos caractéristiques.

Quelles caractéristiques et quel système de combat ?


Le système de combat est à priori un système au tour à tour, en un contre un de profil sur l'écran.

Un poudingue possède trois caractéristiques, avec un niveau de maîtrise pour chacune d'entre elle : Puissance, Technique, Vitesse. En fonction des attaques employées par le poudingue, ses niveaux de maîtrise correspondant augmentent. Lors d'une montée de niveau, chaque caractéristique augmente proportionnellement à son niveau de maîtrise. Utilisez beaucoup de fois l'attaque « Cogne » et votre puissance avancera davantage ! Votre type est ensuite déterminé par la valeur la plus élevée des trois caractéristiques : type Puissance, type Technique, type Vitesse, ou bien Neutre si vos caractéristiques sont équilibrées.

Ces trois types fonctionnent selon une règle similaire au jeu Pierre-Feuille-Ciseaux. Le type Puissance a l'avantage face au type Vitesse, le type Vitesse a l'ascendant sur le type Technique et le type Technique est plus efficace contre le type Puissance. Ce rapport de force se détermine dans le calcul des dégâts infligés, qui sont en pourcentage. Autrement dit, le joueur a 100% de vitalité et meurt s'il tombe à 0%. Le nombre maximal de vitalité ne change pas, il est de 100% pour tout le monde.

À priori, le niveau maximal atteignable serait de 100. Le système de calcul d'expérience n'est pas encore établi.

Les trois caractéristiques interviennent donc dans le calcul des dégâts en fonction du type de l'attaque. La caractéristique du lanceur correspondant au type de l'attaque et la caractéristique de la cible correspondant au type ayant l'ascendant sur celui de l'attaque sont pris en compte dans le calcul des dommages. Exemple : le joueur utilise une attaque Vitesse sur une cible de type Technique. La caractéristique Vitesse du joueur et la caractéristique Puissance de la cible seront pris en compte. Un facteur de dégâts accru s'appliquera sur les dommages totaux puisque le type Technique est faible face aux attaques Vitesse. Au final, si le lanceur a beaucoup de Vitesse et la cible peu de Puissance, l'attaque infligera de lourds dégâts.

Les niveaux de maîtrise augmentent aussi l'efficacité des attaques suivantes : Cogne, Estoc, Rafale. À partir de certains seuil, les niveaux de maîtrise donnent de nouveaux effets / bonus à ces attaques. Il peut donc sembler intéressant de se spécialiser dans un type pour améliorer ses attaques.

Les sorts, quant à eux, n'augmentent pas les niveaux de maîtrise lors de leur utilisation. Si un sort peut s'avérer plus efficace qu'une attaque classique, il ne permettra pas à son utilisateur de bien progresser sur le long terme.

Un aperçu du moteur de combat, le 09 07 2018 (V - 0.21)

Un aperçu du moteur de dialogue, le 21 07 2018 (V - 0.22)

L'Éditeur de mappemonde, 08/2018.
Un autre aperçu du moteur de combat, le 08 08 2018 (V - 0.24)

Phase 1 : Écriture. Cette étape consiste à coucher sur le papier ce que je projette de faire, le gameplay et les composants du jeu, dans un idéal. Je ne m'occupe pas tant de savoir si ça tiendra dans le code, ni de savoir si j'aurais le temps et/ou la motivation d'en faire autant. J'essaye d'en écrire le plus possible, dont le scénario avec le plus de détails possible, les personnages, etc.

Phase 2 : Architecture générale. Il s'agit de hiérarchiser les sous-programmes, menus, et les chemins qui s'opèrent entre chaque. Dans cette partie, on ne s'occupe pas du code dans les détails, mais plutôt de « blocs » en tant qu'ensembles de fonctions. Par exemple, j'aurai un bloc « Title screen », un bloc « dessin map », un bloc « dialogue », etc. Il s'agira de définir avec une certaine précision les blocs qui interviendront pour le fonctionnement du jeu, d'estimer si possible leur taille et de les positionner les uns par rapport aux autres, les cheminements de sous-programmes à sous-programmes – sachant qu'on ne peut pas avoir plus de 10 sous-programmes qui tournent à la fois.

Phase 3 : Code. Écriture du code à l'intérieur de chaque bloc, avec seulement quelques données à titre d'exemple. Il ne s'agira pas de faire du bô graphisme ou bien pleins de sprites et de pictures différentes. L'objectif ici est de fabriquer rapidement quelques éléments de dialogue et de graphisme pour pouvoir écrire tout le code qui fera fonctionner le jeu et qui agira comme un squelette. De beaux graphismes sont inutiles si le code sous-jacent n'est pas fonctionnel. J'ai eu tort de commencer à faire des maps et des pictures, mais elles sont là et je ne vais pas les gâcher.
Il me faudra alors écrire de façon individuelle et séparée chaque « bloc » ou « fonction » pour m'assurer que leur fonctionnement propre est opérationnel. C'est aussi l'occasion de revoir certaines ambitions à la baisse si elles demandent trop de place dans le code. Cette partie ne constitue pas l'intégralité de l'écriture du code, loin de là. La phase 4 y occupera une place importante aussi.

Phase 4 : Mise en relation et assemblage des blocs. Cette partie sera délicate, mais aura été largement anticipée avec la phase 2. Il s'agit non plus de faire fonctionner des pièces détachées, mais de les assembler et de penser avec ingéniosité leur articulation pour que le jeu devienne une seule entité. Cette phase comprendra vraisemblablement des modifications à l'intérieur même de chaque bloc pour d'éventuelles optimisations. Il y aura naturellement de nombreux tests et essais quant au bon fonctionnement de l'ensemble de la structure.

Phase 5 : Travail de « remplissage ». Si le squelette du jeu est tout à fait opérationnel et ne présente pas de bug, on passe à cette phase qui consiste à remplir le jeu de son contenu : les graphismes, les maps, les dialogues. C'est donc à ce moment que je m’attellerai activement à la conception des graphismes du jeu et à ses dialogues. Cette phase porte bien son nom puisqu'elle devra également être modulée en fonction de la place restante en mémoire dans la calculatrice.

Phase 6 : Optimisations, essais et tests du jeu intensifs. Cette phase vise à repérer les éventuels défauts dans le code du jeu, mais aussi dans le gameplay. C'est une phase très importante car elle vise à rendre le jeu jouable, appréciable et source de plaisir (oh yeah baby), mais aussi cohérent dans son ensemble. Elle contiendra donc beaucoup de recorrections et peut-être même de frustration chez le concepteur (moi) qui constatera que son jeu est tout pourri.

Phase 7 : Publication. Une fois que les corrections, tests, optimisations et finitions sont finis, il ne me reste plus qu'à publier une version 1.0 (ou Bêta) du jeu et attendre des retours de la communauté, qui sera sans doute enthousiaste de voir un jeu sortir après plus de deux années d'attente, lôl. En fonctions des retours, des finitions et des ajouts auront peut-être lieu pour donner suite à une version 1.1, 1.2, etc. L'objectif sera donc de corriger les éventuels bugs qui seraient passés inaperçus, et prendre en compte des suggestions pour améliorer l'expérience de jeu.

Phase 8 : Supplication. Demander à ce que le jeu jouisse du label de qualité Casio. C'est mon rêve. Je le veux. Au moins une fois dans ma vie !

Les suggestions de sorts par les membres de la communauté :
Lephenixnoir : « Pistole, Assaut, Regard perçant, Empalement, Illusion, Barrage, Retour de l'Hirondelle, Contournement, Vorpal, Survol, Coup ascendant, Berserk, Flèche ? »

Shadow15510 : « Boule de Feu (T) ». Woaw. Incroyable.


Membres ayant manifesté leur volonté d'apparaître dans le jeu :
Lightmare
Shadow15510
Cakeisalie5
Massena
Totoyo
Lephenixnoir
Math680

Git du projet : Soyez au plus près du code et des avancées des versions !
https://gitea.planet-casio.com/PlaneteCasio/Le_Royaume_Poudingue

Phase actuelle : Phase 7
   16%



Mis à jour le : 31/10/2018

Fichier joint


Précédente 1, 2, 3, 4, 5, 6, 7 ··· 10 ··· 16, 17, 18 Suivante
Drak Hors ligne Rédacteur Points: 1925 Défis: 40 Message

Citer : Posté le 17/07/2016 16:53 | #


Zezombye a écrit :
est ce que pour StrCmp 0x7F45 < 0xE1 < 0xF753 ?

Oui, comme les chaînes commencent par 0x, elle compare le 3 ème caractère. On a 7<E<F.

Je vais faire des tests pour tout cela. Mais je n'aime pas beaucoup la variable Ans.

Ajouté le 17/07/2016 à 17:04 :
@Lephé : Bon, visiblement...
While StrSrc(Str 2,"►")
StrLeft(...)+StrLeft(...)+StrMid(...)→Str 2
WhileEnd

Ne fonctionne pas...
Eon the Dragon : version 1.2
Let's have a look!
Marre de ces RPGs qui t'imposent des classes, des compétences et des sorts ? Crée tes propres capacités sur Eon the Dragon ! Des monstres, des dragons et des combats aussi épiques que difficiles t'attendent !
Un RPG unique et immense t'attend ! Joue dès maintenant à Aventura, le Royaume Poudingue !
Vous aussi, soyez swag et rejoignez Planète Casio !
Lephenixnoir En ligne Administrateur Points: 24145 Défis: 170 Message

Citer : Posté le 17/07/2016 17:06 | #


Dommage. J'ai pas assez d'expérience pour me livrer à ce genre d'optimisations.

Tu n'as pas compris ce que disait Zezombye, Drak. Il n'est pas question de comparer "0x7f45", "0xe1" et "0xf753" mais trois chaînes dont les premiers octets respectifs sont [0x7f,0x45], [0xe1] et [0xf7,0x53]. C'est vrai pour un strcmp() natif mais je ne sais pas comment réagit l'interpréteur Basic.

Ajouté le 17/07/2016 à 17:17 :
Une chaîne de caractères, en Basic comme en natif, c'est une suite d'octets. « 0 » c'est l'octet 0x30, « A » c'est 0x41 et la plupart des opcodes font deux octets. Ainsi « If » c'est 0xf700, sous-entendu 0xf7 suivi de 0x00.

La comparaison de chaînes de caractères se contente toujours d'observer les premiers octets et s'arrête dès qu'elle en trouve deux différents. Il s'agit ici de comparer trois chaînes qui commencent par :
- str1 = [ 0x7f, 0x45, ... ]
- str2 = [ 0xe1, ... ]
- str3 = [ 0xf7, 0x53 ... ]

En natif, strcmp() comparerait les trois premiers octets et conclurait « str1 < str2 < str3 ». On a s1 < s2 si le premier caractère différent entre s1 et s2 a une plus petite valeur dans s1 qu'il n'en a dans s2 (rien à voir avec la longueur donc).

La question est donc : lorsque les opcodes font plusieurs octets, est-ce que StrCmp() compare les opcodes deux à deux (ainsi str1 > str2) ou les octets deux à deux (ainsi str2 > str1) ?
Et la réponse est : StrCmp() se comporte comme le natif, il compare les octets.
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Drak Hors ligne Rédacteur Points: 1925 Défis: 40 Message

Citer : Posté le 17/07/2016 17:24 | #


Je te remercie de m'avoir donné ce lien utile sur la shout ! En tous les cas, je posterai un message si jamais je trouve une optimisation de mon "décompresseur" ! Merci beaucoup !
Eon the Dragon : version 1.2
Let's have a look!
Marre de ces RPGs qui t'imposent des classes, des compétences et des sorts ? Crée tes propres capacités sur Eon the Dragon ! Des monstres, des dragons et des combats aussi épiques que difficiles t'attendent !
Un RPG unique et immense t'attend ! Joue dès maintenant à Aventura, le Royaume Poudingue !
Vous aussi, soyez swag et rejoignez Planète Casio !
Dark storm Hors ligne Labélisateur Points: 11631 Défis: 176 Message

Citer : Posté le 17/07/2016 23:30 | #


Au passage, tu peux améliorer le taux de compression en comprenant d'autres caractères si ils sont plus de 3 à la suite. Je pense aux routes par exemple.
Tu trouve un autre symbole, tu le fais suivre par un caractère qui représente ton tile, suivi du nombre d'occurences. Et à la compression tu ne compresse que si ça te fait gagner en place
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir En ligne Administrateur Points: 24145 Défis: 170 Message

Citer : Posté le 18/07/2016 08:11 | #


Pour éviter d'utiliser trop de symboles, tu peux encoder partiellement en RLE si jamais d'autre tiles se répètent souvent. Je pense que c'est assez explicite :
[gray]00000[/gray]200202[gray]0000[/gray]FFF000[gray]22220000FFFFFF[/gray]000200
[gray]0×5[/gray]200202[gray]0×4[/gray]FFF000[gray]2×40×4F×6[/gray]000200


Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Drak Hors ligne Rédacteur Points: 1925 Défis: 40 Message

Citer : Posté le 18/07/2016 09:26 | #


J'y ai tout aussi bien pensé, mais je me suis dit que ça rendrait la décompression plus longue et que ce n'était peut-être pas aussi rentable, car dans certaines map j'ai des suites de 33 zéros, alors bon, autant dire que les 0 c'était hyper rentable. Si vous regardez mon code, j'utilise :
StrLeft("00000...00",StrSrc(Str 3,StrMid(Str 2,A+1,1)))

Donc je ne vais pas m'amuser à réécrire un "FFFFF..FF" ou "88888...888" pour chaque caractères à dupliquer, ça serait, je pense, pas évident à faire et pas très rentable, (je le répète).

Sinon, les résultats : sur les quelques maps que j'avais déjà hardcodées (je ne sais plus combien j'en ai), mon sous-programme qui les contenait pesait près de 2000 octets. après compression des chaînes (et ajout de mon code de décompression), il ne pesait plus que 1324 octets ! Soit 33%, un tiers de son poids qui a été retiré !


Autrement, vous aviez effectivement raison (je ne sais plus qui a fait la remarque, je crois que c'est lephé) : le caractère "►" prends 2 octets, je l'ai donc remplacé par "→" qui n'en prend qu'un et qui a sa propre touche sur la calto ; pratique.
Eon the Dragon : version 1.2
Let's have a look!
Marre de ces RPGs qui t'imposent des classes, des compétences et des sorts ? Crée tes propres capacités sur Eon the Dragon ! Des monstres, des dragons et des combats aussi épiques que difficiles t'attendent !
Un RPG unique et immense t'attend ! Joue dès maintenant à Aventura, le Royaume Poudingue !
Vous aussi, soyez swag et rejoignez Planète Casio !
Lephenixnoir En ligne Administrateur Points: 24145 Défis: 170 Message

Citer : Posté le 18/07/2016 09:34 | #


Hmm, t'as raison pour la rentabilité (enfin, même si on ne pensait pas à tester pour tous les caractères ). 33%, bien joué. C'est un bon niveau de compression
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Drak Hors ligne Rédacteur Points: 1925 Défis: 40 Message

Citer : Posté le 18/07/2016 09:44 | #


Eh bien je suis foutrement fier de ma compression !
Par ailleurs, je vais pas tarder à mettre des images des pnj sur ce topic.

Eon the Dragon : version 1.2
Let's have a look!
Marre de ces RPGs qui t'imposent des classes, des compétences et des sorts ? Crée tes propres capacités sur Eon the Dragon ! Des monstres, des dragons et des combats aussi épiques que difficiles t'attendent !
Un RPG unique et immense t'attend ! Joue dès maintenant à Aventura, le Royaume Poudingue !
Vous aussi, soyez swag et rejoignez Planète Casio !
Zezombye Hors ligne Rédacteur Points: 1756 Défis: 13 Message

Citer : Posté le 19/07/2016 06:40 | #


Aussi tu pourrais potentiellement économiser une variable, si tu remplaces ça :

Do
StrSrc(Str 2,"►")→A //Str 2 contient la chaîne codant la map, compressée.
A⇒StrLeft(Str 2,A-1)+StrLeft("00000000000",StrSrc(Str 3,StrMid(Str 2,A+1,1)))+StrMid(Str 2,A+2)→Str 2
LpWhile A


par

Do
StrSrc(Str 2,"►")⇒StrLeft(Str 2,Ans-1)+StrLeft("00000000000",StrSrc(Str 3,StrMid(Str 2,Ans+1,1)))+StrMid(Str 2,Ans+2)→Str 2
LpWhile Ans


Je sais pas si ça marche par contre.
Aussi au lieu de passer par le Str 3 tu pourrais utiliser Exp->Str() pour interpréter les chiffres (par contre tu pourras pas utiliser A-Z :/)
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Drak Hors ligne Rédacteur Points: 1925 Défis: 40 Message

Citer : Posté le 19/07/2016 11:37 | #


ZZ : les chiffres me limiteraient à des suites de 9 zéros, or j'ai des suites qui vont jusqu'à 33 zéros. La question est vite réglée. En plus j'y ai déjà pensé

De plus, je pense que :
StrSrc(Str 2,"►")⇒

Donne soit la valeur 1 soit la valeur 0, car c'est une condition. Donc l'emploi du "Ans" juste après sera, je pense, source de bugs. Les piles de ma calto étant plates (je sais pas ce qu'il s"est passé ...), je ne peux pas appuyer mes dires sur une vérification empirique !
Eon the Dragon : version 1.2
Let's have a look!
Marre de ces RPGs qui t'imposent des classes, des compétences et des sorts ? Crée tes propres capacités sur Eon the Dragon ! Des monstres, des dragons et des combats aussi épiques que difficiles t'attendent !
Un RPG unique et immense t'attend ! Joue dès maintenant à Aventura, le Royaume Poudingue !
Vous aussi, soyez swag et rejoignez Planète Casio !
Lephenixnoir En ligne Administrateur Points: 24145 Défis: 170 Message

Citer : Posté le 19/07/2016 11:40 | #


C'est inexact Drak, mais ça ne fonctionnera pas pour autant. La valeur de Ans n'est pas mise à jour par l'évaluation de la condition.
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Drak Hors ligne Rédacteur Points: 1925 Défis: 40 Message

Citer : Posté le 19/07/2016 11:44 | # | Fichier joint


Ah oui ? Très bien, c'est bon à savoir, alors ! merci bien !
Au fait, j'en profite pour vous mettre un screen de mon nouveau tile set !


Et voici le fond utilisé pour les salles de donjon/château !

(image morte lol)


Par la même occasion vous avez la tronche des pnj !
Eon the Dragon : version 1.2
Let's have a look!
Marre de ces RPGs qui t'imposent des classes, des compétences et des sorts ? Crée tes propres capacités sur Eon the Dragon ! Des monstres, des dragons et des combats aussi épiques que difficiles t'attendent !
Un RPG unique et immense t'attend ! Joue dès maintenant à Aventura, le Royaume Poudingue !
Vous aussi, soyez swag et rejoignez Planète Casio !
Zezombye Hors ligne Rédacteur Points: 1756 Défis: 13 Message

Citer : Posté le 19/07/2016 14:28 | #


Je pense que le remplacement avec Ans échoue car tu fais des calculs dans les paramètres de fonction (et encore heureux, ça montre un comportement consistant )

Je vais décomposer le processus :

Do
StrSrc(Str 2,"►")⇒
StrLeft(
    Str 2, //la valeur serait mise dans Str Ans, je sais pas si ça existe
    Ans-1 //il envoie la valeur Ans-1 et il met le résultat de Ans-1 dans Ans
)+StrLeft(
    "00000000000",StrSrc(Str 3,StrMid(Str 2,Ans+1,1)))+StrMid(Str 2,Ans+2)→Str 2
LpWhile Ans


Une solution serait donc de faire :
Do
StrSrc(Str 2,"►")⇒StrLeft(Str 2,Ans-1)+StrLeft("00000000000",StrSrc(Str 3,StrMid(Str 2,Ans+2,1)))+StrMid(Str 2,Ans+1)→Str 2
LpWhile Ans


Par contre c'est pure spéculation, je ne sais même pas si c'est vrai car j'ai testé le code suivant sur l'émulateur:

7
Locate 1, Ans-1, "TEST"
Locate 1, 1, Ans //7 au lieu de 6


Peut être que le comportement est consistant dans l'OS 2, ou que c'est vrai pour les fonctions Str mais pas pour le Locate (vive la consistance), ou que c'est pas vrai pour les arguments de fonctions et que ça fail pour une autre raison (laquelle ?)
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Lephenixnoir En ligne Administrateur Points: 24145 Défis: 170 Message

Citer : Posté le 19/07/2016 14:48 | #


Quoiqu'il en soit pour les paramètres, j'ai fait le test suivant :
-2
StrSrc("ABC","B")⇒Locate 1,1,Ans

Et ça affiche -2. Quoi qu'il se passe avec les paramètres la valeur de Ans n'est pas mise à jour par la condition donc tu ne peux pas échapper à la variable.
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Drak Hors ligne Rédacteur Points: 1925 Défis: 40 Message

Citer : Posté le 23/07/2016 00:06 | #


Bien, il est temps de commencer à traiter les pnj.

Pour cela j'ai le temps, mais je préfère m'y prendre à l'avance ! Dans la liste, nous avons, de gauche à droite :

Le Roi Poudingue, réservé aux plus dignes
Des pirates du désert, des bandits au bandana et autres
Deux voire trois grands sages, guides du héros, là aussi pour les plus dignes
Des poudingues classiques, un peu partout
Des gardes royaux poudingues, chargés de protéger sa majesté, et des soldats poudingues.

Une place vous intéresse ? N'hésitez pas à vous manifester ! 8)


Eon the Dragon : version 1.2
Let's have a look!
Marre de ces RPGs qui t'imposent des classes, des compétences et des sorts ? Crée tes propres capacités sur Eon the Dragon ! Des monstres, des dragons et des combats aussi épiques que difficiles t'attendent !
Un RPG unique et immense t'attend ! Joue dès maintenant à Aventura, le Royaume Poudingue !
Vous aussi, soyez swag et rejoignez Planète Casio !
Lephenixnoir En ligne Administrateur Points: 24145 Défis: 170 Message

Citer : Posté le 23/07/2016 08:37 | #


Y a-t-il une raison pour que le roi soit plus large ? Je trouve ça dommage. Jolie barbe sinon !

Quelques enfants ?
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Drak Hors ligne Rédacteur Points: 1925 Défis: 40 Message

Citer : Posté le 23/07/2016 11:25 | #


Oui, il y a plusieurs raisons : A l'instar du Goomboss ou du roi Bom-bomb dans Mario 64, par exemple, il est implicitement écrit quelque part dans l'univers que le roi, c'est toujours le BIG ONE.
Ensuite, La deuxième raison est que je n'avais pas assez de place pour faire une couronne qui... Ressemble à une couronne. Bref, je l'ai fait plus large. Il n'est pas obèse, c'est juste le king, quoi.

Lephenixnoir a écrit :
Quelques enfants ?

Des enfants ?! Des ENFANTS ?! Ah non, ça alors ! Des enfants !
En fait je n'y avais pas pensé Mais je dirais que des enfants n'ont pas forcément grand chose d'utile à raconter. Et le texte, ça prend de la place. Je suis aussi limité à ce niveau, sachant que j'ai encore un moteur de combat, une carte, des monstres, des caractéristiques, des menus à pondre après tout ça, j'ai calculé que le moteur et les monstres ne devraient pas beaucoup dépasser le 10 000 octets. Je vais déjà faire avec ces pnj-là, et puis, s'il me reste de la place à la fin... Voilà, quoi !



Ajouté le 30/07/2016 à 00:01 :
Bon. Il est minuit, vous vous dites surement que je n'ai que ça à foutre de poster à cette heure-ci alors que tout le monde est en vacance, mais je m'en fiche. Moi, je ne pars pas cette année !

Enfin, maintenant j'attaque le moteur de combat, mais je rencontre déjà des problème avant même d'avoir commencé le moteur en soi. Les caractéristiques.
Dans mon topic j'ai évoqué trois types différents : Puissance, Dextérité, Vitesse.
En fait, les caractéristiques seront basées sur des niveaux de maitrise. En effet, en fonction des attaques utilisées par le joueur, les taux de maîtrise changent. Ainsi, si le joueur utilise beaucoup d'attaques puissantes, son niveau de maitrise Puissance sera plus élevé au détriment de la dextérité et de la vitesse.
Seulement voilà : j'aimerais que les caractéristiques du héros découlent de ces niveaux de maîtrise. Mais je ne sais pas quoi créer comme carac'. J'aimerais ne pas en faire trop non plus pour ne pas compliquer, mais je manque d'idées.

On pourrait avoir les classiques PV, l'esquive et la précision, mais ce n'est sans doute pas assez... Si vous avez des idées à me soumettre, je suis preneur. Genre des caractéristiques qui dépendraient des trois catégories que j'ai cité.
Eon the Dragon : version 1.2
Let's have a look!
Marre de ces RPGs qui t'imposent des classes, des compétences et des sorts ? Crée tes propres capacités sur Eon the Dragon ! Des monstres, des dragons et des combats aussi épiques que difficiles t'attendent !
Un RPG unique et immense t'attend ! Joue dès maintenant à Aventura, le Royaume Poudingue !
Vous aussi, soyez swag et rejoignez Planète Casio !
Suruq game Hors ligne Membre de CreativeCalc Points: 621 Défis: 20 Message

Citer : Posté le 31/07/2016 16:39 | #


Je me propose pour le rôle de roi pudding

There is only one thing that makes a dream impossible to achieve : the fear of failure
Drak Hors ligne Rédacteur Points: 1925 Défis: 40 Message

Citer : Posté le 31/07/2016 18:02 | #


Suruq Game a écrit :
Je me propose pour le rôle de roi pudding

C'est un rôle réservé, je dirais Par "pour les plus dignes", j'entends "ceux qui ont bien participé au débat sur ce topic", mais tu peux intégrer la garde royale et être le premier pnj que le joueur rencontre, si tu veux !
Eon the Dragon : version 1.2
Let's have a look!
Marre de ces RPGs qui t'imposent des classes, des compétences et des sorts ? Crée tes propres capacités sur Eon the Dragon ! Des monstres, des dragons et des combats aussi épiques que difficiles t'attendent !
Un RPG unique et immense t'attend ! Joue dès maintenant à Aventura, le Royaume Poudingue !
Vous aussi, soyez swag et rejoignez Planète Casio !
Suruq game Hors ligne Membre de CreativeCalc Points: 621 Défis: 20 Message

Citer : Posté le 31/07/2016 18:50 | #


Mais euh.... je t'ai aidé !
Et je veux bien t'aider sur ce que tu veut

Ps: je ne t'avais pas aider car j'étais en vacance sans co internet
There is only one thing that makes a dream impossible to achieve : the fear of failure
Drak Hors ligne Rédacteur Points: 1925 Défis: 40 Message

Citer : Posté le 31/07/2016 19:46 | #


Il est tout à fait vrai que j'ai décidé d'utiliser ta technique avec les coordonnées du type 4.04 au lieu de 4+4i, par exemple. Mais, le roi poudingue, je me demande si je vais vraiment l'attribuer. Je pensais juste mettre "Roi poudingue", mais j'y réfléchirai.

Tu veux m'aider ? Alors donne-moi des idées de monstres et de capacités utilisables en combat dont les animations ne prendraient que peu d'octets à faire !

Eon the Dragon : version 1.2
Let's have a look!
Marre de ces RPGs qui t'imposent des classes, des compétences et des sorts ? Crée tes propres capacités sur Eon the Dragon ! Des monstres, des dragons et des combats aussi épiques que difficiles t'attendent !
Un RPG unique et immense t'attend ! Joue dès maintenant à Aventura, le Royaume Poudingue !
Vous aussi, soyez swag et rejoignez Planète Casio !
Précédente 1, 2, 3, 4, 5, 6, 7 ··· 10 ··· 16, 17, 18 Suivante

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 96 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