diff options
-rw-r--r-- | apps/plugins/lua/include_lua/draw_poly.lua | 13 | ||||
-rw-r--r-- | apps/plugins/lua/lapi.c | 5 | ||||
-rw-r--r-- | apps/plugins/lua/luaconf.h | 3 | ||||
-rw-r--r-- | apps/plugins/lua_scripts/stars.lua | 331 | ||||
-rw-r--r-- | apps/plugins/picross/picross.make | 18 |
5 files changed, 271 insertions, 99 deletions
diff --git a/apps/plugins/lua/include_lua/draw_poly.lua b/apps/plugins/lua/include_lua/draw_poly.lua index 23e02d0955..d5bc83ae39 100644 --- a/apps/plugins/lua/include_lua/draw_poly.lua +++ b/apps/plugins/lua/include_lua/draw_poly.lua | |||
@@ -46,7 +46,9 @@ local _poly = {} do | |||
46 | local flood_fill | 46 | local flood_fill |
47 | 47 | ||
48 | -- draws a non-filled figure based on points in t-points | 48 | -- draws a non-filled figure based on points in t-points |
49 | local function polyline(img, x, y, t_pts, color, bClosed, bClip, scale_x, scale_y) | 49 | local function polyline(img, x, y, t_pts, color, bClosed, bClip, scale_x, scale_y, b_size_only) |
50 | local draw_fn = _line | ||
51 | if b_size_only == true then draw_fn = function() end end | ||
50 | scale_x = scale_x or 1 | 52 | scale_x = scale_x or 1 |
51 | scale_y = scale_y or 1 | 53 | scale_y = scale_y or 1 |
52 | 54 | ||
@@ -69,8 +71,7 @@ local _poly = {} do | |||
69 | else | 71 | else |
70 | pt2 = {t_pts[i] * scale_x, t_pts[i + 1] * scale_y} | 72 | pt2 = {t_pts[i] * scale_x, t_pts[i + 1] * scale_y} |
71 | end-- first and last point | 73 | end-- first and last point |
72 | 74 | draw_fn(img, pt1[1] + x, pt1[2] + y, pt2[1] + x, pt2[2] + y, color, bClip) | |
73 | _line(img, pt1[1] + x, pt1[2] + y, pt2[1] + x, pt2[2] + y, color, bClip) | ||
74 | if pt1[1] > max_x then max_x = pt1[1] end | 75 | if pt1[1] > max_x then max_x = pt1[1] end |
75 | if pt1[2] > max_y then max_y = pt1[2] end | 76 | if pt1[2] > max_y then max_y = pt1[2] end |
76 | end | 77 | end |
@@ -80,12 +81,12 @@ local _poly = {} do | |||
80 | end | 81 | end |
81 | 82 | ||
82 | -- draws a closed figure based on points in t_pts | 83 | -- draws a closed figure based on points in t_pts |
83 | _poly.polygon = function(img, x, y, t_pts, color, fillcolor, bClip, scale_x, scale_y) | 84 | _poly.polygon = function(img, x, y, t_pts, color, fillcolor, bClip, scale_x, scale_y, b_size_only) |
84 | scale_x = scale_x or 1 | 85 | scale_x = scale_x or 1 |
85 | scale_y = scale_y or 1 | 86 | scale_y = scale_y or 1 |
86 | if #t_pts < 2 then error("not enough points", 3) end | 87 | if #t_pts < 2 then error("not enough points", 3) end |
87 | 88 | ||
88 | if fillcolor then | 89 | if fillcolor and b_size_only ~= true then |
89 | flood_fill = flood_fill or require("draw_floodfill") | 90 | flood_fill = flood_fill or require("draw_floodfill") |
90 | local x_min, x_max = 0, 0 | 91 | local x_min, x_max = 0, 0 |
91 | local y_min, y_max = 0, 0 | 92 | local y_min, y_max = 0, 0 |
@@ -119,7 +120,7 @@ local _poly = {} do | |||
119 | _NIL, _NIL, _NIL, _NIL, bClip, BSAND, fillcolor) | 120 | _NIL, _NIL, _NIL, _NIL, bClip, BSAND, fillcolor) |
120 | end | 121 | end |
121 | 122 | ||
122 | polyline(img, x, y, t_pts, color, true, bClip, scale_x, scale_y) | 123 | return polyline(img, x, y, t_pts, color, true, bClip, scale_x, scale_y, b_size_only) |
123 | end | 124 | end |
124 | 125 | ||
125 | -- expose internal functions to the outside through _poly table | 126 | -- expose internal functions to the outside through _poly table |
diff --git a/apps/plugins/lua/lapi.c b/apps/plugins/lua/lapi.c index 6426cd94a9..120f8c8313 100644 --- a/apps/plugins/lua/lapi.c +++ b/apps/plugins/lua/lapi.c | |||
@@ -1057,8 +1057,11 @@ static const char *aux_upvalue (StkId fi, int n, TValue **val) { | |||
1057 | } | 1057 | } |
1058 | else { | 1058 | else { |
1059 | Proto *p = f->l.p; | 1059 | Proto *p = f->l.p; |
1060 | if (!(1 <= n && n <= p->sizeupvalues)) return NULL; | 1060 | if (!(1 <= n && n <= p->nups)) // not a valid upvalue |
1061 | return NULL; | ||
1061 | *val = f->l.upvals[n-1]->v; | 1062 | *val = f->l.upvals[n-1]->v; |
1063 | if (!(1 <= n && n <= p->sizeupvalues)) // don't have a name for this upvalue | ||
1064 | return ""; | ||
1062 | return getstr(p->upvalues[n-1]); | 1065 | return getstr(p->upvalues[n-1]); |
1063 | } | 1066 | } |
1064 | } | 1067 | } |
diff --git a/apps/plugins/lua/luaconf.h b/apps/plugins/lua/luaconf.h index f7dd99b19e..77d4057118 100644 --- a/apps/plugins/lua/luaconf.h +++ b/apps/plugins/lua/luaconf.h | |||
@@ -818,6 +818,7 @@ extern long rb_pow(long, long); | |||
818 | /*else*/ | 818 | /*else*/ |
819 | #define LUA_USER_H "lua_user.h" | 819 | #define LUA_USER_H "lua_user.h" |
820 | #define LUA_DISABLE_BYTECODE | 820 | #define LUA_DISABLE_BYTECODE |
821 | #ifndef SIMULATOR | ||
821 | #define LUA_OPTIMIZE_DEBUG 2 /* Lua Compact Debug -- Terry Ellison 2015 */ | 822 | #define LUA_OPTIMIZE_DEBUG 2 /* Lua Compact Debug -- Terry Ellison 2015 */ |
822 | 823 | #endif | |
823 | #endif | 824 | #endif |
diff --git a/apps/plugins/lua_scripts/stars.lua b/apps/plugins/lua_scripts/stars.lua index 14fae0c4b7..e05007afb6 100644 --- a/apps/plugins/lua_scripts/stars.lua +++ b/apps/plugins/lua_scripts/stars.lua | |||
@@ -17,7 +17,7 @@ | |||
17 | ]]-- | 17 | ]]-- |
18 | --https://nullprogram.com/blog/2011/06/13/ [Infinite Parallax Starfield] | 18 | --https://nullprogram.com/blog/2011/06/13/ [Infinite Parallax Starfield] |
19 | 19 | ||
20 | -- Imports | 20 | -- Imports |
21 | local _clr = require("color") -- clrset, clrinc provides device independent colors | 21 | local _clr = require("color") -- clrset, clrinc provides device independent colors |
22 | local _lcd = require("lcd") -- lcd helper functions | 22 | local _lcd = require("lcd") -- lcd helper functions |
23 | local _draw = require("draw") -- draw all the things (primitives) | 23 | local _draw = require("draw") -- draw all the things (primitives) |
@@ -32,13 +32,13 @@ local BLACK = _clr.set(0, 0, 0, 0) | |||
32 | local RED = _clr.set(WHITE, 100) | 32 | local RED = _clr.set(WHITE, 100) |
33 | local GREEN = _clr.set(WHITE, 0, 100) | 33 | local GREEN = _clr.set(WHITE, 0, 100) |
34 | local BGREEN = _clr.set(WHITE, 0, 255) | 34 | local BGREEN = _clr.set(WHITE, 0, 255) |
35 | local BLUE = _clr.set(WHITE, 0, 0, 100) | 35 | local BLUE = _clr.set(WHITE, 0, 0, 255) |
36 | 36 | ||
37 | local STAR_SEED = 0x9d2c5680; | 37 | local STAR_SEED = 0x811C9DC5; |
38 | local STAR_TILE_SIZE = math.max(rb.LCD_WIDTH, rb.LCD_HEIGHT) * 4; | 38 | local STAR_TILE_SIZE = math.max(rb.LCD_WIDTH, rb.LCD_HEIGHT) * 4; |
39 | local bxor, band, rshift, lshift, arshift = bit.bxor, bit.band, bit.rshift, bit.lshift, bit.arshift | 39 | local bxor, band, rshift, lshift, arshift = bit.bxor, bit.band, bit.rshift, bit.lshift, bit.arshift |
40 | local random, randomseed = math.random, math.randomseed | 40 | local random, randomseed = math.random, math.randomseed |
41 | local start_x, start_y, start_z | 41 | local start_x, start_y, start_z, scale_x, scale_y |
42 | 42 | ||
43 | -- load users coords from file if it exists | 43 | -- load users coords from file if it exists |
44 | local fname = rb.PLUGIN_DATA_DIR .. "/stars.pos" | 44 | local fname = rb.PLUGIN_DATA_DIR .. "/stars.pos" |
@@ -53,6 +53,10 @@ if file then | |||
53 | start_y = tonumber(line) or 0 | 53 | start_y = tonumber(line) or 0 |
54 | elseif v == 3 then | 54 | elseif v == 3 then |
55 | start_z = tonumber(line) or 0 | 55 | start_z = tonumber(line) or 0 |
56 | elseif v == 4 then | ||
57 | scale_x = tonumber(line) or 1 | ||
58 | elseif v == 5 then | ||
59 | scale_y = tonumber(line) or 1 | ||
56 | else | 60 | else |
57 | break; | 61 | break; |
58 | end | 62 | end |
@@ -62,15 +66,15 @@ end | |||
62 | 66 | ||
63 | -- Robert Jenkins' 96 bit Mix Function. | 67 | -- Robert Jenkins' 96 bit Mix Function. |
64 | local function mix (a, b, c) | 68 | local function mix (a, b, c) |
65 | a=a-b; a=a-c; a=bxor(a, (rshift(c, 13))); | 69 | a=a-b; a=a-c; a=bxor(a, (rshift(c, 13))) |
66 | b=b-c; b=b-a; b=bxor(b, (lshift(a, 8))); | 70 | b=b-c; b=b-a; b=bxor(b, (lshift(a, 8))) |
67 | c=c-a; c=c-b; c=bxor(c, (rshift(b, 13))); | 71 | c=c-a; c=c-b; c=bxor(c, (rshift(b, 13))) |
68 | a=a-b; a=a-c; a=bxor(a, (rshift(c, 12))); | 72 | a=a-b; a=a-c; a=bxor(a, (rshift(c, 12))) |
69 | b=b-c; b=b-a; b=bxor(b, (lshift(a, 16))); | 73 | b=b-c; b=b-a; b=bxor(b, (lshift(a, 16))) |
70 | c=c-a; c=c-b; c=bxor(c, (rshift(b, 5))); | 74 | c=c-a; c=c-b; c=bxor(c, (rshift(b, 5))) |
71 | a=a-b; a=a-c; a=bxor(a, (rshift(c, 3))); | 75 | a=a-b; a=a-c; a=bxor(a, (rshift(c, 3))) |
72 | b=b-c; b=b-a; b=bxor(b, (lshift(a, 10))); | 76 | b=b-c; b=b-a; b=bxor(b, (lshift(a, 10))) |
73 | c=c-a; c=c-b; c=bxor(c, (rshift(b, 15))); | 77 | c=c-a; c=c-b; c=bxor(c, (rshift(b, 15))) |
74 | 78 | ||
75 | return c | 79 | return c |
76 | end | 80 | end |
@@ -94,13 +98,13 @@ local function s_bytes_nib(bits, value) | |||
94 | return bbuffer | 98 | return bbuffer |
95 | end | 99 | end |
96 | 100 | ||
97 | --[[ given table t and total elems desired uses random elems of t | 101 | --[[ given table t and total elems desired uses random elems of t |
98 | and random numbers between 1 and max_v if #t < total_elems]] | 102 | and random numbers between 1 and max_v if #t < total_elems]] |
99 | function randomize_table(t, total_elems, max_v) | 103 | function randomize_table(t, total_elems, max_v) |
100 | local rand_t = {} | 104 | local rand_t = {} |
101 | local i = 1 | 105 | local i = 1 |
102 | repeat | 106 | repeat |
103 | local v = t[random(1, total_elems)] | 107 | local v = t[random(i, total_elems)] |
104 | if v then | 108 | if v then |
105 | rand_t[i] = v | 109 | rand_t[i] = v |
106 | else | 110 | else |
@@ -111,21 +115,30 @@ function randomize_table(t, total_elems, max_v) | |||
111 | return rand_t | 115 | return rand_t |
112 | end | 116 | end |
113 | 117 | ||
114 | local function drawship(img, x, y, color, ship_t) | 118 | local function drawship(img, ship_t) |
115 | --_poly.polyline(img, x, y, ship_t, color, true, true) | 119 | --_poly.polyline(img, x, y, ship_t, color, true, true) |
116 | _poly.polygon(img, x, y, ship_t, color, BLACK, true) | 120 | _poly.polygon(img, ship_t.x, ship_t.y, ship_t.disp_t, ship_t.color, ship_t.fillcolor, true) |
117 | end | 121 | end |
118 | 122 | ||
119 | local function draw_astroid(img, x, y, size, shape, color, scale_x, scale_y) | 123 | local function draw_astroid(img, x, y, shape, color, fillcolor, scale_x, scale_y) |
120 | --the random number generator gets seeded with the hash so we get the same figure each time | 124 | --the random number generator gets seeded with the hash so we get the same figure each time |
121 | randomseed(shape) | 125 | randomseed(shape) |
126 | local move_x, move_y | ||
122 | -- we also use the 4 bytes of the hash as 4 coord pairs and randomly generate 8 more (16) half the size (8) | 127 | -- we also use the 4 bytes of the hash as 4 coord pairs and randomly generate 8 more (16) half the size (8) |
123 | local uniq_t = randomize_table(s_bytes_nib(32, shape), 16, 8) | 128 | local uniq_t = randomize_table(s_bytes_nib(32, shape), 16, 8) |
124 | _poly.polyline(img, x, y, uniq_t, color, true, true, scale_x or 1, scale_y or 1) | 129 | move_x, move_y = _poly.polyline(img, 0, 0, uniq_t, color, true, true, scale_x or 1, scale_y or 1, true) |
125 | --_poly.polygon(img, x, y, uniq_t, color, color, true, scale_x or 1, scale_y or 1) --filled figures | 130 | x = x - move_x / 2 |
131 | y = y - move_y / 2 | ||
132 | if fillcolor then | ||
133 | _poly.polygon(img, x, y, uniq_t, color, fillcolor, true, scale_x or 1, scale_y or 1) --filled figures | ||
134 | else | ||
135 | _poly.polyline(img, x, y, uniq_t, color, true, true, scale_x or 1, scale_y or 1) | ||
136 | end | ||
137 | |||
138 | return x, y, move_x, move_y | ||
126 | end | 139 | end |
127 | 140 | ||
128 | local function drawStars (img, xoff, yoff, starscale, color, scale_x, scale_y) | 141 | local function drawStars(img, drawFn, xoff, yoff, starscale, color, scale_x, scale_y) |
129 | local size = STAR_TILE_SIZE / starscale | 142 | local size = STAR_TILE_SIZE / starscale |
130 | local s_x, s_y = scale_x, scale_y | 143 | local s_x, s_y = scale_x, scale_y |
131 | local w, h = rb.LCD_WIDTH, rb.LCD_HEIGHT | 144 | local w, h = rb.LCD_WIDTH, rb.LCD_HEIGHT |
@@ -139,100 +152,245 @@ local function drawStars (img, xoff, yoff, starscale, color, scale_x, scale_y) | |||
139 | for j = sy, h + sy + size*3, size do | 152 | for j = sy, h + sy + size*3, size do |
140 | local hash = mix(STAR_SEED, (i / size), (j / size)) | 153 | local hash = mix(STAR_SEED, (i / size), (j / size)) |
141 | for n = 0, 2 do | 154 | for n = 0, 2 do |
142 | local px = (hash % size) + (i - xoff); | 155 | local px = (hash % size) + (i - xoff) |
143 | hash = arshift(hash, 3) | 156 | hash = arshift(hash, 3) |
144 | 157 | ||
145 | local py = (hash % size) + (j - yoff); | 158 | local py = (hash % size) + (j - yoff) |
146 | hash = arshift(hash, 3) | 159 | hash = arshift(hash, 3) |
147 | |||
148 | if px > 0 and px < w and py > 0 and py < h then | 160 | if px > 0 and px < w and py > 0 and py < h then |
149 | if n > 0 and starscale < 5 then | 161 | drawFn(img, px, py, color, n, hash) |
150 | draw_astroid(img, px, py, n, hash, color, s_x, s_y) | ||
151 | else | ||
152 | if scale_x > 1 then | ||
153 | img:set(px, py, color) | ||
154 | img:set(px + 1, py, color) | ||
155 | elseif scale_y > 1 then | ||
156 | img:set(px, py, color) | ||
157 | img:set(px, py + 1, color) | ||
158 | else | ||
159 | img:set(px, py, color) | ||
160 | end | ||
161 | end | ||
162 | end | 162 | end |
163 | end | 163 | end |
164 | end | 164 | end |
165 | end | 165 | end |
166 | end | 166 | end |
167 | 167 | ||
168 | local function update_lcd() | ||
169 | rb.lcd_puts(0,0, "[Infinite Starfield]") | ||
170 | _lcd:update() | ||
171 | rb.sleep(100) | ||
172 | update_lcd = _lcd.update | ||
173 | end | ||
174 | |||
175 | local backlight_on | ||
176 | local function turn_on_backlight() | ||
177 | rb.backlight_force_on(); | ||
178 | backlight_on = function() end | ||
179 | end | ||
180 | backlight_on = turn_on_backlight | ||
181 | |||
168 | do | 182 | do |
169 | local act = rb.actions | 183 | local act = rb.actions |
170 | local quit = false | 184 | local quit = false |
171 | local last_action = 0 | 185 | --local last_action = 0 |
172 | local x,y,z = start_x or 0, start_y or 0, start_z or 8 | 186 | local x,y,z = start_x or 0, start_y or 0, start_z or 8 |
173 | local x_fast = rb.LCD_WIDTH / 4 | 187 | local s_x, s_y = scale_x or 1, scale_y or 1 |
174 | local y_fast = rb.LCD_HEIGHT / 4 | 188 | local ship_t = {x = (rb.LCD_WIDTH - 0xF) / 2, |
175 | local ship_x = (rb.LCD_WIDTH - 0xF) / 2 | 189 | y = rb.LCD_HEIGHT - (rb.LCD_HEIGHT / 3), |
176 | local ship_y = rb.LCD_HEIGHT - (rb.LCD_HEIGHT / 3) | 190 | color = BGREEN, |
177 | local scale_x, scale_y = 1, 1 | 191 | fillcolor = BLACK, |
178 | -- vector draw the ship points for each direction (<>^v) | 192 | -- ship vector coords x,y, x,y,... |
179 | local ship_lt_t = {0,7, 15,0, 9,7, 15,15, 0,7} | 193 | lt_t = {0,7, 15,0, 9,7, 15,15, 0,7}, |
180 | local ship_rt_t = {0,0, 5,7, 0,15, 15,7, 0,0} | 194 | rt_t = {0,0, 5,7, 0,15, 15,7, 0,0}, |
181 | local ship_up_t = {0,15, 7,0, 15,15, 7,9, 0,15} | 195 | up_t = {0,15, 7,0, 15,15, 7,9, 0,15}, |
182 | local ship_dn_t = {0,0, 7,15, 15,0, 7,5, 0,0} | 196 | dn_t = {0,0, 7,15, 15,0, 7,5, 0,0} |
183 | local ship_t = ship_up_t | 197 | } |
198 | ship_t.disp_t = ship_t.up_t | ||
199 | |||
200 | local fast = {x = 1, y = 1, count = 0, inc_x = rb.LCD_WIDTH / 16, inc_y = rb.LCD_HEIGHT / 16} | ||
201 | |||
202 | local last = {sx = s_x, sy = s_y, dx = 0, dy = 0, inc_x = 0, inc_y = 0} | ||
203 | |||
204 | local function draw_points(img, x, y, color, n, hash) | ||
205 | if s_x > s_y then | ||
206 | img:line(x, y, x + s_x, y, color, true) | ||
207 | elseif s_y > s_x then | ||
208 | img:line(x, y, x, y + s_y, color, true) | ||
209 | else | ||
210 | img:set(x, y, color, true) | ||
211 | end | ||
212 | end | ||
213 | |||
214 | function action_drift() | ||
215 | if last.dx > 0 then | ||
216 | last.dx = last.dx - 1 | ||
217 | x = x + last.dx | ||
218 | elseif last.dx < 0 then | ||
219 | last.dx = last.dx + 1 | ||
220 | x = x + last.dx | ||
221 | end | ||
222 | if last.dy > 0 then | ||
223 | last.dy = last.dy - 1 | ||
224 | y = y + last.dy | ||
225 | elseif last.dy < 0 then | ||
226 | last.dy = last.dy + 1 | ||
227 | y = y + last.dy | ||
228 | end | ||
229 | if last.dx == 0 and last.dy == 0 then | ||
230 | rockev.suspend("timer") | ||
231 | end | ||
232 | rockev.trigger("action", true, act.ACTION_REDRAW) | ||
233 | end | ||
184 | 234 | ||
185 | function action_event(action) | 235 | function action_event(action) |
236 | backlight_on() | ||
186 | if action == act.PLA_EXIT or action == act.PLA_CANCEL then | 237 | if action == act.PLA_EXIT or action == act.PLA_CANCEL then |
187 | quit = true | 238 | quit = true |
188 | start_x, start_y, start_z = x, y, z | 239 | start_x, start_y, start_z = x, y, z |
240 | scale_x, scale_y = last.sx, last.sy | ||
189 | elseif action == act.PLA_RIGHT_REPEAT then | 241 | elseif action == act.PLA_RIGHT_REPEAT then |
190 | x = x + x_fast | 242 | fast.count = fast.count + 1 |
191 | scale_x = scale_x + 1 | 243 | if fast.count % 10 == 0 then |
192 | scale_y = 1 | 244 | fast.x = fast.x + fast.inc_x |
245 | if fast.count > 100 then s_x = s_x + 1 end | ||
246 | end | ||
247 | x = x + fast.x + last.inc_x | ||
248 | s_y = last.sy | ||
249 | last.dx = fast.x | ||
250 | ship_t.disp_t = ship_t.rt_t | ||
193 | elseif action == act.PLA_LEFT_REPEAT then | 251 | elseif action == act.PLA_LEFT_REPEAT then |
194 | x = x - x_fast | 252 | fast.count = fast.count + 1 |
195 | scale_x = scale_x + 1 | 253 | if fast.count % 10 == 0 then |
196 | scale_y = 1 | 254 | fast.x = fast.x + fast.inc_x |
255 | if fast.count > 100 then s_x = s_x + 1 end | ||
256 | end | ||
257 | x = x - fast.x + last.inc_x | ||
258 | s_y = last.sy | ||
259 | last.dx = -fast.x | ||
260 | ship_t.disp_t = ship_t.lt_t | ||
197 | elseif action == act.PLA_UP_REPEAT then | 261 | elseif action == act.PLA_UP_REPEAT then |
198 | y = y - y_fast | 262 | fast.count = fast.count + 1 |
199 | scale_y = scale_y + 1 | 263 | if fast.count % 10 == 0 then |
200 | scale_x = 1 | 264 | fast.y = fast.y + fast.inc_y |
265 | if fast.count > 100 then s_y = s_y + 1 end | ||
266 | end | ||
267 | y = y - fast.y + last.inc_y | ||
268 | s_x = last.sx | ||
269 | last.dy = -fast.y | ||
270 | ship_t.disp_t = ship_t.up_t | ||
201 | elseif action == act.PLA_DOWN_REPEAT then | 271 | elseif action == act.PLA_DOWN_REPEAT then |
202 | y = y + y_fast | 272 | fast.count = fast.count + 1 |
203 | scale_y = scale_y + 1 | 273 | if fast.count % 10 == 0 then |
204 | scale_x = 1 | 274 | fast.y = fast.y + fast.inc_y |
275 | if fast.count > 100 then s_y = s_y + 1 end | ||
276 | end | ||
277 | y = y + fast.y + last.inc_y | ||
278 | s_x = last.sx | ||
279 | last.dy = fast.y | ||
280 | ship_t.disp_t = ship_t.dn_t | ||
205 | elseif action == act.PLA_RIGHT then | 281 | elseif action == act.PLA_RIGHT then |
206 | x = x + 1 | 282 | last.inc_x = last.inc_x + 1 |
207 | ship_t = ship_rt_t | 283 | x = x + last.dx + 1 |
284 | if last.inc_x < 0 then | ||
285 | last.inc_x = 0 | ||
286 | end | ||
287 | last.dx = last.inc_x | ||
288 | ship_t.disp_t = ship_t.rt_t | ||
208 | elseif action == act.PLA_LEFT then | 289 | elseif action == act.PLA_LEFT then |
209 | x = x - 1 | 290 | last.inc_x = last.inc_x - 1 |
210 | ship_t = ship_lt_t | 291 | x = x + last.dx - 1 |
292 | if last.inc_x > 0 then | ||
293 | last.inc_x = 0 | ||
294 | end | ||
295 | last.dx = last.inc_x | ||
296 | ship_t.disp_t = ship_t.lt_t | ||
211 | elseif action == act.PLA_UP then | 297 | elseif action == act.PLA_UP then |
212 | y = y - 1 | 298 | last.inc_y = last.inc_y - 1 |
213 | ship_t = ship_up_t | 299 | y = y + last.dy - 1 |
300 | if last.inc_y > 0 then | ||
301 | last.inc_y = 0 | ||
302 | end | ||
303 | last.dy = last.inc_y | ||
304 | ship_t.disp_t = ship_t.up_t | ||
214 | elseif action == act.PLA_DOWN then | 305 | elseif action == act.PLA_DOWN then |
215 | y = y + 1 | 306 | last.inc_y = last.inc_y + 1 |
216 | ship_t = ship_dn_t | 307 | y = y + last.dy + 1 |
308 | if last.inc_y < 0 then | ||
309 | last.inc_y = 0 | ||
310 | end | ||
311 | last.dy = last.inc_y | ||
312 | ship_t.disp_t = ship_t.dn_t | ||
313 | elseif action == act.PLA_SELECT_REPEAT then | ||
314 | rockev.suspend("timer", true) | ||
315 | if s_x < 10 and s_y < 10 then | ||
316 | s_x = last.sx + 1 | ||
317 | s_y = last.sy + 1 | ||
318 | last.sx = s_x | ||
319 | last.sy = s_y | ||
320 | end | ||
217 | elseif action == act.PLA_SELECT then | 321 | elseif action == act.PLA_SELECT then |
218 | z = z + 4 | 322 | s_x = last.sx + 1 |
219 | if z > 16 then z = 0 end | 323 | s_y = last.sy + 1 |
324 | if s_x > 10 or s_y > 10 then | ||
325 | s_x = 1 | ||
326 | s_y = 1 | ||
327 | end | ||
328 | last.sx = s_x | ||
329 | last.sy = s_y | ||
220 | elseif action == act.ACTION_NONE then | 330 | elseif action == act.ACTION_NONE then |
221 | scale_x = 1 | 331 | if fast.count > 100 then |
222 | scale_y = 1 | 332 | z = (random(0, 400) / 100) * 4 |
333 | end | ||
334 | fast.count = 0 | ||
335 | fast.x = fast.inc_x | ||
336 | fast.y = fast.inc_y | ||
337 | s_x = last.sx | ||
338 | s_y = last.sy | ||
339 | backlight_on = turn_on_backlight | ||
340 | rb.backlight_use_settings() | ||
341 | if last.dx ~= 0 or last.dy ~= 0 then | ||
342 | rockev.suspend("timer", false) | ||
343 | else | ||
344 | last.inc_x = 0 | ||
345 | last.inc_y = 0 | ||
346 | end | ||
223 | end | 347 | end |
224 | 348 | ||
225 | _lcd:clear(BLACK) | 349 | _lcd:clear(BLACK) |
226 | for i = 0, z, 4 do | 350 | for i = 0, z, 4 do |
227 | drawStars(_LCD, x, y, i+1, RED, scale_x, scale_y) | 351 | drawStars(_LCD, draw_points, x, y, i+1, RED, s_x, s_y) |
228 | drawStars(_LCD, x, y, i+2, GREEN, scale_x, scale_y) | 352 | drawStars(_LCD, draw_points, x, y, i+2, GREEN, s_x, s_y) |
229 | drawStars(_LCD, x, y, i+3, BLUE, scale_x, scale_y) | 353 | drawStars(_LCD, draw_points, x, y, i+3, BLUE, s_x, s_y) |
230 | drawStars(_LCD, x, y, i+4, WHITE, scale_x, scale_y) | 354 | drawStars(_LCD, draw_points, x, y, i+4, WHITE, s_x, s_y) |
355 | end | ||
356 | |||
357 | local hit_t = {} | ||
358 | local SHIP_X, SHIP_Y = ship_t.x + 8, ship_t.y + 8 --center the ship coords | ||
359 | local function draw_asteroids(img, x, y, color, n, hash) | ||
360 | if n > 0 then | ||
361 | local x0, y0, w0, h0 | ||
362 | x0,y0,w0,h0 = draw_astroid(img, x, y, hash, color, false, s_x, s_y) | ||
363 | --check bounds | ||
364 | if s_x == s_y and x0 <= SHIP_X and x0+w0 >= SHIP_X and y0+h0 >= SHIP_Y and y0 <= SHIP_Y then | ||
365 | local r_t = {x = x0, y = y0, w = w0, h= h0, hash = hash, color = color} | ||
366 | hit_t[#hit_t + 1] = r_t | ||
367 | end | ||
368 | end | ||
231 | end | 369 | end |
232 | drawship(_LCD, ship_x, ship_y, BGREEN, ship_t) | ||
233 | _lcd:update() | ||
234 | 370 | ||
235 | last_action = action | 371 | drawStars(_LCD, draw_asteroids, x, y, 1, RED, s_x, s_y) |
372 | drawStars(_LCD, draw_asteroids, x, y, 2, GREEN, s_x, s_y) | ||
373 | drawStars(_LCD, draw_asteroids, x, y, 3, BLUE, s_x, s_y) | ||
374 | drawStars(_LCD, draw_asteroids, x, y, 4, WHITE, s_x, s_y) | ||
375 | if fast.count < 10 and last.dx == last.dy then | ||
376 | local seen = {} -- might have multiple hits but only show unique hashes | ||
377 | for i, v in ipairs(hit_t) do | ||
378 | if i < 4 then | ||
379 | draw_astroid(_LCD, v.x + v.w / 2, v.y + v.h / 2, v.hash, WHITE, v.color, s_x, s_y) | ||
380 | end | ||
381 | end | ||
382 | for i, v in ipairs(hit_t) do | ||
383 | if not seen[v.hash] then | ||
384 | rb.lcd_puts(0, (i - 1), string.format("[%x]", v.hash)) | ||
385 | end | ||
386 | seen[v.hash] = i | ||
387 | end | ||
388 | end | ||
389 | |||
390 | drawship(_LCD, ship_t) | ||
391 | update_lcd() | ||
392 | |||
393 | --last_action = action | ||
236 | end | 394 | end |
237 | 395 | ||
238 | function action_set_quit(bQuit) | 396 | function action_set_quit(bQuit) |
@@ -244,13 +402,22 @@ do | |||
244 | end | 402 | end |
245 | end | 403 | end |
246 | 404 | ||
405 | if not rb.backlight_force_on then | ||
406 | rb.backlight_force_on = function() end | ||
407 | end | ||
408 | |||
409 | if not rb.backlight_use_settings then | ||
410 | rb.backlight_use_settings = function() end | ||
411 | end | ||
412 | |||
247 | action_event(rb.actions.ACTION_NONE) -- we can call this now but not after registering.. | 413 | action_event(rb.actions.ACTION_NONE) -- we can call this now but not after registering.. |
248 | local eva = rockev.register("action", action_event) | 414 | local eva = rockev.register("action", action_event) |
415 | local evc = rockev.register("timer", action_drift, rb.HZ/7) | ||
249 | 416 | ||
250 | while not action_quit() do rb.sleep(rb.HZ) end | 417 | while not action_quit() do rb.sleep(rb.HZ) end |
251 | 418 | ||
252 | if start_x and start_y then | 419 | if start_x and start_y then |
253 | file = io.open(fname, "w") | 420 | file = io.open(fname, "w") |
254 | file:write(start_x, "\n", start_y, "\n", start_z, "\n") | 421 | file:write(start_x, "\n", start_y, "\n", start_z or 0, "\n", scale_x or 1, "\n", scale_y or 1, "\n") |
255 | io.close( file ) | 422 | io.close( file ) |
256 | end | 423 | end |
diff --git a/apps/plugins/picross/picross.make b/apps/plugins/picross/picross.make index 7e78c0fb1c..d34b251dac 100644 --- a/apps/plugins/picross/picross.make +++ b/apps/plugins/picross/picross.make | |||
@@ -7,18 +7,18 @@ | |||
7 | # $Id$ | 7 | # $Id$ |
8 | # | 8 | # |
9 | 9 | ||
10 | LUASCR_SRCDIR := $(APPSDIR)/plugins/picross | 10 | PICRSCR_SRCDIR := $(APPSDIR)/plugins/picross |
11 | LUASCR_BUILDDIR := $(BUILDDIR)/apps/plugins/picross | 11 | PICRSCR_BUILDDIR := $(BUILDDIR)/apps/plugins/picross |
12 | LUASCRS := $(wildcard $(LUASCR_SRCDIR)/*.picross) | 12 | PICRSCRS := $(wildcard $(PICRSCR_SRCDIR)/*.picross) |
13 | 13 | ||
14 | #DUMMY := $(info [${LUASCRS}]) | 14 | #DUMMY := $(info [${PICRSCRS}]) |
15 | 15 | ||
16 | DUMMY : all | 16 | DUMMY : all |
17 | 17 | ||
18 | all: $(subst $(LUASCR_SRCDIR)/,$(LUASCR_BUILDDIR)/,$(LUASCRS)) | 18 | all: $(subst $(PICRSCR_SRCDIR)/,$(PICRSCR_BUILDDIR)/,$(PICRSCRS)) |
19 | 19 | ||
20 | $(LUASCR_BUILDDIR)/%.picross: $(LUASCR_SRCDIR)/%.picross | $(LUASCR_BUILDDIR) | 20 | $(PICRSCR_BUILDDIR)/%.picross: $(PICRSCR_SRCDIR)/%.picross | $(PICRSCR_BUILDDIR) |
21 | $(call PRINTS,CP $(subst $(LUASCR_SRCDIR)/,,$<))cp $< $@ | 21 | $(call PRINTS,CP $(subst $(PICRSCR_SRCDIR)/,,$<))cp $< $@ |
22 | 22 | ||
23 | $(LUASCR_BUILDDIR): | 23 | $(PICRSCR_BUILDDIR): |
24 | $(call PRINTS,MKDIR $@)mkdir -p $(LUASCR_BUILDDIR)/ | 24 | $(call PRINTS,MKDIR $@)mkdir -p $(PICRSCR_BUILDDIR)/ |