|  | @@ -62,6 +62,7 @@ const squareOne = {
 | 
	
		
			
				|  |  |      this.control = {
 | 
	
		
			
				|  |  |        direc: gameOperation == 'minus' ? -1 : 1, // Will be multiplied to values to easily change tractor direction when needed
 | 
	
		
			
				|  |  |        divisorsList: '', // Hold the divisors for each fraction on stacked blocks (created for postScore())
 | 
	
		
			
				|  |  | +      lineWidth: 4,
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        hasClicked: false, // Checks if player 'clicked' on a block
 | 
	
		
			
				|  |  |        checkAnswer: false, // When true allows game to run 'check answer' code in update
 | 
	
	
		
			
				|  | @@ -136,9 +137,14 @@ const squareOne = {
 | 
	
		
			
				|  |  |      this.restart = this.utils.renderStackedBlocks(
 | 
	
		
			
				|  |  |        this.control.direc,
 | 
	
		
			
				|  |  |        lineColor,
 | 
	
		
			
				|  |  | -      fillColor
 | 
	
		
			
				|  |  | +      fillColor,
 | 
	
		
			
				|  |  | +      this.control.lineWidth
 | 
	
		
			
				|  |  | +    );
 | 
	
		
			
				|  |  | +    this.utils.renderFloorBlocks(
 | 
	
		
			
				|  |  | +      this.control.direc,
 | 
	
		
			
				|  |  | +      lineColor,
 | 
	
		
			
				|  |  | +      this.control.lineWidth
 | 
	
		
			
				|  |  |      );
 | 
	
		
			
				|  |  | -    this.utils.renderFloorBlocks(this.control.direc, lineColor);
 | 
	
		
			
				|  |  |      this.utils.renderCharacters();
 | 
	
		
			
				|  |  |      this.utils.renderUI(this.control.direc);
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -178,12 +184,10 @@ const squareOne = {
 | 
	
		
			
				|  |  |       *
 | 
	
		
			
				|  |  |       * @returns {boolean}
 | 
	
		
			
				|  |  |       */
 | 
	
		
			
				|  |  | -    renderStackedBlocks: function (direc, lineColor, fillColor) {
 | 
	
		
			
				|  |  | +    renderStackedBlocks: function (direc, lineColor, fillColor, lineWidth) {
 | 
	
		
			
				|  |  |        let restart = false;
 | 
	
		
			
				|  |  |        let hasBaseDifficulty = false; // Will be true after next for loop if level has at least one '1/difficulty' fraction (if false, restart)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -      const lineSize = 3;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |        const max = gameMode == 'b' ? 10 : curMapPosition + 4; // Maximum number of stacked blocks for the level
 | 
	
		
			
				|  |  |        const total = game.math.randomInRange(curMapPosition + 2, max); // Current number of stacked blocks for the level
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -203,11 +207,11 @@ const squareOne = {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          const curBlock = game.add.geom.rect(
 | 
	
		
			
				|  |  |            self.default.x0,
 | 
	
		
			
				|  |  | -          self.default.y0 - i * (self.default.height - lineSize),
 | 
	
		
			
				|  |  | -          curBlockWidth - lineSize,
 | 
	
		
			
				|  |  | -          self.default.height - lineSize,
 | 
	
		
			
				|  |  | +          self.default.y0 - i * self.default.height,
 | 
	
		
			
				|  |  | +          curBlockWidth,
 | 
	
		
			
				|  |  | +          self.default.height,
 | 
	
		
			
				|  |  |            lineColor,
 | 
	
		
			
				|  |  | -          lineSize,
 | 
	
		
			
				|  |  | +          lineWidth,
 | 
	
		
			
				|  |  |            fillColor,
 | 
	
		
			
				|  |  |            1
 | 
	
		
			
				|  |  |          );
 | 
	
	
		
			
				|  | @@ -224,7 +228,7 @@ const squareOne = {
 | 
	
		
			
				|  |  |          // If 'show fractions' is turned on, create labels that display the fractions on the side of each block
 | 
	
		
			
				|  |  |          if (showFractions) {
 | 
	
		
			
				|  |  |            const x = self.default.x0 + (curBlockWidth + 40) * direc;
 | 
	
		
			
				|  |  | -          const y = self.default.height - lineSize;
 | 
	
		
			
				|  |  | +          const y = self.default.height;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |            if (curDivisor === 1) {
 | 
	
		
			
				|  |  |              font = textStyles.h2_;
 | 
	
	
		
			
				|  | @@ -313,9 +317,7 @@ const squareOne = {
 | 
	
		
			
				|  |  |      /**
 | 
	
		
			
				|  |  |       * Create floor blocks for the level in create()
 | 
	
		
			
				|  |  |       */
 | 
	
		
			
				|  |  | -    renderFloorBlocks: function (direc, lineColor) {
 | 
	
		
			
				|  |  | -      const lineSize = 2;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +    renderFloorBlocks: function (direc, lineColor, lineWidth) {
 | 
	
		
			
				|  |  |        // For each floor block
 | 
	
		
			
				|  |  |        const divisor = gameDifficulty == 3 ? 4 : gameDifficulty; // Make sure valid divisors are 1, 2 and 4 (not 3)
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -343,7 +345,7 @@ const squareOne = {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        for (let i = 0; i < total; i++) {
 | 
	
		
			
				|  |  |          const curX =
 | 
	
		
			
				|  |  | -          self.default.x0 + (self.default.width + i * blockWidth) * direc; //lineSize;
 | 
	
		
			
				|  |  | +          self.default.x0 + (self.default.width + i * blockWidth) * direc;
 | 
	
		
			
				|  |  |          if (flag && gameMode == 'a') {
 | 
	
		
			
				|  |  |            if (
 | 
	
		
			
				|  |  |              (gameOperation == 'plus' && curX >= self.blocks.floor.correctXA) ||
 | 
	
	
		
			
				|  | @@ -367,11 +369,11 @@ const squareOne = {
 | 
	
		
			
				|  |  |          // Create floor block
 | 
	
		
			
				|  |  |          const curBlock = game.add.geom.rect(
 | 
	
		
			
				|  |  |            curX,
 | 
	
		
			
				|  |  | -          self.default.y0 - lineSize, // + self.default.height - lineSize,
 | 
	
		
			
				|  |  | -          blockWidth - lineSize,
 | 
	
		
			
				|  |  | -          self.default.height - lineSize - 20,
 | 
	
		
			
				|  |  | +          self.default.y0,
 | 
	
		
			
				|  |  | +          blockWidth,
 | 
	
		
			
				|  |  | +          self.default.height - 20,
 | 
	
		
			
				|  |  |            lineColor,
 | 
	
		
			
				|  |  | -          lineSize,
 | 
	
		
			
				|  |  | +          lineWidth,
 | 
	
		
			
				|  |  |            colors.blueBgInsideLevel,
 | 
	
		
			
				|  |  |            1
 | 
	
		
			
				|  |  |          );
 | 
	
	
		
			
				|  | @@ -435,7 +437,7 @@ const squareOne = {
 | 
	
		
			
				|  |  |        self.help = game.add.image(0, 0, 'pointer', 1.7, 0);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        if (gameMode === 'b') self.help.anchor(0.25, 0.7);
 | 
	
		
			
				|  |  | -      else self.help.anchor(0.5, 0);
 | 
	
		
			
				|  |  | +      else self.help.anchor(0.2, 0);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        // Selection Arrow
 | 
	
		
			
				|  |  |        if (gameMode == 'a') {
 | 
	
	
		
			
				|  | @@ -509,79 +511,23 @@ const squareOne = {
 | 
	
		
			
				|  |  |        const stack = self.blocks.stack;
 | 
	
		
			
				|  |  |        const floor = self.blocks.floor;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -      // MANAGE HORIZONTAL MOVEMENT
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |        // Move
 | 
	
		
			
				|  |  |        self.tractor.x += self.animation.speed;
 | 
	
		
			
				|  |  | -      for (let i in stack.list) {
 | 
	
		
			
				|  |  | -        stack.list[i].x += self.animation.speed;
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | +      stack.list.forEach((cur) => (cur.x += self.animation.speed));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -      // MANAGE BLOCKS AND FLOOR GAPS
 | 
	
		
			
				|  |  | -      // If block is 1/n (not 1/1) there's an extra block space to go through before the start of next block
 | 
	
		
			
				|  |  | +      // If block is 1/n (not 1/1) there is an extra block space
 | 
	
		
			
				|  |  | +      // to go through before the start of next block
 | 
	
		
			
				|  |  |        const restOfCurBlock =
 | 
	
		
			
				|  |  |          (self.default.width - stack.list[stack.curIndex].width) *
 | 
	
		
			
				|  |  |          self.control.direc;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -      // Check if block falls
 | 
	
		
			
				|  |  |        if (
 | 
	
		
			
				|  |  |          (gameOperation == 'plus' &&
 | 
	
		
			
				|  |  |            stack.list[0].x >= stack.curBlockEnd + restOfCurBlock) ||
 | 
	
		
			
				|  |  |          (gameOperation == 'minus' &&
 | 
	
		
			
				|  |  |            stack.list[0].x <= stack.curBlockEnd + restOfCurBlock)
 | 
	
		
			
				|  |  |        ) {
 | 
	
		
			
				|  |  | -        let lowerBlock = true;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        const curEnd =
 | 
	
		
			
				|  |  | -          stack.list[0].x +
 | 
	
		
			
				|  |  | -          stack.list[stack.curIndex].width * self.control.direc;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        // If current index is (a) last stacked index (correct index - fixed)
 | 
	
		
			
				|  |  | -        // If current index is (b) selected stacked index
 | 
	
		
			
				|  |  | -        if (stack.curIndex == stack.index) {
 | 
	
		
			
				|  |  | -          // floor.index : (a) selected floor index
 | 
	
		
			
				|  |  | -          // floor.index : (b) last floor index (correct index - fixed)
 | 
	
		
			
				|  |  | -          const selectedEnd =
 | 
	
		
			
				|  |  | -            floor.list[floor.index].x +
 | 
	
		
			
				|  |  | -            floor.list[0].width * self.control.direc;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -          // (a) last stacked block (fixed) doesnt fit selected gap AKA NOT ENOUGH FLOOR BLOCKS (DOESNT CHECK TOO MANY)
 | 
	
		
			
				|  |  | -          // (b) selected stacked index doesnt fit last floor gap (fixed) AKA TOO MANY STACKED BLOCKS (DOESNT CHECK NOT ENOUGH)
 | 
	
		
			
				|  |  | -          if (
 | 
	
		
			
				|  |  | -            (gameOperation == 'plus' && curEnd > selectedEnd) ||
 | 
	
		
			
				|  |  | -            (gameOperation == 'minus' && curEnd < selectedEnd)
 | 
	
		
			
				|  |  | -          ) {
 | 
	
		
			
				|  |  | -            lowerBlock = false;
 | 
	
		
			
				|  |  | -          }
 | 
	
		
			
				|  |  | -        } else {
 | 
	
		
			
				|  |  | -          // Update to next block end
 | 
	
		
			
				|  |  | -          stack.curBlockEnd +=
 | 
	
		
			
				|  |  | -            stack.list[stack.curIndex + 1].width * self.control.direc;
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        // Fill floor gap
 | 
	
		
			
				|  |  | -        if (lowerBlock) {
 | 
	
		
			
				|  |  | -          // Until (a) selected floor index
 | 
	
		
			
				|  |  | -          // Until (b) last floor index (correct index - fixed)
 | 
	
		
			
				|  |  | -          // Updates floor index to be equivalent to stacked index (and change alpha so floor appears to be filled)
 | 
	
		
			
				|  |  | -          for (let i = 0; i <= floor.index; i++) {
 | 
	
		
			
				|  |  | -            if (
 | 
	
		
			
				|  |  | -              (gameOperation == 'plus' && floor.list[i].x < curEnd) ||
 | 
	
		
			
				|  |  | -              (gameOperation == 'minus' && floor.list[i].x > curEnd)
 | 
	
		
			
				|  |  | -            ) {
 | 
	
		
			
				|  |  | -              floor.list[i].alpha = 0; //.2;
 | 
	
		
			
				|  |  | -              floor.curIndex = i;
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -          }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -          // Lower
 | 
	
		
			
				|  |  | -          stack.list[stack.curIndex].alpha = 0;
 | 
	
		
			
				|  |  | -          stack.list.forEach((cur) => {
 | 
	
		
			
				|  |  | -            cur.y += self.default.height - 2;
 | 
	
		
			
				|  |  | -          }); // Lower stacked blocks
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        stack.curIndex++;
 | 
	
		
			
				|  |  | +        self.utils.checkIfBlockFalls(stack, floor, restOfCurBlock);
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        // WHEN REACHED END POSITION
 | 
	
	
		
			
				|  | @@ -590,6 +536,58 @@ const squareOne = {
 | 
	
		
			
				|  |  |          self.control.checkAnswer = true;
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  | +    checkIfBlockFalls: (stack, floor) => {
 | 
	
		
			
				|  |  | +      let lowerBlock = true;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      const curEnd =
 | 
	
		
			
				|  |  | +        stack.list[0].x + stack.list[stack.curIndex].width * self.control.direc;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      // If current index is (a) last stacked index (correct index - fixed)
 | 
	
		
			
				|  |  | +      // If current index is (b) selected stacked index
 | 
	
		
			
				|  |  | +      if (stack.curIndex == stack.index) {
 | 
	
		
			
				|  |  | +        // floor.index : (a) selected floor index
 | 
	
		
			
				|  |  | +        // floor.index : (b) last floor index (correct index - fixed)
 | 
	
		
			
				|  |  | +        const selectedEnd =
 | 
	
		
			
				|  |  | +          floor.list[floor.index].x + floor.list[0].width * self.control.direc;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // (a) last stacked block (fixed) doesnt fit selected gap AKA NOT ENOUGH FLOOR BLOCKS (DOESNT CHECK TOO MANY)
 | 
	
		
			
				|  |  | +        // (b) selected stacked index doesnt fit last floor gap (fixed) AKA TOO MANY STACKED BLOCKS (DOESNT CHECK NOT ENOUGH)
 | 
	
		
			
				|  |  | +        if (
 | 
	
		
			
				|  |  | +          (gameOperation == 'plus' && curEnd > selectedEnd) ||
 | 
	
		
			
				|  |  | +          (gameOperation == 'minus' && curEnd < selectedEnd)
 | 
	
		
			
				|  |  | +        ) {
 | 
	
		
			
				|  |  | +          lowerBlock = false;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      } else {
 | 
	
		
			
				|  |  | +        // Update to next block end
 | 
	
		
			
				|  |  | +        stack.curBlockEnd +=
 | 
	
		
			
				|  |  | +          stack.list[stack.curIndex + 1].width * self.control.direc;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      // Fill floor gap
 | 
	
		
			
				|  |  | +      if (lowerBlock) {
 | 
	
		
			
				|  |  | +        // Until (a) selected floor index
 | 
	
		
			
				|  |  | +        // Until (b) last floor index (correct index - fixed)
 | 
	
		
			
				|  |  | +        // Updates floor index to be equivalent to stacked index (and change alpha so floor appears to be filled)
 | 
	
		
			
				|  |  | +        for (let i = 0; i <= floor.index; i++) {
 | 
	
		
			
				|  |  | +          if (
 | 
	
		
			
				|  |  | +            (gameOperation == 'plus' && floor.list[i].x < curEnd) ||
 | 
	
		
			
				|  |  | +            (gameOperation == 'minus' && floor.list[i].x > curEnd)
 | 
	
		
			
				|  |  | +          ) {
 | 
	
		
			
				|  |  | +            floor.list[i].alpha = 0;
 | 
	
		
			
				|  |  | +            floor.curIndex = i;
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // Lower
 | 
	
		
			
				|  |  | +        stack.list[stack.curIndex].alpha = 0;
 | 
	
		
			
				|  |  | +        stack.list.forEach((cur) => {
 | 
	
		
			
				|  |  | +          cur.y += self.default.height;
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      stack.curIndex++;
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  |      checkAnswer: () => {
 | 
	
		
			
				|  |  |        game.timer.stop();
 | 
	
		
			
				|  |  |  
 |