LunaCON: fix rotatesprite coordinate check, gen. events to chain at beginning.

git-svn-id: https://svn.eduke32.com/eduke32@3639 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
helixhorned 2013-04-05 17:52:50 +00:00
parent 9fbab31998
commit 1e21ea3aae
4 changed files with 12 additions and 11 deletions

View file

@ -781,13 +781,13 @@ void printext256(int32_t xpos, int32_t ypos, int16_t col, int16_t backcol,
const char *name, char fontsize) ATTRIBUTE((nonnull(5)));
////////// specialized rotatesprite wrappers for (very) often used cases //////////
// don't clip at all, i.e. the whole screen real estate is available
static inline void rotatesprite(int32_t sx, int32_t sy, int32_t z, int16_t a, int16_t picnum,
int8_t dashade, char dapalnum, int32_t dastat,
int32_t cx1, int32_t cy1, int32_t cx2, int32_t cy2)
{
rotatesprite_(sx, sy, z, a, picnum, dashade, dapalnum, dastat, 0, cx1, cy1, cx2, cy2);
}
// Don't clip at all, i.e. the whole screen real estate is available:
static inline void rotatesprite_fs(int32_t sx, int32_t sy, int32_t z, int16_t a, int16_t picnum,
int8_t dashade, char dapalnum, int32_t dastat)
{

View file

@ -220,7 +220,7 @@ SFLAG = {
SFLAG_CACHE = -0x00010000,
SFLAG_ROTFIXED = -0x00020000,
SFLAG_HARDCODED_BADGUY = -0x00040000,
-- RESERVED for actor.FLAGS.CHAIN_BEG/CHAIN_END/REPLACE:
-- RESERVED for actor.FLAGS.chain_beg/chain_end/replace:
-- 0x20000000, 0x40000000
}

View file

@ -284,22 +284,22 @@ function rotatesprite(x, y, zoom, ang, tilenum, shade, pal, orientation,
check_tile_idx(tilenum)
orientation = bit.band(orientation, 4095) -- ROTATESPRITE_MAX-1
-- XXX: This is the same as the check in gameexec.c, but ideally we'd want
-- rotatesprite to accept all coordinates and simply draw nothing if they
-- denote an area beyond the screen.
if (not (x >= -320 and x < 640) or not (y >= -200 and y < 400)) then
error(format("invalid coordinates (%.03f, %.03f)", x, y), 2)
end
if (bit.band(orientation, 2048) ~= 2048) then -- ROTATESPRITE_FULL16
x = 65536*x
y = 65536*y
end
-- XXX: This is the same as the check in gameexec.c, but ideally we'd want
-- rotatesprite to accept all coordinates and simply draw nothing if they
-- denote an area beyond the screen.
if (not (x >= -320*65536 and x < 640*65536) or not (y >= -200*65536 and y < 400*65536)) then
error(format("invalid coordinates (%.03f, %.03f)", x, y), 2)
end
-- TODO: check that it works correctly with all coordinates, also if one
-- border is outside the screen etc...
ffiC.rotatesprite_(x, y, zoom, ang, tilenum, shade, pal, bit.bor(2,orientation),
alpha, cx1, cy1, cx2, cy2)
alpha, cx1, cy1, cx2, cy2)
end
function _myos(x, y, zoom, tilenum, shade, orientation, pal)

View file

@ -421,7 +421,8 @@ end
function on.event_end(pos, eventidx, codetab)
assert(type(codetab)=="table")
paddcodef(pos, "gameevent(%d, function (_aci, _pli, _dist)", eventidx)
-- 0x20000000: actor.FLAGS.chain_beg
paddcodef(pos, "gameevent(%d,0x20000000,function (_aci, _pli, _dist)", eventidx)
addcode(get_cache_sap_code())
addcode(codetab)
addcode("end)")