Bladeren bron

Merge pull request #83 from paulsapps/installer

Installer
paulsapps 11 jaren geleden
bovenliggende
commit
bdbd1869db

+ 3 - 0
.gitmodules

@@ -13,3 +13,6 @@
 	path = dependencies/luajit
 	url = https://github.com/q-gears/luajit.git
 	branch = master
+[submodule "dependencies/SUDM"]
+	path = dependencies/SUDM
+	url = https://github.com/paulsapps/SUDM.git

+ 2 - 0
CMakeLists.txt

@@ -182,6 +182,7 @@ set(QGears_INCLUDE_DIRS
     ${CMAKE_CURRENT_SOURCE_DIR}/dependencies/luabind
     ${CMAKE_CURRENT_SOURCE_DIR}/dependencies/luabind/luabind/detail
     ${CMAKE_CURRENT_SOURCE_DIR}/dependencies/tinyxml
+	${CMAKE_CURRENT_SOURCE_DIR}/dependencies/SUDM
 )
 
 
@@ -368,6 +369,7 @@ SET_PROPERTY(TARGET LuaBind PROPERTY FOLDER "3rdparty")
 SET_PROPERTY(TARGET luajit PROPERTY FOLDER "3rdparty")
 SET_PROPERTY(TARGET minilua PROPERTY FOLDER "3rdparty")
 SET_PROPERTY(TARGET TinyXml PROPERTY FOLDER "3rdparty")
+SET_PROPERTY(TARGET Sudm_Lib PROPERTY FOLDER "q-gears")
 
 
 INCLUDE(CPack)

+ 20 - 19
QGearsMain/include/data/QGearsFLevelFile.h

@@ -61,20 +61,21 @@ namespace QGears
 
         static const String RESOURCE_TYPE;
 
-        virtual const BackgroundFilePtr&    getBackground  ( void ) const;
-        virtual const CameraMatrixFilePtr&  getCameraMatrix( void ) const;
-        virtual const ModelListFilePtr&     getModelList   ( void ) const;
-        virtual const PaletteFilePtr&       getPalette     ( void ) const;
-        virtual const WalkmeshFilePtr&      getWalkmesh    ( void ) const;
-
-        virtual void setBackground  ( const BackgroundFilePtr      &background    );
-        virtual void setCameraMatrix( const CameraMatrixFilePtr    &camera_matrix );
-        virtual void setModelList   ( const ModelListFilePtr       &model_list    );
-        virtual void setPalette     ( const PaletteFilePtr         &palette       );
-        virtual void setWalkmesh    ( const WalkmeshFilePtr        &walkmesh      );
-
-        virtual String getBackground2DName( void ) const;
-        virtual String getBackgroundTextureName( void ) const;
+        std::vector<u8> getRawScript();
+        const BackgroundFilePtr&    getBackground  ( void ) const;
+        const CameraMatrixFilePtr&  getCameraMatrix( void ) const;
+        const ModelListFilePtr&     getModelList   ( void ) const;
+        const PaletteFilePtr&       getPalette     ( void ) const;
+        const WalkmeshFilePtr&      getWalkmesh    ( void ) const;
+
+        void setBackground  ( const BackgroundFilePtr      &background    );
+        void setCameraMatrix( const CameraMatrixFilePtr    &camera_matrix );
+        void setModelList   ( const ModelListFilePtr       &model_list    );
+        void setPalette     ( const PaletteFilePtr         &palette       );
+        void setWalkmesh    ( const WalkmeshFilePtr        &walkmesh      );
+
+        String getBackground2DName( void ) const;
+        String getBackgroundTextureName( void ) const;
 
     protected:
         typedef std::vector<HRCFilePtr>         HRCList;
@@ -84,11 +85,11 @@ namespace QGears
         static const String SUFFIX_BACKGROUND_TEXTURE;
         static const String SUFFIX_BACKGROUND_2D;
 
-        virtual void loadImpl( void );
-        virtual void loadModels( void );
-        virtual void loadAnimations( const HRCFilePtr &model, const AnimationList &animations );
-        virtual void unloadImpl( void );
-        virtual size_t calculateSize( void ) const;
+        virtual void loadImpl( void ) override;
+        void loadModels( void );
+        void loadAnimations( const HRCFilePtr &model, const AnimationList &animations );
+        virtual void unloadImpl( void ) override;
+        virtual size_t calculateSize( void ) const override;
 
         virtual const String& getResourceType( void ) const;
 

+ 6 - 0
QGearsMain/src/data/QGearsFLevelFile.cpp

@@ -179,6 +179,12 @@ namespace QGears
         return 0;
     }
 
+    std::vector<u8> FLevelFile::getRawScript()
+    {
+        // TODO
+        return std::vector<u8>();
+    }
+
     //--------------------------------------------------------------------------
     const BackgroundFilePtr&
     FLevelFile::getBackground( void ) const

+ 4 - 1
dependencies/CMakeLists.txt

@@ -4,15 +4,18 @@ include_directories(
 	luajit/src
 	luabind/luabind
 	luabind/luabind/detail
+	SUDM
 )
 
 add_subdirectory(tinyxml)
 add_subdirectory(luajit)
 
-
+SET(SUDM_AS_LIB TRUE CACHE BOOL "Build only lib")
+add_subdirectory(SUDM)
 
  aux_source_directory( luabind/luabind LuaBind_header_FILES )
  aux_source_directory( luabind/luabind/details LuaBind_header_details_FILES )		
  aux_source_directory( luabind/src LuaBind_src_FILES )		
  add_library(LuaBind STATIC ${LuaBind_src_FILES} ${LuaBind_header_FILES} ${LuaBind_header_details_FILES})
+ 
  

+ 1 - 0
dependencies/SUDM

@@ -0,0 +1 @@
+Subproject commit 66ae9c61d44ccca61859fc343dd740b05f4a2f12

+ 1 - 3
utilities/q-gears-launcher/CMakeLists.txt

@@ -1,6 +1,3 @@
-project( q-gears-launcher )
-cmake_minimum_required( VERSION 2.6 )
-
 find_package ( Qt4 REQUIRED )
 include ( ${QT_USE_FILE} )
 include_directories (
@@ -50,6 +47,7 @@ set(LIBRARIES
     Utility
     QGearsMain
     q-gears-data
+    Sudm_Lib
 )
 
 

+ 86 - 21
utilities/q-gears-launcher/src/ff7DataInstaller.cpp

@@ -27,6 +27,7 @@
 #include "common/QGearsStringUtil.h"
 #include "common/FF7NameLookup.h"
 #include "data/QGearsTexCodec.h"
+#include "decompiler/sudm.h"
 
 FF7DataInstaller::FF7DataInstaller()
 #ifdef _DEBUG
@@ -49,11 +50,11 @@ void FF7DataInstaller::Convert(std::string inputDir, std::string outputDir, cons
     {
         if (file == "field/char.lgp")
         {
-
+            /*
             auto fullPath = inputDir + file;
             mApp.getRoot()->addResourceLocation(fullPath, "LGP", "FFVII");
             ConvertFieldModels(fullPath, outputDir);
-            mApp.getRoot()->removeResourceLocation(fullPath, "FFVII");
+            mApp.getRoot()->removeResourceLocation(fullPath, "FFVII");*/
         }
         else if (file == "field/flevel.lgp")
         {
@@ -131,40 +132,104 @@ void FF7DataInstaller::ConvertFieldModels(std::string archive, std::string outDi
     */
 }
 
+class FF7FieldScriptFormatter : public SUDM::IScriptFormatter
+{
+public:
+    virtual bool ExcludeFunction(const std::string& ) override
+    {
+        // Include everything for now
+        return false;
+    }
+
+
+    virtual std::string RenameIdentifer(const std::string& name) override
+    {
+        // Don't rename anything for now
+        return name;
+    }
+};
+
 static void FF7PcFieldToQGearsField(QGears::FLevelFilePtr& field, const std::string& outDir)
 {
     // Save out the tiles as a PNG image
     
     const QGears::BackgroundFilePtr& bg = field->getBackground();
+
+    try
+    {
+        // Get the raw script bytes
+        const std::vector<u8> rawFieldData = field->getRawScript();
+
+        // Decompile to LUA
+        FF7FieldScriptFormatter formatter;
+        std::string luaScript = SUDM::FF7::Field::Decompile(field->getName(), rawFieldData, formatter);
+    }
+    catch (const ::InternalDecompilerError& ex)
+    {
+        std::cerr << "InternalDecompilerError: " << ex.what() << std::endl;
+    }
+
     /*
     const QGears::PaletteFilePtr& pal = field->getPalette();
     std::unique_ptr<Ogre::Image> bgImage(bg->createImage(pal));
     bgImage->save(outDir + "/" + field->getName() + ".png");
     */
-    QGears::BackgroundFile::Layer& layer = bg->getLayers().at(0);
-    const QGears::CameraMatrixFilePtr& camMatrix = field->getCameraMatrix();
+    {
+        TiXmlDocument doc;
+        std::unique_ptr<TiXmlElement> element(new TiXmlElement("background2d"));
+
+        auto& layers = bg->getLayers();
+        const QGears::CameraMatrixFilePtr& camMatrix = field->getCameraMatrix();
+
+
+        // TODO: Write out the *_BG.XML data
+        for (auto& layer : layers)
+        {
+          //  if (layer.enabled)
+            {
+               
+                for (QGears::BackgroundFile::SpriteData& sprite : layer.sprites)
+                {
+                    std::unique_ptr<TiXmlElement> xmlElement(new TiXmlElement("tile"));
+                    xmlElement->SetAttribute("destination", Ogre::StringConverter::toString(sprite.dst.x * 3) + " " + Ogre::StringConverter::toString(sprite.dst.y * 3));
 
-    // TODO: Write out the *_BG.XML data
+                    // Where to get UVs??
+                    //sprite.dst.x; layer.width
+                    //sprite.dst.y;
 
+                    // sprite.depth;
 
-    // Save out the walk mesh as XML
-    const QGears::WalkmeshFilePtr& walkmesh = field->getWalkmesh();
+                    // Where to get blend mode??
+
+                    element->LinkEndChild(xmlElement.release());
+                }
+               
+            }
+        }
+        doc.LinkEndChild(element.release());
+        doc.SaveFile(outDir + "/" + field->getName() + "_bg.xml");
+    }
 
-    TiXmlDocument doc;
-    std::unique_ptr<TiXmlElement> element(new TiXmlElement("walkmesh"));
-    for (QGears::WalkmeshFile::Triangle& tri : walkmesh->getTriangles())
     {
-        std::unique_ptr<TiXmlElement> xmlElement(new TiXmlElement("triangle"));
-        xmlElement->SetAttribute("a", Ogre::StringConverter::toString(tri.a));
-        xmlElement->SetAttribute("b", Ogre::StringConverter::toString(tri.b));
-        xmlElement->SetAttribute("c", Ogre::StringConverter::toString(tri.c));
-        xmlElement->SetAttribute("a_b", std::to_string(tri.access_side[0]));
-        xmlElement->SetAttribute("b_c", std::to_string(tri.access_side[1]));
-        xmlElement->SetAttribute("c_a", std::to_string(tri.access_side[2]));
-        element->LinkEndChild(xmlElement.release());
+        // Save out the walk mesh as XML
+        const QGears::WalkmeshFilePtr& walkmesh = field->getWalkmesh();
+
+        TiXmlDocument doc;
+        std::unique_ptr<TiXmlElement> element(new TiXmlElement("walkmesh"));
+        for (QGears::WalkmeshFile::Triangle& tri : walkmesh->getTriangles())
+        {
+            std::unique_ptr<TiXmlElement> xmlElement(new TiXmlElement("triangle"));
+            xmlElement->SetAttribute("a", Ogre::StringConverter::toString(tri.a));
+            xmlElement->SetAttribute("b", Ogre::StringConverter::toString(tri.b));
+            xmlElement->SetAttribute("c", Ogre::StringConverter::toString(tri.c));
+            xmlElement->SetAttribute("a_b", std::to_string(tri.access_side[0]));
+            xmlElement->SetAttribute("b_c", std::to_string(tri.access_side[1]));
+            xmlElement->SetAttribute("c_a", std::to_string(tri.access_side[2]));
+            element->LinkEndChild(xmlElement.release());
+        }
+        doc.LinkEndChild(element.release());
+        doc.SaveFile(outDir + "/" + field->getName() + "_wm.xml");
     }
-    doc.LinkEndChild(element.release());
-    doc.SaveFile(outDir + "/" + field->getName() +  "_wm.xml");
 }
 
 void FF7DataInstaller::ConvertFields(std::string archive, std::string outDir)
@@ -176,7 +241,7 @@ void FF7DataInstaller::ConvertFields(std::string archive, std::string outDir)
         if (!QGears::StringUtil::endsWith(resourceName, ".tex")
          && !QGears::StringUtil::endsWith(resourceName, ".tut")
          && !QGears::StringUtil::endsWith(resourceName, ".siz")
-         && resourceName != "maplist" /*&& resourceName == "blin67_4"*/)
+         && resourceName != "maplist" && resourceName == "md1_1")
         {
             //try
             {