mirror of
https://github.com/SMGCommunity/Petari.git
synced 2025-02-25 00:21:25 +00:00
some FileSelect decomp, and add RFL dependency
This commit is contained in:
parent
365d6aac55
commit
909f460f3d
@ -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.
|
||||
|
||||
|
8
build.py
8
build.py
@ -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)
|
||||
|
22
csv/Map.csv
22
csv/Map.csv
@ -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
|
||||
|
|
@ -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,6 +1,6 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"label": "decompiled",
|
||||
"message": "1.2442219%",
|
||||
"message": "1.2606331%",
|
||||
"color": "blue"
|
||||
}
|
||||
|
19
include/Game/Map/FileSelectFunc.h
Normal file
19
include/Game/Map/FileSelectFunc.h
Normal 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 &);
|
||||
};
|
24
include/Game/Map/FileSelectIconID.h
Normal file
24
include/Game/Map/FileSelectIconID.h
Normal 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;
|
||||
};
|
28
include/Game/System/BinaryDataChunkHolder.h
Normal file
28
include/Game/System/BinaryDataChunkHolder.h
Normal 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;
|
||||
};
|
26
include/Game/System/ConfigDataMisc.h
Normal file
26
include/Game/System/ConfigDataMisc.h
Normal 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
|
||||
};
|
@ -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();
|
||||
|
@ -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"
|
||||
|
5
include/Game/Util/MessageUtil.h
Normal file
5
include/Game/Util/MessageUtil.h
Normal file
@ -0,0 +1,5 @@
|
||||
#pragma once
|
||||
|
||||
namespace MR {
|
||||
void* getGameMessageDirect(const char *);
|
||||
};
|
29
source/Game/Map/FileSelectFunc.cpp
Normal file
29
source/Game/Map/FileSelectFunc.cpp
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
42
source/Game/Map/FileSelectIconID.cpp
Normal file
42
source/Game/Map/FileSelectIconID.cpp
Normal 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;
|
||||
}
|
19
source/Game/System/BinaryDataChunkHolder.cpp
Normal file
19
source/Game/System/BinaryDataChunkHolder.cpp
Normal 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;
|
||||
}
|
56
source/Game/System/ConfigDataMisc.cpp
Normal file
56
source/Game/System/ConfigDataMisc.cpp
Normal 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;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user