1 //-------------------------------------------------------------------------
2 /*
3 Copyright (C) 2013 EDuke32 developers and contributors
4 
5 This file is part of EDuke32.
6 
7 EDuke32 is free software; you can redistribute it and/or
8 modify it under the terms of the GNU General Public License version 2
9 as published by the Free Software Foundation.
10 
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
14 
15 See the GNU General Public License for more details.
16 
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
20 */
21 //-------------------------------------------------------------------------
22 
23 #include "compat.h"
24 #include "build.h"
25 
26 #include "namesdyn.h"
27 #include "sounds.h"
28 #include "soundsdyn.h"
29 #include "global.h"
30 
31 #ifdef DYNSOUNDREMAP_ENABLE
32 # define DVPTR(x) &x
33 #else
34 # define DVPTR(x) NULL
35 #endif
36 
37 int16_t DynamicSoundMap[MAXSOUNDS];
38 
39 struct dynitem
40 {
41     const char *str;
42     int32_t *dynvalptr;
43     const int16_t staticval;
44 };
45 
46 static struct dynitem g_dynSoundList[] =
47 {
48     { "ALIEN_SWITCH1",       DVPTR(ALIEN_SWITCH1),      ALIEN_SWITCH1__STATIC },
49     { "BIGBANG",             DVPTR(BIGBANG),            BIGBANG__STATIC },
50     { "BONUS_SPEECH1",       DVPTR(BONUS_SPEECH1),      BONUS_SPEECH1__STATIC },
51     { "BONUS_SPEECH2",       DVPTR(BONUS_SPEECH2),      BONUS_SPEECH2__STATIC },
52     { "BONUS_SPEECH3",       DVPTR(BONUS_SPEECH3),      BONUS_SPEECH3__STATIC },
53     { "BONUS_SPEECH4",       DVPTR(BONUS_SPEECH4),      BONUS_SPEECH4__STATIC },
54     { "BONUSMUSIC",          DVPTR(BONUSMUSIC),         BONUSMUSIC__STATIC },
55     { "BOS1_RECOG",          DVPTR(BOS1_RECOG),         BOS1_RECOG__STATIC },
56     { "BOS1_WALK",           DVPTR(BOS1_WALK),          BOS1_WALK__STATIC },
57     { "BOS2_RECOG",          DVPTR(BOS2_RECOG),         BOS2_RECOG__STATIC },
58     { "BOS3_RECOG",          DVPTR(BOS3_RECOG),         BOS3_RECOG__STATIC },
59     { "BOS4_RECOG",          DVPTR(BOS4_RECOG),         BOS4_RECOG__STATIC },
60     { "BOSS4_DEADSPEECH",    DVPTR(BOSS4_DEADSPEECH),   BOSS4_DEADSPEECH__STATIC },
61     { "BOSS4_FIRSTSEE",      DVPTR(BOSS4_FIRSTSEE),     BOSS4_FIRSTSEE__STATIC },
62     { "BOSSTALKTODUKE",      DVPTR(BOSSTALKTODUKE),     BOSSTALKTODUKE__STATIC },
63     { "CAPT_RECOG",          DVPTR(CAPT_RECOG),         CAPT_RECOG__STATIC },
64     { "CAT_FIRE",            DVPTR(CAT_FIRE),           CAT_FIRE__STATIC },
65     { "CHAINGUN_FIRE",       DVPTR(CHAINGUN_FIRE),      CHAINGUN_FIRE__STATIC },
66     { "COMM_RECOG",          DVPTR(COMM_RECOG),         COMM_RECOG__STATIC },
67     { "DRON_RECOG",          DVPTR(DRON_RECOG),         DRON_RECOG__STATIC },
68     { "DUKE_CRACK",          DVPTR(DUKE_CRACK),          DUKE_CRACK__STATIC },
69     { "DUKE_CRACK_FIRST",    DVPTR(DUKE_CRACK_FIRST),    DUKE_CRACK_FIRST__STATIC },
70     { "DUKE_CRACK2",         DVPTR(DUKE_CRACK2),         DUKE_CRACK2__STATIC },
71     { "DUKE_DRINKING",       DVPTR(DUKE_DRINKING),       DUKE_DRINKING__STATIC },
72     { "DUKE_GASP",           DVPTR(DUKE_GASP),           DUKE_GASP__STATIC },
73     { "DUKE_GET",            DVPTR(DUKE_GET),            DUKE_GET__STATIC },
74     { "DUKE_GETWEAPON2",     DVPTR(DUKE_GETWEAPON2),     DUKE_GETWEAPON2__STATIC },
75     { "DUKE_GETWEAPON6",     DVPTR(DUKE_GETWEAPON6),     DUKE_GETWEAPON6__STATIC },
76     { "DUKE_GOTHEALTHATLOW", DVPTR(DUKE_GOTHEALTHATLOW), DUKE_GOTHEALTHATLOW__STATIC },
77     { "DUKE_GRUNT",          DVPTR(DUKE_GRUNT),          DUKE_GRUNT__STATIC },
78     { "DUKE_HARTBEAT",       DVPTR(DUKE_HARTBEAT),       DUKE_HARTBEAT__STATIC },
79     { "DUKE_JETPACK_IDLE",   DVPTR(DUKE_JETPACK_IDLE),   DUKE_JETPACK_IDLE__STATIC },
80     { "DUKE_JETPACK_OFF",    DVPTR(DUKE_JETPACK_OFF),    DUKE_JETPACK_OFF__STATIC },
81     { "DUKE_JETPACK_ON",     DVPTR(DUKE_JETPACK_ON),     DUKE_JETPACK_ON__STATIC },
82     { "DUKE_LAND",           DVPTR(DUKE_LAND),           DUKE_LAND__STATIC },
83     { "DUKE_LAND_HURT",      DVPTR(DUKE_LAND_HURT),      DUKE_LAND_HURT__STATIC },
84     { "DUKE_LONGTERM_PAIN",  DVPTR(DUKE_LONGTERM_PAIN),  DUKE_LONGTERM_PAIN__STATIC },
85     { "DUKE_ONWATER",        DVPTR(DUKE_ONWATER),        DUKE_ONWATER__STATIC },
86     { "DUKE_PISSRELIEF",     DVPTR(DUKE_PISSRELIEF),     DUKE_PISSRELIEF__STATIC },
87     { "DUKE_SCREAM",         DVPTR(DUKE_SCREAM),         DUKE_SCREAM__STATIC },
88     { "DUKE_SEARCH",         DVPTR(DUKE_SEARCH),         DUKE_SEARCH__STATIC },
89     { "DUKE_SEARCH2",        DVPTR(DUKE_SEARCH2),        DUKE_SEARCH2__STATIC },
90     { "DUKE_TAKEPILLS",      DVPTR(DUKE_TAKEPILLS),      DUKE_TAKEPILLS__STATIC },
91     { "DUKE_UNDERWATER",     DVPTR(DUKE_UNDERWATER),     DUKE_UNDERWATER__STATIC },
92     { "DUKE_URINATE",        DVPTR(DUKE_URINATE),        DUKE_URINATE__STATIC },
93     { "DUKE_USEMEDKIT",      DVPTR(DUKE_USEMEDKIT),      DUKE_USEMEDKIT__STATIC },
94     { "DUKE_WALKINDUCTS",    DVPTR(DUKE_WALKINDUCTS),    DUKE_WALKINDUCTS__STATIC },
95     { "DUKETALKTOBOSS",      DVPTR(DUKETALKTOBOSS),      DUKETALKTOBOSS__STATIC },
96     { "EARTHQUAKE",          DVPTR(EARTHQUAKE),         EARTHQUAKE__STATIC },
97     { "EJECT_CLIP",          DVPTR(EJECT_CLIP),         EJECT_CLIP__STATIC },
98     { "ELEVATOR_OFF",        DVPTR(ELEVATOR_OFF),       ELEVATOR_OFF__STATIC },
99     { "ELEVATOR_ON",         DVPTR(ELEVATOR_ON),        ELEVATOR_ON__STATIC },
100     { "END_OF_LEVEL_WARN",   DVPTR(END_OF_LEVEL_WARN),  END_OF_LEVEL_WARN__STATIC },
101     { "ENDSEQVOL2SND1",      DVPTR(ENDSEQVOL2SND1),     ENDSEQVOL2SND1__STATIC },
102     { "ENDSEQVOL2SND2",      DVPTR(ENDSEQVOL2SND2),     ENDSEQVOL2SND2__STATIC },
103     { "ENDSEQVOL2SND3",      DVPTR(ENDSEQVOL2SND3),     ENDSEQVOL2SND3__STATIC },
104     { "ENDSEQVOL2SND4",      DVPTR(ENDSEQVOL2SND4),     ENDSEQVOL2SND4__STATIC },
105     { "ENDSEQVOL2SND5",      DVPTR(ENDSEQVOL2SND5),     ENDSEQVOL2SND5__STATIC },
106     { "ENDSEQVOL2SND6",      DVPTR(ENDSEQVOL2SND6),     ENDSEQVOL2SND6__STATIC },
107     { "ENDSEQVOL2SND7",      DVPTR(ENDSEQVOL2SND7),     ENDSEQVOL2SND7__STATIC },
108     { "ENDSEQVOL3SND2",      DVPTR(ENDSEQVOL3SND2),     ENDSEQVOL3SND2__STATIC },
109     { "ENDSEQVOL3SND3",      DVPTR(ENDSEQVOL3SND3),     ENDSEQVOL3SND3__STATIC },
110     { "ENDSEQVOL3SND4",      DVPTR(ENDSEQVOL3SND4),     ENDSEQVOL3SND4__STATIC },
111     { "ENDSEQVOL3SND5",      DVPTR(ENDSEQVOL3SND5),     ENDSEQVOL3SND5__STATIC },
112     { "ENDSEQVOL3SND6",      DVPTR(ENDSEQVOL3SND6),     ENDSEQVOL3SND6__STATIC },
113     { "ENDSEQVOL3SND7",      DVPTR(ENDSEQVOL3SND7),     ENDSEQVOL3SND7__STATIC },
114     { "ENDSEQVOL3SND8",      DVPTR(ENDSEQVOL3SND8),     ENDSEQVOL3SND8__STATIC },
115     { "ENDSEQVOL3SND9",      DVPTR(ENDSEQVOL3SND9),     ENDSEQVOL3SND9__STATIC },
116     { "EXITMENUSOUND",       DVPTR(EXITMENUSOUND),      EXITMENUSOUND__STATIC },
117     { "EXPANDERSHOOT",       DVPTR(EXPANDERSHOOT),      EXPANDERSHOOT__STATIC },
118     { "FLUSH_TOILET",        DVPTR(FLUSH_TOILET),       FLUSH_TOILET__STATIC },
119     { "FLY_BY",              DVPTR(FLY_BY),             FLY_BY__STATIC },
120     { "GENERIC_AMBIENCE17",  DVPTR(GENERIC_AMBIENCE17), GENERIC_AMBIENCE17__STATIC },
121     { "GLASS_BREAKING",      DVPTR(GLASS_BREAKING),     GLASS_BREAKING__STATIC },
122     { "GLASS_HEAVYBREAK",    DVPTR(GLASS_HEAVYBREAK),   GLASS_HEAVYBREAK__STATIC },
123     { "INSERT_CLIP",         DVPTR(INSERT_CLIP),        INSERT_CLIP__STATIC },
124     { "INTRO4_1",            DVPTR(INTRO4_1),           INTRO4_1__STATIC },
125     { "INTRO4_2",            DVPTR(INTRO4_2),           INTRO4_2__STATIC },
126     { "INTRO4_3",            DVPTR(INTRO4_3),           INTRO4_3__STATIC },
127     { "INTRO4_4",            DVPTR(INTRO4_4),           INTRO4_4__STATIC },
128     { "INTRO4_5",            DVPTR(INTRO4_5),           INTRO4_5__STATIC },
129     { "INTRO4_6",            DVPTR(INTRO4_6),           INTRO4_6__STATIC },
130     { "INTRO4_B",            DVPTR(INTRO4_B),           INTRO4_B__STATIC },
131     { "ITEM_SPLASH",         DVPTR(ITEM_SPLASH),        ITEM_SPLASH__STATIC },
132     { "JIBBED_ACTOR5",       DVPTR(JIBBED_ACTOR5),      JIBBED_ACTOR5__STATIC },
133     { "JIBBED_ACTOR6",       DVPTR(JIBBED_ACTOR6),      JIBBED_ACTOR6__STATIC },
134     { "KICK_HIT",            DVPTR(KICK_HIT),           KICK_HIT__STATIC },
135     { "LASERTRIP_ARMING",    DVPTR(LASERTRIP_ARMING),   LASERTRIP_ARMING__STATIC },
136     { "LASERTRIP_EXPLODE",   DVPTR(LASERTRIP_EXPLODE),  LASERTRIP_EXPLODE__STATIC },
137     { "LASERTRIP_ONWALL",    DVPTR(LASERTRIP_ONWALL),   LASERTRIP_ONWALL__STATIC },
138     { "LIGHTNING_SLAP",      DVPTR(LIGHTNING_SLAP),     LIGHTNING_SLAP__STATIC },
139     { "MONITOR_ACTIVE",      DVPTR(MONITOR_ACTIVE),     MONITOR_ACTIVE__STATIC },
140     { "NITEVISION_ONOFF",    DVPTR(NITEVISION_ONOFF),   NITEVISION_ONOFF__STATIC },
141     { "OCTA_RECOG",          DVPTR(OCTA_RECOG),         OCTA_RECOG__STATIC },
142     { "PIG_RECOG",           DVPTR(PIG_RECOG),          PIG_RECOG__STATIC },
143     { "PIPEBOMB_BOUNCE",     DVPTR(PIPEBOMB_BOUNCE),    PIPEBOMB_BOUNCE__STATIC },
144     { "PIPEBOMB_EXPLODE",    DVPTR(PIPEBOMB_EXPLODE),   PIPEBOMB_EXPLODE__STATIC },
145     { "PISTOL_BODYHIT",      DVPTR(PISTOL_BODYHIT),     PISTOL_BODYHIT__STATIC },
146     { "PISTOL_FIRE",         DVPTR(PISTOL_FIRE),        PISTOL_FIRE__STATIC },
147     { "PISTOL_RICOCHET",     DVPTR(PISTOL_RICOCHET),    PISTOL_RICOCHET__STATIC },
148     { "POOLBALLHIT",         DVPTR(POOLBALLHIT),        POOLBALLHIT__STATIC },
149     { "PRED_RECOG",          DVPTR(PRED_RECOG),         PRED_RECOG__STATIC },
150     { "RATTY",               DVPTR(RATTY),              RATTY__STATIC },
151     { "RECO_ATTACK",         DVPTR(RECO_ATTACK),        RECO_ATTACK__STATIC },
152     { "RECO_PAIN",           DVPTR(RECO_PAIN),          RECO_PAIN__STATIC },
153     { "RECO_RECOG",          DVPTR(RECO_RECOG),         RECO_RECOG__STATIC },
154     { "RECO_ROAM",           DVPTR(RECO_ROAM),          RECO_ROAM__STATIC },
155     { "RIPHEADNECK",         DVPTR(RIPHEADNECK),        RIPHEADNECK__STATIC },
156     { "RPG_EXPLODE",         DVPTR(RPG_EXPLODE),        RPG_EXPLODE__STATIC },
157     { "RPG_SHOOT",           DVPTR(RPG_SHOOT),          RPG_SHOOT__STATIC },
158     { "SELECT_WEAPON",       DVPTR(SELECT_WEAPON),      SELECT_WEAPON__STATIC },
159     { "SHORT_CIRCUIT",       DVPTR(SHORT_CIRCUIT),      SHORT_CIRCUIT__STATIC },
160     { "SHOTGUN_COCK",        DVPTR(SHOTGUN_COCK),       SHOTGUN_COCK__STATIC },
161     { "SHOTGUN_FIRE",        DVPTR(SHOTGUN_FIRE),       SHOTGUN_FIRE__STATIC },
162     { "SHRINKER_FIRE",       DVPTR(SHRINKER_FIRE),      SHRINKER_FIRE__STATIC },
163     { "SHRINKER_HIT",        DVPTR(SHRINKER_HIT),       SHRINKER_HIT__STATIC },
164     { "SLIM_ATTACK",         DVPTR(SLIM_ATTACK),        SLIM_ATTACK__STATIC },
165     { "SLIM_DYING",          DVPTR(SLIM_DYING),         SLIM_DYING__STATIC },
166     { "SLIM_RECOG",          DVPTR(SLIM_RECOG),         SLIM_RECOG__STATIC },
167     { "SLIM_ROAM",           DVPTR(SLIM_ROAM),          SLIM_ROAM__STATIC },
168     { "SOMETHING_DRIPPING",  DVPTR(SOMETHING_DRIPPING), SOMETHING_DRIPPING__STATIC },
169     { "SOMETHINGFROZE",      DVPTR(SOMETHINGFROZE),     SOMETHINGFROZE__STATIC },
170     { "SOMETHINGHITFORCE",   DVPTR(SOMETHINGHITFORCE),  SOMETHINGHITFORCE__STATIC },
171     { "SQUISHED",            DVPTR(SQUISHED),           SQUISHED__STATIC },
172     { "SUBWAY",              DVPTR(SUBWAY),             SUBWAY__STATIC },
173     { "SWITCH_ON",           DVPTR(SWITCH_ON),          SWITCH_ON__STATIC },
174     { "TELEPORTER",          DVPTR(TELEPORTER),         TELEPORTER__STATIC },
175     { "THUD",                DVPTR(THUD),               THUD__STATIC },
176     { "THUNDER",             DVPTR(THUNDER),            THUNDER__STATIC },
177     { "TURR_RECOG",          DVPTR(TURR_RECOG),         TURR_RECOG__STATIC },
178     { "VENT_BUST",           DVPTR(VENT_BUST),          VENT_BUST__STATIC },
179     { "VOL4ENDSND1",         DVPTR(VOL4ENDSND1),        VOL4ENDSND1__STATIC },
180     { "VOL4ENDSND2",         DVPTR(VOL4ENDSND2),        VOL4ENDSND2__STATIC },
181     { "WAR_AMBIENCE2",       DVPTR(WAR_AMBIENCE2),      WAR_AMBIENCE2__STATIC },
182     { "WHIPYOURASS",         DVPTR(WHIPYOURASS),        WHIPYOURASS__STATIC },
183     { "WIERDSHOT_FLY",       DVPTR(WIERDSHOT_FLY),      WIERDSHOT_FLY__STATIC },
184     { "WIND_AMBIENCE",       DVPTR(WIND_AMBIENCE),      WIND_AMBIENCE__STATIC },
185     { "WIND_REPEAT",         DVPTR(WIND_REPEAT),        WIND_REPEAT__STATIC },
186     { "FLAMETHROWER_INTRO",  DVPTR(FLAMETHROWER_INTRO), FLAMETHROWER_INTRO__STATIC },
187     { "FLAMETHROWER_LOOP",   DVPTR(FLAMETHROWER_LOOP),  FLAMETHROWER_LOOP__STATIC },
188     { "FLAMETHROWER_END",    DVPTR(FLAMETHROWER_END),   FLAMETHROWER_END__STATIC },
189     { "E5L7_DUKE_QUIT_YOU",  DVPTR(E5L7_DUKE_QUIT_YOU), E5L7_DUKE_QUIT_YOU__STATIC },
190  };
191 
192 #ifdef DYNSOUNDREMAP_ENABLE
193 
194 int32_t ALIEN_SWITCH1       = ALIEN_SWITCH1__STATIC;
195 int32_t BIGBANG             = BIGBANG__STATIC;
196 int32_t BONUS_SPEECH1       = BONUS_SPEECH1__STATIC;
197 int32_t BONUS_SPEECH2       = BONUS_SPEECH2__STATIC;
198 int32_t BONUS_SPEECH3       = BONUS_SPEECH3__STATIC;
199 int32_t BONUS_SPEECH4       = BONUS_SPEECH4__STATIC;
200 int32_t BONUSMUSIC          = BONUSMUSIC__STATIC;
201 int32_t BOS1_RECOG          = BOS1_RECOG__STATIC;
202 int32_t BOS1_WALK           = BOS1_WALK__STATIC;
203 int32_t BOS2_RECOG          = BOS2_RECOG__STATIC;
204 int32_t BOS3_RECOG          = BOS3_RECOG__STATIC;
205 int32_t BOS4_RECOG          = BOS4_RECOG__STATIC;
206 int32_t BOSS4_DEADSPEECH    = BOSS4_DEADSPEECH__STATIC;
207 int32_t BOSS4_FIRSTSEE      = BOSS4_FIRSTSEE__STATIC;
208 int32_t BOSSTALKTODUKE      = BOSSTALKTODUKE__STATIC;
209 int32_t CAPT_RECOG          = CAPT_RECOG__STATIC;
210 int32_t CAT_FIRE            = CAT_FIRE__STATIC;
211 int32_t CHAINGUN_FIRE       = CHAINGUN_FIRE__STATIC;
212 int32_t COMM_RECOG          = COMM_RECOG__STATIC;
213 int32_t DRON_RECOG          = DRON_RECOG__STATIC;
214 int32_t DUKE_CRACK          = DUKE_CRACK__STATIC;
215 int32_t DUKE_CRACK_FIRST    = DUKE_CRACK_FIRST__STATIC;
216 int32_t DUKE_CRACK2         = DUKE_CRACK2__STATIC;
217 int32_t DUKE_DRINKING       = DUKE_DRINKING__STATIC;
218 int32_t DUKE_GASP           = DUKE_GASP__STATIC;
219 int32_t DUKE_GET            = DUKE_GET__STATIC;
220 int32_t DUKE_GETWEAPON2     = DUKE_GETWEAPON2__STATIC;
221 int32_t DUKE_GETWEAPON6     = DUKE_GETWEAPON6__STATIC;
222 int32_t DUKE_GOTHEALTHATLOW = DUKE_GOTHEALTHATLOW__STATIC;
223 int32_t DUKE_GRUNT          = DUKE_GRUNT__STATIC;
224 int32_t DUKE_HARTBEAT       = DUKE_HARTBEAT__STATIC;
225 int32_t DUKE_JETPACK_IDLE   = DUKE_JETPACK_IDLE__STATIC;
226 int32_t DUKE_JETPACK_OFF    = DUKE_JETPACK_OFF__STATIC;
227 int32_t DUKE_JETPACK_ON     = DUKE_JETPACK_ON__STATIC;
228 int32_t DUKE_LAND           = DUKE_LAND__STATIC;
229 int32_t DUKE_LAND_HURT      = DUKE_LAND_HURT__STATIC;
230 int32_t DUKE_LONGTERM_PAIN  = DUKE_LONGTERM_PAIN__STATIC;
231 int32_t DUKE_ONWATER        = DUKE_ONWATER__STATIC;
232 int32_t DUKE_PISSRELIEF     = DUKE_PISSRELIEF__STATIC;
233 int32_t DUKE_SCREAM         = DUKE_SCREAM__STATIC;
234 int32_t DUKE_SEARCH         = DUKE_SEARCH__STATIC;
235 int32_t DUKE_SEARCH2        = DUKE_SEARCH2__STATIC;
236 int32_t DUKE_TAKEPILLS      = DUKE_TAKEPILLS__STATIC;
237 int32_t DUKE_UNDERWATER     = DUKE_UNDERWATER__STATIC;
238 int32_t DUKE_URINATE        = DUKE_URINATE__STATIC;
239 int32_t DUKE_USEMEDKIT      = DUKE_USEMEDKIT__STATIC;
240 int32_t DUKE_WALKINDUCTS    = DUKE_WALKINDUCTS__STATIC;
241 int32_t DUKETALKTOBOSS      = DUKETALKTOBOSS__STATIC;
242 int32_t EARTHQUAKE          = EARTHQUAKE__STATIC;
243 int32_t EJECT_CLIP          = EJECT_CLIP__STATIC;
244 int32_t ELEVATOR_OFF        = ELEVATOR_OFF__STATIC;
245 int32_t ELEVATOR_ON         = ELEVATOR_ON__STATIC;
246 int32_t END_OF_LEVEL_WARN   = END_OF_LEVEL_WARN__STATIC;
247 int32_t ENDSEQVOL2SND1      = ENDSEQVOL2SND1__STATIC;
248 int32_t ENDSEQVOL2SND2      = ENDSEQVOL2SND2__STATIC;
249 int32_t ENDSEQVOL2SND3      = ENDSEQVOL2SND3__STATIC;
250 int32_t ENDSEQVOL2SND4      = ENDSEQVOL2SND4__STATIC;
251 int32_t ENDSEQVOL2SND5      = ENDSEQVOL2SND5__STATIC;
252 int32_t ENDSEQVOL2SND6      = ENDSEQVOL2SND6__STATIC;
253 int32_t ENDSEQVOL2SND7      = ENDSEQVOL2SND7__STATIC;
254 int32_t ENDSEQVOL3SND2      = ENDSEQVOL3SND2__STATIC;
255 int32_t ENDSEQVOL3SND3      = ENDSEQVOL3SND3__STATIC;
256 int32_t ENDSEQVOL3SND4      = ENDSEQVOL3SND4__STATIC;
257 int32_t ENDSEQVOL3SND5      = ENDSEQVOL3SND5__STATIC;
258 int32_t ENDSEQVOL3SND6      = ENDSEQVOL3SND6__STATIC;
259 int32_t ENDSEQVOL3SND7      = ENDSEQVOL3SND7__STATIC;
260 int32_t ENDSEQVOL3SND8      = ENDSEQVOL3SND8__STATIC;
261 int32_t ENDSEQVOL3SND9      = ENDSEQVOL3SND9__STATIC;
262 int32_t EXITMENUSOUND       = EXITMENUSOUND__STATIC;
263 int32_t EXPANDERSHOOT       = EXPANDERSHOOT__STATIC;
264 int32_t FLUSH_TOILET        = FLUSH_TOILET__STATIC;
265 int32_t FLY_BY              = FLY_BY__STATIC;
266 int32_t GENERIC_AMBIENCE17  = GENERIC_AMBIENCE17__STATIC;
267 int32_t GLASS_BREAKING      = GLASS_BREAKING__STATIC;
268 int32_t GLASS_HEAVYBREAK    = GLASS_HEAVYBREAK__STATIC;
269 int32_t INSERT_CLIP         = INSERT_CLIP__STATIC;
270 int32_t INTRO4_1            = INTRO4_1__STATIC;
271 int32_t INTRO4_2            = INTRO4_2__STATIC;
272 int32_t INTRO4_3            = INTRO4_3__STATIC;
273 int32_t INTRO4_4            = INTRO4_4__STATIC;
274 int32_t INTRO4_5            = INTRO4_5__STATIC;
275 int32_t INTRO4_6            = INTRO4_6__STATIC;
276 int32_t INTRO4_B            = INTRO4_B__STATIC;
277 int32_t ITEM_SPLASH         = ITEM_SPLASH__STATIC;
278 int32_t JIBBED_ACTOR5       = JIBBED_ACTOR5__STATIC;
279 int32_t JIBBED_ACTOR6       = JIBBED_ACTOR6__STATIC;
280 int32_t KICK_HIT            = KICK_HIT__STATIC;
281 int32_t LASERTRIP_ARMING    = LASERTRIP_ARMING__STATIC;
282 int32_t LASERTRIP_EXPLODE   = LASERTRIP_EXPLODE__STATIC;
283 int32_t LASERTRIP_ONWALL    = LASERTRIP_ONWALL__STATIC;
284 int32_t LIGHTNING_SLAP      = LIGHTNING_SLAP__STATIC;
285 int32_t MONITOR_ACTIVE      = MONITOR_ACTIVE__STATIC;
286 int32_t NITEVISION_ONOFF    = NITEVISION_ONOFF__STATIC;
287 int32_t OCTA_RECOG          = OCTA_RECOG__STATIC;
288 int32_t PIG_RECOG           = PIG_RECOG__STATIC;
289 int32_t PIPEBOMB_BOUNCE     = PIPEBOMB_BOUNCE__STATIC;
290 int32_t PIPEBOMB_EXPLODE    = PIPEBOMB_EXPLODE__STATIC;
291 int32_t PISTOL_BODYHIT      = PISTOL_BODYHIT__STATIC;
292 int32_t PISTOL_FIRE         = PISTOL_FIRE__STATIC;
293 int32_t PISTOL_RICOCHET     = PISTOL_RICOCHET__STATIC;
294 int32_t POOLBALLHIT         = POOLBALLHIT__STATIC;
295 int32_t PRED_RECOG          = PRED_RECOG__STATIC;
296 int32_t RATTY               = RATTY__STATIC;
297 int32_t RECO_ATTACK         = RECO_ATTACK__STATIC;
298 int32_t RECO_PAIN           = RECO_PAIN__STATIC;
299 int32_t RECO_RECOG          = RECO_RECOG__STATIC;
300 int32_t RECO_ROAM           = RECO_ROAM__STATIC;
301 int32_t RIPHEADNECK         = RIPHEADNECK__STATIC;
302 int32_t RPG_EXPLODE         = RPG_EXPLODE__STATIC;
303 int32_t RPG_SHOOT           = RPG_SHOOT__STATIC;
304 int32_t SELECT_WEAPON       = SELECT_WEAPON__STATIC;
305 int32_t SHORT_CIRCUIT       = SHORT_CIRCUIT__STATIC;
306 int32_t SHOTGUN_COCK        = SHOTGUN_COCK__STATIC;
307 int32_t SHOTGUN_FIRE        = SHOTGUN_FIRE__STATIC;
308 int32_t SHRINKER_FIRE       = SHRINKER_FIRE__STATIC;
309 int32_t SHRINKER_HIT        = SHRINKER_HIT__STATIC;
310 int32_t SLIM_ATTACK         = SLIM_ATTACK__STATIC;
311 int32_t SLIM_DYING          = SLIM_DYING__STATIC;
312 int32_t SLIM_RECOG          = SLIM_RECOG__STATIC;
313 int32_t SLIM_ROAM           = SLIM_ROAM__STATIC;
314 int32_t SOMETHING_DRIPPING  = SOMETHING_DRIPPING__STATIC;
315 int32_t SOMETHINGFROZE      = SOMETHINGFROZE__STATIC;
316 int32_t SOMETHINGHITFORCE   = SOMETHINGHITFORCE__STATIC;
317 int32_t SQUISHED            = SQUISHED__STATIC;
318 int32_t SUBWAY              = SUBWAY__STATIC;
319 int32_t SWITCH_ON           = SWITCH_ON__STATIC;
320 int32_t TELEPORTER          = TELEPORTER__STATIC;
321 int32_t THUD                = THUD__STATIC;
322 int32_t THUNDER             = THUNDER__STATIC;
323 int32_t TURR_RECOG          = TURR_RECOG__STATIC;
324 int32_t VENT_BUST           = VENT_BUST__STATIC;
325 int32_t VOL4ENDSND1         = VOL4ENDSND1__STATIC;
326 int32_t VOL4ENDSND2         = VOL4ENDSND2__STATIC;
327 int32_t WAR_AMBIENCE2       = WAR_AMBIENCE2__STATIC;
328 int32_t WHIPYOURASS         = WHIPYOURASS__STATIC;
329 int32_t WIERDSHOT_FLY       = WIERDSHOT_FLY__STATIC;
330 int32_t WIND_AMBIENCE       = WIND_AMBIENCE__STATIC;
331 int32_t WIND_REPEAT         = WIND_REPEAT__STATIC;
332 int32_t FLAMETHROWER_INTRO  = FLAMETHROWER_INTRO__STATIC;
333 int32_t FLAMETHROWER_LOOP   = FLAMETHROWER_LOOP__STATIC;
334 int32_t FLAMETHROWER_END    = FLAMETHROWER_END__STATIC;
335 int32_t E5L7_DUKE_QUIT_YOU  = E5L7_DUKE_QUIT_YOU__STATIC;
336 
337 static hashtable_t h_names = {512, NULL};
338 
G_ProcessDynamicSoundMapping(const char * szLabel,int32_t lValue)339 void G_ProcessDynamicSoundMapping(const char *szLabel, int32_t lValue)
340 {
341     if ((unsigned)lValue >= MAXSOUNDS || !szLabel)
342         return;
343 
344     int const i = hash_find(&h_names,szLabel);
345 
346     if (i>=0)
347     {
348         struct dynitem *di = &g_dynSoundList[i];
349 #ifdef DEBUGGINGAIDS
350         if (g_scriptDebug && di->staticval != lValue)
351             OSD_Printf("REMAP %s (%d) --> %d\n", di->str, di->staticval, lValue);
352 #endif
353         *di->dynvalptr = lValue;
354     }
355 }
356 
initsoundhashnames(void)357 void initsoundhashnames(void)
358 {
359     hash_init(&h_names);
360 
361     for (int i=0; i < ARRAY_SSIZE(g_dynSoundList); i++)
362         hash_add(&h_names, g_dynSoundList[i].str, i, 0);
363 }
364 
freesoundhashnames(void)365 void freesoundhashnames(void)
366 {
367     hash_free(&h_names);
368 }
369 #endif
370 
371 // This is run after all CON define's have been processed to set up the
372 // dynamic->static sound mapping.
G_InitDynamicSounds(void)373 void G_InitDynamicSounds(void)
374 {
375     Bmemset(DynamicSoundMap, 0, sizeof(DynamicSoundMap));
376 
377     for (auto & i : g_dynSoundList)
378 #ifdef DYNSOUNDREMAP_ENABLE
379         DynamicSoundMap[*(i.dynvalptr)] = i.staticval;
380 #else
381         DynamicSoundMap[i.staticval] = i.staticval;
382 #endif
383 
384 }
385