Ongoing gameplay dev (#49)

* launch.json cwd

* bodge to load gci for testing

* stub card stat

* gameplay bodges

* viewport, ub fixes

* add release with debug info cmake variant

* be fixes, sound stub

* viewport h

* d_msg_flow BE

* be fopAcM_createItemFromEnemyID

* update launch configuration to use iso

* more audio stubs

* Attempt to set viewport and get messages for brightness check

* skip opening scene again, fixed JMessage::TResourceContainer::TCResource::Do_destroy

* add guards for viewport changes

* moar endian swapping to get Link sitting in PROC_OPENING_SCENE and for dialogues

* BE d_msg_class i_data

* stub bgm start

* fix div by 0 error (for now)

* TEMP_BROKEN in d_menu_ring

* REQUIRES_GX_LINES

* properly stub renderingAmap::draw with REQUIRES_GX_LINES

* better stubbing outside of stubs

* fix event data getting swapped multiple times

* evil draw vp fix

* Stub log imgui

This redirects all spammy logs to an imgui window that is cleared per frame.

This fixes the serious performance dip of the logging, and makes the regular log readable.

* Oops move those optimization changes I accidentally committed behind a flag

DUSK_SELECTED_OPT

* gx_line macro in map

* fix audio stubbing

* switch to CARD API aurora impl

* remove kabufuda from link libs

* refactor imgui stuff and add input viewer

* merge stub log with refactor

* accidentally committed a metaforce header shh

* basic map loader

* ImGuiConsole: Add missing <thread> include

* you may now play as luigi (you may now load stages with bridges)

* bloom fix

* bloom leak fix

* cloud shadow fix

* add soft reset button to imgui menu

* if it broke dont not fix it

* i swear i committed this

* BE swap indMtx in JPAResource::setPTev

* wnark ct fix

* frsqrte implementation from kinoko

* Fix Clang compile error in JAISeq::prepare_getSeqData_

* Add endian conversions to dMsgFlow_c::getInitNodeIndex

This fixes a freeze when Fado tries to stop you from leaving the
starting area.

* Add RAII GXTexObj wrapper; fix almost all leaks

* Update aurora for indirect texturing

* Update aurora for CARD fix

* Fix Clang build

* More d_msg_flow endian fixes

Fixes softlock when trying to talk to Fado and possibly other NPCs.

* no frame limiter

* get pause menu working

* proper frame limiting

* particle pointer size fix

* improve map loader a bit

---------

Co-authored-by: Jasper St. Pierre <jstpierre@mecheye.net>
Co-authored-by: TakaRikka <takarikka@outlook.com>
Co-authored-by: CraftyBoss <talibabdulmaalik@gmail.com>
Co-authored-by: Luke Street <luke@street.dev>
Co-authored-by: Lurs <2795933+Lurs@users.noreply.github.com>
Co-authored-by: PJB3005 <pieterjan.briers+git@gmail.com>
Co-authored-by: tgsm <doodrabbit@hotmail.com>
Co-authored-by: Max Roncace <me@caseif.net>
Co-authored-by: Phillip Stephens <antidote.crk@gmail.com>
This commit is contained in:
qwertyquerty
2026-03-12 04:01:03 -07:00
committed by GitHub
parent 15732e241c
commit 767ba3bb14
129 changed files with 2270 additions and 1541 deletions
+2 -2
View File
@@ -28,11 +28,11 @@ J2DWindowEx::J2DWindowEx(J2DPane* param_0, JSURandomInputStream* param_1, u32 pa
mAnmVisibilityFull = NULL;
mAnmVtxColor = NULL;
s32 position = param_1->getPosition();
int uStack_88[2];
BE(int) uStack_88[2];
param_1->read(uStack_88, 8);
mKind = uStack_88[0];
s32 iVar2 = param_1->getPosition();
int auStack_90[2];
BE(int) auStack_90[2];
param_1->peek(auStack_90, 8);
makePaneExStream(param_0, param_1);
param_1->seek(iVar2 + auStack_90[1], JSUStreamSeekFrom_SET);
+4 -8
View File
@@ -350,11 +350,8 @@ void J3DGDSetTexImgAttr(GXTexMapID id, u16 width, u16 height, GXTexFmt format) {
}
void J3DGDSetTexImgPtr(GXTexMapID id, void* image_ptr) {
#if TARGET_PC
STUB_LOG();
#else
STUB_RET();
J3DGDWriteBPCmd(BP_IMAGE_PTR(OSCachedToPhysical(image_ptr) >> 5, J3DGDTexImage3Ids[id]));
#endif
}
void J3DGDSetTexImgPtrRaw(GXTexMapID id, u32 image_ptr_raw) {
@@ -372,10 +369,9 @@ void J3DGDLoadTlut(void* tlut_ptr, u32 tmem_addr, GXTlutSize size) {
J3DGDWriteBPCmd(0xFEFFFF00);
J3DGDWriteBPCmd(0xF000000);
#if TARGET_PC
STUB_LOG();
return;
#endif
STUB_RET();
J3DGDWriteBPCmd(BP_LOAD_TLUT0(OSCachedToPhysical(tlut_ptr) >> 5, 0x64));
J3DGDWriteBPCmd(BP_LOAD_TLUT1((tmem_addr - 0x80000) >> 9, size, 0x65));
J3DGDWriteBPCmd(0xFEFFFF00);
+4 -3
View File
@@ -1,9 +1,10 @@
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/J3DGraphBase/J3DFifo.h"
#include "JSystem/J3DGraphBase/J3DSys.h"
#include "JSystem/J3DGraphBase/J3DTevs.h"
#include "JSystem/J3DGraphBase/J3DTexture.h"
#include "JSystem/J3DGraphBase/J3DFifo.h"
#include "dusk/gx_helper.h"
#include "global.h"
J3DSys j3dSys;
@@ -265,14 +266,14 @@ void J3DSys::reinitTransform() {
void J3DSys::reinitTexture() {
#if TARGET_PC
static GXTexObj texObj;
static TGXTexObj texObj;
static bool initialized = false;
if (!initialized) {
GXInitTexObj(&texObj, NullTexData, 4, 4, GX_TF_IA8, GX_CLAMP, GX_CLAMP, GX_FALSE);
initialized = true;
}
#else
GXTexObj texObj;
TGXTexObj texObj;
GXInitTexObj(&texObj, NullTexData, 4, 4, GX_TF_IA8, GX_CLAMP, GX_CLAMP, GX_FALSE);
#endif
GXLoadTexObj(&texObj, GX_TEXMAP0);
+3 -3
View File
@@ -22,7 +22,7 @@ void J3DTexture::loadGX(u16 idx, GXTexMapID texMapID) const {
}
GXLoadTexObj(&mpTexObj[idx], texMapID);
#else
GXTexObj texObj;
TGXTexObj texObj;
GXTlutObj tlutObj;
if (!timg->indexTexture) {
@@ -54,7 +54,7 @@ void J3DTexture::loadGXTexObj(u16 idx) {
ResTIMG* timg = getResTIMG(idx);
GXTlutObj& tlutObj = mpTlutObj[idx];
GXTexObj& texObj = mpTexObj[idx];
TGXTexObj& texObj = mpTexObj[idx];
if (!timg->indexTexture) {
GXInitTexObj(&texObj, mpImgDataPtr[idx], timg->width, timg->height,
@@ -88,7 +88,7 @@ void J3DTexture::entryNum(u16 num) {
delete[] mpTlutObj;
delete[] mpImgDataPtr;
delete[] mpTlutDataPtr;
mpTexObj = new GXTexObj[num]();
mpTexObj = new TGXTexObj[num]();
mpTlutObj = new GXTlutObj[num]();
mpImgDataPtr = new u8*[num]();
mpTlutDataPtr = new u8*[num]();
@@ -22,7 +22,7 @@ void J3DGQRSetup7(u32 r0, u32 r1, u32 r2, u32 r3) {
}
// this uses a non-standard sqrtf, not sure why or how its supposed to be setup
#if !PLATFORM_SHIELD
#if !PLATFORM_SHIELD && !TARGET_PC
inline f32 J3D_sqrtf(__REGISTER f32 x) {
__REGISTER f32 recip;
@@ -545,6 +545,8 @@ J3DTexMtx* J3DMaterialFactory::newTexMtx(int i_idx, int i_no) const {
be_swap(tex_mtx_info.mSRT.mRotation);
be_swap(tex_mtx_info.mSRT.mTranslationX);
be_swap(tex_mtx_info.mSRT.mTranslationY);
for (int i = 0; i < 16; i++)
be_swap(tex_mtx_info.mEffectMtx[i / 4][i % 4]);
tex_mtx = JKR_NEW J3DTexMtx(tex_mtx_info);
#else
tex_mtx = JKR_NEW J3DTexMtx(mpTexMtxInfo[mtl_init_data->mTexMtxIdx[i_no]]);
+1 -1
View File
@@ -108,7 +108,7 @@ bool JAISeq::prepare_getSeqData_() {
switch (seqDataMgr->getSeqData(getID(), &inner_.mSeqData)) {
case 0:
OS_REPORT("Failed In Loading Sequence Data:SEQ(0x%08x)\n", getID());
OS_REPORT("Failed In Loading Sequence Data:SEQ(0x%08x)\n", (u32)getID());
status_.state.unk = 2;
break;
case 1:
+7 -10
View File
@@ -2,7 +2,9 @@
#include <dolphin/gx.h>
#include <dolphin/vi.h>
#include <gx.h>
#include <stdint.h>
#include <vi.h>
#include "JSystem/J2DGraph/J2DOrthoGraph.h"
#include "JSystem/JFramework/JFWDisplay.h"
#include "JSystem/JKernel/JKRHeap.h"
@@ -10,13 +12,10 @@
#include "JSystem/JUtility/JUTConsole.h"
#include "JSystem/JUtility/JUTDbPrint.h"
#include "JSystem/JUtility/JUTProcBar.h"
#include <gx.h>
#include <vi.h>
#include "global.h"
#include "aurora/aurora.h"
#include "global.h"
#include "JSystem/JKernel/JKRHeap.h"
#include "dusk/gx_helper.h"
#include "dusk/logging.h"
#include "global.h"
void JFWDisplay::ctor_subroutine(bool enableAlpha) {
mEnableAlpha = enableAlpha;
@@ -419,7 +418,7 @@ static u8 clear_z_TX[64] ATTRIBUTE_ALIGN(32) = {
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
};
static GXTexObj clear_z_tobj;
static TGXTexObj clear_z_tobj;
void JFWDisplay::clearEfb_init() {
GXInitTexObj(&clear_z_tobj, &clear_z_TX, 4, 4, GX_TF_Z24X8, GX_REPEAT, GX_REPEAT, GX_FALSE);
@@ -439,10 +438,8 @@ void JFWDisplay::clearEfb(GXColor color) {
}
void JFWDisplay::clearEfb(int param_0, int param_1, int param_2, int param_3, GXColor color) {
#if TARGET_PC
STUB_LOG();
return;
#endif
STUB_RET();
u16 width;
u16 height;
Mtx44 mtx;
+10 -3
View File
@@ -14,6 +14,9 @@ u32 JKRArchive::sCurrentDirID;
JKRArchive::JKRArchive() {
mIsMounted = false;
mMountDirection = MOUNT_DIRECTION_HEAD;
#if TARGET_PC
mFileData = nullptr;
#endif
}
JKRArchive::JKRArchive(s32 entryNumber, JKRArchive::EMountMode mountMode) {
@@ -21,6 +24,9 @@ JKRArchive::JKRArchive(s32 entryNumber, JKRArchive::EMountMode mountMode) {
mMountMode = mountMode;
mMountCount = 1;
field_0x58 = 1;
#if TARGET_PC
mFileData = nullptr;
#endif
mHeap = JKRHeap::findFromRoot(this);
if (mHeap == NULL) {
@@ -37,7 +43,7 @@ JKRArchive::JKRArchive(s32 entryNumber, JKRArchive::EMountMode mountMode) {
JKRArchive::~JKRArchive() {
#if TARGET_PC
if (mFileData != nullptr) {
mHeap->free(mFileData);
JKRHeap::getSystemHeap()->free(mFileData);
mFileData = nullptr;
}
#endif
@@ -251,11 +257,12 @@ void JKRArchive::initFileDataPointers() {
assert(mFiles);
if (mFileData != nullptr) {
mHeap->free(mFileData);
JKRHeap::getSystemHeap()->free(mFileData);
mFileData = nullptr;
}
mFileData = static_cast<void**>(
mHeap->alloc(mArcInfoBlock->num_file_entries * sizeof(void*), alignof(void*)));
JKRHeap::getSystemHeap()->alloc(mArcInfoBlock->num_file_entries * sizeof(void*), alignof(void*)));
memset(mFileData, 0, mArcInfoBlock->num_file_entries * sizeof(void*));
-2
View File
@@ -103,8 +103,6 @@ void JMAVECScaleAdd(__REGISTER const Vec* vec1, __REGISTER const Vec* vec2, __RE
dst->y = vec1->y * scale + vec2->y;
dst->z = vec1->z * scale + vec2->z;
#endif // clang-format on
OSPanic(__FILE__, __LINE__, "UNIMPLEMENTED");
}
void JMAMTXApplyScale(__REGISTER const Mtx src, __REGISTER Mtx dst, __REGISTER f32 xScale,
+4 -4
View File
@@ -65,12 +65,12 @@ u16 JMessage::TResource::toMessageIndex_messageID(u32 uMsgID, u32 upperHalf, boo
int nMsgNumber = oParse_TBlock_messageID_.get_number();
const u32* pContent = (u32*)oParse_TBlock_messageID_.getContent();
const BE(u32)* pContent = (const BE(u32)*)oParse_TBlock_messageID_.getContent();
JUT_ASSERT(131, pContent!=NULL);
const u32* pFirst = pContent;
const u32* pLast = pFirst + nMsgNumber;
const u32* pEntry;
const BE(u32)* pFirst = pContent;
const BE(u32)* pLast = pFirst + nMsgNumber;
const BE(u32)* pEntry;
if (oParse_TBlock_messageID_.get_isOrdered()) {
pEntry = std::lower_bound(pFirst, pLast, uMsgValue);
@@ -66,8 +66,20 @@ static void JPAVolumeSphere(JPAEmitterWorkData* work) {
s16 phi, r28;
if (work->mpEmtr->checkFlag(JPADynFlag_FixedInterval)) {
phi = u16(work->mVolumeX * 0x8000 / (work->mDivNumber - 1) + 0x4000);
#if TARGET_PC
// Fix div by 0 error here
// TODO: maybe review a better way of handling div by 0 UB
r28 = 0x8000;
if (work->mVolumeAngleNum > 1) {
u16 r26 = u16(work->mVolumeAngleNum * 0x10000 / (work->mVolumeAngleMax - 1));
r28 += f32(r26) * work->mVolumeSweep + 0x8000;
}
#else
u16 r26 = u16(work->mVolumeAngleNum * 0x10000 / (work->mVolumeAngleMax - 1));
r28 = f32(r26) * work->mVolumeSweep + 0x8000;
#endif
work->mVolumeAngleNum++;
if (work->mVolumeAngleNum == work->mVolumeAngleMax) {
work->mVolumeAngleNum = 0;
+8 -2
View File
@@ -1,6 +1,10 @@
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JParticle/JPAResource.h"
#include <cstring>
#include <gx.h>
#include "JSystem/JKernel/JKRHeap.h"
#include "JSystem/JParticle/JPABaseShape.h"
#include "JSystem/JParticle/JPAChildShape.h"
@@ -11,7 +15,6 @@
#include "JSystem/JParticle/JPAKeyBlock.h"
#include "JSystem/JParticle/JPAParticle.h"
#include "JSystem/JParticle/JPAResourceManager.h"
#include <gx.h>
#include "global.h"
JPAResource::JPAResource() {
@@ -937,7 +940,10 @@ void JPAResource::setPTev() {
if (pEts->isUseIndirect()) {
GXSetIndTexOrder(GX_INDTEXSTAGE0, tex_coord, GX_TEXMAP2);
GXSetIndTexCoordScale(GX_INDTEXSTAGE0, GX_ITS_1, GX_ITS_1);
GXSetIndTexMtx(GX_ITM_0, (f32(*)[3])pEts->getIndTexMtx(), pEts->getExpScale());
f32 indMtx[6];
std::memcpy(indMtx, pEts->getIndTexMtx(), sizeof(indMtx));
be_swap(indMtx);
GXSetIndTexMtx(GX_ITM_0, indMtx, pEts->getExpScale());
GXSetTevIndirect(GX_TEVSTAGE0, GX_INDTEXSTAGE0, GX_ITF_8, GX_ITB_STU, GX_ITM_0,
GX_ITW_OFF, GX_ITW_OFF, 0, 0, GX_ITBA_OFF);
ind_stages++;
+3 -3
View File
@@ -261,17 +261,17 @@ void TObject::process_paragraph_reserved_(u32 arg1, const void* pContent, u32 uS
case 0x1:
ASSERT(pContent != NULL);
ASSERT(uSize == 4);
setFlag_operation_(*(u32*)pContent);
setFlag_operation_(*(BE(u32)*)pContent);
break;
case 0x2:
ASSERT(pContent != NULL);
ASSERT(uSize == 4);
setWait(*(u32*)pContent);
setWait(*(BE(u32)*)pContent);
break;
case 0x3: {
ASSERT(pContent != NULL);
ASSERT(uSize == 4);
const void* seq = getSequence_offset(*(s32*)pContent);
const void* seq = getSequence_offset(*(BE(s32)*)pContent);
setSequence_next(seq);
break;
}
@@ -153,7 +153,7 @@ void JStudio_JAudio2::TAdaptor_sound::adaptor_do_SOUND(JStudio::data::TEOperatio
case JStudio::data::UNK_0x19:
JUT_ASSERT(283, pContent!=NULL);
JUT_ASSERT(284, uSize==4);
field_0x124 = *(u32*)pContent;
field_0x124 = *(BE(u32)*)pContent;
prepareSound_();
break;
}
@@ -175,7 +175,7 @@ void JStudio_JAudio2::TAdaptor_sound::adaptor_do_BEGIN_FADE_IN(
case JStudio::data::UNK_0x2:
JUT_ASSERT(323, pContent!=NULL);
JUT_ASSERT(324, uSize==4);
beginSound_fadeIn_(*(f32*)pContent);
beginSound_fadeIn_(*(BE(f32)*)pContent);
break;
}
}
@@ -196,7 +196,7 @@ void JStudio_JAudio2::TAdaptor_sound::adaptor_do_END_FADE_OUT(
case JStudio::data::UNK_0x2:
JUT_ASSERT(364, pContent!=NULL);
JUT_ASSERT(365, uSize==4);
endSound_fadeOut_(*(f32*)pContent);
endSound_fadeOut_(*(BE(f32)*)pContent);
break;
}
}
@@ -235,7 +235,7 @@ void JStudio_JAudio2::TAdaptor_sound::adaptor_do_PARENT_NODE(JStudio::data::TEOp
case JStudio::data::UNK_0x19:
JUT_ASSERT(447, uSize==4);
JUT_ASSERT(448, pContent!=NULL);
field_0x140 = *(u32*)pContent;
field_0x140 = *(BE(u32)*)pContent;
break;
}
}
@@ -245,7 +245,7 @@ void JStudio_JAudio2::TAdaptor_sound::adaptor_do_PARENT_ENABLE(
if (param_1 == JStudio::data::UNK_0x2) {
JUT_ASSERT(468, uSize == 4);
JUT_ASSERT(469, pContent != NULL);
field_0x144 = *(u32*)pContent ? 1 : 0;
field_0x144 = *(BE(u32)*)pContent ? 1 : 0;
}
}
@@ -254,7 +254,7 @@ void JStudio_JAudio2::TAdaptor_sound::adaptor_do_REPEAT(JStudio::data::TEOperati
if (param_1 == JStudio::data::UNK_0x2) {
JUT_ASSERT(490, uSize == 4);
JUT_ASSERT(491, pContent != NULL);
field_0x11e = *(u32*)pContent ? 1 : 0;
field_0x11e = *(BE(u32)*)pContent ? 1 : 0;
}
}
@@ -263,7 +263,7 @@ void JStudio_JAudio2::TAdaptor_sound::adaptor_do_CONTINUOUS(JStudio::data::TEOpe
if (param_1 == JStudio::data::UNK_0x2) {
JUT_ASSERT(512, uSize == 4);
JUT_ASSERT(513, pContent != NULL);
field_0x11d = *(u32*)pContent ? 1 : 0;
field_0x11d = *(BE(u32)*)pContent ? 1 : 0;
}
}
@@ -272,7 +272,7 @@ void JStudio_JAudio2::TAdaptor_sound::adaptor_do_LOCATED(JStudio::data::TEOperat
if (param_1 == JStudio::data::UNK_0x2) {
JUT_ASSERT(534, pContent != NULL);
JUT_ASSERT(535, uSize == 4);
u32 val = *(u32*)pContent;
u32 val = *(BE(u32)*)pContent;
field_0x12c = NULL;
if (val != 0) {
field_0x12c = &field_0x130;
@@ -285,7 +285,7 @@ void JStudio_JAudio2::TAdaptor_sound::adaptor_do_ON_EXIT_NOT_END(
if (param_1 == JStudio::data::UNK_0x2) {
JUT_ASSERT(512, uSize == 4);
JUT_ASSERT(513, pContent != NULL);
field_0x11f = *(u32*)pContent ? 1 : 0;
field_0x11f = *(BE(u32)*)pContent ? 1 : 0;
}
}
@@ -104,7 +104,7 @@ void JStudio_JParticle::TAdaptor_particle::adaptor_do_PARTICLE(
if (param_1 == JStudio::data::UNK_0x19) {
JUT_ASSERT(232, uSize==4);
JUT_ASSERT(233, pContent!=NULL);
field_0x1bc = *(u32*)pContent;
field_0x1bc = *(BE(u32)*)pContent;
}
}
@@ -124,7 +124,7 @@ void JStudio_JParticle::TAdaptor_particle::adaptor_do_BEGIN_FADE_IN(
case JStudio::data::UNK_0x2:
JUT_ASSERT(272, pContent!=NULL);
JUT_ASSERT(273, uSize==4);
beginParticle_fadeIn_(*(f32*)pContent);
beginParticle_fadeIn_(*(BE(f32)*)pContent);
break;
}
}
@@ -143,7 +143,7 @@ void JStudio_JParticle::TAdaptor_particle::adaptor_do_END_FADE_OUT(
case JStudio::data::UNK_0x2:
JUT_ASSERT(336, pContent!=NULL);
JUT_ASSERT(337, uSize==4);
endParticle_fadeOut_(*(f32*)pContent);
endParticle_fadeOut_(*(BE(f32)*)pContent);
break;
}
}
@@ -182,7 +182,7 @@ void JStudio_JParticle::TAdaptor_particle::adaptor_do_PARENT_NODE(
case JStudio::data::UNK_0x19:
JUT_ASSERT(397, uSize==4);
JUT_ASSERT(396, pContent!=NULL);
field_0x1d4 = *(u32*)pContent;
field_0x1d4 = *(BE(u32)*)pContent;
break;
}
}
@@ -192,7 +192,7 @@ void JStudio_JParticle::TAdaptor_particle::adaptor_do_PARENT_ENABLE(JStudio::dat
if (param_1 == JStudio::data::UNK_0x2) {
JUT_ASSERT(417, uSize==4);
JUT_ASSERT(418, pContent!=NULL);
field_0x1d8 = *(u32*)pContent ? 1 : 0;
field_0x1d8 = *(BE(u32)*)pContent ? 1 : 0;
}
}
@@ -201,7 +201,7 @@ void JStudio_JParticle::TAdaptor_particle::adaptor_do_PARENT_FUNCTION(JStudio::d
if (param_1 == JStudio::data::UNK_0x2) {
JUT_ASSERT(439, uSize==4);
JUT_ASSERT(439, pContent!=NULL);
field_0x1cc = *(u32*)pContent;
field_0x1cc = *(BE(u32)*)pContent;
}
}
@@ -210,7 +210,7 @@ void JStudio_JParticle::TAdaptor_particle::adaptor_do_REPEAT(JStudio::data::TEOp
if (param_1 == JStudio::data::UNK_0x2) {
JUT_ASSERT(460, uSize==4);
JUT_ASSERT(461, pContent!=NULL);
field_0x1b5 = *(u32*)pContent ? 1 : 0;
field_0x1b5 = *(BE(u32)*)pContent ? 1 : 0;
}
}
@@ -219,7 +219,7 @@ void JStudio_JParticle::TAdaptor_particle::adaptor_do_ON_EXIT_NOT_END(JStudio::d
if (param_1 == JStudio::data::UNK_0x2) {
JUT_ASSERT(460, uSize==4);
JUT_ASSERT(461, pContent!=NULL);
field_0x1b6 = *(u32*)pContent ? 1 : 0;
field_0x1b6 = *(BE(u32)*)pContent ? 1 : 0;
}
}
@@ -98,7 +98,7 @@ void JStudio_JStage::TAdaptor_actor::adaptor_do_ANIMATION_MODE(JStudio::data::TE
case JStudio::data::UNK_0x2:
JUT_ASSERT(153, uSize==4);
JUT_ASSERT(154, pContent!=NULL);
field_0x130 = *(u32*)pContent;
field_0x130 = *(BE(u32)*)pContent;
break;
}
}
@@ -114,7 +114,7 @@ void JStudio_JStage::TAdaptor_actor::adaptor_do_TEXTURE_ANIMATION_MODE(
case JStudio::data::UNK_0x2:
JUT_ASSERT(182, uSize==4);
JUT_ASSERT(183, pContent!=NULL);
field_0x134 = *(u32*)pContent;
field_0x134 = *(BE(u32)*)pContent;
break;
}
}
@@ -141,7 +141,7 @@ void JStudio_JStage::TAdaptor_actor::adaptor_do_PARENT_NODE(
case JStudio::data::UNK_0x19:
JUT_ASSERT(237, uSize==4);
JUT_ASSERT(238, pContent!=NULL);
field_0x140 = *(u32*)pContent;
field_0x140 = *(BE(u32)*)pContent;
break;
}
}
@@ -152,7 +152,7 @@ void JStudio_JStage::TAdaptor_actor::adaptor_do_PARENT_ENABLE(
case JStudio::data::UNK_0x2:
JUT_ASSERT(257, uSize==4);
JUT_ASSERT(258, pContent!=NULL);
bool v0 = (*(u32*)pContent != 0);
bool v0 = (*(BE(u32)*)pContent != 0);
if (field_0x144 != v0) {
field_0x144 = v0;
switch (field_0x138) {
@@ -179,7 +179,7 @@ void JStudio_JStage::TAdaptor_actor::adaptor_do_PARENT_FUNCTION(
case JStudio::data::UNK_0x2:
JUT_ASSERT(303, uSize==4);
JUT_ASSERT(304, pContent!=NULL);
field_0x138 = *(u32*)pContent;
field_0x138 = *(BE(u32)*)pContent;
break;
}
}
@@ -99,7 +99,7 @@ void JStudio_JStage::TAdaptor_camera::adaptor_do_PARENT_NODE(JStudio::data::TEOp
case JStudio::data::UNK_0x19:
JUT_ASSERT(166, uSize==4);
JUT_ASSERT(167, pContent!=NULL);
field_0x110 = *(int*)pContent;
field_0x110 = *(BE(s32)*)pContent;
break;
}
}
@@ -111,7 +111,7 @@ JStudio_JStage::TAdaptor_camera::adaptor_do_PARENT_ENABLE(JStudio::data::TEOpera
case JStudio::data::UNK_0x2:
JUT_ASSERT(185, uSize==4);
JUT_ASSERT(186, pContent!=NULL);
field_0x114 = *(u32*)pContent ? true : false;
field_0x114 = *(BE(u32)*)pContent ? true : false;
switch(field_0x108) {
case 1: {
JStage::TObject* parent = 0;
@@ -137,7 +137,7 @@ JStudio_JStage::TAdaptor_camera::adaptor_do_PARENT_FUNCTION(JStudio::data::TEOpe
case JStudio::data::UNK_0x2:
JUT_ASSERT(226, uSize==4);
JUT_ASSERT(227, pContent!=NULL);
field_0x108 = *(int*)pContent;
field_0x108 = *(BE(s32)*)pContent;
break;
}
}
@@ -164,7 +164,7 @@ void JStudio_JStage::TAdaptor_camera::adaptor_do_TARGET_PARENT_NODE(
case JStudio::data::UNK_0x19:
JUT_ASSERT(282, uSize==4);
JUT_ASSERT(283, pContent!=NULL);
field_0x11c = *(int*)pContent;
field_0x11c = *(BE(s32)*)pContent;
break;
}
}
@@ -175,7 +175,7 @@ void JStudio_JStage::TAdaptor_camera::adaptor_do_TARGET_PARENT_ENABLE(
case JStudio::data::UNK_0x2:
JUT_ASSERT(301, uSize==4);
JUT_ASSERT(302, pContent!=NULL);
field_0x120 = *(int*)pContent ? 1 : 0;
field_0x120 = *(BE(s32)*)pContent ? 1 : 0;
break;
}
}
@@ -125,7 +125,7 @@ void JStudio_JStage::TAdaptor_light::adaptor_do_FACULTY(JStudio::data::TEOperati
JUT_ASSERT(198, uSize==4);
JUT_ASSERT(199, pContent!=NULL);
JStage::TELight lightType;
switch (*(u32*)pContent) {
switch (*(BE(u32)*)pContent) {
case 0x301:
lightType = JStage::TELIGHT_1;
break;
@@ -82,7 +82,7 @@ void JStudio_JStage::TAdaptor_object_::adaptor_object_data_(void const* param_1,
if (param_2 == 0) {
uVar3 = JStage::TActor::ID_NORMAL;
} else {
uVar3 = *(int*)param_1;
uVar3 = *(BE(s32)*)param_1;
}
pJSGObject_->JSGSetData(uVar3, param_3, param_4);
}
@@ -113,7 +113,7 @@ JStudio_JStage::TAdaptor_object_::adaptor_object_ENABLE_(JStudio::data::TEOperat
case JStudio::data::UNK_0x2:
JUT_ASSERT(157, uSize==4);
JUT_ASSERT(158, pContent!=NULL);
if (*(u32*)pContent != 0) {
if (*(BE(u32)*)pContent != 0) {
pJSGObject_->JSGFEnableFlag(2);
} else {
pJSGObject_->JSGFDisableFlag(2);
@@ -431,6 +431,7 @@ void JUTCacheFont::invalidiateAllCache() {
field_0xa4 = (TGlyphCacheInfo*)mCacheBuffer;
field_0x9c = NULL;
field_0xa0 = NULL;
// TARGET_PC TODO: we're leaking all GXTexObj here
}
void JUTCacheFont::unlink(JUTCacheFont::TGlyphCacheInfo* cacheInfo) {
+3
View File
@@ -417,6 +417,9 @@ void JUTResFont::loadImage(int code, GXTexMapID id){
if (pageIdx != mTexPageIdx || i != field_0x66)
{
void* pImg = &mpGlyphBlocks[i]->data[pageIdx * mpGlyphBlocks[i]->textureSize];
#ifdef TARGET_PC
mTexObj.reset();
#endif
GXInitTexObj(&mTexObj, pImg, mpGlyphBlocks[i]->textureWidth,
mpGlyphBlocks[i]->textureHeight, (GXTexFmt)(u16)mpGlyphBlocks[i]->textureFormat,
GX_CLAMP, GX_CLAMP, 0);
+7 -2
View File
@@ -15,7 +15,6 @@ JUTTexture::~JUTTexture() {
if (getEmbPaletteDelFlag()) {
JKR_DELETE(mEmbPalette);
}
GXDestroyTexObj(&mTexObj);
}
void JUTTexture::storeTIMG(ResTIMG const* param_0, u8 param_1) {
@@ -50,7 +49,7 @@ void JUTTexture::storeTIMG(ResTIMG const* param_0, u8 param_1) {
tlut = (GXTlut)param_1;
}
u32 palOffset = mTexInfo->paletteOffset;
s32 palOffset = mTexInfo->paletteOffset;
if (mEmbPalette == NULL || !getEmbPaletteDelFlag()) {
mEmbPalette = JKR_NEW JUTPalette(tlut, (GXTlutFmt)mTexInfo->colorFormat,
@@ -148,6 +147,9 @@ void JUTTexture::initTexObj() {
u8* image = ((u8*)mTexInfo);
u32 imgOffset = mTexInfo->imageOffset;
image += (imgOffset ? imgOffset : 0x20);
#ifdef TARGET_PC
mTexObj.reset();
#endif
GXInitTexObj(&mTexObj, image, mTexInfo->width, mTexInfo->height,
(GXTexFmt)mTexInfo->format, (GXTexWrapMode)mWrapS, (GXTexWrapMode)mWrapT,
mipmapEnabled);
@@ -165,6 +167,9 @@ void JUTTexture::initTexObj(GXTlut param_0) {
(u16)mTexInfo->height,
(void*)mTexInfo);
image += (imgOffset ? imgOffset : 0x20);
#ifdef TARGET_PC
mTexObj.reset();
#endif
GXInitTexObjCI(&mTexObj, image, mTexInfo->width, mTexInfo->height,
(GXCITexFmt)mTexInfo->format, (GXTexWrapMode)mWrapS,
(GXTexWrapMode)mWrapT, mipmapEnabled, param_0);