Exemplo n.º 1
0
bool FieldArchivePS::openBG(Field *field) const
{
	if(!iso)	return false;

	FieldPS *fieldPS = (FieldPS *)field;
	quint32 isoFieldID = fieldPS->isoFieldID();
	QByteArray dat, mim, lzk;

	if (iso->isDemo()) {
		if((int)isoFieldID+2 >= iso->fieldCount()) {
			qWarning() << "FieldArchivePS::openBG field ID out of range" << isoFieldID << iso->fieldCount();
			return false;
		}

		dat = iso->fileLZS(iso->fieldFile(isoFieldID));
		mim = iso->fileLZS(iso->fieldFile(isoFieldID+1));
		lzk = iso->fileLZS(iso->fieldFile(isoFieldID+2));
	} else {
		if(isoFieldID < 1 || (int)isoFieldID+1 >= iso->fieldCount()) {
			qWarning() << "FieldArchivePS::openBG field ID out of range" << isoFieldID << iso->fieldCount();
			return false;
		}

		mim = iso->fileLZS(iso->fieldFile(isoFieldID-1));
		dat = iso->fileLZS(iso->fieldFile(isoFieldID));
		lzk = iso->file(iso->fieldFile(isoFieldID+1));
	}

	return fieldPS->open2(dat, mim, lzk);
}
Exemplo n.º 2
0
bool FieldArchivePS::openBG(Field *field) const
{
    if(!iso)	return false;

    FieldPS *fieldPS = (FieldPS *)field;

    quint32 isoFieldID = fieldPS->isoFieldID();

    if(isoFieldID < 1 || (int)isoFieldID+1 >= iso->fieldCount())
        return false;

    QByteArray mim = iso->fileLZS(iso->fieldFile(isoFieldID-1));
    if(mim.isEmpty())
        return false;

    QByteArray dat = iso->fileLZS(iso->fieldFile(isoFieldID));
    if(dat.isEmpty())
        return false;

    QByteArray lzk = iso->file(iso->fieldFile(isoFieldID+1));
    if(lzk.isEmpty())
        return false;

    return fieldPS->open2(dat, mim, lzk);
}
Exemplo n.º 3
0
int FieldArchivePS::open(const QString &path, ArchiveObserver *progress)
{
	FieldPS *field;
	QString desc;
	int i, currentMap=0, fieldID=0;

	if(iso)		delete iso;
	iso = new FF8DiscArchive(path);
	if(!iso->open(QIODevice::ReadOnly)) {
		errorMsg = QObject::tr("Impossible d'ouvrir le fichier image disque. (%1)").arg(iso->errorString());
		return 1;
	}

	if(!iso->findIMG()) {
		errorMsg = QObject::tr("Fichier FF8DISC?.IMG introuvable.");
		return 4;
	}

	const QList<FF8DiscFile> &fieldFiles = iso->fieldDirectory();
	int tocSize = fieldFiles.size();
	const int tocStart = iso->isDemo() ? 0 : 77;

	if(tocSize == 0) {
		errorMsg = QObject::tr("Impossible d'ouvrir le dossier field.");
		return 4;
	}

	clearFields();
	setMapList(QStringList());
	int indexOf;

	quint32 freq = ((tocSize - tocStart) / 3)/100;

	if(freq == 0) {
		freq = 1;
	}

	progress->setObserverMaximum((tocSize - tocStart) / 3);

	for(i=tocStart ; i<tocSize ; i += 3) {
		QCoreApplication::processEvents();
		if(progress->observerWasCanceled()) {
			clearFields();
			errorMsg = QObject::tr("Ouverture annulée.");
			return 2;
		}
		if(currentMap % freq == 0) {
			progress->setObserverValue(currentMap);
		}

		QByteArray fieldData = iso->fileLZS(fieldFiles.at(i));

		if(!fieldData.isEmpty()) {
			if (iso->isDemo()) {
				field = new FieldJpDemoPS(i);
			} else {
				field = new FieldPS(i);
			}
			if(field->open(fieldData)) {
				if(field->hasJsmFile())
					desc = Data::location(field->getJsmFile()->mapID());
				else
					desc = QString();

				indexOf = mapList().indexOf(field->name());
				QString mapId = indexOf==-1 ? "~" : QString("%1").arg(indexOf, 3, 10, QChar('0'));

				fields.append(field);
				fieldsSortByName.insert(field->name(), fieldID);
				fieldsSortByDesc.insert(desc, fieldID);
				fieldsSortByMapId.insert(mapId, fieldID);
				++fieldID;
			} else {
				delete field;
			}
		}
		++currentMap;
	}

	if(fields.isEmpty()) {
		errorMsg = QObject::tr("Aucun écran trouvé.");
		return 4;
	}

	openModels();

	if(iso->isJp() && Config::value("encoding", "00").toString() == "00") {
		Config::setValue("encoding", "01");
	} else if(!iso->isJp() && Config::value("encoding", "00").toString() == "01") {
		Config::setValue("encoding", "00");
	}

	return 0;
}