mirror of
https://github.com/ZDoom/raze-gles.git
synced 2025-01-12 03:00:38 +00:00
Mapster32/Lunatic: add functionality to connect Lua funcs to s.bar menu [;]+[F].
Hook up those from test/shadexfog.lua and some debugging ones from engine.lua. git-svn-id: https://svn.eduke32.com/eduke32@4419 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
e641cf8b57
commit
494c00713b
6 changed files with 281 additions and 2 deletions
|
@ -8019,6 +8019,12 @@ static void Keys2d(void)
|
||||||
{
|
{
|
||||||
FuncMenu();
|
FuncMenu();
|
||||||
}
|
}
|
||||||
|
#ifdef LUNATIC
|
||||||
|
else if (keystatus[KEYSC_SEMI] && PRESSED_KEYSC(F)) // ; F
|
||||||
|
{
|
||||||
|
LuaFuncMenu();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
else if (!eitherALT && PRESSED_KEYSC(F))
|
else if (!eitherALT && PRESSED_KEYSC(F))
|
||||||
{
|
{
|
||||||
if (pointhighlight < 16384 && tcursectornum>=0 && graphicsmode)
|
if (pointhighlight < 16384 && tcursectornum>=0 && graphicsmode)
|
||||||
|
@ -12969,6 +12975,15 @@ typedef struct StatusBarMenu_ {
|
||||||
#define MENU_INITIALIZER(MenuName, CustomStartIndex, ProcessFunc, ...) \
|
#define MENU_INITIALIZER(MenuName, CustomStartIndex, ProcessFunc, ...) \
|
||||||
{ MenuName, CustomStartIndex, CustomStartIndex, ProcessFunc, {}, ## __VA_ARGS__ }
|
{ MenuName, CustomStartIndex, CustomStartIndex, ProcessFunc, {}, ## __VA_ARGS__ }
|
||||||
|
|
||||||
|
#ifdef LUNATIC
|
||||||
|
static void M_Clear(StatusBarMenu *m)
|
||||||
|
{
|
||||||
|
m->numentries = 0;
|
||||||
|
Bmemset(m->auxdata, 0, sizeof(m->auxdata));
|
||||||
|
Bmemset(m->name, 0, sizeof(m->name));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static void M_UnregisterFunction(StatusBarMenu *m, intptr_t auxdata)
|
static void M_UnregisterFunction(StatusBarMenu *m, intptr_t auxdata)
|
||||||
{
|
{
|
||||||
int32_t i, j;
|
int32_t i, j;
|
||||||
|
@ -13051,6 +13066,12 @@ static void M_EnterMainLoop(StatusBarMenu *m)
|
||||||
int32_t crowmax[3] = {-1, -1, -1};
|
int32_t crowmax[3] = {-1, -1, -1};
|
||||||
int32_t xpos = 8, ypos = MENU_BASE_Y+16;
|
int32_t xpos = 8, ypos = MENU_BASE_Y+16;
|
||||||
|
|
||||||
|
if (m->numentries == 0)
|
||||||
|
{
|
||||||
|
printmessage16("%s menu has no entries", m->menuname);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
Bmemset(disptext, 0, sizeof(disptext));
|
Bmemset(disptext, 0, sizeof(disptext));
|
||||||
|
|
||||||
Bassert((unsigned)m->numentries <= MENU_MAX_ENTRIES);
|
Bassert((unsigned)m->numentries <= MENU_MAX_ENTRIES);
|
||||||
|
@ -13388,3 +13409,54 @@ static void FuncMenu_Process(const StatusBarMenu *m, int32_t col, int32_t row)
|
||||||
|
|
||||||
} // switch (col)
|
} // switch (col)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef LUNATIC
|
||||||
|
typedef const char *(*luamenufunc_t)(void);
|
||||||
|
|
||||||
|
static int32_t g_numLuaFuncs = 0;
|
||||||
|
static luamenufunc_t g_LuaFuncPtrs[MENU_MAX_ENTRIES];
|
||||||
|
|
||||||
|
static void LuaFuncMenu_Process(const StatusBarMenu *m, int32_t col, int32_t row)
|
||||||
|
{
|
||||||
|
luamenufunc_t func = g_LuaFuncPtrs[col*8 + row];
|
||||||
|
const char *errmsg;
|
||||||
|
|
||||||
|
Bassert(func != NULL);
|
||||||
|
errmsg = func();
|
||||||
|
|
||||||
|
if (errmsg == NULL)
|
||||||
|
{
|
||||||
|
printmessage16("Lua function executed successfully");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printmessage16("There were errors executing the Lua function, see OSD");
|
||||||
|
OSD_Printf("Errors executing Lua function \"%s\": %s\n", m->name[col*8 + row], errmsg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static StatusBarMenu g_LuaFuncMenu = MENU_INITIALIZER_EMPTY("Lua functions", LuaFuncMenu_Process);
|
||||||
|
|
||||||
|
static void LuaFuncMenu(void)
|
||||||
|
{
|
||||||
|
M_EnterMainLoop(&g_LuaFuncMenu);
|
||||||
|
}
|
||||||
|
|
||||||
|
LUNATIC_EXTERN void LM_Register(const char *name, luamenufunc_t funcptr)
|
||||||
|
{
|
||||||
|
if (name == NULL || g_numLuaFuncs == MENU_MAX_ENTRIES)
|
||||||
|
return;
|
||||||
|
|
||||||
|
g_LuaFuncPtrs[g_numLuaFuncs] = funcptr;
|
||||||
|
M_RegisterFunction(&g_LuaFuncMenu, name, g_numLuaFuncs);
|
||||||
|
g_numLuaFuncs++;
|
||||||
|
}
|
||||||
|
|
||||||
|
LUNATIC_EXTERN void LM_Clear(void)
|
||||||
|
{
|
||||||
|
M_Clear(&g_LuaFuncMenu);
|
||||||
|
|
||||||
|
g_numLuaFuncs = 0;
|
||||||
|
Bmemset(g_LuaFuncPtrs, 0, sizeof(g_LuaFuncPtrs));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
|
@ -17,6 +17,7 @@ numyaxbunches;
|
||||||
spritesortcnt;
|
spritesortcnt;
|
||||||
guniqhudid;
|
guniqhudid;
|
||||||
|
|
||||||
|
qsetmode;
|
||||||
rendmode;
|
rendmode;
|
||||||
totalclock;
|
totalclock;
|
||||||
randomseed;
|
randomseed;
|
||||||
|
|
|
@ -17,6 +17,7 @@ numyaxbunches;
|
||||||
spritesortcnt;
|
spritesortcnt;
|
||||||
guniqhudid;
|
guniqhudid;
|
||||||
|
|
||||||
|
qsetmode;
|
||||||
rendmode;
|
rendmode;
|
||||||
totalclock;
|
totalclock;
|
||||||
randomseed;
|
randomseed;
|
||||||
|
@ -108,7 +109,10 @@ luaJIT_BC_dis_x64;
|
||||||
g_argv;
|
g_argv;
|
||||||
|
|
||||||
|
|
||||||
|
_getnumber16;
|
||||||
listsearchpath;
|
listsearchpath;
|
||||||
|
LM_Register;
|
||||||
|
LM_Clear;
|
||||||
|
|
||||||
basepaltable;
|
basepaltable;
|
||||||
};
|
};
|
||||||
|
|
|
@ -16,6 +16,7 @@ local ismapster32 = (C.LUNATIC_CLIENT == C.LUNATIC_CLIENT_MAPSTER32)
|
||||||
----------
|
----------
|
||||||
|
|
||||||
decl[[
|
decl[[
|
||||||
|
const int32_t qsetmode;
|
||||||
int32_t getclosestcol_lim(int32_t r, int32_t g, int32_t b, int32_t lastokcol);
|
int32_t getclosestcol_lim(int32_t r, int32_t g, int32_t b, int32_t lastokcol);
|
||||||
char *palookup[256]; // MAXPALOOKUPS
|
char *palookup[256]; // MAXPALOOKUPS
|
||||||
uint8_t palette[768];
|
uint8_t palette[768];
|
||||||
|
@ -27,6 +28,16 @@ void setblendtab(int32_t blend, const char *tab);
|
||||||
int32_t setpalookup(int32_t palnum, const uint8_t *shtab);
|
int32_t setpalookup(int32_t palnum, const uint8_t *shtab);
|
||||||
]]
|
]]
|
||||||
|
|
||||||
|
if (ismapster32) then
|
||||||
|
ffi.cdef[[
|
||||||
|
int32_t _getnumber16(const char *namestart, int32_t num, int32_t maxnumber, char sign, const char *(func)(int32_t));
|
||||||
|
|
||||||
|
typedef const char *(*luamenufunc_t)(void);
|
||||||
|
void LM_Register(const char *name, luamenufunc_t funcptr);
|
||||||
|
void LM_Clear(void);
|
||||||
|
]]
|
||||||
|
end
|
||||||
|
|
||||||
----------
|
----------
|
||||||
|
|
||||||
|
|
||||||
|
@ -419,6 +430,52 @@ if (ismapster32) then
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Interfaces to Mapster32's status bar menu
|
||||||
|
|
||||||
|
local pcall = pcall
|
||||||
|
|
||||||
|
function engine.clearMenu()
|
||||||
|
C.LM_Clear()
|
||||||
|
end
|
||||||
|
|
||||||
|
function engine.registerMenuFunc(name, func)
|
||||||
|
if (type(name) ~= "string") then
|
||||||
|
error("invalid argument #1: must be a string", 2)
|
||||||
|
end
|
||||||
|
if (type(func) ~= "function") then
|
||||||
|
error("invalid argument #2: must be a function", 2)
|
||||||
|
end
|
||||||
|
|
||||||
|
local safefunc = function()
|
||||||
|
local ok, errmsg = pcall(func)
|
||||||
|
if (not ok) then
|
||||||
|
return errmsg
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
C.LM_Register(name, safefunc)
|
||||||
|
end
|
||||||
|
|
||||||
|
engine.GETNUMFLAG = {
|
||||||
|
NEG_ALLOWED = 1,
|
||||||
|
AUTOCOMPL_NAMES = 2,
|
||||||
|
AUTOCOMPL_TAGLAB = 4,
|
||||||
|
RET_M1_ON_CANCEL = 8,
|
||||||
|
|
||||||
|
NEXTFREE = 16,
|
||||||
|
}
|
||||||
|
|
||||||
|
function engine.getnumber16(namestart, num, maxnumber, flags)
|
||||||
|
if (C.qsetmode == 200) then
|
||||||
|
error("getnumber16 must be called from 2D mode", 2)
|
||||||
|
end
|
||||||
|
if (type(namestart)~="string") then
|
||||||
|
error("invalid argument #1: must be a string", 2)
|
||||||
|
end
|
||||||
|
|
||||||
|
return C._getnumber16(namestart, num, maxnumber, flags, nil)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,7 @@ local error = error
|
||||||
local print = print
|
local print = print
|
||||||
local printf = printf
|
local printf = printf
|
||||||
local type = type
|
local type = type
|
||||||
|
local unpack = unpack
|
||||||
|
|
||||||
local bit = require("bit")
|
local bit = require("bit")
|
||||||
local math = require("math")
|
local math = require("math")
|
||||||
|
@ -106,7 +107,7 @@ end
|
||||||
-- Translate the whole map for use with a shade-x-fog palookup set.
|
-- Translate the whole map for use with a shade-x-fog palookup set.
|
||||||
-- .pal becomes the <startpalnum> + former .shade
|
-- .pal becomes the <startpalnum> + former .shade
|
||||||
-- .shade becomes the <fogintensity> [0 .. 31]
|
-- .shade becomes the <fogintensity> [0 .. 31]
|
||||||
-- If <vis> is passed, set all sector's visibility to that value.
|
-- If <vis> is passed and >= 0, set all sector's visibility to that value.
|
||||||
--
|
--
|
||||||
-- Notes:
|
-- Notes:
|
||||||
-- - auto-detects when the translation has been applied with the *same*
|
-- - auto-detects when the translation has been applied with the *same*
|
||||||
|
@ -116,7 +117,7 @@ function shadexfog.translate(startpalnum, fogintensity, vis)
|
||||||
for i=0,gv.numsectors-1 do
|
for i=0,gv.numsectors-1 do
|
||||||
trans(sector[i].ceiling, startpalnum, fogintensity)
|
trans(sector[i].ceiling, startpalnum, fogintensity)
|
||||||
trans(sector[i].floor, startpalnum, fogintensity)
|
trans(sector[i].floor, startpalnum, fogintensity)
|
||||||
if (vis) then
|
if (vis and vis >= 0) then
|
||||||
sector[i].visibility = vis
|
sector[i].visibility = vis
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -409,6 +410,147 @@ function shadexfog.create_additive_trans(startblendidx, numtables, fullbrightsOK
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
-- Mapster32 Lua menu hooks
|
||||||
|
local getnumber16 = engine.getnumber16
|
||||||
|
local GNF = engine.GETNUMFLAG
|
||||||
|
local GNF_BOOL = GNF.NEXTFREE
|
||||||
|
|
||||||
|
local df = GNF.RET_M1_ON_CANCEL -- default getnumber16() flags
|
||||||
|
|
||||||
|
local MAXUSERPALOOKUP = 256-1-8 -- KEEPINSYNC engine.lua:check_palidx()
|
||||||
|
|
||||||
|
-- wrapped_func = CreateMenuFunction(argdesc)
|
||||||
|
--
|
||||||
|
-- <argdesc>: table with [0]=<func> and then, entries { name, init, max [, noret] }
|
||||||
|
function CreateMenuFunction(argdesc)
|
||||||
|
return function()
|
||||||
|
local func = argdesc[0]
|
||||||
|
assert(type(func) == "function")
|
||||||
|
local args = {}
|
||||||
|
|
||||||
|
for i=1,#argdesc do
|
||||||
|
local ad = argdesc[i]
|
||||||
|
assert(type(ad) == "table" and #ad == 3 or #ad == 4)
|
||||||
|
|
||||||
|
local moreflags = ad[4] or 0
|
||||||
|
args[i] = getnumber16(ad[1]..": ", ad[2], ad[3], bit.bor(df, moreflags))
|
||||||
|
if (bit.band(moreflags, GNF.NEG_ALLOWED)==0 and args[i] < 0) then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if (bit.band(moreflags, GNF_BOOL)~=0) then
|
||||||
|
args[i] = (args[i] > 0)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
func(unpack(args))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
engine.clearMenu()
|
||||||
|
|
||||||
|
engine.registerMenuFunc(
|
||||||
|
"Create shadexfog palset",
|
||||||
|
CreateMenuFunction{
|
||||||
|
[0] = shadexfog.create,
|
||||||
|
{ "Starting palnum", 100, MAXUSERPALOOKUP-31 },
|
||||||
|
{ "Red fog color [0-63]", 0, 63 },
|
||||||
|
{ "Green fog color [0-63]", 0, 63 },
|
||||||
|
{ "Blue fog color [0-63]", 0, 63 },
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
engine.registerMenuFunc(
|
||||||
|
"Translate map for shxfog",
|
||||||
|
CreateMenuFunction{
|
||||||
|
[0] = shadexfog.translate,
|
||||||
|
{ "Starting palnum", 100, MAXUSERPALOOKUP-31 },
|
||||||
|
{ "Fog intensity [0-31]", 0, 31 },
|
||||||
|
{ "Change all sectors' visibility to (Esc: don't)", 0, 255, GNF.NEG_ALLOWED },
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
engine.registerMenuFunc(
|
||||||
|
"Change pal of everything",
|
||||||
|
CreateMenuFunction{
|
||||||
|
[0] = shadexfog.challpal,
|
||||||
|
{ "Pal to change to", 0, MAXUSERPALOOKUP },
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
engine.registerMenuFunc(
|
||||||
|
"Create alpha trans. tabs",
|
||||||
|
CreateMenuFunction{
|
||||||
|
[0] = shadexfog.create_alpha_trans,
|
||||||
|
{ "Starting blendnum", 1, 255 },
|
||||||
|
{ "Number of blending tables", 32, 255 },
|
||||||
|
{ "Fullbright result colors OK?", 0, 1, GNF_BOOL },
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
engine.registerMenuFunc(
|
||||||
|
"Create addtv. trans. tabs",
|
||||||
|
CreateMenuFunction{
|
||||||
|
[0] = shadexfog.create_additive_trans,
|
||||||
|
{ "Starting blendnum", 1, 255 },
|
||||||
|
{ "Number of blending tables", 32, 255 },
|
||||||
|
{ "Fullbright result colors OK?", 0, 1, GNF_BOOL },
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
engine.registerMenuFunc(
|
||||||
|
"Create base shade table",
|
||||||
|
CreateMenuFunction{
|
||||||
|
[0] = shadexfog.create0,
|
||||||
|
{ "Pal number", 100, MAXUSERPALOOKUP },
|
||||||
|
{ "Second attempt?", 1, 1, GNF_BOOL },
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
engine.registerMenuFunc(
|
||||||
|
"Create depth shade tab",
|
||||||
|
CreateMenuFunction{
|
||||||
|
[0] = shadexfog.create_depth_shtab,
|
||||||
|
{ "Pal number", 100, MAXUSERPALOOKUP },
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
engine.registerMenuFunc(
|
||||||
|
"Create vismarker sh. tab",
|
||||||
|
CreateMenuFunction{
|
||||||
|
[0] = shadexfog.create_vismarker_shtab,
|
||||||
|
{ "Pal number", 100, MAXUSERPALOOKUP },
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
engine.registerMenuFunc(
|
||||||
|
"Create c.index remapping",
|
||||||
|
function()
|
||||||
|
local palnum = getnumber16("Pal number: ", 100, MAXUSERPALOOKUP, df)
|
||||||
|
if (palnum < 0) then return end
|
||||||
|
|
||||||
|
local remaptab = {}
|
||||||
|
while (true) do
|
||||||
|
local srchex = getnumber16("Source hexadecatuple (0: finish): ", 0, 14, df)
|
||||||
|
if (srchex < 0) then return end
|
||||||
|
local dsthex = getnumber16("Destn. hexadecatuple (0: finish): ", 0, 14, df)
|
||||||
|
if (dsthex < 0) then return end
|
||||||
|
|
||||||
|
if (srchex == 0 and dsthex == 0) then
|
||||||
|
break
|
||||||
|
end
|
||||||
|
|
||||||
|
remaptab[srchex] = dsthex
|
||||||
|
end
|
||||||
|
|
||||||
|
shadexfog.createremap(palnum, remaptab)
|
||||||
|
end
|
||||||
|
)
|
||||||
|
|
||||||
|
engine.registerMenuFunc("_________DEBUG_________", function() end)
|
||||||
|
engine.registerMenuFunc("Setup dbg. water basepal", engine.setupDebugBasePal)
|
||||||
|
engine.registerMenuFunc("Linearize default basep.", engine.linearizeBasePal)
|
||||||
|
|
||||||
|
|
||||||
do
|
do
|
||||||
return shadexfog
|
return shadexfog
|
||||||
end
|
end
|
||||||
|
|
|
@ -72,6 +72,9 @@ static void EditSpriteData(int16_t spritenum);
|
||||||
static void EditWallData(int16_t wallnum);
|
static void EditWallData(int16_t wallnum);
|
||||||
static void EditSectorData(int16_t sectnum);
|
static void EditSectorData(int16_t sectnum);
|
||||||
static void FuncMenu(void);
|
static void FuncMenu(void);
|
||||||
|
#ifdef LUNATIC
|
||||||
|
static void LuaFuncMenu(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
#define BASEPALCOUNT 6
|
#define BASEPALCOUNT 6
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue