Lunatic: extend map-VX walltype by 'blend' member. BUILD_LUNATIC.

Make Mapster32 save as map-text if there is a wall with non-zero 'blend'.

git-svn-id: https://svn.eduke32.com/eduke32@4368 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
helixhorned 2014-03-10 20:08:27 +00:00
parent c3187cea1e
commit 802650048d
4 changed files with 33 additions and 12 deletions

View file

@ -529,7 +529,7 @@ static inline void inplace_vx_tweak_sector(sectortypevx *vxsec, int32_t yaxp)
# undef SECTORVX_SZ1
# undef SECTORVX_SZ4
// 36 bytes
// 38 bytes
typedef struct
{
Tracker(Wall, int32_t) x, y;
@ -541,9 +541,10 @@ typedef struct
Tracker(Wall, uint8_t) pal, xrepeat, yrepeat, xpanning, ypanning;
Tracker(Wall, uint16_t) lotag, hitag;
Tracker(Wall, int16_t) extra;
Tracker(Wall, uint8_t) blend, filler_;
} walltypevx;
# define WALLVX_SZ2 sizeof(walltypevx)-offsetof(walltypevx, cstat)
# define WALLVX_SZ2 offsetof(walltypevx, blend)-offsetof(walltypevx, cstat)
static inline void copy_v7_from_vx_wall(walltypev7 *v7wal, const walltypevx *vxwal)
{
@ -561,6 +562,8 @@ static inline void inplace_vx_from_v7_wall(walltypevx *vxwal)
/* [cstat..extra] */
Bmemmove(&vxwal->cstat, &v7wal->cstat, WALLVX_SZ2);
vxwal->blend = vxwal->filler_ = 0;
}
static inline void inplace_vx_tweak_wall(walltypevx *vxwal, int32_t yaxp)

View file

@ -665,7 +665,7 @@ void yax_update(int32_t resetstat)
#if !defined NEW_MAP_FORMAT
editstatus = oeditstatus;
#else
mapversion = (numyaxbunches>0) ? 10 : get_mapversion();
mapversion = get_mapversion();
#endif
}
@ -6694,8 +6694,11 @@ static void drawmaskwall(int16_t damaskwallcnt)
else
{
if (globalorientation&128)
#ifdef NEW_MAP_FORMAT
setup_blend(wal->blend, globalorientation&512);
#else
setup_blend(0, globalorientation&512);
#endif
transmaskwallscan(xb1[z],xb2[z], 0);
}
}
@ -10986,13 +10989,26 @@ int32_t loadmaphack(const char *filename)
LUNATIC_CB int32_t (*saveboard_maptext)(const char *filename, const vec3_t *dapos, int16_t daang, int16_t dacursectnum);
#endif
// Get map version of binary map format (< map-int VX).
// Get map version of external map format (<10: old binary format, ==10: new
// 'VX' map-text format).
static int32_t get_mapversion(void)
{
#ifdef YAX_ENABLE
if (numyaxbunches > 0)
# ifdef NEW_MAP_FORMAT
return 10;
# else
return 9;
else
# endif
#endif
#ifdef NEW_MAP_FORMAT
{
int32_t i;
for (i=0; i<numwalls; i++)
if (wall[i].blend != 0)
return 10;
}
#endif
if (numsectors > MAXSECTORSV7 || numwalls > MAXWALLSV7 || Numsprites > MAXSPRITESV7)
return 8;
@ -11038,8 +11054,11 @@ int32_t saveboard(const char *filename, const vec3_t *dapos, int16_t daang, int1
// and the engine-reported number of sprites 'Numsprites'.
Bassert(numsprites == Numsprites);
// Determine the map version.
mapversion = get_mapversion();
#ifdef NEW_MAP_FORMAT
if (numyaxbunches > 0)
if (mapversion == 10)
{
initprintf("Saving of TROR maps not yet accessible in the Lunatic preview build\n");
return -1;
@ -11055,8 +11074,6 @@ int32_t saveboard(const char *filename, const vec3_t *dapos, int16_t daang, int1
return -1;
}
// Determine the map version.
mapversion = get_mapversion();
tl = B_LITTLE32(mapversion); Bwrite(fil,&tl,4);
tl = B_LITTLE32(dapos->x); Bwrite(fil,&tl,4);

View file

@ -25,7 +25,7 @@ ffi.cdef "const char **g_argv;"
-- (env var: LUAJIT_DUMPFILE)
-- profile: load LuaJIT's 'jit.p' module for profiling (LuaJIT 2.1 only)
-- (env var: LUAJIT_PROFILEFILE)
-- strict: catch various conditions that may indicate an logical error
-- strict: catch various conditions that may indicate a logical error
-- TODO for strict: actor[], spriteext[], per-actor gamevars
local debug_flags = {}
local IS_DEBUG_FLAG = {
@ -242,6 +242,7 @@ struct {
int8_t shade;
uint8_t pal, xrepeat, yrepeat, xpanning, ypanning;
int16_t lotag, hitag, extra;
uint8_t blend, _filler;
}]]
-- NOTE for FFI definitions: we're compiling EDuke32 with -funsigned-char, so

View file

@ -67,13 +67,13 @@ local wall_members = {
-- optional
f = "cstat",
m = "overpicnum",
m = "overpicnum", b = "blend",
p = "pal",
w = { "upwall", -1 }, W = { "dnwall", -1 },
o = "lotag", i = "hitag", e = { "extra", -1 }
}
local wall_ord = { mand="1 23 4 5 6 78 90 ", opt="f m p wW oie" }
local wall_ord = { mand="1 23 4 5 6 78 90 ", opt="f mb p wW oie" }
local wall_default = ffi.new("const walltype", { extra = -1, upwall=-1, dnwall=-1 })