-
Notifications
You must be signed in to change notification settings - Fork 0
/
asterion.lua
108 lines (95 loc) · 2.55 KB
/
asterion.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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
-- The House of Asterion
-- Wander the labyrinth.
-- Dream something into being.
--
-- Keyboard (typing) Required
-- w, ↑, a, ←, s, ↓, d, →
-- [space], [enter] to interact
local Labyrinth = include('lib/labyrinth')
local Minstrel = include('lib/minstrel')
local Parameters = include('lib/parameters')
local Pouch = include('lib/pouch')
local constants = include('lib/constants')
engine.name = 'Asterion'
local minstrel, labyrinth, pouch
local splash = true
local splash_variant = 1
local function affect(action)
if action.verb == constants.ACTIONS.MOVE then
minstrel:observe(action.value)
elseif action.verb == constants.ACTIONS.DROP then
pouch:remove(action.value)
minstrel:observe({shine = (pouch:get('size') * 0.1) + (0.1 * labyrinth:get('level'))})
elseif action.verb == constants.ACTIONS.TAKE then
pouch:add(action.value)
minstrel:observe({shine = (pouch:get('size') * 0.1) + (0.1 * labyrinth:get('level'))})
elseif action.verb == constants.ACTIONS.ASCEND then
minstrel:observe({shine = params:get('shine') * 2, gloom = 0.1 * labyrinth:get('level')})
labyrinth:ascend()
elseif action.verb == constants.ACTIONS.DESCEND then
minstrel:observe({shine = params:get('shine') / 2, gloom = 0.1 * labyrinth:get('level')})
labyrinth:descend()
end
end
local function commence()
splash = false
minstrel:init()
parameters.set_song_update(function() minstrel:adjust_song() end)
end
local function render()
if splash then
screen.display_png(constants.ASSET_PATH..'splash'..splash_variant..'.png', 0, 0)
screen.move(64, 18)
screen.text_center('The House of')
screen.move(64, 58)
screen.text_center('Press Any Key')
else
labyrinth:refresh()
end
end
local function test_match(match)
return pouch:inspect(match)
end
function init()
math.randomseed(os.time())
splash_variant = math.random(1, 2)
labyrinth = Labyrinth:new()
minstrel = Minstrel:new()
parameters = Parameters:new()
pouch = Pouch:new()
labyrinth:init()
parameters:init()
redraw()
end
function enc(e, d)
end
function key(k, z)
end
function keyboard.code(k, z)
if z == 0 then
if not splash then
if k == 'I' then
pouch:inspect()
else
labyrinth:act(k.name or k, affect, test_match)
redraw()
end
else
commence()
end
else
local note_input = tonumber(k)
if note_input then
minstrel:accent_song(note_input, parameters:get('scale'))
end
end
end
function redraw()
screen.clear()
screen.level(16)
render()
screen.update()
end
function refresh()
redraw()
end