STARK: Add indices checking in Cmd_ChangeLocation()
This commit is contained in:
parent
ba9e765262
commit
6b33c58c55
1 changed files with 42 additions and 2 deletions
|
@ -557,9 +557,49 @@ bool Console::Cmd_ChangeLocation(int argc, const char **argv) {
|
||||||
uint levelIndex = strtol(argv[1] , nullptr, 16);
|
uint levelIndex = strtol(argv[1] , nullptr, 16);
|
||||||
uint locationIndex = strtol(argv[2] , nullptr, 16);
|
uint locationIndex = strtol(argv[2] , nullptr, 16);
|
||||||
|
|
||||||
StarkResourceProvider->requestLocationChange(levelIndex, locationIndex);
|
bool isIndicesValid = true;
|
||||||
|
|
||||||
return false;
|
// Temporarily replace the global archive loader
|
||||||
|
ArchiveLoader *archiveLoader = new ArchiveLoader();
|
||||||
|
ArchiveLoader *gameArchiveLoader = StarkArchiveLoader;
|
||||||
|
StarkArchiveLoader = archiveLoader;
|
||||||
|
|
||||||
|
archiveLoader->load("x.xarc");
|
||||||
|
Resources::Root *root = archiveLoader->useRoot<Resources::Root>("x.xarc");
|
||||||
|
|
||||||
|
// Assert the level index
|
||||||
|
Resources::Level *level = root->findChildWithIndex<Resources::Level>(levelIndex);
|
||||||
|
if (!level) {
|
||||||
|
debugPrintf("Invalid level index %d, only %d indices available\n", levelIndex,
|
||||||
|
root->listChildren<Resources::Level>().size());
|
||||||
|
isIndicesValid = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load locations archives
|
||||||
|
Common::String levelArchive = archiveLoader->buildArchiveName(level);
|
||||||
|
archiveLoader->load(levelArchive);
|
||||||
|
level = archiveLoader->useRoot<Resources::Level>(levelArchive);
|
||||||
|
|
||||||
|
// Assert the location index
|
||||||
|
Resources::Location *location = level->findChildWithIndex<Resources::Location>(locationIndex);
|
||||||
|
if (!location) {
|
||||||
|
debugPrintf("Invalid location index %d, only %d indices available\n", locationIndex,
|
||||||
|
level->listChildren<Resources::Location>().size());
|
||||||
|
isIndicesValid = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Restore the global archive loader
|
||||||
|
archiveLoader->returnRoot(levelArchive);
|
||||||
|
archiveLoader->unloadUnused();
|
||||||
|
StarkArchiveLoader = gameArchiveLoader;
|
||||||
|
delete archiveLoader;
|
||||||
|
|
||||||
|
if (isIndicesValid) {
|
||||||
|
StarkResourceProvider->requestLocationChange(levelIndex, locationIndex);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Console::Cmd_ChangeChapter(int argc, const char **argv) {
|
bool Console::Cmd_ChangeChapter(int argc, const char **argv) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue