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 » TLT : RPG magique (et un moteur de jeu/rendu expérimental, Azur)
Lephenixnoir Hors ligne Administrateur Points: 25437 Défis: 174 Message

TLT : RPG magique (et un moteur de jeu/rendu expérimental, Azur)

Posté le 29/06/2021 19:06

Ça fait (très) longtemps que je veux faire un bon RPG temps-réel avec un accent sur la notion de magie, et l'univers (que je développe au papier et dans ma tête par petits bouts depuis quelques années) a donné le nom «TLT» ; c'est juste un acronyme, mais c'est presque devenu coutumier de ne pas donner le nom complet, alors je m'y tiens pour l'instant.

Synopsis

Le cœur du concept c'est la notion de magie de l'univers. Toute l'histoire se passe dans un monde où la magie est un élément naturel et dont l'existence est bien connue, mais qui est très niche parce qu'on n'en connaît pas les principes et que peu de gens arrivent à s'en servir pour faire peu de choses. Vous pouvez imaginer une époque type Renaissance, pas encore d'industrie à proprement parler, mais plus raffinée et intellectuellement développée que du médiéval.

Lorsque des éléments systématiques sur le fonctionnement de la magie sont découverts, élargissant à la fois ses applications et son public, la société se reforme autour de cette science et technologie, et soudain tous les enjeux se mettent à tourner autour : le génie civil, l'armement, les relations politiques et internationales ; mais aussi la gestion de l'énergie, l'automatisation, et l'industrie, qui se créent du fait des nouveaux moyens disponibles.

TLT raconte le début de cette histoire, de la période où la magie est découverte jusqu'aux premiers conflits internationaux majeurs. Parce que sans surprise, c'est l'armement qui profite de la nouvelle technologie en premier, qu'on l'ait voulu ou non.

Théorie magique

La pièce de voûte de tout l'univers donc c'est cette magie. Le but ici c'est bien d'avoir un système de magie «dur», où le pourquoi du comment de chaque usage de la magie est expliqué. Pour résumer la vidéo en une phrase, moins on explique un système de magie (eg. le seigneur des anneaux) moins il est légitime/raisonnable de faire reposer des enjeux importants dessus, sinon on trahit les attentes et connaissances des spectateurs/joueurs. Et donc là je compte bien tout expliquer.

Pour vous donner une idée des grands principes, la magie c'est similaire au calcul mental. Tous les êtres conscients peuvent l'utiliser modulo explications et entraînement. Tout comme on peut retenir et combiner des nombres mentalement quand on fait du calcul, on peut conserver et combiner de l'énergie quand on fait de la magie. Et tout comme on peut écrire, dire, ou mettre en œuvre de diverses façons les résultats des calculs dans le monde physique, on peut aussi manifester l'énergie manipulée de différentes façon dans le monde physique.

J'agite les mains pour expliquer où exactement est l'énergie quand on «calcule» et comment la conversion avec les énergies du monde physique se font (si quelqu'un connaît un modèle compatible avec la physique moderne je prends). Mais une fois que cette partie est admise on peut rentrer dans le cœur du sujet.

Dans ce monde qui vient de découvrir la magie, l'enjeu majeur consiste à la systématiser (rendre son comportement reproductible avec le plus de fidélité possible) puis à la passer à l'échelle (construire des systèmes magiques de plus en plus complexes). Comme c'est un humain qui «calcule» chaque sort, il y a besoin de techniques pour rendre le procédé aussi simple que possible ; simplification des règles de «calcul», représentations visuelles, etc.

La version actuelle de la théorie (la plus prometteuse pour l'instant) consiste en une seule primitive de «calcul» qui déplace de l'énergie selon une règle aussi simple que possible. La primitive s'appelle un limiteur asymétrique (le nom est compliqué à cause de la longue lignée d'objets l'ayant précédé) et ressemble à ça.


L'énergie attend dans les entrées en haut. Lorsque c>0, le limiteur peut être activé, auquel cas l'énergie traverse du haut vers le bas. La valeur c est le «contrôle» du limiteur, il indique quelle quantité d'énergie est autorisée à traverser. L'entrée est i₁+i₂, et du coup la sortie c'est min(c, i₁+i₂). Toute l'énergie qui n'est pas autorisée à traverser est rejetée sur le côté. L'énergie du contrôle ressort telle quelle, d'où le trait direct qui traverse sur le dessin.

C'est pas hyper simple, mais quand on sait qu'avec juste une combinaison de ces limiteurs on peut construire une partie de l'arithmétique, de la logique booléenne, du stockage/des mémoires, des horloges et des systèmes synchrones, sans même supposer que les limiteurs sont activés en même temps ou à intervalles réguliers, je dirai que c'est pas mal.

J'ai pas mal de résultats très prometteurs sur cette théorie, mais comme je ne me fais pas confiance pour prouver des sorts complexes au papier je prépare un simulateur pour valider mes résultats !

Gameplay

Le gameplay doit servir l'histoire et l'expérience du protagoniste, qui ne sont pas entièrement définis, donc les mécaniques sont vraiment pas fixées ; mais voilà des idées.

Magie. Le but majeur du jeu (et le point le plus dur) c'est d'intégrer une notion de magie toute théorisée dans un RPG. Je voudrais que le joueur puisse découvrir et apprendre à utiliser le système de magie en même temps que le protagoniste, et concevoir des sorts au cours du jeu.

Bien sûr il n'est pas question de faire assembler des limiteurs asymétriques (ce serait horrible ), mais de présenter une version plus haut niveau de la chose. Un peu comme si je présentais Scratch au joueur après avoir inventé le transistor, si vous voulez.

Cette partie se clarifiera sans doute quand j'aurai atteint des aspects vraiment haut niveau du système de magie ; pour l'instant j'ai surtout travaillé sur le partie abstraite («calcul») et pas encore sur les interactions avec le monde physique, donc ça reste indéterminé. Mais il y a plusieurs options permettant au joueur de s'investir au niveau qui lui convient, donc je suis assez confiant que ce sera intéressant à jouer.

Combat. L'histoire impose pas mal de combat, et ça colle pas mal au style du Action-RPG aussi, donc ce sera probablement la mécanique principale pour accompagner la magie. J'aimerais être économe en mécaniques pour ne pas m'éparpiller, donc je pense que les statistiques et techniques de combat seront limitées aux équipements portés et à un arbre de compétences, sans système de niveau/XP (les points de compétences étant distribués au cours du scénario).

Initialement je voulais faire reposer l'intégralité du système de combat sur la magie, mais il est trop compliqué de formaliser de façon convaincante dans un sort (qui n'est qu'un diagramme) toutes les directions physiques («vers l'arrière»), ou les formes (sphère, cylindre), ou les timings. Du coup, je m'appuie à la place sur les entrées du joueur ou les compétences de combat physique (une liste fixe) pour exprimer ces notions, ce qui me donne un mélange de combat physique et de magie.

Environnement. J'aimerais pouvoir utiliser la magie pour autre chose que le combat, parce que l'univers s'en sert aussi dans plein d'autres situations (rien que le génie civil par exemple), mais je ne sais pas si j'arriverai à trouver des tâches/actions raisonnables pour réaliser ça.

Scénario. Le jeu sera probablement assez linéaire pour coller à l'histoire (genre Half-Life premier du nom), ce qui me permet aussi de définir assez peu de lieux et de me concentrer sur les mécaniques.

Aspects techniques et plan

Récemment j'ai infiltré KikooDX et Masséna (ils disent qu'ils m'ont «pris en stage» mais j'aurai le dernier mot !) pour avoir tous les protips de développement de jeux vidéos, vu que mon domaine c'est plutôt le genre gint et que les méthodes sont vraiment pas les mêmes. x)

J'ai vraiment pas les réflexes qu'il faut pour aller vite mais je m'accroche, vous verrez apparaître rapidement un petit jeu de combat marrant (co-op avec Masséna) si j'arrive à me concentrer dessus.

Ce que j'ai concrètement, en ignorant les idées :
  • Des documents décrivant la théorie des limiteurs asymétriques ;
  • Des notes sur l'univers avec en particulier un chapitre de narration qui raconte la fin de TLT (qui est plus le début de l'histoire principale de l'univers) ;
  • Un moteur de rendu (... dans le futur, de jeu, mais pour l'instant de rendu) qui supporte SDL sur PC, SDL/emscripten dans le navigateur, et gint sur Graph 90+E avec des méthodes pétées. Des détails arriveront plus tard.
  • Et le début d'un simulateur pour valider les résultats théoriques.

Programmer les grandes lignes du jeu (map, combat, physique, etc) n'est pas particulièrement difficile, mais comme les détails de la magie auront beaucoup d'influence dessus je me précipite pas.

Voilà voilà, maintenant que j'ai un topic je posterai des update sur tout ce qui tourne autour de ce jeu, vu que j'ai toujours un pied dans un des aspects.

@RDP avant que j'oublie.

Fichier joint




Waity5 Invité

Citer : Posté le 19/10/2025 18:51 | #


That list is very nice (the performance benchmarks especially), but it isn't as complete as I'd hoped. It only has locations of memory, not the locations of other things that can be accessed by memory read/write (e.g. the a44b0000 to a44b000a keyboard buffer thing). I've heard the display written to with memory writes, but I have no idea how to do it

Is there a list for things like that?
Lephenixnoir Hors ligne Administrateur Points: 25437 Défis: 174 Message

Citer : Posté le 19/10/2025 20:57 | #


Yatis has them: https://bible.planet-casio.com/yatis/docs/sh7305/registers/

But like why do you want to access modules directly? Note that if gint has a driver for some module, you have to use the driver, or it will interfere.
Mon graphe (27 Juin): (MQ || Rogue Life) ; serial gint ; passe gint 3 ; Azur ; ...) || (shoutbox v5 ; v5)


Waity5 Invité

Citer : Posté le 19/10/2025 22:10 | #


Thanks!

Currently my code dims the contents of the VRAM, then does the main rendering, then calls dupdate() to copy VRAM to the screen. I was thinking I could save on RAM reads by merging the dimming and copying into one step. So it would read 2 pixels, send them off to the display, then update the VRAM with their dimmed versions

I read through display.h and display-cg.h, but I didn't see anything that would let me do that
Lephenixnoir Hors ligne Administrateur Points: 25437 Défis: 174 Message

Citer : Posté le 19/10/2025 22:16 | #


Ah, I see. You'd have to look near drivers/r61524. But with standard VRAM rendering the update is performed by DMA, so you can't mix it up with CPU operations. If you do the sending with CPU, it tends to be slow (24 ms instead of 11 ms, IIRC, though I may not have tested the most optimized approaches). If you're interested in trying, do what r61524_update() does in the CPU variant and try to merge it with the dimming. Usually reading is fast though, so I'm not sure that'll make a significant difference (?).

(Ironically, you can mix code with the update in the fragmented renderer, for which sending is fastest via CPU, about 7.5 ms. But it's unable to keep the full image in memory from one frame to the next to modify it.)
Mon graphe (27 Juin): (MQ || Rogue Life) ; serial gint ; passe gint 3 ; Azur ; ...) || (shoutbox v5 ; v5)

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 - 2025 | Il y a 171 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