5d6df8a2626d14c03f56c0588c243e059034bbcd
[rocksndiamonds.git] / src / conf_snd.c
1 // ============================================================================
2 // Rocks'n'Diamonds - McDuffin Strikes Back!
3 // ----------------------------------------------------------------------------
4 // (c) 1995-2014 by Artsoft Entertainment
5 //                  Holger Schemel
6 //                  info@artsoft.org
7 //                  https://www.artsoft.org/
8 // ----------------------------------------------------------------------------
9 // conf_snd.c
10 // ============================================================================
11
12 #include "libgame/libgame.h"
13 #include "main.h"
14
15
16 // List values that are not defined in the configuration file are set to
17 // reliable default values. If that value is SND_ARG_UNDEFINED, it will
18 // be dynamically determined, using some of the other list values.
19
20 struct ConfigTypeInfo sound_config_suffix[] =
21 {
22   { ".mode_loop",                       ARG_UNDEFINED,  TYPE_BOOLEAN    },
23   { ".volume",                          "100",          TYPE_INTEGER    },
24   { ".priority",                        "0",            TYPE_INTEGER    },
25
26   { NULL,                               NULL,           0               }
27 };
28
29 struct ConfigInfo sound_config[] =
30 {
31   // some default sounds
32   { "[default].digging",                "schlurf.wav"                   },
33   { "[default].collecting",             "pong.wav"                      },
34   { "[default].snapping",               "pong.wav"                      },
35   { "[default].pushing",                "pusch.wav"                     },
36   { "[default].impact",                 "klopf.wav"                     },
37   { "[default].walking",                "empty.wav"                     },
38   { "[default].passing",                "gate.wav"                      },
39   { "[default].dying",                  "autsch.wav"                    },
40   { "[default].exploding",              "roaaar.wav"                    },
41   { "[default].hitting",                "kink.wav"                      },
42   { "[sp_default].exploding",           "booom.wav"                     },
43   { "[mm_default].exploding",           "kabumm.wav"                    },
44
45   // sounds for Boulder Dash style elements and actions
46   { "bd_diamond.collecting",            "pong.wav"                      },
47   { "bd_diamond.impact",                "pling.wav"                     },
48   { "bd_rock.pushing",                  "pusch.wav"                     },
49   { "bd_rock.impact",                   "klopf.wav"                     },
50   { "bd_magic_wall.activating",         "quirk.wav"                     },
51   { "bd_magic_wall.active",             "miep.wav"                      },
52   { "bd_magic_wall.filling",            "quirk.wav"                     },
53   { "bd_amoeba.waiting",                UNDEFINED_FILENAME              },
54   { "bd_amoeba.growing",                "amoebe.wav"                    },
55   { "bd_amoeba.turning_to_gem",         "pling.wav"                     },
56   { "bd_amoeba.turning_to_gem.mode_loop", "false"                       },
57   { "bd_amoeba.turning_to_rock",        "klopf.wav"                     },
58   { "bd_amoeba.turning_to_rock.mode_loop", "false"                      },
59   { "bd_butterfly.moving",              "klapper.wav"                   },
60   { "bd_butterfly.waiting",             "klapper.wav"                   },
61   { "bd_firefly.moving",                "roehr.wav"                     },
62   { "bd_firefly.waiting",               "roehr.wav"                     },
63
64   // sounds for Supaplex style elements and actions
65   { "sp_base.digging",                  "base.wav"                      },
66   { "sp_buggy_base.digging",            "base.wav"                      },
67   { "sp_buggy_base.active",             "bug.wav"                       },
68   { "sp_infotron.collecting",           "infotron.wav"                  },
69   { "sp_infotron.impact",               "pling.wav"                     },
70   { "sp_zonk.pushing",                  "zonkpush.wav"                  },
71   { "sp_zonk.impact",                   "zonkdown.wav"                  },
72   { "sp_disk_red.collecting",           "infotron.wav"                  },
73   { "sp_disk_orange.pushing",           "zonkpush.wav"                  },
74   { "sp_disk_yellow.pushing",           "pusch.wav"                     },
75   { "[sp_port].passing",                "gate.wav"                      },
76   { "[sp_exit].passing",                "exit.wav"                      },
77   { "[sp_exit].opening",                UNDEFINED_FILENAME              },
78   { "[sp_exit].closing",                UNDEFINED_FILENAME              },
79   { "sp_sniksnak.moving",               UNDEFINED_FILENAME              },
80   { "sp_sniksnak.waiting",              UNDEFINED_FILENAME              },
81   { "sp_electron.moving",               UNDEFINED_FILENAME              },
82   { "sp_electron.waiting",              UNDEFINED_FILENAME              },
83   { "sp_terminal.activating",           UNDEFINED_FILENAME              },
84   { "sp_terminal.active",               UNDEFINED_FILENAME              },
85
86   // sounds for Sokoban style elements and actions
87   { "[sokoban].pushing",                "pusch.wav"                     },
88   { "[sokoban].filling",                "deng.wav"                      },
89   { "[sokoban].emptying",               UNDEFINED_FILENAME              },
90
91   // sounds for Emerald Mine style elements and actions
92   { "[player].moving",                  "empty.wav"                     },
93   { "[player].moving.mode_loop",        "false"                         },
94   { "sand.digging",                     "schlurf.wav"                   },
95   { "[emerald].collecting",             "pong.wav"                      },
96   { "[emerald].impact",                 "pling.wav"                     },
97   { "diamond.collecting",               "pong.wav"                      },
98   { "diamond.impact",                   "pling.wav"                     },
99   { "diamond.breaking",                 "quirk.wav"                     },
100   { "rock.pushing",                     "pusch.wav"                     },
101   { "rock.impact",                      "klopf.wav"                     },
102   { "bomb.pushing",                     "pusch.wav"                     },
103   { "nut.pushing",                      "knurk.wav"                     },
104   { "nut.breaking",                     "knack.wav"                     },
105   { "nut.impact",                       "klumpf.wav"                    },
106   { "[dynamite].collecting",            "pong.wav"                      },
107   { "[dynamite].dropping",              "deng.wav"                      },
108   { "[dynamite].active",                "zisch.wav"                     },
109   { "[key].collecting",                 "pong.wav"                      },
110   { "[gate].passing",                   "gate.wav"                      },
111   { "bug.moving",                       "klapper.wav"                   },
112   { "bug.waiting",                      "klapper.wav"                   },
113   { "spaceship.moving",                 "roehr.wav"                     },
114   { "spaceship.waiting",                "roehr.wav"                     },
115   { "yamyam.moving",                    UNDEFINED_FILENAME              },
116   { "yamyam.waiting",                   "njam.wav"                      },
117   { "yamyam.digging",                   "njam.wav"                      },
118   { "robot.moving",                     "schlurf.wav"                   },
119   { "robot.moving.mode_loop",           "false"                         },
120   { "robot.waiting",                    UNDEFINED_FILENAME              },
121   { "robot_wheel.activating",           "deng.wav"                      },
122   { "robot_wheel.active",               "miep.wav"                      },
123   { "magic_wall.activating",            "quirk.wav"                     },
124   { "magic_wall.active",                "miep.wav"                      },
125   { "magic_wall.filling",               "quirk.wav"                     },
126   { "dc_magic_wall.activating",         "quirk.wav"                     },
127   { "dc_magic_wall.active",             "miep.wav"                      },
128   { "dc_magic_wall.filling",            "quirk.wav"                     },
129   { "[amoeba].waiting",                 UNDEFINED_FILENAME              },
130   { "[amoeba].growing",                 "amoebe.wav"                    },
131   { "[amoeba].dropping",                UNDEFINED_FILENAME              },
132   { "acid.splashing",                   "blurb.wav"                     },
133   { "[quicksand].filling",              UNDEFINED_FILENAME              },
134   { "[quicksand].emptying",             UNDEFINED_FILENAME              },
135   { "[exit].opening",                   "oeffnen.wav"                   },
136   { "[exit].closing",                   "oeffnen.wav"                   },
137   { "[exit].passing",                   "buing.wav"                     },
138   { "[steel_exit].opening",             "oeffnen.wav"                   },
139   { "[steel_exit].closing",             "oeffnen.wav"                   },
140   { "[steel_exit].passing",             "buing.wav"                     },
141   { "[em_exit].opening",                "gong.wav"                      },
142   { "[em_exit].closing",                UNDEFINED_FILENAME              },
143   { "[em_exit].passing",                "buing.wav"                     },
144   { "[em_steel_exit].opening",          "gong.wav"                      },
145   { "[em_steel_exit].closing",          UNDEFINED_FILENAME              },
146   { "[em_steel_exit].passing",          "buing.wav"                     },
147   { "penguin.passing",                  "buing.wav"                     },
148
149   // sounds for Emerald Mine Club style elements and actions
150   { "balloon.moving",                   UNDEFINED_FILENAME              },
151   { "balloon.waiting",                  UNDEFINED_FILENAME              },
152   { "balloon.pushing",                  "schlurf.wav"                   },
153   { "[balloon_switch].activating",      UNDEFINED_FILENAME              },
154   { "spring.moving",                    UNDEFINED_FILENAME              },
155   { "spring.pushing",                   "pusch.wav"                     },
156   { "spring.impact",                    "klopf.wav"                     },
157   { "[wall].growing",                   UNDEFINED_FILENAME              },
158   { "emc_android.pushing",              "pusch.wav"                     },
159   { "emc_android.moving",               "roehr.wav"                     },
160   { "emc_android.moving.mode_loop",     "false"                         },
161   { "emc_android.dropping",             "deng.wav"                      },
162   { "emc_magic_ball.dropping",          "deng.wav"                      },
163
164   // sounds for Diamond Caves style elements and actions
165   { "pearl.collecting",                 "pong.wav"                      },
166   { "pearl.breaking",                   "knack.wav"                     },
167   { "pearl.impact",                     "pling.wav"                     },
168   { "crystal.collecting",               "pong.wav"                      },
169   { "crystal.impact",                   "pling.wav"                     },
170   { "[envelope].collecting",            "pong.wav"                      },
171   { "[envelope].opening",               UNDEFINED_FILENAME              },
172   { "[envelope].closing",               UNDEFINED_FILENAME              },
173   { "invisible_sand.digging",           "schlurf.wav"                   },
174   { "invisible_sand.active.digging",    "schlurf.wav"                   },
175   { "shield_normal.collecting",         "pong.wav"                      },
176   { "shield_normal.active",             UNDEFINED_FILENAME              },
177   { "shield_deadly.collecting",         "pong.wav"                      },
178   { "shield_deadly.active",             UNDEFINED_FILENAME              },
179   { "extra_time.collecting",            "gong.wav"                      },
180   { "mole.moving",                      UNDEFINED_FILENAME              },
181   { "mole.waiting",                     UNDEFINED_FILENAME              },
182   { "mole.digging",                     "blurb.wav"                     },
183   { "[switchgate_switch].activating",   UNDEFINED_FILENAME              },
184   { "[switchgate].opening",             "oeffnen.wav"                   },
185   { "[switchgate].closing",             "oeffnen.wav"                   },
186   { "[switchgate].passing",             "gate.wav"                      },
187   { "[timegate_switch].activating",     "deng.wav"                      },
188   { "[timegate_switch].active",         "miep.wav"                      },
189   { "[timegate_switch].deactivating",   UNDEFINED_FILENAME              },
190   { "[timegate].opening",               "oeffnen.wav"                   },
191   { "[timegate].closing",               "oeffnen.wav"                   },
192   { "[timegate].passing",               "gate.wav"                      },
193   { "[conveyor_belt_switch].activating",UNDEFINED_FILENAME              },
194   { "[conveyor_belt].active",           UNDEFINED_FILENAME              },
195   { "[conveyor_belt_switch].deactivating",UNDEFINED_FILENAME            },
196   { "light_switch.activating",          UNDEFINED_FILENAME              },
197   { "light_switch.deactivating",        UNDEFINED_FILENAME              },
198
199   // sounds for DX Boulderdash style elements and actions
200   { "dx_supabomb.pushing",              "pusch.wav"                     },
201   { "trap.digging",                     "schlurf.wav"                   },
202   { "trap.activating",                  UNDEFINED_FILENAME              },
203   { "[tube].walking",                   UNDEFINED_FILENAME              },
204
205   // sounds for Rocks'n'Diamonds style elements and actions
206   { "amoeba.turning_to_gem",            "pling.wav"                     },
207   { "amoeba.turning_to_gem.mode_loop", "false"                          },
208   { "amoeba.turning_to_rock",           "klopf.wav"                     },
209   { "amoeba.turning_to_rock.mode_loop", "false"                         },
210   { "speed_pill.collecting",            "pong.wav"                      },
211   { "dynabomb_increase_number.collecting","pong.wav"                    },
212   { "dynabomb_increase_size.collecting","pong.wav"                      },
213   { "dynabomb_increase_power.collecting","pong.wav"                     },
214   { "[dynabomb].dropping",              "deng.wav"                      },
215   { "[dynabomb].active",                "zisch.wav"                     },
216   { "satellite.moving",                 UNDEFINED_FILENAME              },
217   { "satellite.waiting",                UNDEFINED_FILENAME              },
218   { "satellite.pushing",                "pusch.wav"                     },
219   { "lamp.activating",                  "deng.wav"                      },
220   { "lamp.deactivating",                "deng.wav"                      },
221   { "time_orb_full.collecting",         "gong.wav"                      },
222   { "time_orb_full.impact",             "deng.wav"                      },
223   { "time_orb_empty.pushing",           "pusch.wav"                     },
224   { "time_orb_empty.impact",            "deng.wav"                      },
225   { "game_of_life.waiting",             UNDEFINED_FILENAME              },
226   { "game_of_life.growing",             "amoebe.wav"                    },
227   { "biomaze.waiting",                  UNDEFINED_FILENAME              },
228   { "biomaze.growing",                  "amoebe.wav"                    },
229   { "pacman.moving",                    UNDEFINED_FILENAME              },
230   { "pacman.waiting",                   UNDEFINED_FILENAME              },
231   { "pacman.digging",                   UNDEFINED_FILENAME              },
232   { "dark_yamyam.moving",               UNDEFINED_FILENAME              },
233   { "dark_yamyam.waiting",              "njam.wav"                      },
234   { "dark_yamyam.digging",              UNDEFINED_FILENAME              },
235   { "penguin.moving",                   UNDEFINED_FILENAME              },
236   { "penguin.waiting",                  UNDEFINED_FILENAME              },
237   { "pig.moving",                       UNDEFINED_FILENAME              },
238   { "pig.waiting",                      UNDEFINED_FILENAME              },
239   { "pig.digging",                      UNDEFINED_FILENAME              },
240   { "dragon.moving",                    UNDEFINED_FILENAME              },
241   { "dragon.waiting",                   UNDEFINED_FILENAME              },
242   { "dragon.attacking",                 UNDEFINED_FILENAME              },
243
244   // sounds for Mirror Magic style elements and actions
245   { "[mm_mcduffin].hitting",            "autsch.wav"                    },
246   { "[mm_mirror].hitting",              "laser.wav"                     },
247   { "[mm_mirror_fixed].hitting",        "laser.wav"                     },
248   { "[mm_prism].hitting",               "laser.wav"                     },
249   { "[mm_exit].hitting",                "holz.wav"                      },
250   { "[mm_exit].opening",                "kling.wav"                     },
251   { "mm_exit_open.hitting",             UNDEFINED_FILENAME              },
252   { "[df_mirror].hitting",              "laser.wav"                     },
253   { "[df_mirror_rotating].hitting",     "laser.wav"                     },
254   { "[df_refractor].hitting",           "laser.wav"                     },
255   { "[df_receiver].hitting",            "holz.wav"                      },
256   { "[df_receiver].opening",            "kling.wav"                     },
257   { "[mm_wooden_wall].hitting",         "holz.wav"                      },
258   { "[mm_wooden_block].hitting",        "holz.wav"                      },
259   { "[mm_wooden_block].pushing",        "bong.wav"                      },
260   { "[mm_wooden_lock].hitting",         "holz.wav"                      },
261   { "[mm_wooden_grid_fixed].hitting",   "holz.wav"                      },
262   { "[mm_fuse].hitting",                "holz.wav"                      },
263   { "[mm_ice_wall].hitting",            "holz.wav"                      },
264   { "[mm_ice_wall].shrinking",          "slurp.wav"                     },
265   { "[mm_amoeba_wall].hitting",         "holz.wav"                      },
266   { "[mm_amoeba_wall].growing",         "amoebe.wav"                    },
267   { "[mm_amoeba_wall].growing.mode_loop","false"                        },
268   { "[df_wooden_wall].hitting",         "holz.wav"                      },
269   { "[df_wooden_grid_fixed].hitting",   "holz.wav"                      },
270   { "[df_wooden_grid_rotating].hitting","holz.wav"                      },
271   { "[mm_steel_wall].hitting",          "hui.wav"                       },
272   { "[mm_steel_grid_fixed].hitting",    "hui.wav"                       },
273   { "[mm_steel_block].hitting",         "hui.wav"                       },
274   { "[mm_steel_block].pushing",         "bong.wav"                      },
275   { "[mm_steel_lock].hitting",          "hui.wav"                       },
276   { "[df_steel_wall].hitting",          "hui.wav"                       },
277   { "[df_steel_grid_fixed].hitting",    "hui.wav"                       },
278   { "[df_steel_grid_rotating].hitting", "hui.wav"                       },
279
280   { "[mm_pacman].exploding",            "quiek.wav"                     },
281   { "[mm_mcduffin].exploding",          "roaaar.wav"                    },
282   { "[mm_bomb].exploding",              "roaaar.wav"                    },
283   { "[mm_key].exploding",               "kling.wav"                     },
284   { "[mm_steel_lock].exploding",        "whoosh.wav"                    },
285   { "[mm_wooden_lock].exploding",       "whoosh.wav"                    },
286
287
288   // ==========================================================================
289   // sound definitions not associated with game elements (menu screens etc.)
290   // ==========================================================================
291
292   // keyword to stop parser: "NO_MORE_ELEMENT_SOUNDS" <-- do not change!
293
294   // sounds for Boulder Dash style elements and actions
295   { "bd_diamond.impact.RANDOM_1",       UNDEFINED_FILENAME              },
296   { "bd_diamond.impact.RANDOM_2",       UNDEFINED_FILENAME              },
297   { "bd_diamond.impact.RANDOM_3",       UNDEFINED_FILENAME              },
298   { "bd_diamond.impact.RANDOM_4",       UNDEFINED_FILENAME              },
299   { "bd_diamond.impact.RANDOM_5",       UNDEFINED_FILENAME              },
300   { "bd_diamond.impact.RANDOM_6",       UNDEFINED_FILENAME              },
301   { "bd_diamond.impact.RANDOM_7",       UNDEFINED_FILENAME              },
302   { "bd_diamond.impact.RANDOM_8",       UNDEFINED_FILENAME              },
303
304   // sounds for other game actions
305   { "game.starting",                    UNDEFINED_FILENAME              },
306   { "game.leveltime_charging",          "fuel.wav"                      },
307   { "game.health_charging",             "warnton.wav"                   },
308   { "game.running_out_of_time",         "gong.wav"                      },
309   { "game.running_out_of_time_10",      UNDEFINED_FILENAME              },
310   { "game.running_out_of_time_9",       UNDEFINED_FILENAME              },
311   { "game.running_out_of_time_8",       UNDEFINED_FILENAME              },
312   { "game.running_out_of_time_7",       UNDEFINED_FILENAME              },
313   { "game.running_out_of_time_6",       UNDEFINED_FILENAME              },
314   { "game.running_out_of_time_5",       UNDEFINED_FILENAME              },
315   { "game.running_out_of_time_4",       UNDEFINED_FILENAME              },
316   { "game.running_out_of_time_3",       UNDEFINED_FILENAME              },
317   { "game.running_out_of_time_2",       UNDEFINED_FILENAME              },
318   { "game.running_out_of_time_1",       UNDEFINED_FILENAME              },
319   { "game.running_out_of_time_0",       UNDEFINED_FILENAME              },
320   { "game.leveltime_bonus",             "sirr.wav"                      },
321   { "game.health_bonus",                "sirr.wav"                      },
322   { "game.timeout",                     UNDEFINED_FILENAME              },
323   { "game.losing",                      UNDEFINED_FILENAME              },
324   { "game.winning",                     UNDEFINED_FILENAME              },
325   { "game.sokoban_solving",             "buing.wav"                     },
326
327   // sounds for other non-game actions
328   { "door.opening",                     "door.wav"                      },
329   { "door.closing",                     "door.wav"                      },
330   { "door_1.opening",                   UNDEFINED_FILENAME              },
331   { "door_1.closing",                   UNDEFINED_FILENAME              },
332   { "door_2.opening",                   UNDEFINED_FILENAME              },
333   { "door_2.closing",                   UNDEFINED_FILENAME              },
334
335   { "request.opening",                  UNDEFINED_FILENAME              },
336   { "request.closing",                  UNDEFINED_FILENAME              },
337
338   // sounds for menu actions
339   { "menu.item.activating",             "empty.wav"                     },
340   { "menu.item.selecting",              "base.wav"                      },
341
342   { "menu.button.pressing",             UNDEFINED_FILENAME              },
343   { "menu.button.releasing",            UNDEFINED_FILENAME              },
344
345   { "background.TITLE_INITIAL",         UNDEFINED_FILENAME              },
346   { "background.TITLE",                 UNDEFINED_FILENAME              },
347   { "background.MAIN",                  UNDEFINED_FILENAME              },
348   { "background.NAMES",                 UNDEFINED_FILENAME              },
349   { "background.LEVELS",                UNDEFINED_FILENAME              },
350   { "background.LEVELNR",               UNDEFINED_FILENAME              },
351   { "background.SCORES",                "halloffame.wav"                },
352   { "background.SCORES.mode_loop",      "false"                         },
353   { "background.EDITOR",                UNDEFINED_FILENAME              },
354   { "background.INFO",                  UNDEFINED_FILENAME              },
355   { "background.INFO[ELEMENTS]",        UNDEFINED_FILENAME              },
356   { "background.INFO[CREDITS]",         UNDEFINED_FILENAME              },
357   { "background.INFO[PROGRAM]",         UNDEFINED_FILENAME              },
358   { "background.INFO[VERSION]",         UNDEFINED_FILENAME              },
359   { "background.INFO[LEVELSET]",        UNDEFINED_FILENAME              },
360   { "background.SETUP",                 UNDEFINED_FILENAME              },
361
362   { "background.titlescreen_initial_1", UNDEFINED_FILENAME              },
363   { "background.titlescreen_initial_2", UNDEFINED_FILENAME              },
364   { "background.titlescreen_initial_3", UNDEFINED_FILENAME              },
365   { "background.titlescreen_initial_4", UNDEFINED_FILENAME              },
366   { "background.titlescreen_initial_5", UNDEFINED_FILENAME              },
367   { "background.titlescreen_1",         UNDEFINED_FILENAME              },
368   { "background.titlescreen_2",         UNDEFINED_FILENAME              },
369   { "background.titlescreen_3",         UNDEFINED_FILENAME              },
370   { "background.titlescreen_4",         UNDEFINED_FILENAME              },
371   { "background.titlescreen_5",         UNDEFINED_FILENAME              },
372   { "background.titlemessage_initial_1",UNDEFINED_FILENAME              },
373   { "background.titlemessage_initial_2",UNDEFINED_FILENAME              },
374   { "background.titlemessage_initial_3",UNDEFINED_FILENAME              },
375   { "background.titlemessage_initial_4",UNDEFINED_FILENAME              },
376   { "background.titlemessage_initial_5",UNDEFINED_FILENAME              },
377   { "background.titlemessage_1",        UNDEFINED_FILENAME              },
378   { "background.titlemessage_2",        UNDEFINED_FILENAME              },
379   { "background.titlemessage_3",        UNDEFINED_FILENAME              },
380   { "background.titlemessage_4",        UNDEFINED_FILENAME              },
381   { "background.titlemessage_5",        UNDEFINED_FILENAME              },
382
383
384   // ==========================================================================
385   // non-sound definitions
386   // ==========================================================================
387
388   // the following directives are not associated with a sound, but
389   // probably make sense to be defined in "soundsinfo.conf", too
390
391   // keyword to start parser: "CONFIG_VARS_START" <-- do not change!
392
393   { "game.use_native_bd_sound_engine",  "false"                         },
394
395   { NULL,                               NULL                            }
396 };