mirror of
https://github.com/TwilitRealm/dusklight
synced 2026-07-30 23:44:28 -04:00
JAudio doc/naming pass
This commit is contained in:
@@ -9,6 +9,8 @@
|
||||
#include "JSystem/JAudio2/JAUAudibleParam.h"
|
||||
#include "JSystem/TPosition3.h"
|
||||
|
||||
#define Z2_AUDIO_PLAYERS 1
|
||||
|
||||
struct Z2Audible;
|
||||
|
||||
struct Z2AudibleAbsPos {
|
||||
@@ -49,10 +51,14 @@ struct Z2AudioCamera {
|
||||
f32 getCamDist() const { return mCamDist; }
|
||||
|
||||
|
||||
/* 0x00 */ JGeometry::TPosition3f32 field_0x0;
|
||||
/* 0x00 */ JGeometry::TPosition3f32 mViewMatrix;
|
||||
/* 0x30 */ JGeometry::TVec3<f32> mVel;
|
||||
/* 0x3C */ JGeometry::TVec3<f32> mPos;
|
||||
/* 0x48 */ JGeometry::TVec3<f32> field_0x48;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
/* 0x48 */ JGeometry::TVec3<f32> mLastPos;
|
||||
/* 0x54 */ f32 mFovySin;
|
||||
/* 0x58 */ f32 mVolCenterZ;
|
||||
/* 0x5C */ f32 mTargetVolume;
|
||||
@@ -83,14 +89,14 @@ struct Z2SpotMic {
|
||||
/* 0x04 */ f32 field_0x4;
|
||||
/* 0x08 */ f32 field_0x8;
|
||||
/* 0x0C */ f32 field_0xc;
|
||||
/* 0x10 */ Z2AudioCamera* field_0x10[1];
|
||||
/* 0x10 */ Z2AudioCamera* field_0x10[Z2_AUDIO_PLAYERS];
|
||||
/* 0x14 */ Vec* mPosPtr;
|
||||
/* 0x18 */ f32 field_0x18[1];
|
||||
/* 0x18 */ f32 field_0x18[Z2_AUDIO_PLAYERS];
|
||||
/* 0x1C */ f32 field_0x1c;
|
||||
/* 0x20 */ f32 field_0x20[1];
|
||||
/* 0x20 */ f32 field_0x20[Z2_AUDIO_PLAYERS];
|
||||
/* 0x24 */ bool mIgnoreIfOut;
|
||||
/* 0x25 */ bool mMicOn;
|
||||
/* 0x26 */ bool field_0x26[1];
|
||||
/* 0x26 */ bool field_0x26[Z2_AUDIO_PLAYERS];
|
||||
}; // Size: 0x28
|
||||
|
||||
struct Z2Audience3DSetting {
|
||||
@@ -102,62 +108,99 @@ struct Z2Audience3DSetting {
|
||||
void updateDolbyDist(f32, f32);
|
||||
|
||||
void calcVolumeFactorAll() {
|
||||
field_0x0[1] = 1.25f * field_0x0[0];
|
||||
field_0x0[2] = 1.5f * field_0x0[0];
|
||||
field_0x0[3] = 2.0f * field_0x0[0];
|
||||
field_0x0[4] = 3.0f * field_0x0[0];
|
||||
field_0x0[5] = 4.0f * field_0x0[0];
|
||||
field_0x0[6] = 6.0f * field_0x0[0];
|
||||
field_0x0[7] = 8.0f * field_0x0[0];
|
||||
field_0x0[8] = 0.9f * field_0x0[0];
|
||||
field_0x0[9] = 0.8f * field_0x0[0];
|
||||
field_0x0[10] = 0.7f * field_0x0[0];
|
||||
field_0x0[11] = 0.6f * field_0x0[0];
|
||||
field_0x0[12] = 0.5f * field_0x0[0];
|
||||
field_0x0[13] = 0.4f * field_0x0[0];
|
||||
field_0x0[14] = 0.3f * field_0x0[0];
|
||||
mDistanceMaxes[1] = 1.25f * mDistanceMaxes[0];
|
||||
mDistanceMaxes[2] = 1.5f * mDistanceMaxes[0];
|
||||
mDistanceMaxes[3] = 2.0f * mDistanceMaxes[0];
|
||||
mDistanceMaxes[4] = 3.0f * mDistanceMaxes[0];
|
||||
mDistanceMaxes[5] = 4.0f * mDistanceMaxes[0];
|
||||
mDistanceMaxes[6] = 6.0f * mDistanceMaxes[0];
|
||||
mDistanceMaxes[7] = 8.0f * mDistanceMaxes[0];
|
||||
mDistanceMaxes[8] = 0.9f * mDistanceMaxes[0];
|
||||
mDistanceMaxes[9] = 0.8f * mDistanceMaxes[0];
|
||||
mDistanceMaxes[10] = 0.7f * mDistanceMaxes[0];
|
||||
mDistanceMaxes[11] = 0.6f * mDistanceMaxes[0];
|
||||
mDistanceMaxes[12] = 0.5f * mDistanceMaxes[0];
|
||||
mDistanceMaxes[13] = 0.4f * mDistanceMaxes[0];
|
||||
mDistanceMaxes[14] = 0.3f * mDistanceMaxes[0];
|
||||
for (int i = 0; i < 15; i++) {
|
||||
field_0x70[i] = (field_0x40 - 1.0f) / (field_0x0[i] - field_0x3c);
|
||||
mVolumeFactor[i] = (mMinDistanceVolume - 1.0f) / (mDistanceMaxes[i] - mMaxVolumeDistance);
|
||||
}
|
||||
}
|
||||
|
||||
void calcPriorityFactorAll() {
|
||||
for (int i = 0; i < 15; i++) {
|
||||
field_0xac[i] = field_0x64 / (field_0x0[i] - field_0x3c);
|
||||
mPriorityFactor[i] = mMaxDistancePriority / (mDistanceMaxes[i] - mMaxVolumeDistance);
|
||||
}
|
||||
}
|
||||
|
||||
void calcFxMixFactorAll() {
|
||||
for (int i = 0; i < 15; i++) {
|
||||
field_0xe8[i] = (field_0x54 - field_0x50) / (field_0x0[i] - field_0x3c);
|
||||
mFxMixFactor[i] = (mMaxDistanceFxMix - mMinDistanceFxMix) / (mDistanceMaxes[i] - mMaxVolumeDistance);
|
||||
}
|
||||
}
|
||||
|
||||
/* 0x000 */ f32 field_0x0[15];
|
||||
/* 0x03C */ f32 field_0x3c;
|
||||
/* 0x040 */ f32 field_0x40;
|
||||
/* 0x044 */ f32 field_0x44;
|
||||
/* 0x048 */ f32 field_0x48;
|
||||
/* 0x04C */ f32 field_0x4c;
|
||||
/* 0x050 */ f32 field_0x50;
|
||||
/* 0x054 */ f32 field_0x54;
|
||||
/* 0x058 */ f32 field_0x58;
|
||||
/* 0x05C */ f32 field_0x5c;
|
||||
/**
|
||||
* Maximum distance a sound can reach before being "far away"
|
||||
* Being far away affects stuff like culling, lowering its priority, forcibly stopping it, etc.
|
||||
* Sounds select which entry they use based on their VolBits.
|
||||
*/
|
||||
/* 0x000 */ f32 mDistanceMaxes[15];
|
||||
|
||||
/**
|
||||
* Distance at which the max volume of a sound is reached.
|
||||
* i.e. sounds do *not* get louder if they get closer than this.
|
||||
*/
|
||||
/* 0x03C */ f32 mMaxVolumeDistance;
|
||||
|
||||
/**
|
||||
* FX Mix value at maximum distance (@ref mDistanceMaxes)
|
||||
*/
|
||||
/* 0x040 */ f32 mMinDistanceVolume;
|
||||
/* 0x044 */ f32 mDolbyFrontDistanceMax;
|
||||
/* 0x048 */ f32 mDolbyBehindDistanceMax;
|
||||
/* 0x04C */ f32 mDolbyCenterValue;
|
||||
|
||||
/**
|
||||
* FX Mix value at minimum distance (@ref mMaxVolumeDistance)
|
||||
*/
|
||||
/* 0x050 */ f32 mMinDistanceFxMix;
|
||||
|
||||
/**
|
||||
* FX Mix value at maximum distance (@ref mDistanceMaxes)
|
||||
*/
|
||||
/* 0x054 */ f32 mMaxDistanceFxMix;
|
||||
/* 0x058 */ f32 mPanFactor;
|
||||
/* 0x05C */ f32 mSonicSpeed; // Used for doppler effect calculations.
|
||||
/* 0x060 */ f32 field_0x60;
|
||||
/* 0x064 */ u32 field_0x64;
|
||||
|
||||
/**
|
||||
* Priority that sounds receive when "far away".
|
||||
* @see mDistanceMaxes
|
||||
*/
|
||||
/* 0x064 */ u32 mMaxDistancePriority;
|
||||
/* 0x068 */ f32 field_0x68;
|
||||
/* 0x06C */ f32 field_0x6c;
|
||||
/* 0x070 */ f32 field_0x70[15];
|
||||
/* 0x0AC */ f32 field_0xac[15];
|
||||
/* 0x0E8 */ f32 field_0xe8[15];
|
||||
/* 0x070 */ f32 mVolumeFactor[15];
|
||||
/* 0x0AC */ f32 mPriorityFactor[15];
|
||||
/* 0x0E8 */ f32 mFxMixFactor[15];
|
||||
/* 0x124 */ bool mVolumeDistInit;
|
||||
/* 0x125 */ bool mDolbyDistInit;
|
||||
}; // Size: 0x128
|
||||
|
||||
struct Z2AudibleRelPos {
|
||||
/* 0x00 */ JGeometry::TVec3<f32> field_0x00;
|
||||
/* 0x0C */ f32 field_0xC;
|
||||
/* 0x10 */ f32 field_0x10;
|
||||
/* 0x00 */ JGeometry::TVec3<f32> mCameraRelative;
|
||||
|
||||
/**
|
||||
* Distance from mCameraRelative. This is from the object root and not the
|
||||
* exact distance used for volume/priority calculations.
|
||||
*/
|
||||
/* 0x0C */ f32 mTrueDistance;
|
||||
|
||||
/**
|
||||
* Distance from mCameraRelative but offset by mVolCenterZ.
|
||||
* This presumably means the distance is more centered on the object than mTrueDistance.
|
||||
*/
|
||||
/* 0x10 */ f32 mCenterDistance;
|
||||
};
|
||||
|
||||
struct Z2AudibleChannel {
|
||||
@@ -171,7 +214,7 @@ struct Z2AudibleChannel {
|
||||
}
|
||||
|
||||
/* 0x00 */ JASSoundParams mParams;
|
||||
/* 0x14 */ Z2AudibleRelPos field_0x14;
|
||||
/* 0x14 */ Z2AudibleRelPos mRelPos;
|
||||
/* 0x28 */ f32 field_0x28;
|
||||
/* 0x2c */ f32 mPan;
|
||||
/* 0x30 */ f32 mDolby;
|
||||
@@ -200,8 +243,8 @@ struct Z2Audible : public JAIAudible, public JASPoolAllocObject<Z2Audible> {
|
||||
|
||||
/* 0x10 */ JAUAudibleParam mParam;
|
||||
/* 0x14 */ Z2AudibleAbsPos mAbsPos;
|
||||
/* 0x2C */ Z2AudibleChannel mChannel[1];
|
||||
/* 0x64 */ f32 field_0x64[1];
|
||||
/* 0x2C */ Z2AudibleChannel mChannel[Z2_AUDIO_PLAYERS];
|
||||
/* 0x64 */ f32 mMicDistances[Z2_AUDIO_PLAYERS];
|
||||
};
|
||||
|
||||
struct Z2Audience : public JAIAudience, public JASGlobalInstance<Z2Audience> {
|
||||
|
||||
@@ -101,7 +101,7 @@ struct JAISoundStatus_ {
|
||||
bool isMute() const { return field_0x0.flags.mute; }
|
||||
bool isPaused() const { return field_0x0.flags.paused; }
|
||||
void pauseWhenOut() {
|
||||
field_0x1.flags.flag3 = 1;
|
||||
field_0x1.flags.mPauseWhenOut = 1;
|
||||
}
|
||||
|
||||
/* 0x0 */ union {
|
||||
@@ -120,9 +120,9 @@ struct JAISoundStatus_ {
|
||||
/* 0x1 */ union {
|
||||
u8 value;
|
||||
struct {
|
||||
u8 flag1 : 1;
|
||||
u8 mComesBack : 1;
|
||||
u8 flag2 : 1;
|
||||
u8 flag3 : 1;
|
||||
u8 mPauseWhenOut : 1;
|
||||
u8 flag4 : 1;
|
||||
u8 flag5 : 1;
|
||||
u8 flag6 : 1;
|
||||
@@ -309,7 +309,7 @@ public:
|
||||
bool hasLifeTime() const { return status_.field_0x1.flags.flag2; }
|
||||
|
||||
void removeLifeTime_() {
|
||||
status_.field_0x1.flags.flag1 = false;
|
||||
status_.field_0x1.flags.mComesBack = false;
|
||||
status_.field_0x1.flags.flag2 = 0;
|
||||
}
|
||||
|
||||
@@ -346,7 +346,7 @@ public:
|
||||
|
||||
void setComesBack(bool param_0) {
|
||||
JUT_ASSERT(354, status_.state.flags.calcedOnce == 0);
|
||||
status_.field_0x1.flags.flag1 = 1;
|
||||
status_.field_0x1.flags.mComesBack = 1;
|
||||
if (param_0) {
|
||||
status_.pauseWhenOut();
|
||||
}
|
||||
|
||||
@@ -9,14 +9,14 @@
|
||||
*/
|
||||
struct JAISoundParamsProperty {
|
||||
void init() {
|
||||
field_0x0 = 1.0f;
|
||||
field_0x4 = 0.0f;
|
||||
field_0x8 = 1.0f;
|
||||
mVolume = 1.0f;
|
||||
mFxMix = 0.0f;
|
||||
mPitch = 1.0f;
|
||||
}
|
||||
|
||||
/* 0x00 */ f32 field_0x0;
|
||||
/* 0x04 */ f32 field_0x4;
|
||||
/* 0x08 */ f32 field_0x8;
|
||||
/* 0x00 */ f32 mVolume;
|
||||
/* 0x04 */ f32 mFxMix;
|
||||
/* 0x08 */ f32 mPitch;
|
||||
}; // Size: 0xC
|
||||
|
||||
/**
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
*/
|
||||
struct JAUAudibleParam {
|
||||
f32 getDopplerPower() const {
|
||||
return field_0x0.bytes.b0_0 * (1.0f / 15.0f);
|
||||
return field_0x0.bytes.mDopplerPower * (1.0f / 15.0f);
|
||||
}
|
||||
|
||||
union {
|
||||
@@ -19,14 +19,18 @@ struct JAUAudibleParam {
|
||||
BE(u16) f1;
|
||||
} half;
|
||||
struct {
|
||||
u8 b0_0 : 4;
|
||||
u8 b0_4 : 1;
|
||||
u8 b0_5 : 1;
|
||||
u8 b0_6 : 1;
|
||||
u8 b0_7 : 1;
|
||||
u8 b1_0 : 1;
|
||||
u8 b1_1 : 1;
|
||||
u8 b1_2_7 : 6;
|
||||
u8 mDopplerPower : 4;
|
||||
u8 mCalculatePriority : 1;
|
||||
u8 mCalcDistanceVolume : 1;
|
||||
u8 mCalcFxMix : 1;
|
||||
u8 mCullAtMaxDistance : 1;
|
||||
u8 mCalcPan : 1;
|
||||
u8 mCalcDolby : 1;
|
||||
/**
|
||||
* Most bits in this field are unused, 8 indicates clamping of volume
|
||||
* to ensure it doesn't go below 0.2 in mixChannelOut()
|
||||
*/
|
||||
u8 mClampMinVolume : 6;
|
||||
u8 b2;
|
||||
u8 b3;
|
||||
} bytes;
|
||||
|
||||
@@ -5,16 +5,162 @@
|
||||
#include "JSystem/JAudio2/JASGadget.h"
|
||||
#include "helpers/endian.h"
|
||||
|
||||
// Constants for TypeIDs of JAUSoundTable entries.
|
||||
|
||||
/**
|
||||
* Used as a test to see if the type ID is valid. All other type IDs contain this bit.
|
||||
*/
|
||||
#define SOUND_TYPEID_VALID 0x40
|
||||
|
||||
/**
|
||||
* Sound is a sound effect.
|
||||
*/
|
||||
#define SOUND_TYPEID_SOUND_EFFECT 0x51
|
||||
|
||||
/**
|
||||
* Sound is a music sequence.
|
||||
*/
|
||||
#define SOUND_TYPEID_SEQUENCE 0x60
|
||||
|
||||
/**
|
||||
* Sound is a streamed music file.
|
||||
*/
|
||||
#define SOUND_TYPEID_STREAM 0x70
|
||||
|
||||
/**
|
||||
* Sound is a streamed music file. Unsure of difference from SOUND_TYPEID_STREAM
|
||||
*/
|
||||
#define SOUND_TYPEID_STREAM_ALT 0x71
|
||||
|
||||
//
|
||||
// Values for mSwBit on sound effect items.
|
||||
//
|
||||
|
||||
/**
|
||||
* Sound is always calculated as max priority (0).
|
||||
*/
|
||||
#define SOUND_SW_ALWAYS_MAX_PRIORITY 0x0000'0001
|
||||
|
||||
/**
|
||||
* Don't calculate volume by distance.
|
||||
*/
|
||||
#define SOUND_SW_IGNORE_DISTANCE_VOL 0x0000'0002
|
||||
|
||||
/**
|
||||
* Don't calculate FX mix (reverb) by distance.
|
||||
*/
|
||||
#define SOUND_SW_IGNORE_FX_MIX 0x0000'0004
|
||||
|
||||
/**
|
||||
* Offset to shift to access @see SOUND_SW_RANDOM_PITCH_MASK
|
||||
*/
|
||||
#define SOUND_SW_RANDOM_PITCH_OFFSET 4
|
||||
|
||||
/**
|
||||
* 4-bit value (0-15) to control the power of pitch randomization on sound playback.
|
||||
* Code acts different for values above 8, not sure what the exact implication is.
|
||||
*/
|
||||
#define SOUND_SW_RANDOM_PITCH_MASK 0x0000'00F0
|
||||
|
||||
/**
|
||||
* Offset to shift to access @see SOUND_SW_DOPPLER_POWER_MASK
|
||||
*/
|
||||
#define SOUND_SW_DOPPLER_POWER_OFFSET 8
|
||||
|
||||
/**
|
||||
* 4-bit value (0-15) to scale the power of the Doppler effect for this sound.
|
||||
*/
|
||||
#define SOUND_SW_DOPPLER_POWER_MASK 0x0000'0F00
|
||||
|
||||
/**
|
||||
* Don't calculate panning (left/right) values for this sound.
|
||||
*/
|
||||
#define SOUND_SW_IGNORE_PAN 0x0000'1000
|
||||
|
||||
/**
|
||||
* Don't calculate Dolby (behind/front) values for this sound.
|
||||
*/
|
||||
#define SOUND_SW_IGNORE_DOLBY 0x0000'2000
|
||||
|
||||
/**
|
||||
* 3-bit mask used to select a volume distance/falloff class for this sound.
|
||||
*/
|
||||
#define SOUND_SW_VOL_DIST_BIT_MASK 0x0007'0000
|
||||
|
||||
/**
|
||||
* Limit minimum volume of this sound (after distance falloff) to 0.2.
|
||||
*/
|
||||
#define SOUND_SW_CLAMP_MIN_VOLUME 0x0008'0000
|
||||
|
||||
/**
|
||||
* 3-bit mask used to select a *different* volume distance/falloff class for this sound.
|
||||
* @see SOUND_SW_VOL_DIST_BIT_MASK must be zero for this to work.
|
||||
*/
|
||||
#define SOUND_SW_VOL_DIST_BIT_2_MASK 0x0070'0000
|
||||
|
||||
/**
|
||||
* Mark sound as "far away" or "culled" when at max distance (selected by distance class).
|
||||
* This affects a bunch of stuff like culling, automatic stopping, priorities, etc.
|
||||
*/
|
||||
#define SOUND_SW_CULL_AT_MAX_DISTANCE 0x0080'0000
|
||||
|
||||
/**
|
||||
* Not sure what this does.
|
||||
* Something causing volume/pan/dolby adjustment in Z2Audible::setOuterParams?
|
||||
*/
|
||||
#define SOUND_SW_VOL_SOMETHING_MASK 0x0F00'0000
|
||||
|
||||
/**
|
||||
* Offset to shift to access @see SOUND_SW_RANDOM_VOLUME_MASK
|
||||
*/
|
||||
#define SOUND_SW_RANDOM_VOLUME_OFFSET 28
|
||||
|
||||
/**
|
||||
* 4-bit value (0-15) to control the power of volume randomization on sound playback.
|
||||
*/
|
||||
#define SOUND_SW_RANDOM_VOLUME_MASK 0xF000'0000
|
||||
|
||||
#define SOUND_VOL_DIST_BIT_MASK_SHIFTED (SOUND_SW_VOL_DIST_BIT_MASK >> 16)
|
||||
#define SOUND_VOL_DIST_BIT_2_MASK_SHIFTED (SOUND_SW_VOL_DIST_BIT_2_MASK >> 16)
|
||||
#define SOUND_VOL_SOMETHING_MASK_SHIFTED (SOUND_SW_VOL_SOMETHING_MASK >> 16)
|
||||
|
||||
/**
|
||||
* @ingroup jsystem-jaudio
|
||||
*
|
||||
* A single entry in the sound table.
|
||||
* Fields are interpreted differently depending on the type ID of the entry,
|
||||
* which is not stored in this struct.
|
||||
*/
|
||||
struct JAUSoundTableItem {
|
||||
u8 mPriority;
|
||||
u8 field_0x1;
|
||||
BE(u16) mResourceId;
|
||||
BE(u32) field_0x4;
|
||||
BE(f32) field_0x8;
|
||||
u8 mVolume;
|
||||
union {
|
||||
/**
|
||||
* For music sequences: the resource ID of the sequence.
|
||||
*/
|
||||
BE(u16) mResourceId;
|
||||
|
||||
/**
|
||||
* For streamed music: bitpacked channel configuration.
|
||||
*/
|
||||
BE(u16) mStreamPanParameters;
|
||||
};
|
||||
union {
|
||||
/**
|
||||
* For sound effects: bitpacked field controlling a *bunch* of audio parameters.
|
||||
*/
|
||||
BE(u32) mSwBit;
|
||||
|
||||
/**
|
||||
* For streamed music: offset (relative to start of BST)
|
||||
* to null-terminated string containing music file path.
|
||||
*/
|
||||
BE(u32) mStreamFilePath;
|
||||
};
|
||||
|
||||
/**
|
||||
* For sound effects: pitch multiplier.
|
||||
*/
|
||||
BE(f32) mPitch;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -33,8 +179,8 @@ struct JAUSoundTable_ {
|
||||
mRoot = NULL;
|
||||
}
|
||||
|
||||
void init(const void* param_0) {
|
||||
mData = param_0;
|
||||
void init(const void* dataStart) {
|
||||
mData = dataStart;
|
||||
// magic number is not in debug rom. I'm not sure what this comparison is (maybe some sort of '' number?)
|
||||
// I also do not know how it is different between JAUSoundTable and JAUSoundNameTable
|
||||
// Future person here: This is checking for either "BST " or "BSTN", with the second two letters in Root::magicNumber().
|
||||
@@ -60,16 +206,16 @@ struct JAUSoundTable_ {
|
||||
return (Section*)((u8*)mData + offset);
|
||||
}
|
||||
|
||||
Group* getGroup(Section* param_1, int index) const {
|
||||
Group* getGroup(Section* section, int index) const {
|
||||
int iVar1;
|
||||
|
||||
if (index < 0) {
|
||||
return NULL;
|
||||
}
|
||||
if ((u32)index >= param_1->mNumGroups) {
|
||||
if ((u32)index >= section->mNumGroups) {
|
||||
return NULL;
|
||||
}
|
||||
u32 offset = param_1->getGroupOffset(index);
|
||||
u32 offset = section->getGroupOffset(index);
|
||||
if (offset == 0) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -70,7 +70,7 @@ void JAISe::JAISeCategoryMgr_mixOut_(bool param_0, const JASSoundParams& params,
|
||||
if (inner_.field_0x26c) {
|
||||
switch (inner_.track.getStatus()) {
|
||||
case JASTrack::STATUS_STOPPED:
|
||||
if (status_.field_0x1.flags.flag1) {
|
||||
if (status_.field_0x1.flags.mComesBack) {
|
||||
startTrack_(params);
|
||||
} else {
|
||||
stop_JAISound_();
|
||||
@@ -84,8 +84,8 @@ void JAISe::JAISeCategoryMgr_mixOut_(bool param_0, const JASSoundParams& params,
|
||||
startTrack_(params);
|
||||
}
|
||||
}
|
||||
} else if (status_.field_0x1.flags.flag1) {
|
||||
if (status_.field_0x1.flags.flag3) {
|
||||
} else if (status_.field_0x1.flags.mComesBack) {
|
||||
if (status_.field_0x1.flags.mPauseWhenOut) {
|
||||
inner_.track.pause(true);
|
||||
} else {
|
||||
stopTrack_();
|
||||
|
||||
@@ -167,7 +167,7 @@ JAISeMgr::JAISeMgr(bool setInstance) : JASGlobalInstance<JAISeMgr>(setInstance)
|
||||
}
|
||||
|
||||
bool JAISeMgr::isUsingSeqData(const JAISeqDataRegion& seqDataRegion) {
|
||||
for (int i = 0; i < 16; i++) {
|
||||
for (int i = 0; i < NUM_CATEGORIES; i++) {
|
||||
if (mCategoryMgrs[i].JAISeCategoryMgr::isUsingSeqData(seqDataRegion)) {
|
||||
return true;
|
||||
}
|
||||
@@ -177,7 +177,7 @@ bool JAISeMgr::isUsingSeqData(const JAISeqDataRegion& seqDataRegion) {
|
||||
|
||||
int JAISeMgr::releaseSeqData(const JAISeqDataRegion& seqDataRegion) {
|
||||
bool r30 = 0;
|
||||
for (int i = 0; i < 16; i++) {
|
||||
for (int i = 0; i < NUM_CATEGORIES; i++) {
|
||||
switch (mCategoryMgrs[i].JAISeCategoryMgr::releaseSeqData(seqDataRegion)) {
|
||||
case 0:
|
||||
return 0;
|
||||
@@ -191,14 +191,14 @@ int JAISeMgr::releaseSeqData(const JAISeqDataRegion& seqDataRegion) {
|
||||
}
|
||||
|
||||
void JAISeMgr::setCategoryArrangement(const JAISeCategoryArrangement& arrangement) {
|
||||
for (int i = 0; i < 16; i++) {
|
||||
for (int i = 0; i < NUM_CATEGORIES; i++) {
|
||||
mCategoryMgrs[i].setMaxActiveSe(arrangement.mItems[i].mMaxActiveSe);
|
||||
mCategoryMgrs[i].setMaxInactiveSe(arrangement.mItems[i].mMaxInactiveSe);
|
||||
}
|
||||
}
|
||||
|
||||
void JAISeMgr::getCategoryArrangement(JAISeCategoryArrangement* arrangement) {
|
||||
for (int i = 0; i < 16; i++) {
|
||||
for (int i = 0; i < NUM_CATEGORIES; i++) {
|
||||
int active = mCategoryMgrs[i].getMaxActiveSe();
|
||||
JUT_ASSERT(299, active <= 255);
|
||||
arrangement->mItems[i].mMaxActiveSe = active;
|
||||
@@ -209,19 +209,19 @@ void JAISeMgr::getCategoryArrangement(JAISeCategoryArrangement* arrangement) {
|
||||
}
|
||||
|
||||
void JAISeMgr::stop() {
|
||||
for (int i = 0; i < 16; i++) {
|
||||
for (int i = 0; i < NUM_CATEGORIES; i++) {
|
||||
mCategoryMgrs[i].stop();
|
||||
}
|
||||
}
|
||||
|
||||
void JAISeMgr::stopSoundID(JAISoundID id) {
|
||||
for (int i = 0; i < 16; i++) {
|
||||
for (int i = 0; i < NUM_CATEGORIES; i++) {
|
||||
mCategoryMgrs[i].stopSoundID(id);
|
||||
}
|
||||
}
|
||||
|
||||
void JAISeMgr::initParams() {
|
||||
for (int i = 0; i < 16; i++) {
|
||||
for (int i = 0; i < NUM_CATEGORIES; i++) {
|
||||
mCategoryMgrs[i].getParams()->init();
|
||||
}
|
||||
}
|
||||
@@ -270,16 +270,16 @@ JAISe* JAISeMgr::newSe_(int category, u32 priority) {
|
||||
|
||||
void JAISeMgr::calc() {
|
||||
mParams.calc();
|
||||
for (int i = 0; i < 16; i++) {
|
||||
for (int i = 0; i < NUM_CATEGORIES; i++) {
|
||||
mCategoryMgrs[i].JAISeMgr_calc_();
|
||||
}
|
||||
for (int i = 0; i < 16; i++) {
|
||||
for (int i = 0; i < NUM_CATEGORIES; i++) {
|
||||
mCategoryMgrs[i].JAISeMgr_freeDeadSe_();
|
||||
}
|
||||
}
|
||||
|
||||
void JAISeMgr::mixOut() {
|
||||
for (int i = 0; i < 16; i++) {
|
||||
for (int i = 0; i < NUM_CATEGORIES; i++) {
|
||||
mCategoryMgrs[i].JAISeMgr_mixOut_(mParams, mSoundActivity);
|
||||
}
|
||||
}
|
||||
@@ -324,7 +324,7 @@ bool JAISeMgr::startSound(JAISoundID id, JAISoundHandle* handle, const JGeometry
|
||||
|
||||
int JAISeMgr::getNumActiveSe() const {
|
||||
int num = 0;
|
||||
for (int i = 0; i < 16; i++) {
|
||||
for (int i = 0; i < NUM_CATEGORIES; i++) {
|
||||
num += mCategoryMgrs[i].getNumSe();
|
||||
}
|
||||
return num;
|
||||
|
||||
@@ -54,9 +54,9 @@ s32 JAISoundStatus_::unlockIfLocked() {
|
||||
}
|
||||
|
||||
void JAISoundParams::mixOutAll(const JASSoundParams& inParams, JASSoundParams* outParams, f32 param_2) {
|
||||
outParams->mVolume = move_.params_.mVolume * (inParams.mVolume * property_.field_0x0) * param_2;
|
||||
outParams->mFxMix = move_.params_.mFxMix + (inParams.mFxMix + property_.field_0x4);
|
||||
outParams->mPitch = move_.params_.mPitch * (inParams.mPitch * property_.field_0x8);
|
||||
outParams->mVolume = move_.params_.mVolume * (inParams.mVolume * property_.mVolume) * param_2;
|
||||
outParams->mFxMix = move_.params_.mFxMix + (inParams.mFxMix + property_.mFxMix);
|
||||
outParams->mPitch = move_.params_.mPitch * (inParams.mPitch * property_.mPitch);
|
||||
outParams->mPan = (inParams.mPan + move_.params_.mPan) - 0.5f;
|
||||
outParams->mDolby = inParams.mDolby + move_.params_.mDolby;
|
||||
}
|
||||
@@ -181,7 +181,7 @@ bool JAISound::calc_JAISound_() {
|
||||
}
|
||||
|
||||
if (audience_ != NULL && audible_ != NULL) {
|
||||
if ((priority_ = audience_->calcPriority(audible_)) == 0xFFFFFFFF && status_.field_0x1.flags.flag1 == 0) {
|
||||
if ((priority_ = audience_->calcPriority(audible_)) == 0xFFFFFFFF && status_.field_0x1.flags.mComesBack == 0) {
|
||||
stop_JAISound_();
|
||||
}
|
||||
} else {
|
||||
|
||||
+134
-134
@@ -36,14 +36,14 @@ Z2Audible::Z2Audible(const JGeometry::TVec3<f32>& pos, const JGeometry::TVec3<f3
|
||||
mParam.field_0x0.raw = 0xFFFFFFFF;
|
||||
mAbsPos.init(&mPos, pos, param_1);
|
||||
|
||||
for (int i = 0; i < 1; i++) {
|
||||
for (int i = 0; i < Z2_AUDIO_PLAYERS; i++) {
|
||||
if ((channel & (1 << i)) == 0) {
|
||||
mChannel[i].init();
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < 1; i = i + 1) {
|
||||
field_0x64[i] = 0.0f;
|
||||
for (int i = 0; i < Z2_AUDIO_PLAYERS; i = i + 1) {
|
||||
mMicDistances[i] = 0.0f;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,18 +57,18 @@ void Z2Audible::calc() {
|
||||
|
||||
JASSoundParams* Z2Audible::getOuterParams(int index) {
|
||||
JUT_ASSERT(80, index >= 0);
|
||||
JUT_ASSERT(81, index < 1);
|
||||
JUT_ASSERT(81, index < 1); // Z2_AUDIO_PLAYERS
|
||||
return &mChannel[index].mParams;
|
||||
}
|
||||
|
||||
void Z2Audible::setOuterParams(const JASSoundParams& outParams, const JASSoundParams& inParams,
|
||||
int index) {
|
||||
JUT_ASSERT(89, index >= 0);
|
||||
JUT_ASSERT(90, index < 1);
|
||||
JUT_ASSERT(90, index < 1); // Z2_AUDIO_PLAYERS
|
||||
|
||||
Z2AudibleChannel* channel = &mChannel[index];
|
||||
u8 iStack_94 = (mParam.field_0x0.half.f1 & 0xf00) >> 8;
|
||||
if (iStack_94 == 0) {
|
||||
u8 volSomething = (mParam.field_0x0.half.f1 & SOUND_VOL_SOMETHING_MASK_SHIFTED) >> 8;
|
||||
if (volSomething == 0) {
|
||||
channel->mParams.combine(outParams, inParams);
|
||||
return;
|
||||
}
|
||||
@@ -91,7 +91,7 @@ void Z2Audible::setOuterParams(const JASSoundParams& outParams, const JASSoundPa
|
||||
|
||||
f32 dVar9 = inParams.mVolume * local_b8.length();
|
||||
f32 dVar10 = 1.0f;
|
||||
f32 dVar12 = Z2Calc::linearTransform(iStack_94, 0.0f, 15.0f, 1.0f, 0.3f, true);
|
||||
f32 dVar12 = Z2Calc::linearTransform(volSomething, 0.0f, 15.0f, 1.0f, 0.3f, true);
|
||||
if (inParams.mVolume > dVar12 && dVar9 > 0.001f) {
|
||||
dVar10 = Z2Calc::getParamByExp(dVar9, 0.3f, 0.001f, 0.1f, dVar12, 1.0f,
|
||||
Z2Calc::CURVE_POSITIVE);
|
||||
@@ -141,18 +141,18 @@ void Z2Audible::setOuterParams(const JASSoundParams& outParams, const JASSoundPa
|
||||
|
||||
Z2AudibleChannel* Z2Audible::getChannel(int index) {
|
||||
JUT_ASSERT(220, index >= 0);
|
||||
JUT_ASSERT(221, index < 1);
|
||||
JUT_ASSERT(221, index < 1); // Z2_AUDIO_PLAYERS
|
||||
return &mChannel[index];
|
||||
}
|
||||
|
||||
u32 Z2Audible::getDistVolBit() {
|
||||
u16 uVar1 = getAudibleParam()->field_0x0.half.f1;
|
||||
if (uVar1 != 0) {
|
||||
if ((uVar1 & 7) != 0) {
|
||||
return uVar1 & 7;
|
||||
if ((uVar1 & SOUND_VOL_DIST_BIT_MASK_SHIFTED) != 0) {
|
||||
return uVar1 & SOUND_VOL_DIST_BIT_MASK_SHIFTED;
|
||||
}
|
||||
if ((uVar1 & 0x70) != 0) {
|
||||
return ((int)(uVar1 & 0x70) >> 4) + 7;
|
||||
if ((uVar1 & SOUND_VOL_DIST_BIT_2_MASK_SHIFTED) != 0) {
|
||||
return ((int)(uVar1 & SOUND_VOL_DIST_BIT_2_MASK_SHIFTED) >> 4) + 7;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -166,15 +166,15 @@ Z2Audience3DSetting::Z2Audience3DSetting() {
|
||||
}
|
||||
|
||||
void Z2Audience3DSetting::init() {
|
||||
field_0x40 = Z2Param::MIN_DISTANCE_VOLUME;
|
||||
field_0x48 = Z2Param::DOLBY_BEHIND_DISTANCE_MAX;
|
||||
field_0x44 = Z2Param::DOLBY_FLONT_DISTANCE_MAX;
|
||||
field_0x54 = Z2Param::DISTANCE_FX_PARAM;
|
||||
field_0x50 = 0.0f;
|
||||
field_0x4c = Z2Param::DOLBY_CENTER_VALUE;
|
||||
field_0x58 = 0.5f;
|
||||
field_0x64 = 0xff;
|
||||
field_0x5c = Z2Param::SONIC_SPEED;
|
||||
mMinDistanceVolume = Z2Param::MIN_DISTANCE_VOLUME;
|
||||
mDolbyBehindDistanceMax = Z2Param::DOLBY_BEHIND_DISTANCE_MAX;
|
||||
mDolbyFrontDistanceMax = Z2Param::DOLBY_FLONT_DISTANCE_MAX;
|
||||
mMaxDistanceFxMix = Z2Param::DISTANCE_FX_PARAM;
|
||||
mMinDistanceFxMix = 0.0f;
|
||||
mDolbyCenterValue = Z2Param::DOLBY_CENTER_VALUE;
|
||||
mPanFactor = 0.5f;
|
||||
mMaxDistancePriority = 0xff;
|
||||
mSonicSpeed = Z2Param::SONIC_SPEED;
|
||||
field_0x60 = 1.5f;
|
||||
|
||||
initVolumeDist();
|
||||
@@ -184,8 +184,8 @@ void Z2Audience3DSetting::init() {
|
||||
void Z2Audience3DSetting::initVolumeDist() {
|
||||
if (mVolumeDistInit) return;
|
||||
|
||||
field_0x0[0] = Z2Param::DISTANCE_MAX;
|
||||
field_0x3c = Z2Param::MAX_VOLUME_DISTANCE;
|
||||
mDistanceMaxes[0] = Z2Param::DISTANCE_MAX;
|
||||
mMaxVolumeDistance = Z2Param::MAX_VOLUME_DISTANCE;
|
||||
|
||||
calcVolumeFactorAll();
|
||||
calcPriorityFactorAll();
|
||||
@@ -197,12 +197,12 @@ void Z2Audience3DSetting::initVolumeDist() {
|
||||
static f32 cNearFarRatio = Z2Param::MAX_VOLUME_DISTANCE / Z2Param::DISTANCE_MAX;
|
||||
|
||||
void Z2Audience3DSetting::updateVolumeDist(f32 param_0) {
|
||||
field_0x0[0] = param_0;
|
||||
mDistanceMaxes[0] = param_0;
|
||||
|
||||
if (param_0 > Z2Param::DISTANCE_MAX) {
|
||||
field_0x3c = cNearFarRatio * param_0;
|
||||
mMaxVolumeDistance = cNearFarRatio * param_0;
|
||||
} else {
|
||||
field_0x3c = Z2Param::MAX_VOLUME_DISTANCE;
|
||||
mMaxVolumeDistance = Z2Param::MAX_VOLUME_DISTANCE;
|
||||
}
|
||||
|
||||
calcVolumeFactorAll();
|
||||
@@ -214,29 +214,29 @@ void Z2Audience3DSetting::updateVolumeDist(f32 param_0) {
|
||||
|
||||
void Z2Audience3DSetting::initDolbyDist() {
|
||||
if (!mDolbyDistInit) {
|
||||
field_0x44 = Z2Param::DOLBY_FLONT_DISTANCE_MAX;
|
||||
field_0x48 = Z2Param::DOLBY_BEHIND_DISTANCE_MAX;
|
||||
field_0x68 = -field_0x4c / field_0x44;
|
||||
field_0x6c = (1.0f - field_0x4c) / field_0x48;
|
||||
mDolbyFrontDistanceMax = Z2Param::DOLBY_FLONT_DISTANCE_MAX;
|
||||
mDolbyBehindDistanceMax = Z2Param::DOLBY_BEHIND_DISTANCE_MAX;
|
||||
field_0x68 = -mDolbyCenterValue / mDolbyFrontDistanceMax;
|
||||
field_0x6c = (1.0f - mDolbyCenterValue) / mDolbyBehindDistanceMax;
|
||||
mDolbyDistInit = true;
|
||||
}
|
||||
}
|
||||
|
||||
void Z2Audience3DSetting::updateDolbyDist(f32 param_0, f32 param_1) {
|
||||
if (param_0 > -1.0f * Z2Param::DOLBY_FLONT_DISTANCE_MAX) {
|
||||
field_0x44 = -1.0f * param_0;
|
||||
mDolbyFrontDistanceMax = -1.0f * param_0;
|
||||
} else {
|
||||
field_0x44 = Z2Param::DOLBY_FLONT_DISTANCE_MAX;
|
||||
mDolbyFrontDistanceMax = Z2Param::DOLBY_FLONT_DISTANCE_MAX;
|
||||
}
|
||||
|
||||
if (param_1 < 2.0f * field_0x44) {
|
||||
param_1 = 2.0f * field_0x44;
|
||||
if (param_1 < 2.0f * mDolbyFrontDistanceMax) {
|
||||
param_1 = 2.0f * mDolbyFrontDistanceMax;
|
||||
}
|
||||
|
||||
if (param_1 > Z2Param::DOLBY_BEHIND_DISTANCE_MAX) {
|
||||
field_0x48 = param_1;
|
||||
mDolbyBehindDistanceMax = param_1;
|
||||
} else {
|
||||
field_0x48 = Z2Param::DOLBY_BEHIND_DISTANCE_MAX;
|
||||
mDolbyBehindDistanceMax = Z2Param::DOLBY_BEHIND_DISTANCE_MAX;
|
||||
}
|
||||
|
||||
mDolbyDistInit = false;
|
||||
@@ -254,28 +254,28 @@ Z2AudioCamera::Z2AudioCamera() {
|
||||
}
|
||||
|
||||
void Z2AudioCamera::init() {
|
||||
JGeometry::TPosition3f32 aTStack_38;
|
||||
aTStack_38.identity();
|
||||
JGeometry::TPosition3f32 viewMatrix;
|
||||
viewMatrix.identity();
|
||||
JGeometry::TVec3<f32> VStack_44;
|
||||
VStack_44.set(100000.0f, 100000.0f, 100000.0f);
|
||||
setCameraState(aTStack_38, *(Vec*)&VStack_44, true);
|
||||
setCameraState(viewMatrix, *(Vec*)&VStack_44, true);
|
||||
}
|
||||
|
||||
void Z2AudioCamera::setCameraState(f32 const (*param_0)[4], Vec& pos, bool param_2) {
|
||||
field_0x0.set(param_0);
|
||||
if (param_2) {
|
||||
void Z2AudioCamera::setCameraState(f32 const (*viewMatrix)[4], Vec& pos, bool initial) {
|
||||
mViewMatrix.set(viewMatrix);
|
||||
if (initial) {
|
||||
mPos.set(pos);
|
||||
field_0x48.set(mPos);
|
||||
mLastPos.set(mPos);
|
||||
mVel.zero();
|
||||
} else {
|
||||
field_0x48.set(mPos);
|
||||
mLastPos.set(mPos);
|
||||
mPos.set(pos);
|
||||
mVel.sub(mPos, field_0x48);
|
||||
mVel.sub(mPos, mLastPos);
|
||||
}
|
||||
}
|
||||
|
||||
void Z2AudioCamera::setCameraState(f32 (*param_0)[4], Vec& pos, Vec& param_2, f32 param_3,
|
||||
f32 param_4, bool param_5, bool param_6) {
|
||||
void Z2AudioCamera::setCameraState(f32 (*viewMatrix)[4], Vec& pos, Vec& param_2, f32 param_3,
|
||||
f32 param_4, bool param_5, bool initial) {
|
||||
JGeometry::TVec3<f32> aTStack_c0;
|
||||
VECSubtract(¶m_2, &pos, (Vec*)&aTStack_c0);
|
||||
mCamDist = aTStack_c0.length();
|
||||
@@ -312,7 +312,7 @@ void Z2AudioCamera::setCameraState(f32 (*param_0)[4], Vec& pos, Vec& param_2, f3
|
||||
Z2GetAudience()->getSetting()->updateDolbyDist(mCamDist, mCamDist);
|
||||
}
|
||||
} else {
|
||||
Vec aTStack_cc = {param_0[0][0], param_0[0][1], param_0[0][2]};
|
||||
Vec aTStack_cc = {viewMatrix[0][0], viewMatrix[0][1], viewMatrix[0][2]};
|
||||
Mtx rotMtx;
|
||||
MTXRotAxisRad(rotMtx, &aTStack_cc, (M_PI / 180.0f) * (-1.0f * dVar10));
|
||||
JGeometry::TVec3<f32> aTStack_d8;
|
||||
@@ -324,7 +324,7 @@ void Z2AudioCamera::setCameraState(f32 (*param_0)[4], Vec& pos, Vec& param_2, f3
|
||||
}
|
||||
}
|
||||
|
||||
setCameraState(param_0, pos, param_6);
|
||||
setCameraState(viewMatrix, pos, initial);
|
||||
}
|
||||
|
||||
void Z2AudioCamera::convertAbsToRel(Z2Audible* audible, int channelNum) {
|
||||
@@ -337,17 +337,17 @@ void Z2AudioCamera::convertAbsToRel(Z2Audible* audible, int channelNum) {
|
||||
return;
|
||||
}
|
||||
|
||||
Z2AudibleRelPos* relPos = &channel->field_0x14;
|
||||
MTXMultVec(field_0x0, (Vec*)&audible->getPos(), (Vec*)&relPos->field_0x00);
|
||||
relPos->field_0xC = relPos->field_0x00.length();
|
||||
Z2AudibleRelPos* relPos = &channel->mRelPos;
|
||||
MTXMultVec(mViewMatrix, (Vec*)&audible->getPos(), (Vec*)&relPos->mCameraRelative);
|
||||
relPos->mTrueDistance = relPos->mCameraRelative.length();
|
||||
|
||||
JGeometry::TVec3<f32> aTStack_38(relPos->field_0x00);
|
||||
JGeometry::TVec3<f32> aTStack_38(relPos->mCameraRelative);
|
||||
aTStack_38.z += mVolCenterZ;
|
||||
relPos->field_0x10 = aTStack_38.length();
|
||||
relPos->mCenterDistance = aTStack_38.length();
|
||||
}
|
||||
|
||||
bool Z2AudioCamera::convertAbsToRel(Vec& src, Vec* dst) const {
|
||||
MTXMultVec(field_0x0, &src, dst);
|
||||
MTXMultVec(mViewMatrix, &src, dst);
|
||||
return isInSight(*dst);
|
||||
}
|
||||
|
||||
@@ -395,7 +395,7 @@ void Z2SpotMic::calcVolumeFactor(int camID) {
|
||||
|
||||
void Z2SpotMic::setMicState(Z2AudioCamera* camera, int camID) {
|
||||
JUT_ASSERT(622, camID >= 0);
|
||||
JUT_ASSERT(623, camID < 1);
|
||||
JUT_ASSERT(623, camID < 1); // Z2_AUDIO_PLAYERS
|
||||
|
||||
if (mMicOn && mPosPtr != 0 && camera != NULL) {
|
||||
clearMicState(camID);
|
||||
@@ -406,8 +406,8 @@ void Z2SpotMic::setMicState(Z2AudioCamera* camera, int camID) {
|
||||
aVStack_58.z += camera->getVolCenterZ();
|
||||
|
||||
f32 dVar10 = aVStack_58.length();
|
||||
f32 dVar11 = Z2GetAudience()->getSetting()->field_0x0[0];
|
||||
f32 dVar12 = Z2GetAudience()->getSetting()->field_0x3c;
|
||||
f32 dVar11 = Z2GetAudience()->getSetting()->mDistanceMaxes[0];
|
||||
f32 dVar12 = Z2GetAudience()->getSetting()->mMaxVolumeDistance;
|
||||
if (dVar10 > dVar11) {
|
||||
field_0x18[camID] = field_0xc;
|
||||
} else {
|
||||
@@ -443,21 +443,21 @@ f32 Z2SpotMic::calcMicDist(Z2Audible* audible) {
|
||||
return aTStack_1c.length();
|
||||
}
|
||||
|
||||
u32 Z2SpotMic::calcMicPriority(f32 param_0) {
|
||||
if (param_0 > field_0x4) {
|
||||
return Z2GetAudience()->getSetting()->field_0x64;
|
||||
u32 Z2SpotMic::calcMicPriority(f32 micDistance) {
|
||||
if (micDistance > field_0x4) {
|
||||
return Z2GetAudience()->getSetting()->mMaxDistancePriority;
|
||||
}
|
||||
|
||||
if (param_0 < field_0x0) {
|
||||
if (micDistance < field_0x0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return field_0x1c * (param_0 - field_0x0);
|
||||
return field_0x1c * (micDistance - field_0x0);
|
||||
}
|
||||
|
||||
f32 Z2SpotMic::calcMicVolume(f32 param_0, int camID, f32 param_2) {
|
||||
JUT_ASSERT(687, camID >= 0);
|
||||
JUT_ASSERT(688, camID < 1);
|
||||
JUT_ASSERT(688, camID < 1); // Z2_AUDIO_PLAYERS
|
||||
|
||||
if (mMicOn == false) {
|
||||
return param_2;
|
||||
@@ -497,7 +497,7 @@ f32 Z2SpotMic::calcMicVolume(f32 param_0, int camID, f32 param_2) {
|
||||
}
|
||||
|
||||
Z2Audience::Z2Audience() : JASGlobalInstance<Z2Audience>(true), field_0x4(1.0f), field_0x8(0x7f) {
|
||||
mNumPlayers = 1;
|
||||
mNumPlayers = Z2_AUDIO_PLAYERS;
|
||||
mUsingOffMicVol = false;
|
||||
mAudioCamera[0].init();
|
||||
mAudioCamera[0].setMainCamera(true);
|
||||
@@ -512,11 +512,11 @@ bool Z2Audience::isActive() const {
|
||||
return Z2Audible::getTotalMemCount() != Z2Audible::getFreeMemCount();
|
||||
}
|
||||
|
||||
void Z2Audience::setAudioCamera(f32 (*param_0)[4], Vec& pos, Vec& param_2, f32 param_3,
|
||||
f32 param_4, bool param_5, int camID, bool param_7) {
|
||||
void Z2Audience::setAudioCamera(f32 (*viewMatrix)[4], Vec& pos, Vec& param_2, f32 param_3,
|
||||
f32 param_4, bool param_5, int camID, bool initial) {
|
||||
JUT_ASSERT(687, camID >= 0);
|
||||
JUT_ASSERT(688, camID < mNumPlayers);
|
||||
mAudioCamera[camID].setCameraState(param_0, pos, param_2, param_3, param_4, param_5, param_7);
|
||||
mAudioCamera[camID].setCameraState(viewMatrix, pos, param_2, param_3, param_4, param_5, initial);
|
||||
mLinkMic->setMicState(&mAudioCamera[camID], camID);
|
||||
}
|
||||
|
||||
@@ -529,7 +529,7 @@ JAIAudible* Z2Audience::newAudible(const JGeometry::TVec3<f32>& pos, JAISoundID
|
||||
}
|
||||
|
||||
JAUAudibleParam params = Z2GetSoundInfo()->getAudibleSwFull(soundID);
|
||||
bool x = params.field_0x0.bytes.b0_0 != 0;
|
||||
bool x = params.field_0x0.bytes.mDopplerPower != 0;
|
||||
|
||||
Z2Audible* audible = JKR_NEW Z2Audible(pos, param_2, channelNum, x);
|
||||
if (audible == NULL) {
|
||||
@@ -543,13 +543,13 @@ JAIAudible* Z2Audience::newAudible(const JGeometry::TVec3<f32>& pos, JAISoundID
|
||||
if (channel != NULL) {
|
||||
u32 distVolBit = audible->getDistVolBit();
|
||||
mAudioCamera[i].convertAbsToRel(audible, i);
|
||||
calcDeltaPriority_(channel->field_0x14.field_0x10, distVolBit, false);
|
||||
calcDeltaPriority_(channel->mRelPos.mCenterDistance, distVolBit, false);
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < 1; i++) {
|
||||
for (int i = 0; i < Z2_AUDIO_PLAYERS; i++) {
|
||||
if (mSpotMic[i].isOn()) {
|
||||
audible->field_0x64[i] = mSpotMic[i].calcMicDist(audible);
|
||||
audible->mMicDistances[i] = mSpotMic[i].calcMicDist(audible);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -569,7 +569,7 @@ Z2Audible::~Z2Audible() {}
|
||||
u32 Z2Audience::calcPriority(JAIAudible* audible) {
|
||||
Z2Audible* Z2audible = (Z2Audible*)audible;
|
||||
|
||||
if (!Z2audible->getAudibleParam()->field_0x0.bytes.b0_4) {
|
||||
if (!Z2audible->getAudibleParam()->field_0x0.bytes.mCalculatePriority) {
|
||||
for (int i = 0; i < mNumPlayers; i++) {
|
||||
mAudioCamera[i].convertAbsToRel(Z2audible, i);
|
||||
}
|
||||
@@ -584,17 +584,17 @@ u32 Z2Audience::calcPriority(JAIAudible* audible) {
|
||||
mAudioCamera[i].convertAbsToRel(Z2audible, i);
|
||||
u32 distvolBit = Z2audible->getDistVolBit();
|
||||
const JAUAudibleParam* puVar1 = Z2audible->getAudibleParam();
|
||||
deltaPriority[i] = calcDeltaPriority_(channel->field_0x14.field_0x10, distvolBit, puVar1->field_0x0.bytes.b0_7);
|
||||
deltaPriority[i] = calcDeltaPriority_(channel->mRelPos.mCenterDistance, distvolBit, puVar1->field_0x0.bytes.mCullAtMaxDistance);
|
||||
if (deltaPriority[i] < rv) {
|
||||
rv = deltaPriority[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < 1; i++) {
|
||||
for (int i = 0; i < Z2_AUDIO_PLAYERS; i++) {
|
||||
if (mSpotMic[i].isOn()) {
|
||||
Z2audible->field_0x64[i] = mSpotMic[i].calcMicDist(Z2audible);
|
||||
u32 micPriority = mSpotMic[i].calcMicPriority(Z2audible->field_0x64[i]);
|
||||
Z2audible->mMicDistances[i] = mSpotMic[i].calcMicDist(Z2audible);
|
||||
u32 micPriority = mSpotMic[i].calcMicPriority(Z2audible->mMicDistances[i]);
|
||||
if (micPriority < rv) {
|
||||
rv = micPriority;
|
||||
}
|
||||
@@ -619,31 +619,31 @@ void Z2Audience::mixChannelOut(const JASSoundParams& outParams, JAIAudible* audi
|
||||
return;
|
||||
}
|
||||
|
||||
JASSoundParams local_60;
|
||||
JASSoundParams calcParams;
|
||||
u32 distVolBit = Z2audible->getDistVolBit();
|
||||
if (Z2audible->getAudibleParam()->field_0x0.bytes.b0_5) {
|
||||
local_60.mVolume = calcVolume_(channel->field_0x14.field_0x10, distVolBit);
|
||||
f32 dVar9 = mLinkMic->calcMicVolume(Z2audible->field_0x64[0], channelNum, local_60.mVolume);
|
||||
if (Z2audible->getAudibleParam()->field_0x0.bytes.mCalcDistanceVolume) {
|
||||
calcParams.mVolume = calcVolume_(channel->mRelPos.mCenterDistance, distVolBit);
|
||||
f32 dVar9 = mLinkMic->calcMicVolume(Z2audible->mMicDistances[0], channelNum, calcParams.mVolume);
|
||||
if (dVar9 < 0.0f) {
|
||||
dVar9 = calcOffMicSound(local_60.mVolume);
|
||||
dVar9 = calcOffMicSound(calcParams.mVolume);
|
||||
}
|
||||
local_60.mVolume = dVar9;
|
||||
calcParams.mVolume = dVar9;
|
||||
|
||||
JAUAudibleParam* params = Z2audible->getAudibleParam();
|
||||
if ((params->field_0x0.bytes.b1_2_7 & 8) && (local_60.mVolume <= 0.2f)) {
|
||||
local_60.mVolume = 0.2f;
|
||||
if ((params->field_0x0.bytes.mClampMinVolume & 8) && (calcParams.mVolume <= 0.2f)) {
|
||||
calcParams.mVolume = 0.2f;
|
||||
}
|
||||
} else {
|
||||
local_60.mVolume = 1.0f;
|
||||
calcParams.mVolume = 1.0f;
|
||||
}
|
||||
|
||||
if (Z2audible->getAudibleParam()->field_0x0.bytes.b1_1 && mNumPlayers == 1) {
|
||||
local_60.mDolby = calcRelPosDolby(*(Vec*)&channel->field_0x14.field_0x00, channelNum);
|
||||
if (Z2audible->getAudibleParam()->field_0x0.bytes.mCalcDolby && mNumPlayers == 1) {
|
||||
calcParams.mDolby = calcRelPosDolby(*(Vec*)&channel->mRelPos.mCameraRelative, channelNum);
|
||||
} else {
|
||||
local_60.mDolby = 0.5f;
|
||||
calcParams.mDolby = 0.5f;
|
||||
}
|
||||
|
||||
if (Z2audible->getAudibleParam()->field_0x0.bytes.b1_0) {
|
||||
if (Z2audible->getAudibleParam()->field_0x0.bytes.mCalcPan) {
|
||||
if (mNumPlayers > 2) {
|
||||
f32 fVar1;
|
||||
if (channelNum & 1) {
|
||||
@@ -651,24 +651,24 @@ void Z2Audience::mixChannelOut(const JASSoundParams& outParams, JAIAudible* audi
|
||||
} else {
|
||||
fVar1 = 0.0f;
|
||||
}
|
||||
local_60.mPan = fVar1;
|
||||
calcParams.mPan = fVar1;
|
||||
} else {
|
||||
local_60.mPan = calcRelPosPan(*(Vec*)&channel->field_0x14.field_0x00, channelNum);
|
||||
calcParams.mPan = calcRelPosPan(*(Vec*)&channel->mRelPos.mCameraRelative, channelNum);
|
||||
}
|
||||
} else {
|
||||
local_60.mPan = 0.5f;
|
||||
calcParams.mPan = 0.5f;
|
||||
}
|
||||
|
||||
local_60.mPitch = calcPitch_(channel, Z2audible, &mAudioCamera[channelNum]);
|
||||
f32 dVar9;
|
||||
if (Z2audible->getAudibleParam()->field_0x0.bytes.b0_6) {
|
||||
dVar9 = calcFxMix_(channel->field_0x14.field_0xC, distVolBit);
|
||||
calcParams.mPitch = calcPitch_(channel, Z2audible, &mAudioCamera[channelNum]);
|
||||
f32 fxMix;
|
||||
if (Z2audible->getAudibleParam()->field_0x0.bytes.mCalcFxMix) {
|
||||
fxMix = calcFxMix_(channel->mRelPos.mTrueDistance, distVolBit);
|
||||
} else {
|
||||
dVar9 = 0.0f;
|
||||
fxMix = 0.0f;
|
||||
}
|
||||
local_60.mFxMix = dVar9;
|
||||
local_60.clamp();
|
||||
Z2audible->setOuterParams(outParams, local_60, channelNum);
|
||||
calcParams.mFxMix = fxMix;
|
||||
calcParams.clamp();
|
||||
Z2audible->setOuterParams(outParams, calcParams, channelNum);
|
||||
}
|
||||
|
||||
|
||||
@@ -688,18 +688,18 @@ f32 Z2Audience::calcRelPosVolume(const Vec& param_0, f32 param_1, int camID) {
|
||||
aTStack_3c.y *= 1.5f;
|
||||
|
||||
f32 len = aTStack_3c.length();
|
||||
if (len > mSetting.field_0x0[0] * param_1) {
|
||||
return mSetting.field_0x40;
|
||||
if (len > mSetting.mDistanceMaxes[0] * param_1) {
|
||||
return mSetting.mMinDistanceVolume;
|
||||
}
|
||||
|
||||
if (len < mSetting.field_0x3c) {
|
||||
if (len < mSetting.mMaxVolumeDistance) {
|
||||
return 1.0f;
|
||||
}
|
||||
|
||||
return JGeometry::TUtil<f32>::clamp(
|
||||
1.0f + ((mSetting.field_0x40 - 1.0f) /
|
||||
((mSetting.field_0x0[0] * param_1) - mSetting.field_0x3c)) *
|
||||
(len - mSetting.field_0x3c),
|
||||
1.0f + ((mSetting.mMinDistanceVolume - 1.0f) /
|
||||
((mSetting.mDistanceMaxes[0] * param_1) - mSetting.mMaxVolumeDistance)) *
|
||||
(len - mSetting.mMaxVolumeDistance),
|
||||
0.0f, 1.0f);
|
||||
}
|
||||
|
||||
@@ -717,7 +717,7 @@ f32 Z2Audience::calcRelPosPan(const Vec& param_0, int camID) {
|
||||
return 0.5f;
|
||||
}
|
||||
|
||||
dVar6 = (0.5f + mSetting.field_0x58 * (local_54.x / dVar6));
|
||||
dVar6 = (0.5f + mSetting.mPanFactor * (local_54.x / dVar6));
|
||||
if (local_54.z <= 0.0f) {
|
||||
f32 fovySin = mAudioCamera[camID].getFovySin();
|
||||
if (dVar6 < 0.5f) {
|
||||
@@ -757,52 +757,52 @@ f32 Z2Audience::calcRelPosDolby(const Vec& param_0, int camID) {
|
||||
return 0.5f - 0.5f * cosf(t * static_cast<f32>(M_PI));
|
||||
}
|
||||
#endif
|
||||
if (fVar1 > mSetting.field_0x48) {
|
||||
if (fVar1 > mSetting.mDolbyBehindDistanceMax) {
|
||||
return 1.0f;
|
||||
}
|
||||
|
||||
if (fVar1 < mSetting.field_0x44) {
|
||||
if (fVar1 < mSetting.mDolbyFrontDistanceMax) {
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
if (fVar1 < 0.0f) {
|
||||
return Z2Calc::getParamByExp(
|
||||
fVar1, mSetting.field_0x44, 0.0f,
|
||||
fVar1, mSetting.mDolbyFrontDistanceMax, 0.0f,
|
||||
0.3f, 0.0f,
|
||||
mSetting.field_0x4c, Z2Calc::CURVE_POSITIVE);
|
||||
mSetting.mDolbyCenterValue, Z2Calc::CURVE_POSITIVE);
|
||||
}
|
||||
|
||||
return Z2Calc::getParamByExp(
|
||||
fVar1, 0.0f, mSetting.field_0x48,
|
||||
0.3f, mSetting.field_0x4c,
|
||||
fVar1, 0.0f, mSetting.mDolbyBehindDistanceMax,
|
||||
0.3f, mSetting.mDolbyCenterValue,
|
||||
1.0f, Z2Calc::CURVE_NEGATIVE);
|
||||
}
|
||||
|
||||
f32 Z2Audience::calcVolume_(f32 param_0, int distVolBit) const {
|
||||
if (param_0 > mSetting.field_0x0[distVolBit]) {
|
||||
return mSetting.field_0x40;
|
||||
if (param_0 > mSetting.mDistanceMaxes[distVolBit]) {
|
||||
return mSetting.mMinDistanceVolume;
|
||||
}
|
||||
|
||||
if (param_0 < mSetting.field_0x3c) {
|
||||
if (param_0 < mSetting.mMaxVolumeDistance) {
|
||||
return 1.0f;
|
||||
}
|
||||
|
||||
return JGeometry::TUtil<f32>::clamp((mSetting.field_0x70[distVolBit] * (param_0 - mSetting.field_0x3c)) + 1.0f, 0.0f, 1.0f);
|
||||
return JGeometry::TUtil<f32>::clamp((mSetting.mVolumeFactor[distVolBit] * (param_0 - mSetting.mMaxVolumeDistance)) + 1.0f, 0.0f, 1.0f);
|
||||
}
|
||||
|
||||
u32 Z2Audience::calcDeltaPriority_(f32 param_0, int distVolBit, bool param_2) const {
|
||||
if (param_0 > mSetting.field_0x0[distVolBit]) {
|
||||
if (param_2) {
|
||||
u32 Z2Audience::calcDeltaPriority_(f32 distance, int distVolBit, bool cullMaxDistance) const {
|
||||
if (distance > mSetting.mDistanceMaxes[distVolBit]) {
|
||||
if (cullMaxDistance) {
|
||||
return -1;
|
||||
}
|
||||
return mSetting.field_0x64;
|
||||
return mSetting.mMaxDistancePriority;
|
||||
}
|
||||
|
||||
if (param_0 < mSetting.field_0x3c) {
|
||||
if (distance < mSetting.mMaxVolumeDistance) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return mSetting.field_0xac[distVolBit] * (param_0 - mSetting.field_0x3c);
|
||||
return mSetting.mPriorityFactor[distVolBit] * (distance - mSetting.mMaxVolumeDistance);
|
||||
}
|
||||
|
||||
f32 Z2Audience::calcPitchDoppler_(const JGeometry::TVec3<f32>& param_0,
|
||||
@@ -810,24 +810,24 @@ f32 Z2Audience::calcPitchDoppler_(const JGeometry::TVec3<f32>& param_0,
|
||||
const JGeometry::TVec3<f32>& param_2, f32 param_3) const {
|
||||
f32 dVar8 = param_0.dot(param_1);
|
||||
f32 dVar7 = param_0.dot(param_2);
|
||||
return (mSetting.field_0x5c + param_3 * dVar8) / (mSetting.field_0x5c + param_3 * dVar7);
|
||||
return (mSetting.mSonicSpeed + param_3 * dVar8) / (mSetting.mSonicSpeed + param_3 * dVar7);
|
||||
}
|
||||
|
||||
f32 Z2Audience::calcFxMix_(f32 param_0, int distVolBit) const {
|
||||
if (param_0 > mSetting.field_0x0[distVolBit]) {
|
||||
return mSetting.field_0x54;
|
||||
f32 Z2Audience::calcFxMix_(f32 distance, int distVolBit) const {
|
||||
if (distance > mSetting.mDistanceMaxes[distVolBit]) {
|
||||
return mSetting.mMaxDistanceFxMix;
|
||||
}
|
||||
if (param_0 < mSetting.field_0x3c) {
|
||||
return mSetting.field_0x50;
|
||||
if (distance < mSetting.mMaxVolumeDistance) {
|
||||
return mSetting.mMinDistanceFxMix;
|
||||
}
|
||||
return mSetting.field_0x50 + mSetting.field_0xe8[distVolBit] * (param_0 - mSetting.field_0x3c);
|
||||
return mSetting.mMinDistanceFxMix + mSetting.mFxMixFactor[distVolBit] * (distance - mSetting.mMaxVolumeDistance);
|
||||
}
|
||||
|
||||
f32 Z2Audience::calcPitch_(Z2AudibleChannel* channel, const Z2Audible* audible, const Z2AudioCamera* camera) const {
|
||||
JAUAudibleParam audParam = *audible->getAudibleParam();
|
||||
if (audParam.field_0x0.bytes.b0_0) {
|
||||
if (audParam.field_0x0.bytes.mDopplerPower) {
|
||||
JGeometry::TVec3<f32> aTStack_4c;
|
||||
aTStack_4c.normalize(channel->field_0x14.field_0x00);
|
||||
aTStack_4c.normalize(channel->mRelPos.mCameraRelative);
|
||||
JAUAudibleParam audParam = *audible->getAudibleParam();
|
||||
|
||||
f32 doppler = audParam.getDopplerPower();
|
||||
|
||||
@@ -1642,7 +1642,7 @@ void Z2SceneMgr::setSceneName(char* spot, s32 room, s32 layer) {
|
||||
JSUList<JAIStream>* stream_list = Z2GetSoundMgr()->getStreamMgr()->getStreamList();
|
||||
JSULink<JAIStream>* stream;
|
||||
for (stream = stream_list->getFirst(); stream != NULL; stream = stream->getNext()) {
|
||||
if (bVar2 || sound_table->getTypeID(stream->getObject()->getID()) != 0x71) {
|
||||
if (bVar2 || sound_table->getTypeID(stream->getObject()->getID()) != SOUND_TYPEID_STREAM) {
|
||||
stream->getObject()->stop(Z2Param::SCENE_CHANGE_BGM_FADEOUT_TIME);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ u16 Z2SoundInfo::getBgmSeqResourceID(JAISoundID soundID) const {
|
||||
|
||||
if (data != NULL) {
|
||||
switch ((typeID & 0xf0)) {
|
||||
case 0x60:
|
||||
case SOUND_TYPEID_SEQUENCE:
|
||||
return (u16)data->mResourceId;
|
||||
}
|
||||
}
|
||||
@@ -53,7 +53,7 @@ u32 Z2SoundInfo::getPriority(JAISoundID soundID) const {
|
||||
JAUSoundTableItem* data = JASGlobalInstance<JAUSoundTable>::getInstance()->getData(soundID);
|
||||
u8 typeID = JASGlobalInstance<JAUSoundTable>::getInstance()->getTypeID(soundID);
|
||||
|
||||
if (data != NULL && (typeID & 0x40) != 0) {
|
||||
if (data != NULL && (typeID & SOUND_TYPEID_VALID) != 0) {
|
||||
return data->mPriority;
|
||||
}
|
||||
|
||||
@@ -67,64 +67,64 @@ JAUAudibleParam Z2SoundInfo::getAudibleSwFull(JAISoundID soundID) {
|
||||
|
||||
u8 typeID = JASGlobalInstance<JAUSoundTable>::getInstance()->getTypeID(soundID);
|
||||
switch (typeID) {
|
||||
case 81:
|
||||
audibleParam.field_0x0.bytes.b0_0 = (u32)getSwBit(soundID) >> 8;
|
||||
if ((getSwBit(soundID) & 1) != 0) {
|
||||
audibleParam.field_0x0.bytes.b0_4 = 0;
|
||||
case SOUND_TYPEID_SOUND_EFFECT:
|
||||
audibleParam.field_0x0.bytes.mDopplerPower = (u32)getSwBit(soundID) >> SOUND_SW_DOPPLER_POWER_OFFSET;
|
||||
if ((getSwBit(soundID) & SOUND_SW_ALWAYS_MAX_PRIORITY) != 0) {
|
||||
audibleParam.field_0x0.bytes.mCalculatePriority = 0;
|
||||
} else {
|
||||
audibleParam.field_0x0.bytes.b0_4 = 1;
|
||||
audibleParam.field_0x0.bytes.mCalculatePriority = 1;
|
||||
}
|
||||
|
||||
if ((getSwBit(soundID) & 2) != 0) {
|
||||
audibleParam.field_0x0.bytes.b0_5 = 0;
|
||||
if ((getSwBit(soundID) & SOUND_SW_IGNORE_DISTANCE_VOL) != 0) {
|
||||
audibleParam.field_0x0.bytes.mCalcDistanceVolume = 0;
|
||||
} else {
|
||||
audibleParam.field_0x0.bytes.b0_5 = 1;
|
||||
audibleParam.field_0x0.bytes.mCalcDistanceVolume = 1;
|
||||
}
|
||||
|
||||
if ((getSwBit(soundID) & 4) != 0) {
|
||||
audibleParam.field_0x0.bytes.b0_6 = 0;
|
||||
if ((getSwBit(soundID) & SOUND_SW_IGNORE_FX_MIX) != 0) {
|
||||
audibleParam.field_0x0.bytes.mCalcFxMix = 0;
|
||||
} else {
|
||||
audibleParam.field_0x0.bytes.b0_6 = 1;
|
||||
audibleParam.field_0x0.bytes.mCalcFxMix = 1;
|
||||
}
|
||||
|
||||
if ((getSwBit(soundID) & 0x800000) != 0) {
|
||||
audibleParam.field_0x0.bytes.b0_7 = 1;
|
||||
if ((getSwBit(soundID) & SOUND_SW_CULL_AT_MAX_DISTANCE) != 0) {
|
||||
audibleParam.field_0x0.bytes.mCullAtMaxDistance = 1;
|
||||
} else {
|
||||
audibleParam.field_0x0.bytes.b0_7 = 0;
|
||||
audibleParam.field_0x0.bytes.mCullAtMaxDistance = 0;
|
||||
}
|
||||
|
||||
if ((getSwBit(soundID) & 0x1000) != 0) {
|
||||
audibleParam.field_0x0.bytes.b1_0 = 0;
|
||||
if ((getSwBit(soundID) & SOUND_SW_IGNORE_PAN) != 0) {
|
||||
audibleParam.field_0x0.bytes.mCalcPan = 0;
|
||||
} else {
|
||||
audibleParam.field_0x0.bytes.b1_0 = 1;
|
||||
audibleParam.field_0x0.bytes.mCalcPan = 1;
|
||||
}
|
||||
|
||||
if ((getSwBit(soundID) & 0x2000) != 0) {
|
||||
audibleParam.field_0x0.bytes.b1_1 = 0;
|
||||
if ((getSwBit(soundID) & SOUND_SW_IGNORE_DOLBY) != 0) {
|
||||
audibleParam.field_0x0.bytes.mCalcDolby = 0;
|
||||
} else {
|
||||
audibleParam.field_0x0.bytes.b1_1 = 1;
|
||||
audibleParam.field_0x0.bytes.mCalcDolby = 1;
|
||||
}
|
||||
|
||||
uVar7 = 0;
|
||||
if ((getSwBit(soundID) & 0x80000) != 0) {
|
||||
if ((getSwBit(soundID) & SOUND_SW_CLAMP_MIN_VOLUME) != 0) {
|
||||
uVar7 = 8;
|
||||
}
|
||||
|
||||
iVar1 = (getSwBit(soundID) >> 16) & 0x7;
|
||||
iVar1 += (getSwBit(soundID) >> 16) & 0x70;
|
||||
iVar1 += (getSwBit(soundID) >> 16) & 0xf00;
|
||||
audibleParam.field_0x0.bytes.b1_2_7 = uVar7;
|
||||
iVar1 = (getSwBit(soundID) >> 16) & SOUND_VOL_DIST_BIT_MASK_SHIFTED;
|
||||
iVar1 += (getSwBit(soundID) >> 16) & SOUND_VOL_DIST_BIT_2_MASK_SHIFTED;
|
||||
iVar1 += (getSwBit(soundID) >> 16) & SOUND_VOL_SOMETHING_MASK_SHIFTED;
|
||||
audibleParam.field_0x0.bytes.mClampMinVolume = uVar7;
|
||||
audibleParam.field_0x0.half.f1 = iVar1;
|
||||
break;
|
||||
default:
|
||||
audibleParam.field_0x0.bytes.b0_0 = 0;
|
||||
audibleParam.field_0x0.bytes.b0_4 = 1;
|
||||
audibleParam.field_0x0.bytes.b0_5 = 1;
|
||||
audibleParam.field_0x0.bytes.b0_6 = 1;
|
||||
audibleParam.field_0x0.bytes.b0_7 = 0;
|
||||
audibleParam.field_0x0.bytes.b1_0 = 1;
|
||||
audibleParam.field_0x0.bytes.b1_1 = 1;
|
||||
audibleParam.field_0x0.bytes.b1_2_7 = 0;
|
||||
audibleParam.field_0x0.bytes.mDopplerPower = 0;
|
||||
audibleParam.field_0x0.bytes.mCalculatePriority = 1;
|
||||
audibleParam.field_0x0.bytes.mCalcDistanceVolume = 1;
|
||||
audibleParam.field_0x0.bytes.mCalcFxMix = 1;
|
||||
audibleParam.field_0x0.bytes.mCullAtMaxDistance = 0;
|
||||
audibleParam.field_0x0.bytes.mCalcPan = 1;
|
||||
audibleParam.field_0x0.bytes.mCalcDolby = 1;
|
||||
audibleParam.field_0x0.bytes.mClampMinVolume = 0;
|
||||
audibleParam.field_0x0.half.f1 = 0;
|
||||
break;
|
||||
}
|
||||
@@ -139,53 +139,53 @@ u16 Z2SoundInfo::getAudibleSw(JAISoundID soundID) const {
|
||||
|
||||
u8 typeID = JASGlobalInstance<JAUSoundTable>::getInstance()->getTypeID(soundID);
|
||||
switch (typeID) {
|
||||
case 81:
|
||||
audibleParam.field_0x0.bytes.b0_0 = (u32)getSwBit(soundID) >> 8;
|
||||
if ((getSwBit(soundID) & 1) != 0) {
|
||||
audibleParam.field_0x0.bytes.b0_4 = 0;
|
||||
case SOUND_TYPEID_SOUND_EFFECT:
|
||||
audibleParam.field_0x0.bytes.mDopplerPower = (u32)getSwBit(soundID) >> SOUND_SW_DOPPLER_POWER_OFFSET;
|
||||
if ((getSwBit(soundID) & SOUND_SW_ALWAYS_MAX_PRIORITY) != 0) {
|
||||
audibleParam.field_0x0.bytes.mCalculatePriority = 0;
|
||||
} else {
|
||||
audibleParam.field_0x0.bytes.b0_4 = 1;
|
||||
audibleParam.field_0x0.bytes.mCalculatePriority = 1;
|
||||
}
|
||||
|
||||
if ((getSwBit(soundID) & 2) != 0) {
|
||||
audibleParam.field_0x0.bytes.b0_5 = 0;
|
||||
if ((getSwBit(soundID) & SOUND_SW_IGNORE_DISTANCE_VOL) != 0) {
|
||||
audibleParam.field_0x0.bytes.mCalcDistanceVolume = 0;
|
||||
} else {
|
||||
audibleParam.field_0x0.bytes.b0_5 = 1;
|
||||
audibleParam.field_0x0.bytes.mCalcDistanceVolume = 1;
|
||||
}
|
||||
|
||||
if ((getSwBit(soundID) & 4) != 0) {
|
||||
audibleParam.field_0x0.bytes.b0_6 = 0;
|
||||
audibleParam.field_0x0.bytes.mCalcFxMix = 0;
|
||||
} else {
|
||||
audibleParam.field_0x0.bytes.b0_6 = 1;
|
||||
audibleParam.field_0x0.bytes.mCalcFxMix = 1;
|
||||
}
|
||||
|
||||
if ((getSwBit(soundID) & 0x800000) != 0) {
|
||||
audibleParam.field_0x0.bytes.b0_7 = 1;
|
||||
if ((getSwBit(soundID) & SOUND_SW_CULL_AT_MAX_DISTANCE) != 0) {
|
||||
audibleParam.field_0x0.bytes.mCullAtMaxDistance = 1;
|
||||
} else {
|
||||
audibleParam.field_0x0.bytes.b0_7 = 0;
|
||||
audibleParam.field_0x0.bytes.mCullAtMaxDistance = 0;
|
||||
}
|
||||
|
||||
if ((getSwBit(soundID) & 0x1000) != 0) {
|
||||
audibleParam.field_0x0.bytes.b1_0 = 0;
|
||||
if ((getSwBit(soundID) & SOUND_SW_IGNORE_PAN) != 0) {
|
||||
audibleParam.field_0x0.bytes.mCalcPan = 0;
|
||||
} else {
|
||||
audibleParam.field_0x0.bytes.b1_0 = 1;
|
||||
audibleParam.field_0x0.bytes.mCalcPan = 1;
|
||||
}
|
||||
|
||||
if ((getSwBit(soundID) & 0x2000) != 0) {
|
||||
audibleParam.field_0x0.bytes.b1_1 = 0;
|
||||
if ((getSwBit(soundID) & SOUND_SW_IGNORE_DOLBY) != 0) {
|
||||
audibleParam.field_0x0.bytes.mCalcDolby = 0;
|
||||
} else {
|
||||
audibleParam.field_0x0.bytes.b1_1 = 1;
|
||||
audibleParam.field_0x0.bytes.mCalcDolby = 1;
|
||||
}
|
||||
|
||||
uVar7 = 0;
|
||||
if ((getSwBit(soundID) & 0x80000) != 0) {
|
||||
if ((getSwBit(soundID) & SOUND_SW_CLAMP_MIN_VOLUME) != 0) {
|
||||
uVar7 = 8;
|
||||
}
|
||||
|
||||
iVar1 = (getSwBit(soundID) >> 16) & 0x7;
|
||||
iVar1 += (getSwBit(soundID) >> 16) & 0x70;
|
||||
iVar1 += (getSwBit(soundID) >> 16) & 0xf00;
|
||||
audibleParam.field_0x0.bytes.b1_2_7 = uVar7;
|
||||
iVar1 = (getSwBit(soundID) >> 16) & SOUND_VOL_DIST_BIT_MASK_SHIFTED;
|
||||
iVar1 += (getSwBit(soundID) >> 16) & SOUND_VOL_DIST_BIT_2_MASK_SHIFTED;
|
||||
iVar1 += (getSwBit(soundID) >> 16) & SOUND_VOL_SOMETHING_MASK_SHIFTED;
|
||||
audibleParam.field_0x0.bytes.mClampMinVolume = uVar7;
|
||||
audibleParam.field_0x0.half.f1 = iVar1;
|
||||
break;
|
||||
default:
|
||||
@@ -208,19 +208,19 @@ void Z2SoundInfo::getSeInfo(JAISoundID soundID, JAISe* sePtr) const {
|
||||
}
|
||||
|
||||
switch(typeID) {
|
||||
case 81:
|
||||
sePtr->getProperty().field_0x8 *= data->field_0x8;
|
||||
u32 uStack_6c = (getSwBit(soundID) & 0xf0) >> 4;
|
||||
if (uStack_6c > 8) {
|
||||
sePtr->getProperty().field_0x8 += Z2Calc::linearTransform(uStack_6c, 8.0f, 15.0f, 16.0f, 24.0f, true) / 48.0f * Z2Calc::getRandom_0_1();
|
||||
case SOUND_TYPEID_SOUND_EFFECT:
|
||||
sePtr->getProperty().mPitch *= data->mPitch;
|
||||
u32 pitchParam = (getSwBit(soundID) & SOUND_SW_RANDOM_PITCH_MASK) >> SOUND_SW_RANDOM_PITCH_OFFSET;
|
||||
if (pitchParam > 8) {
|
||||
sePtr->getProperty().mPitch += Z2Calc::linearTransform(pitchParam, 8.0f, 15.0f, 16.0f, 24.0f, true) / 48.0f * Z2Calc::getRandom_0_1();
|
||||
} else {
|
||||
sePtr->getProperty().field_0x8 += (uStack_6c / 48.0f) * Z2Calc::getRandom_0_1();
|
||||
sePtr->getProperty().mPitch += (pitchParam / 48.0f) * Z2Calc::getRandom_0_1();
|
||||
}
|
||||
|
||||
u32 uVar1 = (u32)getSwBit(soundID) >> 0x1c;
|
||||
u32 uVar1 = (u32)getSwBit(soundID) >> SOUND_SW_RANDOM_VOLUME_OFFSET;
|
||||
if (uVar1 != 0) {
|
||||
f32 dVar18 = (uVar1 / 15.0f) * Z2Calc::getRandom_0_1();
|
||||
sePtr->getProperty().field_0x0 -= dVar18 < 0.0f ? 0.0f : (dVar18 > 1.0f ? 1.0f : dVar18);
|
||||
sePtr->getProperty().mVolume -= dVar18 < 0.0f ? 0.0f : (dVar18 > 1.0f ? 1.0f : dVar18);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -240,13 +240,13 @@ void Z2SoundInfo::getStreamInfo(JAISoundID soundID, JAIStream* streamPtr) const
|
||||
|
||||
u8 typeID = JASGlobalInstance<JAUSoundTable>::getInstance()->getTypeID(soundID);
|
||||
switch (typeID & 0xf0) {
|
||||
case 0x70:
|
||||
case SOUND_TYPEID_STREAM:
|
||||
u16 uVar1;
|
||||
s32 iVar4;
|
||||
data = JASGlobalInstance<JAUSoundTable>::getInstance()->getData(soundID);
|
||||
JUT_ASSERT(356, data);
|
||||
|
||||
uVar1 = data->mResourceId;
|
||||
uVar1 = data->mStreamPanParameters;
|
||||
numChild = streamPtr->getNumChild();
|
||||
iVar4 = 0;
|
||||
for (; iVar4 < numChild && uVar1 != 0; uVar1 >>= JAUStdSoundTableType::STRM_CH_SHIFT, iVar4++) {
|
||||
@@ -277,12 +277,12 @@ const char* Z2SoundInfo::getStreamFilePath(JAISoundID soundID) {
|
||||
const void* resource;
|
||||
|
||||
switch (JASGlobalInstance<JAUSoundTable>::getInstance()->getTypeID(soundID) & 0xf0) {
|
||||
case 0x70:
|
||||
case SOUND_TYPEID_STREAM:
|
||||
data = JASGlobalInstance<JAUSoundTable>::getInstance()->getData(soundID);
|
||||
JUT_ASSERT(394, data);
|
||||
resource = JASGlobalInstance<JAUSoundTable>::getInstance()->getResource();
|
||||
JUT_ASSERT(398, resource);
|
||||
return JAUStdSoundTableType::StringOffset::getString(resource, data->field_0x4);
|
||||
return JAUStdSoundTableType::StringOffset::getString(resource, data->mStreamFilePath);
|
||||
default:
|
||||
return NULL;
|
||||
}
|
||||
@@ -300,8 +300,8 @@ int Z2SoundInfo::getSwBit(JAISoundID soundID) const {
|
||||
u8 typeID = JASGlobalInstance<JAUSoundTable>::getInstance()->getTypeID(soundID);
|
||||
if (data != NULL) {
|
||||
switch(typeID) {
|
||||
case 81:
|
||||
return data->field_0x4;
|
||||
case SOUND_TYPEID_SOUND_EFFECT:
|
||||
return data->mSwBit;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -313,7 +313,7 @@ void Z2SoundInfo::getSoundInfo_(JAISoundID soundID, JAISound* soundPtr) const {
|
||||
JAUSoundTableItem* data = JASGlobalInstance<JAUSoundTable>::getInstance()->getData(soundID);
|
||||
|
||||
u8 typeID = JASGlobalInstance<JAUSoundTable>::getInstance()->getTypeID(soundID);
|
||||
if (data != NULL && (typeID & 0x40) != 0) {
|
||||
soundPtr->getProperty().field_0x0 = (1.0f / 127.0f) * data->field_0x1;
|
||||
if (data != NULL && (typeID & SOUND_TYPEID_VALID) != 0) {
|
||||
soundPtr->getProperty().mVolume = (1.0f / 127.0f) * data->mVolume;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -222,7 +222,7 @@ Z2SoundHandlePool* Z2SoundObjBase::startCollisionSE(u32 hitID, u32 mapinfo, Z2So
|
||||
if (30 <= mapinfo && mapinfo <= 52) {
|
||||
Z2Audible* audible = (Z2Audible*)(*handle)->getAudible();
|
||||
if (audible != NULL) {
|
||||
audible->getAudibleParam()->field_0x0.bytes.b1_2_7 = 8;
|
||||
audible->getAudibleParam()->field_0x0.bytes.mClampMinVolume = 8;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user