1 | Index: gui/options.h
|
---|
2 | ===================================================================
|
---|
3 | --- gui/options.h (revision 22442)
|
---|
4 | +++ gui/options.h (working copy)
|
---|
5 | @@ -66,11 +66,15 @@
|
---|
6 | void addAudioControls(GuiObject *boss, String prefix);
|
---|
7 | void addMIDIControls(GuiObject *boss, String prefix);
|
---|
8 | void addVolumeControls(GuiObject *boss, String prefix);
|
---|
9 | + // The default value is the launcher's non-scaled talkspeed value. When SCUMM uses the widget,
|
---|
10 | + // it uses its own scale
|
---|
11 | + void addSubtitleControls(GuiObject *boss, String prefix, int maxSliderVal = 255);
|
---|
12 |
|
---|
13 | void setGraphicSettingsState(bool enabled);
|
---|
14 | void setAudioSettingsState(bool enabled);
|
---|
15 | void setMIDISettingsState(bool enabled);
|
---|
16 | void setVolumeSettingsState(bool enabled);
|
---|
17 | + void setSubtitleSettingsState(bool enabled);
|
---|
18 |
|
---|
19 | private:
|
---|
20 | //
|
---|
21 | @@ -87,7 +91,6 @@
|
---|
22 | //
|
---|
23 | bool _enableAudioSettings;
|
---|
24 | PopUpWidget *_midiPopUp;
|
---|
25 | - CheckboxWidget *_subCheckbox;
|
---|
26 |
|
---|
27 | //
|
---|
28 | // MIDI controls
|
---|
29 | @@ -96,18 +99,34 @@
|
---|
30 | CheckboxWidget *_multiMidiCheckbox;
|
---|
31 | CheckboxWidget *_mt32Checkbox;
|
---|
32 | CheckboxWidget *_enableGSCheckbox;
|
---|
33 | +
|
---|
34 | + //
|
---|
35 | + // Subtitle controls
|
---|
36 | + //
|
---|
37 | + int getSubtitleMode(bool subtitles, bool speech_mute);
|
---|
38 | + bool _enableSubtitleSettings;
|
---|
39 | + StaticTextWidget *_subToggleDesc;
|
---|
40 | + ButtonWidget *_subToggleButton;
|
---|
41 | + int _subMode;
|
---|
42 | + static const char *_subModeDesc[];
|
---|
43 | + StaticTextWidget *_subSpeedDesc;
|
---|
44 | + SliderWidget *_subSpeedSlider;
|
---|
45 | + StaticTextWidget *_subSpeedLabel;
|
---|
46 |
|
---|
47 | //
|
---|
48 | // Volume controls
|
---|
49 | //
|
---|
50 | bool _enableVolumeSettings;
|
---|
51 |
|
---|
52 | + StaticTextWidget *_musicVolumeDesc;
|
---|
53 | SliderWidget *_musicVolumeSlider;
|
---|
54 | StaticTextWidget *_musicVolumeLabel;
|
---|
55 |
|
---|
56 | + StaticTextWidget *_sfxVolumeDesc;
|
---|
57 | SliderWidget *_sfxVolumeSlider;
|
---|
58 | StaticTextWidget *_sfxVolumeLabel;
|
---|
59 |
|
---|
60 | + StaticTextWidget *_speechVolumeDesc;
|
---|
61 | SliderWidget *_speechVolumeSlider;
|
---|
62 | StaticTextWidget *_speechVolumeLabel;
|
---|
63 | };
|
---|
64 | Index: gui/themes/modern.ini
|
---|
65 | ===================================================================
|
---|
66 | --- gui/themes/modern.ini (revision 22442)
|
---|
67 | +++ gui/themes/modern.ini (working copy)
|
---|
68 | @@ -234,6 +234,7 @@
|
---|
69 | opYoffset=vBorder
|
---|
70 | useWithPrefix=audioControls globaloptions_
|
---|
71 | useWithPrefix=volumeControls globaloptions_
|
---|
72 | +useWithPrefix=subtitleControls globaloptions_
|
---|
73 |
|
---|
74 | # MIDI tab
|
---|
75 | opYoffset=vBorder
|
---|
76 | @@ -302,6 +303,7 @@
|
---|
77 | gameoptions_audioCheckbox=gox opYoffset (kFontHeight + 10 + 180) buttonHeight
|
---|
78 | opYoffset=(opYoffset + buttonHeight + 6)
|
---|
79 | useWithPrefix=audioControls gameoptions_
|
---|
80 | +useWithPrefix=subtitleControls gameoptions_
|
---|
81 |
|
---|
82 | # midi tab
|
---|
83 | opYoffset=vBorder
|
---|
84 | @@ -341,9 +343,8 @@
|
---|
85 | # hence it is on the end of the list
|
---|
86 | opYoffset=8
|
---|
87 | useWithPrefix=volumeControls scummconfig_
|
---|
88 | -scummconfig_subtitlesCheckbox=15 opYoffset (kFontHeight + 10 + 89) buttonHeight
|
---|
89 | +useWithPrefix=subtitleControls scummconfig_
|
---|
90 | opYoffset=(opYoffset + buttonHeight)
|
---|
91 | -scummconfig_speechCheckbox=prev.x opYoffset (kFontHeight + 10 + 85) buttonHeight
|
---|
92 | opYoffset=(opYoffset + buttonHeight + 4)
|
---|
93 | soWidth=(8 + 3 * buttonWidth + 4)
|
---|
94 | scummconfig_keys=(soWidth - 3 * (buttonWidth + 4) + 6) opYoffset (buttonWidth - 10) buttonHeight
|
---|
95 | @@ -389,7 +390,6 @@
|
---|
96 | chooser_cancel=(chooserW - 2 * (buttonWidth + 10)) (opHeight - buttonHeight - 8) buttonWidth buttonHeight
|
---|
97 | chooser_ok=(prev.x2 + 10) prev.y prev.w prev.h
|
---|
98 |
|
---|
99 | -
|
---|
100 | [graphicsControls]
|
---|
101 | gcx=(opXoffset + 10)
|
---|
102 | gcw=(parent.w - gcx - 25)
|
---|
103 | @@ -404,26 +404,25 @@
|
---|
104 |
|
---|
105 | [audioControls]
|
---|
106 | aux=(opXoffset + 10)
|
---|
107 | -auw=(parent.w - aux - 25)
|
---|
108 | -auMidiPopup=(aux - 5) (opYoffset - 1) (auw + 5) (kLineHeight + 2)
|
---|
109 | -opYoffset=(opYoffset + kLineHeight + 16)
|
---|
110 | -auSubtitlesCheckbox=aux opYoffset (kFontHeight + 10 + 102) buttonHeight
|
---|
111 | -opYoffset=(opYoffset + buttonHeight + 18)
|
---|
112 | +auw=(parent.w - aux - 30)
|
---|
113 | +auMidiPopup=(aux) (opYoffset - 1) (auw + 5) (kLineHeight + 2)
|
---|
114 | +opYoffset=(opYoffset + buttonHeight + 4)
|
---|
115 |
|
---|
116 | [volumeControls]
|
---|
117 | -vctextw=95
|
---|
118 | -vcxoff=(vctextw + 15)
|
---|
119 | -vcMusicText=10 (opYoffset + 2) vctextw kLineHeight
|
---|
120 | +vctextw=110
|
---|
121 | +vcxoff=(opXoffset + vctextw + 10)
|
---|
122 | +vcx=(opXoffset + 10)
|
---|
123 | +vcMusicText=vcx (opYoffset + 2) vctextw kLineHeight
|
---|
124 | vcMusicText.align=kTextAlignRight
|
---|
125 | vcMusicSlider=vcxoff opYoffset sliderWidth sliderHeight
|
---|
126 | vcMusicLabel=(vcxoff + prev.w + 10) (opYoffset + 2) 24 kLineHeight
|
---|
127 | opYoffset=(opYoffset + sliderHeight + 8)
|
---|
128 | -vcSfxText=10 (opYoffset + 2) vctextw kLineHeight
|
---|
129 | +vcSfxText=vcx (opYoffset + 2) vctextw kLineHeight
|
---|
130 | vcSfxText.align=kTextAlignRight
|
---|
131 | vcSfxSlider=vcxoff opYoffset sliderWidth sliderHeight
|
---|
132 | vcSfxLabel=(vcxoff + prev.w + 10) (opYoffset + 2) 24 kLineHeight
|
---|
133 | opYoffset=(opYoffset + sliderHeight + 8)
|
---|
134 | -vcSpeechText=10 (opYoffset + 2) vctextw kLineHeight
|
---|
135 | +vcSpeechText=vcx (opYoffset + 2) vctextw kLineHeight
|
---|
136 | vcSpeechText.align=kTextAlignRight
|
---|
137 | vcSpeechSlider=vcxoff opYoffset sliderWidth sliderHeight
|
---|
138 | vcSpeechLabel=(vcxoff + prev.w + 10) (opYoffset + 2) 24 kLineHeight
|
---|
139 | @@ -442,6 +441,21 @@
|
---|
140 | mcGSCheckbox=mcx opYoffset (kFontHeight + 10 + 142) buttonHeight
|
---|
141 | opYoffset=(opYoffset + buttonHeight + midiControlsSpacing)
|
---|
142 |
|
---|
143 | +[subtitleControls]
|
---|
144 | +sbx=(opXoffset + 10)
|
---|
145 | +sbtextw=110
|
---|
146 | +sbYoff=(buttonHeight / 8)
|
---|
147 | +sbOff=((sliderHeight - kLineHeight) / 2)
|
---|
148 | +opYoffset=(opYoffset + sbYoff)
|
---|
149 | +subToggleDesc=sbx (opYoffset + sbYoff) sbtextw buttonHeight
|
---|
150 | +subToggleButton=prev.x2 opYoffset (buttonWidth + 34) sliderHeight
|
---|
151 | +opYoffset=(opYoffset + buttonHeight + 6)
|
---|
152 | +subSubtitleSpeedDesc=sbx (opYoffset + sbOff) sbtextw kLineHeight
|
---|
153 | +subSubtitleSpeedDesc.align=kTextAlignRight
|
---|
154 | +subSubtitleSpeedSlider=prev.x2 opYoffset sliderWidth sliderHeight
|
---|
155 | +subSubtitleSpeedLabel=(prev.x2 + 10) (opYoffset + sbOff) 24 kLineHeight
|
---|
156 | +opYoffset=(opYoffset + sliderHeight + 8)
|
---|
157 | +
|
---|
158 | [scummmain]
|
---|
159 | ## Main dialog
|
---|
160 | # note that scummmain size depends on overall height
|
---|
161 | Index: gui/options.cpp
|
---|
162 | ===================================================================
|
---|
163 | --- gui/options.cpp (revision 22442)
|
---|
164 | +++ gui/options.cpp (working copy)
|
---|
165 | @@ -55,11 +55,13 @@
|
---|
166 | // - music & graphics driver (but see also the comments on EditGameDialog
|
---|
167 | // for some techincal difficulties with this)
|
---|
168 | // - default volumes (sfx/speech/music)
|
---|
169 | -// - aspect ratio, language, platform, subtitles, debug mode/level, cd drive, joystick, multi midi, native mt32
|
---|
170 | +// - aspect ratio, language, platform, debug mode/level, cd drive, joystick, multi midi, native mt32
|
---|
171 |
|
---|
172 | enum {
|
---|
173 | kMusicVolumeChanged = 'muvc',
|
---|
174 | kSfxVolumeChanged = 'sfvc',
|
---|
175 | + kSubtitleToggle = 'sttg',
|
---|
176 | + kSubtitleSpeedChanged = 'stsc',
|
---|
177 | kSpeechVolumeChanged = 'vcvc',
|
---|
178 | kChooseSoundFontCmd = 'chsf',
|
---|
179 | kChooseSaveDirCmd = 'chos',
|
---|
180 | @@ -83,6 +85,12 @@
|
---|
181 | init();
|
---|
182 | }
|
---|
183 |
|
---|
184 | +const char *OptionsDialog::_subModeDesc[] = {
|
---|
185 | + "Speech Only",
|
---|
186 | + "Speech and Subtitles",
|
---|
187 | + "Subtitles Only"
|
---|
188 | +};
|
---|
189 | +
|
---|
190 | void OptionsDialog::init() {
|
---|
191 | _enableGraphicSettings = false;
|
---|
192 | _gfxPopUp = 0;
|
---|
193 | @@ -90,19 +98,26 @@
|
---|
194 | _fullscreenCheckbox = 0;
|
---|
195 | _aspectCheckbox = 0;
|
---|
196 | _enableAudioSettings = false;
|
---|
197 | - _subCheckbox = 0;
|
---|
198 | _midiPopUp = 0;
|
---|
199 | _enableMIDISettings = false;
|
---|
200 | _multiMidiCheckbox = 0;
|
---|
201 | _mt32Checkbox = 0;
|
---|
202 | _enableGSCheckbox = 0;
|
---|
203 | _enableVolumeSettings = false;
|
---|
204 | + _musicVolumeDesc = 0;
|
---|
205 | _musicVolumeSlider = 0;
|
---|
206 | _musicVolumeLabel = 0;
|
---|
207 | + _sfxVolumeDesc = 0;
|
---|
208 | _sfxVolumeSlider = 0;
|
---|
209 | _sfxVolumeLabel = 0;
|
---|
210 | + _speechVolumeDesc = 0;
|
---|
211 | _speechVolumeSlider = 0;
|
---|
212 | _speechVolumeLabel = 0;
|
---|
213 | + _subToggleDesc = 0;
|
---|
214 | + _subToggleButton = 0;
|
---|
215 | + _subSpeedDesc = 0;
|
---|
216 | + _subSpeedSlider = 0;
|
---|
217 | + _subSpeedLabel = 0;
|
---|
218 | }
|
---|
219 |
|
---|
220 | void OptionsDialog::open() {
|
---|
221 | @@ -111,6 +126,7 @@
|
---|
222 | // Reset result value
|
---|
223 | setResult(0);
|
---|
224 |
|
---|
225 | + // Graphic options
|
---|
226 | if (_fullscreenCheckbox) {
|
---|
227 | _gfxPopUp->setSelected(0);
|
---|
228 |
|
---|
229 | @@ -150,7 +166,8 @@
|
---|
230 | #endif
|
---|
231 | }
|
---|
232 |
|
---|
233 | - if (_subCheckbox) {
|
---|
234 | + // Audio options
|
---|
235 | + if (_midiPopUp) {
|
---|
236 | // Music driver
|
---|
237 | const MidiDriverDescription *md = MidiDriver::getAvailableMidiDrivers();
|
---|
238 | int i = 0;
|
---|
239 | @@ -163,9 +180,6 @@
|
---|
240 | md++;
|
---|
241 | }
|
---|
242 | _midiPopUp->setSelected(md->name ? i : 0);
|
---|
243 | -
|
---|
244 | - // Subtitles setting
|
---|
245 | - _subCheckbox->setState(ConfMan.getBool("subtitles", _domain));
|
---|
246 | }
|
---|
247 |
|
---|
248 | if (_multiMidiCheckbox) {
|
---|
249 | @@ -202,10 +216,27 @@
|
---|
250 | _speechVolumeSlider->setValue(vol);
|
---|
251 | _speechVolumeLabel->setValue(vol);
|
---|
252 | }
|
---|
253 | +
|
---|
254 | + // Subtitle options
|
---|
255 | + if (_subToggleButton) {
|
---|
256 | + int speed;
|
---|
257 | + int sliderMaxValue = _subSpeedSlider->getMaxValue();
|
---|
258 | +
|
---|
259 | + _subMode = getSubtitleMode(ConfMan.getBool("subtitles", _domain), ConfMan.getBool("speech_mute"));
|
---|
260 | + _subToggleButton->setLabel(_subModeDesc[_subMode]);
|
---|
261 | +
|
---|
262 | + // Engines that reuse the subtitle speed widget set their own max value.
|
---|
263 | + // Scale the config value accordingly (see addSubtitleControls)
|
---|
264 | + speed = (ConfMan.getInt("talkspeed", _domain) * sliderMaxValue + 255 / 2) / 255;
|
---|
265 | + _subSpeedSlider->setValue(speed);
|
---|
266 | + _subSpeedLabel->setValue(speed);
|
---|
267 | + }
|
---|
268 | }
|
---|
269 |
|
---|
270 | void OptionsDialog::close() {
|
---|
271 | if (getResult()) {
|
---|
272 | +
|
---|
273 | + // Graphic options
|
---|
274 | if (_fullscreenCheckbox) {
|
---|
275 | if (_enableGraphicSettings) {
|
---|
276 | ConfMan.setBool("fullscreen", _fullscreenCheckbox->getState(), _domain);
|
---|
277 | @@ -224,6 +255,7 @@
|
---|
278 | }
|
---|
279 | }
|
---|
280 |
|
---|
281 | + // Volume options
|
---|
282 | if (_musicVolumeSlider) {
|
---|
283 | if (_enableVolumeSettings) {
|
---|
284 | ConfMan.setInt("music_volume", _musicVolumeSlider->getValue(), _domain);
|
---|
285 | @@ -236,9 +268,9 @@
|
---|
286 | }
|
---|
287 | }
|
---|
288 |
|
---|
289 | - if (_subCheckbox) {
|
---|
290 | + // Audio options
|
---|
291 | + if (_midiPopUp) {
|
---|
292 | if (_enableAudioSettings) {
|
---|
293 | - ConfMan.setBool("subtitles", _subCheckbox->getState(), _domain);
|
---|
294 | const MidiDriverDescription *md = MidiDriver::getAvailableMidiDrivers();
|
---|
295 | while (md->name && md->id != (int)_midiPopUp->getSelectedTag())
|
---|
296 | md++;
|
---|
297 | @@ -248,7 +280,6 @@
|
---|
298 | ConfMan.removeKey("music_driver", _domain);
|
---|
299 | } else {
|
---|
300 | ConfMan.removeKey("music_driver", _domain);
|
---|
301 | - ConfMan.removeKey("subtitles", _domain);
|
---|
302 | }
|
---|
303 | }
|
---|
304 |
|
---|
305 | @@ -270,6 +301,42 @@
|
---|
306 | }
|
---|
307 | }
|
---|
308 |
|
---|
309 | + // Subtitle options
|
---|
310 | + if (_subToggleButton) {
|
---|
311 | + if (_enableSubtitleSettings) {
|
---|
312 | + bool subtitles, speech_mute;
|
---|
313 | + int talkspeed;
|
---|
314 | + int sliderMaxValue = _subSpeedSlider->getMaxValue();
|
---|
315 | +
|
---|
316 | + switch (_subMode) {
|
---|
317 | + case 0:
|
---|
318 | + subtitles = speech_mute = false;
|
---|
319 | + break;
|
---|
320 | + case 1:
|
---|
321 | + subtitles = true;
|
---|
322 | + speech_mute = false;
|
---|
323 | + break;
|
---|
324 | + case 2:
|
---|
325 | + default:
|
---|
326 | + subtitles = speech_mute = true;
|
---|
327 | + break;
|
---|
328 | + }
|
---|
329 | +
|
---|
330 | + ConfMan.setBool("subtitles", subtitles, _domain);
|
---|
331 | + ConfMan.setBool("speech_mute", speech_mute, _domain);
|
---|
332 | +
|
---|
333 | + // Engines that reuse the subtitle speed widget set their own max value.
|
---|
334 | + // Scale the config value accordingly (see addSubtitleControls)
|
---|
335 | + talkspeed = (_subSpeedSlider->getValue() * 255 + sliderMaxValue / 2) / sliderMaxValue;
|
---|
336 | + ConfMan.setInt("talkspeed", talkspeed, _domain);
|
---|
337 | +
|
---|
338 | + } else {
|
---|
339 | + ConfMan.removeKey("subtitles", _domain);
|
---|
340 | + ConfMan.removeKey("talkspeed", _domain);
|
---|
341 | + ConfMan.removeKey("speech_mute", _domain);
|
---|
342 | + }
|
---|
343 | + }
|
---|
344 | +
|
---|
345 | // Save config file
|
---|
346 | ConfMan.flushToDisk();
|
---|
347 | }
|
---|
348 | @@ -291,6 +358,22 @@
|
---|
349 | _speechVolumeLabel->setValue(_speechVolumeSlider->getValue());
|
---|
350 | _speechVolumeLabel->draw();
|
---|
351 | break;
|
---|
352 | + case kSubtitleToggle:
|
---|
353 | + if (_subMode < 2)
|
---|
354 | + _subMode++;
|
---|
355 | + else
|
---|
356 | + _subMode = 0;
|
---|
357 | +
|
---|
358 | + _subToggleButton->setLabel(_subModeDesc[_subMode]);
|
---|
359 | + _subToggleButton->draw();
|
---|
360 | + _subSpeedDesc->draw();
|
---|
361 | + _subSpeedSlider->draw();
|
---|
362 | + _subSpeedLabel->draw();
|
---|
363 | + break;
|
---|
364 | + case kSubtitleSpeedChanged:
|
---|
365 | + _subSpeedLabel->setValue(_subSpeedSlider->getValue());
|
---|
366 | + _subSpeedLabel->draw();
|
---|
367 | + break;
|
---|
368 | case kOKCmd:
|
---|
369 | setResult(1);
|
---|
370 | close();
|
---|
371 | @@ -315,7 +398,6 @@
|
---|
372 | _enableAudioSettings = enabled;
|
---|
373 |
|
---|
374 | _midiPopUp->setEnabled(enabled);
|
---|
375 | - _subCheckbox->setEnabled(enabled);
|
---|
376 | }
|
---|
377 |
|
---|
378 | void OptionsDialog::setMIDISettingsState(bool enabled) {
|
---|
379 | @@ -331,14 +413,27 @@
|
---|
380 | void OptionsDialog::setVolumeSettingsState(bool enabled) {
|
---|
381 | _enableVolumeSettings = enabled;
|
---|
382 |
|
---|
383 | + _musicVolumeDesc->setEnabled(enabled);
|
---|
384 | _musicVolumeSlider->setEnabled(enabled);
|
---|
385 | _musicVolumeLabel->setEnabled(enabled);
|
---|
386 | + _sfxVolumeDesc->setEnabled(enabled);
|
---|
387 | _sfxVolumeSlider->setEnabled(enabled);
|
---|
388 | _sfxVolumeLabel->setEnabled(enabled);
|
---|
389 | + _speechVolumeDesc->setEnabled(enabled);
|
---|
390 | _speechVolumeSlider->setEnabled(enabled);
|
---|
391 | _speechVolumeLabel->setEnabled(enabled);
|
---|
392 | }
|
---|
393 |
|
---|
394 | +void OptionsDialog::setSubtitleSettingsState(bool enabled) {
|
---|
395 | + _enableSubtitleSettings = enabled;
|
---|
396 | +
|
---|
397 | + _subToggleButton->setEnabled(enabled);
|
---|
398 | + _subToggleDesc->setEnabled(enabled);
|
---|
399 | + _subSpeedDesc->setEnabled(enabled);
|
---|
400 | + _subSpeedSlider->setEnabled(enabled);
|
---|
401 | + _subSpeedLabel->setEnabled(enabled);
|
---|
402 | +}
|
---|
403 | +
|
---|
404 | void OptionsDialog::addGraphicControls(GuiObject *boss, String prefix) {
|
---|
405 | const OSystem::GraphicsMode *gm = g_system->getSupportedGraphicsModes();
|
---|
406 |
|
---|
407 | @@ -391,9 +486,6 @@
|
---|
408 | md++;
|
---|
409 | }
|
---|
410 |
|
---|
411 | - // Subtitles on/off
|
---|
412 | - _subCheckbox = new CheckboxWidget(boss, prefix + "auSubtitlesCheckbox", "Display subtitles", 0, 0);
|
---|
413 | -
|
---|
414 | _enableAudioSettings = true;
|
---|
415 | }
|
---|
416 |
|
---|
417 | @@ -414,29 +506,41 @@
|
---|
418 | _enableMIDISettings = true;
|
---|
419 | }
|
---|
420 |
|
---|
421 | +// The function has an extra slider range parameter, since both the launcher and SCUMM engine
|
---|
422 | +// make use of the widgets. The launcher range is 0-255. SCUMM's 0-9
|
---|
423 | +void OptionsDialog::addSubtitleControls(GuiObject *boss, String prefix, int maxSliderVal) {
|
---|
424 | +
|
---|
425 | + _subToggleDesc = new StaticTextWidget(boss, prefix + "subToggleDesc", "Text and Speech:");
|
---|
426 | + _subToggleButton = new ButtonWidget(boss, prefix + "subToggleButton", "", kSubtitleToggle, 0);
|
---|
427 | +
|
---|
428 | + // Subtitle speed
|
---|
429 | + _subSpeedDesc = new StaticTextWidget(boss, prefix + "subSubtitleSpeedDesc", "Subtitle speed:");
|
---|
430 | + _subSpeedSlider = new SliderWidget(boss, prefix + "subSubtitleSpeedSlider", kSubtitleSpeedChanged);
|
---|
431 | + _subSpeedLabel = new StaticTextWidget(boss, prefix + "subSubtitleSpeedLabel", "100%");
|
---|
432 | + _subSpeedSlider->setMinValue(0); _subSpeedSlider->setMaxValue(maxSliderVal);
|
---|
433 | + _subSpeedLabel->setFlags(WIDGET_CLEARBG);
|
---|
434 | +
|
---|
435 | + _enableSubtitleSettings = true;
|
---|
436 | +}
|
---|
437 | +
|
---|
438 | void OptionsDialog::addVolumeControls(GuiObject *boss, String prefix) {
|
---|
439 | - const char *slider_labels[] = {
|
---|
440 | - "Music volume:",
|
---|
441 | - "SFX volume:",
|
---|
442 | - "Speech volume:"
|
---|
443 | - };
|
---|
444 |
|
---|
445 | // Volume controllers
|
---|
446 | - new StaticTextWidget(boss, prefix + "vcMusicText", slider_labels[0]);
|
---|
447 | + _musicVolumeDesc = new StaticTextWidget(boss, prefix + "vcMusicText", "Music volume:");
|
---|
448 | _musicVolumeSlider = new SliderWidget(boss, prefix + "vcMusicSlider", kMusicVolumeChanged);
|
---|
449 | _musicVolumeLabel = new StaticTextWidget(boss, prefix + "vcMusicLabel", "100%");
|
---|
450 | _musicVolumeSlider->setMinValue(0);
|
---|
451 | _musicVolumeSlider->setMaxValue(Audio::Mixer::kMaxMixerVolume);
|
---|
452 | _musicVolumeLabel->setFlags(WIDGET_CLEARBG);
|
---|
453 |
|
---|
454 | - new StaticTextWidget(boss, prefix + "vcSfxText", slider_labels[1]);
|
---|
455 | + _sfxVolumeDesc = new StaticTextWidget(boss, prefix + "vcSfxText", "SFX volume:");
|
---|
456 | _sfxVolumeSlider = new SliderWidget(boss, prefix + "vcSfxSlider", kSfxVolumeChanged);
|
---|
457 | _sfxVolumeLabel = new StaticTextWidget(boss, prefix + "vcSfxLabel", "100%");
|
---|
458 | _sfxVolumeSlider->setMinValue(0);
|
---|
459 | _sfxVolumeSlider->setMaxValue(Audio::Mixer::kMaxMixerVolume);
|
---|
460 | _sfxVolumeLabel->setFlags(WIDGET_CLEARBG);
|
---|
461 |
|
---|
462 | - new StaticTextWidget(boss, prefix + "vcSpeechText" , slider_labels[2]);
|
---|
463 | + _speechVolumeDesc = new StaticTextWidget(boss, prefix + "vcSpeechText" , "Speech volume:");
|
---|
464 | _speechVolumeSlider = new SliderWidget(boss, prefix + "vcSpeechSlider", kSpeechVolumeChanged);
|
---|
465 | _speechVolumeLabel = new StaticTextWidget(boss, prefix + "vcSpeechLabel", "100%");
|
---|
466 | _speechVolumeSlider->setMinValue(0);
|
---|
467 | @@ -446,6 +550,18 @@
|
---|
468 | _enableVolumeSettings = true;
|
---|
469 | }
|
---|
470 |
|
---|
471 | +int OptionsDialog::getSubtitleMode(bool subtitles, bool speech_mute) {
|
---|
472 | + if (!subtitles && !speech_mute) // Speech only
|
---|
473 | + return 0;
|
---|
474 | + else if (subtitles && !speech_mute) // Speech and subtitles
|
---|
475 | + return 1;
|
---|
476 | + else if (subtitles && speech_mute) // Subtitles only
|
---|
477 | + return 2;
|
---|
478 | + else
|
---|
479 | + warning("Wrong configuration: Both subtitles and speech are off. Assuming subtitles only");
|
---|
480 | + return 2;
|
---|
481 | +}
|
---|
482 | +
|
---|
483 | void OptionsDialog::handleScreenChanged() {
|
---|
484 | Dialog::handleScreenChanged();
|
---|
485 |
|
---|
486 | @@ -481,6 +597,8 @@
|
---|
487 | tab->addTab("Audio");
|
---|
488 | addAudioControls(tab, "globaloptions_");
|
---|
489 | addVolumeControls(tab, "globaloptions_");
|
---|
490 | + addSubtitleControls(tab, "globaloptions_");
|
---|
491 | +
|
---|
492 | // TODO: cd drive setting
|
---|
493 |
|
---|
494 | //
|
---|
495 | Index: gui/launcher.cpp
|
---|
496 | ===================================================================
|
---|
497 | --- gui/launcher.cpp (revision 22442)
|
---|
498 | +++ gui/launcher.cpp (working copy)
|
---|
499 | @@ -189,7 +189,9 @@
|
---|
500 | _platformPopUp->appendEntry(p->description, p->id);
|
---|
501 | }
|
---|
502 |
|
---|
503 | + //
|
---|
504 | // 2) The 'Path' tab
|
---|
505 | + //
|
---|
506 | tab->addTab("Paths");
|
---|
507 |
|
---|
508 | // These buttons have to be extra wide, or the text will be truncated
|
---|
509 | @@ -230,6 +232,7 @@
|
---|
510 | _globalAudioOverride = new CheckboxWidget(tab, "gameoptions_audioCheckbox", "Override global audio settings", kCmdGlobalAudioOverride, 0);
|
---|
511 |
|
---|
512 | addAudioControls(tab, "gameoptions_");
|
---|
513 | + addSubtitleControls(tab, "gameoptions_");
|
---|
514 |
|
---|
515 | //
|
---|
516 | // 5) The MIDI tab
|
---|
517 | @@ -249,7 +252,6 @@
|
---|
518 |
|
---|
519 | addVolumeControls(tab, "gameoptions_");
|
---|
520 |
|
---|
521 | -
|
---|
522 | // Activate the first tab
|
---|
523 | tab->setActiveTab(0);
|
---|
524 |
|
---|
525 | @@ -271,7 +273,8 @@
|
---|
526 | _globalGraphicsOverride->setState(e);
|
---|
527 |
|
---|
528 | e = ConfMan.hasKey("music_driver", _domain) ||
|
---|
529 | - ConfMan.hasKey("subtitles", _domain);
|
---|
530 | + ConfMan.hasKey("subtitles", _domain) ||
|
---|
531 | + ConfMan.hasKey("talkspeed", _domain);
|
---|
532 | _globalAudioOverride->setState(e);
|
---|
533 |
|
---|
534 | e = ConfMan.hasKey("multi_midi", _domain) ||
|
---|
535 | @@ -346,6 +349,7 @@
|
---|
536 | break;
|
---|
537 | case kCmdGlobalAudioOverride:
|
---|
538 | setAudioSettingsState(data != 0);
|
---|
539 | + setSubtitleSettingsState(data != 0);
|
---|
540 | draw();
|
---|
541 | break;
|
---|
542 | case kCmdGlobalMIDIOverride:
|
---|
543 | @@ -356,7 +360,6 @@
|
---|
544 | setVolumeSettingsState(data != 0);
|
---|
545 | draw();
|
---|
546 | break;
|
---|
547 | -
|
---|
548 | case kCmdChooseSoundFontCmd: {
|
---|
549 | BrowserDialog browser("Select SoundFont", false);
|
---|
550 |
|
---|
551 | Index: gui/theme-config.cpp
|
---|
552 | ===================================================================
|
---|
553 | --- gui/theme-config.cpp (revision 22442)
|
---|
554 | +++ gui/theme-config.cpp (working copy)
|
---|
555 | @@ -50,6 +50,7 @@
|
---|
556 | "def_scummhelpX=5\n"
|
---|
557 | "def_scummhelpW=(w - 2 * 5)\n"
|
---|
558 | "def_midiControlsSpacing=1\n"
|
---|
559 | +"def_vcAudioTabIndent=0\n"
|
---|
560 | "use=XxY\n"
|
---|
561 | "# Scumm Saveload dialog\n"
|
---|
562 | "scummsaveload=8 8 (w - 2 * 8) (h - 16)\n"
|
---|
563 | @@ -85,6 +86,7 @@
|
---|
564 | "def_scummhelpW=370\n"
|
---|
565 | "def_scummhelpX=((w - scummhelpW) / 2)\n"
|
---|
566 | "def_midiControlsSpacing=2\n"
|
---|
567 | +"def_vcAudioTabIndent=10\n"
|
---|
568 | "##### Widgets config\n"
|
---|
569 | "ListWidget.leftPadding=4\n"
|
---|
570 | "ListWidget.rightPadding=0\n"
|
---|
571 | @@ -141,12 +143,14 @@
|
---|
572 | "\n"
|
---|
573 | "# graphics tab\n"
|
---|
574 | "opYoffset=vBorder\n"
|
---|
575 | +"opXoffset=0\n"
|
---|
576 | "useWithPrefix=graphicsControls globaloptions_\n"
|
---|
577 | "\n"
|
---|
578 | "# audio tab\n"
|
---|
579 | "opYoffset=vBorder\n"
|
---|
580 | "useWithPrefix=audioControls globaloptions_\n"
|
---|
581 | "useWithPrefix=volumeControls globaloptions_\n"
|
---|
582 | +"useWithPrefix=subtitleControls globaloptions_\n"
|
---|
583 | "\n"
|
---|
584 | "# MIDI tab\n"
|
---|
585 | "opYoffset=vBorder\n"
|
---|
586 | @@ -205,6 +209,7 @@
|
---|
587 | "\n"
|
---|
588 | "# graphics tab\n"
|
---|
589 | "opYoffset=vBorder\n"
|
---|
590 | +"opXoffset=gox\n"
|
---|
591 | "gameoptions_graphicsCheckbox=gox opYoffset (kFontHeight + 10 + 192) buttonHeight\n"
|
---|
592 | "opYoffset=(opYoffset + buttonHeight)\n"
|
---|
593 | "useWithPrefix=graphicsControls gameoptions_\n"
|
---|
594 | @@ -214,6 +219,7 @@
|
---|
595 | "gameoptions_audioCheckbox=gox opYoffset (kFontHeight + 10 + 180) buttonHeight\n"
|
---|
596 | "opYoffset=(opYoffset + buttonHeight)\n"
|
---|
597 | "useWithPrefix=audioControls gameoptions_\n"
|
---|
598 | +"useWithPrefix=subtitleControls gameoptions_\n"
|
---|
599 | "\n"
|
---|
600 | "# midi tab\n"
|
---|
601 | "opYoffset=vBorder\n"
|
---|
602 | @@ -251,9 +257,8 @@
|
---|
603 | "# hence it is on the end of the list\n"
|
---|
604 | "opYoffset=8\n"
|
---|
605 | "useWithPrefix=volumeControls scummconfig_\n"
|
---|
606 | -"scummconfig_subtitlesCheckbox=15 opYoffset (kFontHeight + 10 + 89) buttonHeight\n"
|
---|
607 | +"useWithPrefix=subtitleControls scummconfig_\n"
|
---|
608 | "opYoffset=(opYoffset + buttonHeight)\n"
|
---|
609 | -"scummconfig_speechCheckbox=prev.x opYoffset (kFontHeight + 10 + 85) buttonHeight\n"
|
---|
610 | "opYoffset=(opYoffset + buttonHeight + 4)\n"
|
---|
611 | "soWidth=(8 + 3 * buttonWidth + 4)\n"
|
---|
612 | "scummconfig_keys=(soWidth - 3 * (buttonWidth + 4) + 6) opYoffset (buttonWidth - 10) buttonHeight\n"
|
---|
613 | @@ -299,7 +304,6 @@
|
---|
614 | "chooser_cancel=(chooserW - 2 * (buttonWidth + 10)) (opHeight - buttonHeight - 8) buttonWidth buttonHeight\n"
|
---|
615 | "chooser_ok=(prev.x2 + 10) prev.y prev.w prev.h\n"
|
---|
616 | "\n"
|
---|
617 | -"\n"
|
---|
618 | "[graphicsControls]\n"
|
---|
619 | "gcx=10\n"
|
---|
620 | "gcw=(parent.w - 2 * 10)\n"
|
---|
621 | @@ -316,24 +320,23 @@
|
---|
622 | "aux=10\n"
|
---|
623 | "auw=(parent.w - 2 * 10)\n"
|
---|
624 | "auMidiPopup=(aux - 5) (opYoffset - 1) (auw + 5) (kLineHeight + 2)\n"
|
---|
625 | -"opYoffset=(opYoffset + kLineHeight + 4)\n"
|
---|
626 | -"auSubtitlesCheckbox=aux opYoffset (kFontHeight + 10 + 102) buttonHeight\n"
|
---|
627 | -"opYoffset=(opYoffset + buttonHeight + 18)\n"
|
---|
628 | +"opYoffset=(opYoffset + buttonHeight + 4)\n"
|
---|
629 | "\n"
|
---|
630 | "[volumeControls]\n"
|
---|
631 | -"vctextw=95\n"
|
---|
632 | -"vcxoff=(vctextw + 15)\n"
|
---|
633 | -"vcMusicText=10 (opYoffset + 2) vctextw kLineHeight\n"
|
---|
634 | +"vctextw=(95 + vcAudioTabIndent)\n"
|
---|
635 | +"vcxoff=(opXoffset + vctextw + 15)\n"
|
---|
636 | +"vcx=(opXoffset + 10)\n"
|
---|
637 | +"vcMusicText=vcx (opYoffset + 2) vctextw kLineHeight\n"
|
---|
638 | "vcMusicText.align=kTextAlignRight\n"
|
---|
639 | "vcMusicSlider=vcxoff opYoffset sliderWidth sliderHeight\n"
|
---|
640 | "vcMusicLabel=(vcxoff + prev.w + 10) (opYoffset + 2) 24 kLineHeight\n"
|
---|
641 | "opYoffset=(opYoffset + sliderHeight + 4)\n"
|
---|
642 | -"vcSfxText=10 (opYoffset + 2) vctextw kLineHeight\n"
|
---|
643 | +"vcSfxText=vcx (opYoffset + 2) vctextw kLineHeight\n"
|
---|
644 | "vcSfxText.align=kTextAlignRight\n"
|
---|
645 | "vcSfxSlider=vcxoff opYoffset sliderWidth sliderHeight\n"
|
---|
646 | "vcSfxLabel=(vcxoff + prev.w + 10) (opYoffset + 2) 24 kLineHeight\n"
|
---|
647 | "opYoffset=(opYoffset + sliderHeight + 4)\n"
|
---|
648 | -"vcSpeechText=10 (opYoffset + 2) vctextw kLineHeight\n"
|
---|
649 | +"vcSpeechText=vcx (opYoffset + 2) vctextw kLineHeight\n"
|
---|
650 | "vcSpeechText.align=kTextAlignRight\n"
|
---|
651 | "vcSpeechSlider=vcxoff opYoffset sliderWidth sliderHeight\n"
|
---|
652 | "vcSpeechLabel=(vcxoff + prev.w + 10) (opYoffset + 2) 24 kLineHeight\n"
|
---|
653 | @@ -351,6 +354,21 @@
|
---|
654 | "mcGSCheckbox=mcx opYoffset (kFontHeight + 10 + 142) buttonHeight\n"
|
---|
655 | "opYoffset=(opYoffset + buttonHeight + midiControlsSpacing)\n"
|
---|
656 | "\n"
|
---|
657 | +"[subtitleControls]\n"
|
---|
658 | +"sbx=(opXoffset + 10)\n"
|
---|
659 | +"sbYoff=(buttonHeight / 8)\n"
|
---|
660 | +"sbOff=((sliderHeight - kLineHeight) / 2 + 2)\n"
|
---|
661 | +"sbtextw=(100 + vcAudioTabIndent)\n"
|
---|
662 | +"opYoffset=(opYoffset + sbYoff)\n"
|
---|
663 | +"subToggleDesc=sbx (opYoffset + sbYoff) sbtextw buttonHeight\n"
|
---|
664 | +"subToggleButton=prev.x2 (opYoffset - sbYoff) (buttonWidth + 54) buttonHeight\n"
|
---|
665 | +"opYoffset=(opYoffset + buttonHeight + 6)\n"
|
---|
666 | +"subSubtitleSpeedDesc=sbx (opYoffset + sbOff) sbtextw kLineHeight\n"
|
---|
667 | +"subSubtitleSpeedDesc.align=kTextAlignRight\n"
|
---|
668 | +"subSubtitleSpeedSlider=prev.x2 opYoffset sliderWidth sliderHeight\n"
|
---|
669 | +"subSubtitleSpeedLabel=(prev.x2 + 10) (opYoffset + sbOff) 24 kLineHeight\n"
|
---|
670 | +"opYoffset=(opYoffset + sliderHeight + 8)\n"
|
---|
671 | +"\n"
|
---|
672 | "[scummmain]\n"
|
---|
673 | "## Main dialog\n"
|
---|
674 | "# note that scummmain size depends on overall height\n"
|
---|
675 | Index: engines/scumm/input.cpp
|
---|
676 | ===================================================================
|
---|
677 | --- engines/scumm/input.cpp (revision 22442)
|
---|
678 | +++ engines/scumm/input.cpp (working copy)
|
---|
679 | @@ -445,6 +445,9 @@
|
---|
680 | // Display the talk speed
|
---|
681 | ValueDisplayDialog dlg("Text speed: ", 0, 9, 9 - _defaultTalkDelay, '+', '-');
|
---|
682 | _defaultTalkDelay = 9 - runDialog(dlg);
|
---|
683 | +
|
---|
684 | + // Save the new talkspeed value to ConfMan
|
---|
685 | + setTalkspeed(9 - _defaultTalkDelay);
|
---|
686 |
|
---|
687 | if (VAR_CHARINC != 0xFF)
|
---|
688 | VAR(VAR_CHARINC) = _defaultTalkDelay;
|
---|
689 | Index: engines/scumm/dialogs.cpp
|
---|
690 | ===================================================================
|
---|
691 | --- engines/scumm/dialogs.cpp (revision 22442)
|
---|
692 | +++ engines/scumm/dialogs.cpp (working copy)
|
---|
693 | @@ -608,7 +608,7 @@
|
---|
694 | #pragma mark -
|
---|
695 |
|
---|
696 | enum {
|
---|
697 | - kOKCmd = 'ok '
|
---|
698 | + kOKCmd = 'ok '
|
---|
699 | };
|
---|
700 |
|
---|
701 | enum {
|
---|
702 | @@ -653,8 +653,8 @@
|
---|
703 | // Some misc options
|
---|
704 | //
|
---|
705 |
|
---|
706 | - _subtitlesCheckbox = new GUI::CheckboxWidget(this, "scummconfig_subtitlesCheckbox", "Show subtitles", 0, 'S');
|
---|
707 | - _speechCheckbox = new GUI::CheckboxWidget(this, "scummconfig_speechCheckbox", "Enable speech", 0, 'E');
|
---|
708 | + // SCUMM has a talkspeed range of 0-9
|
---|
709 | + addSubtitleControls(this, "scummconfig_", 9);
|
---|
710 |
|
---|
711 | //
|
---|
712 | // Add the buttons
|
---|
713 | @@ -683,19 +683,9 @@
|
---|
714 |
|
---|
715 | void ConfigDialog::open() {
|
---|
716 | GUI_OptionsDialog::open();
|
---|
717 | -
|
---|
718 | - // update checkboxes, too
|
---|
719 | - _subtitlesCheckbox->setState(ConfMan.getBool("subtitles", _domain));
|
---|
720 | - _speechCheckbox->setState(!ConfMan.getBool("speech_mute", _domain));
|
---|
721 | }
|
---|
722 |
|
---|
723 | void ConfigDialog::close() {
|
---|
724 | - if (getResult()) {
|
---|
725 | - // Subtitles
|
---|
726 | - ConfMan.setBool("subtitles", _subtitlesCheckbox->getState(), _domain);
|
---|
727 | - ConfMan.setBool("speech_mute", !_speechCheckbox->getState(), _domain);
|
---|
728 | - }
|
---|
729 | -
|
---|
730 | GUI_OptionsDialog::close();
|
---|
731 | }
|
---|
732 |
|
---|
733 | @@ -927,8 +917,9 @@
|
---|
734 | }
|
---|
735 |
|
---|
736 | void ValueDisplayDialog::handleTickle() {
|
---|
737 | - if (getMillis() > _timer)
|
---|
738 | + if (getMillis() > _timer) {
|
---|
739 | close();
|
---|
740 | + }
|
---|
741 | }
|
---|
742 |
|
---|
743 | void ValueDisplayDialog::handleKeyDown(uint16 ascii, int keycode, int modifiers) {
|
---|
744 | Index: engines/scumm/scumm.cpp
|
---|
745 | ===================================================================
|
---|
746 | --- engines/scumm/scumm.cpp (revision 22442)
|
---|
747 | +++ engines/scumm/scumm.cpp (working copy)
|
---|
748 | @@ -499,6 +499,12 @@
|
---|
749 | VAR_SOUNDPARAM3 = 0xFF;
|
---|
750 | VAR_MOUSEPRESENT = 0xFF;
|
---|
751 | VAR_MEMORY_PERFORMANCE = 0xFF;
|
---|
752 | +
|
---|
753 | + if (ConfMan.hasKey("talkspeed")) {
|
---|
754 | + _defaultTalkDelay = 9 - getTalkspeed();
|
---|
755 | + VAR_CHARINC = _defaultTalkDelay;
|
---|
756 | + }
|
---|
757 | +
|
---|
758 | VAR_VIDEO_PERFORMANCE = 0xFF;
|
---|
759 | VAR_ROOM_FLAG = 0xFF;
|
---|
760 | VAR_GAME_LOADED = 0xFF;
|
---|
761 | @@ -1498,7 +1504,6 @@
|
---|
762 | _mixer->setVolumeForSoundType(Audio::Mixer::kMusicSoundType, soundVolumeMusic);
|
---|
763 | _mixer->setVolumeForSoundType(Audio::Mixer::kSpeechSoundType, soundVolumeSpeech);
|
---|
764 |
|
---|
765 | -
|
---|
766 | if (ConfMan.getBool("speech_mute"))
|
---|
767 | _voiceMode = 2;
|
---|
768 | else
|
---|
769 | @@ -1506,10 +1511,33 @@
|
---|
770 |
|
---|
771 | if (VAR_VOICE_MODE != 0xFF)
|
---|
772 | VAR(VAR_VOICE_MODE) = _voiceMode;
|
---|
773 | +
|
---|
774 | + _defaultTalkDelay = 9 - getTalkspeed();
|
---|
775 | + VAR(VAR_CHARINC) = _defaultTalkDelay;
|
---|
776 | }
|
---|
777 |
|
---|
778 | +void ScummEngine::setTalkspeed(int talkspeed) {
|
---|
779 | + /*if (talkspeed != 0)
|
---|
780 | + if (talkspeed == 9)
|
---|
781 | + talkspeed = 255;
|
---|
782 | + else
|
---|
783 | + talkspeed = (int)(talkspeed * 255.0 / 9.0 + 0.5);*/
|
---|
784 | + ConfMan.setInt("talkspeed", (talkspeed * 255 + 9 / 2) / 9);
|
---|
785 | +}
|
---|
786 |
|
---|
787 | +int ScummEngine::getTalkspeed() {
|
---|
788 | + /*int talkspeed = ConfMan.getInt("talkspeed");
|
---|
789 |
|
---|
790 | + if (talkspeed != 0)
|
---|
791 | + if (talkspeed == 255)
|
---|
792 | + talkspeed = 9;
|
---|
793 | + else
|
---|
794 | + talkspeed = (int)(talkspeed * 9.0 / 255.0 + 0.5);
|
---|
795 | + return talkspeed;*/
|
---|
796 | + return (ConfMan.getInt("talkspeed") * 9 + 255 / 2) / 255;
|
---|
797 | +}
|
---|
798 | +
|
---|
799 | +
|
---|
800 | #pragma mark -
|
---|
801 | #pragma mark --- Main loop ---
|
---|
802 | #pragma mark -
|
---|
803 | Index: engines/scumm/dialogs.h
|
---|
804 | ===================================================================
|
---|
805 | --- engines/scumm/dialogs.h (revision 22442)
|
---|
806 | +++ engines/scumm/dialogs.h (working copy)
|
---|
807 | @@ -140,10 +140,6 @@
|
---|
808 | virtual void open();
|
---|
809 | virtual void close();
|
---|
810 | virtual void handleCommand(GUI::CommandSender *sender, uint32 cmd, uint32 data);
|
---|
811 | -
|
---|
812 | -protected:
|
---|
813 | - GUI::CheckboxWidget *_subtitlesCheckbox;
|
---|
814 | - GUI::CheckboxWidget *_speechCheckbox;
|
---|
815 | };
|
---|
816 |
|
---|
817 | /**
|
---|
818 | Index: engines/scumm/scumm.h
|
---|
819 | ===================================================================
|
---|
820 | --- engines/scumm/scumm.h (revision 22442)
|
---|
821 | +++ engines/scumm/scumm.h (working copy)
|
---|
822 | @@ -470,6 +470,8 @@
|
---|
823 | void loadCJKFont();
|
---|
824 | void setupMusic(int midi);
|
---|
825 | void updateSoundSettings();
|
---|
826 | + void setTalkspeed(int talkspeed);
|
---|
827 | + int getTalkspeed();
|
---|
828 |
|
---|
829 | protected:
|
---|
830 | // Scumm main loop & helper functions.
|
---|
831 | Index: engines/scumm/script_v8.cpp
|
---|
832 | ===================================================================
|
---|
833 | --- engines/scumm/script_v8.cpp (revision 22442)
|
---|
834 | +++ engines/scumm/script_v8.cpp (working copy)
|
---|
835 | @@ -420,7 +420,7 @@
|
---|
836 | checkRange(_numVariables - 1, 0, var, "Variable %d out of range(w)");
|
---|
837 |
|
---|
838 | if (var == VAR_CHARINC && ConfMan.hasKey("talkspeed")) {
|
---|
839 | - uint talkspeed = ConfMan.getInt("talkspeed");
|
---|
840 | + uint talkspeed = getTalkspeed();
|
---|
841 | if (talkspeed <= 9)
|
---|
842 | VAR(VAR_CHARINC) = talkspeed;
|
---|
843 | } else
|
---|
844 | Index: engines/scumm/script.cpp
|
---|
845 | ===================================================================
|
---|
846 | --- engines/scumm/script.cpp (revision 22442)
|
---|
847 | +++ engines/scumm/script.cpp (working copy)
|
---|
848 | @@ -617,7 +617,7 @@
|
---|
849 | }
|
---|
850 |
|
---|
851 | if (var == VAR_CHARINC && ConfMan.hasKey("talkspeed")) {
|
---|
852 | - uint talkspeed = ConfMan.getInt("talkspeed");
|
---|
853 | + uint talkspeed = getTalkspeed();
|
---|
854 | if (talkspeed <= 9)
|
---|
855 | VAR(VAR_CHARINC) = talkspeed;
|
---|
856 | } else {
|
---|
857 | Index: engines/queen/queen.cpp
|
---|
858 | ===================================================================
|
---|
859 | --- engines/queen/queen.cpp (revision 22442)
|
---|
860 | +++ engines/queen/queen.cpp (working copy)
|
---|
861 | @@ -186,7 +186,7 @@
|
---|
862 | _music->setVolume(ConfMan.getInt("music_volume"));
|
---|
863 | _sound->musicToggle(!ConfMan.getBool("music_mute"));
|
---|
864 | _sound->sfxToggle(!ConfMan.getBool("sfx_mute"));
|
---|
865 | - _talkSpeed = ConfMan.getInt("talkspeed");
|
---|
866 | + _talkSpeed = (ConfMan.getInt("talkspeed") * (MAX_TEXT_SPEED - MIN_TEXT_SPEED) + 255 / 2) / 255 + MIN_TEXT_SPEED;
|
---|
867 | _sound->speechToggle(!ConfMan.getBool("speech_mute"));
|
---|
868 | _subtitles = ConfMan.getBool("subtitles");
|
---|
869 | checkOptionSettings();
|
---|
870 | @@ -196,7 +196,7 @@
|
---|
871 | ConfMan.setInt("music_volume", _music->volume());
|
---|
872 | ConfMan.setBool("music_mute", !_sound->musicOn());
|
---|
873 | ConfMan.setBool("sfx_mute", !_sound->sfxOn());
|
---|
874 | - ConfMan.setInt("talkspeed", _talkSpeed);
|
---|
875 | + ConfMan.setInt("talkspeed", ((_talkSpeed - MIN_TEXT_SPEED) * 255 + (MAX_TEXT_SPEED - MIN_TEXT_SPEED) / 2) / (MAX_TEXT_SPEED - MIN_TEXT_SPEED));
|
---|
876 | ConfMan.setBool("speech_mute", !_sound->speechOn());
|
---|
877 | ConfMan.setBool("subtitles", _subtitles);
|
---|
878 | ConfMan.flushToDisk();
|
---|
879 | @@ -444,6 +444,7 @@
|
---|
880 |
|
---|
881 | _sound = Sound::giveSound(_mixer, this, _resource->compression());
|
---|
882 | _walk = new Walk(this);
|
---|
883 | + //_talkspeedScale = (MAX_TEXT_SPEED - MIN_TEXT_SPEED) / 255.0;
|
---|
884 |
|
---|
885 | registerDefaultSettings();
|
---|
886 | readOptionSettings();
|
---|
887 | Index: engines/queen/journal.cpp
|
---|
888 | ===================================================================
|
---|
889 | --- engines/queen/journal.cpp (revision 22442)
|
---|
890 | +++ engines/queen/journal.cpp (working copy)
|
---|
891 | @@ -310,7 +310,7 @@
|
---|
892 | enterYesNoPanelMode(zoneNum, TXT_GIVE_UP);
|
---|
893 | break;
|
---|
894 | case ZN_TEXT_SPEED:
|
---|
895 | - val = (x - 136) * QueenEngine::MAX_TEXT_SPEED / (266 - 136);
|
---|
896 | + val = (x - 136) * QueenEngine::MAX_TEXT_SPEED / (266 - 136);
|
---|
897 | _vm->talkSpeed(val);
|
---|
898 | drawConfigPanel();
|
---|
899 | break;
|
---|