some FileSelect decomp, and add RFL dependency

This commit is contained in:
shibbo 2021-12-12 03:27:32 -05:00
parent 365d6aac55
commit 909f460f3d
16 changed files with 282 additions and 28 deletions

View File

@ -10,7 +10,7 @@ This repo contains a WIP decompilation of Super Mario Galaxy 1 (USA).
## Build Instructions
1. Obtain a copy of the `GC_WII_COMPILERS` zip. I can provide this if you need it (DM me on Discord at shibboleet#1010).
2. Add `MWFOLDER`, the path to the CodeWarrior 1.2.5 installation, to the system enviornment variables. Do the same for NW4R with the name `NW4RFOLDER`, and once more for RVL_SDK with the name `RVLFOLDER`. Add `CWFOLDER` and have it point the `GC_WII_COMPILERS` folder.
2. Add `MWFOLDER`, the path to the CodeWarrior 1.2.5 installation, to the system enviornment variables. Do the same for NW4R with the name `NW4RFOLDER`, and once more for RVL_SDK with the name `RVLFOLDER`. Add `CWFOLDER` and have it point the `GC_WII_COMPILERS` folder, and add `RFLFOLDER` and have it point to the `RVLFaceLib` folder, I can also supply this if needed.
3. Install `pyelftools` and `capstone` in Python 3.
4. Run `build.py`, then use `check.py` to verify matching status. For more information, see docs/Contributing.

View File

@ -48,12 +48,17 @@ if "MWFOLDER" not in os.environ:
print("MWFOLDER not set in PATH.")
sys.exit(1)
if "RFLFOLDER" not in os.environ:
print("RFLFOLDER not set in PATH.")
sys.exit(1)
rvl_path = os.getenv("RVLFOLDER")
cw_path = os.getenv("CWFOLDER")
nw_path = os.getenv("NW4RFOLDER")
mw_path = os.getenv("MWFOLDER")
rfl_path = os.getenv("RFLFOLDER")
includes += f"-i {rvl_path}\\include -I- -i {nw_path}\\include -I- -i {mw_path}\\PowerPC_EABI_Support\\MetroTRK -I- -i {mw_path}\\PowerPC_EABI_Support\\Runtime\\Inc -I- -i {mw_path}\\PowerPC_EABI_Support\\MSL\\MSL_C\\PPC_EABI\\Include -I- -i {mw_path}\\PowerPC_EABI_Support\\MSL\\MSL_C++\\MSL_Common\\Include -I- -i {mw_path}\\PowerPC_EABI_Support\\MSL\\MSL_C\\MSL_Common\\Include "
includes += f"-i {rvl_path}\\include -I- -i {nw_path}\\include -I- -i {mw_path}\\PowerPC_EABI_Support\\MetroTRK -I- -i {mw_path}\\PowerPC_EABI_Support\\Runtime\\Inc -I- -i {mw_path}\\PowerPC_EABI_Support\\MSL\\MSL_C\\PPC_EABI\\Include -I- -i {mw_path}\\PowerPC_EABI_Support\\MSL\\MSL_C++\\MSL_Common\\Include -I- -i {mw_path}\\PowerPC_EABI_Support\\MSL\\MSL_C\\MSL_Common\\Include -I- -i {rfl_path}\\include "
flags += includes
if os.path.exists("build"):
@ -90,7 +95,6 @@ for task in tasks:
pass
print(f"Compiling {source_path}...")
if subprocess.call(f"{compiler_path}/mwcceppc.exe {flags} {source_path} -o {build_path}", shell=True) == 1:
deleteDFiles()
sys.exit(1)

View File

@ -217,17 +217,17 @@ execute__Q230@unnamed@FileSelectEffect_cpp@28FileSelectEffectNrvDisappearCFP5Spi
execute__Q230@unnamed@FileSelectEffect_cpp@23FileSelectEffectNrvWaitCFP5Spine,FileSelectEffect.o,Map.a,false
execute__Q230@unnamed@FileSelectEffect_cpp@25FileSelectEffectNrvAppearCFP5Spine,FileSelectEffect.o,Map.a,false
__dt__16FileSelectEffectFv,FileSelectEffect.o,Map.a,false
getMiiNameBufferSize__14FileSelectFuncFv,FileSelectFunc.o,Map.a,false
copyMiiName__14FileSelectFuncFPUsRC16FileSelectIconID,FileSelectFunc.o,Map.a,false
__ct__16FileSelectIconIDFv,FileSelectIconID.o,Map.a,false
__ct__16FileSelectIconIDFRC16FileSelectIconID,FileSelectIconID.o,Map.a,false
set__16FileSelectIconIDFRC16FileSelectIconID,FileSelectIconID.o,Map.a,false
setMiiIndex__16FileSelectIconIDFUs,FileSelectIconID.o,Map.a,false
isMii__16FileSelectIconIDCFv,FileSelectIconID.o,Map.a,false
getMiiIndex__16FileSelectIconIDCFv,FileSelectIconID.o,Map.a,false
setFellowID__16FileSelectIconIDFQ216FileSelectIconID9EFellowID,FileSelectIconID.o,Map.a,false
isFellow__16FileSelectIconIDCFv,FileSelectIconID.o,Map.a,false
getFellowID__16FileSelectIconIDCFv,FileSelectIconID.o,Map.a,false
getMiiNameBufferSize__14FileSelectFuncFv,FileSelectFunc.o,Map.a,true
copyMiiName__14FileSelectFuncFPUsRC16FileSelectIconID,FileSelectFunc.o,Map.a,true
__ct__16FileSelectIconIDFv,FileSelectIconID.o,Map.a,true
__ct__16FileSelectIconIDFRC16FileSelectIconID,FileSelectIconID.o,Map.a,true
set__16FileSelectIconIDFRC16FileSelectIconID,FileSelectIconID.o,Map.a,true
setMiiIndex__16FileSelectIconIDFUs,FileSelectIconID.o,Map.a,true
isMii__16FileSelectIconIDCFv,FileSelectIconID.o,Map.a,true
getMiiIndex__16FileSelectIconIDCFv,FileSelectIconID.o,Map.a,true
setFellowID__16FileSelectIconIDFQ216FileSelectIconID9EFellowID,FileSelectIconID.o,Map.a,true
isFellow__16FileSelectIconIDCFv,FileSelectIconID.o,Map.a,true
getFellowID__16FileSelectIconIDCFv,FileSelectIconID.o,Map.a,true
checkCollisionOfPointAndCylinder__28@unnamed@FileSelectItem_cpp@FRCQ29JGeometry8TVec3<f>RCQ29JGeometry8TVec3<f>RCQ29JGeometry8TVec3<f>f,FileSelectItem.o,Map.a,false
__ct__14FileSelectItemFlbRC16FileSelectIconIDPCc,FileSelectItem.o,Map.a,false
init__14FileSelectItemFRC12JMapInfoIter,FileSelectItem.o,Map.a,false

1 Symbol Name Object File Library Archive Matching
217 execute__Q230@unnamed@FileSelectEffect_cpp@23FileSelectEffectNrvWaitCFP5Spine FileSelectEffect.o Map.a false
218 execute__Q230@unnamed@FileSelectEffect_cpp@25FileSelectEffectNrvAppearCFP5Spine FileSelectEffect.o Map.a false
219 __dt__16FileSelectEffectFv FileSelectEffect.o Map.a false
220 getMiiNameBufferSize__14FileSelectFuncFv FileSelectFunc.o Map.a false true
221 copyMiiName__14FileSelectFuncFPUsRC16FileSelectIconID FileSelectFunc.o Map.a false true
222 __ct__16FileSelectIconIDFv FileSelectIconID.o Map.a false true
223 __ct__16FileSelectIconIDFRC16FileSelectIconID FileSelectIconID.o Map.a false true
224 set__16FileSelectIconIDFRC16FileSelectIconID FileSelectIconID.o Map.a false true
225 setMiiIndex__16FileSelectIconIDFUs FileSelectIconID.o Map.a false true
226 isMii__16FileSelectIconIDCFv FileSelectIconID.o Map.a false true
227 getMiiIndex__16FileSelectIconIDCFv FileSelectIconID.o Map.a false true
228 setFellowID__16FileSelectIconIDFQ216FileSelectIconID9EFellowID FileSelectIconID.o Map.a false true
229 isFellow__16FileSelectIconIDCFv FileSelectIconID.o Map.a false true
230 getFellowID__16FileSelectIconIDCFv FileSelectIconID.o Map.a false true
231 checkCollisionOfPointAndCylinder__28@unnamed@FileSelectItem_cpp@FRCQ29JGeometry8TVec3<f>RCQ29JGeometry8TVec3<f>RCQ29JGeometry8TVec3<f>f FileSelectItem.o Map.a false
232 __ct__14FileSelectItemFlbRC16FileSelectIconIDPCc FileSelectItem.o Map.a false
233 init__14FileSelectItemFRC12JMapInfoIter FileSelectItem.o Map.a false

View File

@ -37,11 +37,11 @@ isResetDone__16AudSystemWrapperFv,AudSystemWrapper.o,System.a,false
resumeReset__16AudSystemWrapperFv,AudSystemWrapper.o,System.a,false
receiveResourceForInitialize__16AudSystemWrapperFv,AudSystemWrapper.o,System.a,false
__ct__21BinaryDataChunkHolderFUli,BinaryDataChunkHolder.o,System.a,false
addChunk__21BinaryDataChunkHolderFP19BinaryDataChunkBase,BinaryDataChunkHolder.o,System.a,false
addChunk__21BinaryDataChunkHolderFP19BinaryDataChunkBase,BinaryDataChunkHolder.o,System.a,true
makeFileBinary__21BinaryDataChunkHolderFPUcUl,BinaryDataChunkHolder.o,System.a,false
loadFromFileBinary__21BinaryDataChunkHolderFPCUcUl,BinaryDataChunkHolder.o,System.a,false
makeChunkData__21BinaryDataChunkHolderFP30BinaryDataChunkHolderChunkDataUlPC19BinaryDataChunkBase,BinaryDataChunkHolder.o,System.a,false
findFromSignature__21BinaryDataChunkHolderCFUl,BinaryDataChunkHolder.o,System.a,false
findFromSignature__21BinaryDataChunkHolderCFUl,BinaryDataChunkHolder.o,System.a,true
calcBinarySize__21BinaryDataChunkHolderFPCUc,BinaryDataChunkHolder.o,System.a,false
__ct__33BinaryDataContentHeaderSerializerFPUcUl,BinaryDataContentAccessor.o,System.a,false
addAttribute__33BinaryDataContentHeaderSerializerFPCcUl,BinaryDataContentAccessor.o,System.a,false
@ -1050,14 +1050,14 @@ deserialize__13ConfigDataMiiFPCUcUl,ConfigDataMii.o,System.a,false
initializeData__13ConfigDataMiiFv,ConfigDataMii.o,System.a,false
getAvailable__20JSURandomInputStreamCFv,ConfigDataMii.o,System.a,false
__ct__14ConfigDataMiscFv,ConfigDataMisc.o,System.a,false
isLastLoadedMario__14ConfigDataMiscCFv,ConfigDataMisc.o,System.a,false
setLastLoadedMario__14ConfigDataMiscFb,ConfigDataMisc.o,System.a,false
onCompleteEndingMario__14ConfigDataMiscFv,ConfigDataMisc.o,System.a,false
onCompleteEndingLuigi__14ConfigDataMiscFv,ConfigDataMisc.o,System.a,false
isOnCompleteEndingMario__14ConfigDataMiscFv,ConfigDataMisc.o,System.a,false
isOnCompleteEndingLuigi__14ConfigDataMiscFv,ConfigDataMisc.o,System.a,false
getLastModified__14ConfigDataMiscCFv,ConfigDataMisc.o,System.a,false
updateLastModified__14ConfigDataMiscFv,ConfigDataMisc.o,System.a,false
isLastLoadedMario__14ConfigDataMiscCFv,ConfigDataMisc.o,System.a,true
setLastLoadedMario__14ConfigDataMiscFb,ConfigDataMisc.o,System.a,true
onCompleteEndingMario__14ConfigDataMiscFv,ConfigDataMisc.o,System.a,true
onCompleteEndingLuigi__14ConfigDataMiscFv,ConfigDataMisc.o,System.a,true
isOnCompleteEndingMario__14ConfigDataMiscFv,ConfigDataMisc.o,System.a,true
isOnCompleteEndingLuigi__14ConfigDataMiscFv,ConfigDataMisc.o,System.a,true
getLastModified__14ConfigDataMiscCFv,ConfigDataMisc.o,System.a,true
updateLastModified__14ConfigDataMiscFv,ConfigDataMisc.o,System.a,true
makeHeaderHashCode__14ConfigDataMiscCFv,ConfigDataMisc.o,System.a,false
getSignature__14ConfigDataMiscCFv,ConfigDataMisc.o,System.a,false
serialize__14ConfigDataMiscCFPUcUl,ConfigDataMisc.o,System.a,false

1 Symbol Name Object File Library Archive Matching
37 resumeReset__16AudSystemWrapperFv AudSystemWrapper.o System.a false
38 receiveResourceForInitialize__16AudSystemWrapperFv AudSystemWrapper.o System.a false
39 __ct__21BinaryDataChunkHolderFUli BinaryDataChunkHolder.o System.a false
40 addChunk__21BinaryDataChunkHolderFP19BinaryDataChunkBase BinaryDataChunkHolder.o System.a false true
41 makeFileBinary__21BinaryDataChunkHolderFPUcUl BinaryDataChunkHolder.o System.a false
42 loadFromFileBinary__21BinaryDataChunkHolderFPCUcUl BinaryDataChunkHolder.o System.a false
43 makeChunkData__21BinaryDataChunkHolderFP30BinaryDataChunkHolderChunkDataUlPC19BinaryDataChunkBase BinaryDataChunkHolder.o System.a false
44 findFromSignature__21BinaryDataChunkHolderCFUl BinaryDataChunkHolder.o System.a false true
45 calcBinarySize__21BinaryDataChunkHolderFPCUc BinaryDataChunkHolder.o System.a false
46 __ct__33BinaryDataContentHeaderSerializerFPUcUl BinaryDataContentAccessor.o System.a false
47 addAttribute__33BinaryDataContentHeaderSerializerFPCcUl BinaryDataContentAccessor.o System.a false
1050 initializeData__13ConfigDataMiiFv ConfigDataMii.o System.a false
1051 getAvailable__20JSURandomInputStreamCFv ConfigDataMii.o System.a false
1052 __ct__14ConfigDataMiscFv ConfigDataMisc.o System.a false
1053 isLastLoadedMario__14ConfigDataMiscCFv ConfigDataMisc.o System.a false true
1054 setLastLoadedMario__14ConfigDataMiscFb ConfigDataMisc.o System.a false true
1055 onCompleteEndingMario__14ConfigDataMiscFv ConfigDataMisc.o System.a false true
1056 onCompleteEndingLuigi__14ConfigDataMiscFv ConfigDataMisc.o System.a false true
1057 isOnCompleteEndingMario__14ConfigDataMiscFv ConfigDataMisc.o System.a false true
1058 isOnCompleteEndingLuigi__14ConfigDataMiscFv ConfigDataMisc.o System.a false true
1059 getLastModified__14ConfigDataMiscCFv ConfigDataMisc.o System.a false true
1060 updateLastModified__14ConfigDataMiscFv ConfigDataMisc.o System.a false true
1061 makeHeaderHashCode__14ConfigDataMiscCFv ConfigDataMisc.o System.a false
1062 getSignature__14ConfigDataMiscCFv ConfigDataMisc.o System.a false
1063 serialize__14ConfigDataMiscCFPUcUl ConfigDataMisc.o System.a false

View File

@ -1,6 +1,6 @@
{
"schemaVersion": 1,
"label": "decompiled",
"message": "1.2442219%",
"message": "1.2606331%",
"color": "blue"
}

View File

@ -0,0 +1,19 @@
#pragma once
#include "Game/Map/FileSelectIconID.h"
namespace {
static const char* sIconNameMessageID[5] = {
"System_FileSelect_Icon000",
"System_FileSelect_Icon001",
"System_FileSelect_Icon002",
"System_FileSelect_Icon003",
"System_FileSelect_Icon004"
};
};
class FileSelectFunc {
public:
static u32 getMiiNameBufferSize();
static void copyMiiName(u16 *, const FileSelectIconID &);
};

View File

@ -0,0 +1,24 @@
#pragma once
#include <revolution.h>
class FileSelectIconID {
public:
enum EFellowID {
};
FileSelectIconID();
FileSelectIconID(const FileSelectIconID &);
void set(const FileSelectIconID &);
void setMiiIndex(u16);
bool isMii() const;
u16 getMiiIndex() const;
void setFellowID(FileSelectIconID::EFellowID);
bool isFellow() const;
FileSelectIconID::EFellowID getFellowID() const;
bool _0;
u16 _2;
};

View File

@ -0,0 +1,28 @@
#pragma once
#include <revolution.h>
/* todo -- figure out true size */
class BinaryDataChunkBase {
public:
virtual u32 makeHeaderHashCode() const = 0;
virtual u32 getSignature() const = 0;
virtual void* serialize(u8 *, u32) const = 0;
virtual bool deserialize(const u8 *, u32) = 0;
virtual void initializeData() = 0;
};
class BinaryDataChunkHolder {
public:
BinaryDataChunkHolder(u32, int);
void addChunk(BinaryDataChunkBase *);
BinaryDataChunkBase* findFromSignature(u32) const;
BinaryDataChunkBase** mChunks; // _0
s32 mMaxChunks; // _4
s32 mNumChunks; // _8
u8* mData; // _C
u32 _10;
};

View File

@ -0,0 +1,26 @@
#pragma once
#include "Game/System/BinaryDataChunkHolder.h"
class ConfigDataMisc : public BinaryDataChunkBase {
public:
ConfigDataMisc();
virtual u32 makeHeaderHashCode() const;
virtual u32 getSignature() const;
virtual void* serialize();
virtual bool deserialize(const u8 *, u32);
virtual void initializeData();
bool isLastLoadedMario() const;
void setLastLoadedMario(bool);
void onCompleteEndingMario();
void onCompleteEndingLuigi();
bool isOnCompleteEndingMario();
bool isOnCompleteEndingLuigi();
OSTime getLastModified() const;
void updateLastModified();
u8 mData; // _4
OSTime mLastModified; // _8
};

View File

@ -2,15 +2,16 @@
#include <revolution.h>
#include "Game/System/BinaryDataContentAccessor.h"
#include "Game/System/BinaryDataChunkHolder.h"
class SysConfigChunk {
class SysConfigChunk : public BinaryDataChunkBase {
public:
SysConfigChunk();
virtual u32 makeHeaderHashCode() const;
virtual u32 getSignature() const;
virtual void serialize();
virtual u32 deserialize(const u8 *, u32);
virtual void* serialize();
virtual bool deserialize(const u8 *, u32);
virtual void initializeData();
void initHeaderSerializer();

View File

@ -19,6 +19,7 @@
#include "Game/Util/LiveActorUtil.h"
#include "Game/Util/MathUtil.h"
#include "Game/Util/MemoryUtil.h"
#include "Game/Util/MessageUtil.h"
#include "Game/Util/ModelUtil.h"
#include "Game/Util/MtxUtil.h"
#include "Game/Util/MutexHolder.h"

View File

@ -0,0 +1,5 @@
#pragma once
namespace MR {
void* getGameMessageDirect(const char *);
};

View File

@ -0,0 +1,29 @@
#include "Game/Map/FileSelectFunc.h"
#include "Game/Map/FileSelectIconID.h"
#include "Game/Util.h"
#include "RVLFaceLibrary/RFL_Types.h"
#include "RVLFaceLibrary/RFL_DataUtility.h"
u32 FileSelectFunc::getMiiNameBufferSize() {
return 0xB;
}
void FileSelectFunc::copyMiiName(u16 *pData, const FileSelectIconID &rIcon) {
if (rIcon.isFellow()) {
u32 fellowID = rIcon.getFellowID();
void* msg = MR::getGameMessageDirect(sIconNameMessageID[fellowID]);
MR::copyMemory(pData, msg, 0x16);
}
else {
if (rIcon.isMii()) {
u16 miiIdx = rIcon.getMiiIndex();
RFLAdditionalInfo info;
RFLErrcode ret = RFLGetAdditionalInfo(&info, RFLDataSource_Official, 0, miiIdx);
if (ret == RFLErrcode_Success) {
MR::copyMemory(pData, &info, 0x16);
}
}
}
}

View File

@ -0,0 +1,42 @@
#include "Game/Map/FileSelectIconID.h"
FileSelectIconID::FileSelectIconID() {
_0 = false;
_2 = 0;
}
FileSelectIconID::FileSelectIconID(const FileSelectIconID &rOther) {
_0 = rOther._0;
_2 = rOther._2;
}
void FileSelectIconID::set(const FileSelectIconID &rOther) {
_0 = rOther._0;
_2 = rOther._2;
}
void FileSelectIconID::setMiiIndex(u16 idIdx) {
_2 = idIdx;
_0 = true;
}
bool FileSelectIconID::isMii() const {
return _0;
}
u16 FileSelectIconID::getMiiIndex() const {
return _2;
}
void FileSelectIconID::setFellowID(FileSelectIconID::EFellowID fellowID) {
_2 = (u16)fellowID;
_0 = 0;
}
bool FileSelectIconID::isFellow() const {
return !_0;
}
FileSelectIconID::EFellowID FileSelectIconID::getFellowID() const {
return (EFellowID)_2;
}

View File

@ -0,0 +1,19 @@
#include "Game/System/BinaryDataChunkHolder.h"
void BinaryDataChunkHolder::addChunk(BinaryDataChunkBase *pChunk) {
s32 numChunks = mNumChunks;
mNumChunks = numChunks + 1;
mChunks[numChunks] = pChunk;
}
BinaryDataChunkBase* BinaryDataChunkHolder::findFromSignature(u32 signature) const {
for (s32 i = 0; i < mNumChunks; i++) {
BinaryDataChunkBase* chunk = mChunks[i];
if (chunk->getSignature() == signature) {
return chunk;
}
}
return 0;
}

View File

@ -0,0 +1,56 @@
#include "Game/System/ConfigDataMisc.h"
#ifdef NON_MATCHING
// weird issues with the call at the bottom
ConfigDataMisc::ConfigDataMisc() {
mData = 1;
mLastModified = 0;
initializeData();
}
#endif
bool ConfigDataMisc::isLastLoadedMario() const {
return !((mData & 0x1) - 1);
}
void ConfigDataMisc::setLastLoadedMario(bool lastLoaded) {
if (lastLoaded) {
mData |= 0x1;
}
else {
mData &= 0xFE;
}
}
void ConfigDataMisc::onCompleteEndingMario() {
mData |= 0x2;
}
void ConfigDataMisc::onCompleteEndingLuigi() {
mData |= 0x4;
}
bool ConfigDataMisc::isOnCompleteEndingMario() {
return (mData >> 1) & 0x1;
}
bool ConfigDataMisc::isOnCompleteEndingLuigi() {
return (mData >> 2) & 0x1;
}
OSTime ConfigDataMisc::getLastModified() const {
return mLastModified;
}
void ConfigDataMisc::updateLastModified() {
mLastModified = OSGetTime();
}
u32 ConfigDataMisc::makeHeaderHashCode() const {
return 1;
}
u32 ConfigDataMisc::getSignature() const {
return 0x4D495343;
}