This commit is contained in:
Caroline Madsen
2024-02-11 00:29:35 -05:00
committed by GitHub
parent 6b84d8dbb8
commit 956699083c
71 changed files with 1601 additions and 3179 deletions
+98 -61
View File
@@ -1,8 +1,10 @@
#ifndef JASARAMSTREAM_H
#define JASARAMSTREAM_H
#include "JSystem/JAudio2/JASTaskThread.h"
#include "dolphin/os/OSMessage.h"
#include "JSystem/JUtility/JUTAssert.h"
#include "dolphin/dvd.h"
class JASChannel;
@@ -14,31 +16,71 @@ namespace JASDsp {
class JASAramStream {
public:
typedef void (*StreamCallback)(u32, JASAramStream*, void*);
enum CallbackType {
/* 0 */ CB_START,
/* 1 */ CB_STOP,
};
// Used internally for passing data to task functions
struct TaskData {
/* 0x0 */ JASAramStream* stream;
/* 0x4 */ u32 field_0x4;
/* 0x8 */ int field_0x8;
};
struct Header {
/* 0x00 */ u32 tag;
/* 0x04 */ u8 field_0x4[5];
/* 0x09 */ u8 format;
/* 0x0A */ u8 bits;
/* 0x0C */ u16 channels;
/* 0x0E */ u16 loop;
/* 0x10 */ int field_0x10;
/* 0x14 */ u8 field_0x14[4];
/* 0x18 */ int loop_start;
/* 0x1C */ int loop_end;
/* 0x20 */ u32 block_size;
/* 0x24 */ u8 field_0x24[4];
/* 0x28 */ u8 field_0x28;
/* 0x29 */ u8 field_0x29[0x17];
}; // Size: 0x40
struct BlockHeader {
/* 0x00 */ u32 tag;
/* 0x04 */ u32 field_0x4;
/* 0x08 */ struct {
s16 field_0x0;
s16 field_0x2;
} field_0x8[6];
}; // Size: 0x20
/* 8029631C */ static void initSystem(u32, u32);
/* 802963A8 */ JASAramStream();
/* 8029649C */ void init(u32, u32, void (*)(u32, JASAramStream*, void*), void*);
/* 8029649C */ void init(u32, u32, StreamCallback, void*);
/* 8029655C */ bool prepare(s32, int);
/* 80296618 */ bool start();
/* 8029664C */ void stop(u16);
/* 80296684 */ void pause(bool);
/* 802966CC */ void cancel();
/* 80296710 */ void getBlockSamples() const;
/* 8029673C */ void headerLoadTask(void*);
/* 8029676C */ void firstLoadTask(void*);
/* 80296848 */ void loadToAramTask(void*);
/* 80296868 */ void finishTask(void*);
/* 802968C8 */ void prepareFinishTask(void*);
/* 80296920 */ void headerLoad(u32, int);
/* 80296AE8 */ void load();
/* 80296D74 */ void channelProcCallback(void*);
/* 80296D94 */ void dvdErrorCheck(void*);
/* 80296DF0 */ void channelCallback(u32, JASChannel*, JASDsp::TChannel*, void*);
/* 8029664C */ bool stop(u16);
/* 80296684 */ bool pause(bool);
/* 802966CC */ bool cancel();
/* 80296710 */ u32 getBlockSamples() const;
/* 8029673C */ static void headerLoadTask(void*);
/* 8029676C */ static void firstLoadTask(void*);
/* 80296848 */ static void loadToAramTask(void*);
/* 80296868 */ static void finishTask(void*);
/* 802968C8 */ static void prepareFinishTask(void*);
/* 80296920 */ bool headerLoad(u32, int);
/* 80296AE8 */ bool load();
/* 80296D74 */ static s32 channelProcCallback(void*);
/* 80296D94 */ static s32 dvdErrorCheck(void*);
/* 80296DF0 */ static void channelCallback(u32, JASChannel*, JASDsp::TChannel*, void*);
/* 80296E2C */ void updateChannel(u32, JASChannel*, JASDsp::TChannel*);
/* 802974AC */ void channelProc();
/* 802974AC */ s32 channelProc();
/* 80297658 */ void channelStart();
/* 80297870 */ void channelStop(u16);
void setPitch(f32 pitch) { field_0x178 = pitch; }
void setPitch(f32 pitch) { mPitch = pitch; }
void setVolume(f32 volume) {
for (int i = 0; i < 6; i++) {
mChannelVolume[i] = volume;
@@ -53,7 +95,7 @@ public:
void setFxmix(f32 fxMix) {
for (int i = 0; i < 6; i++) {
mchannelFxMix[i] = fxMix;
mChannelFxMix[i] = fxMix;
}
}
@@ -75,7 +117,7 @@ public:
void setChannelFxmix(int channel, f32 fxMix) {
JUT_ASSERT(302, channel < CHANNEL_MAX);
mchannelFxMix[channel] = fxMix;
mChannelFxMix[channel] = fxMix;
}
void setChannelDolby(int channel, f32 dolby) {
@@ -83,66 +125,61 @@ public:
mChannelDolby[channel] = dolby;
}
static u32 getBlockSize() { return sBlockSize; }
/* 0x000 */ OSMessageQueue field_0x000;
/* 0x020 */ OSMessageQueue field_0x020;
/* 0x040 */ void* field_0x040[16];
/* 0x080 */ void* field_0x080[4];
/* 0x090 */ JASChannel* field_0x090[6];
/* 0x0A8 */ int field_0x0a8;
/* 0x0AC */ u8 field_0x0ac;
/* 0x0AD */ u8 field_0x0ad;
/* 0x090 */ JASChannel* mChannels[CHANNEL_MAX];
/* 0x0A8 */ JASChannel* field_0x0a8;
/* 0x0AC */ bool field_0x0ac;
/* 0x0AD */ bool field_0x0ad;
/* 0x0AE */ u8 field_0x0ae;
/* 0x0AF */ u8 field_0x0AF[0x0B0 - 0x0AF];
/* 0x0B0 */ int field_0x0b0;
/* 0x0B4 */ int field_0x0b4;
/* 0x0B8 */ int field_0x0b8;
/* 0x0B8 */ u32 field_0x0b8;
/* 0x0BC */ int field_0x0bc;
/* 0x0C0 */ u8 field_0x0c0;
/* 0x0C1 */ u8 field_0x0C1[0x0C4 - 0x0C1];
/* 0x0C4 */ int field_0x0c4;
/* 0x0C0 */ bool field_0x0c0;
/* 0x0C4 */ u32 field_0x0c4;
/* 0x0C8 */ f32 field_0x0c8;
/* 0x0CC */ u8 field_0x0CC[0x108 - 0x0CC];
/* 0x108 */ int field_0x108;
/* 0x0CC */ DVDFileInfo mDvdFileInfo;
/* 0x108 */ u32 field_0x108;
/* 0x10C */ int field_0x10c;
/* 0x110 */ int field_0x110;
/* 0x110 */ u32 mBlock;
/* 0x114 */ u8 field_0x114;
/* 0x115 */ u8 field_0x115[0x118 - 0x115];
/* 0x118 */ int field_0x118;
/* 0x118 */ u32 field_0x118;
/* 0x11C */ int field_0x11c;
/* 0x120 */ int field_0x120;
/* 0x124 */ int field_0x124;
/* 0x128 */ short field_0x128;
/* 0x12A */ u8 field_0x12A[0x12C - 0x12A];
/* 0x128 */ u16 field_0x128;
/* 0x12C */ int field_0x12c;
/* 0x130 */ short field_0x130[CHANNEL_MAX];
/* 0x13C */ short field_0x13c[CHANNEL_MAX];
/* 0x130 */ s16 field_0x130[CHANNEL_MAX];
/* 0x13C */ s16 field_0x13c[CHANNEL_MAX];
/* 0x148 */ int field_0x148;
/* 0x14C */ int field_0x14c;
/* 0x150 */ void* field_0x150;
/* 0x154 */ int field_0x154;
/* 0x158 */ short field_0x158;
/* 0x15A */ short field_0x15a;
/* 0x15C */ int field_0x15c;
/* 0x160 */ int field_0x160;
/* 0x164 */ int field_0x164;
/* 0x168 */ u8 field_0x168;
/* 0x169 */ u8 field_0x169[0x16C - 0x169];
/* 0x16C */ int field_0x16c;
/* 0x170 */ int field_0x170;
/* 0x174 */ f32 field_0x174;
/* 0x178 */ f32 field_0x178;
/* 0x17C */ float mChannelVolume[CHANNEL_MAX];
/* 0x194 */ float mChannelPan[CHANNEL_MAX];
/* 0x1AC */ float mchannelFxMix[CHANNEL_MAX];
/* 0x1C4 */ float mChannelDolby[CHANNEL_MAX];
/* 0x1DC */ short field_0x1dc[CHANNEL_MAX];
/* 0x14C */ u32 field_0x14c;
/* 0x150 */ StreamCallback mCallback;
/* 0x154 */ void* mCallbackData;
/* 0x158 */ u16 field_0x158;
/* 0x15A */ u16 mChannelNum;
/* 0x15C */ u32 mBufCount;
/* 0x160 */ u32 field_0x160;
/* 0x164 */ u32 field_0x164;
/* 0x168 */ bool mLoop;
/* 0x16C */ u32 mLoopStart;
/* 0x170 */ u32 mLoopEnd;
/* 0x174 */ f32 mVolume;
/* 0x178 */ f32 mPitch;
/* 0x17C */ f32 mChannelVolume[CHANNEL_MAX];
/* 0x194 */ f32 mChannelPan[CHANNEL_MAX];
/* 0x1AC */ f32 mChannelFxMix[CHANNEL_MAX];
/* 0x1C4 */ f32 mChannelDolby[CHANNEL_MAX];
/* 0x1DC */ u16 field_0x1dc[CHANNEL_MAX];
u32 getBlockSize() { return sBlockSize; }
static u8 sLoadThread[4];
static u8 sReadBuffer[4];
static JASTaskThread* sLoadThread;
static u8* sReadBuffer;
static u32 sBlockSize;
static u8 sChannelMax[4];
static u32 sChannelMax;
};
#endif /* JASARAMSTREAM_H */
+1 -1
View File
@@ -80,7 +80,7 @@ struct JASBasicWaveBank : public JASWaveBank {
/* 0x24 */ u16 mHandleCount;
/* 0x26 */ u16 mGroupCount;
static u8 mNoLoad[4 + 4 /* padding */];
static u32 mNoLoad;
};
#endif /* JASBASICWAVEBANK_H */
+10
View File
@@ -21,6 +21,16 @@ struct JASCalc {
return x;
} */
static f32 clamp01(f32 i_value) {
if (i_value <= 0.0f) {
return 0.0f;
}
if (i_value >= 1.0f) {
return 1.0f;
}
return i_value;
}
f32 fake1();
f32 fake2(long x);
f32 fake3();
+61 -32
View File
@@ -33,45 +33,73 @@ public:
mDolby = 0.0f;
}
f32 mVolume;
f32 mPitch;
f32 field_0x8;
f32 mPan;
f32 mFxMix;
f32 mDolby;
/* 0x00 */ f32 mVolume;
/* 0x04 */ f32 mPitch;
/* 0x08 */ f32 field_0x8;
/* 0x0C */ f32 mPan;
/* 0x10 */ f32 mFxMix;
/* 0x14 */ f32 mDolby;
};
class JASChannel : public JASPoolAllocObject_MultiThreaded<JASChannel> {
public:
struct PanVector {};
typedef void (*Callback)(u32, JASChannel*, JASDsp::TChannel*, void*);
/* 8029A800 */ JASChannel(void (*)(u32, JASChannel*, JASDsp::TChannel*, void*), void*);
enum CallbackType {
/* 0 */ CB_PLAY,
/* 1 */ CB_START,
/* 2 */ CB_STOP,
/* 3 */ CB_TIMER,
};
enum Status {
/* 0 */ STATUS_INACTIVE,
/* 1 */ STATUS_ACTIVE,
/* 2 */ STATUS_RELEASE,
};
struct PanVector {
/* 0x0 */ f32 mSound;
/* 0x4 */ f32 mEffect;
/* 0x8 */ f32 mChannel;
};
union MixConfig {
u16 whole;
struct {
u8 upper;
u8 lower0 : 4;
u8 lower1 : 4;
} parts;
};
/* 8029A800 */ JASChannel(Callback, void*);
/* 8029A918 */ ~JASChannel();
/* 8029A9F0 */ int play();
/* 8029AA60 */ void playForce();
/* 8029AA60 */ int playForce();
/* 8029AAD0 */ void release(u16);
/* 8029AB64 */ void setOscInit(u32, JASOscillator::Data const*);
/* 8029AB98 */ void setMixConfig(u32, u16);
/* 8029ABA8 */ void calcEffect(JASChannel::PanVector const*);
/* 8029ABC0 */ void calcPan(JASChannel::PanVector const*);
/* 8029ABA8 */ static f32 calcEffect(JASChannel::PanVector const*);
/* 8029ABC0 */ static f32 calcPan(JASChannel::PanVector const*);
/* 8029ABEC */ void effectOsc(u32, JASOscillator::EffectParams*);
/* 8029ACD4 */ void setKeySweepTarget(s32, u32);
/* 8029AD38 */ void updateEffectorParam(JASDsp::TChannel*, u16*,
JASOscillator::EffectParams const&);
/* 8029AF78 */ static void dspUpdateCallback(u32, JASDsp::TChannel*, void*);
/* 8029B004 */ void initialUpdateDSPChannel(JASDsp::TChannel*);
/* 8029B324 */ void updateDSPChannel(JASDsp::TChannel*);
/* 8029AF78 */ static s32 dspUpdateCallback(u32, JASDsp::TChannel*, void*);
/* 8029B004 */ s32 initialUpdateDSPChannel(JASDsp::TChannel*);
/* 8029B324 */ s32 updateDSPChannel(JASDsp::TChannel*);
/* 8029B6A0 */ void updateAutoMixer(JASDsp::TChannel*, f32, f32, f32, f32);
/* 8029B7D8 */ void updateMixer(f32, f32, f32, f32, u16*);
/* 8029BBFC */ void free();
/* 8029BC0C */ static void initBankDisposeMsgQueue();
/* 8029BC48 */ static void receiveBankDisposeMsg();
/* 8029BCC0 */ void checkBankDispose() const;
/* 8029BCC0 */ bool checkBankDispose() const;
void setPauseFlag(bool param_0) { mPauseFlag = param_0; }
void setUpdateTimer(u32 param_0) { mUpdateTimer = param_0; }
void setBankDisposeID(const void* param_0) { mBankDisposeID = param_0; }
void setDirectRelease(u16 param_0) { field_0x1c[0].setDirectRelease(param_0); }
void setDirectRelease(u16 param_0) { mOscillators[0].setDirectRelease(param_0); }
void setVibrate(f32 param_0, f32 param_1) {
mVibrate.setDepth(param_0);
mVibrate.setPitch(param_1);
@@ -84,34 +112,35 @@ public:
void setTremoloDelay(u16 param_0) { mTremolo.setDelay(param_0); }
void setPriority(u16 param_0) { mPriority = param_0; }
void setParams(const JASChannelParams& param_0) { mParams = param_0; }
void setInitVolume(f32 param_0) { field_0xb4.mVolume = param_0; }
void setInitFxmix(f32 param_0) { field_0xb4.mFxMix = param_0; }
void setInitPitch(f32 param_0) { field_0xb4.mPitch = param_0; }
void setInitPan(f32 param_0) { field_0xb4.mPan = param_0; }
void setInitDolby(f32 param_0) { field_0xb4.mDolby = param_0; }
void setInitVolume(f32 param_0) { mSoundParams.mVolume = param_0; }
void setInitFxmix(f32 param_0) { mSoundParams.mFxMix = param_0; }
void setInitPitch(f32 param_0) { mSoundParams.mPitch = param_0; }
void setInitPan(f32 param_0) { mSoundParams.mPan = param_0; }
void setInitDolby(f32 param_0) { mSoundParams.mDolby = param_0; }
void setKey(s32 param_0) { mKey = param_0; }
void setVelocity(u32 param_0) { mVelocity = param_0; }
void setSkipSamples(u32 param_0) { mSkipSamples = param_0; }
bool isDolbyMode() { return mMixConfig[0].whole == 0xffff; }
/* 0x00 */ int mStatus;
/* 0x04 */ bool mPauseFlag;
/* 0x08 */ JASDSPChannel* mDspCh;
/* 0x0C */ void* field_0xc;
/* 0x10 */ void* field_0x10;
/* 0x0C */ Callback mCallback;
/* 0x10 */ void* mCallbackData;
/* 0x14 */ u32 mUpdateTimer;
/* 0x18 */ const void* mBankDisposeID;
/* 0x1C */ JASOscillator field_0x1c[2];
/* 0x1C */ JASOscillator mOscillators[2];
/* 0x5C */ JASLfo mVibrate;
/* 0x74 */ JASLfo mTremolo;
/* 0x8C */ u16 field_0x8c[6];
/* 0x98 */ short mPriority;
/* 0x8C */ MixConfig mMixConfig[6];
/* 0x98 */ u16 mPriority;
/* 0x9C */ JASChannelParams mParams;
/* 0xB4 */ JASSoundParams field_0xb4;
/* 0xB4 */ JASSoundParams mSoundParams;
/* 0xC8 */ s16 mKey;
/* 0xCA */ u16 mVelocity;
/* 0xCC */ f32 field_0xcc;
/* 0xD0 */ f32 field_0xd0;
/* 0xD4 */ u32 field_0xd4;
/* 0xCC */ f32 mKeySweep;
/* 0xD0 */ f32 mKeySweepTarget;
/* 0xD4 */ u32 mKeySweepCount;
/* 0xD8 */ u32 mSkipSamples;
struct {
u32 field_0x0;
@@ -121,8 +150,8 @@ public:
static OSMessageQueue sBankDisposeMsgQ;
static OSMessage sBankDisposeMsg[16];
static u32 sBankDisposeList[16];
static u32 sBankDisposeListSize;
static OSMessage sBankDisposeList[16];
static int sBankDisposeListSize;
};
#endif /* JASCHANNEL_H */
+44
View File
@@ -1,5 +1,49 @@
#ifndef JASDSPCHANNEL_H
#define JASDSPCHANNEL_H
#include "JSystem/JAudio2/JASDSPInterface.h"
struct JASDSPChannel {
typedef s32 (*Callback)(u32, JASDsp::TChannel*, void*);
enum Status {
/* 0 */ STATUS_ACTIVE,
/* 1 */ STATUS_INACTIVE,
/* 2 */ STATUS_DROP,
};
enum CallbackType {
/* 0 */ CB_PLAY,
/* 1 */ CB_START,
/* 2 */ CB_STOP,
/* 3 */ CB_DROP,
};
/* 8029D2F4 */ JASDSPChannel();
/* 8029D320 */ void free();
/* 8029D330 */ void start();
/* 8029D340 */ void drop();
/* 8029D534 */ void setPriority(u8);
/* 8029D65C */ void updateProc();
/* 8029D3C8 */ static void initAll();
/* 8029D44C */ static JASDSPChannel* alloc(u8, Callback, void*);
/* 8029D4BC */ static JASDSPChannel* allocForce(u8, Callback, void*);
/* 8029D540 */ static JASDSPChannel* getLowestChannel(int);
/* 8029D5D0 */ static JASDSPChannel* getLowestActiveChannel();
/* 8029D89C */ static void updateAll();
/* 8029D910 */ static int killActiveChannel();
/* 8029D948 */ static JASDSPChannel* getHandle(u32);
static JASDSPChannel* sDspChannels;
/* 0x00 */ s32 mStatus;
/* 0x04 */ s16 mPriority;
/* 0x08 */ u32 mFlags;
/* 0x0C */ u32 field_0xc;
/* 0x10 */ Callback mCallback;
/* 0x14 */ void* mCallbackData;
/* 0x18 */ JASDsp::TChannel* mChannel;
}; // Size: 0x1C
#endif /* JASDSPCHANNEL_H */
+2 -2
View File
@@ -57,7 +57,7 @@ namespace JASDsp {
/* 0x002 */ u16 mIsFinished;
/* 0x004 */ u16 mPitch;
/* 0x006 */ short field_0x006;
/* 0x008 */ short field_0x008;
/* 0x008 */ u16 field_0x008;
/* 0x00A */ u8 field_0x00A[0x00C - 0x00A];
/* 0x00C */ s16 mPauseFlag;
/* 0x00E */ short field_0x00E;
@@ -71,7 +71,7 @@ namespace JASDsp {
/* 0x05A */ u8 field_0x05A[0x060 - 0x05A];
/* 0x060 */ short field_0x060;
/* 0x062 */ u8 field_0x062[0x064 - 0x062];
/* 0x064 */ short field_0x064;
/* 0x064 */ u16 field_0x064;
/* 0x066 */ short field_0x066;
/* 0x068 */ int field_0x068;
/* 0x06C */ u8 field_0x06C[0x070 - 0x06C];
+17 -17
View File
@@ -33,19 +33,6 @@ public:
/* 0x40 */ JASHeap* field_0x40;
};
namespace JASKernel {
/* 802909B8 */ void setupRootHeap(JKRSolidHeap*, u32);
/* 80290AC0 */ JKRHeap* getSystemHeap();
/* 80290AC8 */ void* getCommandHeap();
/* 80290AD0 */ void setupAramHeap(u32, u32);
/* 80290B08 */ JASHeap* getAramHeap();
extern u8 audioAramHeap[68];
extern u32 sAramBase;
extern JKRHeap* sSystemHeap;
extern void* sCommandHeap;
};
struct JASGenericMemPool {
/* 80290848 */ JASGenericMemPool();
/* 80290860 */ ~JASGenericMemPool();
@@ -185,13 +172,13 @@ public:
}
void free(void* ptr) {
T::Lock lock(&((JASMemChunkPool<ChunkSize,T>*)ptr)->mMutex);
MemoryChunk* chunk = ((JASMemChunkPool<ChunkSize,T>*)ptr)->field_0x18;
T::Lock lock(&mMutex);
MemoryChunk* chunk = field_0x18;
MemoryChunk* prevChunk = NULL;
while (chunk != NULL) {
if (chunk->checkArea(this)) {
if (chunk->checkArea(ptr)) {
chunk->free();
if (chunk != ((JASMemChunkPool<ChunkSize,T>*)ptr)->field_0x18 && chunk->isEmpty()) {
if (chunk != field_0x18 && chunk->isEmpty()) {
MemoryChunk* nextChunk = chunk->getNextChunk();
delete chunk;
prevChunk->setNextChunk(nextChunk);
@@ -207,6 +194,19 @@ public:
/* 0x18 */ MemoryChunk* field_0x18;
};
namespace JASKernel {
/* 802909B8 */ void setupRootHeap(JKRSolidHeap*, u32);
/* 80290AC0 */ JKRHeap* getSystemHeap();
/* 80290AC8 */ JASMemChunkPool<1024, JASThreadingModel::ObjectLevelLockable>* getCommandHeap();
/* 80290AD0 */ void setupAramHeap(u32, u32);
/* 80290B08 */ JASHeap* getAramHeap();
extern u8 audioAramHeap[68];
extern u32 sAramBase;
extern JKRHeap* sSystemHeap;
extern JASMemChunkPool<1024, JASThreadingModel::ObjectLevelLockable>* sCommandHeap;
};
template <typename T>
class JASPoolAllocObject {
public:
+35 -5
View File
@@ -11,10 +11,28 @@ struct JASOscillator {
/* 0x4 */ s16 _4;
};
struct EffectParams {};
struct EffectParams {
EffectParams() {
mVolume = 1.0f;
mPitch = 1.0f;
mPan = 0.5f;
mFxMix = 0.0f;
mDolby = 0.0f;
_14 = 1.0f;
_18 = 1.0f;
}
/* 0x00 */ f32 mVolume;
/* 0x04 */ f32 mPitch;
/* 0x08 */ f32 mPan;
/* 0x0C */ f32 mFxMix;
/* 0x10 */ f32 mDolby;
/* 0x14 */ f32 _14;
/* 0x18 */ f32 _18;
};
struct Data {
/* 0x00 */ u32 _00;
/* 0x00 */ u32 mTarget;
/* 0x04 */ f32 _04;
/* 0x08 */ const Point* mTable;
/* 0x0C */ const Point* _0C;
@@ -22,6 +40,16 @@ struct JASOscillator {
/* 0x14 */ f32 _14;
};
enum Target {
/* 0 */ TARGET_VOLUME,
/* 1 */ TARGET_PITCH,
/* 2 */ TARGET_PAN,
/* 3 */ TARGET_FXMIX,
/* 4 */ TARGET_DOLBY,
/* 5 */ TARGET_5,
/* 6 */ TARGET_6,
};
JASOscillator();
void initStart(const Data*);
@@ -32,9 +60,11 @@ struct JASOscillator {
void updateCurrentValue(f32 param_0);
void setDirectRelease(u16 param_0) { mDirectRelease = param_0; }
void stop() {
_1C = 0;
}
void stop() { _1C = 0; }
bool isValid() { return mData != NULL; }
bool isStop() { return _1C == 0; }
bool isRelease() { return _1C == 3 || _1C == 4; }
u32 getTarget() { return mData->mTarget; }
/* 0x00 */ const Data* mData;
/* 0x04 */ f32 _04;
+1 -1
View File
@@ -25,7 +25,7 @@ public:
/* 8028FE88 */ void pause(bool);
/* 8028F724 */ virtual ~JASTaskThread();
/* 8028FD4C */ virtual void run();
/* 8028FD4C */ virtual void* run();
/* 0x7C */ OSThreadQueue mpThreadQueue;
/* 0x84 */ bool field_0x84;
+3 -3
View File
@@ -6,7 +6,7 @@
struct JASWaveInfo {
JASWaveInfo() {
field_0x01 = 0x3c;
field_0x20 = one;
field_0x20 = &one;
}
/* 0x00 */ u8 field_0x00;
@@ -20,9 +20,9 @@ struct JASWaveInfo {
/* 0x18 */ int field_0x18;
/* 0x1C */ s16 field_0x1c;
/* 0x1E */ s16 field_0x1e;
/* 0x20 */ const void* field_0x20;
/* 0x20 */ const u32* field_0x20;
static u32 one[1 + 1 /* padding */];
static u32 one;
};
#endif /* JASWAVEINFO_H */
+5
View File
@@ -444,6 +444,11 @@ struct TUtil {
}
};
template<>
struct TUtil<f32> {
static inline f32 PI() { return 3.1415927f; }
};
template<>
struct TUtil<double> {
static inline double epsilon() { return 32.0f * FLT_EPSILON; }
+19
View File
@@ -4,6 +4,14 @@
#include "dolphin/types.h"
#include "utility.h"
template<typename T>
struct TAngleConstant_;
template<>
struct TAngleConstant_<f32> {
static inline f32 RADIAN_DEG360() { return 6.2831855f; }
};
struct TSinCosTable {
std::pair<f32, f32> table[0x2000];
@@ -30,6 +38,13 @@ struct TSinCosTable {
}
return table[(u16)(22.755556106567383f * degree) & 0x1fffU].second;
}
inline f32 sinRadian(f32 radian) {
if (radian < 0.0f) {
return -table[(u16)(-8192.0f / TAngleConstant_<f32>::RADIAN_DEG360() * radian) & 0x1fffU].first;
}
return table[(u16)(8192.0f / TAngleConstant_<f32>::RADIAN_DEG360() * radian) & 0x1fffU].first;
}
};
struct TAtanTable {
@@ -74,4 +89,8 @@ inline f32 JMACosDegree(f32 degree) {
return JMath::sincosTable_.cosDegree(degree);
}
inline f32 JMASinRadian(f32 radian) {
return JMath::sincosTable_.sinRadian(radian);
}
#endif /* JMATRIGONOMETRIC_H */