mirror of
https://github.com/zeldaret/tp
synced 2026-09-01 17:49:58 -04:00
d_file_select, JASResArcLoader, d_a_obj_stone, d_a_obj_stone_mark (#309)
* setup TU * JASResArcLoader OK * d_a_obj_stoneMark work * some funcs in d_a_obj_stoneMark * many changes * quat, d_a_obj_stone, d_a_alink, fix python script, tidy makefile * d_file_select functions + pr cleanup
This commit is contained in:
@@ -155,7 +155,7 @@ SECTION_DATA extern void* __vt__12J3DMtxBuffer[3] = {
|
||||
|
||||
/* 80327184-80327300 321AC4 017C+00 0/0 3/3 0/0 .text
|
||||
* entryModelData__8J3DModelFP12J3DModelDataUlUl */
|
||||
s32 J3DModel::entryModelData(J3DModelData* p_modelData, u32 param_1, u32 param_2) {
|
||||
s32 J3DModel::entryModelData(J3DModelData* p_modelData, u32 modelFlag, u32 mtxBufferFlag) {
|
||||
mModelData = p_modelData;
|
||||
mMtxBuffer = new J3DMtxBuffer();
|
||||
|
||||
@@ -163,37 +163,37 @@ s32 J3DModel::entryModelData(J3DModelData* p_modelData, u32 param_1, u32 param_2
|
||||
return 4;
|
||||
}
|
||||
|
||||
switch (mMtxBuffer->create(p_modelData, param_2)) {
|
||||
switch (mMtxBuffer->create(p_modelData, mtxBufferFlag)) {
|
||||
case 0:
|
||||
switch (createShapePacket(p_modelData)) {
|
||||
case 0:
|
||||
switch (createMatPacket(p_modelData, param_1)) {
|
||||
switch (createMatPacket(p_modelData, modelFlag)) {
|
||||
case 0:
|
||||
mVertexBuffer.setVertexData(&p_modelData->getVertexData());
|
||||
prepareShapePackets();
|
||||
|
||||
if (param_1 & 0x1) {
|
||||
onFlag(0x1);
|
||||
if (modelFlag & J3DMdlFlag_Unk00001) {
|
||||
onFlag(J3DMdlFlag_Unk00001);
|
||||
}
|
||||
if (param_1 & 0x2) {
|
||||
onFlag(0x2);
|
||||
if (modelFlag & J3DMdlFlag_Unk00002) {
|
||||
onFlag(J3DMdlFlag_Unk00002);
|
||||
}
|
||||
if (param_1 & 0x10) {
|
||||
onFlag(0x10);
|
||||
if (modelFlag & J3DMdlFlag_Unk00010) {
|
||||
onFlag(J3DMdlFlag_Unk00010);
|
||||
}
|
||||
if (param_1 & 0x20000) {
|
||||
onFlag(0x20000);
|
||||
if (modelFlag & J3DMdlFlag_Unk20000) {
|
||||
onFlag(J3DMdlFlag_Unk20000);
|
||||
}
|
||||
if (param_1 & 0x40000) {
|
||||
onFlag(0x40000);
|
||||
if (modelFlag & J3DMdlFlag_Unk40000) {
|
||||
onFlag(J3DMdlFlag_Unk40000);
|
||||
}
|
||||
if (param_1 & 0x80000) {
|
||||
onFlag(0x80000);
|
||||
if (modelFlag & J3DMdlFlag_Unk80000) {
|
||||
onFlag(J3DMdlFlag_Unk80000);
|
||||
}
|
||||
if (param_1 & J3DMdlFlag_SkinPosCpu) {
|
||||
if (modelFlag & J3DMdlFlag_SkinPosCpu) {
|
||||
onFlag(J3DMdlFlag_SkinPosCpu);
|
||||
}
|
||||
if (param_1 & J3DMdlFlag_SkinNrmCpu) {
|
||||
if (modelFlag & J3DMdlFlag_SkinNrmCpu) {
|
||||
onFlag(J3DMdlFlag_SkinNrmCpu);
|
||||
}
|
||||
return 0;
|
||||
|
||||
@@ -326,7 +326,7 @@ J3DShapePacket::~J3DShapePacket() {}
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm u32 J3DShapePacket::calcDifferedBufferSize(u32 param_0) {
|
||||
asm u32 J3DShapePacket::calcDifferedBufferSize(u32 flag) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/J3DGraphBase/J3DPacket/calcDifferedBufferSize__14J3DShapePacketFUl.s"
|
||||
}
|
||||
|
||||
@@ -1,100 +1,70 @@
|
||||
//
|
||||
// Generated By: dol2asm
|
||||
// Translation Unit: JASResArcLoader
|
||||
//
|
||||
/**
|
||||
* JASResArcLoader.cpp
|
||||
* JAS - Resource Archive Loader
|
||||
*/
|
||||
|
||||
#include "JSystem/JAudio2/JASResArcLoader.h"
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/types.h"
|
||||
#include "JSystem/JAudio2/JASDvdThread.h"
|
||||
|
||||
//
|
||||
// Types:
|
||||
//
|
||||
|
||||
struct JKRArchive {
|
||||
/* 802D5F40 */ void readResource(void*, u32, u16);
|
||||
/* 802D6684 */ void findIdxResource(u32) const;
|
||||
/* 802D6770 */ void findIdResource(u16) const;
|
||||
};
|
||||
|
||||
struct JASTaskThread {
|
||||
/* 8028FB5C */ void sendCmdMsg(void (*)(void*), void const*, u32);
|
||||
};
|
||||
|
||||
struct JASResArcLoader {
|
||||
/* 80290BD0 */ void getResSize(JKRArchive const*, u16);
|
||||
/* 80290C04 */ void getResMaxSize(JKRArchive const*);
|
||||
/* 80290C7C */ void loadResourceCallback(void*);
|
||||
/* 80290D18 */ void loadResourceAsync(JKRArchive*, u16, u8*, u32, void (*)(u32, u32), u32);
|
||||
};
|
||||
|
||||
//
|
||||
// Forward References:
|
||||
//
|
||||
|
||||
extern "C" void getResSize__15JASResArcLoaderFPC10JKRArchiveUs();
|
||||
extern "C" void getResMaxSize__15JASResArcLoaderFPC10JKRArchive();
|
||||
extern "C" void loadResourceCallback__15JASResArcLoaderFPv();
|
||||
extern "C" void loadResourceAsync__15JASResArcLoaderFP10JKRArchiveUsPUcUlPFUlUl_vUl();
|
||||
|
||||
//
|
||||
// External References:
|
||||
//
|
||||
|
||||
extern "C" void sendCmdMsg__13JASTaskThreadFPFPv_vPCvUl();
|
||||
extern "C" void getThreadPointer__6JASDvdFv();
|
||||
extern "C" void readResource__10JKRArchiveFPvUlUs();
|
||||
extern "C" void findIdxResource__10JKRArchiveCFUl();
|
||||
extern "C" void findIdResource__10JKRArchiveCFUs();
|
||||
extern "C" void OSSendMessage();
|
||||
extern "C" void _savegpr_28();
|
||||
extern "C" void _restgpr_28();
|
||||
|
||||
//
|
||||
// Declarations:
|
||||
//
|
||||
|
||||
/* 80290BD0-80290C04 28B510 0034+00 0/0 2/2 0/0 .text
|
||||
* getResSize__15JASResArcLoaderFPC10JKRArchiveUs */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JASResArcLoader::getResSize(JKRArchive const* param_0, u16 param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JAudio2/JASResArcLoader/getResSize__15JASResArcLoaderFPC10JKRArchiveUs.s"
|
||||
size_t JASResArcLoader::getResSize(JKRArchive const* i_archiveP, u16 i_resourceID) {
|
||||
JKRArchive::SDIFileEntry* file = i_archiveP->findIdResource(i_resourceID);
|
||||
|
||||
if (file == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return file->data_size;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 80290C04-80290C7C 28B544 0078+00 0/0 1/1 0/0 .text
|
||||
* getResMaxSize__15JASResArcLoaderFPC10JKRArchive */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JASResArcLoader::getResMaxSize(JKRArchive const* param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JAudio2/JASResArcLoader/getResMaxSize__15JASResArcLoaderFPC10JKRArchive.s"
|
||||
size_t JASResArcLoader::getResMaxSize(JKRArchive const* i_archiveP) {
|
||||
u32 maxSize, index;
|
||||
u32 fileEntries = i_archiveP->countFile();
|
||||
|
||||
for (maxSize = 0, index = 0; index < fileEntries; index++) {
|
||||
JKRArchive::SDIFileEntry* file = i_archiveP->findIdxResource(index);
|
||||
if (file) {
|
||||
if (maxSize < file->data_size) {
|
||||
maxSize = file->data_size;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return maxSize;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 80290C7C-80290D18 28B5BC 009C+00 1/1 0/0 0/0 .text loadResourceCallback__15JASResArcLoaderFPv
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JASResArcLoader::loadResourceCallback(void* param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JAudio2/JASResArcLoader/loadResourceCallback__15JASResArcLoaderFPv.s"
|
||||
static void JASResArcLoader::loadResourceCallback(void* args) {
|
||||
CallbackArgs* castedArgs = static_cast<CallbackArgs*>(args);
|
||||
u32 readResult = castedArgs->mArchive->readResource(castedArgs->mBuffer, castedArgs->mBufferSize, castedArgs->mID);
|
||||
if (castedArgs->mCallback) {
|
||||
castedArgs->mCallback(readResult, castedArgs->mCallbackArg);
|
||||
}
|
||||
|
||||
if (readResult == 0) {
|
||||
if (castedArgs->mQueue) {
|
||||
OSSendMessage(castedArgs->mQueue, (void*)RESARCMSG_Error, OS_MESSAGE_BLOCK);
|
||||
}
|
||||
} else {
|
||||
if (castedArgs->mQueue) {
|
||||
OSSendMessage(castedArgs->mQueue, (void*)RESARCMSG_Success, OS_MESSAGE_BLOCK);
|
||||
}
|
||||
}
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 80290D18-80290D74 28B658 005C+00 0/0 1/1 0/0 .text
|
||||
* loadResourceAsync__15JASResArcLoaderFP10JKRArchiveUsPUcUlPFUlUl_vUl */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JASResArcLoader::loadResourceAsync(JKRArchive* param_0, u16 param_1, u8* param_2,
|
||||
u32 param_3, void (*param_4)(u32, u32), u32 param_5) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JAudio2/JASResArcLoader/loadResourceAsync__15JASResArcLoaderFP10JKRArchiveUsPUcUlPFUlUl_vUl.s"
|
||||
|
||||
int JASResArcLoader::loadResourceAsync(JKRArchive* archive, u16 id, u8* buffer, u32 size, LoadCallback callback, u32 cbArg)
|
||||
{
|
||||
CallbackArgs args(id, buffer, size, archive);
|
||||
args.mCallback = callback;
|
||||
args.mCallbackArg = cbArg;
|
||||
|
||||
return JASDvd::getThreadPointer()->sendCmdMsg(&loadResourceCallback, (void*)&args, sizeof(CallbackArgs));
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
+82
-11
@@ -1,23 +1,41 @@
|
||||
//
|
||||
// Generated By: dol2asm
|
||||
// Translation Unit: quat
|
||||
//
|
||||
/**
|
||||
* quat.c
|
||||
* Dolphin - Matrix Quaternion Functions
|
||||
*/
|
||||
|
||||
#include "dolphin/mtx/quat.h"
|
||||
#include "MSL_C/math.h"
|
||||
#include "dol2asm.h"
|
||||
|
||||
//
|
||||
// Declarations:
|
||||
//
|
||||
|
||||
/* 80347418-80347474 341D58 005C+00 0/0 0/0 2/2 .text PSQUATMultiply */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void PSQUATMultiply(const Quaternion* a, const Quaternion* b, Quaternion* ab) {
|
||||
asm void PSQUATMultiply(register const Quaternion* a, register const Quaternion* b, register Quaternion* ab) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/mtx/quat/PSQUATMultiply.s"
|
||||
|
||||
psq_l f0, 0(a), 0, 0
|
||||
psq_l f1, 8(a), 0, 0
|
||||
psq_l f2, 0(b), 0, 0
|
||||
ps_neg f5, f0
|
||||
psq_l f3, 8(b), 0, 0
|
||||
ps_neg f6, f1
|
||||
ps_merge01 f4, f5, f0
|
||||
ps_muls0 f7, f1, f2
|
||||
ps_muls0 f5, f5, f2
|
||||
ps_merge01 f1, f6, f1
|
||||
ps_muls1 f8, f4, f2
|
||||
ps_madds0 f7, f4, f3, f7
|
||||
ps_muls1 f2, f1, f2
|
||||
ps_madds0 f5, f1, f3, f5
|
||||
ps_madds1 f8, f6, f3, f8
|
||||
ps_merge10 f7, f7, f7
|
||||
ps_madds1 f2, f0, f3, f2
|
||||
ps_merge10 f5, f5, f5
|
||||
ps_add f7, f7, f2
|
||||
psq_st f7, 0(ab), 0, 0
|
||||
ps_sub f5, f5, f8
|
||||
psq_st f5, 8(ab), 0, 0
|
||||
blr
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
@@ -37,6 +55,26 @@ SECTION_SDATA2 static f32 lit_133 = 1.0f;
|
||||
SECTION_SDATA2 static f32 lit_135 = 0.5f;
|
||||
|
||||
/* 80347474-80347500 341DB4 008C+00 0/0 1/1 0/0 .text C_QUATRotAxisRad */
|
||||
#ifdef NONMATCHING
|
||||
// matches with literals
|
||||
void C_QUATRotAxisRad(Quaternion* q, const Vec* axis, f32 rad) {
|
||||
f32 tmp,tmp2,tmp3;
|
||||
Vec dst;
|
||||
|
||||
tmp = rad;
|
||||
PSVECNormalize(axis,&dst);
|
||||
|
||||
tmp2 = tmp * 0.5f;
|
||||
tmp3 = sinf(tmp* 0.5f);
|
||||
tmp = tmp3;
|
||||
tmp3 = cosf(tmp2);
|
||||
|
||||
q->x = tmp * dst.x;
|
||||
q->y = tmp * dst.y;
|
||||
q->z = tmp * dst.z;
|
||||
q->w = tmp3;
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
@@ -45,12 +83,44 @@ asm void C_QUATRotAxisRad(Quaternion* q, const Vec* axis, f32 rad) {
|
||||
#include "asm/dolphin/mtx/quat/C_QUATRotAxisRad.s"
|
||||
}
|
||||
#pragma pop
|
||||
#endif
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 8045655C-80456560 004B5C 0004+00 1/1 0/0 0/0 .sdata2 @261 */
|
||||
SECTION_SDATA2 static f32 lit_261 = 0.9999899864196777f;
|
||||
|
||||
/* 80347500-80347674 341E40 0174+00 0/0 0/0 2/2 .text C_QUATSlerp */
|
||||
#ifdef NONMATCHING
|
||||
// matches with literals
|
||||
void C_QUATSlerp(const Quaternion* p, const Quaternion* q, Quaternion* r, f32 t) {
|
||||
f32 ratioA, ratioB;
|
||||
|
||||
f32 value = 1.0f;
|
||||
f32 cosHalfTheta = p->x*q->x + p->y*q->y + p->z*q->z + p->w*q->w;
|
||||
|
||||
if (cosHalfTheta < 0.0f) {
|
||||
cosHalfTheta = -cosHalfTheta;
|
||||
value = -value;
|
||||
}
|
||||
|
||||
if (cosHalfTheta <= 0.9999899864196777f) {
|
||||
f32 halfTheta = acosf(cosHalfTheta);
|
||||
f32 sinHalfTheta = sinf(halfTheta);
|
||||
|
||||
ratioA = sinf((1.0f - t) * halfTheta) / sinHalfTheta;
|
||||
ratioB = sinf(t * halfTheta) / sinHalfTheta;
|
||||
value *= ratioB;
|
||||
} else {
|
||||
ratioA = 1.0f - t;
|
||||
value *= t;
|
||||
}
|
||||
|
||||
r->x = (ratioA * p->x) + (value * q->x);
|
||||
r->y = (ratioA * p->y) + (value * q->y);
|
||||
r->z = (ratioA * p->z) + (value * q->z);
|
||||
r->w = (ratioA * p->w) + (value * q->w);
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
@@ -59,3 +129,4 @@ asm void C_QUATSlerp(const Quaternion* p, const Quaternion* q, Quaternion* r, f3
|
||||
#include "asm/dolphin/mtx/quat/C_QUATSlerp.s"
|
||||
}
|
||||
#pragma pop
|
||||
#endif
|
||||
Reference in New Issue
Block a user