Sinon je pense limiter le dédoublement des pistes parce que c'est vraiment gore à gérer (algo récursif qui n'en fini plus de me ronger le cerveau sick)
De toute facon avec une map de 64x64 tiles y'a pas trop la place de faire des milliers de dédoublements (au fait quand je parle du nombre de dédoublements c'est les dédoublements imbriqués, on peut faire des dédoublements successifs s'ils sont sur la branche principale (je sais pas si c'est compréhensible ce charrabia tongue))
Enfin bref je pensais limiter le nombre de dédoublements à 1, si c'est trop peu à votre avis dites le moi et je bataillerais pour faire en sorte que ca soit 2 ou +.
Merci de vos réponses smile

PS : oui il y a bien 7 fois le mot dédoublement dans ce post grin
super ton projet, et ton shot! toptop
naPO a été productif sur les maps, mais c'est dommage il n'y a pas un seul saut!?

Par contre je pense qu'il faudrait vraiment que ton jeu soit compatible PedRom; ou alors je me représente mal le nombre d'heures que cela implique, mais je pense qu'il y a pas mal de gens qui utilise PedRom(dont moi bien sûr..)

Courage, ça promet vraiment. happy
avatarL'homme qu'a vu l'homme qu'a vu l'ours, qu'a mangé l'facteur..
C'est PedroM qui n'a qu'a devenir compatible avec AMS tongue
En fait c'est parce que j'utilise des flottants je crois...

Sinon les circuits de naPO sont super ! il n'y a pas besoin d'avoir des sauts partout dans tous les circuits.
En regle générale les circuits les plus simples sont les plus appreciés smile (c'est d'ailleurs pour ca que je pense limiter les dédoublements)
Va expliquer ça à PpHd il sera ravi...hum

Wiwi j'aime bien les circuits de naPO mais un petit saut par-ci par-là, enfin tu en auras sur d'autres je pense.happy
avatarL'homme qu'a vu l'homme qu'a vu l'ours, qu'a mangé l'facteur..
Si on se démerde bien, on peut placer des sauts sur les côtés afin de faire des raccourcis par-dessus le décor tripo
Des floats ? pourquoi faire ?
avatarQue cache le pays des Dieux ? - Ximoon's Box - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.
Pour péter les records de temps du circuits, par exemple, dans Mario Kart Super Circuit, il y a des circuits où on peut gruger et s'économiser qq secondes grin

(bon j'en fais quoi de ce post maintenant cheeky ?)
(je parlais des flottants mentionnés par LionelA)
avatarQue cache le pays des Dieux ? - Ximoon's Box - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.
Pour PedroM je pense pas pouvoir faire grand chose tant qu'il ne supporte pas les flottants (je en suis pas au courant de l'actualité de PedroM donc je sais pas si ça a été fait)

Je les utilise pour l'init :
1) Pour créer la table des cosinus et sinus (mais bon à la limite je pourrais les caler en dur)
2) Pour la création de la matrice de projection (en virgule fixe y'a pas moyen d'obtenir la meme precision ou alors je m'y prend mal)
donc résultat je suis obligé d'utiliser les floats sad

Sinon oui on peut rajouter quelques jumps pour mettre un peu de piment smile
1) tu pourrais surtout les calculer en virgule fixe
2) tu t'y prends mal
1) c'est pas ma faute si les fonctions cos et sin renvoient des floats
2) J'ai bataillé au maximum et Fisch2 aussi sans arriver à un resultat convaincant donc j'ai un peu laissé tombé pour l'instant.
Par contre si tu veux t'amuser je t'en prie smile http://www.tigen.org/pws/forum/index.php?action=sujet&forum=5&cat=20&topic=1007&page=3#38
j'ai jeté un oeil à m7_CreateMatrix (c'est bien ça ?), et les floats sont pas vraiment nécessaires...

tu as besoin des (short)(k * tabstep), càd (short)(k * (float)K1 / (K2*val)) ; tu peux donc écrire :
int log2(long x) {
  if (x<0) x=-x;
  int j=-1;
  while (x)
    x>>=1, j++;
  return j;
}

puis
  long q = K2*val;
  int z = log2(q)-15;
  if (z<0) z=0;
  K1>>=z; q>>=z;
  for (k...)
    Horz[...] = (short) (k * K1 / (short)q);


Et la division est en réalité un simple opcode divs, donc plutôt efficace smile

[EDIT : cross, les sources que j'ai regardées sont celles que tu m'avais passées, pas les plus récentes ^^]
Heu c'est normal que j'y pige rien tongue ?

Ca serait super cool si tu pouvais faire les optimisations sur la derniere version du code ^^
merci
en fait le code avait pas changé tripaf

bon voilà ce que ça donnerait : (pas testé, dis-moi si ça marche)
(ancienne version)
...
float tabstep[SIZE_Y];
...
void m7_CreateMatrix(short SizeHorz, short ViewL, short ViewF)
{
  register short i,j;
  K3 = SizeHorz * (SIZE_Y * (ViewF - 1));
  const long K1 = -K3*ViewL*ViewL;
  const long K2 = 2*SIZE_X*ViewF;
  K4 = (SizeHorz-1)*ViewF;
  
  K5 = SizeHorz*(-(ViewF-1)*ViewL);
  
  long val = ((SIZE_Y - 1) * K4 - K3);

  for(i=SIZE_Y; i--; )
  {
      tabstep[SIZE_Y - i - 1] = (float)K1/(K2 * val);
      Vert[SIZE_Y - i - 1] = (i*K5)/(val + val);
      val -= K4;
  }
  
  for(j=SIZE_Y; j--; )
  {
    const float _tabstep = tabstep[j];
    float _tabstep1 = ((SIZE_X/2)+1)*_tabstep;
    float _tabstep2 = (-((SIZE_X/2)-1))*_tabstep;
    const short offset = SIZE_X * j;
    
    for(i=SIZE_X/2; i--; )
    {
      Horz[((SIZE_X/2) - i%(SIZE_X/2) - 1) + offset] = _tabstep1;
      Horz[((SIZE_X/2) + i%(SIZE_X/2)) + offset] = _tabstep2;
      
      _tabstep1 -= _tabstep;
      _tabstep2 += _tabstep;
    }
  }
}

(nouvelle version)
...
int log2(long x) { 
  if (x<0) x=-x; 
  int j=-1; 
  while (x) 
    x>>=1, j++; 
  return j; 
}
void m7_CreateMatrix(short SizeHorz, short ViewL, short ViewF)
{
  register short i,j;
  K3 = SizeHorz * (SIZE_Y * (ViewF - 1));
  const long K1 = -K3*ViewL*ViewL;
  const long K2 = 2*SIZE_X*ViewF;
  K4 = (SizeHorz-1)*ViewF;
  
  K5 = SizeHorz*(-(ViewF-1)*ViewL);
  
  long val = ((SIZE_Y - 1) * K4 - K3);

  for(i=SIZE_Y; i--; )
  {
      long q = K2 * val;
      int z = log2(q) - 15;
      if (z<0) z=0;
      long K1z = K1>>z; q>>=z;
      Vert[SIZE_Y - i - 1] = (i*K5)/(val + val);
      val -= K4;

      int j1 = (SIZE_X/2)+1;
      int j2 = -(SIZE_X/2)+1;
      const short offset = SIZE_X * (SIZE_Y - i - 1);
      for(j=SIZE_X/2; j--; )
      {
	  Horz[((SIZE_X/2) - j - 1) + offset] = (short)(j1 * K1z / (short)q);
	  Horz[((SIZE_X/2) + j) + offset] = (short)(j2 * K1z / (short)q);

	  j1--, j2++;
      }
  }
}
eek y'a comme un petit probleme en fait tongue :
fzeropollux.gif
gni

Est-ce que ça marche si tu remplaces
long K1z = K1>>z; q>>=z;
par
float K1z = K1;
?
heu grin
fzeropollux2.gif

Si tu veux je peux t'envoyer le projet complet ?
oups, il faut aussi remplacer (short)q par q tout court, dans ce cas-là, dsl ^^ (je veux bien le projet complet, éventuellement cheeky)
Oui avec le q à la place du (short) q ca marche smile
je te maile le projet (au fait je me servait de tabstep dans la partie projection des sprites, je sais pas si ta technologie est adaptable là aussi (fonction m7_ProjXYZ))
d'accord, c'est juste que je m'étais planté dans log2() : mets j=0 au lieu de j=-1, en principe ça devrait marcher smile
Merci beaucoup !!! bisoo
T'es vraiment un boss !
(je t'envoie le projet où c'est pas la peine ?)

edit : envoyé finallement
edit² : finallement pas (mail erroné)
#73>pas mal l'effet graphique^^
avatarMembre fondateur de la Ligue Anti-MacIntoc
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Un expert est quelqu'un qui en sait de plus en plus sur de moins en moins
de choses, jusqu'à ce qu'il connaisse absolument tout à propos de rien.
lol, c'est clair smile
J'en ai obtenu des bien sympa aussi quand je faisais mes tests pour trouver la formule
Grâce à Pollux j'ai réussi à me débarrasser des floats à l'endroit où je croyais que c'était impossible.

Maintenant reste le problème des cos et sin :
voici le source

// Cos and Sin
#define NBDIR 128
#define SINCOS 4

signed char CosTable[NBDIR];
signed char SinTable[NBDIR];


static inline void m7_CosAndSin()
{
  register short i;
     
    for(i = NBDIR; i--;) {
      const float angle = (i+i)*(PI/NBDIR);  // Now, PI/NBDIR will be a constant value and (i+i) is faster than i*2
      CosTable[i] = (signed char)(cos(angle)*(1<<SINCOS));
      SinTable[i] = (signed char)(sin(angle)*(1<<SINCOS));
    }
}



Comment je pourrais faire ?
Merci
table précalculée, si tu veux pas te prendre la tête...
J'y ai pensé mais le probleme c'est que je voulais que le NBDIR et SINCOS soient parametrables...
eek, tu fais varier que de -16 à +16 ? t'as besoin de si peu de précision que ça ?

(et sinon tu peux aussi utiliser la même table pour le sinus et le cosinus, avec juste 25% d'éléments en plus)
lionelA :
J'y ai pensé mais le probleme c'est que je voulais que le NBDIR et SINCOS soient parametrables...

ah, pkoi ?
Ben ouais grin (ca se voit pas quand on joue (c'est la limite ultime car de -8 à +8 c'est horrible quand on tourne))
Je pensais a stocker une table contenant une precision jusqu'à -128 à +128 et de partir de là afin de ne plus utiliser les fonction cos et sin d'AMS, qu'en pense tu ?
86> je sais plus trop mais je crois que c'était pour permettre d'augmenter la précision si on a des cartes plus petites (enfin dans un autre jeu qui utiliserait mon moteur de mode7)
ben je sais pas, moi j'utilise des valeurs de -32767 à +32767, et je multiplie (enfin, décale) après par ce qu'il faut, c'est bcp plus précis... je pense pas que tu aies besoin de bcp de vitesse pour ça, non ?