2
0
mirror of https://github.com/AxioDL/metaforce.git synced 2025-12-09 06:27:43 +00:00

temporary ID dumping hard-coded

This commit is contained in:
Jack Andersen
2015-10-25 16:31:09 -10:00
parent fb11af23c6
commit fa8b48d43e
16 changed files with 435 additions and 70 deletions

View File

@@ -74,9 +74,11 @@ void PAKBridge::build()
{
Level& level = m_levelDeps[entry.id];
PAKEntryReadStream rs = entry.beginReadStream(m_node);
MLVL mlvl;
mlvl.read(rs);
{
PAKEntryReadStream rs = entry.beginReadStream(m_node);
mlvl.read(rs);
}
#if HECL_UCS2
level.name = HECL::UTF8ToWide(m_pak.bestEntryName(entry));
#else
@@ -85,6 +87,19 @@ void PAKBridge::build()
level.areas.reserve(mlvl.areaCount);
unsigned layerIdx = 0;
/* Make MAPW available to lookup MAPAs */
const DNAMP1::PAK::Entry* worldMapEnt = m_pak.lookupEntry(mlvl.worldMap);
std::vector<UniqueID32> mapw;
if (worldMapEnt)
{
PAKEntryReadStream rs = worldMapEnt->beginReadStream(m_node);
rs.seek(8, Athena::Current);
atUint32 areaCount = rs.readUint32Big();
mapw.reserve(areaCount);
for (atUint32 i=0 ; i<areaCount ; ++i)
mapw.emplace_back(rs);
}
/* Index areas */
unsigned ai = 0;
for (const MLVL::Area& area : mlvl.areas)
@@ -95,16 +110,18 @@ void PAKBridge::build()
if (areaNameEnt)
{
STRG areaName;
PAKEntryReadStream rs = areaNameEnt->beginReadStream(m_node);
areaName.read(rs);
{
PAKEntryReadStream rs = areaNameEnt->beginReadStream(m_node);
areaName.read(rs);
}
areaDeps.name = areaName.getSystemString(FOURCC('ENGL'), 0);
/* Trim possible trailing whitespace */
#if HECL_UCS2
while (areaDeps.name.size() && iswblank(areaDeps.name.back()))
while (areaDeps.name.size() && iswspace(areaDeps.name.back()))
areaDeps.name.pop_back();
#else
while (areaDeps.name.size() && isblank(areaDeps.name.back()))
while (areaDeps.name.size() && isspace(areaDeps.name.back()))
areaDeps.name.pop_back();
#endif
}
@@ -125,7 +142,7 @@ void PAKBridge::build()
}
}
HECL::SystemChar num[16];
HECL::SNPrintf(num, 16, _S("%02u "), ai++);
HECL::SNPrintf(num, 16, _S("%02u "), ai);
areaDeps.name = num + areaDeps.name;
areaDeps.layers.reserve(area.depLayerCount-1);
@@ -138,10 +155,10 @@ void PAKBridge::build()
layer.active = layerFlags.flags >> (l-1) & 0x1;
/* Trim possible trailing whitespace */
#if HECL_UCS2
while (layer.name.size() && iswblank(layer.name.back()))
while (layer.name.size() && iswspace(layer.name.back()))
layer.name.pop_back();
#else
while (layer.name.size() && isblank(layer.name.back()))
while (layer.name.size() && isspace(layer.name.back()))
layer.name.pop_back();
#endif
HECL::SNPrintf(num, 16, layer.active ? _S("%02ua ") : _S("%02u "), l-1);
@@ -151,10 +168,13 @@ void PAKBridge::build()
for (; r<area.depLayers[l] ; ++r)
layer.resources.emplace(area.deps[r].id);
}
areaDeps.resources.reserve(area.depCount - r);
areaDeps.resources.reserve(area.depCount - r + 2);
for (; r<area.depCount ; ++r)
areaDeps.resources.emplace(area.deps[r].id);
areaDeps.resources.emplace(area.areaMREAId);
if (mapw.size() > ai)
areaDeps.resources.emplace(mapw[ai]);
++ai;
}
}
}