diff --git a/desktop_version/lang/ca/strings.xml b/desktop_version/lang/ca/strings.xml index a7c1e7b6..0bc289cc 100644 --- a/desktop_version/lang/ca/strings.xml +++ b/desktop_version/lang/ca/strings.xml @@ -758,9 +758,11 @@ Has trobat el laboratori secret!" explanation="" max="34*4"/> + + diff --git a/desktop_version/lang/de/strings.xml b/desktop_version/lang/de/strings.xml index 0c9a6088..a51355a9 100644 --- a/desktop_version/lang/de/strings.xml +++ b/desktop_version/lang/de/strings.xml @@ -758,9 +758,11 @@ Du hast das Geheimlabor gefunden!" explanation="" max="34*4"/> + + diff --git a/desktop_version/lang/en/strings.xml b/desktop_version/lang/en/strings.xml index d8b253ad..43ca393d 100644 --- a/desktop_version/lang/en/strings.xml +++ b/desktop_version/lang/en/strings.xml @@ -752,9 +752,11 @@ You have found the secret lab!" translation="" explanation="" max="34*4"/> + + diff --git a/desktop_version/lang/eo/strings.xml b/desktop_version/lang/eo/strings.xml index 42786a05..d49c5211 100644 --- a/desktop_version/lang/eo/strings.xml +++ b/desktop_version/lang/eo/strings.xml @@ -758,9 +758,11 @@ Vi trovis la sekretan labon!" explanation="" max="34*4"/> + + diff --git a/desktop_version/lang/es/strings.xml b/desktop_version/lang/es/strings.xml index 4f1a608c..d576cc5c 100644 --- a/desktop_version/lang/es/strings.xml +++ b/desktop_version/lang/es/strings.xml @@ -758,9 +758,11 @@ You have found the secret lab!" translation="¡Enhorabuena! + + diff --git a/desktop_version/lang/fr/strings.xml b/desktop_version/lang/fr/strings.xml index 45b4f1d3..98142709 100644 --- a/desktop_version/lang/fr/strings.xml +++ b/desktop_version/lang/fr/strings.xml @@ -752,9 +752,11 @@ You have found the secret lab!" translation="Félicitations ! Vous avez trouvé + + diff --git a/desktop_version/lang/it/strings.xml b/desktop_version/lang/it/strings.xml index b3d141a1..5786d877 100644 --- a/desktop_version/lang/it/strings.xml +++ b/desktop_version/lang/it/strings.xml @@ -758,9 +758,11 @@ Hai trovato il laboratorio segreto!" explanation="" max="34*4"/> + + diff --git a/desktop_version/lang/nl/strings.xml b/desktop_version/lang/nl/strings.xml index 596df43f..575cd9d9 100644 --- a/desktop_version/lang/nl/strings.xml +++ b/desktop_version/lang/nl/strings.xml @@ -759,9 +759,11 @@ Je hebt het geheime lab gevonden!" explanation="" max="34*4"/> + + diff --git a/desktop_version/lang/pt_BR/strings.xml b/desktop_version/lang/pt_BR/strings.xml index 5741019c..ea7a8ebb 100644 --- a/desktop_version/lang/pt_BR/strings.xml +++ b/desktop_version/lang/pt_BR/strings.xml @@ -758,9 +758,11 @@ Você encontrou o laboratório secreto!" explanation="" max="34*4"/> + + diff --git a/desktop_version/lang/pt_PT/strings.xml b/desktop_version/lang/pt_PT/strings.xml index d45be62a..497f9e93 100644 --- a/desktop_version/lang/pt_PT/strings.xml +++ b/desktop_version/lang/pt_PT/strings.xml @@ -758,9 +758,11 @@ Encontraste o laboratório secreto!" explanation="" max="34*4"/> + + diff --git a/desktop_version/lang/ru/strings.xml b/desktop_version/lang/ru/strings.xml index 4087ce05..4cefc76a 100644 --- a/desktop_version/lang/ru/strings.xml +++ b/desktop_version/lang/ru/strings.xml @@ -758,9 +758,11 @@ You have found the secret lab!" translation="Поздравляем! + + diff --git a/desktop_version/lang/tr/strings.xml b/desktop_version/lang/tr/strings.xml index 25f93588..38389b73 100644 --- a/desktop_version/lang/tr/strings.xml +++ b/desktop_version/lang/tr/strings.xml @@ -758,9 +758,11 @@ Gizli laboratuvarı buldun!" explanation="" max="34*4"/> + + diff --git a/desktop_version/src/Font.cpp b/desktop_version/src/Font.cpp index d08e9cb8..be746997 100644 --- a/desktop_version/src/Font.cpp +++ b/desktop_version/src/Font.cpp @@ -20,7 +20,7 @@ extern "C" } // Sigh... This is the second forward-declaration, we need to put this in a header file -SDL_Texture* LoadImage(const char *filename, const TextureLoadType loadtype); +SDL_Texture* LoadImage(const char *filename, TextureLoadType loadtype); namespace font { diff --git a/desktop_version/src/Graphics.cpp b/desktop_version/src/Graphics.cpp index 80a34b9a..a076db86 100644 --- a/desktop_version/src/Graphics.cpp +++ b/desktop_version/src/Graphics.cpp @@ -151,9 +151,6 @@ void Graphics::init(void) levelcomplete_mounted = false; flipgamecomplete_mounted = false; fliplevelcomplete_mounted = false; - - SDL_zeroa(error); - SDL_zeroa(error_title); } void Graphics::destroy(void) @@ -238,65 +235,6 @@ void Graphics::updatetitlecolours(void) col_trinket = getcol(18); } -#define PROCESS_TILESHEET_CHECK_ERROR(tilesheet, tile_square) \ - if (grphx.im_##tilesheet == NULL) \ - { \ - /* We have already asserted; just no-op. */ \ - } \ - else if (grphx.im_##tilesheet->w % tile_square != 0 \ - || grphx.im_##tilesheet->h % tile_square != 0) \ - { \ - static const char error_fmt[] = "%s.png dimensions not exact multiples of %i!"; \ - static const char error_title_fmt[] = "Error with %s.png"; \ - \ - SDL_snprintf(error, sizeof(error), error_fmt, #tilesheet, tile_square); \ - SDL_snprintf(error_title, sizeof(error_title), error_title_fmt, #tilesheet); \ - \ - vlog_error("%s", error); \ - \ - return false; \ - } - -#define PROCESS_TILESHEET_RENAME(tilesheet, vector, tile_square, extra_code) \ - PROCESS_TILESHEET_CHECK_ERROR(tilesheet, tile_square) \ - \ - else \ - { \ - int j; \ - for (j = 0; j < grphx.im_##tilesheet->h / tile_square; ++j) \ - { \ - int i; \ - for (i = 0; i < grphx.im_##tilesheet->w / tile_square; ++i) \ - { \ - SDL_Surface* temp = GetSubSurface( \ - grphx.im_##tilesheet, \ - i * tile_square, j * tile_square, \ - tile_square, tile_square \ - ); \ - vector.push_back(temp); \ - \ - extra_code \ - } \ - } \ - \ - VVV_freefunc(SDL_FreeSurface, grphx.im_##tilesheet); \ - } - -#define PROCESS_TILESHEET(tilesheet, tile_square, extra_code) \ - PROCESS_TILESHEET_RENAME(tilesheet, tilesheet, tile_square, extra_code) - -bool Graphics::MakeSpriteArray(void) -{ - PROCESS_TILESHEET(sprites_surf, 32, {}) - PROCESS_TILESHEET(flipsprites_surf, 32, {}) - - return true; -} - -#undef PROCESS_TILESHEET -#undef PROCESS_TILESHEET_RENAME -#undef PROCESS_TILESHEET_CHECK_ERROR - void Graphics::map_tab(int opt, const char* text, bool selected /*= false*/) { @@ -3433,14 +3371,76 @@ bool Graphics::onscreen(int t) return (t >= -40 && t <= 280); } +bool Graphics::checktexturesize( + const char* filename, SDL_Texture* texture, + const int tilewidth, const int tileheight +) { + int texturewidth; + int textureheight; + if (query_texture(texture, NULL, NULL, &texturewidth, &textureheight) != 0) + { + /* Just give it the benefit of the doubt. */ + vlog_warn( + "Assuming the dimensions of %s are exact multiples of %i by %i!", + filename, tilewidth, tileheight + ); + return true; + } + + const bool valid = texturewidth % tilewidth == 0 && textureheight % tileheight == 0; + if (!valid) + { + FILESYSTEM_setLevelDirError( + loc::gettext("{filename} dimensions not exact multiples of {width} by {height}!"), + "filename:str, width:int, height:int", + filename, tilewidth, tileheight + ); + return false; + } + + return true; +} + +static void make_array( + SDL_Surface** tilesheet, + std::vector& vector, + const int tile_square +) { + int j; + for (j = 0; j < (*tilesheet)->h / tile_square; j++) + { + int i; + for (i = 0; i < (*tilesheet)->w / tile_square; i++) + { + SDL_Surface* temp = GetSubSurface( + *tilesheet, + i * tile_square, j * tile_square, + tile_square, tile_square + ); + vector.push_back(temp); + } + } + + VVV_freefunc(SDL_FreeSurface, *tilesheet); +} + bool Graphics::reloadresources(void) { grphx.destroy(); grphx.init(); + MAYBE_FAIL(checktexturesize("tiles.png", grphx.im_tiles, 8, 8)); + MAYBE_FAIL(checktexturesize("tiles2.png", grphx.im_tiles2, 8, 8)); + MAYBE_FAIL(checktexturesize("tiles3.png", grphx.im_tiles3, 8, 8)); + MAYBE_FAIL(checktexturesize("entcolours.png", grphx.im_entcolours, 8, 8)); + MAYBE_FAIL(checktexturesize("sprites.png", grphx.im_sprites, 32, 32)); + MAYBE_FAIL(checktexturesize("flipsprites.png", grphx.im_flipsprites, 32, 32)); + MAYBE_FAIL(checktexturesize("teleporter.png", grphx.im_teleporter, 96, 96)); + destroy(); - MAYBE_FAIL(MakeSpriteArray()); + make_array(&grphx.im_sprites_surf, sprites_surf, 32); + make_array(&grphx.im_flipsprites_surf, flipsprites_surf, 32); images[IMAGE_LEVELCOMPLETE] = grphx.im_image0; images[IMAGE_MINIMAP] = grphx.im_image1; diff --git a/desktop_version/src/Graphics.h b/desktop_version/src/Graphics.h index ae104537..8d3276fa 100644 --- a/desktop_version/src/Graphics.h +++ b/desktop_version/src/Graphics.h @@ -56,8 +56,6 @@ public: void drawgravityline(int t); - bool MakeSpriteArray(void); - void drawcoloredtile(int x, int y, int t, int r, int g, int b); void drawmenu(int cr, int cg, int cb, enum Menu::MenuName menu); @@ -275,6 +273,10 @@ public: bool onscreen(int t); bool reloadresources(void); + bool checktexturesize( + const char* filename, SDL_Texture* texture, + int tilewidth, int tileheight + ); #ifndef NO_CUSTOM_LEVELS bool tiles1_mounted; bool tiles2_mounted; @@ -402,9 +404,6 @@ public: SDL_Color crewcolourreal(int t); void render_roomname(uint32_t font_flag, const char* roomname, int r, int g, int b); - - char error[128]; - char error_title[128]; /* for SDL_ShowSimpleMessageBox */ }; #ifndef GRAPHICS_DEFINITION diff --git a/desktop_version/src/Render.cpp b/desktop_version/src/Render.cpp index e7cf86d5..8f6e416d 100644 --- a/desktop_version/src/Render.cpp +++ b/desktop_version/src/Render.cpp @@ -1626,23 +1626,34 @@ static void menurender(void) break; case Menu::errorloadinglevel: { - const char* str; + const char* message; if (FILESYSTEM_levelDirHasError()) { - str = FILESYSTEM_getLevelDirError(); + message = FILESYSTEM_getLevelDirError(); } else { - str = graphics.error; + message = loc::gettext("Something went wrong, but we forgot to print an error message."); } font::print(PR_2X | PR_CEN, -1, 45, loc::gettext("ERROR"), tr, tg, tb); - font::print_wrap(PR_CEN, -1, 65, str, tr, tg, tb); + font::print_wrap(PR_CEN, -1, 65, message, tr, tg, tb); break; } case Menu::warninglevellist: + { + const char* message; + if (FILESYSTEM_levelDirHasError()) + { + message = FILESYSTEM_getLevelDirError(); + } + else + { + message = loc::gettext("Something went wrong, but we forgot to print an error message."); + } font::print(PR_2X | PR_CEN, -1, 45, loc::gettext("WARNING"), tr, tg, tb); - font::print_wrap(PR_CEN, -1, 65, FILESYSTEM_getLevelDirError(), tr, tg, tb); + font::print_wrap(PR_CEN, -1, 65, message, tr, tg, tb); break; + } default: break; } diff --git a/desktop_version/src/main.cpp b/desktop_version/src/main.cpp index 80323d4b..017beb37 100644 --- a/desktop_version/src/main.cpp +++ b/desktop_version/src/main.cpp @@ -658,12 +658,16 @@ int main(int argc, char *argv[]) { /* Something wrong with the default assets? We can't use them to * display the error message, and we have to bail. */ - SDL_ShowSimpleMessageBox( - SDL_MESSAGEBOX_ERROR, - graphics.error_title, - graphics.error, - NULL - ); + const char* message; + if (FILESYSTEM_levelDirHasError()) + { + message = FILESYSTEM_getLevelDirError(); + } + else + { + message = loc::gettext("Something went wrong, but we forgot to print an error message."); + } + SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, "Error", message, NULL); VVV_exit(1); }