|
@@ -3,7 +3,15 @@
|
|
-- desc: a falling blocks game totally not inspired by anything previous
|
|
-- desc: a falling blocks game totally not inspired by anything previous
|
|
-- script: lua
|
|
-- script: lua
|
|
|
|
|
|
-t=0
|
|
|
|
|
|
+local spriteIndexStart = 256
|
|
|
|
+local blockSize = 8
|
|
|
|
+
|
|
|
|
+local t = 0
|
|
|
|
+local t_move = 0
|
|
|
|
+local is_move_pressed = false
|
|
|
|
+local is_das_triggered = false
|
|
|
|
+
|
|
|
|
+-- i, o, j, l, t, s, z
|
|
local pieces = {
|
|
local pieces = {
|
|
{
|
|
{
|
|
{
|
|
{
|
|
@@ -137,8 +145,14 @@ local pieces = {
|
|
|
|
|
|
local board = {}
|
|
local board = {}
|
|
|
|
|
|
|
|
+local game_state = {
|
|
|
|
+ piece_queue = {},
|
|
|
|
+ piece_bag = {},
|
|
|
|
+ update = nil,
|
|
|
|
+}
|
|
|
|
+
|
|
local active_piece = {
|
|
local active_piece = {
|
|
- type = 3,
|
|
|
|
|
|
+ type = nil,
|
|
rotation = 1,
|
|
rotation = 1,
|
|
x = 3, y = 0,
|
|
x = 3, y = 0,
|
|
}
|
|
}
|
|
@@ -149,13 +163,27 @@ local rules = {
|
|
are = 4,
|
|
are = 4,
|
|
}
|
|
}
|
|
|
|
|
|
-local spriteIndexStart = 256
|
|
|
|
-local blockSize = 8
|
|
|
|
|
|
+-- gaiden, vs, single
|
|
|
|
+local options = {
|
|
|
|
+ gametype = "gaiden",
|
|
|
|
+ shared_queue = true,
|
|
|
|
+}
|
|
|
|
|
|
-local t_move = 0
|
|
|
|
-local is_move_pressed = false
|
|
|
|
-local is_das_triggered = false
|
|
|
|
|
|
+function shuffle(x)
|
|
|
|
+ for i = #x, 2, -1 do
|
|
|
|
+ local j = math.random(i)
|
|
|
|
+ x[i], x[j] = x[j], x[i]
|
|
|
|
+ end
|
|
|
|
+end
|
|
|
|
|
|
|
|
+function fill_bag()
|
|
|
|
+ -- just throw a bag of randomized pieces in it
|
|
|
|
+ local new_bag = { 1, 2, 3, 4, 5, 6, 7 }
|
|
|
|
+ shuffle(new_bag)
|
|
|
|
+ for i = 1,7 do
|
|
|
|
+ table.insert(game_state.piece_bag, new_bag[i])
|
|
|
|
+ end
|
|
|
|
+end
|
|
|
|
|
|
function init_board()
|
|
function init_board()
|
|
for y = 1, 20 do
|
|
for y = 1, 20 do
|
|
@@ -167,27 +195,22 @@ function init_board()
|
|
end
|
|
end
|
|
|
|
|
|
function spawn_piece()
|
|
function spawn_piece()
|
|
-
|
|
|
|
-end
|
|
|
|
-
|
|
|
|
-function draw_piece()
|
|
|
|
- for y = 1, 4 do
|
|
|
|
- for x = 1, 4 do
|
|
|
|
- local block = pieces[active_piece.type][active_piece.rotation][y][x]
|
|
|
|
- if block ~= 0 then
|
|
|
|
- spr(
|
|
|
|
- spriteIndexStart + block,
|
|
|
|
- (active_piece.x + x - 1) * blockSize,
|
|
|
|
- (active_piece.y + y - 1) * blockSize
|
|
|
|
- )
|
|
|
|
- end
|
|
|
|
- end
|
|
|
|
|
|
+ if #game_state.piece_bag <= 4 then
|
|
|
|
+ fill_bag()
|
|
end
|
|
end
|
|
|
|
+ active_piece = {
|
|
|
|
+ type = game_state.piece_bag[1],
|
|
|
|
+ rotation = 1,
|
|
|
|
+ x = 3, y = 0,
|
|
|
|
+ }
|
|
|
|
+ table.remove(game_state.piece_bag, 1)
|
|
end
|
|
end
|
|
|
|
|
|
function hard_drop()
|
|
function hard_drop()
|
|
|
|
+ -- active_piece.rotation = 1
|
|
active_piece.type = active_piece.type + 1
|
|
active_piece.type = active_piece.type + 1
|
|
if active_piece.type > 7 then active_piece.type = 1 end
|
|
if active_piece.type > 7 then active_piece.type = 1 end
|
|
|
|
+ trace("type: "..tostring(active_piece.type)..", rot="..tostring(active_piece.rotation))
|
|
end
|
|
end
|
|
function soft_drop()
|
|
function soft_drop()
|
|
active_piece.y = active_piece.y + 1
|
|
active_piece.y = active_piece.y + 1
|
|
@@ -202,7 +225,7 @@ end
|
|
function handle_input()
|
|
function handle_input()
|
|
is_move_pressed = false
|
|
is_move_pressed = false
|
|
if btnp(0) then
|
|
if btnp(0) then
|
|
- hard_drop()
|
|
|
|
|
|
+ spawn_piece()
|
|
end
|
|
end
|
|
if btn(1) then
|
|
if btn(1) then
|
|
is_move_pressed = true
|
|
is_move_pressed = true
|
|
@@ -256,26 +279,82 @@ function handle_input()
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
-function TIC()
|
|
|
|
|
|
+function draw_board(xpos, ypos)
|
|
|
|
+ -- draw next pieces
|
|
|
|
+ for i=1,3 do
|
|
|
|
+ local ptype = game_state.piece_bag[i]
|
|
|
|
+ draw_piece(200, 20 + (i * 20), ptype, 1)
|
|
|
|
+ end
|
|
|
|
+end
|
|
|
|
+
|
|
|
|
+function draw_piece(xpos, ypos, ptype, rotation)
|
|
|
|
+ for y = 1, 4 do
|
|
|
|
+ for x = 1, 4 do
|
|
|
|
+ local block = pieces[ptype][rotation][y][x]
|
|
|
|
+ if block ~= 0 then
|
|
|
|
+ spr(
|
|
|
|
+ spriteIndexStart + block,
|
|
|
|
+ (x - 1) * blockSize + xpos,
|
|
|
|
+ (y - 1) * blockSize + ypos
|
|
|
|
+ )
|
|
|
|
+ end
|
|
|
|
+ end
|
|
|
|
+ end
|
|
|
|
+end
|
|
|
|
+
|
|
|
|
+-- BEGIN state updates
|
|
|
|
+function update_intro()
|
|
|
|
+ if t == 30 then
|
|
|
|
+ game_state.update = update_menu
|
|
|
|
+ else
|
|
|
|
+ print("intro " .. tostring(30-t))
|
|
|
|
+ end
|
|
|
|
+end
|
|
|
|
+
|
|
|
|
+function update_menu()
|
|
|
|
+ print("Press X to start")
|
|
|
|
+ if btnp(5) then
|
|
|
|
+ game_state.update = update_game
|
|
|
|
+ init_board()
|
|
|
|
+ fill_bag()
|
|
|
|
+ spawn_piece()
|
|
|
|
+ end
|
|
|
|
+end
|
|
|
|
+
|
|
|
|
+function update_game()
|
|
handle_input()
|
|
handle_input()
|
|
|
|
+ draw_board()
|
|
|
|
+ draw_piece(active_piece.x * blockSize, active_piece.y * blockSize, active_piece.type, active_piece.rotation)
|
|
|
|
+end
|
|
|
|
+-- END state updates
|
|
|
|
+
|
|
|
|
|
|
|
|
+game_state.update = update_intro
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+function TIC()
|
|
cls(0)
|
|
cls(0)
|
|
- draw_piece()
|
|
|
|
|
|
+
|
|
|
|
+ -- call our current state's update
|
|
|
|
+ game_state.update()
|
|
|
|
+ t = t + 1
|
|
end
|
|
end
|
|
|
|
|
|
-- <SPRITES>
|
|
-- <SPRITES>
|
|
--- 001:bbbbbbbb9aaaaaab9aaaaaab9aaaaaab9aaaaaab9aaaaaab9aaaaaab89999999
|
|
|
|
--- 002:8aaaaaaa8999999a8999999a8999999a8999999a8999999a8999999a88888888
|
|
|
|
--- 003:4444444423333334233333342333333423333334233333342333333412222222
|
|
|
|
--- 004:cccccccc2444444c2444444c2444444c2444444c2444444c2444444c12222222
|
|
|
|
--- 005:55555555766666657666666576666665766666657666666576666665f7777777
|
|
|
|
--- 006:ddddddddfeeeeeedfeeeeeedfeeeeeedfeeeeeedfeeeeeedfeeeeeedffffffff
|
|
|
|
--- 007:3333333312222223122222231222222312222223122222231222222381111111
|
|
|
|
|
|
+-- 001:bbbbbbbc9aaaaaab9aaaaaab9aaaaaab9aaaaaab9aaaaaab9aaaaaab89999999
|
|
|
|
+-- 002:8aaaaaab8999999a8999999a8999999a8999999a8999999a8999999a88888888
|
|
|
|
+-- 003:4444444c23333334233333342333333423333334233333342333333412222222
|
|
|
|
+-- 004:3ccccccc2444444c2444444c2444444c2444444c2444444c2444444c12222222
|
|
|
|
+-- 005:55555554766666657666666576666665766666657666666576666665f7777777
|
|
|
|
+-- 006:dddddddcfeeeeeedfeeeeeedfeeeeeedfeeeeeedfeeeeeedfeeeeeedffffffff
|
|
|
|
+-- 007:3333333412222223122222231222222312222223122222231222222381111111
|
|
-- 016:8bbbbbbb8abbbbba8aabbbaa8aaabaaa8aaa9aaa8aa999aa8a99999a88888888
|
|
-- 016:8bbbbbbb8abbbbba8aabbbaa8aaabaaa8aaa9aaa8aa999aa8a99999a88888888
|
|
-- 017:f5555555f6555556f6655566f6665666f6667666f6677766f6777776ffffffff
|
|
-- 017:f5555555f6555556f6655566f6665666f6667666f6677766f6777776ffffffff
|
|
--- 018:0000000000044000004cc4000444cc4004444440004444000004400000000000
|
|
|
|
--- 019:0aaaaaa0a000000aa000000aa000000aa000000aa000000aa000000a0aaaaaa0
|
|
|
|
--- 020:0666666060000006600000066000000660000006600000066000000606666660
|
|
|
|
|
|
+-- 018:0aaaaaa0a000000aa000000aa000000aa000000aa000000aa000000a0aaaaaa0
|
|
|
|
+-- 019:0666666060000006600000066000000660000006600000066000000606666660
|
|
|
|
+-- 020:000000000bc000000abbc0000aaabbc00aaaaff00aaff0000ff0000000000000
|
|
|
|
+-- 021:0000000005400000065540000666554006666ff0066ff0000ff0000000000000
|
|
|
|
+-- 022:0000000000044000004cc4000444cc4004444440004444000004400000000000
|
|
-- </SPRITES>
|
|
-- </SPRITES>
|
|
|
|
|
|
-- <PALETTE>
|
|
-- <PALETTE>
|