summaryrefslogtreecommitdiff
path: root/src/Z2AudioLib/Z2SoundStarter.cpp
blob: 968248ab6a11c100183f26d5a4c92ce5e63c4e32 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
//
// Z2SoundStarter
//

#include "Z2AudioLib/Z2SoundStarter.h"
#include "Z2AudioLib/Z2EnvSeMgr.h"
#include "Z2AudioLib/Z2AudioMgr.h"

/* 802AAB94-802AABF4 2A54D4 0060+00 0/0 4/4 0/0 .text            __ct__14Z2SoundStarterFb */
Z2SoundStarter::Z2SoundStarter(bool param_0) : JAISoundStarter(param_0), JASGlobalInstance<Z2SoundStarter>(param_0) {
}

/* 802AABF4-802AAC3C 2A5534 0048+00 1/0 5/0 0/0 .text
 * startSound__14Z2SoundStarterF10JAISoundIDP14JAISoundHandlePCQ29JGeometry8TVec3<f> */
bool Z2SoundStarter::startSound(JAISoundID i_soundID, JAISoundHandle* i_handlePtr,
                                JGeometry::TVec3<f32> const* i_pos) {
    return Z2SoundStarter::startSound(i_soundID, i_handlePtr, i_pos,
                                      0, 0.0f, 1.0f, 1.0f, -1.0f, -1.0f, 0);
}

/* 802AAC3C-802AAEDC 2A557C 02A0+00 2/1 2/2 0/0 .text
 * startSound__14Z2SoundStarterF10JAISoundIDP14JAISoundHandlePCQ29JGeometry8TVec3<f>UlfffffUl */
bool Z2SoundStarter::startSound(JAISoundID i_soundID, JAISoundHandle* handlePtr,
                                JGeometry::TVec3<f32> const* i_pos, u32 param_4, f32 i_fxMix,
                                f32 i_pitch, f32 i_volume, f32 i_pan, f32 i_dolby, u32 i_count) {
    JUT_ASSERT(45, handlePtr);
    if (param_4 == 6) {
        switch (i_soundID) {
        case Z2SE_CM_BODYFALL_S:
            i_soundID = Z2SE_CM_BODYFALL_ASASE_S;
            break;
        case Z2SE_CM_BODYFALL_M:
            i_soundID = Z2SE_CM_BODYFALL_ASASE_M;
            break;
        case Z2SE_CM_BODYFALL_L:
            i_soundID = Z2SE_CM_BODYFALL_ASASE_L;
            break;
        }
    }
    if (i_soundID.mId.mBytes.b1 != 0 && i_soundID.mId.mBytes.b1 != 9) {
        if (Z2GetSceneMgr()->isInDarkness()) {
            i_fxMix = 1.0f;
        } else {
            f32 ratio = Z2GetStatusMgr()->getCameraInWaterDepthRatio();
            f32 uStack_8c = ratio > 0.0f;
            if (uStack_8c) {
                i_fxMix = uStack_8c;
            } else {
                i_fxMix += 0.5f * Z2GetEnvSeMgr()->getFogDensity();
                if (i_fxMix > 1.0f) {
                    i_fxMix = 1.0f;
                }
            }
        }
    }
    bool startSoundRes = Z2GetAudioMgr()->startSound(i_soundID, handlePtr, i_pos);
    if (*handlePtr) {
        if (param_4 != 0) {
            setPortData(handlePtr, 6, param_4, -1);
        }
        if (i_fxMix > 0.0f) {
            (*handlePtr)->getAuxiliary().moveFxMix(i_fxMix, i_count);
        }
        if (i_pitch != 1.0f) {
            (*handlePtr)->getAuxiliary().movePitch(i_pitch, i_count);
        }
        if (i_volume != 1.0f) {
            (*handlePtr)->getAuxiliary().moveVolume(i_volume, i_count);
        }
        if (i_pan != -1.0f) {
            (*handlePtr)->getAuxiliary().movePan(i_pan, i_count);
        }
        if (i_dolby != -1.0f) {
            (*handlePtr)->getAuxiliary().moveDolby(i_dolby, i_count);
        }
    }
    return startSoundRes;
}

/* 802AAEDC-802AAF74 2A581C 0098+00 1/1 10/10 0/0 .text
 * setPortData__14Z2SoundStarterFP14JAISoundHandleUlUsSc        */
void Z2SoundStarter::setPortData(JAISoundHandle* param_1, u32 param_2, u16 param_3, s8 param_4) {
    if (param_1 != NULL && *param_1) {
        JASTrack* track = param_1->getSound()->getTrack();
        if (param_4 != -1) {
            if (track->getChild(param_4) == NULL) {
                track->openChild(param_4);
            }
            track = track->getChild(param_4);
        }
        JUT_ASSERT(122, track);
        track->writePort(param_2, param_3);
    }
}

/* 802AAF74-802AAFF0 2A58B4 007C+00 0/0 1/1 0/0 .text
 * getPortData__14Z2SoundStarterFP14JAISoundHandleUlSc          */
u16 Z2SoundStarter::getPortData(JAISoundHandle* param_1, u32 param_2, s8 param_3) {
    if (param_1 != NULL && *param_1) {
        JASTrack* track;
        if (param_3 == -1) {
            track = param_1->getSound()->getTrack();
        } else {
            track = param_1->getSound()->getChildTrack(param_3);
        }
        JUT_ASSERT(140, track);
        return track->readPort(param_2);
    }
    return 0;
}