// // Generated By: dol2asm // Translation Unit: JAIStream // #include "JSystem/JAudio2/JAIStream.h" #include "JSystem/JAudio2/JAIStreamMgr.h" #include "JSystem/JAudio2/JAISoundChild.h" #include "JSystem/JAudio2/JAIStreamDataMgr.h" #include "JSystem/JKernel/JKRHeap.h" #include "dol2asm.h" // // Forward References: // extern "C" static void JAIStream_JASAramStreamCallback___FUlP13JASAramStreamPv(); extern "C" void func_802A3104(); extern "C" void func_802A319C(); extern "C" void prepare_prepareStream___9JAIStreamFv(); extern "C" void prepare___9JAIStreamFv(); extern "C" void prepare_startStream___9JAIStreamFv(); extern "C" void JAIStreamMgr_mixOut___9JAIStreamFRC14JASSoundParams16JAISoundActivity(); extern "C" void die_JAIStream___9JAIStreamFv(); extern "C" void JAISound_tryDie___9JAIStreamFv(); extern "C" void JAIStreamMgr_calc___9JAIStreamFv(); extern "C" s32 getNumChild__9JAIStreamCFv(); extern "C" void getChild__9JAIStreamFi(); extern "C" void releaseChild__9JAIStreamFi(); extern "C" bool getTrack__9JAIStreamFv(); extern "C" bool getChildTrack__9JAIStreamFi(); extern "C" void asStream__9JAIStreamFv(); extern "C" bool getTempoMgr__9JAIStreamFv(); // // External References: // extern "C" void __ct__17JASGenericMemPoolFv(); extern "C" void alloc__17JASGenericMemPoolFUl(); extern "C" void free__17JASGenericMemPoolFPvUl(); extern "C" void __ct__13JASAramStreamFv(); extern "C" void init__13JASAramStreamFUlUlPFUlP13JASAramStreamPv_vPv(); extern "C" void prepare__13JASAramStreamFli(); extern "C" void start__13JASAramStreamFv(); extern "C" void stop__13JASAramStreamFUs(); extern "C" void pause__13JASAramStreamFb(); extern "C" void cancel__13JASAramStreamFv(); extern "C" void func_802A1268(void* _this); extern "C" void mixOutAll__14JAISoundParamsFRC14JASSoundParamsP14JASSoundParamsf(); extern "C" void __ct__8JAISoundFv(); extern "C" void func_802A2328(); extern "C" bool asSe__8JAISoundFv(); extern "C" bool asSeq__8JAISoundFv(); extern "C" void die_JAISound___8JAISoundFv(); extern "C" void increasePrepareCount_JAISound___8JAISoundFv(); extern "C" void calc_JAISound___8JAISoundFv(); extern "C" void init__13JAISoundChildFv(); extern "C" void calc__13JAISoundChildFv(); extern "C" void __ct__10JSUPtrLinkFPv(); extern "C" void __register_global_object(); extern "C" void _savegpr_27(); extern "C" void _savegpr_29(); extern "C" void _restgpr_27(); extern "C" void _restgpr_29(); extern "C" extern u8 data_804340B0[16]; extern "C" extern u8 data_80451318[8]; /* 802A30D4-802A3104 29DA14 0030+00 1/1 0/0 0/0 .text * JAIStream_JASAramStreamCallback___FUlP13JASAramStreamPv */ static void JAIStream_JASAramStreamCallback_(u32 param_1, JASAramStream* param_2, void* param_3) { switch (param_1) { case 1: ((JAIStream*)(param_3))->field_0x2c5 = 1; break; case 0: ((JAIStream*)(param_3))->field_0x2c6 = 1; break; } } /* 802A3104-802A319C 29DA44 0098+00 0/0 1/1 0/0 .text * __ct__9JAIStreamFP12JAIStreamMgrP31JAISoundStrategyMgr<9JAIStream> */ JAIStream::JAIStream(JAIStreamMgr* param_1, JAISoundStrategyMgr* param_2) : JSULink(this) { field_0x290 = 0; field_0x2c0 = param_2; field_0x2b8 = param_1; field_0x29c = 0; field_0x2c5 = 0; field_0x2c6 = 0; for (int i = 0; i < CHANNEL_MAX; i++) { field_0x2a0[i] = NULL; } } /* 802A319C-802A3230 29DADC 0094+00 0/0 1/1 0/0 .text * JAIStreamMgr_startID___9JAIStreamF10JAISoundIDlPCQ29JGeometry8TVec3P11JAIAudiencei */ void JAIStream::JAIStreamMgr_startID_(JAISoundID param_1, s32 param_2, JGeometry::TVec3 const* param_3, JAIAudience* param_4, int param_5) { field_0x298 = param_5; field_0x294 = param_2; start_JAISound_(param_1, param_3, param_4); field_0x290 = 0; if (field_0x2c0 != NULL) { field_0x2bc = field_0x2c0->calc(param_1); } else { field_0x2bc = NULL; } } /* 802A3230-802A33F4 29DB70 01C4+00 1/1 0/0 0/0 .text prepare_prepareStream___9JAIStreamFv */ bool JAIStream::prepare_prepareStream_() { u32 local_28; switch (field_0x290) { case 0: JAIStreamAramMgr* streamAramMgr = field_0x2b8->getStreamAramMgr(); JUT_ASSERT(100, streamAramMgr); field_0x29c = streamAramMgr->newStreamAram(&local_28); if (field_0x29c != NULL) { field_0x0a8.field_0x0.init((u32)field_0x29c, local_28, &JAIStream_JASAramStreamCallback_, this); field_0x290 = 1; prepareCount = 0; } else { increasePrepareCount_JAISound_(); } break; case 1: if (audible_ != NULL) { JASSoundParams* soundParams = audible_->getOuterParams(0); field_0x0a8.field_0x0.setPitch(soundParams->mPitch); field_0x0a8.field_0x0.setVolume(soundParams->mVolume); field_0x0a8.field_0x0.setPan(soundParams->mPan); field_0x0a8.field_0x0.setFxmix(soundParams->mFxMix); field_0x0a8.field_0x0.setDolby(soundParams->mDolby); } field_0x2c5 = 0; if (field_0x0a8.field_0x0.prepare(field_0x294, -1)) { field_0x290 = 2; } break; case 2: if (field_0x2c5 != 0) { field_0x2c5 = 0; field_0x290 = 3; } else { increasePrepareCount_JAISound_(); } break; case 3: return true; case 4: JUT_WARN(155, "PC must not pass here."); break; } return false; } /* 802A33F4-802A3498 29DD34 00A4+00 1/1 0/0 0/0 .text prepare___9JAIStreamFv */ void JAIStream::prepare_() { if (field_0x2c6 != 0) { return; } switch(status_.state.unk) { case 0: if (prepare_prepareStream_()) { status_.state.unk = 5; prepare_startStream_(); } break; case 1: if (prepare_prepareStream_()) { status_.state.unk = 3; } break; case 4: status_.state.unk = 5; prepare_startStream_(); break; case 5: break; } } /* 802A3498-802A34E4 29DDD8 004C+00 1/1 0/0 0/0 .text prepare_startStream___9JAIStreamFv */ void JAIStream::prepare_startStream_() { if (field_0x0a8.field_0x0.start()) { field_0x2c6 = 0; field_0x2c4 = 0; field_0x290 = 4; } } /* ############################################################################################## */ /* 804557F0-804557F4 003DF0 0004+00 2/2 0/0 0/0 .sdata2 @864 */ SECTION_SDATA2 static f32 lit_864 = 1.0f; /* 804557F4-804557F8 003DF4 0004+00 2/2 0/0 0/0 .sdata2 @865 */ SECTION_SDATA2 static u8 lit_865[4] = { 0x00, 0x00, 0x00, 0x00, }; /* 804557F8-80455800 003DF8 0004+04 2/2 0/0 0/0 .sdata2 @866 */ SECTION_SDATA2 static f32 lit_866[1 + 1 /* padding */] = { 0.5f, /* padding */ 0.0f, }; /* 802A34E4-802A3720 29DE24 023C+00 0/0 1/1 0/0 .text * JAIStreamMgr_mixOut___9JAIStreamFRC14JASSoundParams16JAISoundActivity */ // Matches with literals #ifdef NONMATCHING void JAIStream::JAIStreamMgr_mixOut_(JASSoundParams const& param_1, JAISoundActivity param_2) { bool local_54; JASSoundParams local_4c; params.mixOutAll(param_1, &local_4c, (status_.isMute() || param_2.field_0x0.flags.flag1) ? 0.0f : fader.getIntensity()); if (field_0x2bc != NULL) { field_0x2bc->virtual4(this, local_4c); } JASSoundParams* mixParams = &local_4c; if (audible_ != NULL && audience_ != NULL) { for (int i = 0; i < audience_->getMaxChannels(); i++) { JASSoundParams* outerParams = audible_->getOuterParams(i); if (outerParams != NULL) { audience_->mixChannelOut(local_4c, audible_, i); mixParams = outerParams; break; } } } for (int i = 0; i < CHANNEL_MAX; i++) { field_0x0a8.field_0x0.setPitch(mixParams->mPitch); if (field_0x2a0[i] != NULL) { field_0x0a8.field_0x0.setChannelVolume(i, field_0x2a0[i]->mMove.mParams.mVolume * mixParams->mVolume); field_0x0a8.field_0x0.setChannelPan( i, (field_0x2a0[i]->mMove.mParams.mPan + mixParams->mPan) - 0.5f); field_0x0a8.field_0x0.setChannelFxmix(i, field_0x2a0[i]->mMove.mParams.mFxMix + mixParams->mFxMix); field_0x0a8.field_0x0.setChannelDolby(i, field_0x2a0[i]->mMove.mParams.mDolby + mixParams->mDolby); } else { field_0x0a8.field_0x0.setChannelVolume(i, mixParams->mVolume); field_0x0a8.field_0x0.setChannelPan(i, mixParams->mPan); field_0x0a8.field_0x0.setChannelFxmix(i, mixParams->mFxMix); field_0x0a8.field_0x0.setChannelDolby(i, mixParams->mDolby); } } prepare_(); if (field_0x290 == 4) { local_54 = false; if (status_.isPaused() || param_2.field_0x0.flags.flag2) { local_54 = true; } if (local_54 != field_0x2c4) { field_0x0a8.field_0x0.pause(local_54); field_0x2c4 = local_54; } } } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void JAIStream::JAIStreamMgr_mixOut_(JASSoundParams const& param_0, JAISoundActivity param_1) { nofralloc #include "asm/JSystem/JAudio2/JAIStream/JAIStreamMgr_mixOut___9JAIStreamFRC14JASSoundParams16JAISoundActivity.s" } #pragma pop #endif /* ############################################################################################## */ /* 804340E0-804340F0 060E00 000C+04 3/3 0/0 0/0 .bss @881 */ static u8 lit_881[12 + 4 /* padding */]; /* 802A3720-802A37FC 29E060 00DC+00 1/1 0/0 0/0 .text die_JAIStream___9JAIStreamFv */ // Matches with literals #ifdef NONMATCHING void JAIStream::die_JAIStream_() { die_JAISound_(); for (int i = 0; i < CHANNEL_MAX; i++) { if (field_0x2a0[i] != NULL) { delete (JASPoolAllocObject*)field_0x2a0[i]; field_0x2a0[i] = NULL; } } if (field_0x2bc != NULL) { field_0x2c0->virtual4(field_0x2bc); field_0x2bc = NULL; } } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void JAIStream::die_JAIStream_() { nofralloc #include "asm/JSystem/JAudio2/JAIStream/die_JAIStream___9JAIStreamFv.s" } #pragma pop #endif /* 802A37FC-802A388C 29E13C 0090+00 1/0 0/0 0/0 .text JAISound_tryDie___9JAIStreamFv */ bool JAIStream::JAISound_tryDie_() { if (field_0x2c6) { die_JAIStream_(); return true; } switch (field_0x290) { case 0: case 1: die_JAIStream_(); return true; case 2: case 3: field_0x290 = 5; field_0x0a8.field_0x0.cancel(); break; case 4: field_0x290 = 6; field_0x0a8.field_0x0.stop(10); break; } return false; } /* 802A388C-802A3948 29E1CC 00BC+00 0/0 1/1 0/0 .text JAIStreamMgr_calc___9JAIStreamFv */ void JAIStream::JAIStreamMgr_calc_() { if (field_0x2c6 != 0) { field_0x290 = 0; stop_JAISound_(); } if (calc_JAISound_()) { for (int i = 0; i < CHANNEL_MAX; i++) { if (field_0x2a0[i] != NULL) { field_0x2a0[i]->calc(); } } if (field_0x2bc != NULL) { field_0x2bc->calc(this); } } } /* 802A3948-802A3950 29E288 0008+00 1/0 0/0 0/0 .text getNumChild__9JAIStreamCFv */ s32 JAIStream::getNumChild() const { return 6; } /* 802A3950-802A3A24 29E290 00D4+00 1/0 0/0 0/0 .text getChild__9JAIStreamFi */ #ifdef NONMATCHING JAISoundChild* JAIStream::getChild(int i_idx) { if (field_0x2a0[i_idx] == NULL) { JASPoolAllocObject* ptr = new JASPoolAllocObject(); field_0x2a0[i_idx] = new (ptr) JAISoundChild(); if (field_0x2a0[i_idx] == NULL) { JUT_WARN(370, "JASPoolAllocObject::::operator new failed .") } } return field_0x2a0[i_idx]; } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm JAISoundChild* JAIStream::getChild(int param_0) { nofralloc #include "asm/JSystem/JAudio2/JAIStream/getChild__9JAIStreamFi.s" } #pragma pop #endif /* 802A3A24-802A3ABC 29E364 0098+00 1/0 0/0 0/0 .text releaseChild__9JAIStreamFi */ #ifdef NONMATCHING void JAIStream::releaseChild(int i_idx) { if (field_0x2a0[i_idx] != NULL) { delete (JASPoolAllocObject*)field_0x2a0[i_idx]; field_0x2a0[i_idx] = NULL; } } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void JAIStream::releaseChild(int param_0) { nofralloc #include "asm/JSystem/JAudio2/JAIStream/releaseChild__9JAIStreamFi.s" } #pragma pop #endif /* 802A3ABC-802A3AC4 29E3FC 0008+00 1/0 0/0 0/0 .text getTrack__9JAIStreamFv */ JASTrack* JAIStream::getTrack() { return NULL; } /* 802A3AC4-802A3ACC 29E404 0008+00 1/0 0/0 0/0 .text getChildTrack__9JAIStreamFi */ JASTrack* JAIStream::getChildTrack(int param_0) { return NULL; } /* 802A3ACC-802A3AD0 29E40C 0004+00 1/0 0/0 0/0 .text asStream__9JAIStreamFv */ JAIStream* JAIStream::asStream() { return this; } /* 802A3AD0-802A3AD8 29E410 0008+00 1/0 0/0 0/0 .text getTempoMgr__9JAIStreamFv */ JAITempoMgr* JAIStream::getTempoMgr() { return NULL; }