update
This commit is contained in:
parent
58e9c2920e
commit
3bbe3612fe
|
@ -62,6 +62,7 @@ set(SNOWLIB_SRC_FILES
|
||||||
snowlib/AnimData.cpp
|
snowlib/AnimData.cpp
|
||||||
snowlib/AnimDecoder.cpp
|
snowlib/AnimDecoder.cpp
|
||||||
snowlib/FntDecoder.cpp
|
snowlib/FntDecoder.cpp
|
||||||
|
snowlib/GameRegion.h
|
||||||
snowlib/GameType.h
|
snowlib/GameType.h
|
||||||
snowlib/GIFTag.cpp
|
snowlib/GIFTag.cpp
|
||||||
snowlib/GobFile.cpp
|
snowlib/GobFile.cpp
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#include "gameData.h"
|
#include "gameData.h"
|
||||||
|
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
|
#include <QDebug>
|
||||||
|
|
||||||
#include "LmpRepository.h"
|
#include "LmpRepository.h"
|
||||||
#include "GobFile.h"
|
#include "GobFile.h"
|
||||||
|
@ -13,15 +14,19 @@
|
||||||
#include "WorldReader.h"
|
#include "WorldReader.h"
|
||||||
#include "World.h"
|
#include "World.h"
|
||||||
|
|
||||||
void GameData::read(QString rootDir, QString worldName)
|
void GameData::read(QString rootDir, QString worldName)
|
||||||
{
|
{
|
||||||
|
this->rootDir = rootDir;
|
||||||
|
gameType = GameType::UNKNOWN;
|
||||||
findGame(rootDir);
|
findGame(rootDir);
|
||||||
/*
|
if (gameType != GameType::UNKNOWN) {
|
||||||
LmpRepository* lmpRepository = new LmpRepositoryImpl(dataPath, GameType::DARK_ALLIANCE);
|
QString lmpDir = rootDir + dataRelPath;
|
||||||
|
LmpRepository* lmpRepository = new LmpRepositoryImpl(lmpDir.toStdString(), gameType);
|
||||||
|
|
||||||
GobFile cuttownGob = GobFile(dataPath + "CUTTOWN.GOB", GameType::DARK_ALLIANCE);
|
QString gobFile = lmpDir + "CUTTOWN.GOB";
|
||||||
World* world = WorldReader().readWorld(&cuttownGob, "cuttown");
|
GobFile cuttownGob = GobFile(gobFile.toStdString(), gameType);
|
||||||
*/
|
World* world = WorldReader().readWorld(&cuttownGob, "cuttown");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void GameData::findGame(QString rootDir)
|
void GameData::findGame(QString rootDir)
|
||||||
|
@ -29,6 +34,35 @@ void GameData::findGame(QString rootDir)
|
||||||
QDir rootDirectory(rootDir);
|
QDir rootDirectory(rootDir);
|
||||||
if (rootDirectory.exists()) {
|
if (rootDirectory.exists()) {
|
||||||
auto entries = rootDirectory.entryList(QStringList() << "SL*.*");
|
auto entries = rootDirectory.entryList(QStringList() << "SL*.*");
|
||||||
|
if (entries.length() == 1) {
|
||||||
|
auto slFile = entries.first();
|
||||||
|
findGameFromElf(slFile);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
qWarning() << "Cannot find SL*.* file in " << rootDir;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void GameData::findGameFromElf(QString elfname)
|
||||||
|
{
|
||||||
|
qDebug() << "found elf " << elfname;
|
||||||
|
if (elfname == "SLES_506.72") {
|
||||||
|
gameType = GameType::DARK_ALLIANCE;
|
||||||
|
gameRegion = GameRegion::PAL;
|
||||||
|
dataRelPath = "BG/DATA";
|
||||||
|
}
|
||||||
|
else if (elfname == "SLES_530.39") {
|
||||||
|
gameType = GameType::CHAMPIONS_RTA;
|
||||||
|
gameRegion = GameRegion::PAL;
|
||||||
|
dataRelPath = "BG/DATA";
|
||||||
|
}
|
||||||
|
else if (elfname == "SLES_544.23") {
|
||||||
|
gameType = GameType::JL_HEROES;
|
||||||
|
gameRegion = GameRegion::PAL;
|
||||||
|
dataRelPath = "GAME/DATA";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
qWarning() << "Unknown game: " << elfname;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,11 +2,27 @@
|
||||||
|
|
||||||
#include <QString>
|
#include <QString>
|
||||||
|
|
||||||
|
#include "GameType.h"
|
||||||
|
#include "GameRegion.h"
|
||||||
|
|
||||||
class GameData
|
class GameData
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
GameData() : gameRegion(GameRegion::UNKNOWN), gameType(GameType::UNKNOWN) {}
|
||||||
|
|
||||||
void read(QString rootDir, QString worldName);
|
void read(QString rootDir, QString worldName);
|
||||||
|
|
||||||
|
private:
|
||||||
|
GameRegion gameRegion;
|
||||||
|
GameType gameType;
|
||||||
|
|
||||||
|
/* The directory to the root of the disc, where the elf is located. */
|
||||||
|
QString rootDir;
|
||||||
|
|
||||||
|
/* Relative path from the root where the data files live. */
|
||||||
|
QString dataRelPath;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void findGame(QString rootDir);
|
void findGame(QString rootDir);
|
||||||
|
void findGameFromElf(QString elfname);
|
||||||
};
|
};
|
||||||
|
|
9
snowlib/GameRegion.h
Normal file
9
snowlib/GameRegion.h
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
enum class GameRegion
|
||||||
|
{
|
||||||
|
UNKNOWN,
|
||||||
|
PAL,
|
||||||
|
NTSC
|
||||||
|
};
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
#ifndef GAMETYPE_H_
|
#ifndef GAMETYPE_H_
|
||||||
#define GAMETYPE_H_
|
#define GAMETYPE_H_
|
||||||
|
|
||||||
enum GameType
|
enum class GameType
|
||||||
{
|
{
|
||||||
|
UNKNOWN,
|
||||||
DARK_ALLIANCE,
|
DARK_ALLIANCE,
|
||||||
CHAMPIONS_RTA
|
CHAMPIONS_RTA,
|
||||||
|
JL_HEROES
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // GAMETYPE_H_
|
#endif // GAMETYPE_H_
|
||||||
|
|
Reference in a new issue