Просмотр исходного кода

Integrate SUDM, still need to obtain raw script bytes from PC field field, and SUDM needs interface wiring into the decompiler engine

Paul 11 лет назад
Родитель
Сommit
751bf9f410

+ 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 ccab2422ef3d4c997e9f954669ac1b0443072234

+ 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
 )
 
 

+ 34 - 0
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
@@ -131,11 +132,43 @@ 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));
@@ -148,6 +181,7 @@ static void FF7PcFieldToQGearsField(QGears::FLevelFilePtr& field, const std::str
         auto& layers = bg->getLayers();
         const QGears::CameraMatrixFilePtr& camMatrix = field->getCameraMatrix();
 
+
         // TODO: Write out the *_BG.XML data
         for (auto& layer : layers)
         {