mirror of https://github.com/zeldaret/tp.git
Various alignments to debug + matching TUs (#2391)
This commit is contained in:
parent
417922b5c3
commit
3df5c7bb42
|
|
@ -2446,14 +2446,14 @@ JSystem/JAudio2/JASOscillator.cpp:
|
|||
.text start:0x8048A950 end:0x8048B020
|
||||
.rodata start:0x80654D60 end:0x80654E70
|
||||
.data start:0x806FDFE8 end:0x806FE028
|
||||
.sdata start:0x80748938 end:0x8074894C
|
||||
.sdata start:0x80748938 end:0x80748948
|
||||
.sdata2 start:0x80751C60 end:0x80751C88
|
||||
|
||||
JSystem/JAudio2/JASAiCtrl.cpp:
|
||||
.text start:0x8048B020 end:0x8048BD30
|
||||
.rodata start:0x80654E70 end:0x80654E80
|
||||
.data start:0x806FE028 end:0x806FE188
|
||||
.sdata start:0x8074894C end:0x80748970
|
||||
.sdata start:0x80748948 end:0x80748970
|
||||
.sbss start:0x8074CC68 end:0x8074CCA8
|
||||
.sdata2 start:0x80751C88 end:0x80751CA8
|
||||
.bss start:0x807C8D78 end:0x807C8D88
|
||||
|
|
|
|||
12
configure.py
12
configure.py
|
|
@ -742,14 +742,14 @@ config.libs = [
|
|||
Object(MatchingFor("GZ2E01"), "JSystem/JParticle/JPAExtraShape.cpp"),
|
||||
Object(MatchingFor("GZ2E01"), "JSystem/JParticle/JPAChildShape.cpp"),
|
||||
Object(MatchingFor("GZ2E01"), "JSystem/JParticle/JPAExTexShape.cpp"),
|
||||
Object(NonMatching, "JSystem/JParticle/JPADynamicsBlock.cpp"),
|
||||
Object(NonMatching, "JSystem/JParticle/JPAFieldBlock.cpp"),
|
||||
Object(MatchingFor("GZ2E01"), "JSystem/JParticle/JPADynamicsBlock.cpp"),
|
||||
Object(MatchingFor("GZ2E01"), "JSystem/JParticle/JPAFieldBlock.cpp"),
|
||||
Object(MatchingFor("GZ2E01"), "JSystem/JParticle/JPAKeyBlock.cpp"),
|
||||
Object(MatchingFor("GZ2E01"), "JSystem/JParticle/JPATexture.cpp"),
|
||||
Object(MatchingFor("GZ2E01"), "JSystem/JParticle/JPAResourceLoader.cpp"),
|
||||
Object(Equivalent, "JSystem/JParticle/JPAEmitterManager.cpp", extra_cflags=['-pragma "nosyminline off"']), # weak func order
|
||||
Object(MatchingFor("GZ2E01"), "JSystem/JParticle/JPAEmitter.cpp"),
|
||||
Object(NonMatching, "JSystem/JParticle/JPAParticle.cpp"),
|
||||
Object(MatchingFor("GZ2E01"), "JSystem/JParticle/JPAParticle.cpp"),
|
||||
Object(MatchingFor("GZ2E01"), "JSystem/JParticle/JPAMath.cpp"),
|
||||
],
|
||||
),
|
||||
|
|
@ -826,7 +826,7 @@ config.libs = [
|
|||
Object(MatchingFor("GZ2E01"), "JSystem/JAudio2/JASTrackPort.cpp"),
|
||||
Object(MatchingFor("GZ2E01"), "JSystem/JAudio2/JASRegisterParam.cpp"),
|
||||
Object(MatchingFor("GZ2E01"), "JSystem/JAudio2/JASSeqCtrl.cpp"),
|
||||
Object(NonMatching, "JSystem/JAudio2/JASSeqParser.cpp"),
|
||||
Object(MatchingFor("GZ2E01"), "JSystem/JAudio2/JASSeqParser.cpp"),
|
||||
Object(MatchingFor("GZ2E01"), "JSystem/JAudio2/JASSeqReader.cpp"),
|
||||
Object(NonMatching, "JSystem/JAudio2/JASAramStream.cpp"),
|
||||
Object(NonMatching, "JSystem/JAudio2/JASBank.cpp"),
|
||||
|
|
@ -907,12 +907,12 @@ config.libs = [
|
|||
Object(MatchingFor("GZ2E01"), "Z2AudioLib/Z2SoundStarter.cpp"),
|
||||
Object(MatchingFor("GZ2E01"), "Z2AudioLib/Z2SoundHandles.cpp"),
|
||||
Object(MatchingFor("GZ2E01"), "Z2AudioLib/Z2SeMgr.cpp"),
|
||||
Object(NonMatching, "Z2AudioLib/Z2SeqMgr.cpp"),
|
||||
Object(Equivalent, "Z2AudioLib/Z2SeqMgr.cpp"),
|
||||
Object(MatchingFor("GZ2E01"), "Z2AudioLib/Z2StatusMgr.cpp"),
|
||||
Object(NonMatching, "Z2AudioLib/Z2SceneMgr.cpp"),
|
||||
Object(MatchingFor("GZ2E01"), "Z2AudioLib/Z2FxLineMgr.cpp"),
|
||||
Object(MatchingFor("GZ2E01"), "Z2AudioLib/Z2SoundInfo.cpp"),
|
||||
Object(NonMatching, "Z2AudioLib/Z2Audience.cpp"),
|
||||
Object(Equivalent, "Z2AudioLib/Z2Audience.cpp"),
|
||||
Object(MatchingFor("GZ2E01"), "Z2AudioLib/Z2SoundObject.cpp"),
|
||||
Object(MatchingFor("GZ2E01"), "Z2AudioLib/Z2SoundObjMgr.cpp"),
|
||||
Object(MatchingFor("GZ2E01"), "Z2AudioLib/Z2Creature.cpp"),
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
#define J3DANIMATION_H
|
||||
|
||||
#include "JSystem/J3DGraphAnimator/J3DModelData.h"
|
||||
#include "JSystem/JUtility/JUTAssert.h"
|
||||
#include "JSystem/JUtility/JUTNameTab.h"
|
||||
#include "global.h"
|
||||
|
||||
|
|
@ -590,10 +591,11 @@ public:
|
|||
|
||||
u16 getUpdateMaterialID(u16 idx) const { return mUpdateMaterialID[idx]; }
|
||||
u16 getUpdateMaterialNum() const { return mTrackNum / 3; }
|
||||
u16 getPostUpdateMaterialNum() const { return field_0x4a / 3; }
|
||||
|
||||
int getUpdateTexMtxID(u16 idx) { return mUpdateTexMtxID[idx]; }
|
||||
int getUpdateTexMtxID(u16 idx) const { return mUpdateTexMtxID[idx]; }
|
||||
bool isValidUpdateMaterialID(u16 idx) const { return mUpdateMaterialID[idx] != 0xffff; }
|
||||
u32 getTexMtxCalcType() const { return mTexMtxCalcType; }
|
||||
u32 getTexMtxCalcType() { return mTexMtxCalcType; }
|
||||
Vec* getSRTCenter(u16 idx) { return &mSRTCenter[idx]; }
|
||||
|
||||
/* 0x0C */ int mDecShift;
|
||||
|
|
@ -719,7 +721,10 @@ public:
|
|||
|
||||
u16 getUpdateMaterialNum() const { return mUpdateMaterialNum; }
|
||||
bool isValidUpdateMaterialID(u16 id) const { return mUpdateMaterialID[id] != 0xFFFF; }
|
||||
u16 getUpdateMaterialID(u16 idx) const { return mUpdateMaterialID[idx]; }
|
||||
u16 getUpdateMaterialID(u16 idx) const {
|
||||
JUT_ASSERT_MSG(1578, 0 <= mUpdateMaterialNum - idx, "Error : range over.")
|
||||
return mUpdateMaterialID[idx];
|
||||
}
|
||||
|
||||
/* 0x0C */ u16 field_0xc;
|
||||
/* 0x0E */ u16 field_0xe;
|
||||
|
|
|
|||
|
|
@ -118,6 +118,10 @@ namespace JASDsp {
|
|||
extern TChannel* CH_BUF;
|
||||
extern FxBuf* FX_BUF;
|
||||
extern f32 sDSPVolume;
|
||||
|
||||
#ifdef DEBUG
|
||||
extern s32 dspMutex;
|
||||
#endif
|
||||
};
|
||||
|
||||
u16 DSP_CreateMap2(u32 msg);
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
#include "JSystem/JKernel/JKRHeap.h"
|
||||
#include "JSystem/JSupport/JSUList.h"
|
||||
#include "JSystem/JUtility/JUTAssert.h"
|
||||
#include <dolphin/os.h>
|
||||
#include <dolphin/os.h>
|
||||
|
||||
|
|
@ -112,7 +113,7 @@ class JASMemChunkPool : public OSMutex {
|
|||
mChunks = 0;
|
||||
}
|
||||
|
||||
bool checkArea(void* ptr) {
|
||||
bool checkArea(const void* ptr) const {
|
||||
return (u8*)this + 0xc <= (u8*)ptr && (u8*)ptr < (u8*)this + (ChunkSize + 0xc);
|
||||
}
|
||||
|
||||
|
|
@ -127,11 +128,11 @@ class JASMemChunkPool : public OSMutex {
|
|||
return rv;
|
||||
}
|
||||
|
||||
void free() {
|
||||
void free(void* mem) {
|
||||
mChunks--;
|
||||
}
|
||||
|
||||
bool isEmpty() {
|
||||
bool isEmpty() const {
|
||||
return mChunks == 0;
|
||||
}
|
||||
|
||||
|
|
@ -201,7 +202,8 @@ public:
|
|||
MemoryChunk* prevChunk = NULL;
|
||||
while (chunk != NULL) {
|
||||
if (chunk->checkArea(ptr)) {
|
||||
chunk->free();
|
||||
chunk->free(ptr);
|
||||
|
||||
if (chunk != field_0x18 && chunk->isEmpty()) {
|
||||
MemoryChunk* nextChunk = chunk->getNextChunk();
|
||||
delete chunk;
|
||||
|
|
@ -212,6 +214,8 @@ public:
|
|||
prevChunk = chunk;
|
||||
chunk = chunk->getNextChunk();
|
||||
}
|
||||
|
||||
JUT_PANIC(362,"Cannnot free for JASMemChunkPool")
|
||||
}
|
||||
|
||||
/* 0x18 */ MemoryChunk* field_0x18;
|
||||
|
|
|
|||
|
|
@ -37,10 +37,10 @@ public:
|
|||
const JASSeqReader* getSeqReader() const { return &mReader; }
|
||||
void* getBase() { return mReader.getBase(); }
|
||||
void* getAddr(u32 param_0) { return mReader.getAddr(param_0); }
|
||||
u8 getByte(u32 param_0) { return mReader.getByte(param_0); }
|
||||
u16 get16(u32 param_0) { return mReader.get16(param_0); }
|
||||
u32 get24(int param_0) { return mReader.get24(param_0); }
|
||||
u32 get32(u32 param_0) { return mReader.get32(param_0); }
|
||||
u8 getByte(u32 param_0) const { return mReader.getByte(param_0); }
|
||||
u16 get16(u32 param_0) const { return mReader.get16(param_0); }
|
||||
u32 get24(u32 param_0) const { return mReader.get24(param_0); }
|
||||
u32 get32(u32 param_0) const { return mReader.get32(param_0); }
|
||||
void* getCur() { return mReader.getCur(); }
|
||||
u32 readByte() { return mReader.readByte(); }
|
||||
u32 read16() { return mReader.read16(); }
|
||||
|
|
|
|||
|
|
@ -25,29 +25,30 @@ public:
|
|||
field_0x04 = (u8*)param_1;
|
||||
}
|
||||
|
||||
u32 get24(int param_0) {
|
||||
u32 get24(int param_0) const {
|
||||
return (*(u32*)(field_0x00 + param_0 - 1)) & 0xffffff;
|
||||
}
|
||||
|
||||
u32* getBase() { return (u32*)field_0x00; }
|
||||
void* getAddr(u32 param_0) { return field_0x00 + param_0; }
|
||||
u8 getByte(u32 param_0) { return *(field_0x00 + param_0); }
|
||||
u16 get16(u32 param_0) { return *(u16*)(field_0x00 + param_0); }
|
||||
u32 get32(u32 param_0) { return *(u32*)(field_0x00 + param_0); }
|
||||
u8 getByte(u32 param_0) const { return *(field_0x00 + param_0); }
|
||||
u16 get16(u32 param_0) const { return *(u16*)(field_0x00 + param_0); }
|
||||
u32 get32(u32 param_0) const { return *(u32*)(field_0x00 + param_0); }
|
||||
u8* getCur() { return field_0x04; }
|
||||
u32 readByte() { return *field_0x04++; }
|
||||
u32 read16() {
|
||||
u16* tmp = (u16*)field_0x04;
|
||||
field_0x04 += 2;
|
||||
return *tmp;
|
||||
return *((u16*)field_0x04)++;
|
||||
}
|
||||
u32 read24() {
|
||||
field_0x04--;
|
||||
u32* tmp = (u32*)field_0x04;
|
||||
field_0x04 += 4;
|
||||
return *tmp & 0x00ffffff;
|
||||
return (*((u32*)field_0x04)++) & 0x00ffffff;
|
||||
}
|
||||
u16 getLoopCount() const {
|
||||
if (field_0x08 == 0) {
|
||||
return 0;
|
||||
}
|
||||
return field_0x2c[field_0x08 - 1];
|
||||
}
|
||||
u16 getLoopCount() const { return field_0x08 == 0 ? 0 : field_0x2c[field_0x08 - 1]; }
|
||||
|
||||
/* 0x00 */ u8* field_0x00;
|
||||
/* 0x04 */ u8* field_0x04;
|
||||
|
|
|
|||
|
|
@ -17,6 +17,8 @@ namespace JASDsp {
|
|||
extern const u32 FILTER_MODE_IIR;
|
||||
};
|
||||
|
||||
#define MAX_CHILDREN 16
|
||||
|
||||
/**
|
||||
* @ingroup jsystem-jaudio
|
||||
*
|
||||
|
|
@ -125,14 +127,17 @@ struct JASTrack : public JASPoolAllocObject_MultiThreaded<JASTrack> {
|
|||
static TList sTrackList;
|
||||
|
||||
JASSeqCtrl* getSeqCtrl() { return &mSeqCtrl; }
|
||||
u16 getPort(u32 param_0) { return mTrackPort.get(param_0); }
|
||||
u16 getPort(u32 param_0) const { return mTrackPort.get(param_0); }
|
||||
void setPort(u32 param_0, u16 param_1) { mTrackPort.set(param_0, param_1); }
|
||||
u32 checkPortIn(u32 param_0) { return mTrackPort.checkImport(param_0); }
|
||||
u32 checkPort(u32 param_0) { return mTrackPort.checkExport(param_0); }
|
||||
u32 checkPortIn(u32 param_0) const { return mTrackPort.checkImport(param_0); }
|
||||
u32 checkPort(u32 param_0) const { return mTrackPort.checkExport(param_0); }
|
||||
u32 readReg(JASRegisterParam::RegID param_0) { return mRegisterParam.read(param_0); }
|
||||
void writeReg(JASRegisterParam::RegID param_0, u32 param_1) { mRegisterParam.write(param_0, param_1); }
|
||||
JASTrack* getParent() { return mParent; }
|
||||
JASTrack* getChild(u32 index) { return mChildren[index]; }
|
||||
JASTrack* getChild(u32 index) {
|
||||
JUT_ASSERT(115, index < MAX_CHILDREN)
|
||||
return mChildren[index];
|
||||
}
|
||||
int getChannelMgrCount() { return mChannelMgrCount; }
|
||||
f32 getVibDepth() const { return mVibDepth; }
|
||||
void setVibDepth(f32 param_0) { mVibDepth = param_0; }
|
||||
|
|
@ -142,9 +147,9 @@ struct JASTrack : public JASPoolAllocObject_MultiThreaded<JASTrack> {
|
|||
void setTremDepth(f32 param_0) { mTremDepth = param_0; }
|
||||
f32 getTremPitch() const { return mTremPitch; }
|
||||
void setTremPitch(f32 param_0) { mTremPitch = param_0; }
|
||||
u16 getVibDelay() const { return mVibDelay; }
|
||||
u32 getVibDelay() const { return mVibDelay; }
|
||||
void setVibDelay(u32 param_0) { mVibDelay = param_0; }
|
||||
u16 getTremDelay() const { return mTremDelay; }
|
||||
u32 getTremDelay() const { return mTremDelay; }
|
||||
void setTremDelay(u32 param_0) { mTremDelay = param_0; }
|
||||
u8 getStatus() const { return mStatus; }
|
||||
void setAutoDelete(u8 param_0) { mFlags.autoDelete = param_0; }
|
||||
|
|
@ -155,8 +160,8 @@ struct JASTrack : public JASPoolAllocObject_MultiThreaded<JASTrack> {
|
|||
u16 getDirectRelease() const { return mDirectRelease; }
|
||||
void setDirectRelease(u16 param_0) {mDirectRelease = param_0; }
|
||||
u16 getTimebase() const { return mTimebase; }
|
||||
s8 getTranspose() const { return mTranspose; }
|
||||
void setTranspose(u32 param_0) { mTranspose = param_0; }
|
||||
int getTranspose() const { return mTranspose; }
|
||||
void setTranspose(s32 param_0) { mTranspose = param_0; }
|
||||
u16 getBankNumber() const { return mBankNumber; }
|
||||
void setBankNumber(u16 param_0) { mBankNumber = param_0; }
|
||||
u16 getProgNumber() const { return mProgNumber; }
|
||||
|
|
@ -187,7 +192,7 @@ struct JASTrack : public JASPoolAllocObject_MultiThreaded<JASTrack> {
|
|||
/* 0x0e4 */ JASOscillator::Data mOscParam[2];
|
||||
/* 0x114 */ JASOscillator::Point mOscPoint[4];
|
||||
/* 0x12C */ JASTrack* mParent;
|
||||
/* 0x130 */ JASTrack* mChildren[16];
|
||||
/* 0x130 */ JASTrack* mChildren[MAX_CHILDREN];
|
||||
/* 0x170 */ TChannelMgr* mChannelMgrs[4];
|
||||
/* 0x180 */ TChannelMgr mDefaultChannelMgr;
|
||||
/* 0x1D0 */ int mChannelMgrCount;
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ public:
|
|||
/* 8029360C */ u32 checkImport(u32) const;
|
||||
/* 80293628 */ u32 checkExport(u32) const;
|
||||
|
||||
u16 get(u32 param_0) { return field_0x4[param_0]; }
|
||||
u16 get(u32 param_0) const { return field_0x4[param_0]; }
|
||||
void set(u32 param_0, u16 param_1) { field_0x4[param_0] = param_1; }
|
||||
|
||||
u16 field_0x0;
|
||||
|
|
|
|||
|
|
@ -38,7 +38,8 @@ struct TUtil<f32> {
|
|||
return x;
|
||||
}
|
||||
f32 root = __frsqrte(x);
|
||||
return 0.5f * root * (3.0f - x * (root * root));
|
||||
root = 0.5f * root * (3.0f - x * (root * root));
|
||||
return root;
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -137,6 +138,24 @@ inline float fsqrt_step(float mag) {
|
|||
return 0.5f * root * (3.0f - mag * (root * root));
|
||||
}
|
||||
|
||||
inline void mulInternal(register const f32* a, register const f32* b, register float* dst) {
|
||||
register f32 a_x_y;
|
||||
register f32 b_x_y;
|
||||
register f32 x_y;
|
||||
register f32 za;
|
||||
register f32 zb;
|
||||
register f32 z;
|
||||
#ifdef __MWERKS__
|
||||
asm {
|
||||
psq_l a_x_y, 0(a), 0, 0
|
||||
psq_l b_x_y, 0(b), 0, 0
|
||||
ps_mul x_y, a_x_y, b_x_y
|
||||
psq_st x_y, 0(dst), 0, 0
|
||||
};
|
||||
dst[2] = a[2] * b[2];
|
||||
#endif
|
||||
}
|
||||
|
||||
template <>
|
||||
struct TVec3<f32> : public Vec {
|
||||
inline TVec3(const Vec& i_vec) {
|
||||
|
|
@ -147,7 +166,8 @@ struct TVec3<f32> : public Vec {
|
|||
setTVec3f(&i_vec.x, &x);
|
||||
}
|
||||
|
||||
TVec3(f32 x, f32 y, f32 z) {
|
||||
template<class U>
|
||||
TVec3(U x, U y, U z) {
|
||||
set(x, y, z);
|
||||
}
|
||||
|
||||
|
|
@ -156,7 +176,8 @@ struct TVec3<f32> : public Vec {
|
|||
operator Vec*() { return (Vec*)&x; }
|
||||
operator const Vec*() const { return (Vec*)&x; }
|
||||
|
||||
void set(const TVec3<f32>& other) {
|
||||
template<class U>
|
||||
void set(const TVec3<U>& other) {
|
||||
x = other.x;
|
||||
y = other.y;
|
||||
z = other.z;
|
||||
|
|
@ -168,7 +189,8 @@ struct TVec3<f32> : public Vec {
|
|||
z = other.z;
|
||||
}
|
||||
|
||||
void set(f32 x_, f32 y_, f32 z_) {
|
||||
template<class U>
|
||||
void set(U x_, U y_, U z_) {
|
||||
x = x_;
|
||||
y = y_;
|
||||
z = z_;
|
||||
|
|
@ -181,27 +203,7 @@ struct TVec3<f32> : public Vec {
|
|||
void zero() { x = y = z = 0.0f; }
|
||||
|
||||
void mul(const TVec3<f32>& a, const TVec3<f32>& b) {
|
||||
register f32* dst = &x;
|
||||
const register f32* srca = &a.x;
|
||||
const register f32* srcb = &b.x;
|
||||
register f32 a_x_y;
|
||||
register f32 b_x_y;
|
||||
register f32 x_y;
|
||||
register f32 za;
|
||||
register f32 zb;
|
||||
register f32 z;
|
||||
#ifdef __MWERKS__
|
||||
asm {
|
||||
psq_l a_x_y, 0(srca), 0, 0
|
||||
psq_l b_x_y, 0(srcb), 0, 0
|
||||
ps_mul x_y, a_x_y, b_x_y
|
||||
psq_st x_y, 0(dst), 0, 0
|
||||
lfs za, 8(srca)
|
||||
lfs zb, 8(srcb)
|
||||
fmuls z, za, zb
|
||||
stfs z, 8(dst)
|
||||
};
|
||||
#endif
|
||||
mulInternal(&a.x, &b.x, &this->x);
|
||||
}
|
||||
|
||||
inline void mul(const TVec3<f32>& a) {
|
||||
|
|
@ -239,23 +241,19 @@ struct TVec3<f32> : public Vec {
|
|||
return JMathInlineVEC::C_VECSquareMag((Vec*)&x);
|
||||
}
|
||||
|
||||
void normalize() {
|
||||
f32 normalize() {
|
||||
f32 sq = squared();
|
||||
if (sq <= FLT_EPSILON * 32.0f) {
|
||||
return;
|
||||
if (sq <= TUtil<f32>::epsilon()) {
|
||||
return 0.0f;
|
||||
}
|
||||
f32 norm;
|
||||
if (sq <= 0.0f) {
|
||||
norm = sq;
|
||||
} else {
|
||||
norm = fsqrt_step(sq);
|
||||
}
|
||||
scale(norm);
|
||||
f32 inv_norm = TUtil<f32>::inv_sqrt(sq);
|
||||
scale(inv_norm);
|
||||
return inv_norm * sq;
|
||||
}
|
||||
|
||||
void normalize(const TVec3<f32>& other) {
|
||||
f32 sq = other.squared();
|
||||
if (sq <= FLT_EPSILON * 32.0f) {
|
||||
if (sq <= TUtil<f32>::epsilon()) {
|
||||
zero();
|
||||
return;
|
||||
}
|
||||
|
|
@ -348,18 +346,14 @@ struct TVec3<f32> : public Vec {
|
|||
VECCrossProduct(a, b, *this);
|
||||
}
|
||||
|
||||
void setLength(f32 len) {
|
||||
f32 setLength(f32 len) {
|
||||
f32 sq = squared();
|
||||
if (sq <= FLT_EPSILON * 32.0f) {
|
||||
return;
|
||||
if (sq <= TUtil<f32>::epsilon()) {
|
||||
return 0.0f;
|
||||
}
|
||||
f32 norm;
|
||||
if (sq <= 0.0f) {
|
||||
norm = sq;
|
||||
} else {
|
||||
norm = fsqrt_step(sq);
|
||||
}
|
||||
scale(norm * len);
|
||||
f32 inv_norm = TUtil<f32>::inv_sqrt(sq);
|
||||
scale(inv_norm * len);
|
||||
return inv_norm * sq;
|
||||
}
|
||||
|
||||
f32 setLength(const TVec3<f32>& other, f32 len) {
|
||||
|
|
@ -374,25 +368,7 @@ struct TVec3<f32> : public Vec {
|
|||
}
|
||||
|
||||
f32 dot(const TVec3<f32>& other) const {
|
||||
register const f32* pThis = &x;
|
||||
register const f32* pOther = &other.x;
|
||||
register f32 res;
|
||||
register f32 thisyz;
|
||||
register f32 otheryz;
|
||||
register f32 otherxy;
|
||||
register f32 thisxy;
|
||||
#ifdef __MWERKS__
|
||||
asm {
|
||||
psq_l thisyz, 4(pThis), 0, 0
|
||||
psq_l otheryz, 4(pOther), 0, 0
|
||||
ps_mul thisyz, thisyz, otheryz
|
||||
psq_l thisxy, 0(pThis), 0, 0
|
||||
psq_l otherxy, 0(pOther), 0, 0
|
||||
ps_madd otheryz, thisxy, otherxy, thisyz
|
||||
ps_sum0 res, otheryz, thisyz, thisyz
|
||||
};
|
||||
#endif
|
||||
return res;
|
||||
return JMathInlineVEC::C_VECDotProduct(this, &other);
|
||||
}
|
||||
|
||||
void cubic(const TVec3<f32>& param_1, const TVec3<f32>& param_2, const TVec3<f32>& param_3,
|
||||
|
|
@ -450,15 +426,15 @@ struct TVec2 {
|
|||
return (x >= other.x) && (y >= other.y) ? true : false;
|
||||
}
|
||||
|
||||
f32 dot(const TVec2<T>& other) {
|
||||
f32 dot(const TVec2<T>& other) const {
|
||||
return x * other.x + y * other.y;
|
||||
}
|
||||
|
||||
f32 squared() {
|
||||
f32 squared() const {
|
||||
return dot(*this);
|
||||
}
|
||||
|
||||
f32 length() {
|
||||
f32 length() const {
|
||||
f32 sqr = squared();
|
||||
if (sqr <= 0.0f) {
|
||||
return sqr;
|
||||
|
|
|
|||
|
|
@ -8,6 +8,9 @@ class JKRHeap;
|
|||
typedef void (*JKRErrorHandler)(void*, u32, int);
|
||||
|
||||
extern bool data_804508B0;
|
||||
extern u8 data_804508B1;
|
||||
extern u8 data_804508B2;
|
||||
extern u8 data_804508B3;
|
||||
|
||||
/**
|
||||
* @ingroup jsystem-jkernel
|
||||
|
|
@ -247,4 +250,10 @@ inline JKRHeap* JKRGetRootHeap() {
|
|||
return JKRHeap::getRootHeap();
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
inline void JKRSetDebugFillNotuse(u8 status) { data_804508B1 = status; }
|
||||
inline void JKRSetDebugFillNew(u8 status) { data_804508B2 = status; }
|
||||
inline void JKRSetDebugFillDelete(u8 status) { data_804508B3 = status; }
|
||||
#endif
|
||||
|
||||
#endif /* JKRHEAP_H */
|
||||
|
|
|
|||
|
|
@ -227,6 +227,26 @@ namespace JMathInlineVEC {
|
|||
#endif
|
||||
return res;
|
||||
}
|
||||
|
||||
inline f32 C_VECDotProduct(register const Vec *a, register const Vec *b) {
|
||||
register f32 res;
|
||||
register f32 thisyz;
|
||||
register f32 otheryz;
|
||||
register f32 otherxy;
|
||||
register f32 thisxy;
|
||||
#ifdef __MWERKS__
|
||||
asm {
|
||||
psq_l thisyz, 4(a), 0, 0
|
||||
psq_l otheryz, 4(b), 0, 0
|
||||
ps_mul thisyz, thisyz, otheryz
|
||||
psq_l thisxy, 0(a), 0, 0
|
||||
psq_l otherxy, 0(b), 0, 0
|
||||
ps_madd otheryz, thisxy, otherxy, thisyz
|
||||
ps_sum0 res, otheryz, thisyz, thisyz
|
||||
};
|
||||
#endif
|
||||
return res;
|
||||
}
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
|
|
|
|||
|
|
@ -112,7 +112,7 @@ public:
|
|||
u32 getClrLoopOfst(u32 param_1) const { return getClrLoopOfstMask() & param_1; }
|
||||
u8 getTexLoopOfstMask() const { return mpData->mTexAnmRndmMask; }
|
||||
u32 getTexLoopOfst(u8 param_1) const { return getTexLoopOfstMask() & param_1; }
|
||||
u8 getLoopOfstValue() { return mpData->mAnmRndm; }
|
||||
u8 getLoopOfstValue() const { return mpData->mAnmRndm; }
|
||||
|
||||
f32 getIncTransX() const { return ((f32*)mpTexCrdMtxAnmTbl)[5]; }
|
||||
f32 getInitTransX() const { return ((f32*)mpTexCrdMtxAnmTbl)[0]; }
|
||||
|
|
|
|||
|
|
@ -22,8 +22,8 @@ public:
|
|||
Mtx mCamMtx;
|
||||
Mtx mPrjMtx;
|
||||
|
||||
void getCamMtx(Mtx* dst) const { MTXCopy(mCamMtx, *dst); }
|
||||
void getPrjMtx(Mtx* dst) const { MTXCopy(mPrjMtx, *dst); }
|
||||
void getCamMtx(Mtx dst) const { MTXCopy(mCamMtx, dst); }
|
||||
void getPrjMtx(Mtx dst) const { MTXCopy(mPrjMtx, dst); }
|
||||
};
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -96,10 +96,10 @@ public:
|
|||
f32 getInitVelDir() { return mpData->mInitialVelDir; }
|
||||
f32 getInitVelDirSp() { return mpData->mSpread; }
|
||||
f32 getInitVelRndm() { return mpData->mInitialVelRndm; }
|
||||
f32 getInitVelRatio() { return mpData->mInitialVelRatio; }
|
||||
f32 getInitVelRatio() const { return mpData->mInitialVelRatio; }
|
||||
f32 getAirRes() { return mpData->mAirResist; }
|
||||
f32 getLifeTimeRndm() { return mpData->mLifeTimeRndm; }
|
||||
f32 getMomentRndm() { return mpData->mMoment; }
|
||||
f32 getLifetimeRndm() const { return mpData->mLifeTimeRndm; }
|
||||
f32 getMomentRndm() const { return mpData->mMoment; }
|
||||
|
||||
public:
|
||||
/* 0x00 */ const JPADynamicsBlockData* mpData;
|
||||
|
|
|
|||
|
|
@ -19,13 +19,19 @@ class JPAParticleCallBack;
|
|||
*
|
||||
*/
|
||||
struct JPAEmitterWorkData {
|
||||
struct JPAVolumeCalcData {
|
||||
/* 0x00 */ JGeometry::TVec3<f32> mVolumePos;
|
||||
/* 0x0C */ JGeometry::TVec3<f32> mVelOmni;
|
||||
/* 0x18 */ JGeometry::TVec3<f32> mVelAxis;
|
||||
};
|
||||
|
||||
JPAEmitterWorkData() : mRndm(0) {}
|
||||
|
||||
/* 0x00 */ JPABaseEmitter* mpEmtr;
|
||||
/* 0x04 */ JPAResource* mpRes;
|
||||
/* 0x08 */ JPAResourceManager* mpResMgr;
|
||||
/* 0x0C */ JPARandom mRndm;
|
||||
/* 0x10 */ JGeometry::TVec3<f32> mVolumePos;
|
||||
/* 0x1C */ JGeometry::TVec3<f32> mVelOmni;
|
||||
/* 0x28 */ JGeometry::TVec3<f32> mVelAxis;
|
||||
/* 0x10 */ JPAVolumeCalcData mVolumeCalcData;
|
||||
/* 0x34 */ f32 mVolumeSize;
|
||||
/* 0x38 */ f32 mVolumeMinRad;
|
||||
/* 0x3C */ f32 mVolumeSweep;
|
||||
|
|
@ -94,7 +100,7 @@ enum {
|
|||
class JPABaseEmitter {
|
||||
public:
|
||||
/* 8027E5EC */ ~JPABaseEmitter() {}
|
||||
/* 8027E64C */ JPABaseEmitter() : mLink(this) {}
|
||||
/* 8027E64C */ JPABaseEmitter() : mLink(this), mRndm(0) {}
|
||||
/* 8027E6EC */ void init(JPAEmitterManager*, JPAResource*);
|
||||
/* 8027EDD4 */ bool processTillStartFrame();
|
||||
/* 8027EE14 */ bool processTermination();
|
||||
|
|
@ -109,8 +115,8 @@ public:
|
|||
void initStatus(u32 status) { mStatus = status; }
|
||||
void setStatus(u32 status) { mStatus |= status; }
|
||||
void clearStatus(u32 status) { mStatus &= ~status; }
|
||||
u32 checkStatus(u32 status) { return (mStatus & status); }
|
||||
bool checkFlag(u32 flag) { return !!(mpRes->getDyn()->getFlag() & flag); }
|
||||
u32 checkStatus(u32 status) const { return (mStatus & status); }
|
||||
bool checkFlag(u32 flag) const { return !!(mpRes->getDyn()->getFlag() & flag); }
|
||||
u8 getResourceManagerID() const { return mResMgrID; }
|
||||
u8 getGroupID() const { return mGroupID; }
|
||||
u8 getDrawTimes() const { return mDrawTimes; }
|
||||
|
|
|
|||
|
|
@ -32,18 +32,18 @@ public:
|
|||
/* 8027E344 */ void entryResourceManager(JPAResourceManager*, u8);
|
||||
/* 8027E354 */ void clearResourceManager(u8);
|
||||
/* 8027E3F4 */ void calcYBBCam();
|
||||
JPAResourceManager* getResourceManager(u16 idx) { return mpResMgrAry[idx]; }
|
||||
JPAResourceManager* getResourceManager(u16 idx) { return pResMgrAry[idx]; }
|
||||
|
||||
public:
|
||||
/* 0x00 */ JSUList<JPABaseEmitter>* mpGrpEmtr;
|
||||
/* 0x00 */ JSUList<JPABaseEmitter>* pEmtrUseList;
|
||||
/* 0x04 */ JSUList<JPABaseEmitter> mFreeEmtrList;
|
||||
/* 0x10 */ JPAList<JPABaseParticle> mPtclPool;
|
||||
/* 0x1C */ JPAResourceManager** mpResMgrAry;
|
||||
/* 0x20 */ JPAEmitterWorkData* mpWorkData;
|
||||
/* 0x24 */ u32 mEmtrMax;
|
||||
/* 0x28 */ u32 mPtclMax;
|
||||
/* 0x2C */ u8 mGrpMax;
|
||||
/* 0x2D */ u8 mResMax;
|
||||
/* 0x1C */ JPAResourceManager** pResMgrAry;
|
||||
/* 0x20 */ JPAEmitterWorkData* pWd;
|
||||
/* 0x24 */ u32 emtrNum;
|
||||
/* 0x28 */ u32 ptclNum;
|
||||
/* 0x2C */ u8 gidMax;
|
||||
/* 0x2D */ u8 ridMax;
|
||||
};
|
||||
|
||||
#endif /* JPAEMITTERMANAGER_H */
|
||||
|
|
|
|||
|
|
@ -126,8 +126,8 @@ public:
|
|||
u32 getAddType() { return (mpData->mFlags >> 8) & 3; }
|
||||
u32 getSttFlag() { return mpData->mFlags >> 16; }
|
||||
bool checkStatus(u16 flag) { return flag & getSttFlag(); }
|
||||
f32 getMagRndm() { return mpData->mMagRndm; }
|
||||
f32 getVal1() { return mpData->mVal1; }
|
||||
f32 getMagRndm() const { return mpData->mMagRndm; }
|
||||
f32 getVal1() const { return mpData->mVal1; }
|
||||
f32 getFadeInTime() { return mpData->mFadeInTime; }
|
||||
f32 getFadeOutTime() { return mpData->mFadeOutTime; }
|
||||
f32 getEnTime() { return mpData->mEnTime; }
|
||||
|
|
@ -137,7 +137,7 @@ public:
|
|||
f32 getFadeOutRate() { return mFadeOutRate; }
|
||||
JGeometry::TVec3<f32>& getPos() { return mPos; }
|
||||
JGeometry::TVec3<f32>& getDir() { return mDir; }
|
||||
f32 getMag() { return mMag; }
|
||||
f32 getMag() const { return mMag; }
|
||||
void getPosOrig(JGeometry::TVec3<f32>* pos) { pos->set(mpData->mPos); }
|
||||
void getDirOrig(JGeometry::TVec3<f32>* dir) { dir->set(mpData->mDir); }
|
||||
f32 getMagOrig() { return mpData->mMag; }
|
||||
|
|
|
|||
|
|
@ -9,9 +9,7 @@
|
|||
*/
|
||||
template <class T>
|
||||
struct JPANode {
|
||||
JPANode() {
|
||||
mpPrev = NULL;
|
||||
mpNext = NULL;
|
||||
JPANode() : mpPrev(NULL), mpNext(NULL) {
|
||||
}
|
||||
~JPANode() {}
|
||||
JPANode<T>* getPrev() { return mpPrev; }
|
||||
|
|
@ -34,6 +32,7 @@ struct JPAList {
|
|||
/* 0x08 */ u32 mNum;
|
||||
|
||||
JPAList() : mpFirst(NULL), mpLast(NULL), mNum() {}
|
||||
~JPAList() {}
|
||||
|
||||
JPANode<T>* getEnd() { return NULL; }
|
||||
JPANode<T>* getFirst() const { return mpFirst; }
|
||||
|
|
@ -65,8 +64,7 @@ struct JPAList {
|
|||
} else {
|
||||
mpFirst = node;
|
||||
mpLast = node;
|
||||
node->mpPrev = NULL;
|
||||
node->mpNext = NULL;
|
||||
node->mpNext = node->mpPrev = NULL;
|
||||
}
|
||||
|
||||
mNum++;
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ struct JPAEmitterWorkData;
|
|||
*/
|
||||
class JPABaseParticle {
|
||||
public:
|
||||
~JPABaseParticle() {}
|
||||
/* 8027EFEC */ void init_p(JPAEmitterWorkData*);
|
||||
/* 8027F8C8 */ void init_c(JPAEmitterWorkData*, JPABaseParticle*);
|
||||
/* 8027FFD0 */ bool calc_p(JPAEmitterWorkData*);
|
||||
|
|
|
|||
|
|
@ -10,6 +10,8 @@
|
|||
struct JPARandom {
|
||||
public:
|
||||
JPARandom() { mSeed = 0; }
|
||||
JPARandom(u32 seed) { mSeed = seed; }
|
||||
~JPARandom() {}
|
||||
void set_seed(u32 seed) { mSeed = seed; }
|
||||
|
||||
u32 get_rndm_u() { return mSeed = mSeed * 0x19660du + 0x3c6ef35fu; }
|
||||
|
|
|
|||
|
|
@ -195,12 +195,12 @@ public:
|
|||
}
|
||||
|
||||
TTransform_position_direction*
|
||||
transformOnGet_transform_ifEnabled(TTransform_position_direction* param_1,
|
||||
transformOnGet_transform_ifEnabled(TTransform_position_direction& param_1,
|
||||
TTransform_position_direction* param_2) const {
|
||||
if (!transformOnGet_isEnabled()) {
|
||||
return param_1;
|
||||
return ¶m_1;
|
||||
}
|
||||
transformOnGet_transform(param_1, param_2);
|
||||
transformOnGet_transform(¶m_1, param_2);
|
||||
return param_2;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -197,7 +197,7 @@ struct TAdaptor {
|
|||
return &pValue_[param_0];
|
||||
}
|
||||
|
||||
const TObject* adaptor_getObject() { return pObject_; }
|
||||
const TObject* adaptor_getObject() const { return pObject_; }
|
||||
|
||||
/* 0x4 */ const TObject* pObject_;
|
||||
/* 0x8 */ TVariableValue* pValue_;
|
||||
|
|
|
|||
|
|
@ -45,13 +45,13 @@ class JSULink : public JSUPtrLink {
|
|||
public:
|
||||
JSULink(T* object) : JSUPtrLink((void*)object) {}
|
||||
|
||||
T* getObject() const { return static_cast<T*>(getObjectPtr()); }
|
||||
T* getObject() const { return static_cast<T*>(mObject); }
|
||||
|
||||
JSUList<T>* getSupervisor() const { return static_cast<JSUList<T>*>(this->getList()); }
|
||||
|
||||
JSULink<T>* getNext() const { return static_cast<JSULink*>(this->JSUPtrLink::getNext()); }
|
||||
JSULink<T>* getNext() const { return static_cast<JSULink*>(mNext); }
|
||||
|
||||
JSULink<T>* getPrev() const { return static_cast<JSULink*>(this->JSUPtrLink::getPrev()); }
|
||||
JSULink<T>* getPrev() const { return static_cast<JSULink*>(mPrev); }
|
||||
};
|
||||
|
||||
//
|
||||
|
|
|
|||
|
|
@ -10,15 +10,18 @@
|
|||
#define JUT_ASSERT_MSG(LINE, COND, MSG) \
|
||||
(COND) ? (void)0 : (JUTAssertion::showAssert(JUTAssertion::getSDevice(), __FILE__, LINE, MSG), OSPanic(__FILE__, LINE, "Halt"));
|
||||
|
||||
#define JUT_ASSERT_MSG_F(LINE, COND, MSG, ...) \
|
||||
(COND) ? (void)0 : (JUTAssertion::showAssert_f(JUTAssertion::getSDevice(), __FILE__, LINE, MSG, __VA_ARGS__), OSPanic(__FILE__, LINE, "Halt"));
|
||||
|
||||
#define JUT_PANIC(LINE, TEXT) \
|
||||
JUTAssertion::showAssert(JUTAssertion::getSDevice(), __FILE__, LINE, TEXT); \
|
||||
OSPanic(__FILE__, LINE, "Halt");
|
||||
|
||||
#define JUT_WARN(LINE, ...) \
|
||||
JUTAssertion::setWarningMessage_f(JUTAssertion::getSDevice(), __FILE__, LINE, __VA_ARGS__); \
|
||||
#define JUT_WARN_DEVICE(LINE, DEVICE, ...) \
|
||||
JUTAssertion::setWarningMessage_f(DEVICE, __FILE__, LINE, __VA_ARGS__); \
|
||||
|
||||
#define JUT_WARN_1(LINE, ...) \
|
||||
JUTAssertion::setWarningMessage_f(1, __FILE__, LINE, __VA_ARGS__); \
|
||||
#define JUT_WARN(LINE, ...) \
|
||||
JUT_WARN_DEVICE(LINE, JUTAssertion::getSDevice(), __VA_ARGS__)
|
||||
|
||||
#define JUT_LOG(LINE, ...) \
|
||||
JUTAssertion::setLogMessage_f(JUTAssertion::getSDevice(), __FILE__, LINE, __VA_ARGS__)
|
||||
|
|
@ -29,9 +32,10 @@
|
|||
#else
|
||||
#define JUT_ASSERT(...) (void)0;
|
||||
#define JUT_ASSERT_MSG(...) (void)0;
|
||||
#define JUT_ASSERT_MSG_F(...) (void)0;
|
||||
#define JUT_PANIC(...)
|
||||
#define JUT_WARN(...)
|
||||
#define JUT_WARN_1(...)
|
||||
#define JUT_WARN_DEVICE(...)
|
||||
#define JUT_LOG(...)
|
||||
#define JUT_CONFIRM(...)
|
||||
#endif
|
||||
|
|
@ -46,6 +50,7 @@ namespace JUTAssertion {
|
|||
|
||||
u32 getSDevice();
|
||||
void showAssert(u32 device, const char * file, int line, const char * assertion);
|
||||
void showAssert_f(u32 device, const char* file, int line, const char* msg, ...);
|
||||
void setWarningMessage_f(u32 device, char * file, int line, const char * fmt, ...);
|
||||
void setLogMessage_f(u32 device, char* file, int line, const char* fmt, ...);
|
||||
void setConfirmMessage(u32 param_1, char* file, int line, bool param_4, const char* msg);
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ public:
|
|||
bool loadBgmWave(u32);
|
||||
|
||||
bool isSceneExist() { return sceneExist; }
|
||||
int getCurrentSceneNum() const { return sceneNum; }
|
||||
int getCurrentSceneNum() { return sceneNum; }
|
||||
s8 getCurrentRoomNum() { return roomNum; }
|
||||
bool isInGame() const { return inGame; }
|
||||
void setInGame(bool i_inGame) { inGame = i_inGame; }
|
||||
|
|
|
|||
|
|
@ -183,6 +183,11 @@ public:
|
|||
JAISoundHandle* getMainBgmHandle() { return &mMainBgmHandle; }
|
||||
JAISoundHandle* getSubBgmHandle() { return &mSubBgmHandle; }
|
||||
|
||||
#ifdef DEBUG
|
||||
f32 field_0x00_debug;
|
||||
u8 field_0x04_debug;
|
||||
#endif
|
||||
|
||||
/* 0x00 */ JAISoundHandle mMainBgmHandle;
|
||||
/* 0x04 */ JAISoundHandle mSubBgmHandle;
|
||||
/* 0x08 */ JAISoundHandle mFanfareHandle;
|
||||
|
|
|
|||
|
|
@ -53,6 +53,10 @@ private:
|
|||
struct mDoMain {
|
||||
static char COPYDATE_STRING[18];
|
||||
static u32 memMargin;
|
||||
#ifdef DEBUG
|
||||
static u32 archiveHeapSize;
|
||||
static u32 gameHeapSize;
|
||||
#endif
|
||||
static u8 mHeapBriefType;
|
||||
static OSTime sPowerOnTime;
|
||||
static OSTime sHungUpTime;
|
||||
|
|
|
|||
|
|
@ -38,12 +38,13 @@ J3DMaterialTable::~J3DMaterialTable() {}
|
|||
/* 8032F64C-8032F6F8 329F8C 00AC+00 0/0 1/1 5/5 .text
|
||||
* removeMatColorAnimator__16J3DMaterialTableFP11J3DAnmColor */
|
||||
int J3DMaterialTable::removeMatColorAnimator(J3DAnmColor* pAnmColor) {
|
||||
JUT_ASSERT_MSG(208, pAnmColor != NULL, "Error : null pointer.")
|
||||
int ret = false;
|
||||
u16 updateMatNum = pAnmColor->getUpdateMaterialNum();
|
||||
for (u16 i = 0; i < updateMatNum; i++) {
|
||||
if (pAnmColor->isValidUpdateMaterialID(i)) {
|
||||
J3DMaterial* materialNode = getMaterialNodePointer(pAnmColor->getUpdateMaterialID(i));
|
||||
J3DMaterialAnm* materialAnm = materialNode->getMaterialAnm();
|
||||
u16 materialUpdateId = pAnmColor->getUpdateMaterialID(i);
|
||||
J3DMaterialAnm* materialAnm = getMaterialNodePointer(materialUpdateId)->getMaterialAnm();
|
||||
if (materialAnm == NULL) {
|
||||
ret = true;
|
||||
} else {
|
||||
|
|
@ -57,9 +58,10 @@ int J3DMaterialTable::removeMatColorAnimator(J3DAnmColor* pAnmColor) {
|
|||
/* 8032F6F8-8032F7B4 32A038 00BC+00 0/0 5/5 10/10 .text
|
||||
* removeTexNoAnimator__16J3DMaterialTableFP16J3DAnmTexPattern */
|
||||
int J3DMaterialTable::removeTexNoAnimator(J3DAnmTexPattern* anm) {
|
||||
JUT_ASSERT_MSG(242, anm != NULL, "Error : null pointer.")
|
||||
int ret = 0;
|
||||
u16 materialNum = anm->getUpdateMaterialNum();
|
||||
J3DAnmTexPatternFullTable* anm_table = anm->mAnmTable;
|
||||
J3DAnmTexPatternFullTable* anm_table = (J3DAnmTexPatternFullTable*)anm->getAnmTable();
|
||||
|
||||
for (u16 i = 0; i < materialNum; i++) {
|
||||
if (anm->isValidUpdateMaterialID(i)) {
|
||||
|
|
@ -80,13 +82,16 @@ int J3DMaterialTable::removeTexNoAnimator(J3DAnmTexPattern* anm) {
|
|||
/* 8032F7B4-8032F880 32A0F4 00CC+00 0/0 4/4 26/26 .text
|
||||
* removeTexMtxAnimator__16J3DMaterialTableFP19J3DAnmTextureSRTKey */
|
||||
int J3DMaterialTable::removeTexMtxAnimator(J3DAnmTextureSRTKey* pAnm) {
|
||||
JUT_ASSERT_MSG(278, pAnm != NULL, "Error : null pointer.")
|
||||
s32 ret = 0;
|
||||
u16 materialNum = pAnm->getUpdateMaterialNum();
|
||||
u16 postUpdateMaterialNum[1];
|
||||
postUpdateMaterialNum[0] = pAnm->getPostUpdateMaterialNum();
|
||||
|
||||
for (u16 i = 0; i < materialNum; i++) {
|
||||
u16 materialID = pAnm->getUpdateMaterialID(i);
|
||||
if (materialID != 0xFFFF) {
|
||||
J3DMaterial* pMaterial = getMaterialNodePointer(materialID);
|
||||
if (pAnm->isValidUpdateMaterialID(i)) {
|
||||
u16 updateMaterial = pAnm->getUpdateMaterialID(i);
|
||||
J3DMaterial* pMaterial = getMaterialNodePointer(updateMaterial);
|
||||
J3DMaterialAnm* pMatAnm = pMaterial->getMaterialAnm();
|
||||
u8 texMtxID = pAnm->getUpdateTexMtxID(i);
|
||||
if (pMatAnm == NULL) {
|
||||
|
|
@ -210,8 +215,9 @@ int J3DMaterialTable::entryTexNoAnimator(J3DAnmTexPattern* param_1) {
|
|||
|
||||
/* 8032FCC4-8032FE70 32A604 01AC+00 0/0 14/14 6/6 .text
|
||||
* entryTexMtxAnimator__16J3DMaterialTableFP19J3DAnmTextureSRTKey */
|
||||
// NONMATCHING getUpdateTexMtxID u8 issue
|
||||
// NONMATCHING regalloc
|
||||
int J3DMaterialTable::entryTexMtxAnimator(J3DAnmTextureSRTKey* param_1) {
|
||||
JUT_ASSERT_MSG(532, param_1 != NULL, "Error : null pointer.")
|
||||
int rv = 0;
|
||||
u16 materialNum = param_1->getUpdateMaterialNum();
|
||||
rv = createTexMtxForAnimator(param_1);
|
||||
|
|
@ -223,7 +229,10 @@ int J3DMaterialTable::entryTexMtxAnimator(J3DAnmTextureSRTKey* param_1) {
|
|||
}
|
||||
for (u16 i = 0; i < materialNum; i++) {
|
||||
if (param_1->isValidUpdateMaterialID(i)) {
|
||||
J3DMaterial* material = getMaterialNodePointer(param_1->getUpdateMaterialID(i));
|
||||
u16 updateMaterialId = param_1->getUpdateMaterialID(i);
|
||||
// Maybe helps? Makes material r26 instead of r30
|
||||
//J3DMaterial* material = (J3DMaterial*)getMaterialNodePointer((u16)updateMaterialId);
|
||||
J3DMaterial* material = getMaterialNodePointer((u16)updateMaterialId);
|
||||
J3DMaterialAnm* materialAnm = material->getMaterialAnm();
|
||||
u8 texMtxID = param_1->getUpdateTexMtxID(i);
|
||||
if (materialAnm == 0) {
|
||||
|
|
@ -231,7 +240,7 @@ int J3DMaterialTable::entryTexMtxAnimator(J3DAnmTextureSRTKey* param_1) {
|
|||
} else {
|
||||
if (texMtxID != 0xff) {
|
||||
if (material->getTexCoord(texMtxID) != NULL) {
|
||||
material->getTexCoord(texMtxID)->setTexGenMtx(texMtxID * 3 + 30);
|
||||
material->getTexCoord(texMtxID)->setTexGenMtx((u8)texMtxID * 3 + 30);
|
||||
}
|
||||
J3DTexMtxInfo& iVar3 = material->getTexMtx(texMtxID)->getTexMtxInfo();
|
||||
iVar3.mInfo = (iVar3.mInfo & 0x3f) | (param_1->getTexMtxCalcType() << 7);
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@
|
|||
#include "JSystem/JAudio2/JASReport.h"
|
||||
#include "JSystem/JAudio2/JASLfo.h"
|
||||
#include "JSystem/JKernel/JKRSolidHeap.h"
|
||||
#include "JSystem/JUtility/JUTAssert.h"
|
||||
#include "dolphin/ai.h"
|
||||
#include <dolphin/os.h>
|
||||
|
||||
|
|
@ -52,19 +53,32 @@ JASDriver::MixCallback JASDriver::extMixCallback;
|
|||
/* 804512C0-804512C4 0007C0 0004+00 2/2 0/0 0/0 .sbss sOutputRate__9JASDriver */
|
||||
u32 JASDriver::sOutputRate;
|
||||
|
||||
/* 804507AC-804507B0 00022C 0004+00 2/2 0/0 0/0 .sdata sMixMode__9JASDriver */
|
||||
JASMixMode JASDriver::sMixMode = MIX_MODE_EXTRA;
|
||||
|
||||
/* 804507B0-804507B4 000230 0004+00 2/2 0/0 0/0 .sdata sDacRate__9JASDriver */
|
||||
f32 JASDriver::sDacRate = 32028.5f;
|
||||
|
||||
/* 804507B4-804507B8 000234 0004+00 4/3 0/0 0/0 .sdata sSubFrames__9JASDriver */
|
||||
u32 JASDriver::sSubFrames = 0x00000007;
|
||||
|
||||
/* 8029C388-8029C4E4 296CC8 015C+00 0/0 1/1 0/0 .text initAI__9JASDriverFPFv_v */
|
||||
// NONMATCHING missing instructions
|
||||
void JASDriver::initAI(void (*param_0)(void)) {
|
||||
setOutputRate(OUTPUT_RATE_0);
|
||||
u32 size = getDacSize() * 2;
|
||||
u32 dacSize = getDacSize();
|
||||
u32 size = dacSize * 2;
|
||||
for (int i = 0; i < 3; i++) {
|
||||
sDmaDacBuffer[i] = new(JASDram, 0x20) s16[size / 2];
|
||||
sDmaDacBuffer[i] = new(JASDram, 0x20) s16[dacSize];
|
||||
JUT_ASSERT(102, sDmaDacBuffer[i])
|
||||
JASCalc::bzero(sDmaDacBuffer[i], size);
|
||||
DCStoreRange(sDmaDacBuffer[i], size);
|
||||
}
|
||||
sDspDacBuffer = new(JASDram, 0) s16*[data_804507A8];
|
||||
JUT_ASSERT(113, sDspDacBuffer);
|
||||
for (int i = 0; i < data_804507A8; i++) {
|
||||
sDspDacBuffer[i] = new(JASDram, 0x20) s16[getDacSize()];
|
||||
JUT_ASSERT(119, sDspDacBuffer[i]);
|
||||
JASCalc::bzero(sDspDacBuffer[i], size);
|
||||
DCStoreRange(sDspDacBuffer[i], size);
|
||||
}
|
||||
|
|
@ -74,7 +88,13 @@ void JASDriver::initAI(void (*param_0)(void)) {
|
|||
JASChannel::initBankDisposeMsgQueue();
|
||||
AIInit(NULL);
|
||||
AIInitDMA((u32)sDmaDacBuffer[2], size);
|
||||
AISetDSPSampleRate(sOutputRate != 0);
|
||||
BOOL isOutputRate;
|
||||
if (sOutputRate == 0) {
|
||||
isOutputRate = FALSE;
|
||||
} else {
|
||||
isOutputRate = TRUE;
|
||||
}
|
||||
AISetDSPSampleRate((u8)isOutputRate);
|
||||
AIRegisterDMACallback(param_0);
|
||||
}
|
||||
|
||||
|
|
@ -89,15 +109,6 @@ void JASDriver::stopDMA() {
|
|||
AIStopDMA();
|
||||
}
|
||||
|
||||
/* 804507AC-804507B0 00022C 0004+00 2/2 0/0 0/0 .sdata sMixMode__9JASDriver */
|
||||
JASMixMode JASDriver::sMixMode = MIX_MODE_EXTRA;
|
||||
|
||||
/* 804507B0-804507B4 000230 0004+00 2/2 0/0 0/0 .sdata sDacRate__9JASDriver */
|
||||
f32 JASDriver::sDacRate = 32028.5f;
|
||||
|
||||
/* 804507B4-804507B8 000234 0004+00 4/3 0/0 0/0 .sdata sSubFrames__9JASDriver */
|
||||
u32 JASDriver::sSubFrames = 0x00000007;
|
||||
|
||||
/* 8029C524-8029C568 296E64 0044+00 1/1 0/0 0/0 .text setOutputRate__9JASDriverF13JASOutputRate */
|
||||
void JASDriver::setOutputRate(JASOutputRate param_0) {
|
||||
sOutputRate = param_0;
|
||||
|
|
@ -157,6 +168,11 @@ void JASDriver::updateDSP() {
|
|||
static u32 history[10] = {0x000F4240};
|
||||
JASProbe::start(3, "SFR-UPDATE");
|
||||
JASDsp::invalChannelAll();
|
||||
|
||||
#ifdef DEBUG
|
||||
JASDsp::dspMutex = 1;
|
||||
#endif
|
||||
|
||||
JASPortCmd::execAllCommand();
|
||||
DSPSyncCallback();
|
||||
static u32 old_time = 0;
|
||||
|
|
@ -165,40 +181,59 @@ void JASDriver::updateDSP() {
|
|||
old_time = r28;
|
||||
u32 subFrame = getSubFrames();
|
||||
int r26 = JASAudioThread::getDSPSyncCount();
|
||||
JUT_ASSERT(254, subFrame <= 10);
|
||||
history[subFrame - r26] = r27;
|
||||
if (subFrame != r26 && f32(history[0]) / r27 < 1.1f) {
|
||||
#ifdef DEBUG
|
||||
static int killCounter;
|
||||
JASReport("kill DSP channel", killCounter);
|
||||
JASDSPChannel::killActiveChannel();
|
||||
killCounter++;
|
||||
#else
|
||||
JASReport("kill DSP channel");
|
||||
JASDSPChannel::killActiveChannel();
|
||||
#endif
|
||||
}
|
||||
JASChannel::receiveBankDisposeMsg();
|
||||
JASDSPChannel::updateAll();
|
||||
|
||||
#ifdef DEBUG
|
||||
JASDsp::dspMutex = 0;
|
||||
#endif
|
||||
|
||||
subframeCallback();
|
||||
JASLfo::updateFreeRun(32028.5f / getDacRate());
|
||||
f32 freeRun = 32028.5f / getDacRate();
|
||||
JASLfo::updateFreeRun(freeRun);
|
||||
JASProbe::stop(3);
|
||||
sSubFrameCounter++;
|
||||
}
|
||||
|
||||
/* 8029C7E0-8029C900 297120 0120+00 1/1 0/0 0/0 .text readDspBuffer__9JASDriverFPsUl */
|
||||
// NONMATCHING one wrong instruction
|
||||
void JASDriver::readDspBuffer(s16* param_0, u32 param_1) {
|
||||
s32 r29 = sDspDacReadBuffer + 1;
|
||||
if (r29 == data_804507A8) {
|
||||
r29 = 0;
|
||||
s32 nbuf = sDspDacReadBuffer + 1;
|
||||
if (nbuf == data_804507A8) {
|
||||
nbuf = 0;
|
||||
}
|
||||
if (r29 == sDspDacWriteBuffer && data_804507A8 >= 3) {
|
||||
s16 r25 = sDspDacBuffer[sDspDacReadBuffer][param_1 / 2 - 1];
|
||||
s16 r24 = sDspDacBuffer[sDspDacReadBuffer][param_1 - 1];
|
||||
if (nbuf == sDspDacWriteBuffer && data_804507A8 >= 3) {
|
||||
s16 r25 = (s16)sDspDacBuffer[sDspDacReadBuffer][param_1 / 2 - 1];
|
||||
s16 r24 = (s16)sDspDacBuffer[sDspDacReadBuffer][param_1 - 1];
|
||||
for (int i = 0; i < param_1; i++) {
|
||||
sDspDacBuffer[sDspDacReadBuffer][i] = r25;
|
||||
sDspDacBuffer[sDspDacReadBuffer][i] = (s16)r25;
|
||||
}
|
||||
for (int i = param_1; i < param_1 * 2; i++) {
|
||||
sDspDacBuffer[sDspDacReadBuffer][i] = (s16)r24;
|
||||
}
|
||||
#ifdef DEBUG
|
||||
JASReport("readDspBuffer nbuf:%d sWBuf:%d BCount:%d stat:%d", nbuf, sDspDacWriteBuffer,
|
||||
data_804507A8, sDspStatus);
|
||||
#endif
|
||||
} else {
|
||||
sDspDacReadBuffer = r29;
|
||||
DCInvalidateRange(sDspDacBuffer[r29], param_1 * 4);
|
||||
sDspDacReadBuffer = nbuf;
|
||||
DCInvalidateRange(sDspDacBuffer[sDspDacReadBuffer], param_1 * 2 * 2);
|
||||
}
|
||||
JASCalc::imixcopy(sDspDacBuffer[sDspDacReadBuffer] + param_1, sDspDacBuffer[sDspDacReadBuffer], param_0, param_1);
|
||||
s16* dacBuffer = sDspDacBuffer[sDspDacReadBuffer];
|
||||
s16* endDacBuffer = dacBuffer + param_1;
|
||||
JASCalc::imixcopy(endDacBuffer, dacBuffer, param_0, param_1);
|
||||
}
|
||||
|
||||
/* 8029C900-8029C9DC 297240 00DC+00 1/1 1/1 0/0 .text finishDSPFrame__9JASDriverFv */
|
||||
|
|
@ -242,7 +277,7 @@ u32 JASDriver::getSubFrames() {
|
|||
|
||||
/* 8029C9F8-8029CA04 297338 000C+00 2/2 0/0 0/0 .text getDacSize__9JASDriverFv */
|
||||
u32 JASDriver::getDacSize() {
|
||||
return sSubFrames * 0xa0;
|
||||
return sSubFrames * 0x50 * 2;
|
||||
}
|
||||
|
||||
/* 8029CA04-8029CA10 297344 000C+00 3/3 0/0 0/0 .text getFrameSamples__9JASDriverFv */
|
||||
|
|
|
|||
|
|
@ -711,3 +711,7 @@ u16 DSP_CreateMap2(u32 param_0) {
|
|||
|
||||
/* 804507B8-804507C0 000238 0004+04 0/0 5/5 0/0 .sdata one__11JASWaveInfo */
|
||||
u32 JASWaveInfo::one = 1;
|
||||
|
||||
#ifdef DEBUG
|
||||
s32 dspMutex = 1;
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -9,28 +9,8 @@
|
|||
#include "JSystem/JAudio2/JASTrack.h"
|
||||
#include "JSystem/JMath/random.h"
|
||||
#include "JSystem/JSupport/JSupport.h"
|
||||
#include "JSystem/JUtility/JUTAssert.h"
|
||||
|
||||
/* 80293CF4-80293DC4 28E634 00D0+00 3/3 0/0 0/0 .text
|
||||
* conditionCheck__12JASSeqParserFP8JASTrackQ212JASSeqParser15BranchCondition */
|
||||
bool JASSeqParser::conditionCheck(JASTrack* param_0, JASSeqParser::BranchCondition param_1) {
|
||||
u16 reg = readReg(param_0, 3);
|
||||
switch (param_1) {
|
||||
case 0:
|
||||
return 1;
|
||||
case 1:
|
||||
return reg == 0;
|
||||
case 2:
|
||||
return reg != 0;
|
||||
case 3:
|
||||
return reg == 1;
|
||||
case 4:
|
||||
return 0x8000 <= reg;
|
||||
case 5:
|
||||
return 0x8000 > reg;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* 803C5E80-803C6480 022FA0 0600+00 1/2 0/0 0/0 .data sCmdInfo__12JASSeqParser */
|
||||
JASSeqParser::CmdInfo JASSeqParser::sCmdInfo[96] = {
|
||||
|
|
@ -143,6 +123,29 @@ JASSeqParser::CmdInfo JASSeqParser::sExtCmdInfo[255] = {
|
|||
NULL, 0x0000, 0x0000,
|
||||
};
|
||||
|
||||
/* 80293CF4-80293DC4 28E634 00D0+00 3/3 0/0 0/0 .text
|
||||
* conditionCheck__12JASSeqParserFP8JASTrackQ212JASSeqParser15BranchCondition */
|
||||
bool JASSeqParser::conditionCheck(JASTrack* param_0, JASSeqParser::BranchCondition param_1) {
|
||||
u16 reg = readReg(param_0, 3);
|
||||
switch (param_1) {
|
||||
case 0:
|
||||
return 1;
|
||||
case 1:
|
||||
return reg == 0;
|
||||
case 2:
|
||||
return reg != 0;
|
||||
case 3:
|
||||
return reg == 1;
|
||||
case 4:
|
||||
return 0x8000 <= reg;
|
||||
case 5:
|
||||
return 0x8000 > reg;
|
||||
default:
|
||||
JUT_WARN(463, "%s", "Unexpected condition flag");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* 80293DC4-80293FC8 28E704 0204+00 8/7 0/0 0/0 .text writeReg__12JASSeqParserFP8JASTrackUlUl */
|
||||
void JASSeqParser::writeReg(JASTrack* param_0, u32 param_1, u32 param_2) {
|
||||
param_0->writeReg(JASRegisterParam::REG3, param_2);
|
||||
|
|
@ -171,6 +174,7 @@ void JASSeqParser::writeReg(JASTrack* param_0, u32 param_1, u32 param_2) {
|
|||
break;
|
||||
case 0x60:
|
||||
case 0x61:
|
||||
JUT_WARN(502, "%s", "writeReg for Read-Only Register");
|
||||
break;
|
||||
case 0x62:
|
||||
param_0->setTimebase(param_2);
|
||||
|
|
@ -259,57 +263,80 @@ u32 JASSeqParser::readReg(JASTrack* param_0, u32 param_1) const {
|
|||
case 0x4d:
|
||||
case 0x4e:
|
||||
case 0x4f:
|
||||
return param_0->getPort(param_1 - 0x40);
|
||||
result = param_0->getPort(param_1 - 0x40);
|
||||
break;
|
||||
case 0x60:
|
||||
r27 = 1;
|
||||
for (int i = 0; i < 16; i++) {
|
||||
for (u32 i = 0; i < 16; i++, r27 <<= 1) {
|
||||
JASTrack* child = param_0->getChild(i);
|
||||
if (child && child->getStatus() == 1) {
|
||||
result |= r27;
|
||||
}
|
||||
r27 <<= 1;
|
||||
}
|
||||
break;
|
||||
case 0x61:
|
||||
return param_0->getSeqCtrl()->getSeqReader()->getLoopCount();
|
||||
result = param_0->getSeqCtrl()->getSeqReader()->getLoopCount();
|
||||
break;
|
||||
case 0x62:
|
||||
return param_0->getTimebase();
|
||||
result = param_0->getTimebase();
|
||||
break;
|
||||
case 0x63:
|
||||
return param_0->mTranspose;
|
||||
result = param_0->getTranspose();
|
||||
break;
|
||||
case 0x64:
|
||||
return param_0->getBendSense();
|
||||
result = param_0->getBendSense();
|
||||
break;
|
||||
case 0x65:
|
||||
return param_0->getGateRate();
|
||||
result = param_0->getGateRate();
|
||||
break;
|
||||
case 0x66:
|
||||
return param_0->getSkipSample();
|
||||
result = param_0->getSkipSample();
|
||||
break;
|
||||
case 0x67:
|
||||
return param_0->getBankNumber();
|
||||
result = param_0->getBankNumber();
|
||||
break;
|
||||
case 0x68:
|
||||
return param_0->getProgNumber();
|
||||
result = param_0->getProgNumber();
|
||||
break;
|
||||
case 0x69:
|
||||
return param_0->getPanPower() * 32767.0f;
|
||||
result = param_0->getPanPower() * 32767.0f;
|
||||
break;
|
||||
case 0x6a:
|
||||
return param_0->getReleasePrio() | param_0->getNoteOnPrio();
|
||||
result = param_0->getReleasePrio();
|
||||
// @bug this should have been <<=
|
||||
result << 8;
|
||||
result |= param_0->getNoteOnPrio();
|
||||
break;
|
||||
case 0x6b:
|
||||
return param_0->getNoteOnPrio();
|
||||
result = param_0->getNoteOnPrio();
|
||||
break;
|
||||
case 0x6c:
|
||||
return param_0->getReleasePrio();
|
||||
result = param_0->getReleasePrio();
|
||||
break;
|
||||
case 0x6d:
|
||||
return param_0->getDirectRelease();
|
||||
result = param_0->getDirectRelease();
|
||||
break;
|
||||
case 0x6e:
|
||||
return param_0->getVibDepth() * 1524.0f;
|
||||
result = param_0->getVibDepth() * 1524.0f;
|
||||
break;
|
||||
case 0x6f:
|
||||
return param_0->getVibDepth() * 12192.0f;
|
||||
result = param_0->getVibDepth() * 12192.0f;
|
||||
break;
|
||||
case 0x70:
|
||||
return param_0->getTremDepth() * 256.0f;
|
||||
result = param_0->getTremDepth() * 256.0f;
|
||||
break;
|
||||
case 0x71:
|
||||
return param_0->getVibPitch() * 64.0f;
|
||||
result = param_0->getVibPitch() * 64.0f;
|
||||
break;
|
||||
case 0x72:
|
||||
return param_0->getTremPitch() * 64.0f;
|
||||
result = param_0->getTremPitch() * 64.0f;
|
||||
break;
|
||||
case 0x73:
|
||||
return param_0->getVibDelay();
|
||||
result = param_0->getVibDelay();
|
||||
break;
|
||||
case 0x74:
|
||||
return param_0->getTremDelay();
|
||||
result = param_0->getTremDelay();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
@ -323,6 +350,7 @@ s32 JASSeqParser::cmdOpenTrack(JASTrack* param_0, u32* param_1) {
|
|||
u32 r28 = param_1[1];
|
||||
JASTrack* child = param_0->openChild(r29);
|
||||
if (!child) {
|
||||
JUT_WARN(679, "%s", "Cannot open child track");
|
||||
return 0;
|
||||
}
|
||||
child->setSeqData(param_0->getSeqCtrl()->getBase(), r28);
|
||||
|
|
@ -354,6 +382,7 @@ s32 JASSeqParser::cmdCallF(JASTrack* param_0, u32* param_1) {
|
|||
/* 8029429C-802942D4 28EBDC 0038+00 1/0 0/0 0/0 .text cmdRet__12JASSeqParserFP8JASTrackPUl */
|
||||
s32 JASSeqParser::cmdRet(JASTrack* param_0, u32* param_1) {
|
||||
if (!param_0->getSeqCtrl()->ret()) {
|
||||
JUT_WARN(718, "%s", "cannot ret for call-stack is NULL");
|
||||
return 0;
|
||||
}
|
||||
return 0;
|
||||
|
|
@ -363,6 +392,7 @@ s32 JASSeqParser::cmdRet(JASTrack* param_0, u32* param_1) {
|
|||
s32 JASSeqParser::cmdRetF(JASTrack* param_0, u32* param_1) {
|
||||
if (conditionCheck(param_0, BranchCondition(param_1[0]))) {
|
||||
if (!param_0->getSeqCtrl()->ret()) {
|
||||
JUT_WARN(729, "%s", "cannot ret for call-stack is NULL");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
|
@ -385,9 +415,9 @@ s32 JASSeqParser::cmdJmpF(JASTrack* param_0, u32* param_1) {
|
|||
|
||||
/* 80294398-802943CC 28ECD8 0034+00 1/0 0/0 0/0 .text cmdJmpTable__12JASSeqParserFP8JASTrackPUl */
|
||||
s32 JASSeqParser::cmdJmpTable(JASTrack* param_0, u32* param_1) {
|
||||
JASSeqCtrl* seqCtrl = param_0->getSeqCtrl();
|
||||
u32 uVar1 = param_1[0];
|
||||
uVar1 += uVar1 * 2;
|
||||
JASSeqCtrl* seqCtrl = param_0->getSeqCtrl();
|
||||
seqCtrl->jump(seqCtrl->get24(param_1[1] + uVar1));
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -449,11 +479,15 @@ s32 JASSeqParser::cmdWritePort(JASTrack* param_0, u32* param_1) {
|
|||
/* 802945BC-802945F8 28EEFC 003C+00 1/0 0/0 0/0 .text
|
||||
* cmdParentWritePort__12JASSeqParserFP8JASTrackPUl */
|
||||
s32 JASSeqParser::cmdParentWritePort(JASTrack* param_0, u32* param_1) {
|
||||
JASTrack* parent = param_0->getParent();
|
||||
if (parent) {
|
||||
parent->writePort(param_1[0], param_1[1]);
|
||||
} else {
|
||||
|
||||
{
|
||||
u32* p1 = param_1;
|
||||
u32* p2 = param_1 + 1;
|
||||
JASTrack* parent = param_0->getParent();
|
||||
if (parent) {
|
||||
parent->writePort(*p1, *p2);
|
||||
} else {
|
||||
JUT_WARN(835, "%s", "parent == NULL");
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -461,11 +495,14 @@ s32 JASSeqParser::cmdParentWritePort(JASTrack* param_0, u32* param_1) {
|
|||
/* 802945F8-80294644 28EF38 004C+00 1/0 0/0 0/0 .text
|
||||
* cmdChildWritePort__12JASSeqParserFP8JASTrackPUl */
|
||||
s32 JASSeqParser::cmdChildWritePort(JASTrack* param_0, u32* param_1) {
|
||||
JASTrack* child = param_0->getChild(JSUHiNibble(param_1[0]));
|
||||
if (child) {
|
||||
child->writePort(JSULoNibble(param_1[0]), param_1[1]);
|
||||
} else {
|
||||
|
||||
{
|
||||
u8 val = param_1[0];
|
||||
JASTrack* child = param_0->getChild(JSUHiNibble(val));
|
||||
if (child) {
|
||||
child->writePort(JSULoNibble(val), param_1[1]);
|
||||
} else {
|
||||
JUT_WARN(848, "%s", "child == NULL");
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -473,12 +510,14 @@ s32 JASSeqParser::cmdChildWritePort(JASTrack* param_0, u32* param_1) {
|
|||
/* 80294644-802946AC 28EF84 0068+00 1/0 0/0 0/0 .text
|
||||
* cmdParentReadPort__12JASSeqParserFP8JASTrackPUl */
|
||||
s32 JASSeqParser::cmdParentReadPort(JASTrack* param_0, u32* param_1) {
|
||||
u32* p1 = param_1;
|
||||
u32* p2 = param_1 + 1;
|
||||
JASTrack* parent = param_0->getParent();
|
||||
if (parent) {
|
||||
u16 tmp = parent->readPort(param_1[0]);
|
||||
writeReg(param_0, param_1[1], tmp);
|
||||
u16 tmp = parent->readPort(*p1);
|
||||
writeReg(param_0, *p2, tmp);
|
||||
} else {
|
||||
|
||||
JUT_WARN(864, "%s", "parent == NULL");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -486,12 +525,14 @@ s32 JASSeqParser::cmdParentReadPort(JASTrack* param_0, u32* param_1) {
|
|||
/* 802946AC-80294724 28EFEC 0078+00 1/0 0/0 0/0 .text
|
||||
* cmdChildReadPort__12JASSeqParserFP8JASTrackPUl */
|
||||
s32 JASSeqParser::cmdChildReadPort(JASTrack* param_0, u32* param_1) {
|
||||
JASTrack* child = param_0->getChild(JSUHiNibble(param_1[0]));
|
||||
u8 val = param_1[0];
|
||||
u32* p2 = param_1 + 1;
|
||||
JASTrack* child = param_0->getChild(JSUHiNibble(val));
|
||||
if (child) {
|
||||
u16 tmp = child->readPort(JSULoNibble(param_1[0]));
|
||||
writeReg(param_0, param_1[1], tmp);
|
||||
u16 tmp = child->readPort(JSULoNibble(val));
|
||||
writeReg(param_0, *p2, tmp);
|
||||
} else {
|
||||
|
||||
JUT_WARN(880, "%s", "child == NULL");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -515,13 +556,15 @@ s32 JASSeqParser::cmdCheckPortExport(JASTrack* param_0, u32* param_1) {
|
|||
/* 802947BC-802947F4 28F0FC 0038+00 1/0 0/0 0/0 .text cmdWait__12JASSeqParserFP8JASTrackPUl */
|
||||
s32 JASSeqParser::cmdWait(JASTrack* param_0, u32* param_1) {
|
||||
JASSeqCtrl* seqCtrl = param_0->getSeqCtrl();
|
||||
seqCtrl->wait(seqCtrl->readMidiValue());
|
||||
int midiValue = seqCtrl->readMidiValue();
|
||||
seqCtrl->wait(midiValue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* 802947F4-80294804 28F134 0010+00 1/0 0/0 0/0 .text cmdWaitByte__12JASSeqParserFP8JASTrackPUl */
|
||||
s32 JASSeqParser::cmdWaitByte(JASTrack* param_0, u32* param_1) {
|
||||
param_0->getSeqCtrl()->wait(param_1[0]);
|
||||
u32 val = param_1[0];
|
||||
param_0->getSeqCtrl()->wait(val);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -532,7 +575,7 @@ s32 JASSeqParser::cmdSetLastNote(JASTrack* param_0, u32* param_1) {
|
|||
if (r31 < 256) {
|
||||
param_0->setLatestKey(r31);
|
||||
} else {
|
||||
|
||||
JUT_WARN(928, "%s", "Too large latest key");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -639,7 +682,8 @@ s32 JASSeqParser::cmdNop(JASTrack* param_0, u32* param_1) {
|
|||
|
||||
/* 80294AE4-80294B1C 28F424 0038+00 1/0 0/0 0/0 .text cmdFIRSet__12JASSeqParserFP8JASTrackPUl */
|
||||
s32 JASSeqParser::cmdFIRSet(JASTrack* param_0, u32* param_1) {
|
||||
param_0->setFIR((s16*)param_0->getSeqCtrl()->getAddr(param_1[0]));
|
||||
s16* addr = (s16*)param_0->getSeqCtrl()->getAddr(param_1[0]);
|
||||
param_0->setFIR(addr);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -660,7 +704,7 @@ s32 JASSeqParser::cmdIIRCutOff(JASTrack* param_0, u32* param_1) {
|
|||
if (r31 < 128) {
|
||||
param_0->setIIR(JASCalc::CUTOFF_TO_IIR_TABLE[r31]);
|
||||
} else {
|
||||
|
||||
JUT_WARN(1077, "%s", "Too large cutoff");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -687,14 +731,16 @@ s32 JASSeqParser::cmdPrg(JASTrack* param_0, u32* param_1) {
|
|||
|
||||
/* 80294BF8-80294C54 28F538 005C+00 1/0 0/0 0/0 .text cmdParamI__12JASSeqParserFP8JASTrackPUl */
|
||||
s32 JASSeqParser::cmdParamI(JASTrack* param_0, u32* param_1) {
|
||||
param_0->setParam(param_1[0], s16(param_1[1]) / 32767.0f, 0);
|
||||
s16 val = param_1[1];
|
||||
param_0->setParam(param_1[0], val / 32767.0f, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/* 80294C54-80294CB0 28F594 005C+00 1/0 0/0 0/0 .text cmdParamII__12JASSeqParserFP8JASTrackPUl */
|
||||
s32 JASSeqParser::cmdParamII(JASTrack* param_0, u32* param_1) {
|
||||
param_0->setParam(param_1[0], s16(param_1[1]) / 32767.0f, param_1[2]);
|
||||
s16 val = param_1[1];
|
||||
param_0->setParam(param_1[0], val / 32767.0f, param_1[2]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -704,7 +750,7 @@ s32 JASSeqParser::cmdParamE(JASTrack* param_0, u32* param_1) {
|
|||
s32* r31 = (s32*)param_1 + 1;
|
||||
s16 r30 = *r31 << 8;
|
||||
if ((*r31 & 0x80) == 0) {
|
||||
r30 = r30 | s16(*r31 << 1);
|
||||
r30 |= s16(*r31 << 1);
|
||||
}
|
||||
param_0->setParam(param_1[0], r30 / 32767.0f, 0);
|
||||
return 0;
|
||||
|
|
@ -716,7 +762,7 @@ s32 JASSeqParser::cmdParamEI(JASTrack* param_0, u32* param_1) {
|
|||
s32* r31 = (s32*)param_1 + 1;
|
||||
s16 r30 = *r31 << 8;
|
||||
if ((*r31 & 0x80) == 0) {
|
||||
r30 = r30 | s16(*r31 << 1);
|
||||
r30 |= s16(*r31 << 1);
|
||||
}
|
||||
param_0->setParam(param_1[0], r30 / 32767.0f, param_1[2]);
|
||||
return 0;
|
||||
|
|
@ -724,10 +770,11 @@ s32 JASSeqParser::cmdParamEI(JASTrack* param_0, u32* param_1) {
|
|||
|
||||
/* 80294DA8-80294F10 28F6E8 0168+00 3/0 0/0 0/0 .text cmdReg__12JASSeqParserFP8JASTrackPUl */
|
||||
s32 JASSeqParser::cmdReg(JASTrack* param_0, u32* param_1) {
|
||||
u32 val = param_1[0];
|
||||
u32 r29 = param_1[1];
|
||||
u32 r30 = param_1[2];
|
||||
u32 tmp;
|
||||
switch (param_1[0]) {
|
||||
switch (val) {
|
||||
case 0:
|
||||
break;
|
||||
case 1:
|
||||
|
|
@ -754,9 +801,8 @@ s32 JASSeqParser::cmdReg(JASTrack* param_0, u32* param_1) {
|
|||
r30 ^= readReg(param_0, r29);
|
||||
break;
|
||||
case 8:
|
||||
static JMath::TRandom_fast_ oRandom(0);
|
||||
tmp = oRandom.get_bit32() >> 9;
|
||||
r30 = tmp % r30;
|
||||
static JMath::TRandom_<JMath::TRandom_fast_> oRandom(0);
|
||||
r30 = (oRandom.get_bit32() >> 9) % r30;
|
||||
break;
|
||||
case 9:
|
||||
r30 = readReg(param_0, r29) << r30;
|
||||
|
|
@ -765,6 +811,7 @@ s32 JASSeqParser::cmdReg(JASTrack* param_0, u32* param_1) {
|
|||
r30 = readReg(param_0, r29) >> r30;
|
||||
break;
|
||||
default:
|
||||
JUT_WARN(1191, "%s", "cmdReg Not Supported RegCmdType");
|
||||
return 0;
|
||||
}
|
||||
writeReg(param_0, r29, r30);
|
||||
|
|
@ -773,19 +820,23 @@ s32 JASSeqParser::cmdReg(JASTrack* param_0, u32* param_1) {
|
|||
|
||||
/* 80294F10-80294F40 28F850 0030+00 1/0 0/0 0/0 .text cmdRegLoad__12JASSeqParserFP8JASTrackPUl */
|
||||
s32 JASSeqParser::cmdRegLoad(JASTrack* param_0, u32* param_1) {
|
||||
writeReg(param_0, param_1[0], param_1[1]);
|
||||
u32 val1 = param_1[0];
|
||||
u32 val2 = param_1[1];
|
||||
writeReg(param_0, val1, val2);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* 80294F40-80294FB4 28F880 0074+00 1/0 0/0 0/0 .text cmdRegUni__12JASSeqParserFP8JASTrackPUl */
|
||||
s32 JASSeqParser::cmdRegUni(JASTrack* param_0, u32* param_1) {
|
||||
u32 val1 = param_1[0];
|
||||
u32 r31 = param_1[1];
|
||||
s32 r30 = 0;
|
||||
switch (param_1[0]) {
|
||||
switch (val1) {
|
||||
case 11:
|
||||
r30 = -readReg(param_0, r31);
|
||||
break;
|
||||
default:
|
||||
JUT_WARN(1217, "%s", "cmdRegUni Not Supported RegCmdType");
|
||||
return 0;
|
||||
}
|
||||
writeReg(param_0, r31, r30);
|
||||
|
|
@ -794,31 +845,34 @@ s32 JASSeqParser::cmdRegUni(JASTrack* param_0, u32* param_1) {
|
|||
|
||||
/* 80294FB4-80295088 28F8F4 00D4+00 1/0 0/0 0/0 .text cmdRegTblLoad__12JASSeqParserFP8JASTrackPUl
|
||||
*/
|
||||
// NONMATCHING case 12
|
||||
s32 JASSeqParser::cmdRegTblLoad(JASTrack* param_0, u32* param_1) {
|
||||
JASSeqCtrl* seqCtrl = param_0->getSeqCtrl();
|
||||
u32 p0 = param_1[0];
|
||||
u32 p1 = param_1[1];
|
||||
u32 p2 = param_1[2];
|
||||
u32 p3 = param_1[3];
|
||||
u32 r27;
|
||||
switch (param_1[0]) {
|
||||
switch (p0) {
|
||||
case 12:
|
||||
r27 = seqCtrl->getByte(p2 + p3);
|
||||
break;
|
||||
case 13:
|
||||
r27 = seqCtrl->get16(p2 + p3 * 2);
|
||||
p3 *= 2;
|
||||
r27 = seqCtrl->get16(p2 + p3);
|
||||
break;
|
||||
case 14:
|
||||
p3 += p3 * 2;
|
||||
r27 = seqCtrl->get24(p2 + p3);
|
||||
break;
|
||||
case 15:
|
||||
r27 = seqCtrl->get32(p2 + p3 * 4);
|
||||
p3 *= 4;
|
||||
r27 = seqCtrl->get32(p2 + p3);
|
||||
break;
|
||||
case 16:
|
||||
r27 = seqCtrl->get32(p2 + p3);
|
||||
break;
|
||||
default:
|
||||
JUT_WARN(1255, "%s", "cmdRegTblLoad Not Supported RegCmdType");
|
||||
return 0;
|
||||
}
|
||||
writeReg(param_0, p1, r27);
|
||||
|
|
@ -843,7 +897,6 @@ s32 JASSeqParser::cmdDump(JASTrack* param_0, u32* param_1) {
|
|||
}
|
||||
|
||||
/* 8029526C-80295498 28FBAC 022C+00 1/0 0/0 0/0 .text cmdPrintf__12JASSeqParserFP8JASTrackPUl */
|
||||
// NONMATCHING problem with second for loop
|
||||
s32 JASSeqParser::cmdPrintf(JASTrack* param_0, u32* param_1) {
|
||||
u8 stack_c[4];
|
||||
u32 stack_10[4];
|
||||
|
|
@ -851,7 +904,8 @@ s32 JASSeqParser::cmdPrintf(JASTrack* param_0, u32* param_1) {
|
|||
|
||||
JASSeqCtrl* seqCtrl = param_0->getSeqCtrl();
|
||||
u32 r30 = 0;
|
||||
for (u32 i = 0; i < 128; i++) {
|
||||
u32 i = 0;
|
||||
for (; i < 128; i++) {
|
||||
buffer[i] = seqCtrl->readByte();
|
||||
if (buffer[i] == 0) {
|
||||
break;
|
||||
|
|
@ -895,8 +949,8 @@ s32 JASSeqParser::cmdPrintf(JASTrack* param_0, u32* param_1) {
|
|||
}
|
||||
}
|
||||
|
||||
for (u32 i = 0; i < r30; i++) {
|
||||
stack_10[i] = seqCtrl->readByte();
|
||||
for (i = 0; i < r30; i++) {
|
||||
stack_10[i] = (u8)seqCtrl->readByte();
|
||||
switch (stack_c[i]) {
|
||||
case 2:
|
||||
stack_10[i] = (u32)seqCtrl->getAddr(stack_10[i]);
|
||||
|
|
@ -965,10 +1019,11 @@ s32 JASSeqParser::execCommand(JASTrack* param_0, s32 (JASSeqParser::*param_1)(JA
|
|||
|
||||
/* 802955C8-80295600 28FF08 0038+00 1/1 0/0 0/0 .text parseNoteOff__12JASSeqParserFP8JASTrackUc */
|
||||
s32 JASSeqParser::parseNoteOff(JASTrack* param_0, u8 param_1) {
|
||||
if (param_1 & 7) {
|
||||
execNoteOff(param_0, param_1 & 7);
|
||||
u8 note_id = param_1 & 7;
|
||||
if (note_id) {
|
||||
execNoteOff(param_0, note_id);
|
||||
} else {
|
||||
|
||||
JUT_WARN(1433, "%s", "noteoff for note_id == 0");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -977,46 +1032,49 @@ s32 JASSeqParser::parseNoteOff(JASTrack* param_0, u8 param_1) {
|
|||
s32 JASSeqParser::parseNoteOn(JASTrack* param_0, u8 param_1) {
|
||||
JASSeqCtrl* seqCtrl = param_0->getSeqCtrl();
|
||||
u32 r28 = seqCtrl->readByte();
|
||||
u32 r30 = r28;
|
||||
r30 &= 7;
|
||||
u32 r27 = seqCtrl->readByte();
|
||||
if ((r28 & 7) == 0) {
|
||||
execNoteOnGate(param_0, param_1, r27, seqCtrl->readMidiValue(), r28);
|
||||
if ((u8)r30 == 0) {
|
||||
u32 midiVal = seqCtrl->readMidiValue();
|
||||
execNoteOnGate(param_0, (u8)param_1, (u8)r27, midiVal, (u8)r28);
|
||||
} else {
|
||||
execNoteOnMidi(param_0, r28 & 7, param_1, r27);
|
||||
execNoteOnMidi(param_0, (u8)r30, (u8)param_1, (u8)r27);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* 802956B0-80295864 28FFF0 01B4+00 2/2 0/0 0/0 .text parseCommand__12JASSeqParserFP8JASTrackUcUs
|
||||
*/
|
||||
// NONMATCHING u16 bit or
|
||||
s32 JASSeqParser::parseCommand(JASTrack* param_0, u8 cmd, u16 param_2) {
|
||||
JASSeqCtrl* seqCtrl = param_0->getSeqCtrl();
|
||||
CmdInfo* cmdInfo = NULL;
|
||||
if (cmd != 0xb0) {
|
||||
JUT_ASSERT(1477, cmd >= 0xa0);
|
||||
cmdInfo = &sCmdInfo[cmd - 0xa0];
|
||||
} else {
|
||||
cmdInfo = &sExtCmdInfo[seqCtrl->readByte() & 0xff];
|
||||
}
|
||||
u16 r28 = cmdInfo->field_0xe | param_2;
|
||||
u16 r28 = (u16)cmdInfo->field_0xe;
|
||||
r28 |= param_2;
|
||||
u32 stack_28[8];
|
||||
for (int i = 0; i < cmdInfo->field_0xc; i++) {
|
||||
for (int i = 0; i < cmdInfo->field_0xc; i++, r28 >>= 2) {
|
||||
int r27 = 0;
|
||||
switch (r28 & 3) {
|
||||
case 0:
|
||||
r27 = seqCtrl->readByte();
|
||||
r27 = (u8)seqCtrl->readByte();
|
||||
break;
|
||||
case 1:
|
||||
r27 = seqCtrl->read16();
|
||||
r27 = (u16)seqCtrl->read16();
|
||||
break;
|
||||
case 2:
|
||||
r27 = seqCtrl->read24();
|
||||
break;
|
||||
case 3:
|
||||
r27 = readReg(param_0, seqCtrl->readByte());
|
||||
r27 = readReg(param_0, (u8)seqCtrl->readByte());
|
||||
break;
|
||||
}
|
||||
stack_28[i] = r27;
|
||||
r28 >>= 2;
|
||||
}
|
||||
s32 (JASSeqParser::*ptr)(JASTrack*, u32*) = cmdInfo->field_0x0;
|
||||
if (!ptr) {
|
||||
|
|
|
|||
|
|
@ -24,8 +24,7 @@ JASTaskThread::~JASTaskThread() {
|
|||
if (!received) {
|
||||
return;
|
||||
}
|
||||
ThreadMemPool* heap = JASKernel::getCommandHeap();
|
||||
heap->free(msg);
|
||||
JASKernel::getCommandHeap()->free(msg);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -34,8 +33,7 @@ JASTaskThread::~JASTaskThread() {
|
|||
void* JASTaskThread::allocCallStack(void (*param_0)(void*), void const* param_1, u32 param_2) {
|
||||
ThreadMemPool* heap;
|
||||
u32 size = param_2 + 8;
|
||||
heap = JASKernel::getCommandHeap();
|
||||
JASThreadCallStack *callStack = (JASThreadCallStack*) heap->alloc(size);
|
||||
JASThreadCallStack *callStack = (JASThreadCallStack*) JASKernel::getCommandHeap()->alloc(size);
|
||||
if (callStack == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
|
@ -47,10 +45,8 @@ void* JASTaskThread::allocCallStack(void (*param_0)(void*), void const* param_1,
|
|||
|
||||
/* 8028F9EC-8028FB5C 28A32C 0170+00 1/1 0/0 0/0 .text allocCallStack__13JASTaskThreadFPFPv_vPv */
|
||||
void* JASTaskThread::allocCallStack(void (*runFunc)(void*), void* param_1) {
|
||||
ThreadMemPool* heap;
|
||||
JASThreadCallStack *callStack;
|
||||
heap = JASKernel::getCommandHeap();
|
||||
callStack = (JASThreadCallStack*)heap->alloc(0xc);
|
||||
callStack = (JASThreadCallStack*)JASKernel::getCommandHeap()->alloc(0xc);
|
||||
if (callStack == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
|
@ -70,8 +66,7 @@ int JASTaskThread::sendCmdMsg(void (*param_0)(void*), void const* param_1, u32 p
|
|||
}
|
||||
int iVar2 = sendMessage(pvVar1);
|
||||
if (iVar2 == 0) {
|
||||
ThreadMemPool* heap = JASKernel::getCommandHeap();
|
||||
heap->free(pvVar1);
|
||||
JASKernel::getCommandHeap()->free(pvVar1);
|
||||
}
|
||||
return iVar2;
|
||||
}
|
||||
|
|
@ -86,8 +81,7 @@ int JASTaskThread::sendCmdMsg(void (*param_0)(void*), void* param_1) {
|
|||
}
|
||||
int iVar2 = sendMessage(pvVar1);
|
||||
if (iVar2 == 0) {
|
||||
ThreadMemPool* heap = JASKernel::getCommandHeap();
|
||||
heap->free(pvVar1);
|
||||
JASKernel::getCommandHeap()->free(pvVar1);
|
||||
}
|
||||
return iVar2;
|
||||
}
|
||||
|
|
@ -95,9 +89,10 @@ int JASTaskThread::sendCmdMsg(void (*param_0)(void*), void* param_1) {
|
|||
/* 8028FD4C-8028FE88 28A68C 013C+00 1/0 0/0 0/0 .text run__13JASTaskThreadFv */
|
||||
// NONMATCHING Regalloc
|
||||
void* JASTaskThread::run() {
|
||||
JASThreadCallStack* ppcVar1;
|
||||
OSInitFastCast();
|
||||
do {
|
||||
JASThreadCallStack* ppcVar1 = (JASThreadCallStack*)waitMessageBlock();
|
||||
ppcVar1 = (JASThreadCallStack*)waitMessageBlock();
|
||||
if (field_0x84) {
|
||||
OSSleepThread(&mpThreadQueue);
|
||||
}
|
||||
|
|
@ -106,8 +101,7 @@ void* JASTaskThread::run() {
|
|||
} else {
|
||||
ppcVar1->mRunFunc(ppcVar1->field_0x8.pBuffer);
|
||||
}
|
||||
ThreadMemPool* heap = JASKernel::getCommandHeap();
|
||||
heap->free(ppcVar1);
|
||||
JASKernel::getCommandHeap()->free(ppcVar1);
|
||||
} while (true);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -28,14 +28,6 @@ JKRExpHeap* JFWSystem::rootHeap;
|
|||
/* 804511A4-804511A8 0006A4 0004+00 2/2 1/1 0/0 .sbss systemHeap__9JFWSystem */
|
||||
JKRExpHeap* JFWSystem::systemHeap;
|
||||
|
||||
/* 80271CD0-80271D18 26C610 0048+00 1/1 1/1 0/0 .text firstInit__9JFWSystemFv */
|
||||
void JFWSystem::firstInit() {
|
||||
JUT_ASSERT(80, rootHeap == 0);
|
||||
OSInit();
|
||||
DVDInit();
|
||||
rootHeap = JKRExpHeap::createRoot(CSetUpParam::maxStdHeaps, false);
|
||||
systemHeap = JKRExpHeap::create(CSetUpParam::sysHeapSize, rootHeap, false);
|
||||
}
|
||||
|
||||
/* 80450778-8045077C 0001F8 0004+00 1/1 1/1 0/0 .sdata fifoBufSize__Q29JFWSystem11CSetUpParam */
|
||||
u32 JFWSystem::CSetUpParam::fifoBufSize = 0x40000;
|
||||
|
|
@ -70,6 +62,15 @@ GXRenderModeObj* JFWSystem::CSetUpParam::renderMode = &GXNtsc480IntDf;
|
|||
* exConsoleBufferSize__Q29JFWSystem11CSetUpParam */
|
||||
u32 JFWSystem::CSetUpParam::exConsoleBufferSize = 0x24FC;
|
||||
|
||||
/* 80271CD0-80271D18 26C610 0048+00 1/1 1/1 0/0 .text firstInit__9JFWSystemFv */
|
||||
void JFWSystem::firstInit() {
|
||||
JUT_ASSERT(80, rootHeap == 0);
|
||||
OSInit();
|
||||
DVDInit();
|
||||
rootHeap = JKRExpHeap::createRoot(CSetUpParam::maxStdHeaps, false);
|
||||
systemHeap = JKRExpHeap::create(CSetUpParam::sysHeapSize, rootHeap, false);
|
||||
}
|
||||
|
||||
/* 804511A8-804511AC 0006A8 0004+00 1/1 0/0 0/0 .sbss mainThread__9JFWSystem */
|
||||
JKRThread* JFWSystem::mainThread;
|
||||
|
||||
|
|
|
|||
|
|
@ -9,6 +9,12 @@
|
|||
|
||||
bool data_804508B0 = 1;
|
||||
|
||||
#ifdef DEBUG
|
||||
u8 data_804508B1;
|
||||
u8 data_804508B2;
|
||||
u8 data_804508B3;
|
||||
#endif
|
||||
|
||||
/* 80451370-80451374 000870 0004+00 3/3 44/44 0/0 .sbss sSystemHeap__7JKRHeap */
|
||||
JKRHeap* JKRHeap::sSystemHeap;
|
||||
|
||||
|
|
|
|||
|
|
@ -9,41 +9,42 @@
|
|||
|
||||
/* 8027B144-8027B220 275A84 00DC+00 1/1 0/0 0/0 .text JPAVolumePoint__FP18JPAEmitterWorkData */
|
||||
void JPAVolumePoint(JPAEmitterWorkData* work) {
|
||||
work->mVolumePos.zero();
|
||||
work->mVelOmni.set(work->mpEmtr->get_r_zh(), work->mpEmtr->get_r_zh(),
|
||||
work->mpEmtr->get_r_zh());
|
||||
work->mVelAxis.set(work->mVelOmni.x, 0.0f, work->mVelOmni.z);
|
||||
work->mVolumeCalcData.mVolumePos.zero();
|
||||
work->mVolumeCalcData.mVelOmni.set(work->mpEmtr->get_r_zh(), work->mpEmtr->get_r_zh(),
|
||||
work->mpEmtr->get_r_zh());
|
||||
work->mVolumeCalcData.mVelAxis.set(work->mVolumeCalcData.mVelOmni.x, 0.0f,
|
||||
work->mVolumeCalcData.mVelOmni.z);
|
||||
}
|
||||
|
||||
/* 8027B220-8027B33C 275B60 011C+00 1/1 0/0 0/0 .text JPAVolumeLine */
|
||||
void JPAVolumeLine(JPAEmitterWorkData* work) {
|
||||
if (work->mpEmtr->checkFlag(JPADynFlag_FixedInterval)) {
|
||||
work->mVolumePos.set(0.0f, 0.0f,
|
||||
work->mVolumeSize *
|
||||
((work->mVolumeEmitIdx / (work->mEmitCount - 1.0f) - 0.5f)));
|
||||
work->mVolumeCalcData.mVolumePos.set(
|
||||
0.0f, 0.0f,
|
||||
work->mVolumeSize * ((work->mVolumeEmitIdx / (work->mEmitCount - 1.0f) - 0.5f)));
|
||||
work->mVolumeEmitIdx++;
|
||||
} else {
|
||||
work->mVolumePos.set(0.0f, 0.0f, work->mVolumeSize * work->mpEmtr->get_r_zh());
|
||||
work->mVolumeCalcData.mVolumePos.set(0.0f, 0.0f,
|
||||
work->mVolumeSize * work->mpEmtr->get_r_zh());
|
||||
}
|
||||
|
||||
work->mVelOmni.set(0.0f, 0.0f, work->mVolumePos.z * work->mGlobalScl.z);
|
||||
work->mVelAxis.set(0.0f, 0.0f, work->mVolumePos.z);
|
||||
work->mVolumeCalcData.mVelOmni.set(0.0f, 0.0f,
|
||||
work->mVolumeCalcData.mVolumePos.z * work->mGlobalScl.z);
|
||||
work->mVolumeCalcData.mVelAxis.set(0.0f, 0.0f, work->mVolumeCalcData.mVolumePos.z);
|
||||
}
|
||||
|
||||
/* 8027B33C-8027B4E8 275C7C 01AC+00 1/1 0/0 0/0 .text JPAVolumeCircle */
|
||||
// NONMATCHING regalloc. Could be issue with mul asm implementations
|
||||
void JPAVolumeCircle(JPAEmitterWorkData* work) {
|
||||
s16 thetai;
|
||||
f32 theta;
|
||||
s16 theta;
|
||||
f32 distance;
|
||||
f32 sizeXZ;
|
||||
|
||||
if (work->mpEmtr->checkFlag(JPADynFlag_FixedInterval)) {
|
||||
theta = (s16)((work->mVolumeEmitIdx << 16) / work->mEmitCount);
|
||||
thetai = theta * work->mVolumeSweep;
|
||||
theta = theta * work->mVolumeSweep;
|
||||
work->mVolumeEmitIdx++;
|
||||
} else {
|
||||
theta = work->mVolumeSweep * work->mpEmtr->get_r_ss();
|
||||
thetai = theta;
|
||||
}
|
||||
|
||||
distance = work->mpEmtr->get_r_f();
|
||||
|
|
@ -51,19 +52,21 @@ void JPAVolumeCircle(JPAEmitterWorkData* work) {
|
|||
distance = 1.0f - (distance * distance);
|
||||
}
|
||||
|
||||
sizeXZ = work->mVolumeSize * (work->mVolumeMinRad + distance * (1.0f - work->mVolumeMinRad));
|
||||
work->mVolumePos.set(sizeXZ * JMASSin(thetai), 0.0f, sizeXZ * JMASCos(thetai));
|
||||
work->mVelOmni.mul(work->mVolumePos, work->mGlobalScl);
|
||||
work->mVelAxis.set(work->mVolumePos.x, 0.0f, work->mVolumePos.z);
|
||||
distance = work->mVolumeSize * (work->mVolumeMinRad + distance * (1.0f - work->mVolumeMinRad));
|
||||
work->mVolumeCalcData.mVolumePos.set(distance * JMASSin(theta), 0.0f,
|
||||
distance * JMASCos(theta));
|
||||
work->mVolumeCalcData.mVelOmni.mul(work->mVolumeCalcData.mVolumePos, work->mGlobalScl);
|
||||
work->mVolumeCalcData.mVelAxis.set(work->mVolumeCalcData.mVolumePos.x, 0.0f,
|
||||
work->mVolumeCalcData.mVolumePos.z);
|
||||
}
|
||||
|
||||
/* 8027B4E8-8027B5F0 275E28 0108+00 1/1 0/0 0/0 .text JPAVolumeCube */
|
||||
void JPAVolumeCube(JPAEmitterWorkData* work) {
|
||||
work->mVolumePos.set(work->mpEmtr->get_r_zh() * work->mVolumeSize,
|
||||
work->mVolumeCalcData.mVolumePos.set(work->mpEmtr->get_r_zh() * work->mVolumeSize,
|
||||
work->mpEmtr->get_r_zh() * work->mVolumeSize,
|
||||
work->mpEmtr->get_r_zh() * work->mVolumeSize);
|
||||
work->mVelOmni.mul(work->mVolumePos, work->mGlobalScl);
|
||||
work->mVelAxis.set(work->mVolumePos.x, 0.0f, work->mVolumePos.z);
|
||||
work->mVolumeCalcData.mVelOmni.mul(work->mVolumeCalcData.mVolumePos, work->mGlobalScl);
|
||||
work->mVolumeCalcData.mVelAxis.set(work->mVolumeCalcData.mVolumePos.x, 0.0f, work->mVolumeCalcData.mVolumePos.z);
|
||||
}
|
||||
|
||||
/* 8027B5F0-8027B87C 275F30 028C+00 1/1 0/0 0/0 .text JPAVolumeSphere__FP18JPAEmitterWorkData */
|
||||
|
|
@ -94,10 +97,11 @@ static void JPAVolumeSphere(JPAEmitterWorkData* work) {
|
|||
rnd = 1.0f - rnd * rnd * rnd;
|
||||
}
|
||||
f32 rad = work->mVolumeSize * (work->mVolumeMinRad + rnd * (1.0f - work->mVolumeMinRad));
|
||||
work->mVolumePos.set(rad * JMASCos(phi) * JMASSin(theta), -rad * JMASSin(phi),
|
||||
rad * JMASCos(phi) * JMASCos(theta));
|
||||
work->mVelOmni.mul(work->mVolumePos, work->mGlobalScl);
|
||||
work->mVelAxis.set(work->mVolumePos.x, 0.0f, work->mVolumePos.z);
|
||||
work->mVolumeCalcData.mVolumePos.set(rad * JMASCos(phi) * JMASSin(theta), -rad * JMASSin(phi),
|
||||
rad * JMASCos(phi) * JMASCos(theta));
|
||||
work->mVolumeCalcData.mVelOmni.mul(work->mVolumeCalcData.mVolumePos, work->mGlobalScl);
|
||||
work->mVolumeCalcData.mVelAxis.set(work->mVolumeCalcData.mVolumePos.x, 0.0f,
|
||||
work->mVolumeCalcData.mVolumePos.z);
|
||||
}
|
||||
|
||||
/* 8027B87C-8027B9F8 2761BC 017C+00 1/1 0/0 0/0 .text JPAVolumeCylinder__FP18JPAEmitterWorkData */
|
||||
|
|
@ -108,10 +112,11 @@ static void JPAVolumeCylinder(JPAEmitterWorkData* work) {
|
|||
rnd = 1.0f - rnd * rnd;
|
||||
}
|
||||
f32 rad = work->mVolumeSize * (work->mVolumeMinRad + rnd * (1.0f - work->mVolumeMinRad));
|
||||
work->mVolumePos.set(rad * JMASSin(theta), work->mVolumeSize * work->mpEmtr->get_r_zp(),
|
||||
rad * JMASCos(theta));
|
||||
work->mVelOmni.mul(work->mVolumePos, work->mGlobalScl);
|
||||
work->mVelAxis.set(work->mVolumePos.x, 0.0f, work->mVolumePos.z);
|
||||
work->mVolumeCalcData.mVolumePos.set(
|
||||
rad * JMASSin(theta), work->mVolumeSize * work->mpEmtr->get_r_zp(), rad * JMASCos(theta));
|
||||
work->mVolumeCalcData.mVelOmni.mul(work->mVolumeCalcData.mVolumePos, work->mGlobalScl);
|
||||
work->mVolumeCalcData.mVelAxis.set(work->mVolumeCalcData.mVolumePos.x, 0.0f,
|
||||
work->mVolumeCalcData.mVolumePos.z);
|
||||
}
|
||||
|
||||
/* 8027B9F8-8027BB18 276338 0120+00 1/1 0/0 0/0 .text JPAVolumeTorus__FP18JPAEmitterWorkData */
|
||||
|
|
@ -119,11 +124,13 @@ static void JPAVolumeTorus(JPAEmitterWorkData* work) {
|
|||
s16 theta = work->mVolumeSweep * work->mpEmtr->get_r_ss();
|
||||
s16 phi = work->mpEmtr->get_r_ss();
|
||||
f32 rad = work->mVolumeSize * work->mVolumeMinRad;
|
||||
work->mVelAxis.set(rad * JMASSin(theta) * JMASCos(phi), rad * JMASSin(phi),
|
||||
rad * JMASCos(theta) * JMASCos(phi));
|
||||
work->mVolumePos.set(work->mVelAxis.x + work->mVolumeSize * JMASSin(theta), work->mVelAxis.y,
|
||||
work->mVelAxis.z + work->mVolumeSize * JMASCos(theta));
|
||||
work->mVelOmni.mul(work->mVolumePos, work->mGlobalScl);
|
||||
work->mVolumeCalcData.mVelAxis.set(rad * JMASSin(theta) * JMASCos(phi), rad * JMASSin(phi),
|
||||
rad * JMASCos(theta) * JMASCos(phi));
|
||||
work->mVolumeCalcData.mVolumePos.set(
|
||||
work->mVolumeCalcData.mVelAxis.x + work->mVolumeSize * JMASSin(theta),
|
||||
work->mVolumeCalcData.mVelAxis.y,
|
||||
work->mVolumeCalcData.mVelAxis.z + work->mVolumeSize * JMASCos(theta));
|
||||
work->mVolumeCalcData.mVelOmni.mul(work->mVolumeCalcData.mVolumePos, work->mGlobalScl);
|
||||
}
|
||||
|
||||
/* 8027BB18-8027BB4C 276458 0034+00 0/0 1/1 0/0 .text __ct__16JPADynamicsBlockFPCUc */
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ void JPABaseEmitter::init(JPAEmitterManager* param_0, JPAResource* param_1) {
|
|||
mSpread = mpRes->getDyn()->getInitVelDirSp();
|
||||
mRndmDirSpeed = mpRes->getDyn()->getInitVelRndm();
|
||||
mAirResist = mpRes->getDyn()->getAirRes();
|
||||
mRndm.set_seed(mpEmtrMgr->mpWorkData->mRndm.get_rndm_u());
|
||||
mRndm.set_seed(mpEmtrMgr->pWd->mRndm.get_rndm_u());
|
||||
MTXIdentity(mGlobalRot);
|
||||
mGlobalScl.set(1.0f, 1.0f, 1.0f);
|
||||
mGlobalTrs.zero();
|
||||
|
|
@ -85,8 +85,8 @@ JPABaseParticle* JPABaseEmitter::createParticle() {
|
|||
if (mpPtclPool->getNum() != 0) {
|
||||
JPANode<JPABaseParticle>* node = mpPtclPool->pop_front();
|
||||
mAlivePtclBase.push_front(node);
|
||||
mpRes->getDyn()->calc(mpEmtrMgr->mpWorkData);
|
||||
node->mData.init_p(mpEmtrMgr->mpWorkData);
|
||||
mpRes->getDyn()->calc(mpEmtrMgr->pWd);
|
||||
node->mData.init_p(mpEmtrMgr->pWd);
|
||||
return &node->mData;
|
||||
}
|
||||
|
||||
|
|
@ -99,7 +99,7 @@ JPABaseParticle* JPABaseEmitter::createChild(JPABaseParticle* parent) {
|
|||
if (mpPtclPool->getNum() != 0) {
|
||||
JPANode<JPABaseParticle>* node = mpPtclPool->pop_front();
|
||||
mAlivePtclChld.push_front(node);
|
||||
node->mData.init_c(mpEmtrMgr->mpWorkData, parent);
|
||||
node->mData.init_c(mpEmtrMgr->pWd, parent);
|
||||
return &node->mData;
|
||||
}
|
||||
|
||||
|
|
@ -166,18 +166,18 @@ void JPABaseEmitter::calcEmitterGlobalPosition(JGeometry::TVec3<f32>* dst) const
|
|||
/* 8027EF30-8027EF40 279870 0010+00 0/0 1/1 0/0 .text getCurrentCreateNumber__14JPABaseEmitterCFv
|
||||
*/
|
||||
u32 JPABaseEmitter::getCurrentCreateNumber() const {
|
||||
return mpEmtrMgr->mpWorkData->mEmitCount;
|
||||
return mpEmtrMgr->pWd->mEmitCount;
|
||||
}
|
||||
|
||||
/* 8027EF40-8027EF50 279880 0010+00 0/0 3/3 0/0 .text getDrawCount__14JPABaseEmitterCFv
|
||||
*/
|
||||
u8 JPABaseEmitter::getDrawCount() const {
|
||||
return mpEmtrMgr->mpWorkData->mDrawCount;
|
||||
return mpEmtrMgr->pWd->mDrawCount;
|
||||
}
|
||||
|
||||
/* 8027EF50-8027EFA4 279890 0054+00 0/0 1/1 0/0 .text
|
||||
* loadTexture__14JPABaseEmitterFUc11_GXTexMapID */
|
||||
bool JPABaseEmitter::loadTexture(u8 idx, GXTexMapID texMapID) {
|
||||
mpEmtrMgr->mpWorkData->mpResMgr->load(mpRes->getTexIdx(idx), texMapID);
|
||||
mpEmtrMgr->pWd->mpResMgr->load(mpRes->getTexIdx(idx), texMapID);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,53 +8,69 @@
|
|||
#include "JSystem/JParticle/JPAEmitter.h"
|
||||
#include "JSystem/JParticle/JPAParticle.h"
|
||||
#include "JSystem/JParticle/JPAResourceManager.h"
|
||||
#include "JSystem/JUtility/JUTAssert.h"
|
||||
#include "dolphin/gx.h"
|
||||
|
||||
/* 8027DCA0-8027DEBC 2785E0 021C+00 0/0 1/1 0/0 .text __ct__17JPAEmitterManagerFUlUlP7JKRHeapUcUc
|
||||
*/
|
||||
JPAEmitterManager::JPAEmitterManager(u32 ptclMax, u32 emtrMax, JKRHeap* pHeap, u8 grpMax,
|
||||
u8 resMax) {
|
||||
mEmtrMax = emtrMax;
|
||||
mPtclMax = ptclMax;
|
||||
mGrpMax = grpMax;
|
||||
mResMax = resMax;
|
||||
JPAEmitterManager::JPAEmitterManager(u32 i_ptclNum, u32 i_emtrNum, JKRHeap* pHeap, u8 i_gidMax,
|
||||
u8 i_ridMax) {
|
||||
emtrNum = i_emtrNum;
|
||||
ptclNum = i_ptclNum;
|
||||
gidMax = i_gidMax;
|
||||
ridMax = i_ridMax;
|
||||
|
||||
JPABaseEmitter* emtr = new (pHeap, 0) JPABaseEmitter[mEmtrMax];
|
||||
for (u32 i = 0; i < mEmtrMax; i++)
|
||||
mFreeEmtrList.prepend(&emtr[i].mLink);
|
||||
JUT_ASSERT(40, emtrNum && ptclNum && gidMax && ridMax);
|
||||
|
||||
JPANode<JPABaseParticle>* ptcl = new (pHeap, 0) JPANode<JPABaseParticle>[mPtclMax];
|
||||
for (u32 i = 0; i < mPtclMax; i++)
|
||||
mPtclPool.push_back(&ptcl[i]);
|
||||
JPABaseEmitter* p_emtr_link = new (pHeap, 0) JPABaseEmitter[emtrNum];
|
||||
JUT_ASSERT(44, p_emtr_link);
|
||||
for (u32 i = 0; i < emtrNum; i++)
|
||||
mFreeEmtrList.prepend(&p_emtr_link[i].mLink);
|
||||
|
||||
mpGrpEmtr = new (pHeap, 0) JSUList<JPABaseEmitter>[mGrpMax];
|
||||
mpResMgrAry = new (pHeap, 0) JPAResourceManager*[mResMax];
|
||||
for (int i = 0; i < mResMax; i++) {
|
||||
mpResMgrAry[i] = NULL;
|
||||
JPANode<JPABaseParticle>* p_ptcl_node = new (pHeap, 0) JPANode<JPABaseParticle>[ptclNum];
|
||||
JUT_ASSERT(51, p_ptcl_node);
|
||||
for (u32 i = 0; i < ptclNum; i++)
|
||||
mPtclPool.push_back(&p_ptcl_node[i]);
|
||||
|
||||
pEmtrUseList = new (pHeap, 0) JSUList<JPABaseEmitter>[gidMax];
|
||||
JUT_ASSERT(58, pEmtrUseList);
|
||||
pResMgrAry = new (pHeap, 0) JPAResourceManager*[ridMax];
|
||||
JUT_ASSERT(62, pResMgrAry)
|
||||
for (int i = 0; i < ridMax; i++) {
|
||||
pResMgrAry[i] = NULL;
|
||||
}
|
||||
|
||||
mpWorkData = new (pHeap, 0) JPAEmitterWorkData();
|
||||
pWd = new (pHeap, 0) JPAEmitterWorkData();
|
||||
JUT_ASSERT(67, pWd);
|
||||
}
|
||||
|
||||
/* 8027DEBC-8027DFA0 2787FC 00E4+00 0/0 3/3 0/0 .text
|
||||
* createSimpleEmitterID__17JPAEmitterManagerFRCQ29JGeometry8TVec3<f>UsUcUcP18JPAEmitterCallBackP19JPAParticleCallBack
|
||||
*/
|
||||
JPABaseEmitter* JPAEmitterManager::createSimpleEmitterID(JGeometry::TVec3<f32> const& pos,
|
||||
u16 resID, u8 groupID, u8 resMgrID,
|
||||
u16 resID, u8 group_id, u8 res_mgr_id,
|
||||
JPAEmitterCallBack* emtrCB,
|
||||
JPAParticleCallBack* ptclCB) {
|
||||
JPAResource* pRes = mpResMgrAry[resMgrID]->getResource(resID);
|
||||
if (pRes != NULL && mFreeEmtrList.getNumLinks() != 0) {
|
||||
JUT_ASSERT(88, group_id < gidMax);
|
||||
JUT_ASSERT(89, res_mgr_id < ridMax);
|
||||
JUT_ASSERT(90, pResMgrAry[res_mgr_id] != 0);
|
||||
JPAResource* pRes = pResMgrAry[res_mgr_id]->getResource(resID);
|
||||
|
||||
if (pRes == NULL) {
|
||||
JUT_WARN_DEVICE(94, 3, "JPA : User Index %d is NOT exist\n", resID);
|
||||
} else if (mFreeEmtrList.getNumLinks() == 0) {
|
||||
JUT_WARN_DEVICE(97, 3, "JPA : Can NOT create emitter more\n");
|
||||
} else {
|
||||
JSULink<JPABaseEmitter>* pLink = mFreeEmtrList.getFirst();
|
||||
mFreeEmtrList.remove(pLink);
|
||||
mpGrpEmtr[groupID].append(pLink);
|
||||
pEmtrUseList[group_id].append(pLink);
|
||||
JPABaseEmitter* emtr = pLink->getObject();
|
||||
emtr->init(this, pRes);
|
||||
emtr->mpPtclPool = &mPtclPool;
|
||||
emtr->mpEmtrCallBack = emtrCB;
|
||||
emtr->mpPtclCallBack = ptclCB;
|
||||
emtr->mGroupID = groupID;
|
||||
emtr->mResMgrID = resMgrID;
|
||||
emtr->mGroupID = group_id;
|
||||
emtr->mResMgrID = res_mgr_id;
|
||||
emtr->mGlobalTrs.set(pos);
|
||||
return emtr;
|
||||
}
|
||||
|
|
@ -63,24 +79,26 @@ JPABaseEmitter* JPAEmitterManager::createSimpleEmitterID(JGeometry::TVec3<f32> c
|
|||
}
|
||||
|
||||
/* 8027DFA0-8027E028 2788E0 0088+00 0/0 3/3 0/0 .text calc__17JPAEmitterManagerFUc */
|
||||
void JPAEmitterManager::calc(u8 groupID) {
|
||||
for (JSULink<JPABaseEmitter>*pLink = mpGrpEmtr[groupID].getFirst(), *pNext;
|
||||
pLink != mpGrpEmtr[groupID].getEnd(); pLink = pNext) {
|
||||
void JPAEmitterManager::calc(u8 group_id) {
|
||||
JUT_ASSERT(154, group_id < gidMax);
|
||||
JSULink<JPABaseEmitter>* pNext = NULL;
|
||||
for (JSULink<JPABaseEmitter>* pLink = pEmtrUseList[group_id].getFirst();
|
||||
pLink != pEmtrUseList[group_id].getEnd(); pLink = pNext) {
|
||||
pNext = pLink->getNext();
|
||||
|
||||
JPABaseEmitter* emtr = pLink->getObject();
|
||||
bool done = emtr->mpRes->calc(mpWorkData, emtr);
|
||||
|
||||
if (done && !emtr->checkStatus(0x200))
|
||||
if (emtr->mpRes->calc(pWd, emtr) && !emtr->checkStatus(0x200))
|
||||
forceDeleteEmitter(emtr);
|
||||
}
|
||||
}
|
||||
|
||||
/* 8027E028-8027E220 278968 01F8+00 0/0 1/1 0/0 .text draw__17JPAEmitterManagerFPC11JPADrawInfoUc
|
||||
*/
|
||||
void JPAEmitterManager::draw(JPADrawInfo const* drawInfo, u8 groupID) {
|
||||
drawInfo->getCamMtx(&mpWorkData->mPosCamMtx);
|
||||
drawInfo->getPrjMtx(&mpWorkData->mPrjMtx);
|
||||
void JPAEmitterManager::draw(JPADrawInfo const* drawInfo, u8 group_id) {
|
||||
JUT_ASSERT(192, group_id < gidMax);
|
||||
drawInfo->getCamMtx(pWd->mPosCamMtx);
|
||||
drawInfo->getPrjMtx(pWd->mPrjMtx);
|
||||
calcYBBCam();
|
||||
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
|
||||
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
|
||||
|
|
@ -103,12 +121,12 @@ void JPAEmitterManager::draw(JPADrawInfo const* drawInfo, u8 groupID) {
|
|||
GX_AF_NONE);
|
||||
GXSetNumChans(0);
|
||||
|
||||
for (JSULink<JPABaseEmitter>* pLink = mpGrpEmtr[groupID].getFirst();
|
||||
pLink != mpGrpEmtr[groupID].getEnd(); pLink = pLink->getNext()) {
|
||||
for (JSULink<JPABaseEmitter>* pLink = pEmtrUseList[group_id].getFirst();
|
||||
pLink != pEmtrUseList[group_id].getEnd(); pLink = pLink->getNext()) {
|
||||
JPABaseEmitter* emtr = pLink->getObject();
|
||||
if (!emtr->checkStatus(0x04)) {
|
||||
mpWorkData->mpResMgr = mpResMgrAry[emtr->mResMgrID];
|
||||
emtr->mpRes->draw(mpWorkData, emtr);
|
||||
pWd->mpResMgr = pResMgrAry[emtr->mResMgrID];
|
||||
emtr->mpRes->draw(pWd, emtr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -116,15 +134,16 @@ void JPAEmitterManager::draw(JPADrawInfo const* drawInfo, u8 groupID) {
|
|||
/* 8027E220-8027E278 278B60 0058+00 0/0 1/1 0/0 .text forceDeleteAllEmitter__17JPAEmitterManagerFv
|
||||
*/
|
||||
void JPAEmitterManager::forceDeleteAllEmitter() {
|
||||
for (u8 i = 0; i < mGrpMax; i++)
|
||||
for (u8 i = 0; i < gidMax; i++)
|
||||
forceDeleteGroupEmitter(i);
|
||||
}
|
||||
|
||||
/* 8027E278-8027E2D8 278BB8 0060+00 1/1 0/0 0/0 .text
|
||||
* forceDeleteGroupEmitter__17JPAEmitterManagerFUc */
|
||||
void JPAEmitterManager::forceDeleteGroupEmitter(u8 groupID) {
|
||||
while (mpGrpEmtr[groupID].getNumLinks())
|
||||
forceDeleteEmitter(mpGrpEmtr[groupID].getLast()->getObject());
|
||||
void JPAEmitterManager::forceDeleteGroupEmitter(u8 group_id) {
|
||||
JUT_ASSERT(288, group_id < gidMax);
|
||||
while (pEmtrUseList[group_id].getNumLinks())
|
||||
forceDeleteEmitter(pEmtrUseList[group_id].getLast()->getObject());
|
||||
}
|
||||
|
||||
/* 8027E2D8-8027E344 278C18 006C+00 3/3 1/1 0/0 .text
|
||||
|
|
@ -132,48 +151,53 @@ void JPAEmitterManager::forceDeleteGroupEmitter(u8 groupID) {
|
|||
void JPAEmitterManager::forceDeleteEmitter(JPABaseEmitter* emtr) {
|
||||
emtr->deleteAllParticle();
|
||||
emtr->setStatus(0x300);
|
||||
mpGrpEmtr[emtr->getGroupID()].remove(&emtr->mLink);
|
||||
pEmtrUseList[emtr->getGroupID()].remove(&emtr->mLink);
|
||||
mFreeEmtrList.prepend(&emtr->mLink);
|
||||
}
|
||||
|
||||
/* 8027E344-8027E354 278C84 0010+00 0/0 2/2 0/0 .text
|
||||
* entryResourceManager__17JPAEmitterManagerFP18JPAResourceManagerUc */
|
||||
void JPAEmitterManager::entryResourceManager(JPAResourceManager* resMgr, u8 resMgrID) {
|
||||
mpResMgrAry[resMgrID] = resMgr;
|
||||
JUT_ASSERT_MSG_F(325, resMgrID < ridMax && (pResMgrAry[resMgrID]) == 0,
|
||||
"res_id %d res_id_max %d array[%d] = %x", resMgrID, ridMax, resMgrID,
|
||||
pResMgrAry[resMgrID]);
|
||||
pResMgrAry[resMgrID] = resMgr;
|
||||
}
|
||||
|
||||
/* 8027E354-8027E3F4 278C94 00A0+00 0/0 1/1 0/0 .text clearResourceManager__17JPAEmitterManagerFUc
|
||||
*/
|
||||
void JPAEmitterManager::clearResourceManager(u8 resMgrID) {
|
||||
for (u8 i = 0; i < mGrpMax; i++) {
|
||||
for (JSULink<JPABaseEmitter>*pLink = mpGrpEmtr[i].getFirst(), *pNext;
|
||||
pLink != mpGrpEmtr[i].getEnd(); pLink = pNext) {
|
||||
void JPAEmitterManager::clearResourceManager(u8 res_mgr_id) {
|
||||
JUT_ASSERT(339, res_mgr_id < ridMax);
|
||||
for (u8 i = 0; i < gidMax; i++) {
|
||||
JSULink<JPABaseEmitter>* pNext = NULL;
|
||||
for (JSULink<JPABaseEmitter>* pLink = pEmtrUseList[i].getFirst();
|
||||
pLink != pEmtrUseList[i].getEnd(); pLink = pNext) {
|
||||
pNext = pLink->getNext();
|
||||
|
||||
if (resMgrID == pLink->getObject()->getResourceManagerID())
|
||||
if (res_mgr_id == pLink->getObject()->getResourceManagerID())
|
||||
forceDeleteEmitter(pLink->getObject());
|
||||
}
|
||||
}
|
||||
|
||||
mpResMgrAry[resMgrID] = NULL;
|
||||
pResMgrAry[res_mgr_id] = NULL;
|
||||
}
|
||||
|
||||
/* 8027E3F4-8027E51C 278D34 0128+00 1/1 0/0 0/0 .text calcYBBCam__17JPAEmitterManagerFv
|
||||
*/
|
||||
void JPAEmitterManager::calcYBBCam() {
|
||||
JGeometry::TVec3<float> v;
|
||||
v.set(0.0f, mpWorkData->mPosCamMtx[1][1], mpWorkData->mPosCamMtx[2][1]);
|
||||
JGeometry::TVec3<float> v(0.0f, pWd->mPosCamMtx[1][1], pWd->mPosCamMtx[2][1]);
|
||||
JUT_ASSERT(367, !v.isZero());
|
||||
v.normalize();
|
||||
mpWorkData->mYBBCamMtx[0][0] = 1.0f;
|
||||
mpWorkData->mYBBCamMtx[0][1] = 0.0f;
|
||||
mpWorkData->mYBBCamMtx[0][2] = 0.0f;
|
||||
mpWorkData->mYBBCamMtx[0][3] = mpWorkData->mPosCamMtx[0][3];
|
||||
mpWorkData->mYBBCamMtx[1][0] = 0.0f;
|
||||
mpWorkData->mYBBCamMtx[1][1] = v.y;
|
||||
mpWorkData->mYBBCamMtx[1][2] = -v.z;
|
||||
mpWorkData->mYBBCamMtx[1][3] = mpWorkData->mPosCamMtx[1][3];
|
||||
mpWorkData->mYBBCamMtx[2][0] = 0.0f;
|
||||
mpWorkData->mYBBCamMtx[2][1] = v.z;
|
||||
mpWorkData->mYBBCamMtx[2][2] = v.y;
|
||||
mpWorkData->mYBBCamMtx[2][3] = mpWorkData->mPosCamMtx[2][3];
|
||||
pWd->mYBBCamMtx[0][0] = 1.0f;
|
||||
pWd->mYBBCamMtx[0][1] = 0.0f;
|
||||
pWd->mYBBCamMtx[0][2] = 0.0f;
|
||||
pWd->mYBBCamMtx[0][3] = pWd->mPosCamMtx[0][3];
|
||||
pWd->mYBBCamMtx[1][0] = 0.0f;
|
||||
pWd->mYBBCamMtx[1][1] = v.y;
|
||||
pWd->mYBBCamMtx[1][2] = -v.z;
|
||||
pWd->mYBBCamMtx[1][3] = pWd->mPosCamMtx[1][3];
|
||||
pWd->mYBBCamMtx[2][0] = 0.0f;
|
||||
pWd->mYBBCamMtx[2][1] = v.z;
|
||||
pWd->mYBBCamMtx[2][2] = v.y;
|
||||
pWd->mYBBCamMtx[2][3] = pWd->mPosCamMtx[2][3];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -134,7 +134,6 @@ void JPAFieldVortex::prepare(JPAEmitterWorkData* work, JPAFieldBlock* block) {
|
|||
|
||||
/* 8027C674-8027C814 276FB4 01A0+00 1/0 0/0 0/0 .text
|
||||
* calc__14JPAFieldVortexFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle */
|
||||
// NONMATCHING regalloc. may need to rewrite dot in a way that doesn't break Z2Audience::calcPitchDoppler_
|
||||
void JPAFieldVortex::calc(JPAEmitterWorkData* work, JPAFieldBlock* block, JPABaseParticle* ptcl) {
|
||||
JGeometry::TVec3<f32> vec;
|
||||
vec.scale(field_0x10.dot(ptcl->mLocalPosition), field_0x10);
|
||||
|
|
@ -168,7 +167,6 @@ void JPAFieldConvection::prepare(JPAEmitterWorkData* work, JPAFieldBlock* block)
|
|||
|
||||
/* 8027CA94-8027CCCC 2773D4 0238+00 1/0 0/0 0/0 .text
|
||||
* calc__18JPAFieldConvectionFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle */
|
||||
// NONMATCHING regalloc problems with TVec3 inlines
|
||||
void JPAFieldConvection::calc(JPAEmitterWorkData* work, JPAFieldBlock* block,
|
||||
JPABaseParticle* ptcl) {
|
||||
JGeometry::TVec3<f32> vec1, vec2, vec3;
|
||||
|
|
@ -185,7 +183,6 @@ void JPAFieldConvection::calc(JPAEmitterWorkData* work, JPAFieldBlock* block,
|
|||
|
||||
/* 8027CCCC-8027CDE4 27760C 0118+00 1/0 0/0 0/0 .text
|
||||
* calc__14JPAFieldRandomFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle */
|
||||
// NONMATCHING missing clrlwi
|
||||
void JPAFieldRandom::calc(JPAEmitterWorkData* work, JPAFieldBlock* block, JPABaseParticle* ptcl) {
|
||||
if (ptcl->mAge == 0 || (block->getCycle() != 0 && ptcl->mAge % block->getCycle() == 0)) {
|
||||
JPABaseEmitter* emtr = work->mpEmtr;
|
||||
|
|
|
|||
|
|
@ -17,7 +17,6 @@ JPAParticleCallBack::~JPAParticleCallBack() {
|
|||
|
||||
/* 8027EFEC-8027F8C8 27992C 08DC+00 0/0 1/1 0/0 .text
|
||||
* init_p__15JPABaseParticleFP18JPAEmitterWorkData */
|
||||
// NONMATCHING a couple problems, likely issues with setLength
|
||||
void JPABaseParticle::init_p(JPAEmitterWorkData* work) {
|
||||
JPABaseEmitter* emtr = work->mpEmtr;
|
||||
JPAExtraShape* esp = work->mpRes->getEsp();
|
||||
|
|
@ -25,11 +24,11 @@ void JPABaseParticle::init_p(JPAEmitterWorkData* work) {
|
|||
JPADynamicsBlock* dyn = work->mpRes->getDyn();
|
||||
|
||||
mAge = -1;
|
||||
mLifeTime = (1.0f - dyn->getLifeTimeRndm() * emtr->get_r_f()) * emtr->mLifeTime;
|
||||
mLifeTime = (1.0f - dyn->getLifetimeRndm() * emtr->get_r_f()) * emtr->mLifeTime;
|
||||
mTime = 0.0f;
|
||||
|
||||
initStatus(0);
|
||||
MTXMultVecSR(work->mGlobalSR, &work->mVolumePos, &mLocalPosition);
|
||||
MTXMultVecSR(work->mGlobalSR, &work->mVolumeCalcData.mVolumePos, &mLocalPosition);
|
||||
if (emtr->checkFlag(8)) {
|
||||
setStatus(0x20);
|
||||
}
|
||||
|
|
@ -41,14 +40,14 @@ void JPABaseParticle::init_p(JPAEmitterWorkData* work) {
|
|||
|
||||
JGeometry::TVec3<f32> velOmni;
|
||||
if (emtr->mAwayFromCenterSpeed) {
|
||||
velOmni.setLength(work->mVelOmni, emtr->mAwayFromCenterSpeed);
|
||||
velOmni.setLength(work->mVolumeCalcData.mVelOmni, emtr->mAwayFromCenterSpeed);
|
||||
} else {
|
||||
velOmni.zero();
|
||||
}
|
||||
|
||||
JGeometry::TVec3<f32> velAxis;
|
||||
if (emtr->mAwayFromAxisSpeed) {
|
||||
velAxis.setLength(work->mVelAxis, emtr->mAwayFromAxisSpeed);
|
||||
velAxis.setLength(work->mVolumeCalcData.mVelAxis, emtr->mAwayFromAxisSpeed);
|
||||
} else {
|
||||
velAxis.zero();
|
||||
}
|
||||
|
|
@ -56,9 +55,7 @@ void JPABaseParticle::init_p(JPAEmitterWorkData* work) {
|
|||
JGeometry::TVec3<f32> velDir;
|
||||
if (emtr->mDirSpeed) {
|
||||
Mtx mtx;
|
||||
int angleZ = emtr->get_r_ss();
|
||||
f32 angleY = emtr->get_r_zp() * 0x8000 * emtr->mSpread;
|
||||
JPAGetYZRotateMtx(angleY, angleZ, mtx);
|
||||
JPAGetYZRotateMtx(emtr->get_r_zp() * 0x8000 * emtr->mSpread, emtr->get_r_ss(), mtx);
|
||||
MTXConcat(work->mDirectionMtx, mtx, mtx);
|
||||
velDir.set(emtr->mDirSpeed * mtx[0][2],
|
||||
emtr->mDirSpeed * mtx[1][2],
|
||||
|
|
@ -100,8 +97,7 @@ void JPABaseParticle::init_p(JPAEmitterWorkData* work) {
|
|||
mAnmRandom = emtr->get_r_f() * bsp->getLoopOfstValue();
|
||||
|
||||
if (esp != NULL && esp->isEnableScaleAnm()) {
|
||||
f32 scale = emtr->mScaleOut * (emtr->get_r_zp() * esp->getScaleRndm() + 1.0f);
|
||||
mParticleScaleX = mParticleScaleY = mScaleOut = scale;
|
||||
mParticleScaleX = mParticleScaleY = mScaleOut = emtr->mScaleOut * (emtr->get_r_zp() * esp->getScaleRndm() + 1.0f);
|
||||
} else {
|
||||
mParticleScaleX = mParticleScaleY = mScaleOut = emtr->mScaleOut;
|
||||
}
|
||||
|
|
@ -324,12 +320,12 @@ bool JPABaseParticle::canCreateChild(JPAEmitterWorkData* work) {
|
|||
* getWidth__15JPABaseParticleCFPC14JPABaseEmitter */
|
||||
f32 JPABaseParticle::getWidth(JPABaseEmitter const* emtr) const {
|
||||
f32 scale = 2.0f * mParticleScaleX;
|
||||
return scale * emtr->mpEmtrMgr->mpWorkData->mGlobalPtclScl.x;
|
||||
return scale * emtr->mpEmtrMgr->pWd->mGlobalPtclScl.x;
|
||||
}
|
||||
|
||||
/* 80280568-80280588 27AEA8 0020+00 0/0 3/3 0/0 .text
|
||||
* getHeight__15JPABaseParticleCFPC14JPABaseEmitter */
|
||||
f32 JPABaseParticle::getHeight(JPABaseEmitter const* emtr) const {
|
||||
f32 scale = 2.0f * mParticleScaleY;
|
||||
return scale * emtr->mpEmtrMgr->mpWorkData->mGlobalPtclScl.y;
|
||||
return scale * emtr->mpEmtrMgr->pWd->mGlobalPtclScl.y;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -55,31 +55,34 @@ void JStudio_JStage::TAdaptor_light::adaptor_do_prepare() {
|
|||
* adaptor_do_begin__Q214JStudio_JStage14TAdaptor_lightFv */
|
||||
// NONMATCHING - regalloc
|
||||
void JStudio_JStage::TAdaptor_light::adaptor_do_begin() {
|
||||
adaptor_object_begin_();
|
||||
JStage::TLight* pLightObj = get_pJSG_();
|
||||
const JStudio::TObject* pObject = adaptor_getObject();
|
||||
JUT_ASSERT(60, pObject != 0);
|
||||
const JStudio::TControl* pControl = pObject->getControl();
|
||||
GXColor lightColor = pLightObj->JSGGetColor();
|
||||
adaptor_setVariableValue_GXColor(sauVariableValue_4_COLOR_RGBA, lightColor);
|
||||
JStudio::TControl::TTransform_position_direction lightObjTransform;
|
||||
JStudio::TControl::TTransform_position_direction aTStack_b8;
|
||||
pLightObj->JSGGetPosition(&lightObjTransform.position);
|
||||
pLightObj->JSGGetDirection(&lightObjTransform.direction);
|
||||
JStudio::TControl::TTransform_position_direction* finalTransform =
|
||||
pControl->transformOnGet_transform_ifEnabled(&lightObjTransform, &aTStack_b8);
|
||||
adaptor_setVariableValue_Vec(sauVariableValue_3_POSITION_XYZ, finalTransform->position);
|
||||
f32 dirx = finalTransform->direction.x;
|
||||
f32 diry = finalTransform->direction.y;
|
||||
f32 dirz = finalTransform->direction.z;
|
||||
f32 sqr = sqrtf(dirx * dirx + dirz * dirz);
|
||||
f32 dVar11 = atan2f(dirx, dirz);
|
||||
f32 dVar9 = atan2f(diry, sqr);
|
||||
adaptor_setVariableValue_immediate(10, MTXRadToDeg(dVar11));
|
||||
adaptor_setVariableValue_immediate(11, MTXRadToDeg(dVar9));
|
||||
Vec VStack_c4;
|
||||
VECAdd(&finalTransform->position, &finalTransform->direction, &VStack_c4);
|
||||
adaptor_setVariableValue_Vec(sauVariableValue_3_TARGET_POSITION_XYZ, VStack_c4);
|
||||
{
|
||||
adaptor_object_begin_();
|
||||
JStage::TLight* pLightObj = get_pJSG_();
|
||||
const JStudio::TObject* pObject = adaptor_getObject();
|
||||
JUT_ASSERT(60, pObject != 0);
|
||||
const JStudio::TControl* pControl = pObject->getControl();
|
||||
JUT_ASSERT(62, pControl != 0);
|
||||
GXColor lightColor = pLightObj->JSGGetColor();
|
||||
adaptor_setVariableValue_GXColor(sauVariableValue_4_COLOR_RGBA, lightColor);
|
||||
JStudio::TControl::TTransform_position_direction lightObjTransform;
|
||||
JStudio::TControl::TTransform_position_direction aTStack_b8;
|
||||
pLightObj->JSGGetPosition(&lightObjTransform.position);
|
||||
pLightObj->JSGGetDirection(&lightObjTransform.direction);
|
||||
JStudio::TControl::TTransform_position_direction* finalTransform =
|
||||
pControl->transformOnGet_transform_ifEnabled(lightObjTransform, &aTStack_b8);
|
||||
adaptor_setVariableValue_Vec(sauVariableValue_3_POSITION_XYZ, finalTransform->position);
|
||||
f32 dirx = finalTransform->direction.x;
|
||||
f32 diry = finalTransform->direction.y;
|
||||
f32 dirz = finalTransform->direction.z;
|
||||
f32 sqr = sqrtf(dirx * dirx + dirz * dirz);
|
||||
f32 dVar11 = atan2f(dirx, dirz);
|
||||
f32 dVar9 = atan2f(diry, sqr);
|
||||
adaptor_setVariableValue_immediate(10, MTXRadToDeg(dVar11));
|
||||
adaptor_setVariableValue_immediate(11, MTXRadToDeg(dVar9));
|
||||
Vec VStack_c4;
|
||||
VECAdd(&finalTransform->position, &finalTransform->direction, &VStack_c4);
|
||||
adaptor_setVariableValue_Vec(sauVariableValue_3_TARGET_POSITION_XYZ, VStack_c4);
|
||||
}
|
||||
}
|
||||
|
||||
/* 8028CF68-8028CFBC 2878A8 0054+00 1/0 0/0 0/0 .text
|
||||
|
|
|
|||
|
|
@ -70,11 +70,12 @@ JASSoundParams* Z2Audible::getOuterParams(int param_0) {
|
|||
|
||||
/* 802BBEE4-802BC204 2B6824 0320+00 1/1 0/0 0/0 .text
|
||||
* setOuterParams__9Z2AudibleFRC14JASSoundParamsRC14JASSoundParamsi */
|
||||
// NONMATCHING regalloc
|
||||
void Z2Audible::setOuterParams(JASSoundParams const& param_0, JASSoundParams const& param_1,
|
||||
int param_2) {
|
||||
Z2AudibleChannel* this_01 = &field_0x2c[param_2];
|
||||
u32 iStack_94 = (field_0x10.field_0x0.half.f1 & 0xf00) >> 8;
|
||||
int index) {
|
||||
JUT_ASSERT(89, index >= 0);
|
||||
JUT_ASSERT(90, index < 1);
|
||||
Z2AudibleChannel* this_01 = &field_0x2c[index];
|
||||
u8 iStack_94 = (field_0x10.field_0x0.half.f1 & 0xf00) >> 8;
|
||||
if (iStack_94 == 0) {
|
||||
this_01->field_0x0.combine(param_0, param_1);
|
||||
return;
|
||||
|
|
@ -105,28 +106,24 @@ void Z2Audible::setOuterParams(JASSoundParams const& param_0, JASSoundParams con
|
|||
dVar10 = 0.0f;
|
||||
}
|
||||
}
|
||||
dVar10 -= this_01->field_0x28;
|
||||
f32 dVar11;
|
||||
if (dVar10 > 0.0f) {
|
||||
dVar11 = J3DUD::JMAAbs(dVar10);
|
||||
dVar11 = Z2Calc::getParamByExp(dVar11, 1.0f, 0.0f, 0.1f, 0.1f, 0.5f, Z2Calc::CURVE_SIGN_1);
|
||||
f32 dVar15 = dVar10 - this_01->field_0x28;
|
||||
f32 dVar11 = 1.0f;
|
||||
if (dVar15 > 0.0f) {
|
||||
dVar11 = Z2Calc::getParamByExp(J3DUD::JMAAbs(dVar15), 1.0f, 0.0f, 0.1f, 0.1f, 0.5f, Z2Calc::CURVE_SIGN_1);
|
||||
} else {
|
||||
dVar11 = J3DUD::JMAAbs(dVar10);
|
||||
dVar11 = Z2Calc::getParamByExp(dVar11, -1.0f, 0.0f, 0.1f, 1.0f / 30.0f, 0.5f, Z2Calc::CURVE_SIGN_1);
|
||||
dVar11 = Z2Calc::getParamByExp(J3DUD::JMAAbs(dVar15), -1.0f, 0.0f, 0.1f, 1.0f / 30.0f, 0.5f, Z2Calc::CURVE_SIGN_1);
|
||||
}
|
||||
f32 fVar1 = this_01->field_0x28 + (dVar10 * dVar11);
|
||||
if (fVar1 < 0.0f) {
|
||||
fVar1 = 0.0f;
|
||||
} else if (fVar1 > 1.0f) {
|
||||
fVar1 = 1.0f;
|
||||
dVar10 = this_01->field_0x28 + (dVar15 * dVar11);
|
||||
if (dVar10 < 0.0f) {
|
||||
dVar10 = 0.0f;
|
||||
} else if (dVar10 > 1.0f) {
|
||||
dVar10 = 1.0f;
|
||||
}
|
||||
local_b0.mVolume = param_1.mVolume * fVar1;
|
||||
this_01->field_0x28 = fVar1;
|
||||
f32 dVar8 = J3DUD::JMAAbs(local_b8.x);
|
||||
f32 dVar13 = Z2Calc::getParamByExp(local_b0.mVolume * dVar8, 1.0f, 0.0f, 0.1f,
|
||||
local_b0.mVolume = param_1.mVolume * dVar10;
|
||||
this_01->field_0x28 = dVar10;
|
||||
f32 dVar13 = Z2Calc::getParamByExp(local_b0.mVolume * J3DUD::JMAAbs(local_b8.x), 1.0f, 0.0f, 0.1f,
|
||||
1.0f / 30.0f, 1.0 / 3.0f, Z2Calc::CURVE_SIGN_1);
|
||||
f32 dVar14 = J3DUD::JMAAbs(local_b8.y);
|
||||
dVar14 = Z2Calc::getParamByExp(local_b0.mVolume * dVar14, 1.0f,
|
||||
f32 dVar14 = Z2Calc::getParamByExp(local_b0.mVolume * J3DUD::JMAAbs(local_b8.y), 1.0f,
|
||||
0.0f, 0.1f,
|
||||
1.0f / 30.0f, 1.0f / 3.0f, Z2Calc::CURVE_SIGN_1);
|
||||
if (dVar13 > 1.0f / 3.0f) {
|
||||
|
|
@ -514,7 +511,9 @@ Z2Audience::Z2Audience() : JASGlobalInstance<Z2Audience>(true), field_0x4(1.0f),
|
|||
}
|
||||
|
||||
/* 802BD1FC-802BD288 2B7B3C 008C+00 1/0 1/1 0/0 .text __dt__10Z2AudienceFv */
|
||||
Z2Audience::~Z2Audience() {}
|
||||
Z2Audience::~Z2Audience() {
|
||||
//JUT_ASSERT(751, !isActive());
|
||||
}
|
||||
|
||||
/* 802BD2DC-802BD338 2B7C1C 005C+00 0/0 1/1 0/0 .text
|
||||
* setAudioCamera__10Z2AudienceFPA4_fR3VecR3Vecffbib */
|
||||
|
|
@ -855,6 +854,12 @@ int Z2Audience::getMaxChannels() {
|
|||
return mMaxChannels;
|
||||
}
|
||||
|
||||
static void dummyMempool() {
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
// padding (???)
|
||||
s8 data_80451355;
|
||||
s8 data_80451356;
|
||||
|
|
|
|||
|
|
@ -10,6 +10,11 @@
|
|||
#include "d/d_save.h"
|
||||
#include "d/d_com_inf_game.h"
|
||||
|
||||
#ifdef DEBUG
|
||||
// Should be in data section
|
||||
static char sSpotName[144] = {0};
|
||||
#endif
|
||||
|
||||
/* 802C589C-802C58AC 2C01DC 0010+00 3/3 0/0 0/0 .text __ct__11Z2EnvSeBaseFP3Vec */
|
||||
Z2EnvSeBase::Z2EnvSeBase(Vec* param_0) {
|
||||
mPos = param_0;
|
||||
|
|
@ -970,6 +975,10 @@ void Z2EnvSeMgr::setHyrulSewerOpen(bool param_0) {
|
|||
/* 802C8300-802C8730 2C2C40 0430+00 2/1 1/1 0/0 .text startRiverSe__10Z2EnvSeMgrFSc */
|
||||
// NONMATCHING JAISound stack issues
|
||||
bool Z2EnvSeMgr::startRiverSe(s8 param_1) {
|
||||
#ifdef DEBUG
|
||||
char* spotName = sSpotName;
|
||||
#endif
|
||||
|
||||
if (Z2GetStatusMgr()->mCameraMapInfo == 6) {
|
||||
switch (Z2GetSceneMgr()->getCurrentSceneNum()) {
|
||||
case 5:
|
||||
|
|
@ -982,7 +991,13 @@ bool Z2EnvSeMgr::startRiverSe(s8 param_1) {
|
|||
}
|
||||
case 8:
|
||||
// fake match: should be 2000.0f according to debug, but that generates an extra entry in sdata2
|
||||
if (Z2GetStatusMgr()->mPolygonPosition.y < -14500.0f) {
|
||||
if ((Z2GetStatusMgr()->mPolygonPosition.y >
|
||||
#ifdef DEBUG
|
||||
2000.0f
|
||||
#else
|
||||
-14500.0f
|
||||
#endif
|
||||
)) {
|
||||
break;
|
||||
}
|
||||
case 0x15:
|
||||
|
|
@ -1003,26 +1018,31 @@ bool Z2EnvSeMgr::startRiverSe(s8 param_1) {
|
|||
f32 dVar16 = param_1 / 127.0f;
|
||||
f32 dVar18 = field_0x1ac * mRiverSeMgr.getMaxVolume();
|
||||
f32 dVar13 = mRiverSeMgr.getPanPower();
|
||||
f32 dVar14 = mRiverSeMgr.getDolbyPower();
|
||||
f32 dolbyPower = mRiverSeMgr.getDolbyPower();
|
||||
f32 dVar17 = field_0x1b0;
|
||||
f32 fArr0;
|
||||
f32 fArr1;
|
||||
f32 fArr2;
|
||||
f32 fArr3;
|
||||
|
||||
switch (field_0x188) {
|
||||
case 0:
|
||||
return false;
|
||||
case 1:
|
||||
aJStack_742 = Z2SE_ENV_RIVER_SMALL;
|
||||
fArr3 = dolbyPower;
|
||||
dVar18 *= Z2Calc::linearTransform(field_0x18c.calcNoise1f(), 0.0f, 1.0f, 0.7f, 1.0f,
|
||||
true);
|
||||
dVar17 *= Z2Calc::linearTransform(field_0x19c.calcNoise1f(), 0.0f, 1.0f, 0.8f, 1.1f,
|
||||
true);
|
||||
uVar8 = field_0x180.startEnvSeLevel(aJStack_742, dVar16, dVar18, dVar13, dVar14, dVar17, 0);
|
||||
uVar8 = field_0x180.startEnvSeLevel(aJStack_742, dVar16, dVar18, dVar13, dolbyPower, dVar17, 0);
|
||||
break;
|
||||
case 2:
|
||||
aJStack_742 = Z2SE_ENV_RIVER_NORMAL;
|
||||
mRiverSeMgr.getMaxPowL();
|
||||
mRiverSeMgr.getMaxPowR();
|
||||
mRiverSeMgr.getDolbyPower();
|
||||
uVar8 = field_0x180.startEnvSeLevel(aJStack_742, dVar16, dVar18, dVar13, dVar14, dVar17, 0);
|
||||
fArr2 = mRiverSeMgr.getDolbyPower();
|
||||
uVar8 = field_0x180.startEnvSeLevel(aJStack_742, dVar16, dVar18, dVar13, dolbyPower, dVar17, 0);
|
||||
break;
|
||||
case 3:
|
||||
if (field_0x1b8 > 0) {
|
||||
|
|
@ -1035,15 +1055,17 @@ bool Z2EnvSeMgr::startRiverSe(s8 param_1) {
|
|||
}
|
||||
}
|
||||
aJStack_742 = Z2SE_ENV_SEWER;
|
||||
fArr1 = dolbyPower;
|
||||
dVar18 *= Z2Calc::linearTransform(field_0x18c.calcNoise1f(), 0.0f, 1.0f, 0.6f, 1.0f, true);
|
||||
dVar17 *= Z2Calc::linearTransform(field_0x19c.calcNoise1f(), 0.0f, 1.0f, 0.8f, 1.0f, true);
|
||||
uVar8 = field_0x180.startEnvSeLevel(aJStack_742, dVar16, dVar18, dVar13, dVar14, dVar17, 0);
|
||||
uVar8 = field_0x180.startEnvSeLevel(aJStack_742, dVar16, dVar18, dVar13, dolbyPower, dVar17, 0);
|
||||
break;
|
||||
case 5:
|
||||
aJStack_742 = Z2SE_ENV_SPIRIT_FOUNTAIN;
|
||||
fArr0 = dolbyPower;
|
||||
dVar18 *= Z2Calc::linearTransform(field_0x18c.calcNoise1f(), 0.0f, 1.0f, 0.6f, 1.0f, true);
|
||||
dVar17 *= Z2Calc::linearTransform(field_0x19c.calcNoise1f(), 0.0f, 1.0f, 0.8f, 1.0f, true);
|
||||
uVar8 = field_0x180.startEnvSeLevel(aJStack_742, dVar16, dVar18, dVar13, dVar14, dVar17, 0);
|
||||
uVar8 = field_0x180.startEnvSeLevel(aJStack_742, dVar16, dVar18, dVar13, dolbyPower, dVar17, 0);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -1323,23 +1345,27 @@ f32 Z2EnvSeMgr::getFogDensity() {
|
|||
/* 802C9400-802C950C 2C3D40 010C+00 0/0 0/0 1/1 .text startFogSe__10Z2EnvSeMgrFv */
|
||||
// NONMATCHING fmuls reg order
|
||||
bool Z2EnvSeMgr::startFogSe() {
|
||||
bool iVar5 = false;
|
||||
f32 dVar10 = field_0x2e8.calcNoise1f();
|
||||
f32 dVar14 = 0.332f + (0.668f * dVar10);
|
||||
f32 dVar13 = 0.8f + (dVar10 * 0.2f);
|
||||
f32 dVar12 = 0.5f - (dVar10 * 0.4f) / 2;
|
||||
bool iVar5 =
|
||||
field_0x240.startEnvSeLevel(Z2SE_ENV_PUPPET_FOG_L, 20.0f, dVar14, dVar12, 0.5f, dVar13, 0);
|
||||
f32 ratio = 0.332f;
|
||||
f32 fVar1 = 0.2f;
|
||||
f32 fVar2 = 0.4f;
|
||||
f32 dVar14 = ratio + ((1.0f - ratio) * dVar10);
|
||||
f32 dVar13 = (1.0f - fVar1) + (dVar10 * fVar1);
|
||||
f32 dVar12 = 0.5f - (dVar10 * fVar2) / 2;
|
||||
int iVar1 = 20;
|
||||
f32 fVar3 = 0.5f;
|
||||
bool iVar6 =
|
||||
field_0x240.startEnvSeLevel(Z2SE_ENV_PUPPET_FOG_L, iVar1, dVar14, dVar12, fVar3, dVar13, 0);
|
||||
dVar10 = field_0x2f8.calcNoise1f();
|
||||
dVar14 = (0.332f + (0.668f * dVar10));
|
||||
dVar13 = (0.8f + (0.2f * dVar10));
|
||||
dVar12 = (0.5f + ( 0.4f * dVar10) / 2);
|
||||
bool iVar6 = field_0x274.startEnvSeLevel(Z2SE_ENV_PUPPET_FOG_R, 20.0f, dVar14, dVar12, 0.5f,
|
||||
dVar14 = (ratio + ((1.0f - ratio) * dVar10));
|
||||
dVar13 = ((1.0f - fVar1) + dVar10 * fVar1);
|
||||
dVar12 = (0.5f + (dVar10 * fVar2) / 2);
|
||||
iVar1 = 20;
|
||||
fVar3 = 0.5f;
|
||||
iVar5 = field_0x274.startEnvSeLevel(Z2SE_ENV_PUPPET_FOG_R, iVar1, dVar14, dVar12, fVar3,
|
||||
dVar13, 0);
|
||||
bool uVar8 = false;
|
||||
if (iVar5 && iVar6) {
|
||||
uVar8 = true;
|
||||
}
|
||||
return uVar8;
|
||||
return (iVar6 && iVar5);
|
||||
}
|
||||
|
||||
/* 802C950C-802C9F58 2C3E4C 0A4C+00 2/0 1/1 0/0 .text initLv3WaterSe__10Z2EnvSeMgrFUcUcUcUc */
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@
|
|||
#include "dol2asm.h"
|
||||
|
||||
/* 802AEEA0-802AF010 2A97E0 0170+00 0/0 1/1 0/0 .text __ct__8Z2SeqMgrFv */
|
||||
Z2SeqMgr::Z2SeqMgr() : JASGlobalInstance<Z2SeqMgr>(this) {
|
||||
Z2SeqMgr::Z2SeqMgr() : JASGlobalInstance<Z2SeqMgr>(true) {
|
||||
mMainBgmMaster.forceIn();
|
||||
mSubBgmMaster.forceIn();
|
||||
mBgmPause.forceIn();
|
||||
|
|
@ -28,6 +28,12 @@ Z2SeqMgr::Z2SeqMgr() : JASGlobalInstance<Z2SeqMgr>(this) {
|
|||
mTwilightGateVol = 1.0f;
|
||||
mAllBgmMaster.forceIn();
|
||||
field_0xa4.forceIn();
|
||||
|
||||
#ifdef DEBUG
|
||||
field_0x00_debug = 1.0f;
|
||||
field_0x04_debug = 0;
|
||||
#endif
|
||||
|
||||
field_0xb8 = -1;
|
||||
resetBattleBgmParams();
|
||||
mBgmStatus = 0xff;
|
||||
|
|
@ -1931,10 +1937,8 @@ void Z2SeqMgr::startBattleBgm(bool i_fade) {
|
|||
}
|
||||
|
||||
/* 802B5204-802B545C 2AFB44 0258+00 3/3 1/1 0/0 .text stopBattleBgm__8Z2SeqMgrFUcUc */
|
||||
// NONMATCHING regalloc
|
||||
void Z2SeqMgr::stopBattleBgm(u8 param_0, u8 param_1) {
|
||||
if (mBattleSeqCount == 0) {
|
||||
u8 count;
|
||||
s16 ivar6 = 0;
|
||||
if (Z2GetLink() != NULL) {
|
||||
ivar6 = Z2GetLink()->getMoveSpeed() - 23;
|
||||
|
|
@ -1946,20 +1950,22 @@ void Z2SeqMgr::stopBattleBgm(u8 param_0, u8 param_1) {
|
|||
ivar6 = struct_80450861;
|
||||
}
|
||||
if (getSubBgmID() == Z2BGM_BATTLE_NORMAL) {
|
||||
u8 count_out = struct_80450861 + ivar6;
|
||||
count = struct_80450862 + ivar6 / 2;
|
||||
mSubBgmHandle->fadeOut(count_out);
|
||||
mBattleSeqCount = count_out;
|
||||
param_0 = struct_80450861 + ivar6;
|
||||
param_1 = struct_80450862 + ivar6 / 2;
|
||||
mSubBgmHandle->fadeOut(param_0);
|
||||
mBattleSeqCount = param_0;
|
||||
} else if (getSubBgmID() == Z2BGM_BATTLE_TWILIGHT) {
|
||||
if (mSubBgmStatus > 1) {
|
||||
count = struct_80450861 + ivar6 / 4;
|
||||
param_0 = struct_80450861 + ivar6 / 4;
|
||||
param_1 = struct_80450861 + ivar6 / 4;
|
||||
} else {
|
||||
count = 25 + ivar6 / 4;
|
||||
param_0 = 25 + ivar6 / 4;
|
||||
param_1 = 25 + ivar6 / 4;
|
||||
}
|
||||
mSubBgmHandle->fadeOut(count);
|
||||
mBattleSeqCount = count;
|
||||
mSubBgmHandle->fadeOut(param_0);
|
||||
mBattleSeqCount = param_0;
|
||||
}
|
||||
mMainBgmMaster.fadeIn(count);
|
||||
mMainBgmMaster.fadeIn(param_1);
|
||||
mBattleDistState = 3;
|
||||
setBattleDistIgnore(false);
|
||||
mFlags.mBattleSearched = false;
|
||||
|
|
|
|||
|
|
@ -490,7 +490,7 @@ void Z2SpeechMgr2::setString(u16 const* s, s16 i_textNum, u8 i_speaker, u16 i_mo
|
|||
|
||||
if (i_textNum > 500) {
|
||||
mTextNum = 500;
|
||||
JUT_WARN_1(387, "TOO MANY TEXT : now(%d) > max(%d)", i_textNum, 500);
|
||||
JUT_WARN_DEVICE(387, 1, "TOO MANY TEXT : now(%d) > max(%d)", i_textNum, 500);
|
||||
} else {
|
||||
mTextNum = i_textNum;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
|
||||
#include "m_Do/m_Do_machine.h"
|
||||
#include "JSystem/JFramework/JFWSystem.h"
|
||||
#include "JSystem/JKernel/JKRHeap.h"
|
||||
#include "JSystem/JUtility/JUTConsole.h"
|
||||
#include "JSystem/JUtility/JUTDbPrint.h"
|
||||
#include "JSystem/JUtility/JUTException.h"
|
||||
|
|
@ -27,6 +28,12 @@
|
|||
/* 80450BF0-80450BF4 0000F0 0004+00 1/1 0/0 0/0 .sbss None */
|
||||
static u8 mDebugFill;
|
||||
|
||||
#ifdef DEBUG
|
||||
static u8 mDebugFillNotuse;
|
||||
static u8 mDebugFillNew;
|
||||
static u8 mDebugFillDelete;
|
||||
#endif
|
||||
|
||||
/* 80450BF4-80450BF8 0000F4 0004+00 1/1 0/0 0/0 .sbss solidHeapErrors */
|
||||
static int solidHeapErrors;
|
||||
|
||||
|
|
@ -479,13 +486,21 @@ int mDoMch_Create() {
|
|||
}
|
||||
|
||||
JKRHeap::setDefaultDebugFill(mDebugFill);
|
||||
#ifdef DEBUG
|
||||
JKRSetDebugFillNotuse(mDebugFillNotuse);
|
||||
JKRSetDebugFillNew(mDebugFillNew);
|
||||
JKRSetDebugFillDelete(mDebugFillDelete);
|
||||
#endif
|
||||
JFWSystem::setMaxStdHeap(1);
|
||||
|
||||
#ifndef DEBUG
|
||||
u32 arenaHi = (u32)OSGetArenaHi();
|
||||
u32 arenaLo = (u32)OSGetArenaLo();
|
||||
u32 arenaLo =(u32)OSGetArenaLo();
|
||||
|
||||
if (arenaHi > 0x81800000 && arenaHi - 0x1800000 > arenaLo) {
|
||||
OSSetArenaHi((void*)(arenaHi - 0x1800000));
|
||||
}
|
||||
#endif
|
||||
|
||||
u32 arenaSize = ((u32)OSGetArenaHi() - (u32)OSGetArenaLo()) - 0xF0;
|
||||
my_PrintHeap("アリーナ", arenaSize);
|
||||
|
|
@ -494,6 +509,23 @@ int mDoMch_Create() {
|
|||
arenaSize += mDoMain::memMargin;
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
u32 uVar14 = 0xf20c00;
|
||||
u32 local_1c = 0x74e000;
|
||||
if (mDoMain::archiveHeapSize == -1) {
|
||||
mDoMain::archiveHeapSize = 0x106ec00;
|
||||
} else {
|
||||
OSReport_Error("アーカイブヒープサイズ指定!\n");
|
||||
uVar14 = mDoMain::archiveHeapSize;
|
||||
}
|
||||
if (mDoMain::gameHeapSize == -1) {
|
||||
mDoMain::gameHeapSize = 0x74e000;
|
||||
} else {
|
||||
OSReport_Error("ゲームヒープサイズ指定!\n");
|
||||
local_1c = mDoMain::gameHeapSize;
|
||||
}
|
||||
#endif
|
||||
|
||||
JFWSystem::setSysHeapSize(arenaSize - 0xDACD30);
|
||||
my_PrintHeap("システムヒープ", arenaSize - 0xDACD30);
|
||||
|
||||
|
|
|
|||
|
|
@ -169,6 +169,11 @@ s8 mDoMain::developmentMode = -1;
|
|||
/* 80450584-80450588 000004 0004+00 0/0 1/1 0/0 .sdata memMargin__7mDoMain */
|
||||
u32 mDoMain::memMargin = 0xFFFFFFFF;
|
||||
|
||||
#ifdef DEBUG
|
||||
u32 mDoMain::archiveHeapSize;
|
||||
u32 mDoMain::gameHeapSize;
|
||||
#endif
|
||||
|
||||
/* 80450588-80450590 000008 0008+00 2/2 0/0 0/0 .sdata None */
|
||||
u8 mDoMain::mHeapBriefType = 4;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue