mirror of
https://github.com/ZDoom/raze-gles.git
synced 2025-01-11 18:50:46 +00:00
Lunatic translator: codegen for actor-tsprite accesses, sync some RO members.
git-svn-id: https://svn.eduke32.com/eduke32@3454 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
77ecaa900a
commit
d5c62b7de3
5 changed files with 70 additions and 25 deletions
|
@ -1,12 +1,10 @@
|
||||||
-- Use this file like
|
-- CON language definitions
|
||||||
-- require("lpeg")
|
|
||||||
-- con = require("con_lang")
|
|
||||||
--
|
|
||||||
-- Contains:
|
|
||||||
-- * con.labels
|
|
||||||
-- * con.keyword
|
|
||||||
|
|
||||||
local lpeg = lpeg
|
local lpeg = require("lpeg")
|
||||||
|
|
||||||
|
local pairs = pairs
|
||||||
|
local print = print
|
||||||
|
local type = type
|
||||||
|
|
||||||
|
|
||||||
module(...)
|
module(...)
|
||||||
|
@ -304,6 +302,7 @@ wdata_members =
|
||||||
|
|
||||||
|
|
||||||
local SP = function(memb) return "sprite[%s]"..memb end
|
local SP = function(memb) return "sprite[%s]"..memb end
|
||||||
|
local ATSP = function(memb) return "atsprite[%s]"..memb end
|
||||||
local AC = function(memb) return "actor[%s]"..memb end
|
local AC = function(memb) return "actor[%s]"..memb end
|
||||||
local SX = function(memb) return "spriteext[%s]"..memb end
|
local SX = function(memb) return "spriteext[%s]"..memb end
|
||||||
|
|
||||||
|
@ -321,7 +320,7 @@ local ActorLabels = {
|
||||||
y = SP".y",
|
y = SP".y",
|
||||||
z = SP".z",
|
z = SP".z",
|
||||||
cstat = SP".cstat",
|
cstat = SP".cstat",
|
||||||
picnum = SP".picnum",
|
picnum = { SP".picnum", SP":set_picnum(%%s)" },
|
||||||
shade = SP".shade",
|
shade = SP".shade",
|
||||||
pal = SP".pal",
|
pal = SP".pal",
|
||||||
clipdist = SP".clipdist",
|
clipdist = SP".clipdist",
|
||||||
|
@ -331,12 +330,12 @@ local ActorLabels = {
|
||||||
yrepeat = SP".yrepeat",
|
yrepeat = SP".yrepeat",
|
||||||
xoffset = SP".xoffset",
|
xoffset = SP".xoffset",
|
||||||
yoffset = SP".yoffset",
|
yoffset = SP".yoffset",
|
||||||
sectnum = SP".sectnum",
|
sectnum = { SP".sectnum" },
|
||||||
statnum = SP".statnum",
|
statnum = { SP".statnum" },
|
||||||
ang = SP".ang",
|
ang = SP".ang",
|
||||||
owner = SP".owner",
|
owner = { SP".owner" },
|
||||||
xvel = SP".xvel",
|
xvel = SP".xvel",
|
||||||
yvel = SP".yvel",
|
yvel = { SP".yvel" },
|
||||||
zvel = SP".zvel",
|
zvel = SP".zvel",
|
||||||
lotag = SP".lotag",
|
lotag = SP".lotag",
|
||||||
hitag = SP".hitag",
|
hitag = SP".hitag",
|
||||||
|
@ -347,14 +346,14 @@ local ActorLabels = {
|
||||||
|
|
||||||
-- ActorExtra labels...
|
-- ActorExtra labels...
|
||||||
htcgg = AC".cgg",
|
htcgg = AC".cgg",
|
||||||
htpicnum = AC".picnum",
|
htpicnum = { AC".picnum", AC":set_picnum(%%s)" },
|
||||||
htang = AC".ang",
|
htang = AC".ang",
|
||||||
htextra = AC".extra",
|
htextra = AC".extra",
|
||||||
htowner = AC".owner",
|
htowner = { AC".owner", AC":set_owner(%%s)" },
|
||||||
htmovflag = AC".movflag",
|
htmovflag = AC".movflag",
|
||||||
httempang = AC".tempang",
|
httempang = AC".tempang",
|
||||||
htactorstayput = AC".actorstayput",
|
htactorstayput = AC".actorstayput",
|
||||||
htdispicnum = AC".dispicnum",
|
htdispicnum = { AC".dispicnum" },
|
||||||
httimetosleep = AC".timetosleep",
|
httimetosleep = AC".timetosleep",
|
||||||
htfloorz = AC".floorz",
|
htfloorz = AC".floorz",
|
||||||
htceilingz = AC".ceilingz",
|
htceilingz = AC".ceilingz",
|
||||||
|
@ -374,7 +373,7 @@ local ActorLabels = {
|
||||||
mdxoff = SX".xoff",
|
mdxoff = SX".xoff",
|
||||||
mdyoff = SX".yoff",
|
mdyoff = SX".yoff",
|
||||||
mdzoff = SX".zoff",
|
mdzoff = SX".zoff",
|
||||||
mdflags = SX".mdflags",
|
mdflags = SX".flags",
|
||||||
xpanning = SX".xpanning",
|
xpanning = SX".xpanning",
|
||||||
ypanning = SX".ypanning",
|
ypanning = SX".ypanning",
|
||||||
|
|
||||||
|
@ -382,6 +381,26 @@ local ActorLabels = {
|
||||||
alpha = { "_math.floor(spriteext[%s].alpha*255)" },
|
alpha = { "_math.floor(spriteext[%s].alpha*255)" },
|
||||||
}
|
}
|
||||||
|
|
||||||
|
local function spr2tspr(code)
|
||||||
|
if (code and code:find(SP"", 1, true)==1) then
|
||||||
|
return ATSP(code:sub(#SP"" + 1))
|
||||||
|
end
|
||||||
|
-- else return nothing
|
||||||
|
end
|
||||||
|
|
||||||
|
local TspriteLabels = {}
|
||||||
|
|
||||||
|
for member, code in pairs(ActorLabels) do
|
||||||
|
if (type(code)=="string") then
|
||||||
|
TspriteLabels["tspr"..member] = spr2tspr(code)
|
||||||
|
else
|
||||||
|
local rwcodetab = { spr2tspr(code[1]), spr2tspr(code[2]) }
|
||||||
|
if (#rwcodetab > 0) then
|
||||||
|
TspriteLabels["tspr"..member] = rwcodetab
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
local PL = function(memb) return "player[%s]"..memb end
|
local PL = function(memb) return "player[%s]"..memb end
|
||||||
|
|
||||||
local PlayerLabels = {
|
local PlayerLabels = {
|
||||||
|
@ -679,6 +698,12 @@ StructAccessCode =
|
||||||
player = PlayerLabels,
|
player = PlayerLabels,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
-- These structs cannot be accessed by inline array exprs in CON:
|
||||||
|
StructAccessCode2 =
|
||||||
|
{
|
||||||
|
tspr = TspriteLabels,
|
||||||
|
}
|
||||||
|
|
||||||
-- NOTE: These MUST be in reverse lexicographical order!
|
-- NOTE: These MUST be in reverse lexicographical order!
|
||||||
-- Per CON syntax, valid identifiers names are disjunct from keywords,
|
-- Per CON syntax, valid identifiers names are disjunct from keywords,
|
||||||
-- so that a rule like
|
-- so that a rule like
|
||||||
|
|
|
@ -767,6 +767,17 @@ local actor_mt = {
|
||||||
end
|
end
|
||||||
ffi.cast(actor_ptr_ct, a).t_data[idx] = val
|
ffi.cast(actor_ptr_ct, a).t_data[idx] = val
|
||||||
end,
|
end,
|
||||||
|
|
||||||
|
set_picnum = function(a, picnum)
|
||||||
|
check_tile_idx(picnum)
|
||||||
|
ffi.cast(actor_ptr_ct, a).picnum = picnum
|
||||||
|
end,
|
||||||
|
|
||||||
|
set_owner = function(a, owner)
|
||||||
|
-- XXX: is it permissible to set to -1?
|
||||||
|
check_sprite_idx(owner)
|
||||||
|
ffi.cast(actor_ptr_ct, a).owner = owner
|
||||||
|
end,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
ffi.metatype("actor_t", actor_mt)
|
ffi.metatype("actor_t", actor_mt)
|
||||||
|
|
|
@ -68,9 +68,13 @@ struct {
|
||||||
int8_t xoffset, yoffset;
|
int8_t xoffset, yoffset;
|
||||||
const int16_t sectnum, statnum;
|
const int16_t sectnum, statnum;
|
||||||
int16_t ang;
|
int16_t ang;
|
||||||
// NOTE: yvel is often used as player index in game code. Make xvel/zvel
|
|
||||||
// "const" for consistency, too.
|
const int16_t owner;
|
||||||
const int16_t owner, xvel, yvel, zvel;
|
int16_t xvel;
|
||||||
|
// NOTE: yvel is often used as player index in game code.
|
||||||
|
const int16_t yvel;
|
||||||
|
int16_t zvel;
|
||||||
|
|
||||||
int16_t lotag, hitag, extra;
|
int16_t lotag, hitag, extra;
|
||||||
}]]
|
}]]
|
||||||
|
|
||||||
|
@ -107,6 +111,7 @@ typedef struct {
|
||||||
const uint32_t mdanimtims;
|
const uint32_t mdanimtims;
|
||||||
const int16_t mdanimcur;
|
const int16_t mdanimcur;
|
||||||
int16_t angoff, pitch, roll;
|
int16_t angoff, pitch, roll;
|
||||||
|
// TODO: make into an ivec3_t
|
||||||
int32_t xoff, yoff, zoff;
|
int32_t xoff, yoff, zoff;
|
||||||
uint8_t flags;
|
uint8_t flags;
|
||||||
uint8_t xpanning, ypanning;
|
uint8_t xpanning, ypanning;
|
||||||
|
@ -399,6 +404,7 @@ local spritetype_mt = {
|
||||||
end,
|
end,
|
||||||
|
|
||||||
__index = {
|
__index = {
|
||||||
|
--- Setters
|
||||||
set_picnum = function(s, tilenum)
|
set_picnum = function(s, tilenum)
|
||||||
check_tile_idx(tilenum)
|
check_tile_idx(tilenum)
|
||||||
ffi.cast(spritetype_ptr_ct, s).picnum = tilenum
|
ffi.cast(spritetype_ptr_ct, s).picnum = tilenum
|
||||||
|
|
|
@ -1124,8 +1124,9 @@ local function StructAccess(Structname, writep, index, membertab)
|
||||||
local member, parm2 = membertab[1], membertab[2]
|
local member, parm2 = membertab[1], membertab[2]
|
||||||
assert(member ~= nil)
|
assert(member ~= nil)
|
||||||
|
|
||||||
|
local MemberCode = conl.StructAccessCode[Structname] or conl.StructAccessCode2[Structname]
|
||||||
-- Look up array+member name first, e.g. "spriteext[%s].angoff".
|
-- Look up array+member name first, e.g. "spriteext[%s].angoff".
|
||||||
local armembcode = conl.StructAccessCode[Structname][member]
|
local armembcode = MemberCode[member]
|
||||||
if (armembcode == nil) then
|
if (armembcode == nil) then
|
||||||
errprintf("invalid %s member `.%s'", Structname, member)
|
errprintf("invalid %s member `.%s'", Structname, member)
|
||||||
return "_MEMBINVALID"
|
return "_MEMBINVALID"
|
||||||
|
@ -1177,6 +1178,8 @@ local Access =
|
||||||
wall = function(...) return StructAccess("wall", ...) end,
|
wall = function(...) return StructAccess("wall", ...) end,
|
||||||
xsprite = function(...) return StructAccess("sprite", ...) end,
|
xsprite = function(...) return StructAccess("sprite", ...) end,
|
||||||
player = function(...) return StructAccess("player", ...) end,
|
player = function(...) return StructAccess("player", ...) end,
|
||||||
|
|
||||||
|
tspr = function(...) return StructAccess("tspr", ...) end,
|
||||||
}
|
}
|
||||||
|
|
||||||
local function GetStructCmd(accessfunc)
|
local function GetStructCmd(accessfunc)
|
||||||
|
@ -1277,7 +1280,7 @@ local Cinner = {
|
||||||
getinput = getstructcmd / handle.NYI,
|
getinput = getstructcmd / handle.NYI,
|
||||||
getprojectile = getstructcmd / handle.NYI,
|
getprojectile = getstructcmd / handle.NYI,
|
||||||
getthisprojectile = getstructcmd / handle.NYI,
|
getthisprojectile = getstructcmd / handle.NYI,
|
||||||
gettspr = getstructcmd / handle.NYI,
|
gettspr = GetStructCmd(Access.tspr),
|
||||||
-- NOTE: {get,set}userdef is the only struct that can be accessed without
|
-- NOTE: {get,set}userdef is the only struct that can be accessed without
|
||||||
-- an "array part", e.g. H266MOD has "setuserdef .weaponswitch 0" (space
|
-- an "array part", e.g. H266MOD has "setuserdef .weaponswitch 0" (space
|
||||||
-- between keyword and "." is mandatory).
|
-- between keyword and "." is mandatory).
|
||||||
|
@ -1299,7 +1302,7 @@ local Cinner = {
|
||||||
setinput = setstructcmd / handle.NYI,
|
setinput = setstructcmd / handle.NYI,
|
||||||
setprojectile = setstructcmd / handle.NYI,
|
setprojectile = setstructcmd / handle.NYI,
|
||||||
setthisprojectile = setstructcmd / handle.NYI,
|
setthisprojectile = setstructcmd / handle.NYI,
|
||||||
settspr = setstructcmd / handle.NYI,
|
settspr = SetStructCmd(Access.tspr),
|
||||||
setuserdef = (arraypat + sp1)/{} * singlememberpat * sp1 * tok.rvar / handle.NYI,
|
setuserdef = (arraypat + sp1)/{} * singlememberpat * sp1 * tok.rvar / handle.NYI,
|
||||||
|
|
||||||
setactorvar = setperxvarcmd,
|
setactorvar = setperxvarcmd,
|
||||||
|
|
|
@ -174,7 +174,7 @@ checkfail('gv.luaJIT_BC_con_lang', "attempt to call a nil value")
|
||||||
checkfail('gv.yax_getbunch(0,0)', "access forbidden")
|
checkfail('gv.yax_getbunch(0,0)', "access forbidden")
|
||||||
checkfail('gv.gethitickms = nil', "write access forbidden")
|
checkfail('gv.gethitickms = nil', "write access forbidden")
|
||||||
|
|
||||||
-- we don't have arrays in Lua-accessible structs now
|
-- actor[].t_data[] is not accessible for now
|
||||||
checkfail('local i = actor[0].t_data[15]', "has no member named 't_data'")
|
checkfail('local i = actor[0].t_data[15]', "has no member named 't_data'")
|
||||||
|
|
||||||
-- no pointer arithmetic!
|
-- no pointer arithmetic!
|
||||||
|
@ -348,8 +348,8 @@ print('---=== END TEST SCRIPT ===---')
|
||||||
function check_sector_idx()
|
function check_sector_idx()
|
||||||
error("bla")
|
error("bla")
|
||||||
end
|
end
|
||||||
--]]
|
|
||||||
spritesofsect(0)
|
spritesofsect(0)
|
||||||
|
--]]
|
||||||
|
|
||||||
--DBG_.oom()
|
--DBG_.oom()
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue