diff --git a/polymer/eduke32/source/lunatic/control.lua b/polymer/eduke32/source/lunatic/control.lua index 3c438251d..b49e9a758 100644 --- a/polymer/eduke32/source/lunatic/control.lua +++ b/polymer/eduke32/source/lunatic/control.lua @@ -1498,6 +1498,17 @@ function _movesprite(spritenum, x, y, z, cliptype) return ffiC.A_MoveSprite(spritenum, vel, cliptype) end +-- Also known as A_SetSprite(). +function _ssp(i, cliptype) + check_sprite_idx(i) + local spr = ffiC.sprite[i] + local vec = spr.xvel * bangvec(spr.ang) -- XXX: slightly different rounding? + local ivec = vec:toivec3() + ivec.z = spr.zvel + + return (ffiC.A_MoveSprite(i, ivec, cliptype)==0) +end + -- CON's 'setsprite' function on top of the Lunatic-provided ones. -- (Lunatic's sprite setting functions have slightly different semantics.) local updatesect = sprite.updatesect diff --git a/polymer/eduke32/source/lunatic/lunacon.lua b/polymer/eduke32/source/lunatic/lunacon.lua index 19f8a700d..2623673ad 100644 --- a/polymer/eduke32/source/lunatic/lunacon.lua +++ b/polymer/eduke32/source/lunatic/lunacon.lua @@ -303,7 +303,7 @@ local function new_initial_codetab() "local _div, _mod, _mulTR, _mulWR = _con._div, _con._mod, _con._mulTR, _con._mulWR", "local _band, _bor, _bxor = _bit.band, _bit.bor, _bit.bxor", "local _lsh, _rsh, _arsh = _bit.lshift, _bit.rshift, _bit.arshift", - "local _setsprite = _con._setsprite", + "local _setsprite,_ssp = _con._setsprite,_con._ssp", -- * CON "states" (subroutines) and -- * Switch function table, indexed by global switch sequence number: @@ -2751,7 +2751,7 @@ local Cinner = { spriteflags = cmd(R) -- also see outer / ACS".flags=%1", ssp = cmd(R,R) - / handle.NYI, + / "_ssp(%1,%2)", setsprite = cmd(R,R,R,R) / "_setsprite(%1,_IV(1,%2,%3,%4))", updatesector = cmd(R,R,W) diff --git a/polymer/eduke32/source/lunatic/test/rotfixed_actor.con b/polymer/eduke32/source/lunatic/test/rotfixed_actor.con index 9d76ba03c..710db4067 100644 --- a/polymer/eduke32/source/lunatic/test/rotfixed_actor.con +++ b/polymer/eduke32/source/lunatic/test/rotfixed_actor.con @@ -42,3 +42,15 @@ eventloadactor GPSPEED mulvar ra_temp 4 setactor[THISACTOR].lotag ra_temp enda + +gamevar ii 0 0 +onevent EVENT_PROCESSINPUT + setvar ii 0 + whilevarvarn ii MAXSPRITES + { + ifvare sprite[ii].picnum 58 // space suit + ssp ii CLIPMASK0 + + addvar ii 1 + } +endevent