diff --git a/include/JSystem/JAudio2/JAISound.h b/include/JSystem/JAudio2/JAISound.h index f027ab22cdd..30953a560c9 100644 --- a/include/JSystem/JAudio2/JAISound.h +++ b/include/JSystem/JAudio2/JAISound.h @@ -10,17 +10,23 @@ class JAISoundID { public: - operator u32() const { return this->mId; } - void operator=(JAISoundID const& other) {mId = other.mId;}; + operator u32() const { return this->mId.mId; } + void operator=(JAISoundID const& other) {mId.mId = other.mId.mId;}; - JAISoundID(u32 pId) { mId = pId; }; + JAISoundID(u32 pId) { mId.mId = pId; }; JAISoundID(JAISoundID const& other) {mId = other.mId;}; JAISoundID() {} -private: - u32 mId; + union { + u32 mId; + struct { + u16 mSoundType; + u16 mShortId; + }mAdvancedId; //Debug doesn't have an inline for referencing the short ID so I assume it's similar to this + } mId; + }; struct JASTrack { diff --git a/include/JSystem/JAudio2/JAUStreamFileTable.h b/include/JSystem/JAudio2/JAUStreamFileTable.h index b6f8d6b5677..4fc9e7fd34c 100644 --- a/include/JSystem/JAudio2/JAUStreamFileTable.h +++ b/include/JSystem/JAudio2/JAUStreamFileTable.h @@ -1,6 +1,32 @@ #ifndef JAUSTREAMFILETABLE_H #define JAUSTREAMFILETABLE_H +#include "JSystem/JAudio2/JAISound.h" #include "dolphin/types.h" +struct BinaryStreamFileTable { + /* 0x0 */ char mIdentifier[4]; + /* 0x4 */ int mNumFiles; + /* 0x8 */ int mFilePathOffsets[]; +}; + +struct JAUStreamFileTable { + /* 802A7420 */ JAUStreamFileTable(); + /* 802A742C */ void init(void const*); + /* 802A7478 */ int getNumFiles() const; + /* 802A7484 */ const char* getFilePath(int) const; + /* 0x0 */ const BinaryStreamFileTable* mData; +}; + +struct JAIStreamDataMgr { + /* 802A3AD8 */ ~JAIStreamDataMgr(); +}; + +struct JAUStreamDataMgr_StreamFileTable : JAIStreamDataMgr { + /* 802A74AC */ virtual int getStreamFileEntry(JAISoundID); + /* 802A74E8 */ virtual ~JAUStreamDataMgr_StreamFileTable(){}; + + /* 0x4 */ JAUStreamFileTable mStreamFileTable; +}; + #endif /* JAUSTREAMFILETABLE_H */ diff --git a/libs/JSystem/JAudio2/JAUStreamFileTable.cpp b/libs/JSystem/JAudio2/JAUStreamFileTable.cpp index 7aaca2f249f..6cd6f121675 100644 --- a/libs/JSystem/JAudio2/JAUStreamFileTable.cpp +++ b/libs/JSystem/JAudio2/JAUStreamFileTable.cpp @@ -1,124 +1,49 @@ -// -// Generated By: dol2asm -// Translation Unit: JAUStreamFileTable -// - #include "JSystem/JAudio2/JAUStreamFileTable.h" #include "dol2asm.h" +#include "dolphin/dvd/dvd.h" #include "dolphin/types.h" - -// -// Types: -// - -struct JAUStreamFileTable { - /* 802A7420 */ JAUStreamFileTable(); - /* 802A742C */ void init(void const*); - /* 802A7478 */ void getNumFiles() const; - /* 802A7484 */ void getFilePath(int) const; -}; - -struct JAISoundID {}; - -struct JAUStreamDataMgr_StreamFileTable { - /* 802A74AC */ void getStreamFileEntry(JAISoundID); - /* 802A74E8 */ ~JAUStreamDataMgr_StreamFileTable(); -}; - -struct JAIStreamDataMgr { - /* 802A3AD8 */ ~JAIStreamDataMgr(); -}; - -// -// Forward References: -// - -extern "C" void __ct__18JAUStreamFileTableFv(); -extern "C" void init__18JAUStreamFileTableFPCv(); -extern "C" void getNumFiles__18JAUStreamFileTableCFv(); -extern "C" void getFilePath__18JAUStreamFileTableCFi(); -extern "C" void getStreamFileEntry__32JAUStreamDataMgr_StreamFileTableF10JAISoundID(); -extern "C" void __dt__32JAUStreamDataMgr_StreamFileTableFv(); - -// -// External References: -// - -extern "C" void __dt__16JAIStreamDataMgrFv(); -extern "C" void __dl__FPv(); -extern "C" void DVDConvertPathToEntrynum(); - -// -// Declarations: -// +#include "global.h" /* 802A7420-802A742C 2A1D60 000C+00 0/0 1/1 0/0 .text __ct__18JAUStreamFileTableFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JAUStreamFileTable::JAUStreamFileTable() { - nofralloc -#include "asm/JSystem/JAudio2/JAUStreamFileTable/__ct__18JAUStreamFileTableFv.s" +JAUStreamFileTable::JAUStreamFileTable() { + mData = NULL; } -#pragma pop /* 802A742C-802A7478 2A1D6C 004C+00 0/0 1/1 0/0 .text init__18JAUStreamFileTableFPCv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JAUStreamFileTable::init(void const* param_0) { - nofralloc -#include "asm/JSystem/JAudio2/JAUStreamFileTable/init__18JAUStreamFileTableFPCv.s" +void JAUStreamFileTable::init(void const* data) { + if (data == NULL) { + mData = NULL; + return; + } + const BinaryStreamFileTable* binaryTable = (const BinaryStreamFileTable*)data; + const char* ident = binaryTable->mIdentifier; + if (ident[0] == 'b' && ident[1] == 's' && ident[2] == 'f' && ident[3] == 't') { + mData = binaryTable; + } } -#pragma pop /* 802A7478-802A7484 2A1DB8 000C+00 0/0 1/1 0/0 .text getNumFiles__18JAUStreamFileTableCFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JAUStreamFileTable::getNumFiles() const { - nofralloc -#include "asm/JSystem/JAudio2/JAUStreamFileTable/getNumFiles__18JAUStreamFileTableCFv.s" +int JAUStreamFileTable::getNumFiles() const { + return mData->mNumFiles; } -#pragma pop /* 802A7484-802A74AC 2A1DC4 0028+00 1/1 1/1 0/0 .text getFilePath__18JAUStreamFileTableCFi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JAUStreamFileTable::getFilePath(int param_0) const { - nofralloc -#include "asm/JSystem/JAudio2/JAUStreamFileTable/getFilePath__18JAUStreamFileTableCFi.s" +const char* JAUStreamFileTable::getFilePath(int index) const { + if (mData == NULL) { + return 0; + } + ASSERT(index >= 0); + ASSERT(index < getNumFiles()); + char* data = (char*)mData; + return (char*)(data + *(int*)(data + 8 + (index * sizeof(s32)))); } -#pragma pop /* 802A74AC-802A74E8 2A1DEC 003C+00 1/0 0/0 0/0 .text * getStreamFileEntry__32JAUStreamDataMgr_StreamFileTableF10JAISoundID */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JAUStreamDataMgr_StreamFileTable::getStreamFileEntry(JAISoundID param_0) { - nofralloc -#include "asm/JSystem/JAudio2/JAUStreamFileTable/getStreamFileEntry__32JAUStreamDataMgr_StreamFileTableF10JAISoundID.s" +int JAUStreamDataMgr_StreamFileTable::getStreamFileEntry(JAISoundID soundId) { + const char* filePath = mStreamFileTable.getFilePath(soundId.mId.mAdvancedId.mShortId); + if (filePath == NULL) { + return -1; + } + return DVDConvertPathToEntrynum(filePath); } -#pragma pop - -/* ############################################################################################## */ -/* 803C9B50-803C9B60 026C70 0010+00 1/1 1/1 0/0 .data __vt__32JAUStreamDataMgr_StreamFileTable */ -SECTION_DATA extern void* __vt__32JAUStreamDataMgr_StreamFileTable[4] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)getStreamFileEntry__32JAUStreamDataMgr_StreamFileTableF10JAISoundID, - (void*)__dt__32JAUStreamDataMgr_StreamFileTableFv, -}; - -/* 802A74E8-802A7548 2A1E28 0060+00 1/0 0/0 0/0 .text __dt__32JAUStreamDataMgr_StreamFileTableFv - */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JAUStreamDataMgr_StreamFileTable::~JAUStreamDataMgr_StreamFileTable() { - nofralloc -#include "asm/JSystem/JAudio2/JAUStreamFileTable/__dt__32JAUStreamDataMgr_StreamFileTableFv.s" -} -#pragma pop