Voila j'ai donc décidé de présenté un peu mon projet , un peu en avance j'aurais préférer avoir mon 'moteur' plus complet avant de faire une présentation, et puis je me suis dit que je ferai un post sur une de mes console favorite la Super Nintendo !
Alors le but de mon projet et de faire un A-rpg a la secret of mana , je vois pas ce projet tout a fait impossible niveau prog (aucun souci niveau algo) mais demande beaucoup de temps et de motivation.
La démo peut vous sembler courte mais il y a eu derrière quelque mois de travail.
Pour la présentation de la console voila ce que dit Wikipédia :
Dans la pratique c'est du 2.68 mhz , ( on peut le cadencé niveau programmation a 3.58 mais il se remet par défaut sous certaine condition).Processeur : 16 bits 65C816 cadencé à 3,58, 2,68, ou 1,79 MHz (réglable)
RAM de travail : 128 Kio
PPU (Picture Processing Unit) 16 bits
RAM vidéo : 64 Kio pour les plans de décor et les sprites
Nombre de couleurs : jusqu'à 256 selon le mode graphique, choisies parmi 32768 (15bit RGB5)
Définition : de 256 × 224 à 512 × 448 pixels selon le mode graphique, et le scan entrelacé ou progressif
jusqu'à 4 plans de scrolling selon le mode graphique
Nombre de sprites : 128 (32 par ligne de balayage maximum, ainsi qu'une largeur cumulée de 35x8 = 280 pixels par ligne), taille de 8 × 8 à 64 × 64 pixels
Effets câblés : scrollings toutes directions, zoom et rotation d'arrière plan (mode 7), plans multiples ; gestion des sprites, compression de tiles, déformation graphique…
Modes graphiques : 8 modes de 0 à 7
Pour la Ram de travail dans la pratique le programmeur n'a que 8 ko disponible pour le jeu(de adresse $0000 a $2000) le reste est réservé pour la supernes (les registre se trouve en mémoire par exemple).
On a après 64 ko pour les sprites.
Le background et les objet(sprite genre perso ect) sont gérer un peu différemment , pour le background on possède 8 mode (perso je n'utilise que le mode 1 et 7), les tiles peuvent être de 8x8 ou 16x16 pour le BG , chaque tile et configurable (flip ,choix de la palette , priorité ,choix du tileset).
Pour les sprites on ne peut en mettre que 128 maximun , (et un certain nombre par ligne) , les tileset peuvent varié entre 8x8 a 64x64.
Pour la palette 8 pour le BG et 8 pour les sprites.
Le processeur de la SNES mon avis ?
C'est un assembleur assez simple un peu trop simple a mon gout des qu'on veut faire quelque chose d'un poil plus complexe on écrit rapidement pas mal de code , après c'est plus un hybride 8/16 bits , dans le sens ou c'est le programmeur qui choisit de le mettre en 16 bit ou 8 bits , après il n'y qu'un registre qui peut faire les opération (accumulateur) ce qui oblige chaque fois de passer sur ce registre pour faire des opération quelconque.
Bien sur pas de division ou multiplication sur ce processeur disponible.
Niveau puissance étrangement même si il y a écrit 2.68mgz ce qui signifie 2 680 000 cycle par seconde , la SNES ne me laisse pour affichage (quand le NMI est activé) ,que 18000 cycle par frame (qui fait donc 900 000 cycle par seconde),c'est très (très) peu , le reste doit servir pour affichage, d’ailleurs on soit impossible que le jeu ralentisse si vous n'avez pas le temps pour faire les calculs la SNES passera a l'affichage direct , il y a le Vblank (parti du code pendant que la SNES fait affichage qui dure 0.2 ms) , ce qui doit être utile de pouvoir mettre un peu de code dessus.
Alors après avoir appris un peu plus assembleur et compris la bête (parce que faut dire que c'est pas courant comme architecture) , j'ai pu coder une démo.
Le scrolling , j'ai galéré , coder plusieurs fois parce que trop long , la j'ai optimiser comme un bourrin pas de boucle tout hardcoder ,et je pense que il faudra faire comme ça sur chaque point critique , j'ai passé aussi un temps non négligeable sur les outils (éditeur de mode 7 et de map) , de même pour le convertisseur png ->image snes y'a probablement des outils qui traine sur le net pour ça mais sur windows ce qui n'est pas mon cas.
Les collision sont un peu trop harcoder a mon gout vu que je dois penser a faire les collision avec les perso aussi , faudra que je rend le code plus modulable sur ce point (légèrement pour être utilisable sur les perso).
La démo possède donc un perso qui marche, un pnj , un début de menu (avec rotation L ou R) , scrolling / collision , texte et ensuite start / select pour passer du mode normal en mode 7 (pas fini).
La démo qui en plein mode debug est dispo ici : http://www.mediafire.com/download/9t...62fb6/main.smc
Une Vidéo :
Ensuite ben plein de chose , disons que j'en suis en mode réflexion y 'a des contrainte a ne pas ignoré , la première j'ai fait une erreur d'avoir fait du 32x32 par tiles pour les sprites , vu que pour le menu (qui sont des sprites) , ça prend trop de place , en chiffre une texture de 128x32 ne prend que 4 icone en 32x32 et si c'est du 16x16 j'en ai 16 icone ce qui est largement suffisant.
Pour les Sprite même si on a 64 ko on ne peut sélectionner que 16ko de sprite , ce qui en gros représente 2 texture de 128x128 , du coup faudra que je réfléchisse a comment je les sépare pour ma part je le voyais comme ceci (diviser en 128x32) :
1) hero
2) hero 2
3) ennemi/pnj
4) ennemi/pnj
5) ennemi/pnj
6) ennemi/pnj
7) menu
8) autre
Ce qui me fait une palette pour chaqu'un ^^
Ensuite faudra que je réfléchisse sur comment je gère la priorité affichage faire des if sur chaque perso affichable pourquoi pas (y en a pas plus que 7 grosso modo et de 3 pour les monstre dans secret of mana) , mais faudra que je décide pour OAM (Object Address Memory qui ne peut prendre que 128 sprite je rappelle) , et la priorité sur les sprites ce fait par rapport a cette adresse , ça peut sembler inutile , mais je venais de remarque que pour le menu il doit être dessiné par dessus du coup faudra que je décide quel adresse correspond a quoi (ce qui est sur c'est que les premiers sera le menu) bref pour dire qu'on doit presque tout prévoir et je préfère éviter les surprisse a un stade avancé dans mon code.
Le BG pour le moment , j'ai une texture pour le texte/fenêtre (de 128x32) et le reste pour la map , pour le moment j'ai fait en sorte de mettre 24ko pour la map ( 3 texture de 128x128) ce qui me semble suffisant.
Et j'ai 7 palettes pour la map (donc 112 couleurs).
Pour le moment je n 'utilise qu'un seul BG pour la map , disons que j'ai encore un doute niveau performance pour mettre le deuxième, quand j'implémenterai le reste ,s'il me reste encore du temps cpu je le ferai.
Il faut que je recode certain petit point , et puis finir au moins la démo (collision perso et menu) , pour un combat j'ai pas d'idée j'ai plus apprécié le gameplay d'un terranigma plus vif que Secret of mana qui sait un mélange des 2 serait plus cool de mon point de vue ^^
Voila , donc je vous rassure j'écris tout ceci sur un fichier texte qui me sert de mémo, bref je cartographie mon architecture et je me base la dessus.
Sur ce projet je pense que je rechercherai un codeur assembleur pour m’épaulai,a deux le travail serait plus faisable , par contre ça doit pas courir a chaque coin de rue je regarderai du coté de la communauté anglophone.
Je suis conscient que le post est plus orienté technique j’espère que cela vous intéressera quand même , et merci d'avoir lu un tel pavé .
Partager