Classic mode updates

C88: Select a gravity multiplier up to 4x
C89: Menu
This commit is contained in:
Ishaan Bhardwaj 2021-01-05 22:03:10 -05:00
parent 344425770c
commit 8cf4328264
2 changed files with 69 additions and 18 deletions

View File

@ -11,7 +11,7 @@ MarathonC88Game.name = "Marathon C88"
MarathonC88Game.hash = "MarathonC88" MarathonC88Game.hash = "MarathonC88"
MarathonC88Game.tagline = "An old Japanese game! Can you hit the max score?" MarathonC88Game.tagline = "An old Japanese game! Can you hit the max score?"
function MarathonC88Game:new() function MarathonC88Game:new(secret_inputs)
self.super:new() self.super:new()
self.level_timer = 0 self.level_timer = 0
@ -19,6 +19,16 @@ function MarathonC88Game:new()
self.tetrises = 0 self.tetrises = 0
self.line_clears = 0 self.line_clears = 0
if secret_inputs.rotate_left and secret_inputs.rotate_right then
self.gravity_multiplier = 4
elseif secret_inputs.rotate_left then
self.gravity_multiplier = 2
elseif secret_inputs.rotate_right then
self.gravity_multiplier = 3
else
self.gravity_multiplier = 1
end
self.randomizer = SegaRandomizer() self.randomizer = SegaRandomizer()
self.lock_drop = false self.lock_drop = false
@ -52,20 +62,24 @@ function MarathonC88Game:getLineClearDelay() return 42 end
function MarathonC88Game:getLockDelay() return 30 end function MarathonC88Game:getLockDelay() return 30 end
function MarathonC88Game:getGravity() function MarathonC88Game:getGravity()
if self.level == 0 then return 1/30 local gravity
elseif self.level == 1 then return 1/15
elseif self.level == 2 then return 1/12 if self.level == 0 then gravity = 1/30
elseif self.level == 3 then return 1/10 elseif self.level == 1 then gravity = 1/15
elseif self.level == 4 then return 1/8 elseif self.level == 2 then gravity = 1/12
elseif self.level == 5 then return 1/6 elseif self.level == 3 then gravity = 1/10
elseif self.level == 6 then return 1/4 elseif self.level == 4 then gravity = 1/8
elseif self.level == 7 then return 1/2 elseif self.level == 5 then gravity = 1/6
elseif self.level <= 9 then return 1 elseif self.level == 6 then gravity = 1/4
elseif self.level == 10 then return 1/8 elseif self.level == 7 then gravity = 1/2
elseif self.level == 11 then return 1/6 elseif self.level <= 9 then gravity = 1
elseif self.level == 12 then return 1/4 elseif self.level == 10 then gravity = 1/8
elseif self.level == 13 then return 1/2 elseif self.level == 11 then gravity = 1/6
else return 1 end elseif self.level == 12 then gravity = 1/4
elseif self.level == 13 then gravity = 1/2
else gravity = 1 end
return gravity * self.gravity_multiplier
end end
function MarathonC88Game:getLevelTimerLimit() function MarathonC88Game:getLevelTimerLimit()
@ -129,6 +143,12 @@ function MarathonC88Game:drawScoringInfo()
love.graphics.printf("SCORE", 240, 120, 40, "left") love.graphics.printf("SCORE", 240, 120, 40, "left")
love.graphics.printf("LINES", 240, 200, 40, "left") love.graphics.printf("LINES", 240, 200, 40, "left")
love.graphics.printf("LEVEL", 240, 280, 40, "left") love.graphics.printf("LEVEL", 240, 280, 40, "left")
if self.gravity_multiplier ~= 1 then
love.graphics.printf(
self.gravity_multiplier .. "x GRAVITY ACTIVE!",
240, 350, 150, "left"
)
end
love.graphics.setFont(font_3x5_3) love.graphics.setFont(font_3x5_3)
if self.score >= 999999 then love.graphics.setColor(1, 1, 0, 1) end if self.score >= 999999 then love.graphics.setColor(1, 1, 0, 1) end

View File

@ -19,6 +19,7 @@ function MarathonC89Game:new()
self.ready_frames = 1 self.ready_frames = 1
self.waiting_frames = 96 self.waiting_frames = 96
self.in_menu = true
self.start_level = 18 self.start_level = 18
self.level = self.start_level self.level = self.start_level
@ -126,8 +127,19 @@ function MarathonC89Game:getGravity()
else return gravity_table[self.level] end else return gravity_table[self.level] end
end end
function MarathonC89Game:advanceOneFrame() function MarathonC89Game:advanceOneFrame(inputs, ruleset)
if self.waiting_frames > 0 then if self.in_menu then
if not self.prev_inputs["right"] and inputs["right"] then
self.start_level = math.min(29, self.start_level + 1)
elseif not self.prev_inputs["left"] and inputs["left"] then
self.start_level = math.max(0, self.start_level - 1)
elseif inputs["hold"] then
self.in_menu = false
end
self.level = self.start_level
self.prev_inputs = copy(inputs)
return false
elseif self.waiting_frames > 0 then
self.waiting_frames = self.waiting_frames - 1 self.waiting_frames = self.waiting_frames - 1
else else
self.frames = self.frames + 1 self.frames = self.frames + 1
@ -195,9 +207,28 @@ function MarathonC89Game:drawScoringInfo()
love.graphics.printf(formatTime(self.frames), 64, 420, 160, "center") love.graphics.printf(formatTime(self.frames), 64, 420, 160, "center")
end end
function MarathonC89Game:drawCustom()
love.graphics.setColor(1, 1, 1, 1)
if self.in_menu then
love.graphics.setFont(font_3x5_3)
love.graphics.printf("CHOOSE A LEVEL", 64, 120, 160, "center")
love.graphics.setFont(font_3x5_4)
love.graphics.printf(
(self.start_level == 0 and "-- " or "<- ") ..
(self.start_level <= 9 and 0 .. self.start_level or self.start_level) ..
(self.start_level == 29 and " --" or " ->"),
64, 200, 160, "center"
)
love.graphics.setFont(font_3x5_2)
love.graphics.printf("Press hold to start", 64, 260, 160, "center")
end
end
function MarathonC89Game:getBackground() function MarathonC89Game:getBackground()
return math.min(self.level, 19) return self.level % 20
end end
function MarathonC89Game:getHighscoreData() function MarathonC89Game:getHighscoreData()