cambridge-modpack/tetris/modes/fpviewer.lua
2021-02-06 19:53:25 -05:00

2081 lines
24 KiB
Lua

local GameMode = require 'tetris.modes.gamemode'
local FlashPointViewer = GameMode:extend()
FlashPointViewer.name = "FP Board Viewer"
FlashPointViewer.hash = "FPViewer"
FlashPointViewer.tagline = "See all of Flash Point's boards!"
local board_str = [[
CC
ZZ
ZZ
SSSS
SSSS
SSSS
TTTTTT
TTTTTT
TTTTTT
OOOOOOOO
OOOOOOOO
OOOOOOOO
Z Z Z Z
Z Z Z Z
Z Z Z Z
Z Z C Z
Z Z Z Z
Z Z Z Z
Z Z Z Z
Z Z Z Z
Z Z Z Z
LLLLL
C L
L
L
LLLLL
L
L
L
LLLLL
C Z
ZZ
ZZZ
ZZZZ
ZZZZZ
ZZZZZZ
ZZZZZZZ
ZZZZZZZZ
ZZZZZZZZZ
SS
SS
CC
SS
SS
SS
LL
LL
CC
LL
LL
LL
SSSSSSSS
SSSS SS
SS SS
CSSS SS
SSSSSSSS
C
L L
L L
LL LL
LL LL
LLL LLL
LLL LLL
LLLL LLLL
LLLL LLLL
JJJJ
J J
JC J
JJJJ
SSSSSSS
SSSSSSS
C
OO
OO
OOOO
OOOO
OOOOOO
OOOOOO
OOOO
OOOO
OO
CO
TTTT
T
T
T
TTTT
T C
T
T
TTTT
ZZ ZZ
ZZZZ ZZZZ
ZZ C ZZ
T T
T T
T T
T C
TT
I L
I L
I L
I L
I L
I L
I L
I L
C L
I L
I L
I L
I L
I L
I L
I L
I L
IIII
II
II
I II I
II
II
IIII
CII
II
I II I
II
II
Z Z
Z Z Z
C Z
Z
Z
ZZZZZ
Z
OOOO
OOOO
OOOO
OOOO
OOOO
OOOO
C
OOOO
OOOO
OOOO
OOOO
OOOO
OOOO
SS
SS SS
SS SS
SS SS
SS
C
C
Z Z
Z Z
Z Z
Z Z
ZZ ZZ
ZZ ZZ
ZZ ZZ
ZZ ZZ
ZZZ ZZZ
ZZZ ZZZ
ZZZ ZZZ
ZZZ ZZZ
ZZZZ ZZZZ
ZZZZ ZZZZ
ZZZZ ZZZZ
ZZZZ ZZZZ
ZZ Z
Z Z Z
Z Z Z
Z ZZ
Z Z
C
ZZZZ
Z
Z
Z
ZZZZ
ZZZZ
Z
Z
ZZZZ
C
L
LLL
LLLLL
L
LLL
LLLLL
C
Z S T O
Z S T O
Z S T O
Z S T O
Z S T O
Z S T O
Z S T O
Z C T O
Z S T O
Z S T O
Z S T O
Z S T O
Z S T O
Z S T O
Z S T O
Z S T O
Z S T O
IIIIII
IIIIII
IIIIII
IIICII
IIIIIIII
I IIIIII I
II IIII II
III II III
IIII IIIC
Z Z
ZZ ZZ
ZZZ ZZZ
ZZZZ ZZZZ
ZZZ ZZZ
ZZ ZZ
C
Z Z
ZZZZZZZZ
ZZZZZZZ
ZZZZZZ
ZZZZZ
ZZZZ
ZZZ
ZZ
Z
C
ZZ
ZZZ
ZZZZ
ZZZZZ
ZZZZZZ
ZZZZZZZ
ZZZZZZZZ
I
III
IIIII
III
I
I
III
IIIII
III
C
SSSSSSSS
SSSS SSSSS
SSSSSSS S
SSSSSSS S
S
S
SS SSSSSSS
SS SSSSSSS
SS SSSSSSS
SS SSCSSSS
JJJJ
J
J
J
JJJJ
J
J
J
JJJJ
J
J
J
JJJJ
C J
J
J
IIII IIII
III III
II II
I I
I C I
II II
III III
IIII IIII
SSSSSS
SS
S S
S S
C
ZZZZZZZZZ
SSSSSSSS
TTTTTTT
OOOOOO
IIIII
LLLL
JJJ
ZZ
C
ZZZZZZZZ
ZZZZZZZZ
ZZZZZZZ
ZZZZZZZ
ZZZZCZZ
Z Z
Z Z
Z Z
Z Z C
Z Z
Z Z
Z Z
Z Z
ZZZZZZZZZ
S SSSSSSSS
TT TTTTTTT
OOO OOOOOO
IIII IIIII
LLLLL LLLL
JJJJJC JJJ
OO OO OO
OO OO
OO OO OO
C
J J
JJ JJ
JJJ JJJ
JJJJ JJJJ
JJJ JJJ
JJ JJ
J J
C
J J
JJ JJ
JJJ JJJ
JJJJ JJJJ
JJJ JJJ
JJ JJ
J J
SSSSS
S
S
SSSSS
S
S
SSSSS
S
S C
SSSSS
S
S
SSSSS
S
S
SSSSS
OOOO
OOOO OOO
OOOO
OOO OOOO
C
IIIIII
II
II
II
ZZ II ZZ
II
II
II
IIIIII
II
CI
II
ZZ II ZZ
II
II
II
OO
OOOO
OOOOOO
TT
TTTT
TTTTTT
C
SS
SSSS
SSSSSS
S
S
S
S
S
S
S
S
S
S C
Z Z Z Z
Z Z Z Z
Z ZZZZZZZ
Z ZZZZZZC
Z ZZZZZZZ
Z ZZZZZZC
S S
S S S S
S SS S
S S
S S S S
S C SS C S
T T
T T
T T
TT
TT TT
T T
T T
T T
C
II
IIII
IIIIII
IIII
II
LL
LLLL
LLLLLL
LLLL
CL
ZZZZZZ
Z Z
Z Z
Z Z
ZZZZZZ
Z Z
Z C Z
Z Z
ZZZZZZ
Z Z
Z Z
Z Z
ZZZZZZ
Z Z
Z Z
Z Z
I I
I I
I I I I
I I I I
I C II C I
I II I
I I I I
I I I I
I I
I I
TTTTTT
TTTTTTT
TTTT
C C
TTTT
TTTT TTTT
TT TT
TT TT
TT C TTT
ZZZZZZZZ
ZZ ZZ
ZZZZ
ZZ
JJ
JJJJ
JJC JJ
JJJJJJJJ
LLLLLL
L L
L C L
L L
L L
LLLLLL
L L
L L
L L
L L
L L
L L
L L
L L
L L
L L
L L
L L
CLL
LL
LL
ZZZZ ZZZZ
ZZZZ ZZZZ
ZZZ ZZZ
ZZZ ZZZ
ZZ ZZ
ZZ ZZ
Z C Z
Z C Z
ZZ ZZ
ZZ ZZ
ZZZ ZZZ
ZZZ ZZZ
ZZZZ ZZZZ
ZZZZ ZZZZ
LLLLLLLL
L
L
L
L
L
LL
LL
L
L
L C
L
L
LLLLLLLL
J JJJJ
J J J
J J J
J C J
J J J
J J J
JJJ J
II
II II
II II
II II
II
II
II II
II II
II II
C II C
Z
ZZ
ZZZ
ZZZZ
ZZZZZ
ZZZZZZ
ZZZZZZZ
ZZZZZZZZ
ZZZZZZZZ
ZZZZZZZ
ZZZZZZ
ZZZCZ
ZZZZ
ZZZ
ZZ
Z
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
C O
T T
T T
T T
T T
T T
T T
T T
T C T
Z
Z Z
Z Z
Z Z
Z Z
Z Z
ZZZZ
Z Z
Z Z
Z Z
ZC Z
Z Z
Z Z
Z Z
C C
ZZZZZZZZZ
ZZZZZZZZZ
ZZZZZZZZZ
ZZZZZZZZZ
ZZZZZZZZZ
ZZZZZZZZZ
ZZZZZZZZZ
ZZZZZZZZZ
Z Z
Z Z
Z Z
Z Z
ZC
ZZ ZZ
Z Z
Z Z
Z Z
S S
SCS SCS
S S
S S
SCS SCS
S S
S S
SCS SCS
S S
S T
S T
S T
S T
S S T T
S S T T
S S T T
S S T T
S ST T
S ST T
S C ST C T
S ST T
ZZ
ZZ
ZZ
ZZ
ZZ
ZZ
ZZ
ZZ
C ZZ
ZZ
ZZ
ZZ
SSSSSSSS
S S
S SSSS S
S S S S
S S CS S
S S S S
S S SS S
S S S
S SSSSSS
O O
O O
O O
O O
O O
O O
O O
O O
O O
O O
O O
O O C
SS
SSSS
SSSSSS
SSSSSSSS
SS
SSSS
SSSSSS
SSSSSSSS
C
ZZZZZZZZ
ZZ
ZZ
ZZ
SSS ZZ SSS
ZZ
ZZ
ZZ
ZZZZZZ
ZZ
ZZ
ZZ
SSS ZC SSS
ZZ
ZZ
ZZ
JJJJ
J J
J J
J J
J J
J J
J J
J C J
J J
J J
J J
J J
J J
JJJJ
SSSSSSSSS
SSSSSSSSS
SSSSSSSSS
SSSSSSSSS
SSSSSSSSS
SSSSSSSSS
C
SSSSSSSSS
TTTTTTTT
T
T
T
T
T
T
T
T
TTTTTTTT
C
I I
I I I
I I
I I I
I I
C I I
L
L
LLL
LLL
LLLLL
LLLLL
I LLL
I LLL
III L
III L
IIIII
IIIII
III
III
I
C I
Z Z
Z Z
Z Z
Z Z
ZZ
ZZ
Z Z
Z Z
Z Z
Z C Z
ZZZZZZZZZ
S SSSSSSSS
TT TTTTTTT
OOO OOOOOO
IIII IIIII
LLLLL LLLL
JJJJJJ JJJ
ZZZZZZZ ZZ
SSSSSSSS S
CTTTTTTTT
Z Z
Z Z
Z Z
Z Z
Z Z
Z Z
C Z Z C
Z Z
Z Z
Z Z
Z Z
Z Z
Z Z
Z Z
II
II
II
II
I I
I I
I I
I I
I I
I I
I I
I I
C
ZZ Z
Z Z Z
Z Z Z
Z Z Z
Z Z Z
Z ZZ
Z Z
C
Z
Z Z
C Z Z C
Z Z
Z Z
Z Z
Z Z
ZZ
SSSS
TTTTTT
OOOOOOOO
TTTTTTTT
TT
T T
T T
T T
C
Z Z
Z Z
Z Z Z Z
Z Z Z Z
Z ZZ Z
Z C ZZ C Z
S S
S S
S S S S
S S S S
S SS S
S C SS C S
Z S T O I
Z S T O I
Z S T O I
Z S T O I
Z S T O I
Z S T O I
Z S T O I
Z S T O I
Z S T O I
Z S T O I
Z S C O I
Z S T O I
ZZ
Z Z
Z Z
Z Z
Z Z
Z Z
Z Z
Z Z
ZZ
C
TTTTTTTTT
TTTTTTT T
TTTTT T T
TTT T T T
TTT T T T
TTTTT T T
CTTTTTT T
TTTTTTTTT
SSSSS
S S
S S
S S S S
S S S S
S S S S
S S
S S
SSSSS
C
Z Z
Z Z
Z Z
Z Z Z Z
Z Z Z Z
Z Z Z Z
Z ZZ Z
Z C ZZ C Z
Z ZZ Z
Z Z Z Z
Z Z Z Z
Z Z Z Z
Z Z
Z Z
Z Z
ZZ ZZ
Z Z
Z Z
Z Z
Z Z
ZZ
ZZ
Z Z
Z Z
Z Z
Z Z
Z Z
Z Z
Z Z
Z C Z
S S
S S
S S
S S S S
S S
S S
S S S S
S S
S S
S S S C
S S
S S
S S
ZZZZ
ZZZZ
ZZZZ
ZZZZ
ZZZZ
ZZZZ
ZZZZ
ZZZZ C
Z Z Z Z Z
S S S S S
T T T T T
O O O O O
C I I I I
O O
O O
O O
O O
O O
O O
I I
I I
C I I
I I
I I
I I
S
S
S
S
S
S
S
S
S
S
S
S
S
C
S
S
Z
Z ZZZZZ
Z Z Z
Z ZCZ Z
Z ZZZ Z
Z Z
ZZZZZZZ
SSSSSSS
S S
S SSS S
S SCS S
S S S
SSSSS S
S
Z S
Z S
Z S
Z S
ZS
TO
T O
T O
T O
T O
C
Z Z S S
C C
Z Z S S
T T O O
C C
T T O O
I I L L
C C
I I L L
Z Z
Z Z
Z Z
Z Z
Z Z Z Z
Z Z
Z Z
Z Z
Z Z
Z Z
Z Z
Z C Z
Z Z
ZZZ ZZZ
ZZZ ZZZ
ZCZ ZCZ
ZZZ ZZZ
ZZ
ZZ
ZZZZ
Z Z
Z Z
ZZZZ
CC CCCC
C C C
CCCC C
CCCCCCCCC
C C C
C C C
CCCCCCCCC
C C C
CCCCC C
CCCCCC
C CCC
CCCCCC
]]
local function parseMap(str, map)
local array = {}
local start = 220 * (map - 1)
for row = 5, 24 do
local row_array = {}
for col = 1, 10 do
local num = start + 11 * (row - 5) + col
local char = str:sub(num, num)
local insert_this = nil
if char == "I" then
insert_this = { skin = "2tie", colour = "C" }
elseif char == "J" then
insert_this = { skin = "2tie", colour = "B" }
elseif char == "L" then
insert_this = { skin = "2tie", colour = "O" }
elseif char == "O" then
insert_this = { skin = "2tie", colour = "Y" }
elseif char == "S" then
insert_this = { skin = "2tie", colour = "G" }
elseif char == "T" then
insert_this = { skin = "2tie", colour = "M" }
elseif char == "Z" then
insert_this = { skin = "2tie", colour = "R" }
elseif char == "C" then
insert_this = { skin = "gem", colour = "F" }
end
row_array[col] = insert_this
end
array[row] = row_array
end
return array
end
function FlashPointViewer:new()
self.super:new()
self.ready_frames = 1
self.next_queue_length = 0
self.current_map = 1
self.grid:applyMap(parseMap(board_str, 1))
end
function FlashPointViewer:advanceOneFrame(inputs, ruleset)
local prev_map = self.current_map
if inputs.right or (not self.prev_inputs.up and inputs.up) then
self.current_map = math.min(self.current_map + 1, 100)
elseif inputs.left or (not self.prev_inputs.down and inputs.down) then
self.current_map = math.max(self.current_map - 1, 1)
end
if prev_map ~= self.current_map then
self.grid:clear()
self.grid:applyMap(parseMap(board_str, self.current_map))
end
self.prev_inputs = inputs
return false
end
function FlashPointViewer:drawScoringInfo()
love.graphics.setColor(1, 1, 1, 1)
love.graphics.setFont(font_3x5_3)
love.graphics.print("FLASHPOINT BOARD VIEWER", 240, 120)
love.graphics.print(self.current_map, 240, 200)
love.graphics.setFont(font_3x5_2)
love.graphics.print("MAP", 240, 180)
love.graphics.print("UP/DOWN +/- 1\nLEFT/RIGHT FOR FAST SCROLL", 240, 260)
end
return FlashPointViewer