mirror of https://github.com/OpenTTD/OpenTTD
(svn r17139) -Change: add the concept of sound sets
parent
35d5a197d6
commit
9ee2a66c86
|
@ -52,6 +52,7 @@ endif
|
||||||
$(Q)cp "$(BIN_DIR)/$(TTD)" "$(TTD_DIR)/"
|
$(Q)cp "$(BIN_DIR)/$(TTD)" "$(TTD_DIR)/"
|
||||||
$(Q)cp "$(BIN_DIR)/data/"*.grf "$(DATA_DIR)/"
|
$(Q)cp "$(BIN_DIR)/data/"*.grf "$(DATA_DIR)/"
|
||||||
$(Q)cp "$(BIN_DIR)/data/"*.obg "$(DATA_DIR)/"
|
$(Q)cp "$(BIN_DIR)/data/"*.obg "$(DATA_DIR)/"
|
||||||
|
$(Q)cp "$(BIN_DIR)/data/"*.obs "$(DATA_DIR)/"
|
||||||
$(Q)cp "$(BIN_DIR)/data/opntitle.dat" "$(DATA_DIR)/"
|
$(Q)cp "$(BIN_DIR)/data/opntitle.dat" "$(DATA_DIR)/"
|
||||||
$(Q)cp "$(BIN_DIR)/lang/"*.lng "$(LANG_DIR)/"
|
$(Q)cp "$(BIN_DIR)/lang/"*.lng "$(LANG_DIR)/"
|
||||||
$(Q)cp "$(ROOT_DIR)/readme.txt" "$(BUNDLE_DIR)/"
|
$(Q)cp "$(ROOT_DIR)/readme.txt" "$(BUNDLE_DIR)/"
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
; $Id$
|
||||||
|
;
|
||||||
|
; This represents the original sounds as on the Transport
|
||||||
|
; Tycoon Deluxe DOS CD.
|
||||||
|
;
|
||||||
|
[metadata]
|
||||||
|
name = original_dos
|
||||||
|
shortname = TTDD
|
||||||
|
version = 0
|
||||||
|
description = Original Transport Tycoon Deluxe DOS edition sounds
|
||||||
|
|
||||||
|
[files]
|
||||||
|
samples = SAMPLE.CAT
|
||||||
|
|
||||||
|
[md5s]
|
||||||
|
SAMPLE.CAT = 422ea3dd074d2859bb51639a6e0e85da
|
||||||
|
|
||||||
|
[origin]
|
||||||
|
default = You can find it on your Transport Tycoon Deluxe CD-ROM.
|
|
@ -0,0 +1,19 @@
|
||||||
|
; $Id$
|
||||||
|
;
|
||||||
|
; This represents the original sounds as on the Transport
|
||||||
|
; Tycoon Deluxe for Windows CD.
|
||||||
|
;
|
||||||
|
[metadata]
|
||||||
|
name = original_windows
|
||||||
|
shortname = TTDW
|
||||||
|
version = 0
|
||||||
|
description = Original Transport Tycoon Deluxe Windows edition sounds
|
||||||
|
|
||||||
|
[files]
|
||||||
|
samples = SAMPLE.CAT
|
||||||
|
|
||||||
|
[md5s]
|
||||||
|
SAMPLE.CAT = 9212e81e72badd4bbe1eaeae66458e10
|
||||||
|
|
||||||
|
[origin]
|
||||||
|
default = You can find it on your Transport Tycoon Deluxe CD-ROM.
|
|
@ -0,0 +1,56 @@
|
||||||
|
;
|
||||||
|
; Example file for the OpenTTD Base Sound replacement sets.
|
||||||
|
; This file consists of basically two different parts:
|
||||||
|
; * metadata
|
||||||
|
; * information about the files
|
||||||
|
;
|
||||||
|
; Metadata contains information about the name and version
|
||||||
|
; of the sound set.
|
||||||
|
;
|
||||||
|
; == Getting started ==
|
||||||
|
; - you can't add comments after values
|
||||||
|
; - you have to fill the MD5 checksum for each file
|
||||||
|
; - you may not miss any of the metadata or files items
|
||||||
|
; - `openttd -h` lists all sound replacements sets it found to be correct
|
||||||
|
; - `openttd -d grf=1` shows warnings/errors when parsing an .obs file
|
||||||
|
; - `openttd -S <name>` starts OpenTTD with the given set (case sensitive)
|
||||||
|
; - adding `soundsset = <name>` to the misc section of openttd.cfg makes
|
||||||
|
; OpenTTD start with that sound set by default
|
||||||
|
; - there is a command line tool for all platforms called md5sum that can
|
||||||
|
; create the MD5 checksum you need.
|
||||||
|
; - all files specified in this file are search relatively to the path where
|
||||||
|
; this file is found, i.e. if the sound files are in a subdir you have
|
||||||
|
; to add that subdir to the names in this file to! It will NOT search for
|
||||||
|
; a file named like specified in here.
|
||||||
|
|
||||||
|
[metadata]
|
||||||
|
; the name of the pack, preferably less than 16 characters
|
||||||
|
name = example
|
||||||
|
; the short name (4 characters), used to identify this set
|
||||||
|
shortname = XMPL
|
||||||
|
; the version of this sound set (read as single integer)
|
||||||
|
version = 0
|
||||||
|
; a fairly short description of the set
|
||||||
|
description = foo
|
||||||
|
|
||||||
|
; The files section lists the files that replace sprites.
|
||||||
|
; The file names are case sensitive.
|
||||||
|
[files]
|
||||||
|
; file with the samples
|
||||||
|
samples = SAMPLES.CAT
|
||||||
|
|
||||||
|
; The md5s section lists the MD5 checksum for the files that replace them.
|
||||||
|
; Note that the list of files is case sensitive. Each file listed in the
|
||||||
|
; files section must be listed here with it's MD5 checksum, otherwise you
|
||||||
|
; will get a lot of warnings when starting OpenTTD.
|
||||||
|
[md5s]
|
||||||
|
SAMPLES.CAT = 422ea3dd074d2859bb51639a6e0e85da
|
||||||
|
|
||||||
|
; The origin section provides the possibility to put and extra line into
|
||||||
|
; the warning that a file is missing/corrupt. This can be used to tell
|
||||||
|
; them where to find it. It works on the filename specified in the
|
||||||
|
; files section and if that is not found it will fall back to the default
|
||||||
|
; as shown below here.
|
||||||
|
[origin]
|
||||||
|
default = You can find it on your Transport Tycoon Deluxe CD-ROM.
|
||||||
|
SAMPLES.CAT = You can find it also on your Transport Tycoon Deluxe CD-ROM.
|
|
@ -111,6 +111,7 @@ Section "!OpenTTD" Section1
|
||||||
SetOutPath "$INSTDIR\data\"
|
SetOutPath "$INSTDIR\data\"
|
||||||
File ${PATH_ROOT}bin\data\*.grf
|
File ${PATH_ROOT}bin\data\*.grf
|
||||||
File ${PATH_ROOT}bin\data\*.obg
|
File ${PATH_ROOT}bin\data\*.obg
|
||||||
|
File ${PATH_ROOT}bin\data\*.obs
|
||||||
File ${PATH_ROOT}bin\data\opntitle.dat
|
File ${PATH_ROOT}bin\data\opntitle.dat
|
||||||
|
|
||||||
; Copy the scripts
|
; Copy the scripts
|
||||||
|
@ -134,6 +135,7 @@ Section "!OpenTTD" Section1
|
||||||
Delete "$INSTDIR\*.lng"
|
Delete "$INSTDIR\*.lng"
|
||||||
Delete "$INSTDIR\*.grf"
|
Delete "$INSTDIR\*.grf"
|
||||||
Delete "$INSTDIR\*.obg"
|
Delete "$INSTDIR\*.obg"
|
||||||
|
Delete "$INSTDIR\*.obs"
|
||||||
Delete "$INSTDIR\sample.cat"
|
Delete "$INSTDIR\sample.cat"
|
||||||
Delete "$INSTDIR\ttd.exe"
|
Delete "$INSTDIR\ttd.exe"
|
||||||
|
|
||||||
|
@ -272,6 +274,8 @@ Section "Uninstall"
|
||||||
Delete "$INSTDIR\data\orig_win.obg"
|
Delete "$INSTDIR\data\orig_win.obg"
|
||||||
Delete "$INSTDIR\data\orig_dos.obg"
|
Delete "$INSTDIR\data\orig_dos.obg"
|
||||||
Delete "$INSTDIR\data\orig_dos_de.obg"
|
Delete "$INSTDIR\data\orig_dos_de.obg"
|
||||||
|
Delete "$INSTDIR\data\orig_win.obs"
|
||||||
|
Delete "$INSTDIR\data\orig_dos.obs"
|
||||||
|
|
||||||
Delete "$INSTDIR\data\sample.cat"
|
Delete "$INSTDIR\data\sample.cat"
|
||||||
; Windows Data files
|
; Windows Data files
|
||||||
|
|
|
@ -2251,10 +2251,6 @@
|
||||||
RelativePath=".\..\src\table\engines.h"
|
RelativePath=".\..\src\table\engines.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
|
||||||
RelativePath=".\..\src\table\files.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
<File
|
||||||
RelativePath=".\..\src\table\genland.h"
|
RelativePath=".\..\src\table\genland.h"
|
||||||
>
|
>
|
||||||
|
|
|
@ -2248,10 +2248,6 @@
|
||||||
RelativePath=".\..\src\table\engines.h"
|
RelativePath=".\..\src\table\engines.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
|
||||||
RelativePath=".\..\src\table\files.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
<File
|
||||||
RelativePath=".\..\src\table\genland.h"
|
RelativePath=".\..\src\table\genland.h"
|
||||||
>
|
>
|
||||||
|
|
|
@ -511,7 +511,6 @@ table/clear_land.h
|
||||||
table/control_codes.h
|
table/control_codes.h
|
||||||
table/elrail_data.h
|
table/elrail_data.h
|
||||||
table/engines.h
|
table/engines.h
|
||||||
table/files.h
|
|
||||||
table/genland.h
|
table/genland.h
|
||||||
table/industry_land.h
|
table/industry_land.h
|
||||||
table/landscape_sprite.h
|
table/landscape_sprite.h
|
||||||
|
|
|
@ -75,7 +75,7 @@ struct BaseSet {
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Base for all base media (graphics, sound)
|
* Base for all base media (graphics, sounds)
|
||||||
* @tparam Tbase_set the real set we're going to be
|
* @tparam Tbase_set the real set we're going to be
|
||||||
*/
|
*/
|
||||||
template <class Tbase_set>
|
template <class Tbase_set>
|
||||||
|
@ -194,4 +194,21 @@ public:
|
||||||
static void DeterminePalette();
|
static void DeterminePalette();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** All data of a sounds set. */
|
||||||
|
struct SoundsSet : BaseSet<SoundsSet, 1> {
|
||||||
|
/**
|
||||||
|
* Is this set useable? Are enough files found to think it exists.
|
||||||
|
* @return true if it's useable.
|
||||||
|
*/
|
||||||
|
bool IsUseable() const
|
||||||
|
{
|
||||||
|
return this->found_files > 0;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/** All data/functions related with replacing the base sounds */
|
||||||
|
class BaseSounds : public BaseMedia<SoundsSet> {
|
||||||
|
public:
|
||||||
|
};
|
||||||
|
|
||||||
#endif /* BASE_MEDIA_BASE_H */
|
#endif /* BASE_MEDIA_BASE_H */
|
||||||
|
|
|
@ -30,7 +30,6 @@ const byte *_palette_remap = NULL;
|
||||||
/** Palette map to go from the _use_palette to the !_use_palette */
|
/** Palette map to go from the _use_palette to the !_use_palette */
|
||||||
const byte *_palette_reverse_remap = NULL;
|
const byte *_palette_reverse_remap = NULL;
|
||||||
|
|
||||||
#include "table/files.h"
|
|
||||||
#include "table/landscape_sprite.h"
|
#include "table/landscape_sprite.h"
|
||||||
|
|
||||||
static const SpriteID * const _landscape_spriteindexes[] = {
|
static const SpriteID * const _landscape_spriteindexes[] = {
|
||||||
|
@ -94,6 +93,8 @@ static void LoadGrfIndexed(const char *filename, const SpriteID *index_tbl, int
|
||||||
*/
|
*/
|
||||||
void CheckExternalFiles()
|
void CheckExternalFiles()
|
||||||
{
|
{
|
||||||
|
if (BaseGraphics::GetUsedSet() == NULL || BaseSounds::GetUsedSet() == NULL) return;
|
||||||
|
|
||||||
BaseGraphics::DeterminePalette();
|
BaseGraphics::DeterminePalette();
|
||||||
const GraphicsSet *used_set = BaseGraphics::GetUsedSet();
|
const GraphicsSet *used_set = BaseGraphics::GetUsedSet();
|
||||||
|
|
||||||
|
@ -111,13 +112,9 @@ void CheckExternalFiles()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool sound = false;
|
const SoundsSet *sounds_set = BaseSounds::GetUsedSet();
|
||||||
for (uint i = 0; !sound && i < lengthof(_sound_sets); i++) {
|
if (!sounds_set->files->CheckMD5()) {
|
||||||
sound = _sound_sets[i].CheckMD5();
|
add_pos += seprintf(add_pos, last, "Your '%s' file is corrupted or missing! %s\n", sounds_set->files->filename, sounds_set->files->missing_warning);
|
||||||
}
|
|
||||||
|
|
||||||
if (!sound) {
|
|
||||||
add_pos += seprintf(add_pos, last, "Your 'sample.cat' file is corrupted or missing! You can find 'sample.cat' on your Transport Tycoon Deluxe CD-ROM.\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (add_pos != error_msg) ShowInfoF("%s", error_msg);
|
if (add_pos != error_msg) ShowInfoF("%s", error_msg);
|
||||||
|
|
|
@ -917,6 +917,10 @@ STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Select t
|
||||||
STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} missing/corrupted file{P "" s}
|
STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} missing/corrupted file{P "" s}
|
||||||
STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Additional information about the base graphics set
|
STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Additional information about the base graphics set
|
||||||
|
|
||||||
|
STR_GAME_OPTIONS_BASE_SFX :{BLACK}Base sounds set
|
||||||
|
STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Select the base sounds set to use
|
||||||
|
STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}Additional information about the base sounds set
|
||||||
|
|
||||||
STR_ERROR_FULLSCREEN_FAILED :{WHITE}Fullscreen mode failed
|
STR_ERROR_FULLSCREEN_FAILED :{WHITE}Fullscreen mode failed
|
||||||
|
|
||||||
# Custom currency window
|
# Custom currency window
|
||||||
|
@ -1770,6 +1774,7 @@ STR_CONTENT_TYPE_AI :AI
|
||||||
STR_CONTENT_TYPE_AI_LIBRARY :AI library
|
STR_CONTENT_TYPE_AI_LIBRARY :AI library
|
||||||
STR_CONTENT_TYPE_SCENARIO :Scenario
|
STR_CONTENT_TYPE_SCENARIO :Scenario
|
||||||
STR_CONTENT_TYPE_HEIGHTMAP :Heightmap
|
STR_CONTENT_TYPE_HEIGHTMAP :Heightmap
|
||||||
|
STR_CONTENT_TYPE_BASE_SOUNDS :Base sounds
|
||||||
|
|
||||||
# Content downloading progress window
|
# Content downloading progress window
|
||||||
STR_CONTENT_DOWNLOAD_TITLE :{WHITE}Downloading content...
|
STR_CONTENT_DOWNLOAD_TITLE :{WHITE}Downloading content...
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
extern TileIndex _cur_tileloop_tile;
|
extern TileIndex _cur_tileloop_tile;
|
||||||
extern void MakeNewgameSettingsLive();
|
extern void MakeNewgameSettingsLive();
|
||||||
|
|
||||||
|
void InitializeSound();
|
||||||
void InitializeVehicles();
|
void InitializeVehicles();
|
||||||
void InitializeDepots();
|
void InitializeDepots();
|
||||||
void InitializeEngineRenews();
|
void InitializeEngineRenews();
|
||||||
|
@ -71,6 +72,8 @@ void InitializeGame(uint size_x, uint size_y, bool reset_date, bool reset_settin
|
||||||
_thd.redsq = INVALID_TILE;
|
_thd.redsq = INVALID_TILE;
|
||||||
if (reset_settings) MakeNewgameSettingsLive();
|
if (reset_settings) MakeNewgameSettingsLive();
|
||||||
|
|
||||||
|
InitializeSound();
|
||||||
|
|
||||||
if (reset_date) {
|
if (reset_date) {
|
||||||
SetDate(ConvertYMDToDate(_settings_game.game_creation.starting_year, 0, 1));
|
SetDate(ConvertYMDToDate(_settings_game.game_creation.starting_year, 0, 1));
|
||||||
InitializeOldNames();
|
InitializeOldNames();
|
||||||
|
|
|
@ -23,6 +23,7 @@ enum ContentType {
|
||||||
CONTENT_TYPE_AI_LIBRARY = 4, ///< The content consists of an AI library
|
CONTENT_TYPE_AI_LIBRARY = 4, ///< The content consists of an AI library
|
||||||
CONTENT_TYPE_SCENARIO = 5, ///< The content consists of a scenario
|
CONTENT_TYPE_SCENARIO = 5, ///< The content consists of a scenario
|
||||||
CONTENT_TYPE_HEIGHTMAP = 6, ///< The content consists of a heightmap
|
CONTENT_TYPE_HEIGHTMAP = 6, ///< The content consists of a heightmap
|
||||||
|
CONTENT_TYPE_BASE_SOUNDS = 7, ///< The content consists of base sounds
|
||||||
CONTENT_TYPE_END, ///< Helper to mark the end of the types
|
CONTENT_TYPE_END, ///< Helper to mark the end of the types
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -82,6 +82,10 @@ DEF_CONTENT_RECEIVE_COMMAND(Client, PACKET_CONTENT_SERVER_INFO)
|
||||||
proc = BaseGraphics::HasSet;
|
proc = BaseGraphics::HasSet;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case CONTENT_TYPE_BASE_SOUNDS:
|
||||||
|
proc = BaseSounds::HasSet;
|
||||||
|
break;
|
||||||
|
|
||||||
case CONTENT_TYPE_AI:
|
case CONTENT_TYPE_AI:
|
||||||
case CONTENT_TYPE_AI_LIBRARY:
|
case CONTENT_TYPE_AI_LIBRARY:
|
||||||
proc = AI::HasAI; break;
|
proc = AI::HasAI; break;
|
||||||
|
@ -149,6 +153,7 @@ void ClientNetworkContentSocketHandler::RequestContentList(ContentType type)
|
||||||
{
|
{
|
||||||
if (type == CONTENT_TYPE_END) {
|
if (type == CONTENT_TYPE_END) {
|
||||||
this->RequestContentList(CONTENT_TYPE_BASE_GRAPHICS);
|
this->RequestContentList(CONTENT_TYPE_BASE_GRAPHICS);
|
||||||
|
this->RequestContentList(CONTENT_TYPE_BASE_SOUNDS);
|
||||||
this->RequestContentList(CONTENT_TYPE_SCENARIO);
|
this->RequestContentList(CONTENT_TYPE_SCENARIO);
|
||||||
this->RequestContentList(CONTENT_TYPE_HEIGHTMAP);
|
this->RequestContentList(CONTENT_TYPE_HEIGHTMAP);
|
||||||
this->RequestContentList(CONTENT_TYPE_AI);
|
this->RequestContentList(CONTENT_TYPE_AI);
|
||||||
|
@ -290,6 +295,7 @@ static char *GetFullFilename(const ContentInfo *ci, bool compressed)
|
||||||
switch (ci->type) {
|
switch (ci->type) {
|
||||||
default: return NULL;
|
default: return NULL;
|
||||||
case CONTENT_TYPE_BASE_GRAPHICS: dir = DATA_DIR; break;
|
case CONTENT_TYPE_BASE_GRAPHICS: dir = DATA_DIR; break;
|
||||||
|
case CONTENT_TYPE_BASE_SOUNDS: dir = DATA_DIR; break;
|
||||||
case CONTENT_TYPE_NEWGRF: dir = DATA_DIR; break;
|
case CONTENT_TYPE_NEWGRF: dir = DATA_DIR; break;
|
||||||
case CONTENT_TYPE_AI: dir = AI_DIR; break;
|
case CONTENT_TYPE_AI: dir = AI_DIR; break;
|
||||||
case CONTENT_TYPE_AI_LIBRARY: dir = AI_LIBRARY_DIR; break;
|
case CONTENT_TYPE_AI_LIBRARY: dir = AI_LIBRARY_DIR; break;
|
||||||
|
|
|
@ -95,6 +95,10 @@ public:
|
||||||
BaseGraphics::FindSets();
|
BaseGraphics::FindSets();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case CONTENT_TYPE_BASE_SOUNDS:
|
||||||
|
BaseSounds::FindSets();
|
||||||
|
break;
|
||||||
|
|
||||||
case CONTENT_TYPE_NEWGRF:
|
case CONTENT_TYPE_NEWGRF:
|
||||||
ScanNewGRFFiles();
|
ScanNewGRFFiles();
|
||||||
/* Yes... these are the NewGRF windows */
|
/* Yes... these are the NewGRF windows */
|
||||||
|
|
|
@ -177,6 +177,7 @@ static void ShowHelp()
|
||||||
" Default value (2) lets OpenTTD use the palette\n"
|
" Default value (2) lets OpenTTD use the palette\n"
|
||||||
" specified in graphics set file (see below)\n"
|
" specified in graphics set file (see below)\n"
|
||||||
" -I graphics_set = Force the graphics set (see below)\n"
|
" -I graphics_set = Force the graphics set (see below)\n"
|
||||||
|
" -S sounds_set = Force the sounds set (see below)\n"
|
||||||
" -c config_file = Use 'config_file' instead of 'openttd.cfg'\n"
|
" -c config_file = Use 'config_file' instead of 'openttd.cfg'\n"
|
||||||
" -x = Do not automatically save to config file on exit\n"
|
" -x = Do not automatically save to config file on exit\n"
|
||||||
"\n",
|
"\n",
|
||||||
|
@ -186,6 +187,9 @@ static void ShowHelp()
|
||||||
/* List the graphics packs */
|
/* List the graphics packs */
|
||||||
p = BaseGraphics::GetSetsList(p, lastof(buf));
|
p = BaseGraphics::GetSetsList(p, lastof(buf));
|
||||||
|
|
||||||
|
/* List the sounds packs */
|
||||||
|
p = BaseSounds::GetSetsList(p, lastof(buf));
|
||||||
|
|
||||||
/* List the drivers */
|
/* List the drivers */
|
||||||
p = VideoDriverFactoryBase::GetDriversInfo(p, lastof(buf));
|
p = VideoDriverFactoryBase::GetDriversInfo(p, lastof(buf));
|
||||||
|
|
||||||
|
@ -401,6 +405,7 @@ int ttd_main(int argc, char *argv[])
|
||||||
char *videodriver = NULL;
|
char *videodriver = NULL;
|
||||||
char *blitter = NULL;
|
char *blitter = NULL;
|
||||||
char *graphics_set = NULL;
|
char *graphics_set = NULL;
|
||||||
|
char *sounds_set = NULL;
|
||||||
Dimension resolution = {0, 0};
|
Dimension resolution = {0, 0};
|
||||||
Year startyear = INVALID_YEAR;
|
Year startyear = INVALID_YEAR;
|
||||||
uint generation_seed = GENERATE_NEW_SEED;
|
uint generation_seed = GENERATE_NEW_SEED;
|
||||||
|
@ -426,7 +431,7 @@ int ttd_main(int argc, char *argv[])
|
||||||
* a letter means: it accepts that param (e.g.: -h)
|
* a letter means: it accepts that param (e.g.: -h)
|
||||||
* a ':' behind it means: it need a param (e.g.: -m<driver>)
|
* a ':' behind it means: it need a param (e.g.: -m<driver>)
|
||||||
* a '::' behind it means: it can optional have a param (e.g.: -d<debug>) */
|
* a '::' behind it means: it can optional have a param (e.g.: -d<debug>) */
|
||||||
optformat = "m:s:v:b:hD::n::ei::I:t:d::r:g::G:c:xl:p:P:"
|
optformat = "m:s:v:b:hD::n::ei::I:S:t:d::r:g::G:c:xl:p:P:"
|
||||||
#if !defined(__MORPHOS__) && !defined(__AMIGA__) && !defined(WIN32)
|
#if !defined(__MORPHOS__) && !defined(__AMIGA__) && !defined(WIN32)
|
||||||
"f"
|
"f"
|
||||||
#endif
|
#endif
|
||||||
|
@ -437,6 +442,7 @@ int ttd_main(int argc, char *argv[])
|
||||||
while ((i = MyGetOpt(&mgo)) != -1) {
|
while ((i = MyGetOpt(&mgo)) != -1) {
|
||||||
switch (i) {
|
switch (i) {
|
||||||
case 'I': free(graphics_set); graphics_set = strdup(mgo.opt); break;
|
case 'I': free(graphics_set); graphics_set = strdup(mgo.opt); break;
|
||||||
|
case 'S': free(sounds_set); sounds_set = strdup(mgo.opt); break;
|
||||||
case 'm': free(musicdriver); musicdriver = strdup(mgo.opt); break;
|
case 'm': free(musicdriver); musicdriver = strdup(mgo.opt); break;
|
||||||
case 's': free(sounddriver); sounddriver = strdup(mgo.opt); break;
|
case 's': free(sounddriver); sounddriver = strdup(mgo.opt); break;
|
||||||
case 'v': free(videodriver); videodriver = strdup(mgo.opt); break;
|
case 'v': free(videodriver); videodriver = strdup(mgo.opt); break;
|
||||||
|
@ -526,6 +532,7 @@ int ttd_main(int argc, char *argv[])
|
||||||
* the debug console as that hasn't been configured yet. */
|
* the debug console as that hasn't been configured yet. */
|
||||||
DeterminePaths(argv[0]);
|
DeterminePaths(argv[0]);
|
||||||
BaseGraphics::FindSets();
|
BaseGraphics::FindSets();
|
||||||
|
BaseSounds::FindSets();
|
||||||
ShowHelp();
|
ShowHelp();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -538,6 +545,7 @@ int ttd_main(int argc, char *argv[])
|
||||||
|
|
||||||
DeterminePaths(argv[0]);
|
DeterminePaths(argv[0]);
|
||||||
BaseGraphics::FindSets();
|
BaseGraphics::FindSets();
|
||||||
|
BaseSounds::FindSets();
|
||||||
|
|
||||||
#if defined(UNIX) && !defined(__MORPHOS__)
|
#if defined(UNIX) && !defined(__MORPHOS__)
|
||||||
/* We must fork here, or we'll end up without some resources we need (like sockets) */
|
/* We must fork here, or we'll end up without some resources we need (like sockets) */
|
||||||
|
@ -584,16 +592,23 @@ int ttd_main(int argc, char *argv[])
|
||||||
/* initialize all variables that are allocated dynamically */
|
/* initialize all variables that are allocated dynamically */
|
||||||
InitializeDynamicVariables();
|
InitializeDynamicVariables();
|
||||||
|
|
||||||
/* Sample catalogue */
|
|
||||||
DEBUG(misc, 1, "Loading sound effects...");
|
|
||||||
SoundInitialize("sample.cat");
|
|
||||||
|
|
||||||
/* Initialize FreeType */
|
/* Initialize FreeType */
|
||||||
InitFreeType();
|
InitFreeType();
|
||||||
|
|
||||||
/* This must be done early, since functions use the InvalidateWindow* calls */
|
/* This must be done early, since functions use the InvalidateWindow* calls */
|
||||||
InitWindowSystem();
|
InitWindowSystem();
|
||||||
|
|
||||||
|
/* Look for the sounds before the graphics. Otherwise none would be set and
|
||||||
|
* the first initialisation of the video happens on the wrong data. Now it
|
||||||
|
* can do the first initialisation right. */
|
||||||
|
if (sounds_set == NULL && BaseSounds::ini_set != NULL) sounds_set = strdup(BaseSounds::ini_set);
|
||||||
|
if (!BaseSounds::SetSet(sounds_set)) {
|
||||||
|
StrEmpty(sounds_set) ?
|
||||||
|
usererror("Failed to find a sounds set. Please acquire a sounds set for OpenTTD.") :
|
||||||
|
usererror("Failed to select requested sounds set '%s'", sounds_set);
|
||||||
|
}
|
||||||
|
free(sounds_set);
|
||||||
|
|
||||||
if (graphics_set == NULL && BaseGraphics::ini_set != NULL) graphics_set = strdup(BaseGraphics::ini_set);
|
if (graphics_set == NULL && BaseGraphics::ini_set != NULL) graphics_set = strdup(BaseGraphics::ini_set);
|
||||||
if (!BaseGraphics::SetSet(graphics_set)) {
|
if (!BaseGraphics::SetSet(graphics_set)) {
|
||||||
StrEmpty(graphics_set) ?
|
StrEmpty(graphics_set) ?
|
||||||
|
@ -729,6 +744,7 @@ int ttd_main(int argc, char *argv[])
|
||||||
ShutdownGame();
|
ShutdownGame();
|
||||||
|
|
||||||
free(const_cast<char *>(BaseGraphics::ini_set));
|
free(const_cast<char *>(BaseGraphics::ini_set));
|
||||||
|
free(const_cast<char *>(BaseSounds::ini_set));
|
||||||
free(_ini_musicdriver);
|
free(_ini_musicdriver);
|
||||||
free(_ini_sounddriver);
|
free(_ini_sounddriver);
|
||||||
free(_ini_videodriver);
|
free(_ini_videodriver);
|
||||||
|
|
|
@ -123,6 +123,9 @@ enum GameOptionsWidgets {
|
||||||
GOW_BASE_GRF_DROPDOWN, ///< Use to select a base GRF
|
GOW_BASE_GRF_DROPDOWN, ///< Use to select a base GRF
|
||||||
GOW_BASE_GRF_STATUS, ///< Info about missing files etc.
|
GOW_BASE_GRF_STATUS, ///< Info about missing files etc.
|
||||||
GOW_BASE_GRF_DESCRIPTION,///< Description of selected base GRF
|
GOW_BASE_GRF_DESCRIPTION,///< Description of selected base GRF
|
||||||
|
GOW_BASE_SFX_FRAME, ///< Base SFX selection frame
|
||||||
|
GOW_BASE_SFX_DROPDOWN, ///< Use to select a base SFX
|
||||||
|
GOW_BASE_SFX_DESCRIPTION,///< Description of selected base SFX
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -151,17 +154,18 @@ static void ShowTownnameDropdown(Window *w, int sel)
|
||||||
|
|
||||||
static void ShowCustCurrency();
|
static void ShowCustCurrency();
|
||||||
|
|
||||||
static void ShowGraphicsSetMenu(Window *w)
|
template <class T>
|
||||||
|
static void ShowSetMenu(Window *w, int widget)
|
||||||
{
|
{
|
||||||
int n = BaseGraphics::GetNumSets();
|
int n = T::GetNumSets();
|
||||||
int current = BaseGraphics::GetIndexOfUsedSet();
|
int current = T::GetIndexOfUsedSet();
|
||||||
|
|
||||||
DropDownList *list = new DropDownList();
|
DropDownList *list = new DropDownList();
|
||||||
for (int i = 0; i < n; i++) {
|
for (int i = 0; i < n; i++) {
|
||||||
list->push_back(new DropDownListCharStringItem(BaseGraphics::GetSet(i)->name, i, (_game_mode == GM_MENU) ? false : (current != i)));
|
list->push_back(new DropDownListCharStringItem(T::GetSet(i)->name, i, (_game_mode == GM_MENU) ? false : (current != i)));
|
||||||
}
|
}
|
||||||
|
|
||||||
ShowDropDownList(w, list, current, GOW_BASE_GRF_DROPDOWN);
|
ShowDropDownList(w, list, current, widget);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct GameOptionsWindow : Window {
|
struct GameOptionsWindow : Window {
|
||||||
|
@ -196,6 +200,7 @@ struct GameOptionsWindow : Window {
|
||||||
case GOW_SCREENSHOT_DROPDOWN: SetDParam(0, SPECSTR_SCREENSHOT_START + _cur_screenshot_format); break;
|
case GOW_SCREENSHOT_DROPDOWN: SetDParam(0, SPECSTR_SCREENSHOT_START + _cur_screenshot_format); break;
|
||||||
case GOW_BASE_GRF_DROPDOWN: SetDParamStr(0, BaseGraphics::GetUsedSet()->name); break;
|
case GOW_BASE_GRF_DROPDOWN: SetDParamStr(0, BaseGraphics::GetUsedSet()->name); break;
|
||||||
case GOW_BASE_GRF_STATUS: SetDParam(0, BaseGraphics::GetUsedSet()->GetNumMissing()); break;
|
case GOW_BASE_GRF_STATUS: SetDParam(0, BaseGraphics::GetUsedSet()->GetNumMissing()); break;
|
||||||
|
case GOW_BASE_SFX_DROPDOWN: SetDParamStr(0, BaseSounds::GetUsedSet()->name); break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -206,20 +211,37 @@ struct GameOptionsWindow : Window {
|
||||||
|
|
||||||
virtual void DrawWidget(const Rect &r, int widget) const
|
virtual void DrawWidget(const Rect &r, int widget) const
|
||||||
{
|
{
|
||||||
if (widget != GOW_BASE_GRF_DESCRIPTION) return;
|
switch (widget) {
|
||||||
|
case GOW_BASE_GRF_DESCRIPTION:
|
||||||
|
SetDParamStr(0, BaseGraphics::GetUsedSet()->description);
|
||||||
|
DrawStringMultiLine(r.left, r.right, r.top, UINT16_MAX, STR_BLACK_RAW_STRING);
|
||||||
|
break;
|
||||||
|
|
||||||
SetDParamStr(0, BaseGraphics::GetUsedSet()->description);
|
case GOW_BASE_SFX_DESCRIPTION:
|
||||||
DrawStringMultiLine(r.left, r.right, r.top, UINT16_MAX, STR_BLACK_RAW_STRING);
|
SetDParamStr(0, BaseSounds::GetUsedSet()->description);
|
||||||
|
DrawStringMultiLine(r.left, r.right, r.top, UINT16_MAX, STR_BLACK_RAW_STRING);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *resize)
|
virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *resize)
|
||||||
{
|
{
|
||||||
if (widget != GOW_BASE_GRF_DESCRIPTION) return;
|
switch (widget) {
|
||||||
|
case GOW_BASE_GRF_DESCRIPTION:
|
||||||
|
/* Find the biggest description for the default size. */
|
||||||
|
for (int i = 0; i < BaseGraphics::GetNumSets(); i++) {
|
||||||
|
SetDParamStr(0, BaseGraphics::GetSet(i)->description);
|
||||||
|
size->height = max(size->height, (uint)GetStringHeight(STR_BLACK_RAW_STRING, size->width));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
/* Find the biggest description for the default size. */
|
case GOW_BASE_SFX_DESCRIPTION:
|
||||||
for (int i = 0; i < BaseGraphics::GetNumSets(); i++) {
|
/* Find the biggest description for the default size. */
|
||||||
SetDParamStr(0, BaseGraphics::GetSet(i)->description);
|
for (int i = 0; i < BaseSounds::GetNumSets(); i++) {
|
||||||
size->height = max(size->height, (uint)GetStringHeight(STR_BLACK_RAW_STRING, size->width));
|
SetDParamStr(0, BaseSounds::GetSet(i)->description);
|
||||||
|
size->height = max(size->height, (uint)GetStringHeight(STR_BLACK_RAW_STRING, size->width));
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -288,8 +310,33 @@ struct GameOptionsWindow : Window {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GOW_BASE_GRF_DROPDOWN:
|
case GOW_BASE_GRF_DROPDOWN:
|
||||||
ShowGraphicsSetMenu(this);
|
ShowSetMenu<BaseGraphics>(this, GOW_BASE_GRF_DROPDOWN);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case GOW_BASE_SFX_DROPDOWN:
|
||||||
|
ShowSetMenu<BaseSounds>(this, GOW_BASE_SFX_DROPDOWN);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the base media set.
|
||||||
|
* @param index the index of the media set
|
||||||
|
* @tparam T class of media set
|
||||||
|
*/
|
||||||
|
template <class T>
|
||||||
|
void SetMediaSet(int index)
|
||||||
|
{
|
||||||
|
if (_game_mode == GM_MENU) {
|
||||||
|
const char *name = T::GetSet(index)->name;
|
||||||
|
|
||||||
|
free(const_cast<char *>(T::ini_set));
|
||||||
|
T::ini_set = strdup(name);
|
||||||
|
|
||||||
|
T::SetSet(name);
|
||||||
|
this->reload = true;
|
||||||
|
this->SetDirty();
|
||||||
|
this->OnInvalidateData(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -347,17 +394,11 @@ struct GameOptionsWindow : Window {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GOW_BASE_GRF_DROPDOWN:
|
case GOW_BASE_GRF_DROPDOWN:
|
||||||
if (_game_mode == GM_MENU) {
|
this->SetMediaSet<BaseGraphics>(index);
|
||||||
const char *name = BaseGraphics::GetSet(index)->name;
|
break;
|
||||||
|
|
||||||
free(const_cast<char *>(BaseGraphics::ini_set));
|
case GOW_BASE_SFX_DROPDOWN:
|
||||||
BaseGraphics::ini_set = strdup(name);
|
this->SetMediaSet<BaseSounds>(index);
|
||||||
|
|
||||||
BaseGraphics::SetSet(name);
|
|
||||||
this->reload = true;
|
|
||||||
this->SetDirty();
|
|
||||||
this->OnInvalidateData(0);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -421,6 +462,14 @@ static const NWidgetPart _nested_game_options_widgets[] = {
|
||||||
EndContainer(),
|
EndContainer(),
|
||||||
NWidget(WWT_TEXT, COLOUR_GREY, GOW_BASE_GRF_DESCRIPTION), SetMinimalSize(330, 0), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP), SetPadding(6, 10, 10, 10),
|
NWidget(WWT_TEXT, COLOUR_GREY, GOW_BASE_GRF_DESCRIPTION), SetMinimalSize(330, 0), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP), SetPadding(6, 10, 10, 10),
|
||||||
EndContainer(),
|
EndContainer(),
|
||||||
|
|
||||||
|
NWidget(WWT_FRAME, COLOUR_GREY, GOW_BASE_SFX_FRAME), SetDataTip(STR_GAME_OPTIONS_BASE_SFX, STR_NULL),
|
||||||
|
NWidget(NWID_HORIZONTAL), SetPIP(10, 30, 10),
|
||||||
|
NWidget(WWT_DROPDOWN, COLOUR_GREY, GOW_BASE_SFX_DROPDOWN), SetMinimalSize(150, 12), SetDataTip(STR_BLACK_RAW_STRING, STR_GAME_OPTIONS_BASE_SFX_TOOLTIP), SetPadding(14, 0, 0, 0),
|
||||||
|
NWidget(NWID_SPACER), SetFill(true, false),
|
||||||
|
EndContainer(),
|
||||||
|
NWidget(WWT_TEXT, COLOUR_GREY, GOW_BASE_SFX_DESCRIPTION), SetMinimalSize(330, 0), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP), SetPadding(6, 10, 10, 10),
|
||||||
|
EndContainer(),
|
||||||
EndContainer(),
|
EndContainer(),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,10 @@
|
||||||
#include "vehicle_base.h"
|
#include "vehicle_base.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
|
/* The type of set we're replacing */
|
||||||
|
#define SET_TYPE "sounds"
|
||||||
|
#include "base_media_func.h"
|
||||||
|
|
||||||
static SoundEntry _original_sounds[ORIGINAL_SAMPLE_COUNT];
|
static SoundEntry _original_sounds[ORIGINAL_SAMPLE_COUNT];
|
||||||
MusicFileSettings msf;
|
MusicFileSettings msf;
|
||||||
|
|
||||||
|
@ -116,10 +120,10 @@ static bool SetBankSource(MixerChannel *mc, const SoundEntry *sound)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SoundInitialize(const char *filename)
|
void InitializeSound()
|
||||||
{
|
{
|
||||||
OpenBankFile(filename);
|
DEBUG(misc, 1, "Loading sound effects...");
|
||||||
return true;
|
OpenBankFile(BaseSounds::GetUsedSet()->files->filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Low level sound player */
|
/* Low level sound player */
|
||||||
|
@ -242,3 +246,34 @@ void SndPlayFx(SoundID sound)
|
||||||
{
|
{
|
||||||
StartSound(sound, 0, msf.effect_vol);
|
StartSound(sound, 0, msf.effect_vol);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
INSTANTIATE_BASE_MEDIA_METHODS(BaseMedia<SoundsSet>, SoundsSet)
|
||||||
|
|
||||||
|
/** Names corresponding to the sound set's files */
|
||||||
|
template <class T, size_t Tnum_files>
|
||||||
|
/* static */ const char *BaseSet<T, Tnum_files>::file_names[Tnum_files] = { "samples" };
|
||||||
|
|
||||||
|
template <class Tbase_set>
|
||||||
|
/* static */ const char *BaseMedia<Tbase_set>::GetExtension()
|
||||||
|
{
|
||||||
|
return ".obs"; // OpenTTD Base Sounds
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class Tbase_set>
|
||||||
|
/* static */ bool BaseMedia<Tbase_set>::DetermineBestSet()
|
||||||
|
{
|
||||||
|
if (BaseMedia<Tbase_set>::used_set != NULL) return true;
|
||||||
|
|
||||||
|
const Tbase_set *best = BaseMedia<Tbase_set>::available_sets;
|
||||||
|
for (const Tbase_set *c = BaseMedia<Tbase_set>::available_sets; c != NULL; c = c->next) {
|
||||||
|
if (best->found_files < c->found_files ||
|
||||||
|
(best->found_files == c->found_files &&
|
||||||
|
(best->shortname == c->shortname && best->version < c->version))) {
|
||||||
|
best = c;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BaseMedia<Tbase_set>::used_set = best;
|
||||||
|
return BaseMedia<Tbase_set>::used_set != NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -11,8 +11,6 @@
|
||||||
|
|
||||||
extern MusicFileSettings msf;
|
extern MusicFileSettings msf;
|
||||||
|
|
||||||
bool SoundInitialize(const char *filename);
|
|
||||||
|
|
||||||
void SndPlayTileFx(SoundID sound, TileIndex tile);
|
void SndPlayTileFx(SoundID sound, TileIndex tile);
|
||||||
void SndPlayVehicleFx(SoundID sound, const Vehicle *v);
|
void SndPlayVehicleFx(SoundID sound, const Vehicle *v);
|
||||||
void SndPlayFx(SoundID sound);
|
void SndPlayFx(SoundID sound);
|
||||||
|
|
|
@ -1,31 +0,0 @@
|
||||||
/* $Id$ */
|
|
||||||
|
|
||||||
/** @file files.h MD5 checksum information and names of the original and extra data files. */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* MD5 sums of graphics files
|
|
||||||
*
|
|
||||||
* DOS -
|
|
||||||
*
|
|
||||||
* TRG1.GRF 9311676280e5b14077a8ee41c1b42192
|
|
||||||
* TRGC.GRF ed446637e034104c5559b32c18afe78d
|
|
||||||
* TRGH.GRF ee6616fb0e6ef6b24892c58c93d86fc9
|
|
||||||
* TRGI.GRF da6a6c9dcc451eec88d79211437b76a8
|
|
||||||
* TRGT.GRF e30e8a398ae86c03dc534a8ac7dfb3b6 (German: fcde1d7e8a74197d72a62695884b909e)
|
|
||||||
* SAMPLE.CAT 422ea3dd074d2859bb51639a6e0e85da
|
|
||||||
*
|
|
||||||
* WINDOWS -
|
|
||||||
*
|
|
||||||
* TRG1R.GRF b04ce593d8c5016e07473a743d7d3358
|
|
||||||
* TRGCR.GRF 3668f410c761a050b5e7095a2b14879b
|
|
||||||
* TRGHR.GRF 06bf2b7a31766f048baac2ebe43457b1
|
|
||||||
* TRGIR.GRF 0c2484ff6be49fc63a83be6ab5c38f32
|
|
||||||
* TRGTR.GRF de53650517fe661ceaa3138c6edb0eb8
|
|
||||||
* SAMPLE.CAT 9212e81e72badd4bbe1eaeae66458e10
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
static MD5File _sound_sets[] = {
|
|
||||||
{ "SAMPLE.CAT", {0x42, 0x2e, 0xa3, 0xdd, 0x07, 0x4d, 0x28, 0x59, 0xbb, 0x51, 0x63, 0x9a, 0x6e, 0x0e, 0x85, 0xda}, NULL },
|
|
||||||
{ "SAMPLE.CAT", {0x92, 0x12, 0xe8, 0x1e, 0x72, 0xba, 0xdd, 0x4b, 0xbe, 0x1e, 0xae, 0xae, 0x66, 0x45, 0x8e, 0x10}, NULL },
|
|
||||||
};
|
|
|
@ -238,6 +238,7 @@ static const SettingDescGlobVarList _misc_settings[] = {
|
||||||
SDTG_BOOL("news_ticker_sound", S, 0, _news_ticker_sound, true, STR_NULL, NULL),
|
SDTG_BOOL("news_ticker_sound", S, 0, _news_ticker_sound, true, STR_NULL, NULL),
|
||||||
SDTG_BOOL("fullscreen", S, 0, _fullscreen, false, STR_NULL, NULL),
|
SDTG_BOOL("fullscreen", S, 0, _fullscreen, false, STR_NULL, NULL),
|
||||||
SDTG_STR("graphicsset", SLE_STRQ, S, 0, BaseGraphics::ini_set, NULL, STR_NULL, NULL),
|
SDTG_STR("graphicsset", SLE_STRQ, S, 0, BaseGraphics::ini_set, NULL, STR_NULL, NULL),
|
||||||
|
SDTG_STR("soundsset", SLE_STRQ, S, 0, BaseSounds::ini_set, NULL, STR_NULL, NULL),
|
||||||
SDTG_STR("videodriver", SLE_STRQ, S, 0, _ini_videodriver, NULL, STR_NULL, NULL),
|
SDTG_STR("videodriver", SLE_STRQ, S, 0, _ini_videodriver, NULL, STR_NULL, NULL),
|
||||||
SDTG_STR("musicdriver", SLE_STRQ, S, 0, _ini_musicdriver, NULL, STR_NULL, NULL),
|
SDTG_STR("musicdriver", SLE_STRQ, S, 0, _ini_musicdriver, NULL, STR_NULL, NULL),
|
||||||
SDTG_STR("sounddriver", SLE_STRQ, S, 0, _ini_sounddriver, NULL, STR_NULL, NULL),
|
SDTG_STR("sounddriver", SLE_STRQ, S, 0, _ini_sounddriver, NULL, STR_NULL, NULL),
|
||||||
|
|
Loading…
Reference in New Issue