mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-12-25 03:00:46 +00:00
map-text: don't save sector[].wallnum, signal last wall of sector in point2.
git-svn-id: https://svn.eduke32.com/eduke32@3751 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
5e1ec28798
commit
1296f9ba55
1 changed files with 59 additions and 20 deletions
|
@ -27,7 +27,6 @@ int32_t (*loadboard_maptext)(int32_t fil, vec3_t *dapos, int16_t *daang, int16_t
|
||||||
|
|
||||||
local sector_members = {
|
local sector_members = {
|
||||||
-- Mandatory positional members first, [pos]=<name>.
|
-- Mandatory positional members first, [pos]=<name>.
|
||||||
"wallnum",
|
|
||||||
"ceilingz", "floorz",
|
"ceilingz", "floorz",
|
||||||
"ceilingpicnum", "floorpicnum",
|
"ceilingpicnum", "floorpicnum",
|
||||||
"ceilingshade", "floorshade";
|
"ceilingshade", "floorshade";
|
||||||
|
@ -49,8 +48,8 @@ local sector_members = {
|
||||||
}
|
}
|
||||||
|
|
||||||
-- Defines the order in which the members are written out. A space denotes that
|
-- Defines the order in which the members are written out. A space denotes that
|
||||||
-- a newline should appear in the output.
|
-- a newline should appear in the output. KEEPINSYNC with sector_members.
|
||||||
local sector_ord = { mand="1 23 45 67 ", opt="Bb Ff Hh Pp Xx Yy v _ oie" }
|
local sector_ord = { mand="12 34 56 ", opt="Bb Ff Hh Pp Xx Yy v _ oie" }
|
||||||
|
|
||||||
-- KEEPINSYNC with sector_members.
|
-- KEEPINSYNC with sector_members.
|
||||||
local sector_default = ffi.new("const sectortype", { ceilingbunch=-1, floorbunch=-1, extra=-1 })
|
local sector_default = ffi.new("const sectortype", { ceilingbunch=-1, floorbunch=-1, extra=-1 })
|
||||||
|
@ -58,7 +57,7 @@ local sector_default = ffi.new("const sectortype", { ceilingbunch=-1, floorbunch
|
||||||
|
|
||||||
local wall_members = {
|
local wall_members = {
|
||||||
-- mandatory
|
-- mandatory
|
||||||
"point2", -- special: 0 or 1 in map-text
|
"point2", -- special: 0, 1 or 2 in map-text
|
||||||
"x", "y",
|
"x", "y",
|
||||||
"nextwall",
|
"nextwall",
|
||||||
"picnum",
|
"picnum",
|
||||||
|
@ -162,8 +161,17 @@ local function check_bad_point2()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function lastwallofsect(s)
|
||||||
|
return ffiC.sector[s].wallptr + ffiC.sector[s].wallnum - 1
|
||||||
|
end
|
||||||
|
|
||||||
-- In map-text, instead of saving wall[].point2, we store whether a particular
|
-- In map-text, instead of saving wall[].point2, we store whether a particular
|
||||||
-- wall is the last one in its loop instead.
|
-- wall is the last one in its loop instead: the on-disk wall[i].point2 is
|
||||||
|
-- * 2 if wall i is last of its sector (no need to save sector's .wallnum),
|
||||||
|
-- * 1 if wall i is last of its loop,
|
||||||
|
-- * 0 otherwise.
|
||||||
|
-- This function prepares saving to map-text by tweaking the wall[].point2
|
||||||
|
-- members in-place.
|
||||||
local function save_tweak_point2()
|
local function save_tweak_point2()
|
||||||
-- Check first.
|
-- Check first.
|
||||||
if (check_bad_point2()) then
|
if (check_bad_point2()) then
|
||||||
|
@ -171,7 +179,8 @@ local function save_tweak_point2()
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Do it for real.
|
-- Do it for real.
|
||||||
lastloopstart = 0
|
local lastloopstart = 0
|
||||||
|
local cursect, curlastwall = 0, lastwallofsect(0)
|
||||||
|
|
||||||
for i=0,ffiC.numwalls-1 do
|
for i=0,ffiC.numwalls-1 do
|
||||||
local wal = ffiC.wall[i]
|
local wal = ffiC.wall[i]
|
||||||
|
@ -179,15 +188,28 @@ local function save_tweak_point2()
|
||||||
if (wal.point2 == i+1) then
|
if (wal.point2 == i+1) then
|
||||||
wal.point2 = 0
|
wal.point2 = 0
|
||||||
else
|
else
|
||||||
wal.point2 = 1 -- last point in loop
|
-- Wall i is last point in loop.
|
||||||
|
|
||||||
|
if (i==curlastwall) then
|
||||||
|
-- ... and also last wall of sector.
|
||||||
|
cursect = cursect+1
|
||||||
|
curlastwall = lastwallofsect(cursect)
|
||||||
|
|
||||||
|
wal.point2 = 2
|
||||||
|
else
|
||||||
|
wal.point2 = 1
|
||||||
|
end
|
||||||
|
|
||||||
lastloopstart = i+1
|
lastloopstart = i+1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- common
|
-- Common: restore tweaked point2 members to actual wall indices.
|
||||||
local function restore_point2()
|
-- If <alsosectorp> is true, also set sector's .wallptr and .wallnum members.
|
||||||
|
local function restore_point2(alsosectorp)
|
||||||
local lastloopstart = 0
|
local lastloopstart = 0
|
||||||
|
local cursect, curfirstwall = 0, 0
|
||||||
|
|
||||||
for i=0,ffiC.numwalls-1 do
|
for i=0,ffiC.numwalls-1 do
|
||||||
local wal = ffiC.wall[i]
|
local wal = ffiC.wall[i]
|
||||||
|
@ -196,6 +218,21 @@ local function restore_point2()
|
||||||
if (not islast) then
|
if (not islast) then
|
||||||
wal.point2 = i+1
|
wal.point2 = i+1
|
||||||
else
|
else
|
||||||
|
-- Wall i is last point in loop.
|
||||||
|
|
||||||
|
if (alsosectorp and wal.point2 == 2) then
|
||||||
|
-- ... and also last wall of sector.
|
||||||
|
|
||||||
|
if (cursect==ffiC.MAXSECTORS) then
|
||||||
|
return true -- Too many sectors.
|
||||||
|
end
|
||||||
|
|
||||||
|
ffiC.sector[cursect].wallptr = curfirstwall
|
||||||
|
ffiC.sector[cursect].wallnum = i-curfirstwall+1
|
||||||
|
cursect = cursect+1
|
||||||
|
curfirstwall = i+1
|
||||||
|
end
|
||||||
|
|
||||||
wal.point2 = lastloopstart
|
wal.point2 = lastloopstart
|
||||||
lastloopstart = i+1
|
lastloopstart = i+1
|
||||||
end
|
end
|
||||||
|
@ -214,7 +251,7 @@ local function saveboard_maptext(filename, pos, ang, cursectnum)
|
||||||
|
|
||||||
if (f == nil) then
|
if (f == nil) then
|
||||||
print(string.format("Couldn't open \"%s\" for writing: %s\n", filename, msg))
|
print(string.format("Couldn't open \"%s\" for writing: %s\n", filename, msg))
|
||||||
restore_point2()
|
restore_point2(false)
|
||||||
return -1
|
return -1
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -258,7 +295,7 @@ local function saveboard_maptext(filename, pos, ang, cursectnum)
|
||||||
|
|
||||||
-- Done.
|
-- Done.
|
||||||
f:close()
|
f:close()
|
||||||
restore_point2()
|
restore_point2(false)
|
||||||
return 0
|
return 0
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -408,7 +445,7 @@ local function loadboard_maptext(fil, posptr, angptr, cursectnumptr)
|
||||||
local sector, wall, sprite = ffiC.sector, ffiC.wall, ffiC.sprite
|
local sector, wall, sprite = ffiC.sector, ffiC.wall, ffiC.sprite
|
||||||
|
|
||||||
if (numsectors+0ULL > ffiC.MAXSECTORS or numwalls+0ULL > ffiC.MAXWALLS or
|
if (numsectors+0ULL > ffiC.MAXSECTORS or numwalls+0ULL > ffiC.MAXWALLS or
|
||||||
numsprites > ffiC.MAXSPRITES)
|
numsprites+0ULL > ffiC.MAXSPRITES)
|
||||||
then
|
then
|
||||||
return RETERR-8
|
return RETERR-8
|
||||||
end
|
end
|
||||||
|
@ -461,6 +498,16 @@ local function loadboard_maptext(fil, posptr, angptr, cursectnumptr)
|
||||||
numw = numw + sector[i].wallnum
|
numw = numw + sector[i].wallnum
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- .point2 in {0, 1} --> wall index, sector[].wallptr/.wallnum
|
||||||
|
if (restore_point2(true)) then
|
||||||
|
return RETERR-12
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Check .point2 at least.
|
||||||
|
if (check_bad_point2()) then
|
||||||
|
return RETERR-13
|
||||||
|
end
|
||||||
|
|
||||||
-- wall[]: .nextsector calculated by using engine's sectorofwall_noquick()
|
-- wall[]: .nextsector calculated by using engine's sectorofwall_noquick()
|
||||||
for i=0,numwalls-1 do
|
for i=0,numwalls-1 do
|
||||||
local nw = wall[i].nextwall
|
local nw = wall[i].nextwall
|
||||||
|
@ -473,14 +520,6 @@ local function loadboard_maptext(fil, posptr, angptr, cursectnumptr)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- .point2 in {0, 1} --> wall index
|
|
||||||
restore_point2()
|
|
||||||
|
|
||||||
-- Check .point2 at least.
|
|
||||||
if (check_bad_point2()) then
|
|
||||||
return RETERR-12
|
|
||||||
end
|
|
||||||
|
|
||||||
-- All OK, return the number of sprites for further engine loading code.
|
-- All OK, return the number of sprites for further engine loading code.
|
||||||
return numsprites
|
return numsprites
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue