834 lines
28 KiB
C++
834 lines
28 KiB
C++
#include "lua.h"
|
|
#include "lua/lua.hpp"
|
|
#include "mini.h"
|
|
|
|
extern "C" {
|
|
static int cpp_newsurf(lua_State *L) {
|
|
int w = luaL_checknumber(L, 1);
|
|
int h = luaL_checknumber(L, 2);
|
|
lua_pushinteger(L, newsurf(w, h));
|
|
return 1;
|
|
}
|
|
|
|
static int cpp_loadsurf(lua_State *L) {
|
|
const char* str = luaL_checkstring(L, 1);
|
|
lua_pushinteger(L, loadsurf(str));
|
|
return 1;
|
|
}
|
|
|
|
static int cpp_freesurf(lua_State *L) {
|
|
uint8_t surface = luaL_checkinteger(L, 1);
|
|
freesurf(surface);
|
|
return 0;
|
|
}
|
|
|
|
static int cpp_setdest(lua_State *L) {
|
|
uint8_t surface = luaL_checkinteger(L, 1);
|
|
setdest(surface);
|
|
return 0;
|
|
}
|
|
|
|
static int cpp_setsource(lua_State *L) {
|
|
uint8_t surface = luaL_checkinteger(L, 1);
|
|
setsource(surface);
|
|
return 0;
|
|
}
|
|
|
|
static int cpp_setmap(lua_State *L) {
|
|
uint8_t surface = luaL_checkinteger(L, 1);
|
|
setmap(surface);
|
|
return 0;
|
|
}
|
|
|
|
static int cpp_cls(lua_State *L) {
|
|
uint8_t color = luaL_optinteger(L, 1, 0);
|
|
cls(color);
|
|
return 0;
|
|
}
|
|
|
|
static int cpp_color(lua_State *L) {
|
|
uint8_t col = luaL_optinteger(L, 1, 6);
|
|
color(col);
|
|
return 0;
|
|
}
|
|
|
|
static int cpp_loadpal(lua_State *L) {
|
|
const char* str = luaL_checkstring(L, 1);
|
|
loadpal(str);
|
|
return 0;
|
|
}
|
|
static int cpp_setpal(lua_State *L) {
|
|
uint8_t index = luaL_checkinteger(L, 1);
|
|
uint8_t color = luaL_checkinteger(L, 2);
|
|
setpal(index, color);
|
|
return 0;
|
|
}
|
|
static int cpp_getpal(lua_State *L) {
|
|
uint8_t index = luaL_checkinteger(L, 1);
|
|
lua_pushinteger(L, getpal(index));
|
|
return 1;
|
|
}
|
|
static int cpp_settrans(lua_State *L) {
|
|
uint8_t index = luaL_checkinteger(L, 1);
|
|
settrans(index);
|
|
return 0;
|
|
}
|
|
static int cpp_gettrans(lua_State *L) {
|
|
lua_pushinteger(L, gettrans());
|
|
return 1;
|
|
}
|
|
/* static int cpp_pal(lua_State *L) {
|
|
int numargs = lua_gettop(L);
|
|
switch (numargs) {
|
|
case 0: pal(); return 0;
|
|
case 1: luaL_error(L, "not enough arguments"); return 0;
|
|
}
|
|
uint8_t c0 = luaL_checkinteger(L, 1);
|
|
uint8_t c1 = luaL_checkinteger(L, 2);
|
|
uint8_t p = luaL_optinteger(L, 3, 0);
|
|
pal(c0, c1, p);
|
|
return 0;
|
|
}
|
|
|
|
static int cpp_palt(lua_State *L) {
|
|
int numargs = lua_gettop(L);
|
|
switch (numargs) {
|
|
case 0: palt(); return 0;
|
|
case 1: uint16_t bits = luaL_checkinteger(L, 1); palt(bits); return 0;
|
|
}
|
|
uint8_t col = luaL_checkinteger(L, 1);
|
|
bool t = lua_toboolean(L, 2);
|
|
palt(col, t);
|
|
return 0;
|
|
}*/
|
|
|
|
static int cpp_pset(lua_State *L) {
|
|
int x = luaL_checknumber(L, 1);
|
|
int y = luaL_checknumber(L, 2);
|
|
if (lua_gettop(L) > 2) {
|
|
uint8_t color = luaL_checkinteger(L, 3);
|
|
pset(x, y, color);
|
|
} else {
|
|
pset(x, y);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
static int cpp_pget(lua_State *L) {
|
|
int x = luaL_checknumber(L, 1);
|
|
int y = luaL_checknumber(L, 2);
|
|
lua_pushinteger(L, pget(x, y));
|
|
return 1;
|
|
}
|
|
|
|
static int cpp_line(lua_State *L) {
|
|
int x0 = luaL_checknumber(L, 1);
|
|
int y0 = luaL_checknumber(L, 2);
|
|
int x1 = luaL_checknumber(L, 3);
|
|
int y1 = luaL_checknumber(L, 4);
|
|
if (lua_gettop(L) > 4) {
|
|
uint8_t color = luaL_checkinteger(L, 5);
|
|
line(x0, y0, x1, y1, color);
|
|
} else {
|
|
line(x0, y0, x1, y1);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
static int cpp_hline(lua_State *L) {
|
|
int x0 = luaL_checknumber(L, 1);
|
|
int y = luaL_checknumber(L, 2);
|
|
int x1 = luaL_checknumber(L, 3);
|
|
if (lua_gettop(L) > 3) {
|
|
uint8_t color = luaL_checkinteger(L, 4);
|
|
hline(x0, y, x1, color);
|
|
} else {
|
|
hline(x0, y, x1);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
static int cpp_vline(lua_State *L) {
|
|
int x = luaL_checknumber(L, 1);
|
|
int y0 = luaL_checknumber(L, 2);
|
|
int y1 = luaL_checknumber(L, 3);
|
|
if (lua_gettop(L) > 3) {
|
|
uint8_t color = luaL_checkinteger(L, 4);
|
|
vline(x, y0, y1, color);
|
|
} else {
|
|
vline(x, y0, y1);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
static int cpp_rect(lua_State *L) {
|
|
int x0 = luaL_checknumber(L, 1);
|
|
int y0 = luaL_checknumber(L, 2);
|
|
int x1 = luaL_checknumber(L, 3);
|
|
int y1 = luaL_checknumber(L, 4);
|
|
if (lua_gettop(L) > 4) {
|
|
uint8_t color = luaL_checkinteger(L, 5);
|
|
rect(x0, y0, x1, y1, color);
|
|
} else {
|
|
rect(x0, y0, x1, y1);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
static int cpp_rectfill(lua_State *L) {
|
|
int x0 = luaL_checknumber(L, 1);
|
|
int y0 = luaL_checknumber(L, 2);
|
|
int x1 = luaL_checknumber(L, 3);
|
|
int y1 = luaL_checknumber(L, 4);
|
|
if (lua_gettop(L) > 4) {
|
|
uint8_t color = luaL_checkinteger(L, 5);
|
|
rectfill(x0, y0, x1, y1, color);
|
|
} else {
|
|
rectfill(x0, y0, x1, y1);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
static int cpp_fillp(lua_State *L) {
|
|
uint16_t pat = luaL_checkinteger(L, 1);
|
|
bool transparent = lua_toboolean(L, 2);
|
|
fillp(pat, transparent);
|
|
return 0;
|
|
}
|
|
|
|
static int cpp_print(lua_State *L) {
|
|
const char* str = luaL_checkstring(L, 1);
|
|
int x = luaL_checknumber(L, 2);
|
|
int y = luaL_checknumber(L, 3);
|
|
if (lua_gettop(L) > 3) {
|
|
uint8_t color = luaL_checkinteger(L, 4);
|
|
print(str, x, y, color);
|
|
} else {
|
|
print(str, x, y);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
static int cpp_clip(lua_State *L) {
|
|
int x = luaL_checknumber(L, 1);
|
|
int y = luaL_checknumber(L, 2);
|
|
int w = luaL_checknumber(L, 3);
|
|
int h = luaL_checknumber(L, 4);
|
|
clip(x, y, w, h);
|
|
return 0;
|
|
}
|
|
|
|
static int cpp_camera(lua_State *L) {
|
|
int x = luaL_checknumber(L, 1);
|
|
int y = luaL_checknumber(L, 2);
|
|
camera(x, y);
|
|
return 0;
|
|
}
|
|
|
|
static int cpp_circ(lua_State *L) {
|
|
int x = luaL_checknumber(L, 1);
|
|
int y = luaL_checknumber(L, 2);
|
|
int r = luaL_optnumber(L, 3, 4);
|
|
if (lua_gettop(L) > 3) {
|
|
uint8_t color = luaL_checkinteger(L, 4);
|
|
circ(x, y, r, color);
|
|
} else {
|
|
circ(x, y, r);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
static int cpp_circfill(lua_State *L) {
|
|
int x = luaL_checknumber(L, 1);
|
|
int y = luaL_checknumber(L, 2);
|
|
int r = luaL_optnumber(L, 3, 4);
|
|
if (lua_gettop(L) > 3) {
|
|
uint8_t color = luaL_checkinteger(L, 4);
|
|
circfill(x, y, r, color);
|
|
} else {
|
|
circfill(x, y, r);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
static int cpp_oval(lua_State *L) {
|
|
int x0 = luaL_checknumber(L, 1);
|
|
int y0 = luaL_checknumber(L, 2);
|
|
int x1 = luaL_checknumber(L, 3);
|
|
int y1 = luaL_checknumber(L, 4);
|
|
if (lua_gettop(L) > 4) {
|
|
uint8_t color = luaL_checkinteger(L, 5);
|
|
oval(x0, y0, x1, y1, color);
|
|
} else {
|
|
oval(x0, y0, x1, y1);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
static int cpp_ovalfill(lua_State *L) {
|
|
int x0 = luaL_checknumber(L, 1);
|
|
int y0 = luaL_checknumber(L, 2);
|
|
int x1 = luaL_checknumber(L, 3);
|
|
int y1 = luaL_checknumber(L, 4);
|
|
if (lua_gettop(L) > 4) {
|
|
uint8_t color = luaL_checkinteger(L, 5);
|
|
ovalfill(x0, y0, x1, y1, color);
|
|
} else {
|
|
ovalfill(x0, y0, x1, y1);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
static int cpp_sset(lua_State *L) {
|
|
int x = luaL_checknumber(L, 1);
|
|
int y = luaL_checknumber(L, 2);
|
|
if (lua_gettop(L) > 2) {
|
|
uint8_t color = luaL_checkinteger(L, 3);
|
|
sset(x, y, color);
|
|
} else {
|
|
sset(x, y);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
static int cpp_sget(lua_State *L) {
|
|
int x = luaL_checknumber(L, 1);
|
|
int y = luaL_checknumber(L, 2);
|
|
lua_pushinteger(L, sget(x, y));
|
|
return 1;
|
|
}
|
|
|
|
static int cpp_spr(lua_State *L) {
|
|
uint8_t n = luaL_checkinteger(L, 1);
|
|
int x = luaL_checknumber(L, 2);
|
|
int y = luaL_checknumber(L, 3);
|
|
float w = luaL_optnumber(L, 4, 1.0f);
|
|
float h = luaL_optnumber(L, 5, 1.0f);
|
|
bool flip_x = lua_toboolean(L, 6);
|
|
bool flip_y = lua_toboolean(L, 7);
|
|
spr(n, x, y, w, h, flip_x, flip_y);
|
|
return 0;
|
|
}
|
|
|
|
static int cpp_sspr(lua_State *L) {
|
|
int sx = luaL_checknumber(L, 1);
|
|
int sy = luaL_checknumber(L, 2);
|
|
int sw = luaL_checknumber(L, 3);
|
|
int sh = luaL_checknumber(L, 4);
|
|
int dx = luaL_checknumber(L, 5);
|
|
int dy = luaL_checknumber(L, 6);
|
|
int dw = luaL_optnumber(L, 7, 0);
|
|
int dh = luaL_optnumber(L, 8, 0);
|
|
bool flip_x = lua_toboolean(L, 9);
|
|
bool flip_y = lua_toboolean(L, 10);
|
|
sspr(sx, sy, sw, sh, dx, dy, dw, dh, flip_x, flip_y);
|
|
return 0;
|
|
}
|
|
|
|
static int cpp_tline(lua_State *L) {
|
|
int x0 = luaL_checknumber(L, 1);
|
|
int y0 = luaL_checknumber(L, 2);
|
|
int x1 = luaL_checknumber(L, 3);
|
|
int y1 = luaL_checknumber(L, 4);
|
|
float mx = luaL_checknumber(L, 5);
|
|
float my = luaL_checknumber(L, 6);
|
|
float mdx = luaL_optnumber(L, 7, 0.125f);
|
|
float mdy = luaL_optnumber(L, 8, 0.0f);
|
|
tline(x0, y0, x1, y1, mx, my, mdx, mdy);
|
|
return 0;
|
|
}
|
|
|
|
static int cpp_thline(lua_State *L) {
|
|
int x0 = luaL_checknumber(L, 1);
|
|
int y = luaL_checknumber(L, 2);
|
|
int x1 = luaL_checknumber(L, 3);
|
|
float mx = luaL_checknumber(L, 4);
|
|
float my = luaL_checknumber(L, 5);
|
|
float mdx = luaL_optnumber(L, 6, 0.125f);
|
|
float mdy = luaL_optnumber(L, 7, 0.0f);
|
|
thline(x0, y, x1, mx, my, mdx, mdy);
|
|
return 0;
|
|
}
|
|
|
|
static int cpp_tvline(lua_State *L) {
|
|
int x = luaL_checknumber(L, 1);
|
|
int y0 = luaL_checknumber(L, 2);
|
|
int y1 = luaL_checknumber(L, 3);
|
|
float mx = luaL_checknumber(L, 4);
|
|
float my = luaL_checknumber(L, 5);
|
|
float mdx = luaL_optnumber(L, 6, 0.0f);
|
|
float mdy = luaL_optnumber(L, 7, 0.125f);
|
|
tvline(x, y0, y1, mx, my, mdx, mdy);
|
|
return 0;
|
|
}
|
|
|
|
static int cpp_mset(lua_State *L) {
|
|
int celx = luaL_checknumber(L, 1);
|
|
int cely = luaL_checknumber(L, 2);
|
|
uint8_t snum = luaL_checkinteger(L, 3);
|
|
mset(celx, cely, snum);
|
|
return 0;
|
|
}
|
|
|
|
static int cpp_mget(lua_State *L) {
|
|
int celx = luaL_checknumber(L, 1);
|
|
int cely = luaL_checknumber(L, 2);
|
|
lua_pushinteger(L, mget(celx, cely));
|
|
return 1;
|
|
}
|
|
|
|
static int cpp_map(lua_State *L) {
|
|
uint8_t celx = luaL_checknumber(L, 1);
|
|
uint8_t cely = luaL_checknumber(L, 2);
|
|
int sx = luaL_checknumber(L, 3);
|
|
int sy = luaL_checknumber(L, 4);
|
|
uint8_t celw = luaL_checknumber(L, 5);
|
|
uint8_t celh = luaL_checknumber(L, 6);
|
|
uint8_t layer = luaL_optinteger(L, 7, 0);
|
|
map(celx, cely, sx, sy, celw, celh, layer);
|
|
return 0;
|
|
}
|
|
|
|
static int cpp_btn(lua_State *L) {
|
|
uint8_t i = luaL_checkinteger(L, 1);
|
|
lua_pushboolean(L, btn(i));
|
|
return 1;
|
|
}
|
|
|
|
static int cpp_btnp(lua_State *L) {
|
|
uint8_t i = luaL_checkinteger(L, 1);
|
|
lua_pushboolean(L, btnp(i));
|
|
return 1;
|
|
}
|
|
|
|
static int cpp_mousex(lua_State *L) {
|
|
lua_pushinteger(L, mousex());
|
|
return 1;
|
|
}
|
|
|
|
static int cpp_mousey(lua_State *L) {
|
|
lua_pushinteger(L, mousey());
|
|
return 1;
|
|
}
|
|
|
|
static int cpp_mwheel(lua_State *L) {
|
|
lua_pushinteger(L, mwheel());
|
|
return 1;
|
|
}
|
|
|
|
static int cpp_mbtn(lua_State *L) {
|
|
uint8_t i = luaL_checkinteger(L, 1);
|
|
lua_pushboolean(L, mbtn(i));
|
|
return 1;
|
|
}
|
|
|
|
static int cpp_time(lua_State *L) {
|
|
lua_pushnumber(L, time());
|
|
return 1;
|
|
}
|
|
|
|
static int cpp_abs(lua_State *L) {
|
|
float x = luaL_checknumber(L, 1);
|
|
lua_pushnumber(L, abs(x));
|
|
return 1;
|
|
}
|
|
static int cpp_ceil(lua_State *L) {
|
|
float x = luaL_checknumber(L, 1);
|
|
lua_pushnumber(L, ceil(x));
|
|
return 1;
|
|
}
|
|
static int cpp_flr(lua_State *L) {
|
|
float x = luaL_checknumber(L, 1);
|
|
lua_pushnumber(L, flr(x));
|
|
return 1;
|
|
}
|
|
static int cpp_sgn(lua_State *L) {
|
|
float x = luaL_checknumber(L, 1);
|
|
lua_pushnumber(L, sgn(x));
|
|
return 1;
|
|
}
|
|
static int cpp_sin(lua_State *L) {
|
|
float x = luaL_checknumber(L, 1);
|
|
lua_pushnumber(L, sin(x));
|
|
return 1;
|
|
}
|
|
static int cpp_cos(lua_State *L) {
|
|
float x = luaL_checknumber(L, 1);
|
|
lua_pushnumber(L, cos(x));
|
|
return 1;
|
|
}
|
|
static int cpp_atan2(lua_State *L) {
|
|
float dx = luaL_checknumber(L, 1);
|
|
float dy = luaL_checknumber(L, 2);
|
|
lua_pushnumber(L, atan2(dx, dy));
|
|
return 1;
|
|
}
|
|
static int cpp_sqrt(lua_State *L) {
|
|
float x = luaL_checknumber(L, 1);
|
|
lua_pushnumber(L, sqrt(x));
|
|
return 1;
|
|
}
|
|
static int cpp_max(lua_State *L) {
|
|
float x = luaL_checknumber(L, 1);
|
|
float y = luaL_checknumber(L, 2);
|
|
lua_pushnumber(L, max(x, y));
|
|
return 1;
|
|
}
|
|
static int cpp_mid(lua_State *L) {
|
|
float x = luaL_checknumber(L, 1);
|
|
float y = luaL_checknumber(L, 2);
|
|
float z = luaL_checknumber(L, 3);
|
|
lua_pushnumber(L, mid(x, y, z));
|
|
return 1;
|
|
}
|
|
static int cpp_min(lua_State *L) {
|
|
float x = luaL_checknumber(L, 1);
|
|
float y = luaL_checknumber(L, 2);
|
|
lua_pushnumber(L, min(x, y));
|
|
return 1;
|
|
}
|
|
static int cpp_rnd(lua_State *L) {
|
|
int x = luaL_checkinteger(L, 1);
|
|
lua_pushinteger(L, rnd(x));
|
|
return 1;
|
|
}
|
|
static int cpp_srand(lua_State *L) {
|
|
int x = luaL_checkinteger(L, 1);
|
|
srand(x);
|
|
return 0;
|
|
}
|
|
static int cpp_tostr(lua_State *L) {
|
|
int val = luaL_checknumber(L, 1);
|
|
lua_pushstring(L, tostr(val));
|
|
return 1;
|
|
}
|
|
static int cpp_ascii(lua_State *L) {
|
|
const char* str = luaL_checkstring(L, 1);
|
|
int index = luaL_checkinteger(L, 2);
|
|
lua_pushinteger(L, ascii(str, index));
|
|
return 1;
|
|
}
|
|
static int cpp_strlen(lua_State *L) {
|
|
const char* str = luaL_checkstring(L, 1);
|
|
lua_pushinteger(L, strlen(str));
|
|
return 1;
|
|
}
|
|
|
|
static int cpp_fopen(lua_State *L) {
|
|
const char* str = luaL_checkstring(L, 1);
|
|
uint8_t mode = luaL_optinteger(L, 2, 0);
|
|
fopen(str, mode);
|
|
return 0;
|
|
}
|
|
static int cpp_fclose(lua_State *L) {
|
|
fclose();
|
|
return 0;
|
|
}
|
|
|
|
static int cpp_fwritei(lua_State *L) {
|
|
int value = luaL_checkinteger(L, 1);
|
|
fwritei(value);
|
|
return 0;
|
|
}
|
|
|
|
static int cpp_fwrited(lua_State *L) {
|
|
float value = luaL_checknumber(L, 1);
|
|
fwrited(value);
|
|
return 0;
|
|
}
|
|
|
|
static int cpp_fwrites(lua_State *L) {
|
|
const char* str = luaL_checkstring(L, 1);
|
|
fwrites(str);
|
|
return 0;
|
|
}
|
|
|
|
static int cpp_fwriteb(lua_State *L) {
|
|
bool value = lua_toboolean(L, 1);
|
|
fwriteb(value);
|
|
return 0;
|
|
}
|
|
|
|
static int cpp_fwriteln(lua_State *L) {
|
|
fwriteln();
|
|
return 0;
|
|
}
|
|
|
|
static int cpp_freadi(lua_State *L) {
|
|
lua_pushinteger(L,freadi());
|
|
return 1;
|
|
}
|
|
|
|
static int cpp_freadd(lua_State *L) {
|
|
lua_pushnumber(L,freadd());
|
|
return 1;
|
|
}
|
|
|
|
static int cpp_freads(lua_State *L) {
|
|
lua_pushstring(L,freads());
|
|
return 1;
|
|
}
|
|
|
|
static int cpp_freadb(lua_State *L) {
|
|
lua_pushboolean(L,freadb());
|
|
return 1;
|
|
}
|
|
|
|
}
|
|
|
|
lua_State *L;
|
|
bool is_playing = false;
|
|
bool init_exists = false;
|
|
bool update_exists = false;
|
|
|
|
bool lua_is_playing() {
|
|
return is_playing;
|
|
}
|
|
|
|
void lua_init() {
|
|
L = luaL_newstate();
|
|
|
|
if (luaL_loadfile(L, "game.lua")) {
|
|
debug("error loading game");
|
|
debug(lua_tostring(L, -1));
|
|
lua_pop(L,1);
|
|
return;
|
|
}
|
|
|
|
lua_pushcfunction(L,cpp_newsurf); lua_setglobal(L, "newsurf");
|
|
lua_pushcfunction(L,cpp_loadsurf); lua_setglobal(L, "loadsurf");
|
|
lua_pushcfunction(L,cpp_freesurf); lua_setglobal(L, "freesurf");
|
|
lua_pushcfunction(L,cpp_setdest); lua_setglobal(L, "setdest");
|
|
lua_pushcfunction(L,cpp_setsource); lua_setglobal(L, "setsource");
|
|
lua_pushcfunction(L,cpp_setmap); lua_setglobal(L, "setmap");
|
|
|
|
lua_pushcfunction(L,cpp_cls); lua_setglobal(L, "cls");
|
|
lua_pushcfunction(L,cpp_color); lua_setglobal(L, "color");
|
|
|
|
lua_pushcfunction(L,cpp_loadpal); lua_setglobal(L, "loadpal");
|
|
lua_pushcfunction(L,cpp_setpal); lua_setglobal(L, "setpal");
|
|
lua_pushcfunction(L,cpp_getpal); lua_setglobal(L, "getpal");
|
|
lua_pushcfunction(L,cpp_settrans); lua_setglobal(L, "settrans");
|
|
lua_pushcfunction(L,cpp_gettrans); lua_setglobal(L, "gettrans");
|
|
|
|
/*lua_pushcfunction(L,cpp_pal); lua_setglobal(L, "pal");
|
|
lua_pushcfunction(L,cpp_palt); lua_setglobal(L, "palt");*/
|
|
lua_pushcfunction(L,cpp_pset); lua_setglobal(L, "pset");
|
|
lua_pushcfunction(L,cpp_pget); lua_setglobal(L, "pget");
|
|
lua_pushcfunction(L,cpp_line); lua_setglobal(L, "line");
|
|
lua_pushcfunction(L,cpp_hline); lua_setglobal(L, "hline");
|
|
lua_pushcfunction(L,cpp_vline); lua_setglobal(L, "vline");
|
|
lua_pushcfunction(L,cpp_rect); lua_setglobal(L, "rect");
|
|
lua_pushcfunction(L,cpp_rectfill); lua_setglobal(L, "rectfill");
|
|
lua_pushcfunction(L,cpp_fillp); lua_setglobal(L, "fillp");
|
|
lua_pushcfunction(L,cpp_print); lua_setglobal(L, "print");
|
|
lua_pushcfunction(L,cpp_clip); lua_setglobal(L, "clip");
|
|
lua_pushcfunction(L,cpp_camera); lua_setglobal(L, "camera");
|
|
lua_pushcfunction(L,cpp_circ); lua_setglobal(L, "circ");
|
|
lua_pushcfunction(L,cpp_circfill); lua_setglobal(L, "circfill");
|
|
lua_pushcfunction(L,cpp_oval); lua_setglobal(L, "oval");
|
|
lua_pushcfunction(L,cpp_ovalfill); lua_setglobal(L, "ovalfill");
|
|
lua_pushcfunction(L,cpp_sset); lua_setglobal(L, "sset");
|
|
lua_pushcfunction(L,cpp_sget); lua_setglobal(L, "sget");
|
|
lua_pushcfunction(L,cpp_spr); lua_setglobal(L, "spr");
|
|
lua_pushcfunction(L,cpp_sspr); lua_setglobal(L, "sspr");
|
|
lua_pushcfunction(L,cpp_tline); lua_setglobal(L, "tline");
|
|
lua_pushcfunction(L,cpp_thline); lua_setglobal(L, "thline");
|
|
lua_pushcfunction(L,cpp_tvline); lua_setglobal(L, "tvline");
|
|
lua_pushcfunction(L,cpp_mget); lua_setglobal(L, "mget");
|
|
lua_pushcfunction(L,cpp_mset); lua_setglobal(L, "mset");
|
|
lua_pushcfunction(L,cpp_map); lua_setglobal(L, "map");
|
|
lua_pushcfunction(L,cpp_btn); lua_setglobal(L, "btn");
|
|
lua_pushcfunction(L,cpp_btnp); lua_setglobal(L, "btnp");
|
|
lua_pushcfunction(L,cpp_mousex); lua_setglobal(L, "mousex");
|
|
lua_pushcfunction(L,cpp_mousey); lua_setglobal(L, "mousey");
|
|
lua_pushcfunction(L,cpp_mwheel); lua_setglobal(L, "mwheel");
|
|
lua_pushcfunction(L,cpp_mbtn); lua_setglobal(L, "mbtn");
|
|
|
|
lua_pushcfunction(L,cpp_time); lua_setglobal(L, "time");
|
|
lua_pushcfunction(L,cpp_abs); lua_setglobal(L, "abs");
|
|
lua_pushcfunction(L,cpp_ceil); lua_setglobal(L, "ceil");
|
|
lua_pushcfunction(L,cpp_flr); lua_setglobal(L, "flr");
|
|
lua_pushcfunction(L,cpp_sgn); lua_setglobal(L, "sgn");
|
|
lua_pushcfunction(L,cpp_sin); lua_setglobal(L, "sin");
|
|
lua_pushcfunction(L,cpp_cos); lua_setglobal(L, "cos");
|
|
lua_pushcfunction(L,cpp_atan2); lua_setglobal(L, "atan2");
|
|
lua_pushcfunction(L,cpp_sqrt); lua_setglobal(L, "sqrt");
|
|
lua_pushcfunction(L,cpp_max); lua_setglobal(L, "max");
|
|
lua_pushcfunction(L,cpp_mid); lua_setglobal(L, "mid");
|
|
lua_pushcfunction(L,cpp_min); lua_setglobal(L, "min");
|
|
lua_pushcfunction(L,cpp_rnd); lua_setglobal(L, "rnd");
|
|
lua_pushcfunction(L,cpp_srand); lua_setglobal(L, "srand");
|
|
lua_pushcfunction(L,cpp_tostr); lua_setglobal(L, "tostr");
|
|
lua_pushcfunction(L,cpp_ascii); lua_setglobal(L, "ascii");
|
|
lua_pushcfunction(L,cpp_strlen); lua_setglobal(L, "strlen");
|
|
|
|
lua_pushcfunction(L,cpp_fopen); lua_setglobal(L, "fopen");
|
|
lua_pushcfunction(L,cpp_fclose); lua_setglobal(L, "fclose");
|
|
lua_pushcfunction(L,cpp_fwritei); lua_setglobal(L, "fwritei");
|
|
lua_pushcfunction(L,cpp_fwrited); lua_setglobal(L, "fwrited");
|
|
lua_pushcfunction(L,cpp_fwrites); lua_setglobal(L, "fwrites");
|
|
lua_pushcfunction(L,cpp_fwriteb); lua_setglobal(L, "fwriteb");
|
|
lua_pushcfunction(L,cpp_fwriteln); lua_setglobal(L, "fwriteln");
|
|
lua_pushcfunction(L,cpp_freadi); lua_setglobal(L, "freadi");
|
|
lua_pushcfunction(L,cpp_freadd); lua_setglobal(L, "freadd");
|
|
lua_pushcfunction(L,cpp_freads); lua_setglobal(L, "freads");
|
|
lua_pushcfunction(L,cpp_freadb); lua_setglobal(L, "freadb");
|
|
|
|
lua_pushinteger(L, 0); lua_setglobal(L, "KEY_UNKNOWN");
|
|
lua_pushinteger(L, 4); lua_setglobal(L, "KEY_A");
|
|
lua_pushinteger(L, 5); lua_setglobal(L, "KEY_B");
|
|
lua_pushinteger(L, 6); lua_setglobal(L, "KEY_C");
|
|
lua_pushinteger(L, 7); lua_setglobal(L, "KEY_D");
|
|
lua_pushinteger(L, 8); lua_setglobal(L, "KEY_E");
|
|
lua_pushinteger(L, 9); lua_setglobal(L, "KEY_F");
|
|
lua_pushinteger(L, 10); lua_setglobal(L, "KEY_G");
|
|
lua_pushinteger(L, 11); lua_setglobal(L, "KEY_H");
|
|
lua_pushinteger(L, 12); lua_setglobal(L, "KEY_I");
|
|
lua_pushinteger(L, 13); lua_setglobal(L, "KEY_J");
|
|
lua_pushinteger(L, 14); lua_setglobal(L, "KEY_K");
|
|
lua_pushinteger(L, 15); lua_setglobal(L, "KEY_L");
|
|
lua_pushinteger(L, 16); lua_setglobal(L, "KEY_M");
|
|
lua_pushinteger(L, 17); lua_setglobal(L, "KEY_N");
|
|
lua_pushinteger(L, 18); lua_setglobal(L, "KEY_O");
|
|
lua_pushinteger(L, 19); lua_setglobal(L, "KEY_P");
|
|
lua_pushinteger(L, 20); lua_setglobal(L, "KEY_Q");
|
|
lua_pushinteger(L, 21); lua_setglobal(L, "KEY_R");
|
|
lua_pushinteger(L, 22); lua_setglobal(L, "KEY_S");
|
|
lua_pushinteger(L, 23); lua_setglobal(L, "KEY_T");
|
|
lua_pushinteger(L, 24); lua_setglobal(L, "KEY_U");
|
|
lua_pushinteger(L, 25); lua_setglobal(L, "KEY_V");
|
|
lua_pushinteger(L, 26); lua_setglobal(L, "KEY_W");
|
|
lua_pushinteger(L, 27); lua_setglobal(L, "KEY_X");
|
|
lua_pushinteger(L, 28); lua_setglobal(L, "KEY_Y");
|
|
lua_pushinteger(L, 29); lua_setglobal(L, "KEY_Z");
|
|
lua_pushinteger(L, 30); lua_setglobal(L, "KEY_1");
|
|
lua_pushinteger(L, 31); lua_setglobal(L, "KEY_2");
|
|
lua_pushinteger(L, 32); lua_setglobal(L, "KEY_3");
|
|
lua_pushinteger(L, 33); lua_setglobal(L, "KEY_4");
|
|
lua_pushinteger(L, 34); lua_setglobal(L, "KEY_5");
|
|
lua_pushinteger(L, 35); lua_setglobal(L, "KEY_6");
|
|
lua_pushinteger(L, 36); lua_setglobal(L, "KEY_7");
|
|
lua_pushinteger(L, 37); lua_setglobal(L, "KEY_8");
|
|
lua_pushinteger(L, 38); lua_setglobal(L, "KEY_9");
|
|
lua_pushinteger(L, 39); lua_setglobal(L, "KEY_0");
|
|
lua_pushinteger(L, 40); lua_setglobal(L, "KEY_RETURN");
|
|
lua_pushinteger(L, 41); lua_setglobal(L, "KEY_ESCAPE");
|
|
lua_pushinteger(L, 42); lua_setglobal(L, "KEY_BACKSPACE");
|
|
lua_pushinteger(L, 43); lua_setglobal(L, "KEY_TAB");
|
|
lua_pushinteger(L, 44); lua_setglobal(L, "KEY_SPACE");
|
|
lua_pushinteger(L, 45); lua_setglobal(L, "KEY_MINUS");
|
|
lua_pushinteger(L, 46); lua_setglobal(L, "KEY_EQUALS");
|
|
lua_pushinteger(L, 47); lua_setglobal(L, "KEY_LEFTBRACKET");
|
|
lua_pushinteger(L, 48); lua_setglobal(L, "KEY_RIGHTBRACKET");
|
|
lua_pushinteger(L, 49); lua_setglobal(L, "KEY_BACKSLASH");
|
|
lua_pushinteger(L, 50); lua_setglobal(L, "KEY_NONUSHASH");
|
|
lua_pushinteger(L, 51); lua_setglobal(L, "KEY_SEMICOLON");
|
|
lua_pushinteger(L, 52); lua_setglobal(L, "KEY_APOSTROPHE");
|
|
lua_pushinteger(L, 53); lua_setglobal(L, "KEY_GRAVE");
|
|
lua_pushinteger(L, 54); lua_setglobal(L, "KEY_COMMA");
|
|
lua_pushinteger(L, 55); lua_setglobal(L, "KEY_PERIOD");
|
|
lua_pushinteger(L, 56); lua_setglobal(L, "KEY_SLASH");
|
|
lua_pushinteger(L, 57); lua_setglobal(L, "KEY_CAPSLOCK");
|
|
lua_pushinteger(L, 58); lua_setglobal(L, "KEY_F1");
|
|
lua_pushinteger(L, 59); lua_setglobal(L, "KEY_F2");
|
|
lua_pushinteger(L, 60); lua_setglobal(L, "KEY_F3");
|
|
lua_pushinteger(L, 61); lua_setglobal(L, "KEY_F4");
|
|
lua_pushinteger(L, 62); lua_setglobal(L, "KEY_F5");
|
|
lua_pushinteger(L, 63); lua_setglobal(L, "KEY_F6");
|
|
lua_pushinteger(L, 64); lua_setglobal(L, "KEY_F7");
|
|
lua_pushinteger(L, 65); lua_setglobal(L, "KEY_F8");
|
|
lua_pushinteger(L, 66); lua_setglobal(L, "KEY_F9");
|
|
lua_pushinteger(L, 67); lua_setglobal(L, "KEY_F10");
|
|
lua_pushinteger(L, 68); lua_setglobal(L, "KEY_F11");
|
|
lua_pushinteger(L, 69); lua_setglobal(L, "KEY_F12");
|
|
lua_pushinteger(L, 70); lua_setglobal(L, "KEY_PRINTSCREEN");
|
|
lua_pushinteger(L, 71); lua_setglobal(L, "KEY_SCROLLLOCK");
|
|
lua_pushinteger(L, 72); lua_setglobal(L, "KEY_PAUSE");
|
|
lua_pushinteger(L, 73); lua_setglobal(L, "KEY_INSERT");
|
|
lua_pushinteger(L, 74); lua_setglobal(L, "KEY_HOME");
|
|
lua_pushinteger(L, 75); lua_setglobal(L, "KEY_PAGEUP");
|
|
lua_pushinteger(L, 76); lua_setglobal(L, "KEY_DELETE");
|
|
lua_pushinteger(L, 77); lua_setglobal(L, "KEY_END");
|
|
lua_pushinteger(L, 78); lua_setglobal(L, "KEY_PAGEDOWN");
|
|
lua_pushinteger(L, 79); lua_setglobal(L, "KEY_RIGHT");
|
|
lua_pushinteger(L, 80); lua_setglobal(L, "KEY_LEFT");
|
|
lua_pushinteger(L, 81); lua_setglobal(L, "KEY_DOWN");
|
|
lua_pushinteger(L, 82); lua_setglobal(L, "KEY_UP");
|
|
lua_pushinteger(L, 83); lua_setglobal(L, "KEY_NUMLOCKCLEAR");
|
|
lua_pushinteger(L, 84); lua_setglobal(L, "KEY_KP_DIVIDE");
|
|
lua_pushinteger(L, 85); lua_setglobal(L, "KEY_KP_MULTIPLY");
|
|
lua_pushinteger(L, 86); lua_setglobal(L, "KEY_KP_MINUS");
|
|
lua_pushinteger(L, 87); lua_setglobal(L, "KEY_KP_PLUS");
|
|
lua_pushinteger(L, 88); lua_setglobal(L, "KEY_KP_ENTER");
|
|
lua_pushinteger(L, 89); lua_setglobal(L, "KEY_KP_1");
|
|
lua_pushinteger(L, 90); lua_setglobal(L, "KEY_KP_2");
|
|
lua_pushinteger(L, 91); lua_setglobal(L, "KEY_KP_3");
|
|
lua_pushinteger(L, 92); lua_setglobal(L, "KEY_KP_4");
|
|
lua_pushinteger(L, 93); lua_setglobal(L, "KEY_KP_5");
|
|
lua_pushinteger(L, 94); lua_setglobal(L, "KEY_KP_6");
|
|
lua_pushinteger(L, 95); lua_setglobal(L, "KEY_KP_7");
|
|
lua_pushinteger(L, 96); lua_setglobal(L, "KEY_KP_8");
|
|
lua_pushinteger(L, 97); lua_setglobal(L, "KEY_KP_9");
|
|
lua_pushinteger(L, 98); lua_setglobal(L, "KEY_KP_0");
|
|
lua_pushinteger(L, 99); lua_setglobal(L, "KEY_KP_PERIOD");
|
|
lua_pushinteger(L, 100); lua_setglobal(L, "KEY_NONUSBACKSLASH");
|
|
lua_pushinteger(L, 101); lua_setglobal(L, "KEY_APPLICATION");
|
|
lua_pushinteger(L, 224); lua_setglobal(L, "KEY_LCTRL");
|
|
lua_pushinteger(L, 225); lua_setglobal(L, "KEY_LSHIFT");
|
|
lua_pushinteger(L, 226); lua_setglobal(L, "KEY_LALT");
|
|
lua_pushinteger(L, 227); lua_setglobal(L, "KEY_LGUI");
|
|
lua_pushinteger(L, 228); lua_setglobal(L, "KEY_RCTRL");
|
|
lua_pushinteger(L, 229); lua_setglobal(L, "KEY_RSHIFT");
|
|
lua_pushinteger(L, 230); lua_setglobal(L, "KEY_RALT");
|
|
lua_pushinteger(L, 231); lua_setglobal(L, "KEY_RGUI");
|
|
|
|
lua_pushinteger(L, 0); lua_setglobal(L, "FILE_READ");
|
|
lua_pushinteger(L, 1); lua_setglobal(L, "FILE_WRITE");
|
|
|
|
if (lua_pcall(L,0, LUA_MULTRET, 0)) {
|
|
debug("runtime error");
|
|
debug(lua_tostring(L, -1));
|
|
lua_pop(L,1);
|
|
return;
|
|
}
|
|
|
|
lua_getglobal(L, "_init");
|
|
if (lua_isfunction(L,-1)) init_exists = true;
|
|
lua_pop(L,1);
|
|
|
|
lua_getglobal(L, "_update");
|
|
if (lua_isfunction(L,-1)) update_exists = true;
|
|
lua_pop(L,1);
|
|
|
|
is_playing = true;
|
|
}
|
|
|
|
void lua_call_init() {
|
|
if (!init_exists) return;
|
|
lua_getglobal(L, "_init");
|
|
if (lua_pcall(L, 0, 0, 0)) {
|
|
debug("runtime error");
|
|
debug(lua_tostring(L, -1));
|
|
lua_pop(L,1);
|
|
is_playing = false;
|
|
}
|
|
}
|
|
|
|
void lua_call_update() {
|
|
if (!update_exists) return;
|
|
lua_getglobal(L, "_update");
|
|
if (lua_pcall(L, 0, 0, 0)) {
|
|
debug("runtime error");
|
|
debug(lua_tostring(L, -1));
|
|
lua_pop(L,1);
|
|
is_playing = false;
|
|
}
|
|
}
|
|
|
|
void lua_quit() {
|
|
if (!is_playing) return;
|
|
is_playing = false;
|
|
lua_close(L);
|
|
}
|