Labyrinthes

Parlez de tout ce qui est lié à Trackmania 2.

Moderator: French Moderator

User avatar
SurferIX
Posts: 79
Joined: 10 May 2011, 16:14
Contact:

Re: Labyrinthes

Post by SurferIX » 18 Sep 2011, 12:36

Eh bien il faut aller dans le répertoire de tes scripts qui est en général dans

C:/Users/Nom d'utilisateur/Documents/ManiaPlanet/Scripts/EditorPlugins/TrackMania/

Par exemple moi c'est

C:/Users/Olivier/Documents/ManiaPlanet/Scripts/EditorPlugins/TrackMania/

Là tu fais un nouveau document texte par exemple tu l'appele "Test.txt"
et dedans tu fais copier-coller de mon code
Tu ferme et tu sauve.

Ensuite tu lance trackmania et tu vas dans l'éditeur de circuits

Tu clique sur "plugins" (F5 ne fonctionne pas) en bas au milieu à droite et là tu dois avoir un nom qui correspond à ton fichier, donc "Test". Tu clique dessus et tu me dis ce que ça donne =)
http://olivierpons.fr
Mon dernier framework hautes performances : http://www.papdevis.fr

User avatar
phantomxfr
Posts: 35
Joined: 16 Aug 2010, 22:46

Re: Labyrinthes

Post by phantomxfr » 18 Sep 2011, 12:57

:shock: le plus gros labyrinte de tm²
beau boulot, je me demandais a quoi servaient les scripts dans le jeu, je vois qu avec un peu de temps t es arrivé a faire un truc genial. :3
buck84

User avatar
Kistrof
Posts: 18
Joined: 28 Jul 2011, 21:30
Location: France
Contact:

Re: Labyrinthes

Post by Kistrof » 20 Sep 2011, 17:54

J'ai comme un bug
Image
par exemple tu l'appele "Test.txt"
"Test.Script.txt" c'est mieux nan ?
Image
Image

User avatar
SurferIX
Posts: 79
Joined: 10 May 2011, 16:14
Contact:

Re: Labyrinthes

Post by SurferIX » 20 Sep 2011, 21:03

Oui ils ont changé apparemment le nom de certains blocs :0010

Il faut mettre en commentaire la ligne 112 :
112 // TypeBloc = "ArenaFloodLightBaseCeiling";

Mais ça signifie aussi, alors, qu'il n'y aura plus les blocs qui avaient un projecteur collé en dessus. C'était pourtant bien...
http://olivierpons.fr
Mon dernier framework hautes performances : http://www.papdevis.fr

User avatar
SurferIX
Posts: 79
Joined: 10 May 2011, 16:14
Contact:

Re: Labyrinthes

Post by SurferIX » 25 Sep 2011, 15:25

Bon ça y est !
J'ai terminé mon nouveau "générateur" de Script.
Je peux dire sans honte et sans éxagérer que je peux générer le plus grand labyrinthe jamais crée de tous les TM existants.

J'ai généré le plus petit possible : 5 x 4... mais sur 24 étages. OUI OUI môsieur, 24 étages.
Juste pour tester.
Allez, un petit splash et après un copier coller de mon script :

Image

Pour que le script fonctionne, je ré-explique :
- allez dans le répertoire de script de TM². En général c'est :

Code: Select all

C:/Users/NomUtilisateur/Documents/ManiaPlanet/Scripts/EditorPlugins/TrackMania
Par exemple moi c'est :

Code: Select all

C:/Users/Olivier/Documents/ManiaPlanet/Scripts/EditorPlugins/TrackMania
- faites un nouveau document "texte" (bouton droit => Nouveau => document texte) ;
- appelez le d'un nom simple : "Laby.txt" ;
- ouvrez le ;
- revenez ici, et faites un copier-coller du code en dessous dans le fichier ;
- sauvez puis fermez le fichier texte ;
- lancer TM² ;
- allez dans l'éditeur ;
- allez dans les plugin (menu tout en bas un peu sur la droite) ;
- et là vous allez voir le plugin "Laby" ;
- cliquez dessus, et une boite va s'ouvrir, cliquez sur calcul et laissez la magie opérer !
Il manque juste un départ et une arrivée, à vous de la mettre où vous voulez.

Voici mon script pour le "petit" de 5x4 :

Code: Select all

#RequireContext CGameCtnEditorPluginScriptHandler
#Include "MapUnits" as MapUnits
#Include "MathLib" as MathLib
#Const BIT_N        1
#Const BIT_E        2
#Const BIT_S        4
#Const BIT_O        8
#Const BIT_MONTEE_N 16
#Const BIT_MONTEE_E 32
#Const BIT_MONTEE_S 64
#Const BIT_MONTEE_O 128
#Const BIT_DESCENTE_N 256
#Const BIT_DESCENTE_E 512
#Const BIT_DESCENTE_S 1024
#Const BIT_DESCENTE_O 2048
#Const BIT_U  4096
#Const BIT_D  8192
Text CreateManialink()
{
  declare MLText =
  """
    <script><!--
      Void UpdateTxtDebug() {
        declare Text TxtDebug for Page;
        declare TxtDebugCtrl <=> (Page.GetFirstChild("TxtDebugPlacedValue") as CGameManialinkLabel);
        TxtDebugCtrl.SetText( TxtDebug );
      }
      Void OnPlaceBlocks()
      {
        declare Boolean StartPlacing for Page;
        if(!StartPlacing) {
          StartPlacing = True;
        }
      }
      main ()
      {
        while(True) {
          yield;
          UpdateTxtDebug();
          foreach(Event in PendingEvents) {
            if(Event.Type == CGameManialinkScriptEvent::Type::MouseClick) {
              if (Event.ControlId == "PlaceQuad") {
                OnPlaceBlocks();
              }
            }
          }
        }
      }
    --></script>
    <frame>
      <quad id="PluginTitleQuad" posn="-138 82 1" sizen="42 13"
        halign="center" valign="center" style="Bgs1InRace"
        substyle="BgTitle3_1"/>
      <label id="PluginTitleLabel" text="Labyz"
        posn="-138 82 1" halign="center" valign="center" style="TextTitle3"/>
      <quad id="PluginQuad" posn="-138 76 1" sizen="38 22"
        halign="center" valign="top" style="Bgs1"
        substyle="BgList" ScriptEvents="1"/>
      <!-- quad id="PluginQuad" posn="-156 76 1" sizen="200 28"
        halign="left" valign="top" style="Bgs1"
        substyle="BgList" ScriptEvents="1"/ -->
      <label id="LabySizeLabel"
        text="Size : 5 x 4 x 24"
        posn="-138 73 1" halign="center" valign="center"
        textsize="2"/>
      <label id="TxtDebugPlacedValue" text="0"
        posn="-152 68 2" sizen="200 5"
        halign="left" valign="center" textsize="2"/>
      <quad id="PlaceQuad" posn="-138 60 4" sizen="30 6"
        halign="center" valign="center" style="Bgs1InRace"
        substyle="BgCard" ScriptEvents="1"/>
      <label id="PlaceLabel" text="CALCULER" posn="-138 60 4"
        halign="center" valign="center" style="TextButtonSmall"
        textsize="2"/>
    </frame>
  """;
  return MLText;
}
Void PB(Text BlockName, Integer X, Integer Y,
        Integer Z,::CardinalDirections Dir)
{
    PlaceBlock(BlockModels[BlockName], <X, Y, Z >, Dir);
}
Void PlaceStart(Integer X, Integer Z, Integer Y,::CardinalDirections Dir,
                Integer CoordYBaseSol)
{
    PB("ArenaStart", 1 + (X * 2), CoordYBaseSol + (Y * 2), 1 + (Z * 2),
       Dir);
}
Void PlaceFinish(Integer X, Integer Z, Integer Y,::CardinalDirections Dir,
                 Integer CoordYBaseSol)
{
    PB("ArenaFinish", 1 + (X * 2), CoordYBaseSol + (Y * 2), 1 + (Z * 2),
       Dir);
}
Void PlaceUp(Integer X, Integer Z, Integer Y,::CardinalDirections Dir,
             Integer CoordYBaseSol)
{
    declare Integer Xl = X;
    declare Integer Yl = CoordYBaseSol + Y + 1;
    declare Integer Zl = Z;
    PB("RoadMainSlopeBase", Xl, Yl, Zl, Dir);
    yield;
}
Boolean BitSet(Integer Val, Integer Bit)
{
    return (((Val / Bit) % 2) > 0);
}
/////////////////////////////////////
// Draw the laby
Void DrawLaby(Integer[] Tab,
              Integer XSize, Integer ZSize, Integer YSize,
              Integer CoordYBaseSol)
{
    //log(CursorBlockModel.Id);
    //return;
    /* (!) Appel de Drawlaby avec les params XYZ de mon
     * laby c'est à dire XY = sol, Z = hauteur
     * => pour convertir en coord TM², on dit que les params
     *    de DrawLaby sont X, Z, Y
     */
    declare Text TxtDebug for ManialinkPage;
    declare Integer XMax = XSize
        -1;
    declare Integer ZMax = ZSize - 1;
    declare Integer YMax = YSize - 1;
    declare Boolean BitN;
    declare Boolean BitE;
    declare Boolean BitS;
    declare Boolean BitO;
    declare Integer Pos;
    declare Integer Val;
    declare Integer BaseY = CoordYBaseSol + 1;
    declare Integer Deb;
    declare Integer Fin;
    /* (!!) Bogue PlaceRoadBlocks() ignore le paramètre bloc,
     *      et ne se base que sur le bloc du curseur en cours,
     *      donc pour rester "propre" je force le bloc en cours,
     *      puis je ne me sers que de lui :
     */
    CursorBlockModel = BlockModels["RoadMain"];
    /* (!) Ici les coordonnées sont à la TM² (Y = hauteur) */
    for (Y, 0, YMax) {
        TxtDebug = "Computing (" ^ Y ^ "/" ^ (YMax*2) ^ ")";
        yield;
        for (Z, 0, ZMax) {
            Deb = -1;
            Fin = -1;
            for (X, 0, XMax) {
                Pos = X + (Z * XSize) + (Y * XSize * ZSize);
                if (BitSet( Tab[Pos], BIT_O )) {
                    if (Deb<0) {
                      Deb = X;
                    }
                    if (Fin<0) {
                      Fin = Deb + 1;
                    }
                    else {
                      Fin += 1;
                    }
                }
                else {
                    if (Deb>=0) {
                        log("O => X = " ^ X ^ ", Y = " ^ Y ^ ", Z = " ^ Z ^ ", Deb = " ^ Deb ^ ", Fin = " ^ Fin);
                        PlaceRoadBlocks(CursorBlockModel,
                          <Deb, Y+BaseY, Z>, <Fin, Y+BaseY, Z>);
                        Deb = -1;
                        Fin = -1;
                    }
                }
            }
            yield;
        }
        TxtDebug = "Computing (" ^ (Y+1) ^ "/" ^ (YMax*2) ^ ")";
        yield;
        for (X, 0, XMax) {
            Deb = -1;
            Fin = -1;
            for (Z, 0, ZMax) {
                Pos = X + (Z * XSize) + (Y * XSize * ZSize);
                if (BitSet( Tab[Pos], BIT_N )) {
                    if (Deb<0) {
                      Deb = Z;
                    }
                    if (Fin<0) {
                      Fin = Deb + 1;
                    }
                    else {
                      Fin += 1;
                    }
                }
                else {
                    if (Deb>=0) {
                        log("N => X = " ^ X ^ ", Y = " ^ Y ^ ", Z = " ^ Z ^ ", Deb = " ^ Deb ^ ", Fin = " ^ Fin);
                        PlaceRoadBlocks(CursorBlockModel,
                          <X, Y+BaseY, Deb>, <X, Y+BaseY, Fin>);
                        Deb = -1;
                        Fin = -1;
                    }
                }
            }
            yield;
        }
    }
}
/////////////////////////////////////
// Vérifie si un bloc est totalement vide
// ou le bloc est vide au sol = "Dirt"
Boolean EstVideOuDirt(Integer X, Integer Y, Integer Z)
{
    declare CGameCtnBlock B = GetBlock(<X, Y, Z >);
    if (B == Null) {
        return True;
    }
    return (B.BlockModel.Id == "Dirt");
}
/////////////////////////////////////
// Vérifie si un bloc est totalement vide
Boolean EstVide(Integer X, Integer Y, Integer Z)
{
    declare CGameCtnBlock B = GetBlock(<X, Y, Z >);
    return (B == Null);
}
/////////////////////////////////////
// Return ValRetour if Block is of known type
Integer ValIf(Integer X, Integer Y, Integer Z,
              Integer ValRetour, Text[]ListBlocsAcceptables)
{
    declare CGameCtnBlock B = GetBlock(<X, Y, Z >);
    if (B != Null) {
        if (ListBlocsAcceptables.exists(B.BlockModel.Id)) {
            return ValRetour;
        }
    }
    return 0;
}
/////////////////////////////////////
// Place all blocks
Void PlaceBlocks()
{
    declare Text TxtDebug for ManialinkPage;
    declare CBlockModel BMArenaSimpleBase;
    BMArenaSimpleBase
        <=>BlockModels["ArenaSimpleBase"];
    RemoveAllBlocksAndTerrain();
    ComputeShadows();
    yield;
    // Calculer la hauteur du sol = la hauteur minimale pour
    // poser le bloc :
    declare CoordYBaseSol = GetBlockGroundHeight(BMArenaSimpleBase, 19,
                                                 19,::
                                                 CardinalDirections::East);
    DrawLaby([
     // Etage 0
          1,     1,     1,     9,     3,
          5,    13,     6,    20,     5,
          5,     5,     1,     1,     5,
         12,    14,    14,    14,     6,

     // Etage 1
          1,     1,     1,     8,     3,
         13,    15,     6,     0,     5,
          5,    20,     1,   257,     5,
         12,    10,    14,    14,     6,

     // Etage 2
          1,     1,     1,     8,     3,
         13,    14,     6,    65,     5,
          5,     0,     9,     7,     5,
         12,   266,     6,    12,     6,

     // Etage 3
          1,     1,     9,  1026,     1,
         13,    14,     6,     0,     5,
          5,    65,     1,     1,     5,
         12,    14,    14,    14,     6,

     // Etage 4
          1,     1,     1,     8,     3,
          5,  1036,     7,    65,     5,
          5,     0,     5,     5,     5,
         12,    10,    14,    14,     6,

     // Etage 5
          1,     1,     1,  1032,     3,
         13,    14,     6,     0,     5,
         13,   130,     1,     1,     5,
         12,    10,    14,    14,     6,

     // Etage 6
          1,     1,     1,     8,     3,
         13,    14,     6,    65,     5,
          5,     0,   521,     7,     5,
         12,    10,     6,    12,     6,

     // Etage 7
          1,     1,     1,  1032,     3,
         13,    15,     6,     0,     5,
          5,    20,     1,     1,     5,
         12,    10,    14,    14,     6,

     // Etage 8
          1,     1,     1,     8,     3,
         13,    14,     6,    65,     5,
          5,     0,     9,     7,     5,
         12,   266,     6,    12,     6,

     // Etage 9
          1,     1,     1,  1032,     3,
         13,    15,     6,     0,     5,
          5,    20,     1,     1,     5,
         12,    10,    14,    14,     6,

     // Etage 10
          1,     1,     1,     8,     3,
         13,    14,     6,    65,     5,
          5,     0,     9,     7,     5,
         12,   266,     6,    12,     6,

     // Etage 11
          1,     1,     9,  1026,     1,
         13,    14,     6,     0,     5,
          5,    40,     3,     1,     5,
         12,    10,    14,    14,     6,

     // Etage 12
          1,     1,     9,    10,     3,
         13,    14,    14,   130,     5,
       2053,     0,     1,     1,     5,
          4,     8,    14,    14,     6,

     // Etage 13
          1,     1,     1,     8,     3,
         13,    14,     6,     0,   517,
         13,   130,     1,     1,     5,
         12,    10,    14,    14,     6,

     // Etage 14
          1,     1,     9,     3,     1,
         13,    14,     6,    20,     5,
          5,     0,   513,     1,     5,
         12,    10,    14,    14,     6,

     // Etage 15
          1,     1,     9,    10,     3,
         13,    14,     6,     0,     5,
          5,    65,     1,   257,     5,
         12,    14,     6,    12,     6,

     // Etage 16
          1,     1,     9,    11,     3,
          5,  1036,     6,    20,     5,
          5,     0,     1,     1,     5,
         12,    10,    14,    14,     6,

     // Etage 17
          1,     1,     1,     8,     3,
         13,    15,     6,     0,     5,
          5,    20,     1,   257,     5,
         12,    10,    14,    14,     6,

     // Etage 18
          1,     1,     1,     8,     3,
         13,    14,    14,   130,     5,
          5,     0,     1,     1,     5,
         12,   266,    14,    14,     6,

     // Etage 19
          1,     1,     9,    10,     3,
         13,    14,     6,     0,   516,
          5,    65,     1,     1,     1,
         12,    14,    14,    14,     6,

     // Etage 20
          1,     1,     9,    10,     3,
          5,  1036,    14,   130,     5,
          5,     0,     1,     1,     5,
         12,    10,    14,    14,     6,

     // Etage 21
          1,     1,     1,     8,     3,
         13,    14,     6,     0,   517,
         13,   130,     1,     1,     5,
         12,    10,    14,    14,     6,

     // Etage 22
          1,     1,     1,     8,     3,
         13,    14,     6,    40,     7,
          5,     0,   513,     1,     5,
         12,    10,    14,    14,     6,

     // Etage 23
          1,     1,     9,    10,     3,
          5,     5,  2052,     0,     5,
          5,     5,     1,     1,     5,
         12,    14,    14,    14,     6

    ],
    5,4,24,
    CoordYBaseSol);


  // Up <=> Down slopes :
    PlaceUp( 3, 1, 0, ::CardinalDirections::North, CoordYBaseSol);

    PlaceUp( 1, 2, 1, ::CardinalDirections::North, CoordYBaseSol);

    PlaceUp( 3, 1, 2, ::CardinalDirections::South, CoordYBaseSol);

    PlaceUp( 1, 2, 3, ::CardinalDirections::South, CoordYBaseSol);

    PlaceUp( 3, 1, 4, ::CardinalDirections::South, CoordYBaseSol);

    PlaceUp( 1, 2, 5, ::CardinalDirections::West, CoordYBaseSol);

    PlaceUp( 3, 1, 6, ::CardinalDirections::South, CoordYBaseSol);

    PlaceUp( 1, 2, 7, ::CardinalDirections::North, CoordYBaseSol);

    PlaceUp( 3, 1, 8, ::CardinalDirections::South, CoordYBaseSol);

    PlaceUp( 1, 2, 9, ::CardinalDirections::North, CoordYBaseSol);

    PlaceUp( 3, 1, 10, ::CardinalDirections::South, CoordYBaseSol);

    PlaceUp( 1, 2, 11, ::CardinalDirections::East, CoordYBaseSol);

    PlaceUp( 3, 1, 12, ::CardinalDirections::West, CoordYBaseSol);

    PlaceUp( 1, 2, 13, ::CardinalDirections::West, CoordYBaseSol);

    PlaceUp( 3, 1, 14, ::CardinalDirections::North, CoordYBaseSol);

    PlaceUp( 1, 2, 15, ::CardinalDirections::South, CoordYBaseSol);

    PlaceUp( 3, 1, 16, ::CardinalDirections::North, CoordYBaseSol);

    PlaceUp( 1, 2, 17, ::CardinalDirections::North, CoordYBaseSol);

    PlaceUp( 3, 1, 18, ::CardinalDirections::West, CoordYBaseSol);

    PlaceUp( 1, 2, 19, ::CardinalDirections::South, CoordYBaseSol);

    PlaceUp( 3, 1, 20, ::CardinalDirections::West, CoordYBaseSol);

    PlaceUp( 1, 2, 21, ::CardinalDirections::West, CoordYBaseSol);

    PlaceUp( 3, 1, 22, ::CardinalDirections::East, CoordYBaseSol);


    log("Done !");
    TxtDebug = "Done !";
}
/////////////////////////////////////
// Main
main()
{
    declare Integer NbBlocks for ManialinkPage;
    declare Boolean StartPlacing for ManialinkPage;
    ManialinkText
        = CreateManialink();
    while (True) {
        yield;
        if (StartPlacing) {
            PlaceBlocks();
            StartPlacing = False;
        }
    }
}
/////////////////////////////////////
http://olivierpons.fr
Mon dernier framework hautes performances : http://www.papdevis.fr

User avatar
Boss-Bravo
Posts: 247
Joined: 10 Jan 2011, 18:26
Location: Devant mon PC :D
Contact:

Re: Labyrinthes

Post by Boss-Bravo » 25 Sep 2011, 18:05

Just Amazing :D :yes: :1010

Du beau boulot. :thumbsup:
Image

User avatar
SurferIX
Posts: 79
Joined: 10 May 2011, 16:14
Contact:

Re: Labyrinthes

Post by SurferIX » 25 Sep 2011, 18:34

Désolé je limite "multiposte", mais je voulais faire un calcul total du truc... alors voila le rendu progressif sur 3 screenshots :

Image

Image

Et voilà le rendu final :
Image

Vous pouvez faire un copier-coller du script ici (toute la démarche comment faire est expliquée dans mon post précédent) :

http://olivierpons.fr/download/trackmania2/32x32x24.txt

Au résultat, moi ça tourne à quelque chose comme 10 images secondes ce qui fait que ça n'est pas jouable.
Mais bon elle fait exactement 156 216 coppers :roflol:

Enjoy !
http://olivierpons.fr
Mon dernier framework hautes performances : http://www.papdevis.fr

zimbra
Posts: 12
Joined: 25 Sep 2011, 05:33

Re: Labyrinthes

Post by zimbra » 25 Sep 2011, 19:09

je n'ose pas imaginer combien de temps , ça peut prendre , d'abord de faire le calcul des ombre en hq , puis de la jouer tu peut de lancer dans un script de sauvegarde en cours de partie ...
j'ai testé tes script qui sont au debut du topic , mais je n'aie pas réussit a faire quoique ce soit de la "ligne 112 "(je le regrette les screens avec des blocs differents de nuit me plaisaient beaucoup !
Celui ci je ne l'essayerais pas mon portable exploserais je pense :roflol: , il doit falloir une sacrée carte graphique ne serais ce que pour jouer la map !!

si tu en fais des petits qui se compose de plusieurs type de blocs je les essayerai , mais le plus recent a bien fonctionné .

bref je te manifeste ma plus grande admiration et je vais de ce pas poster la photo sur le forum de mon equipe :thumbsup:

GregN8
Posts: 38
Joined: 08 Jul 2011, 19:37

Re: Labyrinthes

Post by GregN8 » 25 Sep 2011, 19:19

C'est... c'est de l'art contemporain ton truc.

User avatar
SurferIX
Posts: 79
Joined: 10 May 2011, 16:14
Contact:

Re: Labyrinthes

Post by SurferIX » 25 Sep 2011, 21:34

zimbra wrote:je n'ose pas imaginer combien de temps , ça peut prendre , d'abord de faire le calcul des ombre en hq , puis de la jouer tu peut de lancer dans un script de sauvegarde en cours de partie ...
j'ai testé tes script qui sont au debut du topic , mais je n'aie pas réussit a faire quoique ce soit de la "ligne 112 "(je le regrette les screens avec des blocs differents de nuit me plaisaient beaucoup !
Celui ci je ne l'essayerais pas mon portable exploserais je pense :roflol: , il doit falloir une sacrée carte graphique ne serais ce que pour jouer la map !!

si tu en fais des petits qui se compose de plusieurs type de blocs je les essayerai , mais le plus recent a bien fonctionné .

bref je te manifeste ma plus grande admiration et je vais de ce pas poster la photo sur le forum de mon equipe :thumbsup:
Oui tu modifie la ligne 112 ainsi : mets un "//" (double slash) au début, ça sert à la mettre en commentaire, il faut qu'elle soit ignorée car ils ont changé (ou supprimé) le nom d'un bloc que j'utilisais et qui avait un projecteur incrusté, et de nuit c'était trop beau :|
http://olivierpons.fr
Mon dernier framework hautes performances : http://www.papdevis.fr

Post Reply

Return to “Trackmania 2”

Who is online

Users browsing this forum: No registered users and 0 guests