mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r16704) [0.7] -Backport from trunk:
- Fix: When SDL/Allegro fail to initialise, fall back on another video driver but not to the null driver (r16702, r16700, r16699) - Fix: Limit the screen's resolution to 65535x65535 so the dirty pixels stay within bounds of a 32 bits integer [FS#3001] (r16701) - Fix: Missing debug string for ESRB_SAFE_TILE in YAPF debugging helper [FS#3002] (r16690) - Fix: When there is no AI version that can load data from the savegame, load the latest version of the same AI instead of a random AI (r16651, r16650, r16649)
This commit is contained in:
parent
0ffca06944
commit
b49c6e0cbd
|
@ -1,7 +1,7 @@
|
|||
STRGEN USAGE
|
||||
------------
|
||||
This guide is only interesting for people who want to alter something
|
||||
themselves without access to WT2 (translator2.openttd.org). Please note that
|
||||
themselves without access to translator.openttd.org. Please note that
|
||||
your compiled language file will only be compatible with the OpenTTD version
|
||||
you have downloaded english.txt, the master language file, for. While this is
|
||||
not always true, namely when changes in the code have not touched language
|
||||
|
|
|
@ -381,10 +381,8 @@ The following libraries are used by OpenTTD for:
|
|||
See http://www.openttd.org/development for up-to-date information.
|
||||
|
||||
The use of the online Translator service, located at
|
||||
http://translator2.openttd.org/, is highly encouraged. For a username/password
|
||||
combo you should contact the development team, either by mail, IRC or the
|
||||
forums. The system is straightforward to use, and if you have any problems,
|
||||
read the online help located there.
|
||||
http://translator.openttd.org/, is highly encouraged. For getting an account
|
||||
simply follow the guidelines in the FAQ of the translator website.
|
||||
|
||||
If for some reason the website is down for a longer period of time, the
|
||||
information below might be of help.
|
||||
|
|
|
@ -412,7 +412,7 @@ AIInfo *AIScanner::FindInfo(const char *nameParam, int versionParam)
|
|||
snprintf(ai_name_compare, sizeof(ai_name_compare), "%s", (*it).second->GetName());
|
||||
strtolower(ai_name_compare);
|
||||
|
||||
if (strcasecmp(ai_name, ai_name_compare) == 0 && (*it).second->CanLoadFromVersion(versionParam)) {
|
||||
if (strcasecmp(ai_name, ai_name_compare) == 0 && (*it).second->CanLoadFromVersion(versionParam) && (version == -1 || (*it).second->GetVersion() > version)) {
|
||||
version = (*it).second->GetVersion();
|
||||
info = (*it).second;
|
||||
}
|
||||
|
|
|
@ -86,7 +86,7 @@ const char *GetDebugString();
|
|||
#define TOC(str, count)\
|
||||
__sum__ += ottd_rdtsc() - _xxx_;\
|
||||
if (++__i__ == count) {\
|
||||
DEBUG(misc, 0, "[%s] %" OTTD_PRINTF64 "u [avg: %.1f]\n", str, __sum__, __sum__/(double)__i__);\
|
||||
DEBUG(misc, 0, "[%s] " OTTD_PRINTF64 " [avg: %.1f]\n", str, __sum__, __sum__/(double)__i__);\
|
||||
__i__ = 0;\
|
||||
__sum__ = 0;\
|
||||
}\
|
||||
|
|
|
@ -61,8 +61,8 @@ const Driver *DriverFactoryBase::SelectDriver(const char *name, Driver::Type typ
|
|||
if (GetDrivers().size() == 0) return NULL;
|
||||
|
||||
if (StrEmpty(name)) {
|
||||
/* Probe for this driver */
|
||||
for (int priority = 10; priority >= 0; priority--) {
|
||||
/* Probe for this driver, but do not fall back to dedicated/null! */
|
||||
for (int priority = 10; priority > 0; priority--) {
|
||||
Drivers::iterator it = GetDrivers().begin();
|
||||
for (; it != GetDrivers().end(); ++it) {
|
||||
DriverFactoryBase *d = (*it).second;
|
||||
|
|
|
@ -18,15 +18,16 @@ extern int _allegro_instance_count;
|
|||
|
||||
const char *MusicDriver_Allegro::Start(const char * const *param)
|
||||
{
|
||||
if (_allegro_instance_count == 0 && install_allegro(SYSTEM_AUTODETECT, &errno, NULL)) return NULL;
|
||||
if (_allegro_instance_count == 0 && install_allegro(SYSTEM_AUTODETECT, &errno, NULL)) return "Failed to set up Allegro";
|
||||
_allegro_instance_count++;
|
||||
|
||||
/* Initialise the sound */
|
||||
if (install_sound(DIGI_AUTODETECT, MIDI_AUTODETECT, NULL) != 0) return NULL;
|
||||
if (install_sound(DIGI_AUTODETECT, MIDI_AUTODETECT, NULL) != 0) return "Failed to set up Allegro sound";
|
||||
|
||||
/* Okay, there's no soundcard */
|
||||
if (midi_card == MIDI_NONE) {
|
||||
DEBUG(driver, 0, "allegro: no midi card found");
|
||||
return "No sound card found";
|
||||
}
|
||||
|
||||
return NULL;
|
||||
|
|
|
@ -539,10 +539,13 @@ int ttd_main(int argc, char *argv[])
|
|||
if (startyear != INVALID_YEAR) _settings_newgame.game_creation.starting_year = startyear;
|
||||
if (generation_seed != GENERATE_NEW_SEED) _settings_newgame.game_creation.generation_seed = generation_seed;
|
||||
|
||||
/* The width and height must be at least 1 pixel, this
|
||||
* way all internal drawing routines work correctly. */
|
||||
if (_cur_resolution.width <= 0) _cur_resolution.width = 1;
|
||||
if (_cur_resolution.height <= 0) _cur_resolution.height = 1;
|
||||
/*
|
||||
* The width and height must be at least 1 pixel and width times
|
||||
* height must still fit within a 32 bits integer, this way all
|
||||
* internal drawing routines work correctly.
|
||||
*/
|
||||
_cur_resolution.width = ClampU(_cur_resolution.width, 1, UINT16_MAX);
|
||||
_cur_resolution.height = ClampU(_cur_resolution.height, 1, UINT16_MAX);
|
||||
|
||||
#if defined(ENABLE_NETWORK)
|
||||
if (dedicated_host) snprintf(_settings_client.network.server_bind_ip, sizeof(_settings_client.network.server_bind_ip), "%s", dedicated_host);
|
||||
|
|
|
@ -70,12 +70,20 @@ static void Load_AIPL()
|
|||
} else {
|
||||
config->ChangeAI(_ai_saveload_name, _ai_saveload_version);
|
||||
if (!config->HasAI()) {
|
||||
if (strcmp(_ai_saveload_name, "%_dummy") != 0) {
|
||||
DEBUG(ai, 0, "The savegame has an AI by the name '%s', version %d which is no longer available.", _ai_saveload_name, _ai_saveload_version);
|
||||
DEBUG(ai, 0, "A random other AI will be loaded in its place.");
|
||||
/* No version of the AI available that can load the data. Try to load the
|
||||
* latest version of the AI instead. */
|
||||
config->ChangeAI(_ai_saveload_name, -1);
|
||||
if (!config->HasAI()) {
|
||||
if (strcmp(_ai_saveload_name, "%_dummy") != 0) {
|
||||
DEBUG(ai, 0, "The savegame has an AI by the name '%s', version %d which is no longer available.", _ai_saveload_name, _ai_saveload_version);
|
||||
DEBUG(ai, 0, "A random other AI will be loaded in its place.");
|
||||
} else {
|
||||
DEBUG(ai, 0, "The savegame had no AIs available at the time of saving.");
|
||||
DEBUG(ai, 0, "A random available AI will be loaded now.");
|
||||
}
|
||||
} else {
|
||||
DEBUG(ai, 0, "The savegame had no AIs available at the time of saving.");
|
||||
DEBUG(ai, 0, "A random available AI will be loaded now.");
|
||||
DEBUG(ai, 0, "The savegame has an AI by the name '%s', version %d which is no longer available.", _ai_saveload_name, _ai_saveload_version);
|
||||
DEBUG(ai, 0, "The latest version of that AI has been loaded instead, but it'll not get the savegame data as it's incompatible.");
|
||||
}
|
||||
/* Make sure the AI doesn't get the saveload data, as he was not the
|
||||
* writer of the saveload data in the first place */
|
||||
|
|
|
@ -45,16 +45,16 @@ extern int _allegro_instance_count;
|
|||
|
||||
const char *SoundDriver_Allegro::Start(const char * const *parm)
|
||||
{
|
||||
if (_allegro_instance_count == 0 && install_allegro(SYSTEM_AUTODETECT, &errno, NULL)) return NULL;
|
||||
if (_allegro_instance_count == 0 && install_allegro(SYSTEM_AUTODETECT, &errno, NULL)) return "Failed to set up Allegro";
|
||||
_allegro_instance_count++;
|
||||
|
||||
/* Initialise the sound */
|
||||
if (install_sound(DIGI_AUTODETECT, MIDI_AUTODETECT, NULL) != 0) return NULL;
|
||||
if (install_sound(DIGI_AUTODETECT, MIDI_AUTODETECT, NULL) != 0) return "Failed to set up Allegro sound";
|
||||
|
||||
/* Okay, there's no soundcard */
|
||||
if (digi_card == DIGI_NONE) {
|
||||
DEBUG(driver, 0, "allegro: no sound card found");
|
||||
return NULL;
|
||||
return "No sound card found";
|
||||
}
|
||||
|
||||
_stream = play_audio_stream(BUFFER_SIZE, 16, true, 11025, 255, 128);
|
||||
|
|
|
@ -404,7 +404,7 @@ int _allegro_instance_count = 0;
|
|||
|
||||
const char *VideoDriver_Allegro::Start(const char * const *parm)
|
||||
{
|
||||
if (_allegro_instance_count == 0 && install_allegro(SYSTEM_AUTODETECT, &errno, NULL)) return NULL;
|
||||
if (_allegro_instance_count == 0 && install_allegro(SYSTEM_AUTODETECT, &errno, NULL)) return "Failed to set up Allegro";
|
||||
_allegro_instance_count++;
|
||||
|
||||
install_timer();
|
||||
|
@ -425,7 +425,9 @@ const char *VideoDriver_Allegro::Start(const char * const *parm)
|
|||
#endif
|
||||
|
||||
GetVideoModes();
|
||||
CreateMainSurface(_cur_resolution.width, _cur_resolution.height);
|
||||
if (!CreateMainSurface(_cur_resolution.width, _cur_resolution.height)) {
|
||||
return "Failed to set up Allegro video";
|
||||
}
|
||||
MarkWholeScreenDirty();
|
||||
set_close_button_callback(HandleExitGameRequest);
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@ public:
|
|||
|
||||
class FVideoDriver_Null: public VideoDriverFactory<FVideoDriver_Null> {
|
||||
public:
|
||||
static const int priority = 1;
|
||||
static const int priority = 0;
|
||||
/* virtual */ const char *GetName() { return "null"; }
|
||||
/* virtual */ const char *GetDescription() { return "Null Video Driver"; }
|
||||
/* virtual */ Driver *CreateInstance() { return new VideoDriver_Null(); }
|
||||
|
|
|
@ -426,11 +426,14 @@ const char *VideoDriver_SDL::Start(const char * const *parm)
|
|||
const char *s = SdlOpen(SDL_INIT_VIDEO);
|
||||
if (s != NULL) return s;
|
||||
|
||||
GetVideoModes();
|
||||
if (!CreateMainSurface(_cur_resolution.width, _cur_resolution.height)) {
|
||||
return SDL_CALL SDL_GetError();
|
||||
}
|
||||
|
||||
SDL_CALL SDL_VideoDriverName(buf, 30);
|
||||
DEBUG(driver, 1, "SDL: using driver '%s'", buf);
|
||||
|
||||
GetVideoModes();
|
||||
CreateMainSurface(_cur_resolution.width, _cur_resolution.height);
|
||||
MarkWholeScreenDirty();
|
||||
|
||||
SDL_CALL SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL);
|
||||
|
|
|
@ -114,7 +114,7 @@ inline CStrA ValueStr(EndSegmentReasonBits bits)
|
|||
{
|
||||
static const char *end_segment_reason_names[] = {
|
||||
"DEAD_END", "RAIL_TYPE", "INFINITE_LOOP", "SEGMENT_TOO_LONG", "CHOICE_FOLLOWS",
|
||||
"DEPOT", "WAYPOINT", "STATION",
|
||||
"DEPOT", "WAYPOINT", "STATION", "SAFE_TILE",
|
||||
"PATH_TOO_LONG", "FIRST_TWO_WAY_RED", "LOOK_AHEAD_END", "TARGET_REACHED"
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue