Some dSound_c / dSoundControl_c

This commit is contained in:
robojumper
2025-06-01 16:27:19 +02:00
parent 74a603be5f
commit fa1d4c3f57
24 changed files with 946 additions and 243 deletions
+18 -4
View File
@@ -2365,8 +2365,9 @@ d/snd/d_snd_3d_engine.cpp:
.data start:0x80548710 end:0x80548730
.sdata2 start:0x8057D308 end:0x8057D368
d/snd/d_snd_unk_component_1.cpp:
d/snd/d_snd_sound.cpp:
.text start:0x8035C3F0 end:0x8035DA88 align:16
.sdata2 start:0x8057D368 end:0x8057D380
d/snd/d_snd_player_mgr.cpp:
.text start:0x8035DA90 end:0x8035F010 align:16
@@ -2386,10 +2387,23 @@ d/snd/mgr/d_snd_mgr_enemy.cpp:
.ctors start:0x804DB918 end:0x804DB91C
d/snd/d_snd_unk_component_2.cpp:
.text start:0x80366430 end:0x8037D800 align:16
.text start:0x80366430 end:0x8036B8D0 align:16
d/snd/d_snd_sound_ex.cpp:
.text start:0x8036B8D0 end:0x8036C090 align:16
d/snd/d_snd_control_sound.cpp:
.text start:0x8036C090 end:0x8036C444 align:16
.data start:0x80548B78 end:0x80548C38
.sdata2 start:0x8057D920 end:0x8057D938
d/snd/d_snd_control_player.cpp:
.text start:0x8036C450 end:0x8036C6A8 align:16
.data start:0x80548C38 end:0x80548CC8
.sdata2 start:0x8057D938 end:0x8057D940
d/snd/mgr/d_snd_mgr_effect.cpp:
.text start:0x8037D800 end:0x8037F8B4 align:16
.text start:0x8036C6B0 end:0x8037F8B4 align:16
d/snd/mgr/d_snd_mgr_unk_5.cpp:
.text start:0x8037F8C0 end:0x803864C8 align:16
@@ -2424,7 +2438,7 @@ d/snd/mgr/d_snd_mgr_unk_11.cpp:
.text start:0x80393E00 end:0x8039A848 align:16
.ctors start:0x804DB934 end:0x804DB938
d/snd/mgr/d_snd_mgr_unk_12.cpp:
d/snd/d_snd_calc_pitch.cpp:
.text start:0x8039A850 end:0x8039A960 align:16
RVL_SDK/kpr/KPR.c:
+134 -134
View File
@@ -19842,9 +19842,9 @@ __ct__13dSnd3DActor_cFPvUc = .text:0x8035A8A0; // type:function size:0xE8
d_vt_0x34__13dSnd3DActor_cFRCQ34nw4r4math4VEC3 = .text:0x8035A990; // type:function size:0x40
fn_8035A9D0 = .text:0x8035A9D0; // type:function size:0x2C
fn_8035AA00 = .text:0x8035AA00; // type:function size:0x30
fn_8035AA30 = .text:0x8035AA30; // type:function size:0x44
fn_8035AA80 = .text:0x8035AA80; // type:function size:0x28
fn_8035AAB0 = .text:0x8035AAB0; // type:function size:0x50
updatePositionRelativeToListener__13dSnd3DActor_cFv = .text:0x8035AA30; // type:function size:0x44
calculatePositionRelativeToListener__13dSnd3DActor_cFv = .text:0x8035AA80; // type:function size:0x28
updateDistanceToListener__13dSnd3DActor_cFv = .text:0x8035AAB0; // type:function size:0x50
fn_8035AB00 = .text:0x8035AB00; // type:function size:0x54
fn_8035AB60 = .text:0x8035AB60; // type:function size:0x78
fn_8035ABE0 = .text:0x8035ABE0; // type:function size:0x44
@@ -19881,30 +19881,30 @@ CalcPitch__FPCQ34nw4r4math4VEC3fRCQ34nw4r3snd14Sound3DManagerRCQ34nw4r3snd15Soun
fn_8035C1C0 = .text:0x8035C1C0; // type:function size:0xDC
fn_8035C2A0 = .text:0x8035C2A0; // type:function size:0x110
__dt__14dSnd3DEngine_cFv = .text:0x8035C3B0; // type:function size:0x40
fn_8035C3F0 = .text:0x8035C3F0; // type:function size:0x2F8
fn_8035C6F0 = .text:0x8035C6F0; // type:function size:0x44
fn_8035C740 = .text:0x8035C740; // type:function size:0x44
fn_8035C790 = .text:0x8035C790; // type:function size:0x40
fn_8035C7D0 = .text:0x8035C7D0; // type:function size:0x40
fn_8035C810 = .text:0x8035C810; // type:function size:0xA0
__ct__11dSndSound_cFv = .text:0x8035C3F0; // type:function size:0x2F8
__ct__32dSndControlSoundSeqTrackVolume_cFv = .text:0x8035C6F0; // type:function size:0x44
__ct__33dSndControlSoundStrmTrackVolume_cFv = .text:0x8035C740; // type:function size:0x44
__dt__32dSndControlSoundSeqTrackVolume_cFv = .text:0x8035C790; // type:function size:0x40
__dt__33dSndControlSoundStrmTrackVolume_cFv = .text:0x8035C7D0; // type:function size:0x40
__dt__11dSndSound_cFv = .text:0x8035C810; // type:function size:0xA0
fn_8035C8B0 = .text:0x8035C8B0; // type:function size:0x84
fn_8035C940 = .text:0x8035C940; // type:function size:0xE8
reset__11dSndSound_cFv = .text:0x8035C940; // type:function size:0xE8
fn_8035CA30 = .text:0x8035CA30; // type:function size:0xD8
fn_8035CB10 = .text:0x8035CB10; // type:function size:0x6C
fadeIn__11dSndSound_cFUli = .text:0x8035CB10; // type:function size:0x6C
fn_8035CB80 = .text:0x8035CB80; // type:function size:0xD4
fn_8035CC60 = .text:0x8035CC60; // type:function size:0xCC
fn_8035CD30 = .text:0x8035CD30; // type:function size:0x58
fn_8035CD90 = .text:0x8035CD90; // type:function size:0x58
fn_8035CDF0 = .text:0x8035CDF0; // type:function size:0x58
isStrmSound__11dSndSound_cFv = .text:0x8035CD30; // type:function size:0x58
isWaveSound__11dSndSound_cFv = .text:0x8035CD90; // type:function size:0x58
isSeqSound__11dSndSound_cFv = .text:0x8035CDF0; // type:function size:0x58
fn_8035CE50 = .text:0x8035CE50; // type:function size:0x28
fn_8035CE80 = .text:0x8035CE80; // type:function size:0x28
fn_8035CEB0 = .text:0x8035CEB0; // type:function size:0x84
fn_8035CF40 = .text:0x8035CF40; // type:function size:0x78
readSeqTrackVariable__11dSndSound_cFi = .text:0x8035CEB0; // type:function size:0x84
writeSeqTrackVariable__11dSndSound_cFis = .text:0x8035CF40; // type:function size:0x78
fn_8035CFC0 = .text:0x8035CFC0; // type:function size:0x90
fn_8035D050 = .text:0x8035D050; // type:function size:0x1C
fn_8035D070 = .text:0x8035D070; // type:function size:0x1C
setPitchRelated__11dSndSound_cFfl = .text:0x8035D070; // type:function size:0x1C
fn_8035D090 = .text:0x8035D090; // type:function size:0x1C
fn_8035D0B0 = .text:0x8035D0B0; // type:function size:0xE8
resetTrackVolumes__11dSndSound_cFv = .text:0x8035D0B0; // type:function size:0xE8
fn_8035D1A0 = .text:0x8035D1A0; // type:function size:0x114
fn_8035D2C0 = .text:0x8035D2C0; // type:function size:0xC0
fn_8035D380 = .text:0x8035D380; // type:function size:0xA0
@@ -19913,12 +19913,12 @@ fn_8035D4C0 = .text:0x8035D4C0; // type:function size:0xB8
fn_8035D580 = .text:0x8035D580; // type:function size:0xB8
fn_8035D640 = .text:0x8035D640; // type:function size:0x24
fn_8035D670 = .text:0x8035D670; // type:function size:0x60
fn_8035D6D0 = .text:0x8035D6D0; // type:function size:0x78
setSeqTrackMute__11dSndSound_cFUlQ34nw4r3snd7SeqMute = .text:0x8035D6D0; // type:function size:0x78
fn_8035D750 = .text:0x8035D750; // type:function size:0x1E8
fn_8035D940 = .text:0x8035D940; // type:function size:0x58
fn_8035D9A0 = .text:0x8035D9A0; // type:function size:0x68
fn_8035DA10 = .text:0x8035DA10; // type:function size:0x4C
fn_8035DA60 = .text:0x8035DA60; // type:function size:0x28
stop__11dSndSound_cFv = .text:0x8035DA10; // type:function size:0x4C
configure__13dSndControl_cFfff = .text:0x8035DA60; // type:function size:0x28
getSoundArchivePath__15dSndPlayerMgr_cFv = .text:0x8035DA90; // type:function size:0xC
__dt__33SndMgrDisposer<15dSndPlayerMgr_c>Fv = .text:0x8035DAA0; // type:function size:0x78
create__33SndMgrDisposer<15dSndPlayerMgr_c>Fv = .text:0x8035DB20; // type:function size:0x48
@@ -19977,9 +19977,9 @@ fn_8035EC10 = .text:0x8035EC10; // type:function size:0x5C
fn_8035EC70 = .text:0x8035EC70; // type:function size:0x84
convertLabelStringToSoundId__15dSndPlayerMgr_cCFPCc = .text:0x8035ED00; // type:function size:0x3C
getSoundArchivePlayerForType__15dSndPlayerMgr_cFUc = .text:0x8035ED40; // type:function size:0x44
fn_8035ED90 = .text:0x8035ED90; // type:function size:0x5C
canUseThisPlayer__15dSndPlayerMgr_cCFUc = .text:0x8035ED90; // type:function size:0x5C
loadDemoArchive__15dSndPlayerMgr_cFPCc = .text:0x8035EDF0; // type:function size:0x198
fn_8035EF90 = .text:0x8035EF90; // type:function size:0x38
shutdown__15dSndPlayerMgr_cFv = .text:0x8035EF90; // type:function size:0x38
calc__15dSndPlayerMgr_cFv = .text:0x8035EFD0; // type:function size:0x40
fn_8035F010 = .text:0x8035F010; // type:function size:0x20
fn_8035F030 = .text:0x8035F030; // type:function size:0x1C
@@ -20381,29 +20381,29 @@ fn_8036BDB0 = .text:0x8036BDB0; // type:function size:0x30
fn_8036BDE0 = .text:0x8036BDE0; // type:function size:0xA8
fn_8036BE90 = .text:0x8036BE90; // type:function size:0x158
fn_8036BFF0 = .text:0x8036BFF0; // type:function size:0xA0
fn_8036C090 = .text:0x8036C090; // type:function size:0x20
fn_8036C0B0 = .text:0x8036C0B0; // type:function size:0x1C
fn_8036C0D0 = .text:0x8036C0D0; // type:function size:0xA8
fn_8036C180 = .text:0x8036C180; // type:function size:0x84
fn_8036C210 = .text:0x8036C210; // type:function size:0x20
fn_8036C230 = .text:0x8036C230; // type:function size:0x1C
fn_8036C250 = .text:0x8036C250; // type:function size:0x48
fn_8036C2A0 = .text:0x8036C2A0; // type:function size:0x70
fn_8036C310 = .text:0x8036C310; // type:function size:0x3C
fn_8036C350 = .text:0x8036C350; // type:function size:0x4C
fn_8036C3A0 = .text:0x8036C3A0; // type:function size:0x50
fn_8036C3F0 = .text:0x8036C3F0; // type:function size:0x54
fn_8036C450 = .text:0x8036C450; // type:function size:0x48
fn_8036C4A0 = .text:0x8036C4A0; // type:function size:0x40
fn_8036C4E0 = .text:0x8036C4E0; // type:function size:0x44
fn_8036C530 = .text:0x8036C530; // type:function size:0x44
fn_8036C580 = .text:0x8036C580; // type:function size:0x44
fn_8036C5D0 = .text:0x8036C5D0; // type:function size:0x10
fn_8036C5E0 = .text:0x8036C5E0; // type:function size:0xC
fn_8036C5F0 = .text:0x8036C5F0; // type:function size:0x10
fn_8036C600 = .text:0x8036C600; // type:function size:0xC
fn_8036C610 = .text:0x8036C610; // type:function size:0x40
fn_8036C650 = .text:0x8036C650; // type:function size:0x58
reset__13dSndControl_cFv = .text:0x8036C090; // type:function size:0x20
stop__13dSndControl_cFv = .text:0x8036C0B0; // type:function size:0x1C
set__13dSndControl_cFfl = .text:0x8036C0D0; // type:function size:0xA8
calc__13dSndControl_cFv = .text:0x8036C180; // type:function size:0x84
apply__24dSndControlSoundVolume_cFP11dSndSound_c = .text:0x8036C210; // type:function size:0x20
apply__23dSndControlSoundPitch_cFP11dSndSound_c = .text:0x8036C230; // type:function size:0x1C
__ct__29dSndControlSoundPitchLinear_cFv = .text:0x8036C250; // type:function size:0x48
set__29dSndControlSoundPitchLinear_cFfl = .text:0x8036C2A0; // type:function size:0x70
apply__29dSndControlSoundPitchLinear_cFP11dSndSound_c = .text:0x8036C310; // type:function size:0x3C
apply__36dSndControlSoundSeqTrackTempoRatio_cFP11dSndSound_c = .text:0x8036C350; // type:function size:0x4C
apply__32dSndControlSoundSeqTrackVolume_cFP11dSndSound_c = .text:0x8036C3A0; // type:function size:0x50
apply__33dSndControlSoundStrmTrackVolume_cFP11dSndSound_c = .text:0x8036C3F0; // type:function size:0x54
__ct__29dSndControlPlayerVolumeBase_cFv = .text:0x8036C450; // type:function size:0x48
reset__19dSndControlPlayer_cFv = .text:0x8036C4A0; // type:function size:0x40
setIndex1__19dSndControlPlayer_cFl = .text:0x8036C4E0; // type:function size:0x44
setIndex2__19dSndControlPlayer_cFl = .text:0x8036C530; // type:function size:0x44
stop__19dSndControlPlayer_cFv = .text:0x8036C580; // type:function size:0x44
apply__25dSndControlPlayerVolume_cFv = .text:0x8036C5D0; // type:function size:0x10
getAppliedValue__25dSndControlPlayerVolume_cFv = .text:0x8036C5E0; // type:function size:0xC
apply__26dSndControlPlayerLpfFreq_cFv = .text:0x8036C5F0; // type:function size:0x10
getAppliedValue__26dSndControlPlayerLpfFreq_cFv = .text:0x8036C600; // type:function size:0xC
apply__25dSndControlPlayerFxSend_cFv = .text:0x8036C610; // type:function size:0x40
getAppliedValue__25dSndControlPlayerFxSend_cFv = .text:0x8036C650; // type:function size:0x58
fn_8036C6B0 = .text:0x8036C6B0; // type:function size:0x64
isInvalidSoundId = .text:0x8036C720; // type:function size:0x10
FanfareSoundMgr__dtor = .text:0x8036C730; // type:function size:0x78
@@ -20550,7 +20550,7 @@ fn_80372E30 = .text:0x80372E30; // type:function size:0x40
fn_80372E70 = .text:0x80372E70; // type:function size:0xB0
fn_80372F20 = .text:0x80372F20; // type:function size:0x6C
AnotherSoundMgr__playSound = .text:0x80372F90; // type:function size:0x264
fn_80373200 = .text:0x80373200; // type:function size:0x8
vt_0xF4__14dSoundSource_cFv = .text:0x80373200; // type:function size:0x8
fn_80373210 = .text:0x80373210; // type:function size:0xB4
fn_803732D0 = .text:0x803732D0; // type:function size:0x44
fn_80373320 = .text:0x80373320; // type:function size:0x8C
@@ -20591,8 +20591,8 @@ fn_80374DB0 = .text:0x80374DB0; // type:function size:0x24
fn_80374DE0 = .text:0x80374DE0; // type:function size:0x58
fn_80374E40 = .text:0x80374E40; // type:function size:0x10
fn_80374E50 = .text:0x80374E50; // type:function size:0x330
fn_80375180 = .text:0x80375180; // type:function size:0x28
fn_803751B0 = .text:0x803751B0; // type:function size:0x10
vt_0x38__14dSoundSource_cFv = .text:0x80375180; // type:function size:0x28
vt_0x3C__14dSoundSource_cFv = .text:0x803751B0; // type:function size:0x10
fn_803751C0 = .text:0x803751C0; // type:function size:0x70
fn_80375230 = .text:0x80375230; // type:function size:0xA4
fn_803752E0 = .text:0x803752E0; // type:function size:0xC8
@@ -20877,7 +20877,7 @@ fn_8037F0E0 = .text:0x8037F0E0; // type:function size:0xC
fn_8037F0F0 = .text:0x8037F0F0; // type:function size:0x60
fn_8037F150 = .text:0x8037F150; // type:function size:0x6D0
d_s_vt_0x17C__14dSoundSource_cFv = .text:0x8037F820; // type:function size:0x8
fn_8037F830 = .text:0x8037F830; // type:function size:0x8
vt_0x18__14dSoundSource_cFv = .text:0x8037F830; // type:function size:0x8
fn_8037F840 = .text:0x8037F840; // type:function size:0x74
fn_8037F8C0 = .text:0x8037F8C0; // type:function size:0x78
fn_8037F940 = .text:0x8037F940; // type:function size:0x48
@@ -20986,7 +20986,7 @@ fn_80384960 = .text:0x80384960; // type:function size:0x8C
fn_803849F0 = .text:0x803849F0; // type:function size:0xC
fn_80384A00 = .text:0x80384A00; // type:function size:0x174
fn_80384B80 = .text:0x80384B80; // type:function size:0x178
fn_80384D00 = .text:0x80384D00; // type:function size:0x8
vt_0x10__14dSoundSource_cFv = .text:0x80384D00; // type:function size:0x8
fn_80384D10 = .text:0x80384D10; // type:function size:0x78
fn_80384D90 = .text:0x80384D90; // type:function size:0x98
fn_80384E30 = .text:0x80384E30; // type:function size:0xBC
@@ -21017,32 +21017,32 @@ fn_80385830 = .text:0x80385830; // type:function size:0x44
fn_80385880 = .text:0x80385880; // type:function size:0x50
fn_803858D0 = .text:0x803858D0; // type:function size:0xA0
fn_80385970 = .text:0x80385970; // type:function size:0x90
fn_80385A00 = .text:0x80385A00; // type:function size:0x8
fn_80385A10 = .text:0x80385A10; // type:function size:0x4
vt_0x118__14dSoundSource_cFv = .text:0x80385A00; // type:function size:0x8
vt_0x114__14dSoundSource_cFv = .text:0x80385A10; // type:function size:0x4
d_s_vt_0x1D4__14dSoundSource_cFv = .text:0x80385A20; // type:function size:0x8
fn_80385A30 = .text:0x80385A30; // type:function size:0x4
fn_80385A40 = .text:0x80385A40; // type:function size:0x4
fn_80385A50 = .text:0x80385A50; // type:function size:0x4
fn_80385A60 = .text:0x80385A60; // type:function size:0x8
fn_80385A70 = .text:0x80385A70; // type:function size:0x4
setRate__14dSoundSource_cFf = .text:0x80385A30; // type:function size:0x4
setFrame__14dSoundSource_cFf = .text:0x80385A40; // type:function size:0x4
load__14dSoundSource_cFPvPCc = .text:0x80385A50; // type:function size:0x4
isReadyMaybe__14dSoundSource_cFv = .text:0x80385A60; // type:function size:0x8
vt_0xF0__14dSoundSource_cFv = .text:0x80385A70; // type:function size:0x4
d_s_vt_0x1CC__14dSoundSource_cFv = .text:0x80385A80; // type:function size:0x4
d_s_vt_0x1C0__14dSoundSource_cFv = .text:0x80385A90; // type:function size:0x34
fn_80385AD0 = .text:0x80385AD0; // type:function size:0x8
fn_80385AE0 = .text:0x80385AE0; // type:function size:0x8
fn_80385AF0 = .text:0x80385AF0; // type:function size:0x4
fn_80385B00 = .text:0x80385B00; // type:function size:0x4
fn_80385B10 = .text:0x80385B10; // type:function size:0x8
fn_80385B20 = .text:0x80385B20; // type:function size:0x8
fn_80385B30 = .text:0x80385B30; // type:function size:0x8
fn_80385B40 = .text:0x80385B40; // type:function size:0x8
fn_80385B50 = .text:0x80385B50; // type:function size:0x10
fn_80385B60 = .text:0x80385B60; // type:function size:0x10
fn_80385B70 = .text:0x80385B70; // type:function size:0x8
vt_0xE8__14dSoundSource_cFv = .text:0x80385AD0; // type:function size:0x8
vt_0xEC__14dSoundSource_cFv = .text:0x80385AE0; // type:function size:0x8
vt_0xE0__14dSoundSource_cFv = .text:0x80385AF0; // type:function size:0x4
vt_0xE4__14dSoundSource_cFv = .text:0x80385B00; // type:function size:0x4
vt_0xDC__14dSoundSource_cFv = .text:0x80385B10; // type:function size:0x8
vt_0xD4__14dSoundSource_cFv = .text:0x80385B20; // type:function size:0x8
vt_0x54__14dSoundSource_cFv = .text:0x80385B30; // type:function size:0x8
vt_0x40__14dSoundSource_cFv = .text:0x80385B40; // type:function size:0x8
vt_0x34__14dSoundSource_cFv = .text:0x80385B50; // type:function size:0x10
vt_0x30__14dSoundSource_cFv = .text:0x80385B60; // type:function size:0x10
vt_0xF8__14dSoundSource_cFv = .text:0x80385B70; // type:function size:0x8
d_s_vt_0x188__14dSoundSource_cFv = .text:0x80385B80; // type:function size:0x4
fn_80385B90 = .text:0x80385B90; // type:function size:0x4
fn_80385BA0 = .text:0x80385BA0; // type:function size:0x8
fn_80385BB0 = .text:0x80385BB0; // type:function size:0x14
fn_80385BD0 = .text:0x80385BD0; // type:function size:0x14
vt_0x20__14dSoundSource_cFv = .text:0x80385B90; // type:function size:0x4
vt_0x24__14dSoundSource_cFv = .text:0x80385BA0; // type:function size:0x8
vt_0x1C__14dSoundSource_cFv = .text:0x80385BB0; // type:function size:0x14
vt_0x14__14dSoundSource_cFv = .text:0x80385BD0; // type:function size:0x14
fn_80385BF0 = .text:0x80385BF0; // type:function size:0xC
fn_80385C00 = .text:0x80385C00; // type:function size:0xC
fn_80385C10 = .text:0x80385C10; // type:function size:0xC
@@ -21132,63 +21132,63 @@ fn_80386F70 = .text:0x80386F70; // type:function size:0x1A4C
soundForActorInitRelated_803889c0 = .text:0x803889C0; // type:function size:0x4
__ct__14dSoundSource_cFUcP9dAcBase_cii = .text:0x803889D0; // type:function size:0x108
__dt__14dSoundSource_cFv = .text:0x80388AE0; // type:function size:0xC4
fn_80388BB0 = .text:0x80388BB0; // type:function size:0x118
fn_80388CD0 = .text:0x80388CD0; // type:function size:0x9C
vt_0x0C__14dSoundSource_cFv = .text:0x80388BB0; // type:function size:0x118
vt_0x44__14dSoundSource_cFv = .text:0x80388CD0; // type:function size:0x9C
fn_80388D70 = .text:0x80388D70; // type:function size:0x80
fn_80388DF0 = .text:0x80388DF0; // type:function size:0xC
fn_80388E00 = .text:0x80388E00; // type:function size:0x88
getListenerPosition__14dSoundSource_cCFv = .text:0x80388DF0; // type:function size:0xC
vt_0x2C__14dSoundSource_cFv = .text:0x80388E00; // type:function size:0x88
d_s_vt_0x184__14dSoundSource_cFv = .text:0x80388E90; // type:function size:0x84
d_s_vt_0x18C__14dSoundSource_cFv = .text:0x80388F20; // type:function size:0x4
hasPlayingSounds__14dSoundSource_cCFv = .text:0x80388F30; // type:function size:0x8
fn_80388F40 = .text:0x80388F40; // type:function size:0x8
fn_80388F50 = .text:0x80388F50; // type:function size:0x48
isPlayingSound__14dSoundSource_cFUl = .text:0x80388F40; // type:function size:0x8
isPlayingSound__14dSoundSource_cFPCc = .text:0x80388F50; // type:function size:0x48
fn_80388FA0 = .text:0x80388FA0; // type:function size:0x14
fn_80388FC0 = .text:0x80388FC0; // type:function size:0x84
fn_80389050 = .text:0x80389050; // type:function size:0x68
fn_803890C0 = .text:0x803890C0; // type:function size:0x18
fn_803890E0 = .text:0x803890E0; // type:function size:0x1C
vt_0x5C__14dSoundSource_cFv = .text:0x803890C0; // type:function size:0x18
vt_0x58__14dSoundSource_cFv = .text:0x803890E0; // type:function size:0x1C
fn_80389100 = .text:0x80389100; // type:function size:0x60
d_s_vt_0x190__14dSoundSource_cFv = .text:0x80389160; // type:function size:0x40
d_vt_0x38__14dSoundSource_cFbi = .text:0x803891A0; // type:function size:0xB0
fn_80389250 = .text:0x80389250; // type:function size:0x30
fn_80389280 = .text:0x80389280; // type:function size:0x48
fn_803892D0 = .text:0x803892D0; // type:function size:0x64
fn_80389340 = .text:0x80389340; // type:function size:0x58
fn_803893A0 = .text:0x803893A0; // type:function size:0x60
fn_80389400 = .text:0x80389400; // type:function size:0x58
fn_80389460 = .text:0x80389460; // type:function size:0x88
fn_803894F0 = .text:0x803894F0; // type:function size:0x68
fn_80389560 = .text:0x80389560; // type:function size:0x94
vt_0x60__14dSoundSource_cFv = .text:0x80389250; // type:function size:0x30
vt_0x70__14dSoundSource_cFv = .text:0x80389280; // type:function size:0x48
vt_0x64__14dSoundSource_cFv = .text:0x803892D0; // type:function size:0x64
vt_0x74__14dSoundSource_cFv = .text:0x80389340; // type:function size:0x58
vt_0x68__14dSoundSource_cFv = .text:0x803893A0; // type:function size:0x60
vt_0x78__14dSoundSource_cFv = .text:0x80389400; // type:function size:0x58
vt_0x6C__14dSoundSource_cFv = .text:0x80389460; // type:function size:0x88
vt_0x7C__14dSoundSource_cFv = .text:0x803894F0; // type:function size:0x68
vt_0xA0__14dSoundSource_cFv = .text:0x80389560; // type:function size:0x94
fn_80389600 = .text:0x80389600; // type:function size:0x74
fn_80389680 = .text:0x80389680; // type:function size:0x40
fn_803896C0 = .text:0x803896C0; // type:function size:0x1A8
fn_80389870 = .text:0x80389870; // type:function size:0x11C
fn_80389990 = .text:0x80389990; // type:function size:0x58
fn_803899F0 = .text:0x803899F0; // type:function size:0x184
fn_80389B80 = .text:0x80389B80; // type:function size:0x68
fn_80389BF0 = .text:0x80389BF0; // type:function size:0x160
fn_80389D50 = .text:0x80389D50; // type:function size:0x78
fn_80389DD0 = .text:0x80389DD0; // type:function size:0x11C
fn_80389EF0 = .text:0x80389EF0; // type:function size:0x58
vt_0x80__14dSoundSource_cFv = .text:0x80389870; // type:function size:0x11C
vt_0x8C__14dSoundSource_cFv = .text:0x80389990; // type:function size:0x58
vt_0x84__14dSoundSource_cFv = .text:0x803899F0; // type:function size:0x184
vt_0x90__14dSoundSource_cFv = .text:0x80389B80; // type:function size:0x68
vt_0x88__14dSoundSource_cFv = .text:0x80389BF0; // type:function size:0x160
vt_0x94__14dSoundSource_cFv = .text:0x80389D50; // type:function size:0x78
vt_0x98__14dSoundSource_cFv = .text:0x80389DD0; // type:function size:0x11C
vt_0x9C__14dSoundSource_cFv = .text:0x80389EF0; // type:function size:0x58
fn_80389F50 = .text:0x80389F50; // type:function size:0x208
d_s_vt_0x19C__14dSoundSource_cFv = .text:0x8038A160; // type:function size:0x6C
fn_8038A1D0 = .text:0x8038A1D0; // type:function size:0xD8
fn_8038A2B0 = .text:0x8038A2B0; // type:function size:0x48
vt_0xD8__14dSoundSource_cFv = .text:0x8038A2B0; // type:function size:0x48
fn_8038A300 = .text:0x8038A300; // type:function size:0x10
fn_8038A310 = .text:0x8038A310; // type:function size:0xB8
fn_8038A3D0 = .text:0x8038A3D0; // type:function size:0x58
fn_8038A430 = .text:0x8038A430; // type:function size:0x30
fn_8038A460 = .text:0x8038A460; // type:function size:0x48
fn_8038A4B0 = .text:0x8038A4B0; // type:function size:0x64
fn_8038A520 = .text:0x8038A520; // type:function size:0x58
fn_8038A580 = .text:0x8038A580; // type:function size:0x60
fn_8038A5E0 = .text:0x8038A5E0; // type:function size:0x58
fn_8038A640 = .text:0x8038A640; // type:function size:0x88
fn_8038A6D0 = .text:0x8038A6D0; // type:function size:0x68
vt_0xA4__14dSoundSource_cFv = .text:0x8038A310; // type:function size:0xB8
vt_0xA8__14dSoundSource_cFv = .text:0x8038A3D0; // type:function size:0x58
vt_0xAC__14dSoundSource_cFv = .text:0x8038A430; // type:function size:0x30
vt_0xBC__14dSoundSource_cFv = .text:0x8038A460; // type:function size:0x48
vt_0xB0__14dSoundSource_cFv = .text:0x8038A4B0; // type:function size:0x64
vt_0xC0__14dSoundSource_cFv = .text:0x8038A520; // type:function size:0x58
vt_0xB4__14dSoundSource_cFv = .text:0x8038A580; // type:function size:0x60
vt_0xC4__14dSoundSource_cFv = .text:0x8038A5E0; // type:function size:0x58
vt_0xB8__14dSoundSource_cFv = .text:0x8038A640; // type:function size:0x88
vt_0xC8__14dSoundSource_cFv = .text:0x8038A6D0; // type:function size:0x68
fn_8038A740 = .text:0x8038A740; // type:function size:0x1E8
fn_8038A930 = .text:0x8038A930; // type:function size:0x1D0
fn_8038AB00 = .text:0x8038AB00; // type:function size:0x258
fn_8038AD60 = .text:0x8038AD60; // type:function size:0x58
vt_0xCC__14dSoundSource_cFv = .text:0x8038AB00; // type:function size:0x258
vt_0xD0__14dSoundSource_cFv = .text:0x8038AD60; // type:function size:0x58
SetupSound__14dSoundSource_cFPQ34nw4r3snd11SoundHandleUlPCQ44nw4r3snd14SoundStartable9StartInfoPv = .text:0x8038ADC0; // type:function size:0xAC
d_s_vt_0x1AC__14dSoundSource_cFv = .text:0x8038AE70; // type:function size:0x98
d_s_vt_0x1B0__14dSoundSource_cFv = .text:0x8038AF10; // type:function size:0x254
@@ -21221,8 +21221,8 @@ fn_8038BA80 = .text:0x8038BA80; // type:function size:0x90
fn_8038BB10 = .text:0x8038BB10; // type:function size:0x6C
fn_8038BB80 = .text:0x8038BB80; // type:function size:0x6C
fn_8038BBF0 = .text:0x8038BBF0; // type:function size:0x144
fn_8038BD40 = .text:0x8038BD40; // type:function size:0x20
fn_8038BD60 = .text:0x8038BD60; // type:function size:0xC
vt_0xFC__14dSoundSource_cFv = .text:0x8038BD40; // type:function size:0x20
vt_0x110__14dSoundSource_cFv = .text:0x8038BD60; // type:function size:0xC
d_s_vt_0x1E4__14dSoundSource_cFv = .text:0x8038BD70; // type:function size:0x4
fn_8038BD80 = .text:0x8038BD80; // type:function size:0xB8
fn_8038BE40 = .text:0x8038BE40; // type:function size:0xC4
@@ -21627,7 +21627,7 @@ __dt__32SndMgrDisposer<14SndMgr80399c20>Fv = .text:0x80399BA0; // type:function
create__32SndMgrDisposer<14SndMgr80399c20>Fv = .text:0x80399C20; // type:function size:0x84
remove__32SndMgrDisposer<14SndMgr80399c20>Fv = .text:0x80399CB0; // type:function size:0x10
fn_80399CC0 = .text:0x80399CC0; // type:function size:0x34
fn_80399D00 = .text:0x80399D00; // type:function size:0x5C
__dt__14SndMgr80399c20Fv = .text:0x80399D00; // type:function size:0x5C
fn_80399D60 = .text:0x80399D60; // type:function size:0x44
fn_80399DB0 = .text:0x80399DB0; // type:function size:0x34
fn_80399DF0 = .text:0x80399DF0; // type:function size:0x15C
@@ -21656,9 +21656,9 @@ fn_8039A7E0 = .text:0x8039A7E0; // type:function size:0x38
fn_8039A820 = .text:0x8039A820; // type:function size:0x8
fn_8039A830 = .text:0x8039A830; // type:function size:0x8
fn_8039A840 = .text:0x8039A840; // type:function size:0x8
fn_8039A850 = .text:0x8039A850; // type:function size:0x2C
fn_8039A880 = .text:0x8039A880; // type:function size:0x58
fn_8039A8E0 = .text:0x8039A8E0; // type:function size:0x80
pitchScaleForPitchIdx = .text:0x8039A850; // type:function size:0x2C
pitchScaleForPitchIdxTenths__Ff = .text:0x8039A880; // type:function size:0x58
pitchIdxTenthsForPitchScale__Ff = .text:0x8039A8E0; // type:function size:0x80
fn_8039A960 = .text:0x8039A960; // type:function size:0x10
fn_8039A970 = .text:0x8039A970; // type:function size:0x5C
fn_8039A9D0 = .text:0x8039A9D0; // type:function size:0x14
@@ -37636,7 +37636,7 @@ __vt__11dSndActor_c = .data:0x80548684; // type:object size:0x1C scope:weak
__vt__23IsCurrentSoundIdChecker = .data:0x805486A0; // type:object size:0x10
__vt__13dSnd3DActor_c = .data:0x805486B0; // type:object size:0x60
__vt__14dSnd3DEngine_c = .data:0x80548710; // type:object size:0x20
lbl_80548730 = .data:0x80548730; // type:object size:0x28
__vt__11dSndSound_c = .data:0x80548730; // type:object size:0x28
lbl_80548758 = .data:0x80548758; // type:object size:0x14 data:string
lbl_8054876C = .data:0x8054876C; // type:object size:0x14 data:string
__vt__15dSndPlayerMgr_c = .data:0x80548780; // type:object size:0x10
@@ -37696,16 +37696,16 @@ lbl_80548B1C = .data:0x80548B1C; // type:object size:0x10
lbl_80548B2C = .data:0x80548B2C; // type:object size:0xC
lbl_80548B38 = .data:0x80548B38; // type:object size:0x10
lbl_80548B48 = .data:0x80548B48; // type:object size:0x30
lbl_80548B78 = .data:0x80548B78; // type:object size:0x20
lbl_80548B98 = .data:0x80548B98; // type:object size:0x20
lbl_80548BB8 = .data:0x80548BB8; // type:object size:0x20
lbl_80548BD8 = .data:0x80548BD8; // type:object size:0x20
lbl_80548BF8 = .data:0x80548BF8; // type:object size:0x20
lbl_80548C18 = .data:0x80548C18; // type:object size:0x20
lbl_80548C38 = .data:0x80548C38; // type:object size:0x24
lbl_80548C5C = .data:0x80548C5C; // type:object size:0x24
lbl_80548C80 = .data:0x80548C80; // type:object size:0x24
lbl_80548CA4 = .data:0x80548CA4; // type:object size:0x24
__vt__33dSndControlSoundStrmTrackVolume_c = .data:0x80548B78; // type:object size:0x20
__vt__32dSndControlSoundSeqTrackVolume_c = .data:0x80548B98; // type:object size:0x20
__vt__36dSndControlSoundSeqTrackTempoRatio_c = .data:0x80548BB8; // type:object size:0x20
__vt__29dSndControlSoundPitchLinear_c = .data:0x80548BD8; // type:object size:0x20
__vt__23dSndControlSoundPitch_c = .data:0x80548BF8; // type:object size:0x20
__vt__24dSndControlSoundVolume_c = .data:0x80548C18; // type:object size:0x20
__vt__25dSndControlPlayerFxSend_c = .data:0x80548C38; // type:object size:0x24
__vt__26dSndControlPlayerLpfFreq_c = .data:0x80548C5C; // type:object size:0x24
__vt__25dSndControlPlayerVolume_c = .data:0x80548C80; // type:object size:0x24
__vt__29dSndControlPlayerVolumeBase_c = .data:0x80548CA4; // type:object size:0x24 scope:weak
jumptable_80548CC8 = .data:0x80548CC8; // type:object size:0x34 scope:local
jumptable_80548CFC = .data:0x80548CFC; // type:object size:0x284 scope:local
lbl_80548F80 = .data:0x80548F80; // type:object size:0xC
@@ -48608,12 +48608,12 @@ lbl_8057D90C = .sdata2:0x8057D90C; // type:object size:0x4 align:4 data:float
lbl_8057D910 = .sdata2:0x8057D910; // type:object size:0x4 align:4 data:float
lbl_8057D914 = .sdata2:0x8057D914; // type:object size:0x4 align:4 data:float
lbl_8057D918 = .sdata2:0x8057D918; // type:object size:0x4 align:4 data:float
lbl_8057D920 = .sdata2:0x8057D920; // type:object size:0x8 align:8 data:double
lbl_8057D928 = .sdata2:0x8057D928; // type:object size:0x4 align:4 data:float
lbl_8057D92C = .sdata2:0x8057D92C; // type:object size:0x4 align:4 data:float
lbl_8057D930 = .sdata2:0x8057D930; // type:object size:0x4 align:4 data:float
lbl_8057D938 = .sdata2:0x8057D938; // type:object size:0x4 align:4 data:float
lbl_8057D93C = .sdata2:0x8057D93C; // type:object size:0x4 align:4 data:float
@2743 = .sdata2:0x8057D920; // type:object size:0x8 scope:local align:8 data:double
@2762 = .sdata2:0x8057D928; // type:object size:0x4 scope:local align:4 data:float
@2763 = .sdata2:0x8057D92C; // type:object size:0x4 scope:local align:4 data:float
@2767 = .sdata2:0x8057D930; // type:object size:0x4 scope:local align:4 data:float
@1614 = .sdata2:0x8057D938; // type:object size:0x4 scope:local align:4 data:float
@1615 = .sdata2:0x8057D93C; // type:object size:0x4 scope:local align:4 data:float
lbl_8057D940 = .sdata2:0x8057D940; // type:object size:0x4 align:4 data:float
lbl_8057D944 = .sdata2:0x8057D944; // type:object size:0x4 align:4 data:float
lbl_8057D948 = .sdata2:0x8057D948; // type:object size:0x4 align:4 data:float
+5 -2
View File
@@ -706,12 +706,15 @@ config.libs = [
Object(Matching, "d/snd/d_snd_actor.cpp"),
Object(NonMatching, "d/snd/d_snd_3d_actor.cpp"),
Object(NonMatching, "d/snd/d_snd_3d_engine.cpp"),
Object(NonMatching, "d/snd/d_snd_unk_component_1.cpp"),
Object(NonMatching, "d/snd/d_snd_sound.cpp"),
Object(NonMatching, "d/snd/d_snd_player_mgr.cpp"),
Object(NonMatching, "d/snd/mgr/d_snd_mgr_unk1.cpp"),
Object(Matching, "d/snd/d_snd_3d_manager.cpp"),
Object(NonMatching, "d/snd/mgr/d_snd_mgr_enemy.cpp"),
Object(NonMatching, "d/snd/d_snd_unk_component_2.cpp"),
Object(NonMatching, "d/snd/d_snd_sound_ex.cpp"),
Object(Matching, "d/snd/d_snd_control_sound.cpp"),
Object(Matching, "d/snd/d_snd_control_player.cpp"),
Object(NonMatching, "d/snd/mgr/d_snd_mgr_effect.cpp"),
Object(NonMatching, "d/snd/mgr/d_snd_mgr_unk_5.cpp"),
Object(NonMatching, "d/snd/mgr/d_snd_mgr_unk_13.cpp"),
@@ -721,7 +724,7 @@ config.libs = [
Object(NonMatching, "d/snd/mgr/d_snd_mgr_unk_9.cpp"),
Object(NonMatching, "d/snd/mgr/d_snd_mgr_unk_10.cpp"),
Object(NonMatching, "d/snd/mgr/d_snd_mgr_unk_11.cpp"),
Object(NonMatching, "d/snd/mgr/d_snd_mgr_unk_12.cpp"),
Object(NonMatching, "d/snd/d_snd_calc_pitch.cpp"),
],
},
{
+1 -1
View File
@@ -4,7 +4,7 @@
#include "UnknownTypeBelongings.h"
#include "common.h"
#include "d/d_base.h"
#include "d/snd/d_snd_source.h"
#include "d/snd/d_snd_source_if.h"
#include "m/m_allocator.h"
#include "m/m_angle.h"
#include "m/m_vec.h"
+12 -2
View File
@@ -41,12 +41,20 @@ public:
virtual void d_vt_0x58() = 0;
virtual void d_vt_0x5C() = 0;
void calculatePositionRelativeToListener();
void updatePositionRelativeToListener();
void updateDistanceToListener();
void resetFloats();
bool checkFlag(u16 flag) const {
return (mFlags & flag);
}
void setFlag(u16 flag) {
mFlags |= flag;
}
bool hasPlayingSounds() const;
bool isPlayingSound(u32 id);
@@ -63,10 +71,12 @@ protected:
/* 0x88 */ f32 a_field_0x88;
/* 0x8C */ f32 a_field_0x8C;
/* 0x90 */ f32 a_field_0x90;
/* 0x94 */ f32 a_field_0x94;
/* 0x94 */ f32 mDistanceToListener;
/* 0x98 */ f32 a_field_0x98;
/* 0x9C */ f32 a_field_0x9C;
/* 0xA0 */ u8 a_0xA0[0xC8 - 0xA0];
/* 0xA0 */ nw4r::math::VEC3 mPositionRelativeToListener;
/* 0xAC */ nw4r::math::VEC3 mPositionTransformedByListener;
/* 0xB8 */ u8 a_0xB8[0xC8 - 0xB8];
/* 0xC8 */ UNKTYPE *a_field_0xC8;
/* 0xCC */ u16 mFlags;
/* 0xD0 */ nw4r::math::VEC3 mPositionRelativeToPlayer;
+9 -5
View File
@@ -42,21 +42,25 @@ public:
return mManager;
}
const mVec3_c &getListenerPos() const {
return mSoundListenerPosition;
const mVec3_c &getCameraTargetPos() const {
return mCameraTargetPosition;
}
const nw4r::math::VEC3 &getSndListenerPos() const {
return mListener.GetPosition();
}
private:
void updateListenerPos(f32);
/* 0x10 */ bool mIsSetup;
/* 0x11 */ u8 field_0x11;
/* 0x11 */ bool mCalculationsFresh;
/* 0x14 */ dSnd3DEngine_c *mpEngine;
/* 0x18 */ nw4r::snd::Sound3DManager mManager;
/* 0x44 */ nw4r::snd::Sound3DListener mListener;
/* 0xB0 */ EGG::LookAtCamera mCamera;
/* 0x138 */ mVec3_c field_0x138;
/* 0x144 */ mVec3_c mSoundListenerPosition;
/* 0x138 */ mVec3_c mCameraDirectionNormalized;
/* 0x144 */ mVec3_c mCameraTargetPosition;
/* 0x150 */ f32 mCameraPosSqVelocity;
/* 0x154 */ f32 mCameraAtSqVelocity;
/* 0x158 */ f32 mCamDistance;
+10
View File
@@ -0,0 +1,10 @@
#ifndef D_SND_CALC_PITCH_H
#define D_SND_CALC_PITCH_H
#include "common.h"
f32 pitchScaleForPitchIdx(s32 idx);
f32 pitchScaleForPitchIdxTenths(f32 idx);
f32 pitchIdxTenthsForPitchScale(f32 scale);
#endif
+53
View File
@@ -0,0 +1,53 @@
#ifndef D_SND_CONTROL_PLAYER_H
#define D_SND_CONTROL_PLAYER_H
#include "d/snd/d_snd_sound.h"
#include "nw4r/snd/snd_SoundPlayer.h"
class dSndControlPlayer_c : public dSndControl_c {
public:
dSndControlPlayer_c(f32 value, f32 min, f32 max) : dSndControl_c(value, min, max) {}
virtual void reset() override; // vt 0x0C
virtual void stop() override; // vt 0x18
virtual void apply() = 0; // vt 0x1C
virtual f32 getAppliedValue() = 0; // vt 0x20
void setIndex1(s32 idx);
void setIndex2(s32 idx);
protected:
/* 0x30 */ nw4r::snd::SoundPlayer *mpPlayer;
/* 0x34 */ s32 mIndex;
};
class dSndControlPlayerVolumeBase_c : public dSndControlPlayer_c {
public:
dSndControlPlayerVolumeBase_c();
};
class dSndControlPlayerVolume_c : public dSndControlPlayerVolumeBase_c {
public:
dSndControlPlayerVolume_c() {}
virtual void apply() override; // vt 0x1C
virtual f32 getAppliedValue() override; // vt 0x20
};
class dSndControlPlayerLpfFreq_c : public dSndControlPlayer_c {
public:
dSndControlPlayerLpfFreq_c() : dSndControlPlayer_c(0.0f, -1.0f, 0.0f) {}
virtual void apply() override; // vt 0x1C
virtual f32 getAppliedValue() override; // vt 0x20
};
class dSndControlPlayerFxSend_c : public dSndControlPlayer_c {
public:
dSndControlPlayerFxSend_c() : dSndControlPlayer_c(0.0f, -1.0f, 0.0f) {}
virtual void apply() override; // vt 0x1C
virtual f32 getAppliedValue() override; // vt 0x20
};
#endif
+3
View File
@@ -29,13 +29,16 @@ private:
public:
dSndPlayerMgr_c();
void shutdown();
void calc();
u32 getFreeSize();
bool loadDemoArchive(const char *demoArchiveName);
const char *getSoundArchivePath();
u32 convertLabelStringToSoundId(const char *label) const;
nw4r::snd::SoundArchivePlayer &getSoundArchivePlayerForType(u8 type);
bool canUseThisPlayer(u8 type) const;
bool checkFlag(u32 mask) const {
return mFlags & mask;
+169
View File
@@ -0,0 +1,169 @@
#ifndef D_SND_SOUND_H
#define D_SND_SOUND_H
#include "common.h"
#include "nw4r/snd/snd_SeqTrack.h"
#include "nw4r/snd/snd_SoundHandle.h"
#include "nw4r/ut/ut_list.h"
class dSndSound_c;
// Not sure, handles a bunch of floats, exists in a ton of variants
class dSndControl_c {
public:
dSndControl_c(f32 value, f32 min, f32 max)
: mResetValue(value),
mMax(max),
mMin(min),
mCurrValue(value),
mStartValue(value),
mTargetValue(value),
mDuration(0),
mTimer(0),
mIsLinked(false) {}
~dSndControl_c() {}
virtual void configure(f32 value, f32 min, f32 max); // vt 0x08
virtual void reset(); // vt 0x0C
virtual void set(f32 value, s32 frames); // vt 0x10
virtual void calc(); // vt 0x14
virtual void stop(); // vt 0x18
bool isLinked() const {
return mIsLinked;
}
void setLinked(bool linked) {
mIsLinked = linked;
}
f32 getCurrentValue() const {
return mCurrValue;
}
protected:
/* 0x04 */ f32 mResetValue;
/* 0x08 */ f32 mMax;
/* 0x0C */ f32 mMin;
/* 0x10 */ f32 mCurrValue;
/* 0x14 */ f32 mStartValue;
/* 0x18 */ f32 mTargetValue;
/* 0x1C */ s32 mDuration;
/* 0x20 */ s32 mTimer;
/* 0x24 */ nw4r::ut::Node mNode;
/* 0x2C */ bool mIsLinked;
};
class dSndControlSound_c : public dSndControl_c {
public:
dSndControlSound_c(f32 value, f32 min, f32 max) : dSndControl_c(value, min, max) {}
virtual void apply(dSndSound_c *pHandle) = 0; // vt 0x1C
private:
};
class dSndControlSoundVolume_c : public dSndControlSound_c {
public:
dSndControlSoundVolume_c() : dSndControlSound_c(1.0f, 0.0f, 2.0f) {}
virtual void apply(dSndSound_c *pHandle) override;
};
class dSndControlSoundPitch_c : public dSndControlSound_c {
public:
dSndControlSoundPitch_c() : dSndControlSound_c(1.0f, 0.25f, 4.0f) {}
virtual void apply(dSndSound_c *pHandle) override;
};
/** Stores pitch as a value from -24 to 24, exponentially scaling it to 0.25-4.0 */
class dSndControlSoundPitchLinear_c : public dSndControlSound_c {
public:
dSndControlSoundPitchLinear_c();
virtual void apply(dSndSound_c *pHandle) override;
virtual void set(f32 value, s32 frames) override;
void setControl(dSndControlSound_c *ctrl) {
mpOtherControl = ctrl;
}
private:
/* 0x30 */ dSndControlSound_c *mpOtherControl;
};
class dSndControlSoundSeqTrackTempoRatio_c : public dSndControlSound_c {
public:
dSndControlSoundSeqTrackTempoRatio_c() : dSndControlSound_c(1.0f, 0.25f, 4.0f) {}
virtual void apply(dSndSound_c *pHandle) override;
};
class dSndControlSoundSeqTrackVolume_c : public dSndControlSound_c {
public:
dSndControlSoundSeqTrackVolume_c() : dSndControlSound_c(1.0f, 0.0f, 2.0f) {}
virtual void apply(dSndSound_c *pHandle) override;
void setMask(u16 mask) {
mMask = mask;
}
private:
/* 0x2E */ u16 mMask;
};
class dSndControlSoundStrmTrackVolume_c : public dSndControlSound_c {
public:
dSndControlSoundStrmTrackVolume_c() : dSndControlSound_c(1.0f, 0.0f, 2.0f) {}
virtual void apply(dSndSound_c *pHandle) override;
void setMask(u16 mask) {
mMask = mask;
}
private:
/* 0x2E */ u16 mMask;
};
class dSndSound_c : public nw4r::snd::SoundHandle {
public:
dSndSound_c();
~dSndSound_c();
virtual void vt_0x08(); // 0x08
virtual void vt_0x0C(); // 0x0C
virtual void fadeIn(u32 id, int fadeFrames); // 0x10
bool isStrmSound();
bool isWaveSound();
bool isSeqSound();
void setPitchRelated(f32 pitch, s32 frames);
void setSeqTrackMute(u32 trackFlags, nw4r::snd::SeqMute mute);
void stop();
s16 readSeqTrackVariable(int varNo);
void writeSeqTrackVariable(int varNo, s16 value);
void linkCtrl(dSndControlSound_c *);
void unlinkCtrl(dSndControlSound_c *);
private:
void reset();
void resetTrackVolumes();
/* 0x08 */ u8 _0x08[0x10 - 0x08];
/* 0x10 */ UNKWORD field_0x10;
/* 0x14 */ u8 field_0x14;
/* 0x15 */ u8 field_0x15;
/* 0x16 */ u8 field_0x16;
/* 0x17 */ u8 field_0x17;
/* 0x18 */ dSndControlSoundVolume_c mCtrlVolume;
/* 0x48 */ dSndControlSoundPitch_c mCtrlPitch;
/* 0x78 */ dSndControlSoundPitchLinear_c mCtrlUnk;
/* 0xAC */ dSndControlSoundSeqTrackVolume_c *mpCtrlSeqTrackVolume;
/* 0xB0 */ dSndControlSoundStrmTrackVolume_c *mpCtrlStrmTrackVolume;
/* 0xB4 */ dSndControlSoundSeqTrackTempoRatio_c mpCtrlSeqTrackTempoRatio;
/* 0xE4 */ nw4r::ut::List mList;
};
#endif
+14 -80
View File
@@ -3,87 +3,9 @@
#include "common.h"
#include "d/snd/d_snd_3d_actor.h"
#include "d/snd/d_snd_source_if.h"
#include "nw4r/ut/ut_list.h"
class dAcBase_c;
class dSoundSourceIf_c {
public:
virtual ~dSoundSourceIf_c() {}
#define SOUNDSOURCE_VIRTUAL(offset) virtual void vt_##offset() = 0;
SOUNDSOURCE_VIRTUAL(0x0C);
SOUNDSOURCE_VIRTUAL(0x10);
SOUNDSOURCE_VIRTUAL(0x14);
SOUNDSOURCE_VIRTUAL(0x18);
SOUNDSOURCE_VIRTUAL(0x1C);
SOUNDSOURCE_VIRTUAL(0x20);
SOUNDSOURCE_VIRTUAL(0x24);
SOUNDSOURCE_VIRTUAL(0x28);
SOUNDSOURCE_VIRTUAL(0x2C);
SOUNDSOURCE_VIRTUAL(0x30);
SOUNDSOURCE_VIRTUAL(0x34);
SOUNDSOURCE_VIRTUAL(0x38);
SOUNDSOURCE_VIRTUAL(0x3C);
SOUNDSOURCE_VIRTUAL(0x40);
SOUNDSOURCE_VIRTUAL(0x44);
virtual bool hasPlayingSounds() const = 0; // 0x48
SOUNDSOURCE_VIRTUAL(0x4C);
SOUNDSOURCE_VIRTUAL(0x50);
SOUNDSOURCE_VIRTUAL(0x54);
SOUNDSOURCE_VIRTUAL(0x58);
SOUNDSOURCE_VIRTUAL(0x5C);
SOUNDSOURCE_VIRTUAL(0x60);
SOUNDSOURCE_VIRTUAL(0x64);
SOUNDSOURCE_VIRTUAL(0x68);
SOUNDSOURCE_VIRTUAL(0x6C);
SOUNDSOURCE_VIRTUAL(0x70);
SOUNDSOURCE_VIRTUAL(0x74);
SOUNDSOURCE_VIRTUAL(0x78);
SOUNDSOURCE_VIRTUAL(0x7C);
SOUNDSOURCE_VIRTUAL(0x80);
SOUNDSOURCE_VIRTUAL(0x84);
SOUNDSOURCE_VIRTUAL(0x88);
SOUNDSOURCE_VIRTUAL(0x8C);
SOUNDSOURCE_VIRTUAL(0x90);
SOUNDSOURCE_VIRTUAL(0x94);
SOUNDSOURCE_VIRTUAL(0x98);
SOUNDSOURCE_VIRTUAL(0x9C);
SOUNDSOURCE_VIRTUAL(0xA0);
SOUNDSOURCE_VIRTUAL(0xA4);
SOUNDSOURCE_VIRTUAL(0xA8);
SOUNDSOURCE_VIRTUAL(0xAC);
SOUNDSOURCE_VIRTUAL(0xB0);
SOUNDSOURCE_VIRTUAL(0xB4);
SOUNDSOURCE_VIRTUAL(0xB8);
SOUNDSOURCE_VIRTUAL(0xBC);
SOUNDSOURCE_VIRTUAL(0xC0);
SOUNDSOURCE_VIRTUAL(0xC4);
SOUNDSOURCE_VIRTUAL(0xC8);
SOUNDSOURCE_VIRTUAL(0xCC);
SOUNDSOURCE_VIRTUAL(0xD0);
SOUNDSOURCE_VIRTUAL(0xD4);
SOUNDSOURCE_VIRTUAL(0xD8);
SOUNDSOURCE_VIRTUAL(0xDC);
SOUNDSOURCE_VIRTUAL(0xE0);
SOUNDSOURCE_VIRTUAL(0xE4);
SOUNDSOURCE_VIRTUAL(0xE8);
SOUNDSOURCE_VIRTUAL(0xEC);
SOUNDSOURCE_VIRTUAL(0xF0);
SOUNDSOURCE_VIRTUAL(0xF4);
SOUNDSOURCE_VIRTUAL(0xF8);
SOUNDSOURCE_VIRTUAL(0xFC);
virtual bool isReadyMaybe() = 0; // 0x100
virtual bool load(void *data, const char *name) = 0; // 0x104
virtual void setFrame(f32 frame) = 0; // 0x108
virtual void setRate(f32 frame) = 0; // 0x10C
virtual void set_0x164(UNKWORD val) = 0; // 0x114
SOUNDSOURCE_VIRTUAL(0x118);
SOUNDSOURCE_VIRTUAL(0x11C);
};
class dSoundSource_c : public dSoundSourceIf_c, public dSnd3DActor_c {
public:
dSoundSource_c(u8, dAcBase_c *, UNKWORD, UNKWORD);
@@ -131,7 +53,19 @@ public:
virtual void d_s_vt_0x1E8();
// Overrides of dSoundSourceIf_c
virtual bool hasPlayingSounds() const override;
virtual const nw4r::math::VEC3 &getListenerPosition() const override;
virtual bool hasPlayingSounds() const override; // 0x48
virtual bool isPlayingSound(u32 soundId) override; // 0x4C
virtual bool isPlayingSound(const char *soundId) override; // 0x50
virtual bool isReadyMaybe() override {
return false;
} // 0x100
virtual void load(void *data, const char *name) override {} // 0x104
virtual void setFrame(f32 frame) override {} // 0x108
virtual void setRate(f32 frame) override {} // 0x10C
private:
// at 0x00: dSoundSourceIf_c vtable
+85
View File
@@ -0,0 +1,85 @@
#ifndef D_SOUND_SOURCE_IF_H
#define D_SOUND_SOURCE_IF_H
#include "common.h"
#include "nw4r/math/math_types.h"
class dAcBase_c;
class dSoundSourceIf_c {
public:
virtual ~dSoundSourceIf_c() {}
#define SOUNDSOURCE_VIRTUAL(offset) virtual void vt_##offset() = 0;
SOUNDSOURCE_VIRTUAL(0x0C);
SOUNDSOURCE_VIRTUAL(0x10);
SOUNDSOURCE_VIRTUAL(0x14);
SOUNDSOURCE_VIRTUAL(0x18);
SOUNDSOURCE_VIRTUAL(0x1C);
SOUNDSOURCE_VIRTUAL(0x20);
SOUNDSOURCE_VIRTUAL(0x24);
virtual const nw4r::math::VEC3 &getListenerPosition() const = 0; // 0x28
SOUNDSOURCE_VIRTUAL(0x2C);
SOUNDSOURCE_VIRTUAL(0x30);
SOUNDSOURCE_VIRTUAL(0x34);
SOUNDSOURCE_VIRTUAL(0x38);
SOUNDSOURCE_VIRTUAL(0x3C);
SOUNDSOURCE_VIRTUAL(0x40);
SOUNDSOURCE_VIRTUAL(0x44);
virtual bool hasPlayingSounds() const = 0; // 0x48
virtual bool isPlayingSound(u32 soundId) = 0; // 0x4C
virtual bool isPlayingSound(const char *soundId) = 0; // 0x50
SOUNDSOURCE_VIRTUAL(0x54);
SOUNDSOURCE_VIRTUAL(0x58);
SOUNDSOURCE_VIRTUAL(0x5C);
SOUNDSOURCE_VIRTUAL(0x60);
SOUNDSOURCE_VIRTUAL(0x64);
SOUNDSOURCE_VIRTUAL(0x68);
SOUNDSOURCE_VIRTUAL(0x6C);
SOUNDSOURCE_VIRTUAL(0x70);
SOUNDSOURCE_VIRTUAL(0x74);
SOUNDSOURCE_VIRTUAL(0x78);
SOUNDSOURCE_VIRTUAL(0x7C);
SOUNDSOURCE_VIRTUAL(0x80);
SOUNDSOURCE_VIRTUAL(0x84);
SOUNDSOURCE_VIRTUAL(0x88);
SOUNDSOURCE_VIRTUAL(0x8C);
SOUNDSOURCE_VIRTUAL(0x90);
SOUNDSOURCE_VIRTUAL(0x94);
SOUNDSOURCE_VIRTUAL(0x98);
SOUNDSOURCE_VIRTUAL(0x9C);
SOUNDSOURCE_VIRTUAL(0xA0);
SOUNDSOURCE_VIRTUAL(0xA4);
SOUNDSOURCE_VIRTUAL(0xA8);
SOUNDSOURCE_VIRTUAL(0xAC);
SOUNDSOURCE_VIRTUAL(0xB0);
SOUNDSOURCE_VIRTUAL(0xB4);
SOUNDSOURCE_VIRTUAL(0xB8);
SOUNDSOURCE_VIRTUAL(0xBC);
SOUNDSOURCE_VIRTUAL(0xC0);
SOUNDSOURCE_VIRTUAL(0xC4);
SOUNDSOURCE_VIRTUAL(0xC8);
SOUNDSOURCE_VIRTUAL(0xCC);
SOUNDSOURCE_VIRTUAL(0xD0);
SOUNDSOURCE_VIRTUAL(0xD4);
SOUNDSOURCE_VIRTUAL(0xD8);
SOUNDSOURCE_VIRTUAL(0xDC);
SOUNDSOURCE_VIRTUAL(0xE0);
SOUNDSOURCE_VIRTUAL(0xE4);
SOUNDSOURCE_VIRTUAL(0xE8);
SOUNDSOURCE_VIRTUAL(0xEC);
SOUNDSOURCE_VIRTUAL(0xF0);
SOUNDSOURCE_VIRTUAL(0xF4);
SOUNDSOURCE_VIRTUAL(0xF8);
SOUNDSOURCE_VIRTUAL(0xFC);
virtual bool isReadyMaybe() = 0; // 0x100
virtual void load(void *data, const char *name) = 0; // 0x104
virtual void setFrame(f32 frame) = 0; // 0x108
virtual void setRate(f32 frame) = 0; // 0x10C
SOUNDSOURCE_VIRTUAL(0x110);
SOUNDSOURCE_VIRTUAL(0x114);
SOUNDSOURCE_VIRTUAL(0x118);
};
#endif
+22
View File
@@ -8,6 +8,7 @@
#include "common.h" // nullptr
#include "nw4r/snd/snd_SeqSound.h"
#include "nw4r/snd/snd_SeqTrack.h"
#include "nw4r/ut/ut_NonCopyable.h" // ut::NonCopyable
/*******************************************************************************
@@ -29,6 +30,7 @@ namespace nw4r { namespace snd
// methods
public:
SeqSoundHandle(SoundHandle*);
~SeqSoundHandle() { DetachSound(); }
// methods
bool IsAttachedSound() const { return mSound != nullptr; }
@@ -39,6 +41,26 @@ namespace nw4r { namespace snd
mSound->WriteVariable(varNo, value);
}
void ReadVariable(int varNo, s16 *value) {
if (IsAttachedSound())
mSound->ReadVariable(varNo, value);
}
void SetTrackMute(u32 trackFlags, SeqMute mute) {
if (IsAttachedSound())
mSound->SetTrackMute(trackFlags, mute);
}
void SetTempoRatio(f32 tempoRatio) {
if (IsAttachedSound())
mSound->SetTempoRatio(tempoRatio);
}
void SetVolume(u32 trackFlags, f32 volume) {
if (IsAttachedSound())
mSound->SetTrackVolume(trackFlags, volume);
}
// members
private:
/* base ut::NonCopyable */ // size 0x00, offset 0x00
+16
View File
@@ -34,6 +34,22 @@ namespace nw4r { namespace snd
const detail::BasicSound *detail_GetAttachedSound() const { return mSound; }
void DetachSound();
void FadeIn(int fadeFrames) {
if (IsAttachedSound())
mSound->FadeIn(fadeFrames);
}
void SetVolume(f32 volume, int frames) {
if (IsAttachedSound())
mSound->SetVolume(volume, frames);
}
void SetPitch(f32 volume) {
if (IsAttachedSound())
mSound->SetPitch(volume);
}
void Stop() {
if (IsAttachedSound())
mSound->Stop(0);
+7
View File
@@ -8,6 +8,7 @@
#include "common.h" // nullptr
#include "nw4r/snd/snd_SoundHandle.h"
#include "nw4r/snd/snd_StrmSound.h"
#include "nw4r/ut/ut_NonCopyable.h" // ut::NonCopyable
/*******************************************************************************
@@ -30,10 +31,16 @@ namespace nw4r { namespace snd
public:
// methods
StrmSoundHandle(SoundHandle*);
~StrmSoundHandle() { DetachSound(); }
bool IsAttachedSound() const { return mSound != nullptr; }
void DetachSound();
void SetVolume(u32 trackFlags, f32 volume, int fadeFrames) {
if (IsAttachedSound())
mSound->SetTrackVolume(trackFlags, volume, fadeFrames);
}
// members
private:
/* base NonCopyable */ // size 0x00, offset 0x00
+1 -1
View File
@@ -52,7 +52,7 @@ int dTgSndAr_c::actorExecute() {
link->setBit_field_0xE8(params & 0xFF);
}
if (dSnd3DManager_c::GetInstance() != nullptr) {
mVec3_c pos = dSnd3DManager_c::GetInstance()->getListenerPos();
mVec3_c pos = dSnd3DManager_c::GetInstance()->getCameraTargetPos();
if (checkPosInArea(pos) && dTgSndMg_c::GetInstance() != nullptr) {
dTgSndMg_c::GetInstance()->setBgmFlag(params & 0xFF);
}
+24 -3
View File
@@ -20,7 +20,7 @@ dSnd3DActor_c::dSnd3DActor_c(UNKTYPE *a1, u8 a2)
a_field_0x88(0.0f),
a_field_0x8C(0.0f),
a_field_0x90(INFINITY),
a_field_0x94(INFINITY),
mDistanceToListener(INFINITY),
a_field_0x98(0.0f),
a_field_0x9C(0.0f),
a_field_0xC8(a1),
@@ -41,13 +41,34 @@ void dSnd3DActor_c::d_vt_0x34(const nw4r::math::VEC3 &rPosition) {
mFlags = 0;
}
void dSnd3DActor_c::updatePositionRelativeToListener() {
if (!checkFlag(1)) {
calculatePositionRelativeToListener();
setFlag(1);
}
}
void dSnd3DActor_c::calculatePositionRelativeToListener() {
nw4r::math::VEC3Sub(
&mPositionRelativeToListener, &GetPosition(), &dSnd3DManager_c::GetInstance()->getSndListenerPos()
);
}
void dSnd3DActor_c::updateDistanceToListener() {
if (!checkFlag(2)) {
updatePositionRelativeToListener();
mDistanceToListener = VEC3Len(&mPositionRelativeToListener);
setFlag(2);
}
}
void dSnd3DActor_c::updatePositionRelativeToPlayer() {
if (!checkFlag(0x40)) {
nw4r::math::VEC3 linkTranslation = dAcPy_c::GetLink()->getCenterTranslation();
nw4r::math::VEC3 pos = GetPosition();
nw4r::math::VEC3Sub(&mPositionRelativeToPlayer, &pos, &linkTranslation);
mFlags |= 0x40;
setFlag(0x40);
}
}
@@ -68,7 +89,7 @@ void dSnd3DActor_c::updateDistanceToPlayer() {
} else {
mDistanceToPlayer = nw4r::math::VEC3Len(&mPositionRelativeToPlayer);
}
mFlags |= 0x80;
setFlag(0x80);
}
}
+12 -10
View File
@@ -11,15 +11,15 @@
template class SndMgrDisposer<dSnd3DManager_c>;
dSnd3DManager_c::dSnd3DManager_c() : mIsSetup(false), field_0x11(0) {
dSnd3DManager_c::dSnd3DManager_c() : mIsSetup(false), mCalculationsFresh(0) {
mCameraPosSqVelocity = 0.0f;
mCameraAtSqVelocity = 0.0f;
mCamDistance = 0.9f;
mTimer = 0;
mpEngine = new dSnd3DEngine_c();
field_0x138.x = 0.0f;
field_0x138.y = 0.0f;
field_0x138.z = 1.0f;
mCameraDirectionNormalized.x = 0.0f;
mCameraDirectionNormalized.y = 0.0f;
mCameraDirectionNormalized.z = 1.0f;
}
void dSnd3DManager_c::setup() {
@@ -51,12 +51,14 @@ void dSnd3DManager_c::resetCamDistance() {
void dSnd3DManager_c::setCamDistance(f32 value) {
// @bug ? not actually clamped
nw4r::ut::Clamp(value, -1.0f, 2.0f);
(void)nw4r::ut::Clamp(value, -1.0f, 2.0f);
mCamDistance = value;
}
void dSnd3DManager_c::calc() {
field_0x11 = 0;
// Don't actually calculate anything,
// but allow re-calculations this frame.
mCalculationsFresh = false;
}
void dSnd3DManager_c::clearState() {
@@ -67,7 +69,7 @@ void dSnd3DManager_c::clearState() {
void dSnd3DManager_c::updateFromCamera(EGG::LookAtCamera &camera) {
if (field_0x11) {
if (mCalculationsFresh) {
return;
}
@@ -122,14 +124,14 @@ void dSnd3DManager_c::updateFromCamera(EGG::LookAtCamera &camera) {
mCamera = camera;
updateListenerPos(dist);
field_0x11 = 1;
mCalculationsFresh = true;
}
void dSnd3DManager_c::updateListenerPos(f32 f) {
const EGG::Matrix34f &mtx = mCamera.getViewMatrix();
mListener.SetMatrix(*mtx);
EGG::Vector3f dir = mCamera.getDirection();
VECNormalize(dir, field_0x138);
VECNormalize(dir, mCameraDirectionNormalized);
dir *= f;
mSoundListenerPosition = mCamera.mPos + dir;
mCameraTargetPosition = mCamera.mPos + dir;
}
+71
View File
@@ -0,0 +1,71 @@
#include "d/snd/d_snd_control_player.h"
#include "common.h"
#include "d/snd/d_snd_sound.h"
#include "nw4r/snd/snd_SoundPlayer.h"
#include "nw4r/snd/snd_global.h"
dSndControlPlayerVolumeBase_c::dSndControlPlayerVolumeBase_c() : dSndControlPlayer_c(1.0f, 0.0f, 1.0f) {
mpPlayer = nullptr;
mIndex = 0;
}
void dSndControlPlayer_c::reset() {
dSndControl_c::reset();
apply();
}
extern "C" void *lbl_80575D4C;
extern "C" nw4r::snd::SoundPlayer *fn_803600B0(void *, s32);
extern "C" nw4r::snd::SoundPlayer *fn_80360120(void *, s32);
void dSndControlPlayer_c::setIndex1(s32 idx) {
mpPlayer = fn_803600B0(lbl_80575D4C, idx);
mIndex = idx;
}
void dSndControlPlayer_c::setIndex2(s32 idx) {
mpPlayer = fn_80360120(lbl_80575D4C, idx);
mIndex = idx;
}
void dSndControlPlayer_c::stop() {
mCurrValue = getAppliedValue();
dSndControl_c::stop();
}
void dSndControlPlayerVolume_c::apply() {
mpPlayer->SetVolume(mCurrValue);
}
f32 dSndControlPlayerVolume_c::getAppliedValue() {
return mpPlayer->GetVolume();
}
void dSndControlPlayerLpfFreq_c::apply() {
mpPlayer->SetLpfFreq(mCurrValue);
}
f32 dSndControlPlayerLpfFreq_c::getAppliedValue() {
return mpPlayer->GetLpfFreq();
}
void dSndControlPlayerFxSend_c::apply() {
if (mCurrValue < mMin) {
mCurrValue = mMin;
}
if (mCurrValue >= mMax) {
mCurrValue = mMax;
}
mpPlayer->SetFxSend(nw4r::snd::AUX_B, mCurrValue);
}
extern "C" bool fn_8035F030(s32);
f32 dSndControlPlayerFxSend_c::getAppliedValue() {
int auxBus = nw4r::snd::AUX_A;
if (fn_8035F030(mIndex)) {
auxBus = nw4r::snd::AUX_B;
}
return mpPlayer->GetFxSend(auxBus);
}
+100
View File
@@ -0,0 +1,100 @@
#include "common.h"
#include "d/snd/d_snd_calc_pitch.h"
#include "d/snd/d_snd_sound.h"
#include "nw4r/snd/snd_SeqSoundHandle.h"
#include "nw4r/snd/snd_StrmSoundHandle.h"
// I'm not super happy with these base class function in a separate file,
// but either we add another intermediate class or this is ok. It's weird
// that d_snd_sound has dSndControl_c::stop though
void dSndControl_c::reset() {
mCurrValue = mResetValue;
mStartValue = mResetValue;
mTargetValue = mResetValue;
mDuration = 0;
mTimer = 0;
}
void dSndControl_c::stop() {
// field_0x10 = field_0x04;
mStartValue = mCurrValue;
mTargetValue = mCurrValue;
mDuration = 0;
mTimer = 0;
}
void dSndControl_c::set(f32 value, s32 frames) {
stop();
f32 clamped = value;
if (clamped > mMax) {
clamped = mMax;
} else if (clamped < mMin) {
clamped = mMin;
}
if (clamped != mCurrValue) {
mTargetValue = clamped;
if (frames == 0) {
mCurrValue = clamped;
} else {
mDuration = frames;
mTimer = 0;
}
}
}
void dSndControl_c::calc() {
if (mTimer < mDuration) {
mTimer++;
if (mTimer == mDuration) {
mCurrValue = mTargetValue;
} else {
mCurrValue = mStartValue + (mTimer * (mTargetValue - mStartValue) / mDuration);
}
}
}
void dSndControlSoundVolume_c::apply(dSndSound_c *sound) {
sound->SetVolume(mCurrValue, 0);
}
void dSndControlSoundPitch_c::apply(dSndSound_c *sound) {
sound->SetPitch(mCurrValue);
}
void d_snd_control_sound_float_order() {
-24.0f;
24.0f;
}
dSndControlSoundPitchLinear_c::dSndControlSoundPitchLinear_c() : dSndControlSound_c(0.0f, -24.0f, 24.0f) {
mpOtherControl = nullptr;
}
void dSndControlSoundPitchLinear_c::set(f32 value, s32 frames) {
if (mpOtherControl != nullptr) {
mCurrValue = pitchIdxTenthsForPitchScale(mpOtherControl->getCurrentValue());
}
dSndControlSound_c::set(value, frames);
}
void dSndControlSoundPitchLinear_c::apply(dSndSound_c *pHandle) {
pHandle->setPitchRelated(pitchScaleForPitchIdxTenths(mCurrValue), 0);
}
void dSndControlSoundSeqTrackTempoRatio_c::apply(dSndSound_c *sound) {
nw4r::snd::SeqSoundHandle handle(sound);
handle.SetTempoRatio(mCurrValue);
}
void dSndControlSoundSeqTrackVolume_c::apply(dSndSound_c *sound) {
nw4r::snd::SeqSoundHandle handle(sound);
handle.SetVolume(mMask, mCurrValue);
}
void dSndControlSoundStrmTrackVolume_c::apply(dSndSound_c *sound) {
nw4r::snd::StrmSoundHandle handle(sound);
handle.SetVolume(mMask, mCurrValue, 0);
}
+32
View File
@@ -52,6 +52,26 @@ u32 dSndPlayerMgr_c::convertLabelStringToSoundId(const char *label) const {
return dSndMgr_c::GetInstance()->changeNameToId(label);
}
nw4r::snd::SoundArchivePlayer &dSndPlayerMgr_c::getSoundArchivePlayerForType(u8 type) {
if (canUseThisPlayer(type)) {
return mSoundArchivePlayer;
}
return *dSndMgr_c::getPlayer();
}
bool dSndPlayerMgr_c::canUseThisPlayer(u8 type) const {
if (!mSoundArchivePlayer.IsAvailable()) {
return false;
}
int ty = type;
if ((ty >= 0 && ty <= 1) || ty == 58) {
return true;
}
return false;
}
bool dSndPlayerMgr_c::loadDemoArchive(const char *demoArchiveName) {
if (demoArchiveName == nullptr) {
return false;
@@ -84,3 +104,15 @@ bool dSndPlayerMgr_c::loadDemoArchive(const char *demoArchiveName) {
}
return ok;
}
void dSndPlayerMgr_c::shutdown() {
mSoundArchivePlayer.Shutdown();
mSoundArchive.Shutdown();
}
void dSndPlayerMgr_c::calc() {
if (mSoundArchivePlayer.IsAvailable()) {
mSoundArchivePlayer.Update();
}
}
+135
View File
@@ -0,0 +1,135 @@
#include "d/snd/d_snd_sound.h"
#include "common.h"
#include "d/snd/d_snd_mgr.h"
#include "nw4r/snd/snd_SeqSoundHandle.h"
#include "nw4r/snd/snd_SoundArchive.h"
#include "nw4r/ut/ut_list.h"
dSndSound_c::dSndSound_c() : field_0x10(0), field_0x14(0), field_0x15(0), field_0x16(0), field_0x17(0) {
nw4r::ut::List_Init(&mList, 0x24);
mpCtrlSeqTrackVolume = new dSndControlSoundSeqTrackVolume_c[16]();
for (int i = 0; i < 16; i++) {
mpCtrlSeqTrackVolume[i].setMask(1 << i);
}
mpCtrlStrmTrackVolume = new dSndControlSoundStrmTrackVolume_c[3]();
// @bug should be 3, not 16
for (int i = 0; i < 16; i++) {
mpCtrlStrmTrackVolume[i].setMask(1 << i);
}
mCtrlUnk.setControl(&mCtrlPitch);
reset();
}
dSndSound_c::~dSndSound_c() {
if (mpCtrlSeqTrackVolume != nullptr) {
delete[] mpCtrlSeqTrackVolume;
}
if (mpCtrlStrmTrackVolume != nullptr) {
delete[] mpCtrlStrmTrackVolume;
}
}
void dSndSound_c::reset() {
mCtrlVolume.reset();
mCtrlVolume.apply(this);
mCtrlPitch.reset();
mCtrlPitch.apply(this);
mCtrlUnk.reset();
mCtrlUnk.apply(this);
mpCtrlSeqTrackTempoRatio.reset();
mpCtrlSeqTrackTempoRatio.apply(this);
field_0x15 = 0;
resetTrackVolumes();
}
void dSndSound_c::fadeIn(u32 id, int fadeFrames) {
if (id != -1) {
if (fadeFrames != 0) {
FadeIn(fadeFrames);
}
vt_0x08();
field_0x16 = 1;
}
}
bool dSndSound_c::isStrmSound() {
if (!IsAttachedSound()) {
return false;
}
return dSndMgr_c::GetInstance()->getArchive()->GetSoundType(GetId()) == nw4r::snd::SoundArchive::SOUND_TYPE_STRM;
}
bool dSndSound_c::isWaveSound() {
if (!IsAttachedSound()) {
return false;
}
return dSndMgr_c::GetInstance()->getArchive()->GetSoundType(GetId()) == nw4r::snd::SoundArchive::SOUND_TYPE_WAVE;
}
bool dSndSound_c::isSeqSound() {
if (!IsAttachedSound()) {
return false;
}
return dSndMgr_c::GetInstance()->getArchive()->GetSoundType(GetId()) == nw4r::snd::SoundArchive::SOUND_TYPE_SEQ;
}
s16 dSndSound_c::readSeqTrackVariable(int varNo) {
if (!isSeqSound()) {
return -1;
}
s16 val = -1;
nw4r::snd::SeqSoundHandle handle(this);
handle.ReadVariable(varNo, &val);
return val;
}
void dSndSound_c::writeSeqTrackVariable(int varNo, s16 value) {
if (!isSeqSound()) {
return;
}
nw4r::snd::SeqSoundHandle handle(this);
handle.WriteVariable(varNo, value);
}
void dSndSound_c::resetTrackVolumes() {
if (mpCtrlSeqTrackVolume != nullptr) {
for (int i = 0; i < 16; i++) {
mpCtrlSeqTrackVolume[i].reset();
mpCtrlSeqTrackVolume[i].apply(this);
}
}
if (mpCtrlStrmTrackVolume != nullptr) {
for (int i = 0; i < 3; i++) {
mpCtrlStrmTrackVolume[i].reset();
mpCtrlStrmTrackVolume[i].apply(this);
}
}
}
void dSndSound_c::setSeqTrackMute(u32 trackFlags, nw4r::snd::SeqMute mute) {
if (isSeqSound()) {
nw4r::snd::SeqSoundHandle handle(this);
handle.SetTrackMute(trackFlags, mute);
}
}
void dSndSound_c::stop() {
vt_0x08();
Stop();
}
// Might be a separate file
void dSndControl_c::configure(f32 value, f32 min, f32 max) {
mResetValue = value;
mMin = min;
mMax = max;
mCurrValue = value;
mStartValue = value;
mTargetValue = value;
reset();
}
+13
View File
@@ -2,6 +2,7 @@
#include "common.h"
#include "d/snd/d_snd_3d_actor.h"
#include "d/snd/d_snd_3d_manager.h"
#include "nw4r/snd/snd_SoundStartable.h"
#include "nw4r/ut/ut_list.h"
#include "sized_string.h"
@@ -56,10 +57,22 @@ dSoundSource_c::~dSoundSource_c() {
fn_80386C70(this);
}
const nw4r::math::VEC3 &dSoundSource_c::getListenerPosition() const {
return dSnd3DManager_c::GetInstance()->getSndListenerPos();
}
bool dSoundSource_c::hasPlayingSounds() const {
return dSnd3DActor_c::hasPlayingSounds();
}
bool dSoundSource_c::isPlayingSound(u32 soundId) {
return dSnd3DActor_c::isPlayingSound(soundId);
}
bool dSoundSource_c::isPlayingSound(const char *soundId) {
return isPlayingSound(soundLabelToSoundId(soundId));
}
void dSoundSource_c::d_vt_0x38(bool flag, int fadeFrames) {
if (flag == 0) {
PauseAllSound(flag, fadeFrames);
-1
View File
@@ -426,7 +426,6 @@ void AnimEventPlayer::SetVariable(const AnimEvent *event, u32 varNo, f32 f) {
SeqSoundHandle handle(GetHandle());
int iVal = f * 100.0f;
handle.WriteVariable(varNo, ut::Clamp(iVal, -0x8000, 0x7FFF));
handle.DetachSound();
}
} else if (varNo < 32) {
int iVal = f * 100.0f;