(svn r10300) -Fix [FS#917]: give a better explanation why the loading of a savegame failed and do not crash on loading savegames that were altered by patches or branches.
authorrubidium
Sun, 24 Jun 2007 12:27:11 +0000
changeset 7036 f1e26f21aa08
parent 7035 9af867b5802a
child 7037 64249224bb74
(svn r10300) -Fix [FS#917]: give a better explanation why the loading of a savegame failed and do not crash on loading savegames that were altered by patches or branches.
src/lang/american.txt
src/lang/brazilian_portuguese.txt
src/lang/bulgarian.txt
src/lang/catalan.txt
src/lang/czech.txt
src/lang/danish.txt
src/lang/dutch.txt
src/lang/english.txt
src/lang/esperanto.txt
src/lang/estonian.txt
src/lang/finnish.txt
src/lang/french.txt
src/lang/galician.txt
src/lang/german.txt
src/lang/hungarian.txt
src/lang/icelandic.txt
src/lang/italian.txt
src/lang/japanese.txt
src/lang/korean.txt
src/lang/lithuanian.txt
src/lang/norwegian_bokmal.txt
src/lang/norwegian_nynorsk.txt
src/lang/piglatin.txt
src/lang/polish.txt
src/lang/portuguese.txt
src/lang/romanian.txt
src/lang/russian.txt
src/lang/simplified_chinese.txt
src/lang/slovak.txt
src/lang/slovenian.txt
src/lang/spanish.txt
src/lang/swedish.txt
src/lang/traditional_chinese.txt
src/lang/turkish.txt
src/lang/ukrainian.txt
src/lang/unfinished/afrikaans.txt
src/lang/unfinished/croatian.txt
src/lang/unfinished/frisian.txt
src/lang/unfinished/greek.txt
src/openttd.cpp
src/saveload.cpp
src/saveload.h
--- a/src/lang/american.txt	Sun Jun 24 10:20:05 2007 +0000
+++ b/src/lang/american.txt	Sun Jun 24 12:27:11 2007 +0000
@@ -1900,9 +1900,9 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabyte{P "" s} free
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Unable to read drive
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Game Save Failed
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Game Save Failed{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Unable to delete file
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Game Load Failed
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Game Load Failed{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}List of drives, directories and saved-game files
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Currently selected name for saved-game
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Delete the currently selected saved-game
--- a/src/lang/brazilian_portuguese.txt	Sun Jun 24 10:20:05 2007 +0000
+++ b/src/lang/brazilian_portuguese.txt	Sun Jun 24 12:27:11 2007 +0000
@@ -1908,9 +1908,9 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabytes livres
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Incapaz de ler unidade
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Falha ao Salvar Jogo
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Falha ao Salvar Jogo{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Incapaz de remover o arquivo
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Falha ao Abrir Jogo
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Falha ao Abrir Jogo{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Lista de unidades, diretórios e arquivos de jogos gravados
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Nome selecionado para salvar o jogo
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Remover o jogo selecionado
--- a/src/lang/bulgarian.txt	Sun Jun 24 10:20:05 2007 +0000
+++ b/src/lang/bulgarian.txt	Sun Jun 24 12:27:11 2007 +0000
@@ -1894,9 +1894,9 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} мегабайт{P "" а} свободно
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Не може да прочете диска
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Запазването на играта е неуспешно
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Запазването на играта е неуспешно{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Изтриването на файла е неуспешно
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Отварянето на играта е неуспешно
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Отварянето на играта е неуспешно{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Списък с хард-дисковете, директориите и запазените игри
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Избрано име за запазена игра
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Изтрий избраната запазената игра
--- a/src/lang/catalan.txt	Sun Jun 24 10:20:05 2007 +0000
+++ b/src/lang/catalan.txt	Sun Jun 24 12:27:11 2007 +0000
@@ -1904,9 +1904,9 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabytes lliures
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Impossible llegir la unitat de disc
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Desat del Joc erroni
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Desat del Joc erroni{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Impossible esborrar l'arxiu
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Càrrega del Joc errònia
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Càrrega del Joc errònia{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Llista de dispositius de disc, carpetes i arxius de jocs desats
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Nom actualment seleccionat per joc desat
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Esborra el joc desat actualment seleccionat
--- a/src/lang/czech.txt	Sun Jun 24 10:20:05 2007 +0000
+++ b/src/lang/czech.txt	Sun Jun 24 12:27:11 2007 +0000
@@ -1958,9 +1958,9 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} MB voln{P ý é ých}
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Nemohu číst z jednotky
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Uložení hry selhalo
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Uložení hry selhalo{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Nemohu smazat soubor
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Nemohu otevřít hru
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Nemohu otevřít hru{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Seznam jednotek, adresářů a uložených her
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Zvolené jméno uložené hry
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Smazat označenou uloženou hru
--- a/src/lang/danish.txt	Sun Jun 24 10:20:05 2007 +0000
+++ b/src/lang/danish.txt	Sun Jun 24 12:27:11 2007 +0000
@@ -1903,9 +1903,9 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabytes fri
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Kan ikke læse drevet
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Fejl under gemning af spil
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Fejl under gemning af spil{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Kan ikke slette fil
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Fejl under hentning af spil
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Fejl under hentning af spil{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Liste over drev, biblioteker og gemte spilfiler
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Nuværende gemte spils navn
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Slet det valgte gemte spil
--- a/src/lang/dutch.txt	Sun Jun 24 10:20:05 2007 +0000
+++ b/src/lang/dutch.txt	Sun Jun 24 12:27:11 2007 +0000
@@ -1904,9 +1904,9 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabytes vrij
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Kan niet lezen van schijf
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Opslaan Spel Mislukt
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Opslaan Spel Mislukt{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Kan bestand niet verwijderen
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Laden Spel Mislukt
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Laden Spel Mislukt{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Lijst van schijven, mappen, en opgeslagen spellen
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Huidige gekozen naam voor opgeslagen spel
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Verwijder het momenteel geselecteerde opgeslagen spel
--- a/src/lang/english.txt	Sun Jun 24 10:20:05 2007 +0000
+++ b/src/lang/english.txt	Sun Jun 24 12:27:11 2007 +0000
@@ -1904,9 +1904,14 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabyte{P "" s} free
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Unable to read drive
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Game Save Failed
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Game Save Failed{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Unable to delete file
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Game Load Failed
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Game Load Failed{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR                   :Internal error: {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME                         :Broken savegame - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME                        :Savegame is made with newer version
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE                       :File not readable
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE                      :File not writeable
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}List of drives, directories and saved-game files
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Currently selected name for saved-game
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Delete the currently selected saved-game
--- a/src/lang/esperanto.txt	Sun Jun 24 10:20:05 2007 +0000
+++ b/src/lang/esperanto.txt	Sun Jun 24 12:27:11 2007 +0000
@@ -1842,9 +1842,9 @@
 STR_4004                                                        :{COMPANY} je {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabitoko{P "" j} libera{P "" j}
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Ne eblas legi diskon
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Ludkonservado Fiaskis
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Ludkonservado Fiaskis{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Ne eblas forviŝi dosieron
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Ludŝarĝado Fiaskis
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Ludŝarĝado Fiaskis{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Listo da diskoj, dosierujoj kaj luddosieroj
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Nune elektita nomo por luddosiero
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Forviŝu la nun elektitan luddosieron
--- a/src/lang/estonian.txt	Sun Jun 24 10:20:05 2007 +0000
+++ b/src/lang/estonian.txt	Sun Jun 24 12:27:11 2007 +0000
@@ -2004,9 +2004,9 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabaiti{P "" i} vaba
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Ei suuda kettalt lugeda
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Mängu salvestamine ebaõnnestus
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Mängu salvestamine ebaõnnestus{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Faili ei saa kustutada
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Mängu laadimine ebaõnnestus
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Mängu laadimine ebaõnnestus{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Nimekiri ketastest, kataloogidest ja salvestatud mängudest
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Mängu salvestuse nimi
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Kustuta valitud salvestus
--- a/src/lang/finnish.txt	Sun Jun 24 10:20:05 2007 +0000
+++ b/src/lang/finnish.txt	Sun Jun 24 12:27:11 2007 +0000
@@ -1893,9 +1893,9 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megatavu{P "" a} vapaana
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Asemaa ei voi lukea.
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Tallennus epäonnistui.
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Tallennus epäonnistui.{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Tiedostoa ei voi poistaa.
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Lataus epäonnistui.
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Lataus epäonnistui.{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Lista asemista, hakemistoista ja tallennetuista peleistä.
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Valittu nimi pelitallenteelle.
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Poista valittu pelitallenne.
--- a/src/lang/french.txt	Sun Jun 24 10:20:05 2007 +0000
+++ b/src/lang/french.txt	Sun Jun 24 12:27:11 2007 +0000
@@ -1905,9 +1905,9 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} Mo libre{P "" s}
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Impossible d'accéder au disque
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}La sauvegarde à échoué
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}La sauvegarde à échoué{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Impossible de supprimer le fichier
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Le chargement à échoué
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Le chargement à échoué{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Liste des disques, répertoires, et fichiers de sauvegarde
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Nom sélectionné pour la sauvegarde
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Supprime la sauvegarde sélectionnée
--- a/src/lang/galician.txt	Sun Jun 24 10:20:05 2007 +0000
+++ b/src/lang/galician.txt	Sun Jun 24 12:27:11 2007 +0000
@@ -1751,9 +1751,9 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabytes libres
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}No se pode lee-la unidade
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Grabación da partida fallida
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Grabación da partida fallida{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Non se pode borra-lo arquivo
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Carga da partida fallida
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Carga da partida fallida{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Lista de unidades, directorios e arquivos de partida
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Nome seleccionado actualmente para o arquivo
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Borra-lo arquivo que está seleccionado
--- a/src/lang/german.txt	Sun Jun 24 10:20:05 2007 +0000
+++ b/src/lang/german.txt	Sun Jun 24 12:27:11 2007 +0000
@@ -1902,9 +1902,9 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} Megabyte{P "" s} frei
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Kann vom Laufwerk nicht lesen
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Spielspeicherung fehlgeschlagen
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Spielspeicherung fehlgeschlagen{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Datei kann nicht gelöscht werden
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Laden des Spieles fehlgeschlagen
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Laden des Spieles fehlgeschlagen{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Liste der Laufwerke, Verzeichnisse und gespeicherten Spiele
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Ausgewählter Spielname
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Lösche gewählten Spielstand
--- a/src/lang/hungarian.txt	Sun Jun 24 10:20:05 2007 +0000
+++ b/src/lang/hungarian.txt	Sun Jun 24 12:27:11 2007 +0000
@@ -1970,9 +1970,9 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabájt szabad
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Nem olvasható a meghajtó
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}A mentés nem sikerült
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}A mentés nem sikerült{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Nem sikerült törölni a fájlt
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}A betöltés nem sikerült
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}A betöltés nem sikerült{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Meghajtók, könyvtárak és mentések listája
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}A mentés neve
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}A kijelölt mentés törlése
--- a/src/lang/icelandic.txt	Sun Jun 24 10:20:05 2007 +0000
+++ b/src/lang/icelandic.txt	Sun Jun 24 12:27:11 2007 +0000
@@ -1809,9 +1809,9 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabæti laus
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Get ekki lesið af drifi
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Vistun leiks mistókst
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Vistun leiks mistókst{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Get ekki eytt skrá
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Mistókst að opna leik
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Mistókst að opna leik{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Listi yfir drif, möppur og vistaða leiki
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Nafn fyrir vistun leiks
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Eyða nafninu
--- a/src/lang/italian.txt	Sun Jun 24 10:20:05 2007 +0000
+++ b/src/lang/italian.txt	Sun Jun 24 12:27:11 2007 +0000
@@ -1906,9 +1906,9 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabyte liber{P o i}
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Impossibile leggere dall'unità
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Salvataggio fallito
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Salvataggio fallito{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Impossibile eliminare il file
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Caricamento fallito
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Caricamento fallito{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Elenco delle unità, delle cartelle e dei file delle partite salvate
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Nome del salvataggio selezionato
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Elimina il salvataggio selezionato
--- a/src/lang/japanese.txt	Sun Jun 24 10:20:05 2007 +0000
+++ b/src/lang/japanese.txt	Sun Jun 24 12:27:11 2007 +0000
@@ -1903,9 +1903,9 @@
 STR_4004                                                        :{COMPANY}、{DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} MB 使用可能
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}ドライブが読み込めません
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}ゲームの保存が失敗しました
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}ゲームの保存が失敗しました{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}ファイルを削除できません
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}ゲームの読み込むが失敗しました
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}ゲームの読み込むが失敗しました{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}ドライブ、フォルダ、ゲームファイルのリスト
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}ゲームのファイル名
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}選択したゲームを削除します
--- a/src/lang/korean.txt	Sun Jun 24 10:20:05 2007 +0000
+++ b/src/lang/korean.txt	Sun Jun 24 12:27:11 2007 +0000
@@ -1905,9 +1905,9 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} Mb 남음
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}드라이브를 읽을 수 없음
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}게임 저장 실패
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}게임 저장 실패{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}파일을 삭제할 수 없음
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}게임 불러오기 실패
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}게임 불러오기 실패{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}드라이프, 폴더, 저장된 게임 파일의 목록입니다
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}저장될 세이브 파일의 이름입니다.
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}선택된 세이브 파일을 삭제합니다.
--- a/src/lang/lithuanian.txt	Sun Jun 24 10:20:05 2007 +0000
+++ b/src/lang/lithuanian.txt	Sun Jun 24 12:27:11 2007 +0000
@@ -1839,9 +1839,9 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} Mb laisva
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Negali pasiekti disko
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Zaidimo issaugoti nepavyko
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Zaidimo issaugoti nepavyko{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Failo istrinti nepavyko
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Zaidimo atverti nepavyko
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Zaidimo atverti nepavyko{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Disku, katalogu ir issaugotu zaidimu sarasas
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Pasirinktas zaidimas
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Istrinti pasirinkta zaidima
--- a/src/lang/norwegian_bokmal.txt	Sun Jun 24 10:20:05 2007 +0000
+++ b/src/lang/norwegian_bokmal.txt	Sun Jun 24 12:27:11 2007 +0000
@@ -1864,9 +1864,9 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabyte ledig
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Kan ikke lese fra disk
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Lagring av spillet mislyktes
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Lagring av spillet mislyktes{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Kan ikke slette fil
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Feil ved fremhenting av spill
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Feil ved fremhenting av spill{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Liste over disker, mapper og lagrede spill
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Gjeldende navn for valgt lagret spill
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Slett valgte lagring
--- a/src/lang/norwegian_nynorsk.txt	Sun Jun 24 10:20:05 2007 +0000
+++ b/src/lang/norwegian_nynorsk.txt	Sun Jun 24 12:27:11 2007 +0000
@@ -1900,9 +1900,9 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabyte ledig
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Kan ikkje lese frå disk
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Lagring av spelet mislukkast
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Lagring av spelet mislukkast{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Kan ikkje slette fil
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Feil ved henting av spel
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Feil ved henting av spel{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Liste over diskar, mapper og lagra spel
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Gjeldande namn for vald lagra spel
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Slett valde lagra spel
--- a/src/lang/piglatin.txt	Sun Jun 24 10:20:05 2007 +0000
+++ b/src/lang/piglatin.txt	Sun Jun 24 12:27:11 2007 +0000
@@ -1903,9 +1903,9 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} egabyte{P "" s}may eefray
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Unableway otay eadray ivedray
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Amegay Avesay Ailedfay
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Amegay Avesay Ailedfay{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Unableway otay eleteday ilefay
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Amegay Oadlay Ailedfay
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Amegay Oadlay Ailedfay{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Istlay ofway ivesdray, irectoriesday andway avedsay-amegay ilesfay
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Urrentlycay electedsay amenay orfay avedsay-amegay
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Eleteday ethay urrentlycay electedsay avedsay-amegay
--- a/src/lang/polish.txt	Sun Jun 24 10:20:05 2007 +0000
+++ b/src/lang/polish.txt	Sun Jun 24 12:27:11 2007 +0000
@@ -1925,9 +1925,9 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} MB wolnego miejsca
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Nie można odczytać napędu
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Nie można zapisać gry
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Nie można zapisać gry{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Nie można usunąć pliku
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Nie można wczytać gry
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Nie można wczytać gry{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Lista napędów, katalogów i zapisanych gier
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Obecnie zaznaczona nazwa dla zapisanej gry
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Skasuj zaznaczoną zapisaną grę
--- a/src/lang/portuguese.txt	Sun Jun 24 10:20:05 2007 +0000
+++ b/src/lang/portuguese.txt	Sun Jun 24 12:27:11 2007 +0000
@@ -1867,9 +1867,9 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabytes livres
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Não é possível ler unidade
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Falha ao Guardar Jogo
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Falha ao Guardar Jogo{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Não é possível eliminar ficheiro
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Falha ao Abrir Jogo
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Falha ao Abrir Jogo{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Lista de unidades, directorias e ficheiros de jogos guardados
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Nome escolhido para guardar o jogo
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Eliminar o jogo guardado seleccionado
--- a/src/lang/romanian.txt	Sun Jun 24 10:20:05 2007 +0000
+++ b/src/lang/romanian.txt	Sun Jun 24 12:27:11 2007 +0000
@@ -1904,9 +1904,9 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabyte{P "" s} liberi
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Nu pot citi acest disc
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Salvarea jocului eşuată
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Salvarea jocului eşuată{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Ştergerea jocului eşuată
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Încărcarea jocului eşuată
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Încărcarea jocului eşuată{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Lista de discuri, directoare şi fişiere cu jocuri salvate
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Numele selectat pentru un joc salvat
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Şterge jocul salvat selectat
--- a/src/lang/russian.txt	Sun Jun 24 10:20:05 2007 +0000
+++ b/src/lang/russian.txt	Sun Jun 24 12:27:11 2007 +0000
@@ -1868,9 +1868,9 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} Мб свободно
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Не удалось прочитать диск
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Невозможно сохранить игру
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Невозможно сохранить игру{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Невозможно удалить файл
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Невозможно загрузить игру
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Невозможно загрузить игру{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Список дисков, папок и сохраненных игр
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Выбранное имя для сохранения игры
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Удалить выбранную сохраненную игру
--- a/src/lang/simplified_chinese.txt	Sun Jun 24 10:20:05 2007 +0000
+++ b/src/lang/simplified_chinese.txt	Sun Jun 24 12:27:11 2007 +0000
@@ -1828,9 +1828,9 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabyte(s) 可用
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}不能读取驱动器
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}保存游戏失败
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}保存游戏失败{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}不能删除文件
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}游戏存档读取失败
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}游戏存档读取失败{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}驱动器、目录和游戏存档列表
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}保存当前游戏用的存档名字
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}删除选定的游戏存档
--- a/src/lang/slovak.txt	Sun Jun 24 10:20:05 2007 +0000
+++ b/src/lang/slovak.txt	Sun Jun 24 12:27:11 2007 +0000
@@ -1946,9 +1946,9 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabajtov volnych
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Zariadenie je necitatelne
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Ulozenie hry zlyhalo
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Ulozenie hry zlyhalo{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Subor sa neda vymazat
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Nahratie hry zlyhalo
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Nahratie hry zlyhalo{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Zoznam diskov, adresarov a subory ulozenych hier
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Vybrany nazov pre ulozenie hry
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Vymazat vybranu ulozenu hru
--- a/src/lang/slovenian.txt	Sun Jun 24 10:20:05 2007 +0000
+++ b/src/lang/slovenian.txt	Sun Jun 24 12:27:11 2007 +0000
@@ -1944,9 +1944,9 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabajt{P "" a i ov} prosto
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Nemogoče branje pogona
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Shranjevanje igre ni uspelo
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Shranjevanje igre ni uspelo{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Nemogoče brisanje datoteke
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Nalaganje igre ni uspelo
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Nalaganje igre ni uspelo{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Seznam pogonov, map in shranjenih iger
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Trenutno izbrano ime za shranjevanje
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Izbriši trenutno izbrano shranjeno igro
--- a/src/lang/spanish.txt	Sun Jun 24 10:20:05 2007 +0000
+++ b/src/lang/spanish.txt	Sun Jun 24 12:27:11 2007 +0000
@@ -1849,9 +1849,9 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabytes libres
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}No es posible leer la unidad
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Error guardando juego
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Error guardando juego{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}No es posible borrar el fichero
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Carga de juego erronea
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Carga de juego erronea{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Listado de unidades, directorios y juegos guardados
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Nombre seleccionado actualmente para el juego guardado
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Borrar el juego guardado seleccionado
--- a/src/lang/swedish.txt	Sun Jun 24 10:20:05 2007 +0000
+++ b/src/lang/swedish.txt	Sun Jun 24 12:27:11 2007 +0000
@@ -1904,9 +1904,9 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabyte{P "" s} ledigt
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Kan inte läsa från disk
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Sparandet av spelet misslyckades
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Sparandet av spelet misslyckades{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Kan inte ta bort filen
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Läsningen av spelet misslyckades
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Läsningen av spelet misslyckades{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Listar enheter, kataloger och sparade spel
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Valt namn för spelet
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Ta bort markerat sparat spel
--- a/src/lang/traditional_chinese.txt	Sun Jun 24 10:20:05 2007 +0000
+++ b/src/lang/traditional_chinese.txt	Sun Jun 24 12:27:11 2007 +0000
@@ -1867,9 +1867,9 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}空間尚有 {COMMA} MB
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}無法讀取磁碟
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}遊戲儲存失敗
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}遊戲儲存失敗{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}無法刪除檔案
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}遊戲載入失敗
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}遊戲載入失敗{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}列出磁碟、目錄與遊戲存檔
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}目前選定的存檔名稱
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}刪除目前選定的存檔
--- a/src/lang/turkish.txt	Sun Jun 24 10:20:05 2007 +0000
+++ b/src/lang/turkish.txt	Sun Jun 24 12:27:11 2007 +0000
@@ -1868,9 +1868,9 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} MB bos
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Sürücü okunamıyor
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Oyun kaydedilemedi
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Oyun kaydedilemedi{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Dosya silinemedi
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Dosya yüklenemedi
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Dosya yüklenemedi{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Sürücü, klasör ve kayıtli oyun listesi
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Kaydetmek için kullanılacak dosya adı
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Seçili oyunu sil
--- a/src/lang/ukrainian.txt	Sun Jun 24 10:20:05 2007 +0000
+++ b/src/lang/ukrainian.txt	Sun Jun 24 12:27:11 2007 +0000
@@ -2030,9 +2030,9 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} мегабайт{P "" и ""}  вільно
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Неможливо прочитати пристрій
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Помилка запису гри
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Помилка запису гри{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Неможливо стерти файл
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Помилка завантаження гри
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Помилка завантаження гри{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Список пристроїв, каталогів і збережених файлів гри
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Поточне вибране ім'я файлу для збереження гри
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Стерти вибрану збережену гру
--- a/src/lang/unfinished/afrikaans.txt	Sun Jun 24 10:20:05 2007 +0000
+++ b/src/lang/unfinished/afrikaans.txt	Sun Jun 24 12:27:11 2007 +0000
@@ -1697,9 +1697,9 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabyte{P "" s} vry
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Kan nie skyf lees nie
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Spel Bewaar Gedop
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Spel Bewaar Gedop{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Kan nie l�r uitwis nie
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Spel Laai Gedop
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Spel Laai Gedop{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Lys van skywe, voublaaie en spel-bewaar l�rs
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Huidige naam vir bewaarde-spel
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Uitwis die verkieste bewaarde-spel
--- a/src/lang/unfinished/croatian.txt	Sun Jun 24 10:20:05 2007 +0000
+++ b/src/lang/unfinished/croatian.txt	Sun Jun 24 12:27:11 2007 +0000
@@ -1828,9 +1828,9 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabajt{P "" a a} slobod{P an na no}
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Ne mogu pročitati disk
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Spremanje igre nije uspjelo
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Spremanje igre nije uspjelo{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Ne mogu obrisati datoteku
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Učitavanje igre nije uspjelo
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Učitavanje igre nije uspjelo{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Popis diskova, mapa i spremljenih datoteka
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Trenutno odabrano ime za spremanje igre
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Obriši trenutno odabranu spremljenu igru
--- a/src/lang/unfinished/frisian.txt	Sun Jun 24 10:20:05 2007 +0000
+++ b/src/lang/unfinished/frisian.txt	Sun Jun 24 12:27:11 2007 +0000
@@ -1048,9 +1048,9 @@
 STR_4003_DELETE                                                 :{BLACK}Fuortsmite
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Koe net fan 'e skiif lêze
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Opslaan Mislearre
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Opslaan Mislearre{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Kin triem net fuortsmite
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Laden Mislearre
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Laden Mislearre{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}List fan skiven, mappen en triemen
 STR_4011_LOAD_HEIGHTMAP                                         :{WHITE}Laad Hichtemap
 
--- a/src/lang/unfinished/greek.txt	Sun Jun 24 10:20:05 2007 +0000
+++ b/src/lang/unfinished/greek.txt	Sun Jun 24 12:27:11 2007 +0000
@@ -1557,9 +1557,9 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabyte{P "" s} ελεύθερα
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Αδύνατη η ανάγνωση του δίσκου
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Αποθήκευση Παιχνιδιού Απέτυχε
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Αποθήκευση Παιχνιδιού Απέτυχε{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Αδύνατη η διαγραφή του αρχείου
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Φόρτωση Παιχνιδιού Απέτυχε
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Φόρτωση Παιχνιδιού Απέτυχε{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Λίστα δίσκων, φακέλλων και αποθηκευμένων παιχνιδιών
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Τρέχον όνομα για το αποθηκευμένο παιχνίδι
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Διαγραφή του επιλεγμένου αποθηκευμένου παιχνιδιού
--- a/src/openttd.cpp	Sun Jun 24 10:20:05 2007 +0000
+++ b/src/openttd.cpp	Sun Jun 24 12:27:11 2007 +0000
@@ -740,7 +740,8 @@
 	/* invalid type */
 	if (_file_to_saveload.mode == SL_INVALID) {
 		DEBUG(sl, 0, "Savegame is obsolete or invalid format: '%s'", _file_to_saveload.name);
-		ShowErrorMessage(INVALID_STRING_ID, STR_4009_GAME_LOAD_FAILED, 0, 0);
+		SetDParamStr(0, GetSaveLoadErrorString());
+		ShowErrorMessage(INVALID_STRING_ID, STR_012D, 0, 0);
 		_game_mode = GM_MENU;
 		return;
 	}
@@ -755,7 +756,8 @@
 	/* Load game */
 	if (SaveOrLoad(_file_to_saveload.name, _file_to_saveload.mode, SCENARIO_DIR) != SL_OK) {
 		LoadIntroGame();
-		ShowErrorMessage(INVALID_STRING_ID, STR_4009_GAME_LOAD_FAILED, 0, 0);
+		SetDParamStr(0, GetSaveLoadErrorString());
+		ShowErrorMessage(INVALID_STRING_ID, STR_012D, 0, 0);
 	}
 
 	_opt_ptr = &_opt;
@@ -863,7 +865,8 @@
 
 		if (!SafeSaveOrLoad(_file_to_saveload.name, _file_to_saveload.mode, GM_NORMAL, NO_DIRECTORY)) {
 			LoadIntroGame();
-			ShowErrorMessage(INVALID_STRING_ID, STR_4009_GAME_LOAD_FAILED, 0, 0);
+			SetDParamStr(0, GetSaveLoadErrorString());
+			ShowErrorMessage(INVALID_STRING_ID, STR_012D, 0, 0);
 		} else {
 			/* Update the local player for a loaded game. It is either always
 			 * player #1 (eg 0) or in the case of a dedicated server a spectator */
@@ -901,7 +904,8 @@
 			SetLocalPlayer(OWNER_NONE);
 			_patches_newgame.starting_year = _cur_year;
 		} else {
-			ShowErrorMessage(INVALID_STRING_ID, STR_4009_GAME_LOAD_FAILED, 0, 0);
+			SetDParamStr(0, GetSaveLoadErrorString());
+			ShowErrorMessage(INVALID_STRING_ID, STR_012D, 0, 0);
 		}
 		break;
 	}
@@ -912,7 +916,8 @@
 
 	case SM_SAVE: /* Save game */
 		if (SaveOrLoad(_file_to_saveload.name, SL_SAVE, NO_DIRECTORY) != SL_OK) {
-			ShowErrorMessage(INVALID_STRING_ID, STR_4007_GAME_SAVE_FAILED, 0, 0);
+			SetDParamStr(0, GetSaveLoadErrorString());
+			ShowErrorMessage(INVALID_STRING_ID, STR_012D, 0, 0);
 		} else {
 			DeleteWindowById(WC_SAVELOAD, 0);
 		}
@@ -1268,7 +1273,10 @@
 
 	/* Check if all NewGRFs are present, we are very strict in MP mode */
 	GRFListCompatibility gcf_res = IsGoodGRFConfigList();
-	if (_networking && gcf_res != GLC_ALL_GOOD) return false;
+	if (_networking && gcf_res != GLC_ALL_GOOD) {
+		SetSaveLoadError(STR_NETWORK_ERR_CLIENT_NEWGRF_MISMATCH);
+		return false;
+	}
 
 	switch (gcf_res) {
 		case GLC_COMPATIBLE: _switch_mode_errorstr = STR_NEWGRF_COMPATIBLE_LOAD_WARNING; break;
@@ -1313,7 +1321,7 @@
 
 	/* make sure there is a town in the game */
 	if (_game_mode == GM_NORMAL && !ClosestTownFromTile(0, (uint)-1)) {
-		_error_message = STR_NO_TOWN_IN_SCENARIO;
+		SetSaveLoadError(STR_NO_TOWN_IN_SCENARIO);
 		return false;
 	}
 
--- a/src/saveload.cpp	Sun Jun 24 10:20:05 2007 +0000
+++ b/src/saveload.cpp	Sun Jun 24 12:27:11 2007 +0000
@@ -26,6 +26,8 @@
 #include "saveload.h"
 #include "network/network.h"
 #include "variables.h"
+#include "table/strings.h"
+#include "strings.h"
 #include <setjmp.h>
 #include <list>
 
@@ -65,7 +67,8 @@
 	FILE *fh;                            ///< the file from which is read or written to
 
 	void (*excpt_uninit)();              ///< the function to execute on any encountered error
-	const char *excpt_msg;               ///< the error message
+	StringID error_str;                  ///< the translateable error message to show
+	char *extra_msg;                     ///< the error message
 	jmp_buf excpt;                       ///< @todo used to jump to "exception handler";  really ugly
 } _sl;
 
@@ -136,9 +139,11 @@
 /** Error handler, calls longjmp to simulate an exception.
  * @todo this was used to have a central place to handle errors, but it is
  * pretty ugly, and seriously interferes with any multithreaded approaches */
-static void NORETURN SlError(const char *msg)
+static void NORETURN SlError(StringID string, const char *extra_msg = NULL)
 {
-	_sl.excpt_msg = msg;
+	_sl.error_str = string;
+	free(_sl.extra_msg);
+	_sl.extra_msg = (extra_msg == NULL) ? NULL : strdup(extra_msg);
 	longjmp(_sl.excpt, 0);
 }
 
@@ -224,7 +229,7 @@
 			if (HASBIT(i, 5)) {
 				i &= ~0x20;
 				if (HASBIT(i, 4))
-					SlError("Unsupported gamma");
+					SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME, "Unsupported gamma");
 				i = (i << 8) | SlReadByte();
 			}
 			i = (i << 8) | SlReadByte();
@@ -859,7 +864,7 @@
 	/* And write the stuff */
 	proc(arg);
 
-	assert(offs == SlGetOffs());
+	if (offs != SlGetOffs()) SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME, "Invalid chunk size");
 }
 
 /**
@@ -891,9 +896,9 @@
 			_sl.obj_len = len;
 			endoffs = SlGetOffs() + len;
 			ch->load_proc();
-			assert(SlGetOffs() == endoffs);
+			if (SlGetOffs() != endoffs) SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME, "Invalid chunk size");
 		} else {
-			SlError("Invalid chunk type");
+			SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME, "Invalid chunk type");
 		}
 		break;
 	}
@@ -994,7 +999,7 @@
 		DEBUG(sl, 2, "Loading chunk %c%c%c%c", id >> 24, id >> 16, id >> 8, id);
 
 		ch = SlFindChunkHandler(id);
-		if (ch == NULL) SlError("found unknown tag in savegame (sync error)");
+		if (ch == NULL) SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME, "Unknown chunk type");
 		SlLoadChunk(ch);
 	}
 }
@@ -1014,7 +1019,7 @@
 	uint len;
 
 	/* Read header*/
-	if (fread(tmp, sizeof(tmp), 1, _sl.fh) != 1) SlError("file read failed");
+	if (fread(tmp, sizeof(tmp), 1, _sl.fh) != 1) SlError(STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE, "File read failed");
 
 	/* Check if size is bad */
 	((uint32*)out)[0] = size = tmp[1];
@@ -1024,13 +1029,13 @@
 		size = TO_BE32(size);
 	}
 
-	if (size >= sizeof(out)) SlError("inconsistent size");
+	if (size >= sizeof(out)) SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME, "Inconsistent size");
 
 	/* Read block */
-	if (fread(out + sizeof(uint32), size, 1, _sl.fh) != 1) SlError("file read failed");
+	if (fread(out + sizeof(uint32), size, 1, _sl.fh) != 1) SlError(STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE);
 
 	/* Verify checksum */
-	if (tmp[0] != lzo_adler32(0, out, size + sizeof(uint32))) SlError("bad checksum");
+	if (tmp[0] != lzo_adler32(0, out, size + sizeof(uint32))) SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME, "Bad checksum");
 
 	/* Decompress */
 	lzo1x_decompress(out + sizeof(uint32)*1, size, _sl.buf, &len, NULL);
@@ -1048,7 +1053,7 @@
 	lzo1x_1_compress(_sl.buf, size, out + sizeof(uint32)*2, &outlen, wrkmem);
 	((uint32*)out)[1] = TO_BE32(outlen);
 	((uint32*)out)[0] = TO_BE32(lzo_adler32(0, out + sizeof(uint32), outlen + sizeof(uint32)));
-	if (fwrite(out, outlen + sizeof(uint32)*2, 1, _sl.fh) != 1) SlError("file write failed");
+	if (fwrite(out, outlen + sizeof(uint32)*2, 1, _sl.fh) != 1) SlError(STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE);
 }
 
 static bool InitLZO()
@@ -1092,7 +1097,6 @@
  ********** START OF MEMORY CODE (in ram)****
  ********************************************/
 
-#include "table/strings.h"
 #include "table/sprites.h"
 #include "gfx.h"
 #include "gui.h"
@@ -1171,8 +1175,7 @@
 		if (r == Z_STREAM_END)
 			break;
 
-		if (r != Z_OK)
-			SlError("inflate() failed");
+		if (r != Z_OK) SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR, "inflate() failed");
 	} while (_z.avail_out);
 
 	return 4096 - _z.avail_out;
@@ -1207,11 +1210,11 @@
 		r = deflate(z, mode);
 			/* bytes were emitted? */
 		if ((n=sizeof(buf) - z->avail_out) != 0) {
-			if (fwrite(buf, n, 1, _sl.fh) != 1) SlError("file write error");
+			if (fwrite(buf, n, 1, _sl.fh) != 1) SlError(STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE);
 		}
 		if (r == Z_STREAM_END)
 			break;
-		if (r != Z_OK) SlError("zlib returned error code");
+		if (r != Z_OK) SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR, "zlib returned error code");
 	} while (z->avail_in || !z->avail_out);
 }
 
@@ -1476,10 +1479,28 @@
 	_ts.saveinprogress = false;
 }
 
+/** Set the error message from outside of the actual loading/saving of the game (AfterLoadGame and friends) */
+void SetSaveLoadError(StringID str)
+{
+	_sl.error_str = str;
+}
+
+/** Get the string representation of the error message */
+const char *GetSaveLoadErrorString()
+{
+	SetDParam(0, _sl.error_str);
+	SetDParamStr(1, _sl.extra_msg);
+
+	static char err_str[512];
+	GetString(err_str, _sl.save ? STR_4007_GAME_SAVE_FAILED : STR_4009_GAME_LOAD_FAILED, lastof(err_str));
+	return err_str;
+}
+
 /** Show a gui message when saving has failed */
 void SaveFileError()
 {
-	ShowErrorMessage(STR_4007_GAME_SAVE_FAILED, STR_NULL, 0, 0);
+	SetDParamStr(0, GetSaveLoadErrorString());
+	ShowErrorMessage(STR_012D, STR_NULL, 0, 0);
 	SaveFileDone();
 }
 
@@ -1493,13 +1514,16 @@
 	const SaveLoadFormat *fmt;
 	uint32 hdr[2];
 
+	_sl.excpt_uninit = NULL;
 	/* XXX - Setup setjmp error handler if an error occurs anywhere deep during
 	 * loading/saving execute a longjmp() and continue execution here */
 	if (setjmp(_sl.excpt)) {
 		AbortSaveLoad();
-		_sl.excpt_uninit();
+		if (_sl.excpt_uninit != NULL) _sl.excpt_uninit();
 
-		fprintf(stderr, "Save game failed: %s.", _sl.excpt_msg);
+		ShowInfo(GetSaveLoadErrorString());
+		fprintf(stderr, GetSaveLoadErrorString());
+
 		if (threaded) {
 			OTTD_SendThreadMessage(MSG_OTTD_SAVETHREAD_ERROR);
 		} else {
@@ -1513,9 +1537,9 @@
 	/* We have written our stuff to memory, now write it to file! */
 	hdr[0] = fmt->tag;
 	hdr[1] = TO_BE32(SAVEGAME_VERSION << 16);
-	if (fwrite(hdr, sizeof(hdr), 1, _sl.fh) != 1) SlError("file write failed");
+	if (fwrite(hdr, sizeof(hdr), 1, _sl.fh) != 1) SlError(STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE);
 
-	if (!fmt->init_write()) SlError("cannot initialize compressor");
+	if (!fmt->init_write()) SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR, "cannot initialize compressor");
 
 	{
 		uint i;
@@ -1584,6 +1608,22 @@
 		return SL_OK;
 	}
 
+	/* XXX - Setup setjmp error handler if an error occurs anywhere deep during
+	 * loading/saving execute a longjmp() and continue execution here */
+	_sl.excpt_uninit = NULL;
+	if (setjmp(_sl.excpt)) {
+		AbortSaveLoad();
+
+		/* deinitialize compressor. */
+		if (_sl.excpt_uninit != NULL) _sl.excpt_uninit();
+
+		/* Skip the "color" character */
+		ShowInfoF(GetSaveLoadErrorString() + 3);
+
+		/* A saver/loader exception!! reinitialize all variables to prevent crash! */
+		return (mode == SL_LOAD) ? SL_REINIT : SL_ERROR;
+	}
+
 	_sl.fh = (mode == SL_SAVE) ? FioFOpenFile(filename, "wb", sb) : FioFOpenFile(filename, "rb", sb);
 
 	/* Make it a little easier to load savegames from the console */
@@ -1591,8 +1631,7 @@
 	if (_sl.fh == NULL && mode == SL_LOAD) _sl.fh = FioFOpenFile(filename, "rb", BASE_DIR);
 
 	if (_sl.fh == NULL) {
-		DEBUG(sl, 0, "Cannot open savegame '%s' for saving/loading.", filename);
-		return SL_ERROR;
+		SlError(mode == SL_SAVE ? STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE : STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE);
 	}
 
 	_sl.bufe = _sl.bufp = NULL;
@@ -1601,24 +1640,6 @@
 	_sl.includes = _desc_includes;
 	_sl.chs = _chunk_handlers;
 
-	/* XXX - Setup setjmp error handler if an error occurs anywhere deep during
-	 * loading/saving execute a longjmp() and continue execution here */
-	if (setjmp(_sl.excpt)) {
-		AbortSaveLoad();
-
-		/* deinitialize compressor. */
-		_sl.excpt_uninit();
-
-		/* A saver/loader exception!! reinitialize all variables to prevent crash! */
-		if (mode == SL_LOAD) {
-			ShowInfoF("Load game failed: %s.", _sl.excpt_msg);
-			return SL_REINIT;
-		}
-
-		ShowInfoF("Save game failed: %s.", _sl.excpt_msg);
-		return SL_ERROR;
-	}
-
 	/* General tactic is to first save the game to memory, then use an available writer
 	 * to write it to file, either in threaded mode if possible, or single-threaded */
 	if (mode == SL_SAVE) { /* SAVE game */
@@ -1650,10 +1671,7 @@
 	} else { /* LOAD game */
 		assert(mode == SL_LOAD);
 
-		if (fread(hdr, sizeof(hdr), 1, _sl.fh) != 1) {
-			DEBUG(sl, 0, "Cannot read savegame header, aborting");
-			return AbortSaveLoad();
-		}
+		if (fread(hdr, sizeof(hdr), 1, _sl.fh) != 1) SlError(STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE);
 
 		/* see if we have any loader for this type. */
 		for (fmt = _saveload_formats; ; fmt++) {
@@ -1685,10 +1703,7 @@
 				DEBUG(sl, 1, "Loading savegame version %d", _sl_version);
 
 				/* Is the version higher than the current? */
-				if (_sl_version > SAVEGAME_VERSION) {
-					DEBUG(sl, 0, "Savegame version invalid");
-					return AbortSaveLoad();
-				}
+				if (_sl_version > SAVEGAME_VERSION) SlError(STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME);
 				break;
 			}
 		}
@@ -1698,13 +1713,15 @@
 
 		/* loader for this savegame type is not implemented? */
 		if (fmt->init_read == NULL) {
-			ShowInfoF("Loader for '%s' is not available.", fmt->name);
-			return AbortSaveLoad();
+			char err_str[64];
+			snprintf(err_str, lengthof(err_str), "Loader for '%s' is not available.", fmt->name);
+			SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR, err_str);
 		}
 
 		if (!fmt->init_read()) {
-			DEBUG(sl, 0, "Initializing loader '%s' failed", fmt->name);
-			return AbortSaveLoad();
+			char err_str[64];
+			snprintf(err_str, lengthof(err_str), "Initializing loader '%s' failed", fmt->name);
+			SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR, err_str);
 		}
 
 		/* Old maps were hardcoded to 256x256 and thus did not contain
--- a/src/saveload.h	Sun Jun 24 10:20:05 2007 +0000
+++ b/src/saveload.h	Sun Jun 24 12:27:11 2007 +0000
@@ -28,6 +28,8 @@
 	SL_BMP      =  4,
 };
 
+void SetSaveLoadError(uint16 str);
+const char *GetSaveLoadErrorString();
 SaveOrLoadResult SaveOrLoad(const char *filename, int mode, Subdirectory sb);
 void WaitTillSaved();
 void DoExitSave();