Bläddra i källkod

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

Paul 11 år sedan
förälder
incheckning
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)
         {