home *** CD-ROM | disk | FTP | other *** search
/ 600 Games / 600games.iso / Puzzle / ultra-block.swf / scripts / frame_2 / DoAction.as
Encoding:
Text File  |  2005-09-29  |  21.5 KB  |  772 lines

  1. _quality = "HIGH";
  2. _global.core = this;
  3. feedback.swapDepths(100);
  4. prompter.swapDepths(101);
  5. instructions.swapDepths(102);
  6. xStart = 175;
  7. yStart = 10;
  8. this.createEmptyMovieClip("so_newline",200);
  9. this.createEmptyMovieClip("so_skull",201);
  10. this.createEmptyMovieClip("so_doubleskull",202);
  11. this.createEmptyMovieClip("so_success",203);
  12. this.createEmptyMovieClip("so_timer",204);
  13. s_newline = new Sound(so_newline);
  14. s_newline.setVolume(30);
  15. s_newline.attachSound("newlineMP3");
  16. s_skull = new Sound(so_skull);
  17. s_skull.attachSound("skullMP3");
  18. s_doubleskull = new Sound(so_doubleskull);
  19. s_doubleskull.attachSound("doubleskullMP3");
  20. s_success = new Sound(so_success);
  21. s_success.setVolume(30);
  22. s_success.attachSound("successMP3");
  23. s_timer = new Sound(so_timer);
  24. s_timer.attachSound("timerMP3");
  25. _global.EventBroadcaster = new Object();
  26. EventBroadcaster.initialize = function(obj)
  27. {
  28.    var _loc1_ = obj;
  29.    var _loc2_ = this;
  30.    _loc1_._listeners = new Array();
  31.    _loc1_.broadcastMessage = _loc2_._broadcastMessage;
  32.    _loc1_.addListener = _loc2_._addListener;
  33.    _loc1_.removeListener = _loc2_._removeListener;
  34. };
  35. EventBroadcaster._broadcastMessage = function()
  36. {
  37.    var eventName = arguments.shift();
  38.    var _loc2_ = this._listeners;
  39.    var _loc3_ = _loc2_.length;
  40.    var _loc1_ = 0;
  41.    while(_loc1_ < _loc3_)
  42.    {
  43.       _loc2_[_loc1_][eventName].apply(_loc2_[_loc1_],arguments);
  44.       _loc1_ = _loc1_ + 1;
  45.    }
  46. };
  47. EventBroadcaster._addListener = function(obj)
  48. {
  49.    this.removeListener(obj);
  50.    this._listeners.push(obj);
  51.    return true;
  52. };
  53. EventBroadcaster._removeListener = function(obj)
  54. {
  55.    var _loc3_ = obj;
  56.    var _loc2_ = this._listeners;
  57.    var _loc1_ = _loc2_.length;
  58.    while(_loc1_--)
  59.    {
  60.       if(_loc2_[_loc1_] == _loc3_)
  61.       {
  62.          _loc2_.splice(_loc1_,1);
  63.          return true;
  64.       }
  65.    }
  66.    return false;
  67. };
  68. _global.Model = function(width, height, numOptions)
  69. {
  70.    var _loc2_ = this;
  71.    var _loc3_ = width;
  72.    _loc2_.width = _loc3_;
  73.    _loc2_.height = height;
  74.    _loc2_.numOptions = numOptions;
  75.    _loc2_.board = new Array();
  76.    var _loc1_ = 0;
  77.    while(_loc1_ < height)
  78.    {
  79.       _loc2_.board[_loc1_] = new Array();
  80.       j = 0;
  81.       while(j < _loc3_)
  82.       {
  83.          _loc2_.board[_loc1_][j] = new Object();
  84.          _loc2_.board[_loc1_][j].id = _loc1_ * _loc2_.height + j;
  85.          _loc2_.board[_loc1_][j].x = j;
  86.          _loc2_.board[_loc1_][j].y = _loc1_;
  87.          j++;
  88.       }
  89.       _loc1_ = _loc1_ + 1;
  90.    }
  91.    EventBroadcaster.initialize(_loc2_);
  92. };
  93. Model.prototype.reset = function(level)
  94. {
  95.    var _loc1_ = this;
  96.    var i;
  97.    var _loc2_ = undefined;
  98.    var type;
  99.    var _loc3_ = new Object();
  100.    var initHeight = level >= 5 ? 8 : 3 + level;
  101.    var i = 0;
  102.    while(i < _loc1_.height - initHeight)
  103.    {
  104.       _loc2_ = 0;
  105.       while(_loc2_ < _loc1_.width)
  106.       {
  107.          type = null;
  108.          _loc3_[_loc1_.board[i][_loc2_].id] = {x:_loc2_,y:i,type:type};
  109.          _loc1_.board[i][_loc2_].type = type;
  110.          _loc2_ = _loc2_ + 1;
  111.       }
  112.       i++;
  113.    }
  114.    var i = _loc1_.height - initHeight;
  115.    while(i < _loc1_.height)
  116.    {
  117.       _loc2_ = 0;
  118.       while(_loc2_ < _loc1_.width)
  119.       {
  120.          type = Math.floor(Math.random() * _loc1_.numOptions);
  121.          _loc3_[_loc1_.board[i][_loc2_].id] = {x:_loc2_,y:i,type:type};
  122.          _loc1_.board[i][_loc2_].type = type;
  123.          _loc2_ = _loc2_ + 1;
  124.       }
  125.       i++;
  126.    }
  127.    _loc1_.nextRow = [];
  128.    var i = 0;
  129.    while(i < _loc1_.width)
  130.    {
  131.       var bombrnd = !!random(100) ? 0 : _loc1_.numOptions;
  132.       var type = random(_loc1_.numOptions) + bombrnd;
  133.       _loc1_.nextRow.push(type);
  134.       i++;
  135.    }
  136.    _loc1_.broadcastMessage("showNext",_loc1_.nextRow);
  137.    _loc1_.broadcastMessage("onUpdate",_loc3_);
  138. };
  139. Model.prototype.remove = function(x, y)
  140. {
  141.    removeHelper = function(x, y, type)
  142.    {
  143.       var _loc2_ = x;
  144.       var _loc3_ = y;
  145.       var _loc1_ = 0;
  146.       if(board[_loc3_ + 1][_loc2_].type == type)
  147.       {
  148.          board[_loc3_ + 1][_loc2_].type = null;
  149.          updates[board[_loc3_ + 1][_loc2_].id] = {x:_loc2_,y:_loc3_ + 1,type:null};
  150.          _loc1_ = _loc1_ + 1;
  151.          if(cols[_loc2_] == null || _loc3_ + 1 > cols[_loc2_])
  152.          {
  153.             cols[_loc2_] = _loc3_ + 1;
  154.          }
  155.          _loc1_ += removeHelper(_loc2_,_loc3_ + 1,type);
  156.       }
  157.       if(board[_loc3_ - 1][_loc2_].type == type)
  158.       {
  159.          board[_loc3_ - 1][_loc2_].type = null;
  160.          updates[board[_loc3_ - 1][_loc2_].id] = {x:_loc2_,y:_loc3_ - 1,type:null};
  161.          _loc1_ = _loc1_ + 1;
  162.          if(cols[_loc2_] == null || _loc3_ - 1 > cols[_loc2_])
  163.          {
  164.             cols[_loc2_] = _loc3_ - 1;
  165.          }
  166.          _loc1_ += removeHelper(_loc2_,_loc3_ - 1,type);
  167.       }
  168.       if(board[_loc3_][_loc2_ + 1].type == type)
  169.       {
  170.          board[_loc3_][_loc2_ + 1].type = null;
  171.          updates[board[_loc3_][_loc2_ + 1].id] = {x:_loc2_ + 1,y:_loc3_,type:null};
  172.          _loc1_ = _loc1_ + 1;
  173.          if(cols[_loc2_ + 1] == null || _loc3_ > cols[_loc2_ + 1])
  174.          {
  175.             cols[_loc2_ + 1] = _loc3_;
  176.          }
  177.          _loc1_ += removeHelper(_loc2_ + 1,_loc3_,type);
  178.       }
  179.       if(board[_loc3_][_loc2_ - 1].type == type)
  180.       {
  181.          board[_loc3_][_loc2_ - 1].type = null;
  182.          updates[board[_loc3_][_loc2_ - 1].id] = {x:_loc2_ - 1,y:_loc3_,type:null};
  183.          _loc1_ = _loc1_ + 1;
  184.          if(cols[_loc2_ - 1] == null || _loc3_ > cols[_loc2_ - 1])
  185.          {
  186.             cols[_loc2_ - 1] = _loc3_;
  187.          }
  188.          _loc1_ += removeHelper(_loc2_ - 1,_loc3_,type);
  189.       }
  190.       return _loc1_;
  191.    };
  192.    var _loc1_ = undefined;
  193.    var _loc2_ = undefined;
  194.    var _loc3_ = undefined;
  195.    var total = 0;
  196.    var board = this.board;
  197.    var cols = new Object();
  198.    var updates = new Object();
  199.    var skipper;
  200.    var type = board[y][x].type;
  201.    board[y][x].type = null;
  202.    cols[x] = y;
  203.    total = removeHelper(x,y,type);
  204.    if(total > 1)
  205.    {
  206.       core.s_success.start(0,1);
  207.       this.broadcastMessage("updateScore",total);
  208.       updates[board[y][x].id] = {x:x,y:y,type:null};
  209.       for(_loc2_ in cols)
  210.       {
  211.          skipper = 1;
  212.          _loc1_ = cols[_loc2_];
  213.          _loc3_ = _loc1_ - 1;
  214.          while(_loc3_ > -1)
  215.          {
  216.             if(board[_loc3_][_loc2_].type == null)
  217.             {
  218.                skipper++;
  219.             }
  220.             else
  221.             {
  222.                updates[board[_loc3_ + skipper][_loc2_].id].type = board[_loc3_][_loc2_].type;
  223.                board[_loc3_ + skipper][_loc2_].type = board[_loc3_][_loc2_].type;
  224.                updates[board[_loc3_][_loc2_].id] = {x:_loc2_,y:_loc3_,type:null};
  225.                board[_loc3_][_loc2_].type = null;
  226.             }
  227.             _loc3_ = _loc3_ - 1;
  228.          }
  229.       }
  230.       var emptyCols = [];
  231.       _loc2_ = 0;
  232.       while(_loc2_ < this.width)
  233.       {
  234.          var rem = 0;
  235.          _loc1_ = 0;
  236.          while(_loc1_ < this.height)
  237.          {
  238.             if(board[_loc1_][_loc2_].type == null || board[_loc1_][_loc2_].type == undefined)
  239.             {
  240.                rem++;
  241.             }
  242.             _loc1_ = _loc1_ + 1;
  243.          }
  244.          if(rem == this.height)
  245.          {
  246.             emptyCols.push(_loc2_);
  247.          }
  248.          _loc2_ = _loc2_ + 1;
  249.       }
  250.       var k = 0;
  251.       while(k < emptyCols.length)
  252.       {
  253.          if(emptyCols[k] < this.width / 2)
  254.          {
  255.             _loc2_ = emptyCols[k];
  256.             while(_loc2_ >= 0)
  257.             {
  258.                _loc1_ = 0;
  259.                while(_loc1_ < this.height)
  260.                {
  261.                   updates[board[_loc1_][_loc2_].id] = {x:board[_loc1_][_loc2_].x,y:board[_loc1_][_loc2_].y,type:board[_loc1_][_loc2_ - 1].type};
  262.                   board[_loc1_][_loc2_].type = board[_loc1_][_loc2_ - 1].type;
  263.                   _loc1_ = _loc1_ + 1;
  264.                }
  265.                _loc2_ = _loc2_ - 1;
  266.             }
  267.          }
  268.          else
  269.          {
  270.             _loc2_ = emptyCols[k];
  271.             while(_loc2_ <= this.width)
  272.             {
  273.                _loc1_ = 0;
  274.                while(_loc1_ < this.height)
  275.                {
  276.                   updates[board[_loc1_][_loc2_].id] = {x:board[_loc1_][_loc2_].x,y:board[_loc1_][_loc2_].y,type:board[_loc1_][_loc2_ + 1].type};
  277.                   board[_loc1_][_loc2_].type = board[_loc1_][_loc2_ + 1].type;
  278.                   _loc1_ = _loc1_ + 1;
  279.                }
  280.                _loc2_ = _loc2_ + 1;
  281.             }
  282.          }
  283.          k++;
  284.       }
  285.       this.broadcastMessage("onUpdate",updates);
  286.    }
  287.    else
  288.    {
  289.       core.s_skull.start(0,1);
  290.       for(n in updates)
  291.       {
  292.          board[updates[n].y][updates[n].x].type = type;
  293.       }
  294.       updates = new Object();
  295.       board[y][x].type = this.numOptions * 2;
  296.       updates[board[y][x].id] = {x:x,y:y,type:board[y][x].type};
  297.       this.broadcastMessage("onUpdate",updates);
  298.    }
  299. };
  300. Model.prototype.bomb = function(x, y)
  301. {
  302.    core.s_success.start(0,1);
  303.    var _loc1_ = this.board;
  304.    var _loc2_ = undefined;
  305.    var _loc3_ = undefined;
  306.    var z;
  307.    var total = 0;
  308.    var cols = new Object();
  309.    var updates = new Object();
  310.    var skipper;
  311.    var type = _loc1_[y][x].type;
  312.    cols[x] = y;
  313.    var k = 0;
  314.    while(k < this.height)
  315.    {
  316.       var l = 0;
  317.       while(l < this.width)
  318.       {
  319.          if(_loc1_[k][l].type == type - this.numOptions || _loc1_[k][l].type == type)
  320.          {
  321.             _loc1_[k][l].type = null;
  322.             updates[_loc1_[k][l].id] = {x:l,y:k,type:null};
  323.             if(cols[l] == null || k > cols[l])
  324.             {
  325.                cols[l] = k;
  326.             }
  327.             total++;
  328.          }
  329.          l++;
  330.       }
  331.       k++;
  332.    }
  333.    this.broadcastMessage("updateScore",total);
  334.    updates[_loc1_[y][x].id] = {x:x,y:y,type:null};
  335.    for(_loc3_ in cols)
  336.    {
  337.       skipper = 1;
  338.       _loc2_ = cols[_loc3_];
  339.       z = _loc2_ - 1;
  340.       while(z > -1)
  341.       {
  342.          if(_loc1_[z][_loc3_].type == null)
  343.          {
  344.             skipper++;
  345.          }
  346.          else
  347.          {
  348.             updates[_loc1_[z + skipper][_loc3_].id].type = _loc1_[z][_loc3_].type;
  349.             _loc1_[z + skipper][_loc3_].type = _loc1_[z][_loc3_].type;
  350.             updates[_loc1_[z][_loc3_].id] = {x:_loc3_,y:z,type:null};
  351.             _loc1_[z][_loc3_].type = null;
  352.          }
  353.          z--;
  354.       }
  355.    }
  356.    var emptyCols = [];
  357.    _loc3_ = 0;
  358.    while(_loc3_ < this.width)
  359.    {
  360.       var rem = 0;
  361.       _loc2_ = 0;
  362.       while(_loc2_ < this.height)
  363.       {
  364.          if(_loc1_[_loc2_][_loc3_].type == null || _loc1_[_loc2_][_loc3_].type == undefined)
  365.          {
  366.             rem++;
  367.          }
  368.          _loc2_ = _loc2_ + 1;
  369.       }
  370.       if(rem == this.height)
  371.       {
  372.          emptyCols.push(_loc3_);
  373.       }
  374.       _loc3_ = _loc3_ + 1;
  375.    }
  376.    var k = 0;
  377.    while(k < emptyCols.length)
  378.    {
  379.       if(emptyCols[k] < this.width / 2)
  380.       {
  381.          _loc3_ = emptyCols[k];
  382.          while(_loc3_ >= 0)
  383.          {
  384.             _loc2_ = 0;
  385.             while(_loc2_ < this.height)
  386.             {
  387.                updates[_loc1_[_loc2_][_loc3_].id] = {x:_loc1_[_loc2_][_loc3_].x,y:_loc1_[_loc2_][_loc3_].y,type:_loc1_[_loc2_][_loc3_ - 1].type};
  388.                _loc1_[_loc2_][_loc3_].type = _loc1_[_loc2_][_loc3_ - 1].type;
  389.                _loc2_ = _loc2_ + 1;
  390.             }
  391.             _loc3_ = _loc3_ - 1;
  392.          }
  393.       }
  394.       else
  395.       {
  396.          _loc3_ = emptyCols[k];
  397.          while(_loc3_ <= this.width)
  398.          {
  399.             _loc2_ = 0;
  400.             while(_loc2_ < this.height)
  401.             {
  402.                updates[_loc1_[_loc2_][_loc3_].id] = {x:_loc1_[_loc2_][_loc3_].x,y:_loc1_[_loc2_][_loc3_].y,type:_loc1_[_loc2_][_loc3_ + 1].type};
  403.                _loc1_[_loc2_][_loc3_].type = _loc1_[_loc2_][_loc3_ + 1].type;
  404.                _loc2_ = _loc2_ + 1;
  405.             }
  406.             _loc3_ = _loc3_ + 1;
  407.          }
  408.       }
  409.       k++;
  410.    }
  411.    this.broadcastMessage("onUpdate",updates);
  412. };
  413. Model.prototype.skull = function(x, y)
  414. {
  415.    var _loc3_ = this;
  416.    var _loc2_ = new Object();
  417.    var _loc1_ = _loc3_.board;
  418.    _loc1_[y][x].type = _loc3_.numOptions * 2 + 1;
  419.    _loc2_[_loc1_[y][x].id] = {x:x,y:y,type:_loc1_[y][x].type};
  420.    core.s_doubleskull.start(0,1);
  421.    _loc3_.broadcastMessage("onUpdate",_loc2_);
  422. };
  423. Model.prototype.getType = function(x, y)
  424. {
  425.    var _loc2_ = this;
  426.    var _loc1_ = _loc2_.board[y][x].type;
  427.    if(_loc1_ >= _loc2_.numOptions && _loc1_ < _loc2_.numOptions * 2)
  428.    {
  429.       return "bomb";
  430.    }
  431.    if(_loc1_ < _loc2_.numOptions)
  432.    {
  433.       return "block";
  434.    }
  435.    if(_loc1_ >= _loc2_.numOptions * 2)
  436.    {
  437.       return "skull";
  438.    }
  439. };
  440. Model.prototype.addRow = function()
  441. {
  442.    var _loc1_ = this;
  443.    core.s_newline.start(0,1);
  444.    var upD = new Object();
  445.    var _loc2_ = _loc1_.board;
  446.    var highRow = "begin";
  447.    var i = 0;
  448.    while(i < _loc1_.height - 1)
  449.    {
  450.       var _loc3_ = 0;
  451.       while(_loc3_ < _loc1_.width)
  452.       {
  453.          if(_loc2_[i + 1][_loc3_].type != null && highRow == "begin")
  454.          {
  455.             highRow = i;
  456.          }
  457.          upD[_loc2_[i][_loc3_].id] = {x:_loc2_[i][_loc3_].x,y:_loc2_[i][_loc3_].y,type:_loc2_[i + 1][_loc3_].type};
  458.          _loc2_[i][_loc3_].type = _loc2_[i + 1][_loc3_].type;
  459.          _loc3_ = _loc3_ + 1;
  460.       }
  461.       i++;
  462.    }
  463.    if(highRow == 0 && !_loc1_.endGame)
  464.    {
  465.       _loc1_.endGame = true;
  466.    }
  467.    else if(highRow == 0 && _loc1_.endGame)
  468.    {
  469.       _loc1_.broadcastMessage("gameOver");
  470.    }
  471.    _loc3_ = 0;
  472.    while(_loc3_ < _loc1_.width)
  473.    {
  474.       upD[_loc1_.board[_loc1_.height - 1][_loc3_].id] = {x:_loc3_,y:_loc1_.height - 1,type:_loc1_.nextRow[_loc3_]};
  475.       _loc2_[_loc1_.height - 1][_loc3_].type = _loc1_.nextRow[_loc3_];
  476.       _loc3_ = _loc3_ + 1;
  477.    }
  478.    _loc1_.nextRow = [];
  479.    var i = 0;
  480.    while(i < _loc1_.width)
  481.    {
  482.       var bombrnd = !!random(100) ? 0 : _loc1_.numOptions;
  483.       var type = random(_loc1_.numOptions) + bombrnd;
  484.       _loc1_.nextRow.push(type);
  485.       i++;
  486.    }
  487.    _loc1_.broadcastMessage("showNext",_loc1_.nextRow);
  488.    _loc1_.broadcastMessage("onUpdate",upD);
  489. };
  490. NUM_X = 10;
  491. NUM_Y = 15;
  492. CELL_WIDTH = 26;
  493. CELL_HEIGHT = 26;
  494. enabled = true;
  495. level = 1;
  496. score = 0;
  497. linesleft = 8;
  498. onUpdate = function(updates)
  499. {
  500.    var _loc1_ = this;
  501.    _loc1_.updates = updates;
  502.    _loc1_.countdown = FADE_NUM;
  503.    _loc1_.enabled = false;
  504.    for(var _loc2_ in _loc1_.updates)
  505.    {
  506.       cells[_loc1_.updates[_loc2_].y][_loc1_.updates[_loc2_].x]._alpha = 100;
  507.       if(_loc1_.updates[_loc2_].type != null)
  508.       {
  509.          cells[_loc1_.updates[_loc2_].y][_loc1_.updates[_loc2_].x].gotoAndStop(_loc1_.updates[_loc2_].type + 2);
  510.       }
  511.       else
  512.       {
  513.          cells[_loc1_.updates[_loc2_].y][_loc1_.updates[_loc2_].x].gotoAndStop(1);
  514.       }
  515.    }
  516.    _loc1_.enabled = true;
  517.    updateText();
  518. };
  519. showNext = function(next)
  520. {
  521.    var _loc2_ = next;
  522.    var _loc1_ = 0;
  523.    while(_loc1_ < _loc2_.length)
  524.    {
  525.       nextClips[_loc1_].gotoAndStop(_loc2_[_loc1_] + 2);
  526.       nextClips[_loc1_]._alpha = 30;
  527.       _loc1_ = _loc1_ + 1;
  528.    }
  529.    showCount = 0;
  530. };
  531. cellPress = function()
  532. {
  533.    var _loc1_ = this;
  534.    var _loc2_ = _loc1_._parent._parent.model.getType(_loc1_.x,_loc1_.y);
  535.    if(!_loc1_._parent._parent.paused && !_loc1_._parent._parent.halt)
  536.    {
  537.       if(_loc2_ == "block")
  538.       {
  539.          _loc1_._parent._parent.model.remove(_loc1_.x,_loc1_.y);
  540.       }
  541.       else if(_loc2_ == "bomb")
  542.       {
  543.          _loc1_._parent._parent.model.bomb(_loc1_.x,_loc1_.y);
  544.       }
  545.       else if(_loc2_ == "skull")
  546.       {
  547.          _loc1_._parent._parent.model.skull(_loc1_.x,_loc1_.y);
  548.          _loc1_._parent._parent.skullAdvance = true;
  549.          _loc1_._parent._parent.tick = _loc1_._parent._parent.tickDelay - 1;
  550.       }
  551.    }
  552. };
  553. init = function()
  554. {
  555.    var _loc1_ = undefined;
  556.    var num = 0;
  557.    this.grid_mc = this.createEmptyMovieClip("grid_mc",1);
  558.    this.grid_mc._x = 25;
  559.    this.grid_mc._y = 25;
  560.    this.cells = new Array();
  561.    var _loc3_ = 0;
  562.    while(_loc3_ < NUM_Y)
  563.    {
  564.       cells[_loc3_] = new Array();
  565.       var _loc2_ = 0;
  566.       while(_loc2_ < NUM_X)
  567.       {
  568.          _loc1_ = grid_mc.attachMovie("cell","cell" + num,num++);
  569.          _loc1_._x = xStart + _loc2_ * CELL_WIDTH;
  570.          _loc1_._y = yStart + _loc3_ * CELL_HEIGHT;
  571.          _loc1_.x = _loc2_;
  572.          _loc1_.y = _loc3_;
  573.          _loc1_.onPress = this.cellPress;
  574.          _loc1_.useHandCursor = false;
  575.          this.cells[_loc3_][_loc2_] = _loc1_;
  576.          _loc2_ = _loc2_ + 1;
  577.       }
  578.       _loc3_ = _loc3_ + 1;
  579.    }
  580.    nextClips = [];
  581.    _loc3_ = 0;
  582.    while(_loc3_ < NUM_Y)
  583.    {
  584.       nextClips[_loc3_] = grid_mc.attachMovie("cell","nextClip" + _loc3_,num++);
  585.       var nextMC = nextClips[_loc3_];
  586.       nextMC._x = xStart + _loc3_ * CELL_WIDTH;
  587.       nextMC._y = yStart + CELL_HEIGHT + NUM_Y * CELL_HEIGHT - 3;
  588.       _loc3_ = _loc3_ + 1;
  589.    }
  590.    this.model = new Model(NUM_X,NUM_Y,4);
  591.    this.model.addListener(this);
  592.    this.presenter = new Presenter(model,this);
  593.    this.model.reset(level);
  594.    updateText();
  595. };
  596. updateScore = function(scoreMult)
  597. {
  598.    score += 50 + scoreMult * 20;
  599.    updateText();
  600. };
  601. updateText = function()
  602. {
  603.    scoreText.text = score;
  604.    linesText.text = linesLeft;
  605.    levelText.text = level + 1;
  606. };
  607. updateTickDelay = function()
  608. {
  609.    return 120 - (level / 2 <= 10 ? level / 2 : 10) * 10;
  610. };
  611. var tick = 0;
  612. var tickDelay = updateTickDelay();
  613. var skullAdvance = false;
  614. var btwLevelDelayCount = 0;
  615. var btwLevelDelay = 90;
  616. halt = true;
  617. showCount = 0;
  618. mainLoop = function()
  619. {
  620.    var _loc1_ = this;
  621.    if(tick > showCount * (tickDelay / NUM_X))
  622.    {
  623.       if(!_loc1_.halt)
  624.       {
  625.          core.s_timer.setVolume(Math.ceil(40 * ((showCount + 1) / nextClips.length)));
  626.          core.s_timer.start(0,1);
  627.       }
  628.       nextClips[showCount]._alpha = 100;
  629.       showCount++;
  630.    }
  631.    if(++tick > tickDelay)
  632.    {
  633.       if(linesLeft > 1)
  634.       {
  635.          tick = 0;
  636.          _loc1_.model.addRow();
  637.          if(!skullAdvance)
  638.          {
  639.             linesLeft--;
  640.             updateText();
  641.          }
  642.          skullAdvance = false;
  643.       }
  644.       else if(++btwLevelDelayCount < btwLevelDelay)
  645.       {
  646.          halt = true;
  647.          feedBack._visible = true;
  648.          feedBack.gotoAndStop("levelComplete");
  649.       }
  650.       else
  651.       {
  652.          model.endGame = false;
  653.          btwLevelDelayCount = 0;
  654.          tick = 0;
  655.          level++;
  656.          tickDelay = updateTickDelay();
  657.          linesleft = 8 + level;
  658.          updateText();
  659.          _loc1_.model.reset(level);
  660.          feedBack._visible = false;
  661.          _loc1_.prompter._visible = 1;
  662.          _loc1_.prompter.gotoAndPlay(1);
  663.          delete _loc1_.onEnterFrame;
  664.       }
  665.    }
  666. };
  667. startGame = function()
  668. {
  669.    var _loc1_ = this;
  670.    _loc1_.pauseButton._visible = 1;
  671.    _loc1_.infoButton._visible = 1;
  672.    _loc1_.paused = false;
  673.    _loc1_.halt = false;
  674.    _loc1_.onEnterFrame = _loc1_.mainLoop;
  675. };
  676. gameOver = function()
  677. {
  678.    feedBack._visible = 1;
  679.    feedBack.gotoAndStop("gameOver");
  680.    halt = true;
  681.    tick = 0;
  682.    tickDelay = updateTickDelay();
  683.    skullAdvance = false;
  684.    btwLevelDelayCount = 0;
  685.    btwLevelDelay = 90;
  686.    showCount = 0;
  687.    begun = false;
  688.    startButton._visible = 1;
  689.    pauseButton._visible = 0;
  690.    delete this.onEnterFrame;
  691. };
  692. instructions._visible = prompter._visible = pauseButton._visible = resumeButton._visible = highlight._visible = feedback._visible = 0;
  693. startButton.onRollOver = startScreen.onRollOver = function()
  694. {
  695.    highLight._visible = 1;
  696. };
  697. pauseButton.onRollOver = resumeButton.onRollOver = function()
  698. {
  699.    if(!this._parent.halt)
  700.    {
  701.       highLight._visible = 1;
  702.    }
  703. };
  704. startButton.onRollOut = startButton.onReleaseOutside = pauseButton.onRollOut = pauseButton.onReleaseOutside = resumeButton.onRollOut = resumeButton.onReleaseOutside = startScreen.onReleaseOutside = startScreen.onRollOut = function()
  705. {
  706.    highLight._visible = 0;
  707. };
  708. startButton.onRelease = startScreen.onRelease = function()
  709. {
  710.    var _loc1_ = this;
  711.    _loc1_._parent.startscreen.visible = _loc1_._parent.startButton._visible = 0;
  712.    _loc1_._parent.startScreen._visible = 0;
  713.    _loc1_._parent.feedBack._visible = 0;
  714.    _loc1_._parent.prompter._visible = 1;
  715.    _loc1_._parent.instructions._visible = 0;
  716.    _loc1_._parent.level = 0;
  717.    _loc1_._parent.score = 0;
  718.    _loc1_._parent.linesleft = 8;
  719.    _loc1_._parent.updateText();
  720.    _loc1_._parent.begun = true;
  721.    if(!starter)
  722.    {
  723.       starter = true;
  724.       _loc1_._parent.init();
  725.    }
  726.    else
  727.    {
  728.       _loc1_._parent.model.reset(0);
  729.    }
  730.    _loc1_._parent.prompter.gotoAndPlay(1);
  731. };
  732. pauseButton.onRelease = function()
  733. {
  734.    var _loc1_ = this;
  735.    if(!_loc1_._parent.halt)
  736.    {
  737.       _loc1_._parent.resumeButton._visible = 1;
  738.       _loc1_._visible = 0;
  739.       _loc1_._parent.feedback._visible = 1;
  740.       _loc1_._parent.paused = true;
  741.       _loc1_._parent.feedback.gotoAndStop("paused");
  742.       delete _loc1_._parent.onEnterFrame;
  743.    }
  744. };
  745. resumeButton.onRelease = function()
  746. {
  747.    var _loc1_ = this;
  748.    if(!_loc1_._parent.halt)
  749.    {
  750.       _loc1_._parent.pauseButton._visible = 1;
  751.       _loc1_._parent.paused = false;
  752.       _loc1_._visible = 0;
  753.       _loc1_._parent.feedback._visible = _loc1_._parent.instructions._visible = 0;
  754.       _loc1_._parent.onEnterFrame = _loc1_._parent.mainLoop;
  755.    }
  756. };
  757. infoButton.onRelease = function()
  758. {
  759.    var _loc1_ = this;
  760.    if(!_loc1_._parent.halt)
  761.    {
  762.       _loc1_._parent.resumeButton._visible = 1;
  763.       _loc1_._parent.paused = true;
  764.       _loc1_._parent.instructions._visible = 1;
  765.       delete _loc1_._parent.onEnterFrame;
  766.    }
  767.    else if(!_loc1_._parent.begun)
  768.    {
  769.       _loc1_._parent.instructions._visible = 1;
  770.    }
  771. };
  772.