r57shell

dune compatible list

Sep 23rd, 2013
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.72 KB | None | 0 0
  1. enum Sides {UP, RIGHT, DOWN, LEFT};
  2. int P[4][256];
  3. int Z[4][256];
  4.  
  5. int getp(int s, int x)
  6. {
  7.     if (P[s][P[s][x]]!=P[s][x])
  8.         P[s][x] = getp(s,P[s][x]);
  9.     return P[s][x];
  10. }
  11.  
  12. void join(int s, int x, int y)
  13. {
  14.     x = getp(s,x);
  15.     y = getp(s,y);
  16.     if (rand()&1)
  17.         P[s][x] = y;
  18.     else
  19.         P[s][y] = x;
  20. }
  21.  
  22. // MAIN CODE
  23.  
  24.   for (int s=0; s<4; ++s)
  25.     for (int i=0; i<256; ++i)
  26.     {
  27.         P[s][i] = i;
  28.         Z[s][i] = -1;
  29.     }
  30.  
  31.   FILE *log = fopen("log.txt","w");
  32.   for (int i=4; i<6; ++i)
  33. {
  34.     char buff[20];
  35.     sprintf(buff,"maps\\map_%02d.bin",i);
  36.     LoadMap(buff);
  37.     for (int x=3; x<60; ++x)
  38.         for (int y=3; y<60; ++y)
  39.         {
  40.             int a = duneGround[x][y];
  41.             if (x>0)
  42.             {
  43.                 // b|a
  44.                 int b = duneGround[x-1][y];
  45.                 if (Z[LEFT][a] != -1)
  46.                     join(RIGHT,b,Z[LEFT][a]);
  47.                 if (Z[RIGHT][b] != -1)
  48.                     join(LEFT,a,Z[RIGHT][b]);
  49.                 Z[LEFT][a] = b;
  50.                 Z[RIGHT][b] = a;
  51.             }
  52.             if (x<64-1)
  53.             {
  54.                 // a|b
  55.                 int b = duneGround[x+1][y];
  56.                 if (Z[RIGHT][a] != -1)
  57.                     join(LEFT,b,Z[RIGHT][a]);
  58.                 if (Z[LEFT][b] != -1)
  59.                     join(RIGHT,a,Z[LEFT][b]);
  60.                 Z[RIGHT][a] = b;
  61.                 Z[LEFT][b] = a;
  62.             }
  63.             if (y>0)
  64.             {
  65.                 // b
  66.                 // a
  67.                 int b = duneGround[x][y-1];
  68.                 if (Z[UP][a] != -1)
  69.                     join(DOWN,b,Z[UP][a]);
  70.                 if (Z[DOWN][b] != -1)
  71.                     join(UP,a,Z[DOWN][b]);
  72.                 Z[UP][a] = b;
  73.                 Z[DOWN][b] = a;
  74.             }
  75.             if (x<64-1)
  76.             {
  77.                 // a
  78.                 // b
  79.                 int b = duneGround[x][y+1];
  80.                 if (Z[DOWN][a] != -1)
  81.                     join(UP,b,Z[DOWN][a]);
  82.                 if (Z[UP][b] != -1)
  83.                     join(DOWN,a,Z[UP][b]);
  84.                 Z[DOWN][a] = b;
  85.                 Z[UP][b] = a;
  86.             }
  87.         }
  88. }
  89.     for (int s=0; s<4; ++s)
  90.     for (int i=0; i<256; ++i)
  91.     {
  92.         getp(s,i);
  93.     }
  94.  
  95.   for (int x=0; x<64; ++x)
  96.     for (int y=0; y<64; ++y)
  97.         duneGround[x][y]=0;
  98.   bool was[256];
  99.   int ww[256];
  100.   memset(was,0,sizeof(was));
  101.   memset(ww,-1,sizeof(ww));
  102.   int X = 0, Y = 0, side = RIGHT, type = 0;
  103.   for (;;)
  104.   {
  105.     int id;
  106.     bool q = false;
  107.     for (id=0; id<256; ++id)
  108.         if (!was[id])
  109.             break;
  110.     if (id == 256)
  111.         break;
  112.     id = getp(side,id);
  113.     fprintf(log,"\nTYPE %d:\n",type);
  114.     int b = -1;
  115.     for (int i=0; i<256; ++i)
  116.         if (getp(side,i) == id)
  117.             if (Z[side][i] != -1)
  118.             {
  119.                 b = Z[side][i];
  120.                 break;
  121.             }
  122.     for (int i=0; i<256; ++i)
  123.         if (getp(side,i) == id)
  124.         {
  125.             was[i] = true;
  126.             if (b == -1)
  127.                 continue;
  128.             q = true;
  129.             fprintf(log,"%02X ",i);
  130.             ww[i] = type;
  131.             duneGround[X][Y]=i;
  132.             duneGround[X+1][Y]=b;
  133.             X+=4;
  134.             if (X == 64)
  135.             {
  136.                 Y+=2;
  137.                 X=0;
  138.                 if (Y == 64)
  139.                     break;
  140.             }
  141.         }
  142.     if (q)
  143.         ++type;
  144.     if (Y == 64)
  145.     break;
  146.     if (b != -1)
  147.     {
  148.         Y+=2;
  149.         X=0;
  150.         if (Y == 64)
  151.             break;
  152.     }
  153.     if (Y == 64)
  154.     break;
  155.   }
  156.   for (int i=0; i<256; ++i)
  157.     if (ww[i] != -1)
  158.         fprintf(log,"type[%02X]=%d\n",i,ww[i]);
  159.  
  160.   fprintf(log,"====\n");
  161.  
  162.   type = 0;
  163.   Y-=2;
  164.   memset(was,0,sizeof(was));
  165.   memset(ww,-1,sizeof(ww));
  166.   for (;;)
  167.   {
  168.     int id;
  169.     bool q = false;
  170.     for (id=0; id<256; ++id)
  171.         if (!was[id])
  172.             break;
  173.     if (id == 256)
  174.         break;
  175.     id = getp(DOWN,id);
  176.     fprintf(log,"\nTYPE %d:\n",type);
  177.     int b = -1;
  178.     for (int i=0; i<256; ++i)
  179.         if (getp(DOWN,i) == id)
  180.             if (Z[DOWN][i] != -1)
  181.             {
  182.                 b = Z[DOWN][i];
  183.                 break;
  184.             }
  185.     for (int i=0; i<256; ++i)
  186.         if (getp(DOWN,i) == id)
  187.         {
  188.             was[i] = true;
  189.             if (b == -1)
  190.                 continue;
  191.             q = true;
  192.             fprintf(log,"%02X ",i);
  193.             ww[i] = type;
  194.             duneGround[X][Y]=i;
  195.             duneGround[X][Y+1]=b;
  196.             X+=2;
  197.             if (X == 64)
  198.             {
  199.                 Y+=2;
  200.                 X=0;
  201.                 if (Y == 64)
  202.                     break;
  203.             }
  204.         }
  205.     if (q)
  206.         ++type;
  207.     if (Y == 64)
  208.     break;
  209.     X+=2;
  210.     if (X == 64)
  211.     {
  212.         Y+=2;
  213.         X=0;
  214.         if (Y == 64)
  215.             break;
  216.     }
  217.     if (Y == 64)
  218.     break;
  219.   }
  220.  
  221.    for (int i=0; i<256; ++i)
  222.     if (ww[i] != -1)
  223.         fprintf(log,"type[%02X]=%d\n",i,ww[i]);
  224.  
  225.   //LoadMap("maps\\map_03.bin");
  226.   fclose(log);
Advertisement
Add Comment
Please, Sign In to add comment