-
Notifications
You must be signed in to change notification settings - Fork 0
/
draw-dragonrider.lua
67 lines (57 loc) · 1.96 KB
/
draw-dragonrider.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
--
-- Flying dragon w/ rider in profile view
--
-- 1 2 3 4 5 6 7 8
-- 00 o o o o w w o r
-- 08 t o o w w w r h
-- 16 t d d d d * d h
-- 24 t o o w w o o o
return function(t, fb, p)
local cd = p[1]
local cr = p[2] or string.char(0,7,15)
local ch = p[3] or p[1]
local z = string.char(0,0,0)
local function setchoice(t, c) fb:set(t[math.random(#t)], c) end
-- head position; returns possible rider positions
local thead = {
function() fb:set(16, cd) return {8, 15} end, -- head up, rider might be atop
function() fb:set(24, cd) return {15} end, -- head level, rider always further back
}
-- wing animation frames
local twing = {
function() fb:set(5, cd) fb:set(6, cd) fb:set(12, cd) fb:set(13, cd) fb:set(14, cd) end, -- full up
function() fb:set(5, z) fb:set(6, z) end, -- start downstroke
function() fb:set(12, z) fb:set(13, z) fb:set(14, z) -- level
fb:set(22, cd) fb:set(28, cd) fb:set(29, cd) end, -- (occludes heart)
function() fb:set(12, cd) fb:set(13, cd) fb:set(14,cd)
fb:set(22, ch) fb:set(28, z) fb:set(29, z) end, -- quick mid up
}
fb:fill(0,0,0)
-- dragon initial pose
fb:set(15, cr) -- rider
fb:set(18, cd)
fb:set(19, cd)
fb:set(20, cd)
fb:set(21, cd)
fb:set(22, ch)
fb:set(23, cd)
fb:set(24, cd)
fb:set(25, cd)
local wix = 1
twing[wix]()
t:register(400, tmr.ALARM_AUTO, function()
wix = wix + 1
if wix > #twing then
wix = 1
end
if math.random(8) == 1 then -- update head and rider position
fb:set(8, z) fb:set(15,z) fb:set(16,z) fb:set(24,z)
setchoice(thead[math.random(#thead)](), cr)
end
if math.random(10) == 1 then -- update tail position
fb:set(9, z) fb:set(17, z) fb:set(25, z) setchoice({9, 17, 25}, cd)
end
twing[wix]()
dodraw()
end)
end