summaryrefslogtreecommitdiffstats
path: root/src/sound/sound.h
blob: a2bfc764017225cced248f8950e3a71824f02de1 (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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
// * This file is part of the COLOBOT source code
// * Copyright (C) 2001-2008, Daniel ROUX & EPSITEC SA, www.epsitec.ch
// * Copyright (C) 2012, Polish Portal of Colobot (PPC)
// *
// * This program is free software: you can redistribute it and/or modify
// * it under the terms of the GNU General Public License as published by
// * the Free Software Foundation, either version 3 of the License, or
// * (at your option) any later version.
// *
// * This program is distributed in the hope that it will be useful,
// * but WITHOUT ANY WARRANTY; without even the implied warranty of
// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// * GNU General Public License for more details.
// *
// * You should have received a copy of the GNU General Public License
// * along with this program. If not, see  http://www.gnu.org/licenses/.

// sound.h

#pragma once


#include "math/vector.h"


class CInstanceManager;

namespace Snd {

const int MAXFILES  = 200;
const int MAXSOUND  = 32;
const int MAXVOLUME = 20;
const int MAXOPER   = 4;


enum Sound
{
    SOUND_CLICK     = 0,
    SOUND_BOUM      = 1,
    SOUND_EXPLO     = 2,
    SOUND_FLYh      = 3,    // human
    SOUND_FLY       = 4,
    SOUND_STEPs     = 5,    // smooth
    SOUND_MOTORw        = 6,    // wheel
    SOUND_MOTORt        = 7,    // tank
    SOUND_MOTORr        = 8,    // roller
    SOUND_ERROR     = 9,
    SOUND_CONVERT       = 10,
    SOUND_ENERGY        = 11,
    SOUND_PLOUF     = 12,
    SOUND_BLUP      = 13,
    SOUND_WARNING       = 14,
    SOUND_DERRICK       = 15,
    SOUND_LABO      = 16,
    SOUND_STATION       = 17,
    SOUND_REPAIR        = 18,
    SOUND_RESEARCH      = 19,
    SOUND_INSECTs       = 20,   // spider
    SOUND_BURN      = 21,
    SOUND_TZOING        = 22,
    SOUND_GGG       = 23,
    SOUND_MANIP     = 24,
    SOUND_FIRE      = 25,   // shooting with fireball
    SOUND_HUMAN1        = 26,   // breathing
    SOUND_STEPw     = 27,   // water
    SOUND_SWIM      = 28,
    SOUND_RADAR     = 29,
    SOUND_BUILD     = 30,
    SOUND_ALARM     = 31,   // energy alarm
    SOUND_SLIDE     = 32,
    SOUND_EXPLOi        = 33,   // insect
    SOUND_INSECTa       = 34,   // ant
    SOUND_INSECTb       = 35,   // bee
    SOUND_INSECTw       = 36,   // worm
    SOUND_INSECTm       = 37,   // mother
    SOUND_TREMBLE       = 38,
    SOUND_PSHHH     = 39,
    SOUND_NUCLEAR       = 40,
    SOUND_INFO      = 41,
    SOUND_OPEN      = 42,
    SOUND_CLOSE     = 43,
    SOUND_FACTORY       = 44,
    SOUND_EGG       = 45,
    SOUND_MOTORs        = 46,   // submarine
    SOUND_MOTORi        = 47,   // insect (legs)
    SOUND_SHIELD        = 48,
    SOUND_FIREi     = 49,   // shooting with orgaball (insect)
    SOUND_GUNDEL        = 50,
    SOUND_PSHHH2        = 51,   // shield
    SOUND_MESSAGE       = 52,
    SOUND_BOUMm     = 53,   // metal
    SOUND_BOUMv     = 54,   // plant
    SOUND_BOUMs     = 55,   // smooth
    SOUND_EXPLOl        = 56,   // little
    SOUND_EXPLOlp       = 57,   // little power
    SOUND_EXPLOp        = 58,   // power
    SOUND_STEPh     = 59,   // hard
    SOUND_STEPm     = 60,   // metal
    SOUND_POWERON       = 61,
    SOUND_POWEROFF      = 62,
    SOUND_AIE       = 63,
    SOUND_WAYPOINT      = 64,
    SOUND_RECOVER       = 65,
    SOUND_DEADi     = 66,
    SOUND_JOSTLE        = 67,
    SOUND_GFLAT     = 68,
    SOUND_DEADg     = 69,   // shooting death
    SOUND_DEADw     = 70,   // drowning
    SOUND_FLYf      = 71,   // reactor fail
    SOUND_ALARMt        = 72,   // temperature alarm
    SOUND_FINDING       = 73,   // finds a cache object
    SOUND_THUMP     = 74,
    SOUND_TOUCH     = 75,
    SOUND_BLITZ     = 76,
    SOUND_MUSHROOM      = 77,
    SOUND_FIREp     = 78,   // shooting with phazer
    SOUND_EXPLOg1       = 79,   // impact gun 1
    SOUND_EXPLOg2       = 80,   // impact gun 2
    SOUND_MOTORd        = 81,   // engine friction
};

enum SoundNext
{
    SOPER_CONTINUE  = 1,
    SOPER_STOP      = 2,
    SOPER_LOOP      = 3,
};

struct SoundOper
{
    char        bUsed;
    float       finalAmplitude;
    float       finalFrequency;
    float       totalTime;
    float       currentTime;
    Snd::SoundNext  nextOper;
};

struct SoundChannel
{
    char                    bUsed;          // buffer used?
    char                    bMute;          // silence?
    Snd::Sound                  type;           // SOUND_*
    int                 priority;       // so great -> important
    Math::Vector                pos;            // position in space
    unsigned short              uniqueStamp;        // unique marker
//  LPDIRECTSOUNDBUFFER         soundBuffer;
//  LPDIRECTSOUND3DBUFFER           soundBuffer3D;
    float                   startAmplitude;
    float                   startFrequency;
    float                   changeFrequency;
    int                 initFrequency;
    float                   volume;         // 2D: volume 1..0 depending on position
    float                   pan;            // 2D: pan -1..+1 depending on position
    Snd::SoundOper              oper[MAXOPER];
};



class CSound
{
    // TODO
};

}; // namespace Sound