require 'funcs'

local SurvivalA3Game = require 'tetris.modes.survival_a3'

local BigMemeGame = SurvivalA3Game:extend()

BigMemeGame.name = "Big Survival A3"
BigMemeGame.hash = "BigA3"
BigMemeGame.tagline = "The blocks are bigger and the speeds are faster!"

function BigMemeGame:new()
	SurvivalA3Game:new()
end

function BigMemeGame:initialize(ruleset)
    self.super:initialize(ruleset)
    self.big_mode = true
end

local cleared_row_levels = {1, 2, 4, 6}

function BigMemeGame:onLineClear(cleared_row_count)
    cleared_row_count = cleared_row_count / 2
    if not self.clear then
		local new_level = self.level + cleared_row_levels[cleared_row_count]
		self:updateSectionTimes(self.level, new_level)
		if new_level >= 1300 or self:hitTorikan(self.level, new_level) then
			self.clear = true
			if new_level >= 1300 then
				self.level = 1300
				self.grid:clear()
				self.big_mode = true
				self.roll_frames = -150
			else
				self.game_over = true
			end
		else
			self.level = math.min(new_level, 1300)
		end
		self:advanceBottomRow(-cleared_row_count)
	end
end

function BigMemeGame:advanceBottomRow(dx)
	if self.level >= 500 and self.level < 1000 then
		self.garbage = math.max(self.garbage + dx, 0)
		if self.garbage >= self:getGarbageLimit() then
			self.grid:copyBottomRow()
			self.grid:copyBottomRow()
			self.garbage = 0
		end
	end
end

return BigMemeGame