summaryrefslogtreecommitdiff
path: root/include/JSystem
diff options
context:
space:
mode:
authorhatal175 <hatal175@users.noreply.github.com>2024-01-09 01:19:07 +0200
committerGitHub <noreply@github.com>2024-01-08 15:19:07 -0800
commit28bef08667e3e1ef9eb85a8a96cb23af700afe02 (patch)
treeff43e05e48a69c869a144a53d1bf3c1aea5eb88e /include/JSystem
parent40dae638a7c0b7e967eda55d3aa1089163213c5d (diff)
Work on Audio, JAUSeqDataBlockMgr OK (#2027)
Diffstat (limited to 'include/JSystem')
-rw-r--r--include/JSystem/JAudio2/JAISeqDataMgr.h8
-rw-r--r--include/JSystem/JAudio2/JASBasicWaveBank.h1
-rw-r--r--include/JSystem/JAudio2/JASHeapCtrl.h2
-rw-r--r--include/JSystem/JAudio2/JASWSParser.h72
-rw-r--r--include/JSystem/JAudio2/JAUAudioArcLoader.h2
-rw-r--r--include/JSystem/JAudio2/JAUSectionHeap.h6
-rw-r--r--include/JSystem/JAudio2/JAUSeqDataBlockMgr.h18
-rw-r--r--include/JSystem/JKernel/JKRArchive.h4
8 files changed, 98 insertions, 15 deletions
diff --git a/include/JSystem/JAudio2/JAISeqDataMgr.h b/include/JSystem/JAudio2/JAISeqDataMgr.h
index ed8ce8d14e..0943933228 100644
--- a/include/JSystem/JAudio2/JAISeqDataMgr.h
+++ b/include/JSystem/JAudio2/JAISeqDataMgr.h
@@ -20,17 +20,17 @@ struct JAISeqData {
struct JAISeqDataRegion {
bool intersects(JAISeqData& seqData) const {
- if (field_0x0 + field_0x4 < (u32)seqData.field_0x0) {
+ if ((u32)addr + size < (u32)seqData.field_0x0) {
return false;
}
- if ((u32)seqData.field_0x0 + seqData.field_0x4 < field_0x0) {
+ if ((u32)seqData.field_0x0 + seqData.field_0x4 < (u32)addr) {
return false;
}
return true;
}
- /* 0x00 */ u32 field_0x0;
- /* 0x04 */ u32 field_0x4;
+ /* 0x00 */ u8* addr;
+ /* 0x04 */ u32 size;
};
diff --git a/include/JSystem/JAudio2/JASBasicWaveBank.h b/include/JSystem/JAudio2/JASBasicWaveBank.h
index 3d22d24ff7..d923124233 100644
--- a/include/JSystem/JAudio2/JASBasicWaveBank.h
+++ b/include/JSystem/JAudio2/JASBasicWaveBank.h
@@ -30,6 +30,7 @@ struct JASBasicWaveBank : public JASWaveBank {
/* 80298B64 */ int getWavePtr() const;
/* 80298C18 */ TWaveHandle() { mHeap = NULL; }
/* 80298C64 */ const JASWaveInfo* getWaveInfo() const { return &field_0x4; }
+ bool compareHeap(JASHeap* heap) const { return mHeap == heap;}
/* 0x04 */ JASWaveInfo field_0x4;
/* 0x28 */ JASHeap* mHeap;
diff --git a/include/JSystem/JAudio2/JASHeapCtrl.h b/include/JSystem/JAudio2/JASHeapCtrl.h
index b5d7f50c99..4edbe1e271 100644
--- a/include/JSystem/JAudio2/JASHeapCtrl.h
+++ b/include/JSystem/JAudio2/JASHeapCtrl.h
@@ -20,7 +20,7 @@ public:
/* 802906F0 */ JASHeap* getTailHeap();
/* 8029077C */ u32 getTailOffset();
/* 802907E0 */ u32 getCurOffset();
- /* 80290B54 */ ~JASHeap();
+ /* 80290B54 */ ~JASHeap() {}
void* getBase() { return mBase; }
bool isAllocated() { return mBase; }
diff --git a/include/JSystem/JAudio2/JASWSParser.h b/include/JSystem/JAudio2/JASWSParser.h
index 7ef0bdc6cb..8555857de9 100644
--- a/include/JSystem/JAudio2/JASWSParser.h
+++ b/include/JSystem/JAudio2/JASWSParser.h
@@ -1,5 +1,77 @@
#ifndef JASWSPARSER_H
#define JASWSPARSER_H
+#include "dolphin/types.h"
+#include "JSystem/JSupport/JSupport.h"
+
+class JKRHeap;
+class JASWaveBank;
+class JASBasicWaveBank;
+class JASSimpleWaveBank;
+
+class JASWSParser {
+public:
+ template<class T>
+ class TOffset {
+ public:
+ T* ptr(void* param_0) {
+ return JSUConvertOffsetToPtr<T>(param_0, mOffset);
+ }
+ void* mOffset;
+ };
+
+ /** @fabricated */
+ struct THeader {
+ u8 _00[0x10]; // _00 - unknown/padding
+ u32 mArchiveBankOffset; // _10
+ u32 mCtrlGroupOffset; // _14
+ };
+ struct TCtrlWave {
+ u32 _00; // _00
+ };
+ struct TWave {
+ u8 _00; // _00
+ u8 _01; // _01
+ u8 _02; // _02
+ f32 _04; // _04
+ u32 mOffset; // _08
+ u32 _0C; // _0C
+ u32 _10; // _10
+ u32 _14; // _14
+ u32 _18; // _18
+ u32 _1C; // _1C
+ s16 _20; // _20
+ s16 _22; // _22
+ };
+ struct TWaveArchive {
+ char mFileName[0x74]; // _00 - unknown length
+ u32 mWaveOffsets[1]; // _74 - dynamic length
+ };
+ struct TWaveArchiveBank {
+ u8 _00[8]; // _00 - unknown/padding
+ u32 mArchiveOffsets[1]; // _08 - dynamic length
+ };
+ struct TCtrl {
+ u8 _00[4]; // _00 - unknown/padding
+ u32 mWaveCount; // _04
+ u32 mCtrlWaveOffsets[1]; // _08 - dynamic length
+ };
+ struct TCtrlScene {
+ u8 _00[12]; // _00 - unknown/padding
+ u32 mCtrlOffset; // _0C
+ };
+ struct TCtrlGroup {
+ u8 _00[8]; // _00 - unknown/padding
+ u32 mCtrlGroupCount; // _08
+ u32 mCtrlSceneOffsets[1]; // _0C - dynamic length
+ };
+
+ /* 80298FB0 */ static u32 getGroupCount(void const*);
+ /* 80298FD8 */ static JASWaveBank* createWaveBank(void const*, JKRHeap*);
+ /* 80299034 */ static JASBasicWaveBank* createBasicWaveBank(void const*, JKRHeap*);
+ /* 80299264 */ static JASSimpleWaveBank* createSimpleWaveBank(void const*, JKRHeap*);
+
+ static u8 sUsedHeapSize[4 + 4 /* padding */];
+};
#endif /* JASWSPARSER_H */
diff --git a/include/JSystem/JAudio2/JAUAudioArcLoader.h b/include/JSystem/JAudio2/JAUAudioArcLoader.h
index 5cfd255490..c81e726b32 100644
--- a/include/JSystem/JAudio2/JAUAudioArcLoader.h
+++ b/include/JSystem/JAudio2/JAUAudioArcLoader.h
@@ -22,7 +22,7 @@ public:
/* 802A4990 */ virtual void beginBNKList(u32, u32);
/* 802A49B4 */ virtual void endBNKList();
/* 802A49D8 */ virtual void readMaxSeCategory(int, int, int);
- /* 802A49FC */ virtual ~JAUAudioArcLoader();
+ /* 802A49FC */ virtual ~JAUAudioArcLoader() {}
/* 0x0C */ JAUSection* mSection;
};
diff --git a/include/JSystem/JAudio2/JAUSectionHeap.h b/include/JSystem/JAudio2/JAUSectionHeap.h
index d3126391bb..aa1bde433a 100644
--- a/include/JSystem/JAudio2/JAUSectionHeap.h
+++ b/include/JSystem/JAudio2/JAUSectionHeap.h
@@ -101,6 +101,12 @@ public:
/* 802A6278 */ ~JAUSectionHeap();
JAUWaveBankTable& getWaveBankTable() { return sectionHeapData_.waveBankTable; }
+ JKRHeap* getHeap() {
+ if (getOpenSection()->isBuilding() != 0) {
+ return mHeap;
+ }
+ return NULL;
+ }
/* 0x00 */ JAUSection base1;
/* 0xDC */ u8 base2[0xE0 - 0xDC]; // JAISeqDataMgr
diff --git a/include/JSystem/JAudio2/JAUSeqDataBlockMgr.h b/include/JSystem/JAudio2/JAUSeqDataBlockMgr.h
index dd6bae8a15..c3176f9ab7 100644
--- a/include/JSystem/JAudio2/JAUSeqDataBlockMgr.h
+++ b/include/JSystem/JAudio2/JAUSeqDataBlockMgr.h
@@ -2,6 +2,7 @@
#define JAUSEQDATABLOCKMGR_H
#include "JSystem/JAudio2/JAISound.h"
+#include "JSystem/JAudio2/JAISeqDataMgr.h"
#include "JSystem/JSupport/JSUList.h"
class JAISeqData;
@@ -13,18 +14,17 @@ struct JAUSeqDataBlock {
/* 0x00 */ JSULink<JAUSeqDataBlock> field_0x0;
/* 0x10 */ JAISoundID field_0x10;
- /* 0x14 */ u8* field_0x14;
- /* 0x18 */ u32 field_0x18;
+ /* 0x14 */ JAISeqDataRegion field_0x14;
/* 0x1C */ int field_0x1c;
};
class JAUSeqDataBlocks {
public:
- /* 802A6928 */ void getSeqData(JAISoundID);
- /* 802A6974 */ void seekFreeBlock(u32);
- /* 802A69D8 */ void append(JSULink<JAUSeqDataBlock>*);
- /* 802A69F8 */ void remove(JSULink<JAUSeqDataBlock>*);
- /* 802A6A18 */ void hasFailedBlock(JAISoundID);
+ /* 802A6928 */ u8* getSeqData(JAISoundID);
+ /* 802A6974 */ JSULink<JAUSeqDataBlock>* seekFreeBlock(u32);
+ /* 802A69D8 */ bool append(JSULink<JAUSeqDataBlock>*);
+ /* 802A69F8 */ bool remove(JSULink<JAUSeqDataBlock>*);
+ /* 802A6A18 */ bool hasFailedBlock(JAISoundID);
/* 0x00 */ JSUList<JAUSeqDataBlock> field_0x0;
};
@@ -36,8 +36,8 @@ public:
/* 802A6AA8 */ s32 getSeqData(JAISoundID, JAISeqDataUser*, JAISeqData*, bool);
/* 802A6B8C */ bool appendDynamicSeqDataBlock(JAUSeqDataBlock*);
/* 802A6C18 */ bool loadDynamicSeq(JAISoundID, bool, JAISeqDataUser*);
- /* 802A6D48 */ void releaseIdleDynamicSeqDataBlock(JAISeqDataUser*);
- /* 802A6E00 */ void releaseIdleDynamicSeqDataBlock_(JAISeqDataUser*, u32);
+ /* 802A6D48 */ u32 releaseIdleDynamicSeqDataBlock(JAISeqDataUser*);
+ /* 802A6E00 */ JAUSeqDataBlock* releaseIdleDynamicSeqDataBlock_(JAISeqDataUser*, u32);
/* 802A6EDC */ void rearrangeLoadingSeqs_();
JKRArchive* getSeqDataArchive() { return seqDataArchive_; }
diff --git a/include/JSystem/JKernel/JKRArchive.h b/include/JSystem/JKernel/JKRArchive.h
index c7800b7359..2db5dc079e 100644
--- a/include/JSystem/JKernel/JKRArchive.h
+++ b/include/JSystem/JKernel/JKRArchive.h
@@ -226,4 +226,8 @@ inline bool JKRRemoveResource(void* resource, JKRFileLoader* fileLoader) {
return JKRFileLoader::removeResource(resource, fileLoader);
}
+inline void JKRUnmountArchive(JKRArchive* arc) {
+ arc->unmount();
+}
+
#endif \ No newline at end of file