diff -Nru makoureactor-1.7.0/appveyor.yml makoureactor-1.7.1/appveyor.yml --- makoureactor-1.7.0/appveyor.yml 1970-01-01 00:00:00.000000000 +0000 +++ makoureactor-1.7.1/appveyor.yml 2016-05-01 12:49:41.000000000 +0000 @@ -0,0 +1,43 @@ +environment: + matrix: + - USE_MSVC: 1 + QTDIR: C:\Qt\5.6\msvc2013 + - USE_MINGW: 1 + QTDIR: C:\Qt\5.6\mingw49_32 + +install: + - if "%USE_MINGW%"=="1" set PATH=%QTDIR%\bin;C:\Qt\Tools\mingw492_32\bin;%PATH% + - if "%USE_MSVC%"=="1" set PATH=%QTDIR%\bin;C:\Qt\Tools\QtCreator\bin;%PATH% + - '"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat"' + - curl -L -o upx.zip http://upx.sourceforge.net/download/upx391w.zip && + 7z e upx.zip *.exe -r + +before_build: + - qmake -config release Makou_Reactor.pro + +build_script: + - if "%USE_MSVC%"=="1" jom + - if "%USE_MINGW%"=="1" mingw32-make + +after_build: + - FOR /F %%i IN ('git describe --tags') DO SET GIT_TAG_OR_BRANCH=%%i + - if "%USE_MSVC%"=="1" set DEPLOY_DIR="makoureactor-%GIT_TAG_OR_BRANCH%-win32" + - if "%USE_MINGW%"=="1" set DEPLOY_DIR="makoureactor-%GIT_TAG_OR_BRANCH%-win32-xp" + - echo "%DEPLOY_DIR%" + - deploy.bat + - MOVE *.qm deploy + - DIR deploy + - MOVE deploy "%DEPLOY_DIR%" + - 7z a "%DEPLOY_DIR%.zip" "%DEPLOY_DIR%" + +artifacts: + - path: makoureactor-*.zip + +deploy: + description: Description # Mandatory + provider: GitHub + auth_token: + secure: hC7ZT9txiEAgKU9m2PzmUNe/eDYz1dNPT2DketUKF+8CwuDiXQgNzKSx33Rek2CF + artifact: /makoureactor-.*\.zip/ + on: + appveyor_repo_tag: true # deploy on tag push only diff -Nru makoureactor-1.7.0/.clang-format makoureactor-1.7.1/.clang-format --- makoureactor-1.7.0/.clang-format 1970-01-01 00:00:00.000000000 +0000 +++ makoureactor-1.7.1/.clang-format 2016-05-01 12:49:41.000000000 +0000 @@ -0,0 +1,58 @@ +AccessModifierOffset: -4 +AlignAfterOpenBracket: Align +AlignConsecutiveAssignments: false +AlignConsecutiveDeclarations: false +AlignEscapedNewlinesLeft: false +AlignOperands: true +AlignTrailingComments: false +AllowAllParametersOfDeclarationOnNextLine: true +AllowShortBlocksOnASingleLine: false +AllowShortCaseLabelsOnASingleLine: false +AllowShortFunctionsOnASingleLine: false +AllowShortIfStatementsOnASingleLine: false +AllowShortLoopsOnASingleLine: false +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: false +AlwaysBreakTemplateDeclarations: false +BinPackArguments: true +BinPackParameters: true +BreakBeforeBinaryOperators: NonAssignment +BreakBeforeBraces: Linux +BreakBeforeTernaryOperators: true +BreakConstructorInitializersBeforeComma: false +ColumnLimit: 80 +ConstructorInitializerAllOnOneLineOrOnePerLine: false +ConstructorInitializerIndentWidth: 4 +ContinuationIndentWidth: 4 +Cpp11BracedListStyle: false +DerivePointerAlignment: false +DisableFormat: false +ForEachMacros: ['foreach'] +IncludeCategories: + - Regex: '^<' + Priority: 2 + - Regex: '.\*' + Priority: 1 +IndentCaseLabels: false +IndentWidth: 4 +IndentWrappedFunctionNames: false +KeepEmptyLinesAtTheStartOfBlocks: false +Language: Cpp +MaxEmptyLinesToKeep: 1 +NamespaceIndentation: All +PointerAlignment: Right +ReflowComments: true +SortIncludes: false +SpaceAfterCStyleCast: false +SpaceBeforeAssignmentOperators: true +SpaceBeforeParens: ControlStatements +SpaceInEmptyParentheses: false +SpacesBeforeTrailingComments: 1 +SpacesInAngles: false +SpacesInCStyleCastParentheses: false +SpacesInContainerLiterals: false +SpacesInParentheses: false +SpacesInSquareBrackets: false +Standard: Cpp11 +TabWidth: 4 +UseTab: ForIndentation diff -Nru makoureactor-1.7.0/core/Akao.cpp makoureactor-1.7.1/core/Akao.cpp --- makoureactor-1.7.0/core/Akao.cpp 1970-01-01 00:00:00.000000000 +0000 +++ makoureactor-1.7.1/core/Akao.cpp 2016-05-01 12:49:41.000000000 +0000 @@ -0,0 +1,6 @@ +#include "Akao.h" + +Akao::Akao() +{ + +} diff -Nru makoureactor-1.7.0/core/Akao.h makoureactor-1.7.1/core/Akao.h --- makoureactor-1.7.0/core/Akao.h 1970-01-01 00:00:00.000000000 +0000 +++ makoureactor-1.7.1/core/Akao.h 2016-05-01 12:49:41.000000000 +0000 @@ -0,0 +1,15 @@ +#ifndef AKAO_H +#define AKAO_H + +#include + +class Akao +{ +public: + Akao(); +private: + quint16 _musicID, _length, _reverbMode; + QMap _data; +}; + +#endif // AKAO_H diff -Nru makoureactor-1.7.0/core/AkaoIO.cpp makoureactor-1.7.1/core/AkaoIO.cpp --- makoureactor-1.7.0/core/AkaoIO.cpp 1970-01-01 00:00:00.000000000 +0000 +++ makoureactor-1.7.1/core/AkaoIO.cpp 2016-05-01 12:49:41.000000000 +0000 @@ -0,0 +1,21 @@ +#include "AkaoIO.h" + +AkaoIO::AkaoIO(QIODevice *device) : + IO(device) +{ + +} + +bool AkaoIO::read(Akao &akao) const +{ + Q_UNUSED(akao) + // TODO + return false; +} + +bool AkaoIO::write(const Akao &akao) const +{ + Q_UNUSED(akao) + // TODO + return false; +} diff -Nru makoureactor-1.7.0/core/AkaoIO.h makoureactor-1.7.1/core/AkaoIO.h --- makoureactor-1.7.0/core/AkaoIO.h 1970-01-01 00:00:00.000000000 +0000 +++ makoureactor-1.7.1/core/AkaoIO.h 2016-05-01 12:49:41.000000000 +0000 @@ -0,0 +1,16 @@ +#ifndef AKAOIO_H +#define AKAOIO_H + +#include "core/IO.h" +#include "core/Akao.h" + +class AkaoIO : public IO +{ +public: + explicit AkaoIO(QIODevice *device); + virtual ~AkaoIO() {} + bool read(Akao &akao) const; + bool write(const Akao &akao) const; +}; + +#endif // AKAOIO_H diff -Nru makoureactor-1.7.0/core/Clipboard.cpp makoureactor-1.7.1/core/Clipboard.cpp --- makoureactor-1.7.0/core/Clipboard.cpp 1970-01-01 00:00:00.000000000 +0000 +++ makoureactor-1.7.1/core/Clipboard.cpp 2016-05-01 12:49:41.000000000 +0000 @@ -0,0 +1,107 @@ +#include "Clipboard.h" +#include +#include +#include +#include +#include +#include +#include "core/field/Script.h" +#include "core/field/GrpScript.h" + +Clipboard *Clipboard::_instance = 0; + +Clipboard *Clipboard::instance() +{ + if(!_instance) { + _instance = new Clipboard(); + } + + return _instance; +} + +bool Clipboard::hasData(const QString &mimeType) +{ + return QApplication::clipboard()->mimeData()-> + hasFormat(mimeType); +} + +QByteArray Clipboard::data(const QString &mimeType) +{ + const QMimeData *mimeData = QApplication::clipboard()->mimeData(); + if(mimeData && mimeData->hasFormat(mimeType)) { + return mimeData->data(mimeType); + } +} + +void Clipboard::setData(const QString &mimeType, const QByteArray &data) +{ + QMimeData *mimeData = new QMimeData(); + mimeData->setData(mimeType, data); + QApplication::clipboard()->setMimeData(mimeData); +} + +bool Clipboard::hasFf7FieldScriptOpcodes() const +{ + return hasData(MIME_FF7_FIELD_SCRIPT_OPCODES); +} + +QList Clipboard::ff7FieldScriptOpcodes() const +{ + QList opcodes; + + QByteArray data = Clipboard::data(MIME_FF7_FIELD_SCRIPT_OPCODES); + if(!data.isEmpty()) { + QDataStream stream(data); + quint16 version; + stream >> version; + // Check version + if(version != VERSION_FF7_FIELD_SCRIPT_OPCODES) { + return opcodes; + } + stream >> opcodes; + } + + return opcodes; +} + +void Clipboard::setFF7FieldScriptOpcodes(const QList &opcodes) +{ + QByteArray data; + QDataStream stream(&data, QIODevice::WriteOnly); + stream << quint16(VERSION_FF7_FIELD_SCRIPT_OPCODES) + << opcodes; + setData(MIME_FF7_FIELD_SCRIPT_OPCODES, data); +} + +bool Clipboard::hasFf7FieldScriptGroups() const +{ + return hasData(MIME_FF7_FIELD_SCRIPT_GROUPS); +} + +QList Clipboard::ff7FieldScriptGroups() const +{ + QList groups; + + QByteArray data = Clipboard::data(MIME_FF7_FIELD_SCRIPT_GROUPS); + if(!data.isEmpty()) { + QDataStream stream(data); + quint16 version; + stream >> version; + // Check version + if(version != VERSION_FF7_FIELD_SCRIPT_GROUPS) { + return groups; + } + stream >> groups; + } + + return groups; +} + +void Clipboard::setFF7FieldScriptGroups(const QList &groups) +{ + QByteArray data; + QDataStream stream(&data, QIODevice::WriteOnly); + stream << quint16(VERSION_FF7_FIELD_SCRIPT_GROUPS) + << groups; + setData(MIME_FF7_FIELD_SCRIPT_GROUPS, data); +} diff -Nru makoureactor-1.7.0/core/Clipboard.h makoureactor-1.7.1/core/Clipboard.h --- makoureactor-1.7.0/core/Clipboard.h 1970-01-01 00:00:00.000000000 +0000 +++ makoureactor-1.7.1/core/Clipboard.h 2016-05-01 12:49:41.000000000 +0000 @@ -0,0 +1,35 @@ +#ifndef CLIPBOARD_H +#define CLIPBOARD_H + +#include + +#define VERSION_FF7_FIELD_SCRIPT_OPCODES 1 +#define MIME_FF7_FIELD_SCRIPT_OPCODES "application/x-makoureactor-ff7-field-script-opcodes" +#define VERSION_FF7_FIELD_SCRIPT_GROUPS 1 +#define MIME_FF7_FIELD_SCRIPT_GROUPS "application/x-makoureactor-ff7-field-script-groups" + +class Opcode; +class GrpScript; +class QClipboard; + +class Clipboard +{ +public: + static Clipboard *instance(); + bool hasFf7FieldScriptOpcodes() const; + QList ff7FieldScriptOpcodes() const; + void setFF7FieldScriptOpcodes(const QList &opcodes); + bool hasFf7FieldScriptGroups() const; + QList ff7FieldScriptGroups() const; + void setFF7FieldScriptGroups(const QList &groups); +private: + Clipboard() {} + static bool hasData(const QString &mimeType); + static QByteArray data(const QString &mimeType); + static void setData(const QString &mimeType, const QByteArray &data); + + static Clipboard *_instance; + +}; + +#endif // CLIPBOARD_H diff -Nru makoureactor-1.7.0/core/Config.cpp makoureactor-1.7.1/core/Config.cpp --- makoureactor-1.7.0/core/Config.cpp 2016-03-05 21:32:45.000000000 +0000 +++ makoureactor-1.7.1/core/Config.cpp 2016-05-01 12:49:41.000000000 +0000 @@ -33,10 +33,15 @@ void Config::set() { if(!settings) { #ifdef Q_OS_WIN - settings = new QSettings(qApp->applicationDirPath()+"/Makou_Reactor.ini", QSettings::IniFormat); + settings = new QSettings(qApp->applicationDirPath() + .append("/Makou_Reactor.ini"), + QSettings::IniFormat); #else - settings = new QSettings("Makou_Reactor"); + settings = new QSettings("makoureactor/settings"); #endif + settings->setValue("varFile", + QFileInfo(settings->fileName()) + .path().append("/vars.cfg")); } } diff -Nru makoureactor-1.7.0/core/field/FieldModelFile.cpp makoureactor-1.7.1/core/field/FieldModelFile.cpp --- makoureactor-1.7.0/core/field/FieldModelFile.cpp 2016-03-05 21:32:45.000000000 +0000 +++ makoureactor-1.7.1/core/field/FieldModelFile.cpp 2016-05-01 12:49:41.000000000 +0000 @@ -36,3 +36,8 @@ _skeleton.clear(); _animations.clear(); } + +bool FieldModelFile::isValid() const +{ + return !_animations.isEmpty() && !_skeleton.isEmpty(); +} diff -Nru makoureactor-1.7.0/core/field/FieldModelFile.h makoureactor-1.7.1/core/field/FieldModelFile.h --- makoureactor-1.7.0/core/field/FieldModelFile.h 2016-03-05 21:32:45.000000000 +0000 +++ makoureactor-1.7.1/core/field/FieldModelFile.h 2016-05-01 12:49:41.000000000 +0000 @@ -29,10 +29,8 @@ FieldModelFile(); virtual ~FieldModelFile(); - inline bool isEmpty() const { - return _skeleton.isEmpty(); - } virtual void clear(); + virtual bool isValid() const; virtual bool translateAfter() const=0; inline const FieldModelSkeleton &skeleton() const { diff -Nru makoureactor-1.7.0/core/field/FieldModelFilePC.cpp makoureactor-1.7.1/core/field/FieldModelFilePC.cpp --- makoureactor-1.7.0/core/field/FieldModelFilePC.cpp 2016-03-05 21:32:45.000000000 +0000 +++ makoureactor-1.7.1/core/field/FieldModelFilePC.cpp 2016-05-01 12:49:41.000000000 +0000 @@ -70,13 +70,21 @@ QImage tex = openTexture(texName % ".tex"); if (!tex.isNull()) { _loadedTex.insert(texID, tex); + } else { + qWarning() << "FieldModelFilePC::load error texture" << hrcFilename << texName; } ++texID; } return true; + } else { + qWarning() << "FieldModelFilePC::load error animation" << hrcFilename << aFilename; } + } else { + qWarning() << "FieldModelFilePC::load error mesh" << hrcFilename; } + } else { + qWarning() << "FieldModelFilePC::load error skeleton" << hrcFilename; } return false; @@ -110,6 +118,8 @@ foreach (const QString &rsd, itRsd.value()) { if (openPart(rsd.toLower() % ".rsd", boneID, textureFiles)) { onePartOpened = true; + } else { + qWarning() << "FieldModelFilePC::openMesh cannot open part" << rsd; } } } @@ -129,6 +139,7 @@ _skeleton[boneID].addPart(part); return true; } else { + qWarning() << "FieldModelFilePC::openPart part error" << rsdFileName << rsd.pFile(); delete part; } } diff -Nru makoureactor-1.7.0/core/field/FieldModelFilePS.cpp makoureactor-1.7.1/core/field/FieldModelFilePS.cpp --- makoureactor-1.7.0/core/field/FieldModelFilePS.cpp 2016-03-05 21:32:45.000000000 +0000 +++ makoureactor-1.7.1/core/field/FieldModelFilePS.cpp 2016-05-01 12:49:41.000000000 +0000 @@ -136,7 +136,7 @@ } } - if (!modelBcx.isEmpty()) { + if (modelBcx.isValid()) { if (!skeleton().isEmpty()) { qWarning() << "FieldPS::fieldModel bsx present, but bcx skeleton not empty"; foreach (const FieldModelBone &bone, skeleton().bones()) { diff -Nru makoureactor-1.7.0/core/field/FieldPC.cpp makoureactor-1.7.1/core/field/FieldPC.cpp --- makoureactor-1.7.0/core/field/FieldPC.cpp 2016-03-05 21:32:45.000000000 +0000 +++ makoureactor-1.7.1/core/field/FieldPC.cpp 2016-05-01 12:49:41.000000000 +0000 @@ -100,7 +100,7 @@ } FieldModelFilePC *fieldModel = new FieldModelFilePC(); - if(open && fieldModel->isEmpty()) { + if(open) { fieldModel->load(hrc, a, animate); } return fieldModel; diff -Nru makoureactor-1.7.0/core/field/GrpScript.cpp makoureactor-1.7.1/core/field/GrpScript.cpp --- makoureactor-1.7.0/core/field/GrpScript.cpp 2016-03-05 21:32:45.000000000 +0000 +++ makoureactor-1.7.1/core/field/GrpScript.cpp 2016-05-01 12:49:41.000000000 +0000 @@ -92,6 +92,13 @@ for(int i=0 ; i<32 ; i++) addScript(); } +GrpScript::GrpScript(const QString &name, QList