home *** CD-ROM | disk | FTP | other *** search
/ Game.EXE 2001 January / execd1200.iso / Shareware / Blocks 3 / setup.exe / Source / UNDO.C < prev   
Encoding:
C/C++ Source or Header  |  2000-10-07  |  9.8 KB  |  333 lines

  1. #include <allegro.h>
  2. #include <jgmod.h>
  3. #include <blocks3.h>
  4.  
  5. void Add_Undo(void)
  6. {
  7.  int i, j, k;
  8.  
  9.  if (undo_count == 20)
  10.  {
  11.   Move_Undo_Down();
  12.   undo_count = 19;
  13.  }
  14.  
  15.  /* Player */
  16.  
  17.  for (i = 0; i < 2; i++)
  18.  {
  19.   undo[undo_count].ply[i].x = ply[i].x;
  20.   undo[undo_count].ply[i].y = ply[i].y;
  21.   undo[undo_count].ply[i].z = ply[i].z;
  22.   undo[undo_count].ply[i].dx = ply[i].dx;
  23.   undo[undo_count].ply[i].dy = ply[i].dy;
  24.   undo[undo_count].ply[i].dz = ply[i].dz;
  25.   undo[undo_count].ply[i].frame = ply[i].frame;
  26.   undo[undo_count].ply[i].dir = ply[i].dir;
  27.  }
  28.  
  29.  /* Boxes */
  30.  
  31.  for (i = 0; i < box_count; i++)
  32.  {
  33.   undo[undo_count].box[i].x = box[i].x;
  34.   undo[undo_count].box[i].y = box[i].y;
  35.   undo[undo_count].box[i].z = box[i].z;
  36.   undo[undo_count].box[i].dx = box[i].dx;
  37.   undo[undo_count].box[i].dy = box[i].dy;
  38.   undo[undo_count].box[i].dz = box[i].dz;
  39.   undo[undo_count].box[i].dir = box[i].dir;
  40.   undo[undo_count].box[i].type = box[i].type;
  41.   undo[undo_count].box[i].pic = box[i].pic;
  42.  }
  43.  
  44.  /* Explode */
  45.  
  46.  for (i = 0; i < explode_count; i++)
  47.  {
  48.   undo[undo_count].explode[i].x = explode[i].x;
  49.   undo[undo_count].explode[i].y = explode[i].y;
  50.   undo[undo_count].explode[i].z = explode[i].z;
  51.   undo[undo_count].explode[i].frame = explode[i].frame;
  52.   undo[undo_count].explode[i].type = explode[i].type;
  53.  }
  54.  
  55.  /* Monsters */
  56.  
  57.  for (i = 0; i < mon_count; i++)
  58.  {
  59.   undo[undo_count].mon[i].x = mon[i].x;
  60.   undo[undo_count].mon[i].y = mon[i].y;
  61.   undo[undo_count].mon[i].z = mon[i].z;
  62.   undo[undo_count].mon[i].dx = mon[i].dx;
  63.   undo[undo_count].mon[i].dy = mon[i].dy;
  64.   undo[undo_count].mon[i].dz = mon[i].dz;
  65.  
  66.   undo[undo_count].mon[i].dir = mon[i].dir;
  67.   undo[undo_count].mon[i].state = mon[i].state;
  68.   undo[undo_count].mon[i].type = mon[i].type;
  69.  
  70.   undo[undo_count].mon[i].frame = mon[i].frame;
  71.   undo[undo_count].mon[i].speed = mon[i].speed;
  72.   undo[undo_count].mon[i].count = mon[i].count;
  73.  }
  74.  
  75.  /* Doors */
  76.  
  77.  for (i = 0; i < door_count; i++)
  78.  {
  79.   undo[undo_count].door[i].x = door[i].x;
  80.   undo[undo_count].door[i].y = door[i].y;
  81.   undo[undo_count].door[i].z = door[i].z;
  82.   undo[undo_count].door[i].c = door[i].c;
  83.   undo[undo_count].door[i].state = door[i].state;
  84.  }
  85.  
  86.  /* Switches */
  87.  
  88.  for (i = 0; i < switches_count; i++)
  89.  {
  90.   undo[undo_count].switches[i].x = switches[i].x;
  91.   undo[undo_count].switches[i].y = switches[i].y;
  92.   undo[undo_count].switches[i].z = switches[i].z;
  93.   undo[undo_count].switches[i].c = switches[i].c;
  94.  }
  95.  
  96.  for (k = 0; k < 2; k++)
  97.  for (j = 0; j < 15; j++)
  98.  for (i = 0; i < 20; i++)
  99.  {
  100.   undo[undo_count].map[i][j][k] = map[i][j][k];
  101.   undo[undo_count].map_laser[i][j][k] = map_laser[i][j][k];
  102.   undo[undo_count].map_door[i][j][k] = map_door[i][j][k];
  103.  }
  104.  
  105.  undo[undo_count].box_count = box_count;
  106.  undo[undo_count].explode_count = explode_count;
  107.  undo[undo_count].mon_count = mon_count;
  108.  undo[undo_count].door_count = door_count;
  109.  undo[undo_count].switches_count = switches_count;
  110.  
  111.  undo_count++;
  112. }
  113.  
  114. void Undo(void)
  115. {
  116.  int i, j, k;
  117.  
  118.  if (undo_count == 0) return;
  119.  
  120.  undo_count--;
  121.  
  122.  box_count = undo[undo_count].box_count;
  123.  explode_count = undo[undo_count].explode_count;
  124.  mon_count = undo[undo_count].mon_count;
  125.  door_count = undo[undo_count].door_count;
  126.  switches_count = undo[undo_count].switches_count;
  127.  
  128.  /* Player */
  129.  
  130.  for (i = 0; i < 2; i++)
  131.  {
  132.   ply[i].x = undo[undo_count].ply[i].x;
  133.   ply[i].y = undo[undo_count].ply[i].y;
  134.   ply[i].z = undo[undo_count].ply[i].z;
  135.   ply[i].dx = undo[undo_count].ply[i].dx;
  136.   ply[i].dy = undo[undo_count].ply[i].dy;
  137.   ply[i].dz = undo[undo_count].ply[i].dz;
  138.   ply[i].frame = undo[undo_count].ply[i].frame;
  139.   ply[i].dir = undo[undo_count].ply[i].dir;
  140.  }
  141.  
  142.  /* Boxes */
  143.  
  144.  for (i = 0; i < box_count; i++)
  145.  {
  146.   box[i].x = undo[undo_count].box[i].x;
  147.   box[i].y = undo[undo_count].box[i].y;
  148.   box[i].z = undo[undo_count].box[i].z;
  149.   box[i].dx = undo[undo_count].box[i].dx;
  150.   box[i].dy = undo[undo_count].box[i].dy;
  151.   box[i].dz = undo[undo_count].box[i].dz;
  152.   box[i].dir = undo[undo_count].box[i].dir;
  153.   box[i].type = undo[undo_count].box[i].type;
  154.   box[i].pic = undo[undo_count].box[i].pic;
  155.  }
  156.  
  157.  /* Explode */
  158.  
  159.  for (i = 0; i < explode_count; i++)
  160.  {
  161.   explode[i].x = undo[undo_count].explode[i].x;
  162.   explode[i].y = undo[undo_count].explode[i].y;
  163.   explode[i].z = undo[undo_count].explode[i].z;
  164.   explode[i].frame = undo[undo_count].explode[i].frame;
  165.   explode[i].type = undo[undo_count].explode[i].type;
  166.  }
  167.  
  168.  /* Monsters */
  169.  
  170.  for (i = 0; i < mon_count; i++)
  171.  {
  172.   mon[i].x = undo[undo_count].mon[i].x;
  173.   mon[i].y = undo[undo_count].mon[i].y;
  174.   mon[i].z = undo[undo_count].mon[i].z;
  175.   mon[i].dx = undo[undo_count].mon[i].dx;
  176.   mon[i].dy = undo[undo_count].mon[i].dy;
  177.   mon[i].dz = undo[undo_count].mon[i].dz;
  178.  
  179.   mon[i].dir = undo[undo_count].mon[i].dir;
  180.   mon[i].state = undo[undo_count].mon[i].state;
  181.   mon[i].type = undo[undo_count].mon[i].type;
  182.  
  183.   mon[i].frame = undo[undo_count].mon[i].frame;
  184.   mon[i].speed = undo[undo_count].mon[i].speed;
  185.   mon[i].count = undo[undo_count].mon[i].count;
  186.  }
  187.  
  188.  /* Doors */
  189.  
  190.  for (i = 0; i < door_count; i++)
  191.  {
  192.   door[i].x = undo[undo_count].door[i].x;
  193.   door[i].y = undo[undo_count].door[i].y;
  194.   door[i].z = undo[undo_count].door[i].z;
  195.   door[i].c = undo[undo_count].door[i].c;
  196.   door[i].state = undo[undo_count].door[i].state;
  197.  }
  198.  
  199.  /* Switches */
  200.  
  201.  for (i = 0; i < switches_count; i++)
  202.  {
  203.   switches[i].x = undo[undo_count].switches[i].x;
  204.   switches[i].y = undo[undo_count].switches[i].y;
  205.   switches[i].z = undo[undo_count].switches[i].z;
  206.   switches[i].c = undo[undo_count].switches[i].c;
  207.  }
  208.  
  209.  for (k = 0; k < 2; k++)
  210.  for (j = 0; j < 15; j++)
  211.  for (i = 0; i < 20; i++)
  212.  {
  213.   map[i][j][k] = undo[undo_count].map[i][j][k];
  214.   map_laser[i][j][k] = undo[undo_count].map_laser[i][j][k];
  215.   map_door[i][j][k] = undo[undo_count].map_door[i][j][k];
  216.  }
  217.  
  218.  Draw_Map();
  219.  
  220.  blit(temp, screen, 0, 0, 0, 0, 640, 480);
  221. }
  222.  
  223. void Move_Undo_Down(void)
  224. {
  225.  int i, j, k;
  226.  
  227.  for (undo_count = 0; undo_count < 19; undo_count++)
  228.  {
  229.  
  230.  /* Player */
  231.  
  232.  for (i = 0; i < 2; i++)
  233.  {
  234.   undo[undo_count].ply[i].x = undo[undo_count + 1].ply[i].x;
  235.   undo[undo_count].ply[i].y = undo[undo_count + 1].ply[i].y;
  236.   undo[undo_count].ply[i].z = undo[undo_count + 1].ply[i].z;
  237.   undo[undo_count].ply[i].dx = undo[undo_count + 1].ply[i].dx;
  238.   undo[undo_count].ply[i].dy = undo[undo_count + 1].ply[i].dy;
  239.   undo[undo_count].ply[i].dz = undo[undo_count + 1].ply[i].dz;
  240.   undo[undo_count].ply[i].frame = undo[undo_count + 1].ply[i].frame;
  241.   undo[undo_count].ply[i].dir = undo[undo_count + 1].ply[i].dir;
  242.  }
  243.  
  244.  /* Boxes */
  245.  
  246.  for (i = 0; i < box_count; i++)
  247.  {
  248.   undo[undo_count].box[i].x = undo[undo_count + 1].box[i].x;
  249.   undo[undo_count].box[i].y = undo[undo_count + 1].box[i].y;
  250.   undo[undo_count].box[i].z = undo[undo_count + 1].box[i].z;
  251.   undo[undo_count].box[i].dx = undo[undo_count + 1].box[i].dx;
  252.   undo[undo_count].box[i].dy = undo[undo_count + 1].box[i].dy;
  253.   undo[undo_count].box[i].dz = undo[undo_count + 1].box[i].dz;
  254.   undo[undo_count].box[i].dir = undo[undo_count + 1].box[i].dir;
  255.   undo[undo_count].box[i].type = undo[undo_count + 1].box[i].type;
  256.   undo[undo_count].box[i].pic = undo[undo_count + 1].box[i].pic;
  257.  }
  258.  
  259.  /* Explode */
  260.  
  261.  for (i = 0; i < explode_count; i++)
  262.  {
  263.   undo[undo_count].explode[i].x = undo[undo_count + 1].explode[i].x;
  264.   undo[undo_count].explode[i].y = undo[undo_count + 1].explode[i].y;
  265.   undo[undo_count].explode[i].z = undo[undo_count + 1].explode[i].z;
  266.   undo[undo_count].explode[i].frame = undo[undo_count + 1].explode[i].frame;
  267.   undo[undo_count].explode[i].type = undo[undo_count + 1].explode[i].type;
  268.  }
  269.  
  270.  /* Monsters */
  271.  
  272.  for (i = 0; i < mon_count; i++)
  273.  {
  274.   undo[undo_count].mon[i].x = undo[undo_count + 1].mon[i].x;
  275.   undo[undo_count].mon[i].y = undo[undo_count + 1].mon[i].y;
  276.   undo[undo_count].mon[i].z = undo[undo_count + 1].mon[i].z;
  277.   undo[undo_count].mon[i].dx = undo[undo_count + 1].mon[i].dx;
  278.   undo[undo_count].mon[i].dy = undo[undo_count + 1].mon[i].dy;
  279.   undo[undo_count].mon[i].dz = undo[undo_count + 1].mon[i].dz;
  280.  
  281.   undo[undo_count].mon[i].dir = undo[undo_count + 1].mon[i].dir;
  282.   undo[undo_count].mon[i].state = undo[undo_count + 1].mon[i].state;
  283.   undo[undo_count].mon[i].type = undo[undo_count + 1].mon[i].type;
  284.  
  285.   undo[undo_count].mon[i].frame = undo[undo_count + 1].mon[i].frame;
  286.   undo[undo_count].mon[i].speed = undo[undo_count + 1].mon[i].speed;
  287.   undo[undo_count].mon[i].count = undo[undo_count + 1].mon[i].count;
  288.  }
  289.  
  290.  /* Doors */
  291.  
  292.  for (i = 0; i < door_count; i++)
  293.  {
  294.   undo[undo_count].door[i].x = undo[undo_count + 1].door[i].x;
  295.   undo[undo_count].door[i].y = undo[undo_count + 1].door[i].y;
  296.   undo[undo_count].door[i].z = undo[undo_count + 1].door[i].z;
  297.   undo[undo_count].door[i].c = undo[undo_count + 1].door[i].c;
  298.   undo[undo_count].door[i].state = undo[undo_count + 1].door[i].state;
  299.  }
  300.  
  301.  /* Switches */
  302.  
  303.  for (i = 0; i < switches_count; i++)
  304.  {
  305.   undo[undo_count].switches[i].x = undo[undo_count + 1].switches[i].x;
  306.   undo[undo_count].switches[i].y = undo[undo_count + 1].switches[i].y;
  307.   undo[undo_count].switches[i].z = undo[undo_count + 1].switches[i].z;
  308.   undo[undo_count].switches[i].c = undo[undo_count + 1].switches[i].c;
  309.  }
  310.  
  311.  for (k = 0; k < 2; k++)
  312.  for (j = 0; j < 15; j++)
  313.  for (i = 0; i < 20; i++)
  314.  {
  315.   undo[undo_count].map[i][j][k] = undo[undo_count + 1].map[i][j][k];
  316.   undo[undo_count].map_laser[i][j][k] = undo[undo_count + 1].map_laser[i][j][k];
  317.   undo[undo_count].map_door[i][j][k] = undo[undo_count + 1].map_door[i][j][k];
  318.  }
  319.  
  320.  
  321.  undo[undo_count].box_count = undo[undo_count + 1].box_count;
  322.  undo[undo_count].explode_count = undo[undo_count + 1].explode_count;
  323.  undo[undo_count].mon_count = undo[undo_count + 1].mon_count;
  324.  undo[undo_count].door_count = undo[undo_count + 1].door_count;
  325.  undo[undo_count].switches_count = undo[undo_count + 1].switches_count;
  326.  
  327.  }
  328.  
  329.  undo_count = 20;
  330. }
  331.  
  332.  
  333.