From 61ccfaac7768e5a6b50606e907e7a174dd8fd967 Mon Sep 17 00:00:00 2001 From: Tobias Markus Date: Thu, 20 Nov 2014 22:01:46 +0100 Subject: [PATCH 01/21] Fix errors in src/ that cppcheck yielded with the default configuration --- src/graphics/gpuparticles.cpp | 27 +++++++++++++++++++++------ src/input/wiimote.cpp | 2 +- src/input/wiimote_manager.cpp | 4 ++-- src/io/file_manager.cpp | 7 ++++++- src/race/history.cpp | 2 +- src/replay/replay_play.cpp | 8 ++++---- 6 files changed, 35 insertions(+), 15 deletions(-) diff --git a/src/graphics/gpuparticles.cpp b/src/graphics/gpuparticles.cpp index c9b1370c9..e873fe11e 100644 --- a/src/graphics/gpuparticles.cpp +++ b/src/graphics/gpuparticles.cpp @@ -128,8 +128,13 @@ void generateLifetimeSizeDirection(scene::IParticleEmitter *emitter, float &life void ParticleSystemProxy::generateParticlesFromPointEmitter(scene::IParticlePointEmitter *emitter) { - ParticleParams = (ParticleData *) realloc(ParticleParams, sizeof(ParticleData) * count); - InitialValues = (ParticleData *)realloc(InitialValues, sizeof(ParticleData)* count); + ParticleData* ParticleParamsTmp = (ParticleData *) realloc(ParticleParams, sizeof(ParticleData) * count); + ParticleData* InitialValuesTmp = (ParticleData *)realloc(InitialValues, sizeof(ParticleData)* count); + + if(ParticleParamsTmp != NULL) // In case memory allocation succeeded + ParticleParams = ParticleParamsTmp; + if(InitialValuesTmp != NULL) + InitialValues = InitialValuesTmp; for (unsigned i = 0; i < count; i++) { @@ -150,8 +155,13 @@ void ParticleSystemProxy::generateParticlesFromPointEmitter(scene::IParticlePoin void ParticleSystemProxy::generateParticlesFromBoxEmitter(scene::IParticleBoxEmitter *emitter) { - ParticleParams = (ParticleData *)realloc(ParticleParams, sizeof(ParticleData)* count); - InitialValues = (ParticleData *)realloc(InitialValues, sizeof(ParticleData)* count); + ParticleData* ParticleParamsTmp = (ParticleData *) realloc(ParticleParams, sizeof(ParticleData) * count); + ParticleData* InitialValuesTmp = (ParticleData *)realloc(InitialValues, sizeof(ParticleData)* count); + + if(ParticleParamsTmp != NULL) // In case memory allocation succeeded + ParticleParams = ParticleParamsTmp; + if(InitialValuesTmp != NULL) + InitialValues = InitialValuesTmp; const core::vector3df& extent = emitter->getBox().getExtent(); @@ -177,8 +187,13 @@ void ParticleSystemProxy::generateParticlesFromBoxEmitter(scene::IParticleBoxEmi void ParticleSystemProxy::generateParticlesFromSphereEmitter(scene::IParticleSphereEmitter *emitter) { - ParticleParams = (ParticleData *)realloc(ParticleParams, sizeof(ParticleData)* count); - InitialValues = (ParticleData *)realloc(InitialValues, sizeof(ParticleData)* count); + ParticleData* ParticleParamsTmp = (ParticleData *) realloc(ParticleParams, sizeof(ParticleData) * count); + ParticleData* InitialValuesTmp = (ParticleData *)realloc(InitialValues, sizeof(ParticleData)* count); + + if(ParticleParamsTmp != NULL) // In case memory allocation succeeded + ParticleParams = ParticleParamsTmp; + if(InitialValuesTmp != NULL) + InitialValues = InitialValuesTmp; for (unsigned i = 0; i < count; i++) { // Random distance from center diff --git a/src/input/wiimote.cpp b/src/input/wiimote.cpp index f9de58a1e..eae2adbd8 100644 --- a/src/input/wiimote.cpp +++ b/src/input/wiimote.cpp @@ -44,7 +44,7 @@ Wiimote::Wiimote(wiimote_t* wiimote_handle, int wiimote_id, gamepad_config->setPlugged(); // Determine number of bits in the bit mask of all buttons. - int button_count = (int)( log((float)WIIMOTE_BUTTON_ALL) / log(2.0f))+1; + int button_count = (int)( log((float)WIIMOTE_BUTTON_ALL) / log((float)2.0f))+1; m_gamepad_device = new GamePadDevice(getIrrId(), gamepad_name.c_str(), diff --git a/src/input/wiimote_manager.cpp b/src/input/wiimote_manager.cpp index 32663fdfd..041416e69 100644 --- a/src/input/wiimote_manager.cpp +++ b/src/input/wiimote_manager.cpp @@ -164,7 +164,7 @@ void WiimoteManager::launchDetection(int timeout) device_manager->getConfigForGamepad(WIIMOTE_START_IRR_ID, "Wiimote", &gamepad_config); - int num_buttons = (int)( log((float)WIIMOTE_BUTTON_ALL) / log(2.0f))+1; + int num_buttons = (int)( log((float)WIIMOTE_BUTTON_ALL) / log((float)2.0f))+1; gamepad_config->setNumberOfButtons(num_buttons); gamepad_config->setNumberOfAxis(1); @@ -213,7 +213,7 @@ void WiimoteManager::launchDetection(int timeout) */ int getButton(int n) { - return (int)(log((float)n)/log(2.0f)); + return (int)(log((float)n)/log((float)2.0f)); } // getButton // ---------------------------------------------------------------------------- diff --git a/src/io/file_manager.cpp b/src/io/file_manager.cpp index 353b1681e..84abaa736 100644 --- a/src/io/file_manager.cpp +++ b/src/io/file_manager.cpp @@ -1284,7 +1284,12 @@ bool FileManager::copyFile(const std::string &source, const std::string &dest) const int BUFFER_SIZE=32768; char *buffer = new char[BUFFER_SIZE]; - if(!buffer) return false; + if(!buffer) + { + fclose(f_source); + fclose(f_dest); + return false; + } size_t n; while((n=fread(buffer, 1, BUFFER_SIZE, f_source))>0) { diff --git a/src/race/history.cpp b/src/race/history.cpp index 17cf3110e..54f8e5d87 100644 --- a/src/race/history.cpp +++ b/src/race/history.cpp @@ -253,7 +253,7 @@ void History::Load() Log::fatal("History", "Could not read history.dat."); unsigned int num_karts; - if(sscanf(s, "numkarts: %d",&num_karts)!=1) + if(sscanf(s, "numkarts: %d",(int) &num_karts)!=1) Log::fatal("History", "No number of karts found in history file."); race_manager->setNumKarts(num_karts); diff --git a/src/replay/replay_play.cpp b/src/replay/replay_play.cpp index a3af26002..3c6714c26 100644 --- a/src/replay/replay_play.cpp +++ b/src/replay/replay_play.cpp @@ -100,7 +100,7 @@ void ReplayPlay::Load() Log::fatal("Replay", "Could not read '%s'.", getReplayFilename().c_str()); unsigned int version; - if (sscanf(s,"Version: %d", &version) != 1) + if (sscanf(s,"Version: %d", (int*)&version) != 1) Log::fatal("Replay", "No Version information found in replay file (bogus replay file)."); if (version != getReplayVersion()) @@ -130,7 +130,7 @@ void ReplayPlay::Load() unsigned int num_laps; fgets(s, 1023, fd); - if(sscanf(s, "Laps: %d", &num_laps) != 1) + if(sscanf(s, "Laps: %d", (int*)&num_laps) != 1) Log::fatal("Replay", "No number of laps found in replay file."); race_manager->setNumLaps(num_laps); @@ -164,7 +164,7 @@ void ReplayPlay::readKartData(FILE *fd, char *next_line) fgets(s, 1023, fd); unsigned int size; - if(sscanf(s,"size: %d",&size)!=1) + if(sscanf(s,"size: %d",(int*)&size)!=1) Log::fatal("Replay", "Number of records not found in replay file " "for kart %d.", m_ghost_karts.size()-1); @@ -198,7 +198,7 @@ void ReplayPlay::readKartData(FILE *fd, char *next_line) } // for i fgets(s, 1023, fd); unsigned int num_events; - if(sscanf(s,"events: %d",&num_events)!=1) + if(sscanf(s,"events: %d",(int*)&num_events)!=1) Log::warn("Replay", "Number of events not found in replay file " "for kart %d.", m_ghost_karts.size()-1); From 416c97bf0eeb600b015f5fc302557988194727fb Mon Sep 17 00:00:00 2001 From: Tobias Markus Date: Thu, 20 Nov 2014 22:20:45 +0100 Subject: [PATCH 02/21] Fix last error --- src/graphics/irr_driver.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/graphics/irr_driver.cpp b/src/graphics/irr_driver.cpp index 4e48cdd72..b9463d8c8 100644 --- a/src/graphics/irr_driver.cpp +++ b/src/graphics/irr_driver.cpp @@ -1185,7 +1185,7 @@ scene::IMesh *IrrDriver::createQuadMesh(const video::SMaterial *material, { video::S3DVertex v; v.Pos = core::vector3df(0,0,0); - v.Normal = core::vector3df(1/sqrt(2.0f), 1/sqrt(2.0f), 0); + v.Normal = core::vector3df(1/sqrt(2.0), 1/sqrt(2.0), 0); // Add the vertices // ---------------- From 22c22b864a1adf1d8ee46a9b11f2d2866b6d0ef1 Mon Sep 17 00:00:00 2001 From: Tobias Markus Date: Thu, 20 Nov 2014 23:15:05 +0100 Subject: [PATCH 03/21] Fix further issues --- src/race/history.cpp | 2 +- src/replay/replay_play.cpp | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/race/history.cpp b/src/race/history.cpp index 54f8e5d87..599ff26fd 100644 --- a/src/race/history.cpp +++ b/src/race/history.cpp @@ -253,7 +253,7 @@ void History::Load() Log::fatal("History", "Could not read history.dat."); unsigned int num_karts; - if(sscanf(s, "numkarts: %d",(int) &num_karts)!=1) + if(sscanf(s, "numkarts: %d",(int*) &num_karts)!=1) Log::fatal("History", "No number of karts found in history file."); race_manager->setNumKarts(num_karts); diff --git a/src/replay/replay_play.cpp b/src/replay/replay_play.cpp index 3c6714c26..4eede7e6b 100644 --- a/src/replay/replay_play.cpp +++ b/src/replay/replay_play.cpp @@ -100,7 +100,7 @@ void ReplayPlay::Load() Log::fatal("Replay", "Could not read '%s'.", getReplayFilename().c_str()); unsigned int version; - if (sscanf(s,"Version: %d", (int*)&version) != 1) + if (sscanf(s,"Version: %u", &version) != 1) Log::fatal("Replay", "No Version information found in replay file (bogus replay file)."); if (version != getReplayVersion()) @@ -130,7 +130,7 @@ void ReplayPlay::Load() unsigned int num_laps; fgets(s, 1023, fd); - if(sscanf(s, "Laps: %d", (int*)&num_laps) != 1) + if(sscanf(s, "Laps: %u", &num_laps) != 1) Log::fatal("Replay", "No number of laps found in replay file."); race_manager->setNumLaps(num_laps); @@ -164,7 +164,7 @@ void ReplayPlay::readKartData(FILE *fd, char *next_line) fgets(s, 1023, fd); unsigned int size; - if(sscanf(s,"size: %d",(int*)&size)!=1) + if(sscanf(s,"size: %u",&size)!=1) Log::fatal("Replay", "Number of records not found in replay file " "for kart %d.", m_ghost_karts.size()-1); @@ -198,7 +198,7 @@ void ReplayPlay::readKartData(FILE *fd, char *next_line) } // for i fgets(s, 1023, fd); unsigned int num_events; - if(sscanf(s,"events: %d",(int*)&num_events)!=1) + if(sscanf(s,"events: %u",&num_events)!=1) Log::warn("Replay", "Number of events not found in replay file " "for kart %d.", m_ghost_karts.size()-1); From 2c129428717f4e6ac417b5b9c9636706ab761bdc Mon Sep 17 00:00:00 2001 From: Tobias Markus Date: Thu, 20 Nov 2014 23:17:25 +0100 Subject: [PATCH 04/21] Revert change in irr_driver.cpp --- src/graphics/irr_driver.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/graphics/irr_driver.cpp b/src/graphics/irr_driver.cpp index b9463d8c8..4e48cdd72 100644 --- a/src/graphics/irr_driver.cpp +++ b/src/graphics/irr_driver.cpp @@ -1185,7 +1185,7 @@ scene::IMesh *IrrDriver::createQuadMesh(const video::SMaterial *material, { video::S3DVertex v; v.Pos = core::vector3df(0,0,0); - v.Normal = core::vector3df(1/sqrt(2.0), 1/sqrt(2.0), 0); + v.Normal = core::vector3df(1/sqrt(2.0f), 1/sqrt(2.0f), 0); // Add the vertices // ---------------- From 91736e194171aafe0c532f093116ff6d397be394 Mon Sep 17 00:00:00 2001 From: samuncle Date: Sat, 22 Nov 2014 15:59:22 +0100 Subject: [PATCH 05/21] Add the support for emit map. For the moment it's only for solid objects --- data/shaders/detailledobject_pass2.frag | 4 ++-- data/shaders/grass_pass2.frag | 4 ++-- data/shaders/instanced_detailledobject_pass2.frag | 4 ++-- data/shaders/instanced_grass_pass2.frag | 4 ++-- data/shaders/instanced_object_pass2.frag | 7 +++++-- data/shaders/instanced_objectpass_spheremap.frag | 4 ++-- data/shaders/instanced_objectref_pass2.frag | 4 ++-- data/shaders/object_pass2.frag | 4 ++-- data/shaders/objectpass_spheremap.frag | 4 ++-- data/shaders/objectref_pass2.frag | 4 ++-- data/shaders/splatting.frag | 4 ++-- data/shaders/utils/getLightFactor.frag | 7 ++++--- 12 files changed, 29 insertions(+), 25 deletions(-) diff --git a/data/shaders/detailledobject_pass2.frag b/data/shaders/detailledobject_pass2.frag index 5b19966cc..cc26f70dd 100644 --- a/data/shaders/detailledobject_pass2.frag +++ b/data/shaders/detailledobject_pass2.frag @@ -18,7 +18,7 @@ varying vec2 uv_bis; #define FragColor gl_FragColor #endif -vec3 getLightFactor(vec3 diffuseMatColor, vec3 specularMatColor, float specMapValue); +vec3 getLightFactor(vec3 diffuseMatColor, vec3 specularMatColor, float specMapValue, float emitMapValue); void main(void) { @@ -31,5 +31,5 @@ void main(void) vec4 detail = texture(Detail, uv_bis); color *= detail; float specmap = texture(SpecMap, uv).g; - FragColor = vec4(getLightFactor(color.xyz, vec3(1.), specmap), 1.); + FragColor = vec4(getLightFactor(color.xyz, vec3(1.), specmap, 0.), 1.); } diff --git a/data/shaders/grass_pass2.frag b/data/shaders/grass_pass2.frag index 6b677ceea..ac5586321 100644 --- a/data/shaders/grass_pass2.frag +++ b/data/shaders/grass_pass2.frag @@ -14,7 +14,7 @@ in vec3 nor; in vec2 uv; out vec4 FragColor; -vec3 getLightFactor(vec3 diffuseMatColor, vec3 specularMatColor, float specMapValue); +vec3 getLightFactor(vec3 diffuseMatColor, vec3 specularMatColor, float specMapValue, float emitMapValue); void main(void) { @@ -42,6 +42,6 @@ void main(void) float scattering = mix(fPowEdotL, fLdotNBack, .5); float specmap = texture(SpecMap, uv).g; - vec3 LightFactor = color.xyz * (scattering * 0.3) + getLightFactor(color.xyz, vec3(1.), specmap); + vec3 LightFactor = color.xyz * (scattering * 0.3) + getLightFactor(color.xyz, vec3(1.), specmap, 0.); FragColor = vec4(color.xyz * LightFactor, 1.); } diff --git a/data/shaders/instanced_detailledobject_pass2.frag b/data/shaders/instanced_detailledobject_pass2.frag index 927a6a845..ea5f3cd4a 100644 --- a/data/shaders/instanced_detailledobject_pass2.frag +++ b/data/shaders/instanced_detailledobject_pass2.frag @@ -13,7 +13,7 @@ in vec2 uv; in vec2 uv_bis; out vec4 FragColor; -vec3 getLightFactor(vec3 diffuseMatColor, vec3 specularMatColor, float specMapValue); +vec3 getLightFactor(vec3 diffuseMatColor, vec3 specularMatColor, float specMapValue, float emitMapValue); void main(void) { @@ -30,5 +30,5 @@ void main(void) float specmap = texture(SpecMap, uv).g; #endif color *= detail; - FragColor = vec4(getLightFactor(color.xyz, vec3(1.), specmap), 1.); + FragColor = vec4(getLightFactor(color.xyz, vec3(1.), specmap, 0.), 1.); } diff --git a/data/shaders/instanced_grass_pass2.frag b/data/shaders/instanced_grass_pass2.frag index 0a7787559..b06742743 100644 --- a/data/shaders/instanced_grass_pass2.frag +++ b/data/shaders/instanced_grass_pass2.frag @@ -16,7 +16,7 @@ in vec3 nor; in vec2 uv; out vec4 FragColor; -vec3 getLightFactor(vec3 diffuseMatColor, vec3 specularMatColor, float specMapValue); +vec3 getLightFactor(vec3 diffuseMatColor, vec3 specularMatColor, float specMapValue, float emitMapValue); void main(void) { @@ -48,6 +48,6 @@ void main(void) float scattering = mix(fPowEdotL, fLdotNBack, .5); - vec3 LightFactor = color.xyz * (scattering * 0.1) + getLightFactor(color.xyz, vec3(1.), specmap); + vec3 LightFactor = color.xyz * (scattering * 0.1) + getLightFactor(color.xyz, vec3(1.), specmap, 0.); FragColor = vec4(LightFactor, 1.); } diff --git a/data/shaders/instanced_object_pass2.frag b/data/shaders/instanced_object_pass2.frag index c260d7aab..982c795c1 100644 --- a/data/shaders/instanced_object_pass2.frag +++ b/data/shaders/instanced_object_pass2.frag @@ -11,20 +11,23 @@ in vec2 uv; in vec4 color; out vec4 FragColor; -vec3 getLightFactor(vec3 diffuseMatColor, vec3 specularMatColor, float specMapValue); +vec3 getLightFactor(vec3 diffuseMatColor, vec3 specularMatColor, float specMapValue, float emitMapValue); void main(void) { #ifdef GL_ARB_bindless_texture vec4 col = texture(handle, uv); float specmap = texture(secondhandle, uv).g; + float emitmap = texture(secondhandle, uv).b; #ifdef SRGBBindlessFix col.xyz = pow(col.xyz, vec3(2.2)); #endif #else vec4 col = texture(Albedo, uv); float specmap = texture(SpecMap, uv).g; + float emitmap = texture(SpecMap, uv).b; #endif col.xyz *= pow(color.xyz, vec3(2.2)); - FragColor = vec4(getLightFactor(col.xyz, vec3(1.), specmap), 1.); + + FragColor = vec4(getLightFactor(col.xyz, vec3(1.), specmap, emitmap) , 1.); } diff --git a/data/shaders/instanced_objectpass_spheremap.frag b/data/shaders/instanced_objectpass_spheremap.frag index 21414ee31..3795e6c17 100644 --- a/data/shaders/instanced_objectpass_spheremap.frag +++ b/data/shaders/instanced_objectpass_spheremap.frag @@ -12,7 +12,7 @@ out vec4 FragColor; vec4 getPosFromUVDepth(vec3 uvDepth, mat4 InverseProjectionMatrix); -vec3 getLightFactor(vec3 diffuseMatColor, vec3 specularMatColor, float specMapValue); +vec3 getLightFactor(vec3 diffuseMatColor, vec3 specularMatColor, float specMapValue, float emitMapValue); void main() { vec3 texc = gl_FragCoord.xyz / vec3(screen, 1.); @@ -30,5 +30,5 @@ void main() { vec4 detail0 = texture(tex, r.xy / m + .5); #endif - FragColor = vec4(getLightFactor(detail0.xyz, vec3(1.), 0.), 1.); + FragColor = vec4(getLightFactor(detail0.xyz, vec3(1.), 0., 0.), 1.); } diff --git a/data/shaders/instanced_objectref_pass2.frag b/data/shaders/instanced_objectref_pass2.frag index 41f3dc34f..2a8e64172 100644 --- a/data/shaders/instanced_objectref_pass2.frag +++ b/data/shaders/instanced_objectref_pass2.frag @@ -11,7 +11,7 @@ in vec2 uv; in vec4 color; out vec4 FragColor; -vec3 getLightFactor(vec3 diffuseMatColor, vec3 specularMatColor, float specMapValue); +vec3 getLightFactor(vec3 diffuseMatColor, vec3 specularMatColor, float specMapValue, float emitMapValue); void main(void) { @@ -27,5 +27,5 @@ void main(void) #endif col.xyz *= pow(color.xyz, vec3(2.2)); if (col.a * color.a < 0.5) discard; - FragColor = vec4(getLightFactor(col.xyz, vec3(1.), specmap), 1.); + FragColor = vec4(getLightFactor(col.xyz, vec3(1.), specmap, 0.), 1.); } diff --git a/data/shaders/object_pass2.frag b/data/shaders/object_pass2.frag index ba984f87d..25e463240 100644 --- a/data/shaders/object_pass2.frag +++ b/data/shaders/object_pass2.frag @@ -10,7 +10,7 @@ in vec2 uv; in vec4 color; out vec4 FragColor; -vec3 getLightFactor(vec3 diffuseMatColor, vec3 specularMatColor, float specMapValue); +vec3 getLightFactor(vec3 diffuseMatColor, vec3 specularMatColor, float specMapValue, float emitMapValue); void main(void) { @@ -24,5 +24,5 @@ void main(void) #endif col.xyz *= pow(color.xyz, vec3(2.2)); float specmap = texture(SpecMap, uv).g; - FragColor = vec4(getLightFactor(col.xyz, vec3(1.), specmap), 1.); + FragColor = vec4(getLightFactor(col.xyz, vec3(1.), specmap, 0.), 1.); } diff --git a/data/shaders/objectpass_spheremap.frag b/data/shaders/objectpass_spheremap.frag index e5ed033d1..6d09b8294 100644 --- a/data/shaders/objectpass_spheremap.frag +++ b/data/shaders/objectpass_spheremap.frag @@ -15,7 +15,7 @@ varying vec3 nor; #endif vec4 getPosFromUVDepth(vec3 uvDepth, mat4 InverseProjectionMatrix); -vec3 getLightFactor(vec3 diffuseMatColor, vec3 specularMatColor, float specMapValue); +vec3 getLightFactor(vec3 diffuseMatColor, vec3 specularMatColor, float specMapValue, float emitMapValue); void main() { vec3 texc = gl_FragCoord.xyz / vec3(screen, 1.); @@ -31,5 +31,5 @@ void main() { #endif #endif - FragColor = vec4(getLightFactor(detail0.xyz, vec3(1.), 0.), 1.); + FragColor = vec4(getLightFactor(detail0.xyz, vec3(1.), 0., 0.), 1.); } diff --git a/data/shaders/objectref_pass2.frag b/data/shaders/objectref_pass2.frag index a7fd08dca..04b139d61 100644 --- a/data/shaders/objectref_pass2.frag +++ b/data/shaders/objectref_pass2.frag @@ -10,7 +10,7 @@ in vec2 uv; in vec4 color; out vec4 FragColor; -vec3 getLightFactor(vec3 diffuseMatColor, vec3 specularMatColor, float specMapValue); +vec3 getLightFactor(vec3 diffuseMatColor, vec3 specularMatColor, float specMapValue, float emitMapValue); void main(void) { @@ -23,5 +23,5 @@ void main(void) col.xyz *= pow(color.xyz, vec3(2.2)); if (col.a * color.a < 0.5) discard; float specmap = texture(SpecMap, uv).g; - FragColor = vec4(getLightFactor(col.xyz, vec3(1.), specmap), 1.); + FragColor = vec4(getLightFactor(col.xyz, vec3(1.), specmap, 0.), 1.); } diff --git a/data/shaders/splatting.frag b/data/shaders/splatting.frag index acc6fabc3..e98e8ca25 100644 --- a/data/shaders/splatting.frag +++ b/data/shaders/splatting.frag @@ -22,7 +22,7 @@ varying vec2 uv_bis; #define FragColor gl_FragColor #endif -vec3 getLightFactor(vec3 diffuseMatColor, vec3 specularMatColor, float specMapValue); +vec3 getLightFactor(vec3 diffuseMatColor, vec3 specularMatColor, float specMapValue, float emitMapValue); void main() { // Splatting part @@ -46,5 +46,5 @@ void main() { splatting.b * detail2 + max(0., (1.0 - splatting.r - splatting.g - splatting.b)) * detail3; - FragColor = vec4(getLightFactor(splatted.xyz, vec3(1.), 0.), 1.); + FragColor = vec4(getLightFactor(splatted.xyz, vec3(1.), 0., 0.), 1.); } diff --git a/data/shaders/utils/getLightFactor.frag b/data/shaders/utils/getLightFactor.frag index 7d974d56d..bb63d53d6 100644 --- a/data/shaders/utils/getLightFactor.frag +++ b/data/shaders/utils/getLightFactor.frag @@ -8,12 +8,13 @@ uniform sampler2D SpecularMap; uniform sampler2D SSAO; #endif -vec3 getLightFactor(vec3 diffuseMatColor, vec3 specularMatColor, float specMapValue) +vec3 getLightFactor(vec3 diffuseMatColor, vec3 specularMatColor, float specMapValue, float emitMapValue) { vec2 tc = gl_FragCoord.xy / screen; vec3 DiffuseComponent = texture(DiffuseMap, tc).xyz; vec3 SpecularComponent = texture(SpecularMap, tc).xyz; float ao = texture(SSAO, tc).x; vec3 tmp = diffuseMatColor * DiffuseComponent * (1. - specMapValue) + specularMatColor * SpecularComponent * specMapValue; - return tmp * ao; -} \ No newline at end of file + vec3 emitCol = diffuseMatColor.xyz * diffuseMatColor.xyz * diffuseMatColor.xyz * 15.; + return tmp * ao + (emitMapValue * emitCol); +} From 5d5460d845863806811e3b1442efcc4ac5f33e54 Mon Sep 17 00:00:00 2001 From: Marianne Gagnon Date: Sat, 22 Nov 2014 18:21:31 -0500 Subject: [PATCH 06/21] Add way to test intro cutscene easily; do not throttle sound effects on cutscenes --- data/gui/main.stkgui | 8 ++++-- src/audio/sfx_manager.cpp | 3 ++- src/states_screens/main_menu_screen.cpp | 33 +++++++++++++++++++++++++ 3 files changed, 41 insertions(+), 3 deletions(-) diff --git a/data/gui/main.stkgui b/data/gui/main.stkgui index 66ca6f8ca..382b7f854 100644 --- a/data/gui/main.stkgui +++ b/data/gui/main.stkgui @@ -45,8 +45,12 @@ text="TEST: GPLose" label_location="hover"/> - + + + 20*race_manager->getNumberOfKarts()+20) + if(m_sfx_commands.getData().size() > 20*race_manager->getNumberOfKarts()+20 && + race_manager->getMinorMode() != RaceManager::MINOR_MODE_CUTSCENE) { if(command->m_command==SFX_POSITION || command->m_command==SFX_LOOP || command->m_command==SFX_PLAY || command->m_command==SFX_SPEED ) diff --git a/src/states_screens/main_menu_screen.cpp b/src/states_screens/main_menu_screen.cpp index 14a1f4aaf..2477205b1 100644 --- a/src/states_screens/main_menu_screen.cpp +++ b/src/states_screens/main_menu_screen.cpp @@ -89,6 +89,8 @@ void MainMenuScreen::loadedFromFile() rw->removeChildNamed("test_gplose"); rw->removeChildNamed("test_unlocked"); rw->removeChildNamed("test_unlocked2"); + rw->removeChildNamed("test_intro"); + rw->removeChildNamed("test_outro"); #endif } // loadedFromFile @@ -346,6 +348,37 @@ void MainMenuScreen::eventCallback(Widget* widget, const std::string& name, scene->push(); } } + else if (selection == "test_intro") + { + CutsceneWorld::setUseDuration(true); + StateManager::get()->enterGameState(); + race_manager->setMinorMode(RaceManager::MINOR_MODE_CUTSCENE); + race_manager->setNumKarts(0); + race_manager->setNumPlayers(0); + race_manager->setNumLocalPlayers(0); + race_manager->startSingleRace("introcutscene", 999, false); + + std::vector parts; + parts.push_back("introcutscene"); + parts.push_back("introcutscene2"); + ((CutsceneWorld*)World::getWorld())->setParts(parts); + //race_manager->startSingleRace("introcutscene2", 999, false); + return; + } + else if (selection == "test_outro") + { + CutsceneWorld::setUseDuration(true); + StateManager::get()->enterGameState(); + race_manager->setMinorMode(RaceManager::MINOR_MODE_CUTSCENE); + race_manager->setNumKarts(0); + race_manager->setNumPlayers(0); + race_manager->setNumLocalPlayers(0); + race_manager->startSingleRace("endcutscene", 999, false); + + std::vector parts; + parts.push_back("endcutscene"); + ((CutsceneWorld*)World::getWorld())->setParts(parts); + } else #endif if (selection == "new") From 24b1a3af324343c83721fb2b76332e310f0ed4fb Mon Sep 17 00:00:00 2001 From: hiker Date: Sun, 23 Nov 2014 21:13:12 +1100 Subject: [PATCH 07/21] Fixed compiler warnings. --- src/graphics/post_processing.cpp | 2 +- src/input/input_manager.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/graphics/post_processing.cpp b/src/graphics/post_processing.cpp index 7112a86bc..98d95c424 100644 --- a/src/graphics/post_processing.cpp +++ b/src/graphics/post_processing.cpp @@ -408,7 +408,7 @@ void PostProcessing::renderHorizontalBlur(FrameBuffer &in_fbo, FrameBuffer &auxi in_fbo.Bind(); FullScreenShader::Gaussian6HBlurShader::getInstance()->SetTextureUnits(auxiliary.getRTT()[0]); - DrawFullScreenEffect(core::vector2df(inv_width, inv_height), 2.0); + DrawFullScreenEffect(core::vector2df(inv_width, inv_height), 2.0f); } } diff --git a/src/input/input_manager.cpp b/src/input/input_manager.cpp index b9b92a2df..da8c63776 100644 --- a/src/input/input_manager.cpp +++ b/src/input/input_manager.cpp @@ -215,7 +215,7 @@ void InputManager::handleStaticAction(int key, int value) Camera *active_cam = Camera::getActiveCamera(); active_cam->setAngularVelocity(value ? - UserConfigParams::m_fspcam_max_angular_velocity : 0); + UserConfigParams::m_fspcam_max_angular_velocity : 0.0f); break; } case KEY_KEY_E: From 9a02693d311742e7d16922b9e61d7c3fb146b4df Mon Sep 17 00:00:00 2001 From: hiker Date: Sun, 23 Nov 2014 21:13:49 +1100 Subject: [PATCH 08/21] Fixed compiler warnings, renamed playerID to player_id (to follow our style guide). --- src/states_screens/kart_selection.cpp | 76 +++++++++++++-------------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/src/states_screens/kart_selection.cpp b/src/states_screens/kart_selection.cpp index e73080476..232600628 100644 --- a/src/states_screens/kart_selection.cpp +++ b/src/states_screens/kart_selection.cpp @@ -108,25 +108,25 @@ void FocusDispatcher::add() m_element->setTabOrder(m_id); } -EventPropagation FocusDispatcher::focused(const int playerID) +EventPropagation FocusDispatcher::focused(const int player_id) { if (!m_is_initialised) return EVENT_LET; if(UserConfigParams::logGUI()) Log::info("[KartSelectionScreen]", "FocusDispatcher focused by player %u", - playerID); + player_id); // since this screen is multiplayer, redirect focus to the right widget const int amount = m_parent->m_kart_widgets.size(); for (int n=0; nm_kart_widgets[n].getPlayerID() == playerID) + if (m_parent->m_kart_widgets[n].getPlayerID() == player_id) { // If player is done, don't do anything with focus if (m_parent->m_kart_widgets[n].isReady()) return GUIEngine::EVENT_BLOCK; - //std::cout << "--> Redirecting focus for player " << playerID + //std::cout << "--> Redirecting focus for player " << player_id // << " from FocusDispatcher " << // " (ID " << m_element->getID() << // ") to spinner " << n << " (ID " << @@ -135,7 +135,7 @@ EventPropagation FocusDispatcher::focused(const int playerID) // ")" << std::endl; m_parent->m_kart_widgets[n].m_player_ident_spinner - ->setFocusForPlayer(playerID); + ->setFocusForPlayer(player_id); return GUIEngine::EVENT_BLOCK; @@ -143,7 +143,7 @@ EventPropagation FocusDispatcher::focused(const int playerID) } //Log::fatal("KartSelectionScreen", "The focus dispatcher can't" - // "find the widget for player %d!", playerID); + // "find the widget for player %d!", player_id); return GUIEngine::EVENT_LET; } // focused @@ -172,39 +172,39 @@ KartHoverListener::~KartHoverListener() void KartHoverListener::onSelectionChanged(DynamicRibbonWidget* theWidget, const std::string& selectionID, const irr::core::stringw& selectionText, - const int playerID) + const int player_id) { assert(m_magic_number == 0xCAFEC001); // Check if this player has a kart - if (m_parent->m_kart_widgets.size() <= playerID) + if (m_parent->m_kart_widgets.size() <= unsigned(player_id)) { - GUIEngine::focusNothingForPlayer(playerID); + GUIEngine::focusNothingForPlayer(player_id); return; } // Don't allow changing the selection after confirming it - if (m_parent->m_kart_widgets[playerID].isReady()) + if (m_parent->m_kart_widgets[player_id].isReady()) { // discard events sent when putting back to the right kart if (selectionID == - m_parent->m_kart_widgets[playerID].m_kartInternalName) return; + m_parent->m_kart_widgets[player_id].m_kartInternalName) return; DynamicRibbonWidget* w = m_parent->getWidget("karts"); assert(w != NULL); - w->setSelection(m_parent->m_kart_widgets[playerID] - .m_kartInternalName, playerID, true); + w->setSelection(m_parent->m_kart_widgets[player_id] + .m_kartInternalName, player_id, true); return; } - if (m_parent->m_kart_widgets[playerID].getKartInternalName() == selectionID) + if (m_parent->m_kart_widgets[player_id].getKartInternalName() == selectionID) return; // already selected - m_parent->updateKartWidgetModel(playerID, selectionID, selectionText); - m_parent->m_kart_widgets[playerID].setKartInternalName(selectionID); - m_parent->updateKartStats(playerID, selectionID); + m_parent->updateKartWidgetModel(player_id, selectionID, selectionText); + m_parent->m_kart_widgets[player_id].setKartInternalName(selectionID); + m_parent->updateKartStats(player_id, selectionID); m_parent->validateKartChoices(); } // onSelectionChanged @@ -558,7 +558,7 @@ bool KartSelectionScreen::joinPlayer(InputDevice* device) bool KartSelectionScreen::playerQuit(StateManager::ActivePlayer* player) { - int playerID = -1; + int player_id = -1; DynamicRibbonWidget* w = getWidget("karts"); if (w == NULL) @@ -592,7 +592,7 @@ bool KartSelectionScreen::playerQuit(StateManager::ActivePlayer* player) return true; } - playerID = n; + player_id = n; } else { @@ -600,21 +600,21 @@ bool KartSelectionScreen::playerQuit(StateManager::ActivePlayer* player) m_kart_widgets[n].getKartInternalName(); } } - if (playerID == -1) + if (player_id == -1) { Log::warn("KartSelectionScreen", "playerQuit cannot find " "passed player"); return false; } if(UserConfigParams::logGUI()) - Log::info("KartSelectionScreen", "playerQuit(%d)", playerID); + Log::info("KartSelectionScreen", "playerQuit(%d)", player_id); // Just a cheap way to check if there is any discrepancy // between m_kart_widgets and the active player array assert( m_kart_widgets.size() == StateManager::get()->activePlayerCount()); // unset selection of this player - GUIEngine::focusNothingForPlayer(playerID); + GUIEngine::focusNothingForPlayer(player_id); // delete a previous removed widget that didn't have time to fully shrink // yet. @@ -628,10 +628,10 @@ bool KartSelectionScreen::playerQuit(StateManager::ActivePlayer* player) // keep the removed kart a while, for the 'disappear' animation // to take place - m_removed_widget = m_kart_widgets.remove(playerID); + m_removed_widget = m_kart_widgets.remove(player_id); // Tell the StateManager to remove this player - StateManager::get()->removeActivePlayer(playerID); + StateManager::get()->removeActivePlayer(player_id); addMultiplayerMessage(); @@ -710,23 +710,23 @@ void KartSelectionScreen::onUpdate(float delta) // ---------------------------------------------------------------------------- -void KartSelectionScreen::playerConfirm(const int playerID) +void KartSelectionScreen::playerConfirm(const int player_id) { DynamicRibbonWidget* w = getWidget("karts"); assert(w != NULL); - const std::string selection = w->getSelectionIDString(playerID); + const std::string selection = w->getSelectionIDString(player_id); if (StringUtils::startsWith(selection, ID_LOCKED)) { unlock_manager->playLockSound(); return; } - if (playerID == PLAYER_ID_GAME_MASTER) + if (player_id == PLAYER_ID_GAME_MASTER) { UserConfigParams::m_default_kart = selection; } - if (m_kart_widgets[playerID].getKartInternalName().size() == 0) + if (m_kart_widgets[player_id].getKartInternalName().size() == 0) { SFXManager::get()->quickSound( "anvil" ); return; @@ -742,16 +742,16 @@ void KartSelectionScreen::playerConfirm(const int playerID) // make sure no other player selected the same identity or kart for (int n=0; ngetProfile() ->isGuestAccount() && m_kart_widgets[n].getAssociatedPlayer()->getProfile() == - m_kart_widgets[playerID].getAssociatedPlayer()->getProfile(); + m_kart_widgets[player_id].getAssociatedPlayer()->getProfile(); const bool kart_conflict = sameKart(m_kart_widgets[n], - m_kart_widgets[playerID]); + m_kart_widgets[player_id]); if (player_ready && (ident_conflict || kart_conflict) && !will_need_duplicates) @@ -767,13 +767,13 @@ void KartSelectionScreen::playerConfirm(const int playerID) // If two PlayerKart entries are associated to the same ActivePlayer, // something went wrong assert(m_kart_widgets[n].getAssociatedPlayer() != - m_kart_widgets[playerID].getAssociatedPlayer()); + m_kart_widgets[player_id].getAssociatedPlayer()); } // Mark this player as ready to start - m_kart_widgets[playerID].markAsReady(); + m_kart_widgets[player_id].markAsReady(); - if (playerID == PLAYER_ID_GAME_MASTER) + if (player_id == PLAYER_ID_GAME_MASTER) { m_game_master_confirmed = true; RibbonWidget* tabs = getWidget("kartgroups"); @@ -963,7 +963,7 @@ void KartSelectionScreen::removeMultiplayerMessage() */ void KartSelectionScreen::eventCallback(Widget* widget, const std::string& name, - const int playerID) + const int player_id) { // don't allow changing group after someone confirmed if (name == "kartgroups" && !m_game_master_confirmed) @@ -1036,8 +1036,8 @@ void KartSelectionScreen::eventCallback(Widget* widget, } else if (name == "karts") { - if (m_kart_widgets.size() > playerID) - playerConfirm(playerID); + if (m_kart_widgets.size() > unsigned(player_id)) + playerConfirm(player_id); } else if (name == "back") { @@ -1049,7 +1049,7 @@ void KartSelectionScreen::eventCallback(Widget* widget, const int amount = m_kart_widgets.size(); for (int n=0; n Date: Sun, 23 Nov 2014 21:54:41 +1100 Subject: [PATCH 09/21] Fixed crash when using --slipstream-debug, but colour change to indicate slipstream states does not work yet. --- src/graphics/slip_stream.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/graphics/slip_stream.cpp b/src/graphics/slip_stream.cpp index 2d377256d..a76fcd351 100644 --- a/src/graphics/slip_stream.cpp +++ b/src/graphics/slip_stream.cpp @@ -19,9 +19,10 @@ #include "graphics/slip_stream.hpp" #include "config/user_config.hpp" +#include "graphics/glwrap.hpp" +#include "graphics/irr_driver.hpp" #include "graphics/material.hpp" #include "graphics/material_manager.hpp" -#include "graphics/irr_driver.hpp" #include "io/file_manager.hpp" #include "karts/controller/controller.hpp" #include "karts/abstract_kart.hpp" @@ -100,7 +101,13 @@ SlipStream::SlipStream(AbstractKart* kart) : MovingTexture(0, 0), m_kart(kart) { vertices[i].Pos = p[i].toIrrVector(); vertices[i].Color = red; + vertices[i].TCoords = core::vector2df(0, 0); } + video::SMaterial &mat = buffer->getMaterial(); + // Meshes need a texture, otherwise stk crashes. + video::ITexture *red_texture = getUnicolorTexture(red); + mat.setTexture(0, red_texture); + buffer->recalculateBoundingBox(); m_mesh->setBoundingBox(buffer->getBoundingBox()); m_debug_node = irr_driver->addMesh(m_debug_mesh, "splistream_debug", m_kart->getNode()); @@ -340,6 +347,8 @@ void SlipStream::updateSlipstreamPower() void SlipStream::setDebugColor(const video::SColor &color) { if(!UserConfigParams::m_slipstream_debug) return; + // FIXME: Does not work anymore - the colour is changed, but + // visually there is no change. scene::IMeshBuffer *buffer = m_debug_mesh->getMeshBuffer(0); irr::video::S3DVertex* vertices = (video::S3DVertex*)buffer->getVertices(); From 54b311f6f7f445e546964a38484b0430bf814c87 Mon Sep 17 00:00:00 2001 From: Deve Date: Mon, 24 Nov 2014 19:28:32 +0100 Subject: [PATCH 10/21] Allow to set custom ratio for images from xml file. It avoids crashes and memory leaks after changing resolution. --- data/gui/gp_info.stkgui | 5 ++- data/gui/track_info.stkgui | 3 +- src/guiengine/screen_loader.cpp | 1 + src/guiengine/widget.hpp | 1 + src/guiengine/widgets/icon_button_widget.cpp | 7 +++++ src/states_screens/gp_info_screen.cpp | 32 +++++--------------- src/states_screens/gp_info_screen.hpp | 1 - src/states_screens/track_info_screen.cpp | 28 +++++------------ src/states_screens/track_info_screen.hpp | 3 -- 9 files changed, 27 insertions(+), 54 deletions(-) diff --git a/data/gui/gp_info.stkgui b/data/gui/gp_info.stkgui index e469856b9..7568a38ee 100644 --- a/data/gui/gp_info.stkgui +++ b/data/gui/gp_info.stkgui @@ -11,9 +11,8 @@ -
- - +
+
diff --git a/data/gui/track_info.stkgui b/data/gui/track_info.stkgui index 7f4e78f7a..4cc84dcf7 100644 --- a/data/gui/track_info.stkgui +++ b/data/gui/track_info.stkgui @@ -10,8 +10,7 @@
- - +
diff --git a/src/guiengine/screen_loader.cpp b/src/guiengine/screen_loader.cpp index 21feaa763..1c1c5a23e 100644 --- a/src/guiengine/screen_loader.cpp +++ b/src/guiengine/screen_loader.cpp @@ -205,6 +205,7 @@ if(prop_name != NULL) widget.m_properties[prop_flag] = core::stringc(prop_name). READ_PROPERTY(y, PROP_Y); READ_PROPERTY(layout, PROP_LAYOUT); READ_PROPERTY(align, PROP_ALIGN); + READ_PROPERTY(custom_ratio, PROP_CUSTOM_RATIO); READ_PROPERTY(icon, PROP_ICON); READ_PROPERTY(focus_icon, PROP_FOCUS_ICON); diff --git a/src/guiengine/widget.hpp b/src/guiengine/widget.hpp index af6ed8ee0..95cc43905 100644 --- a/src/guiengine/widget.hpp +++ b/src/guiengine/widget.hpp @@ -109,6 +109,7 @@ namespace GUIEngine PROP_WRAP_AROUND, PROP_DIV_PADDING, PROP_KEEP_SELECTION, + PROP_CUSTOM_RATIO, }; bool isWithinATextBox(); diff --git a/src/guiengine/widgets/icon_button_widget.cpp b/src/guiengine/widgets/icon_button_widget.cpp index 22f140038..6b22948dc 100644 --- a/src/guiengine/widgets/icon_button_widget.cpp +++ b/src/guiengine/widgets/icon_button_widget.cpp @@ -44,6 +44,7 @@ IconButtonWidget::IconButtonWidget(ScaleMode scale_mode, const bool tab_stop, m_texture = NULL; m_deactivated_texture = NULL; m_highlight_texture = NULL; + m_custom_aspect_ratio = 1.0f; m_texture_w = 0; @@ -103,6 +104,12 @@ void IconButtonWidget::add() // irrlicht widgets don't support scaling while keeping aspect ratio // so, happily, let's implement it ourselves float useAspectRatio = -1.0f; + + if (m_properties[PROP_CUSTOM_RATIO] != "") + { + m_custom_aspect_ratio = atof(m_properties[PROP_CUSTOM_RATIO].c_str()); + m_scale_mode = SCALE_MODE_KEEP_CUSTOM_ASPECT_RATIO; + } if (m_scale_mode == SCALE_MODE_KEEP_TEXTURE_ASPECT_RATIO) { diff --git a/src/states_screens/gp_info_screen.cpp b/src/states_screens/gp_info_screen.cpp index d3338b928..d776a0063 100644 --- a/src/states_screens/gp_info_screen.cpp +++ b/src/states_screens/gp_info_screen.cpp @@ -58,7 +58,6 @@ GPInfoScreen::GPInfoScreen() : Screen("gp_info.stkgui") m_curr_time = 0.0f; // Necessary to test if loadedFroMFile() was executed (in setGP) m_reverse_spinner = NULL; - m_screenshot_widget = NULL; m_max_num_tracks = 0; } // GPInfoScreen @@ -266,34 +265,18 @@ void GPInfoScreen::addTracks() */ void GPInfoScreen::addScreenshot() { - Widget* screenshot_div = getWidget("screenshot_div"); - - if(!m_screenshot_widget || !m_widgets.contains(m_screenshot_widget)) - { - m_screenshot_widget = new IconButtonWidget( - IconButtonWidget::SCALE_MODE_KEEP_CUSTOM_ASPECT_RATIO, - false, false, IconButtonWidget::ICON_PATH_TYPE_ABSOLUTE); - m_widgets.push_back(m_screenshot_widget); - } - // images are saved squared, but must be stretched to 4:3 - m_screenshot_widget->setCustomAspectRatio(4.0f / 3.0f); - m_screenshot_widget->m_x = screenshot_div->m_x; - m_screenshot_widget->m_y = screenshot_div->m_y; - m_screenshot_widget->m_w = screenshot_div->m_w; - m_screenshot_widget->m_h = screenshot_div->m_h; - + GUIEngine::IconButtonWidget* screenshot = getWidget("screenshot"); // Temporary icon, will replace it just after // (but it will be shown if the given icon is not found) - m_screenshot_widget->m_properties[PROP_ICON] = "gui/main_help.png"; - m_screenshot_widget->add(); + screenshot->m_properties[PROP_ICON] = "gui/main_help.png"; const Track *track = track_manager->getTrack(m_gp.getTrackId(0)); - video::ITexture* screenshot = irr_driver->getTexture(track->getScreenshotFile(), + video::ITexture* image = irr_driver->getTexture(track->getScreenshotFile(), "While loading screenshot for track '%s':", track->getFilename() ); - if (screenshot != NULL) - m_screenshot_widget->setImage(screenshot); + if (image != NULL) + screenshot->setImage(image); } // addScreenShot // ---------------------------------------------------------------------------- @@ -378,8 +361,9 @@ void GPInfoScreen::onUpdate(float dt) Track* track = track_manager->getTrack(tracks[frame_after]); std::string file = track->getScreenshotFile(); - m_screenshot_widget->setImage(file, IconButtonWidget::ICON_PATH_TYPE_ABSOLUTE); - m_screenshot_widget->m_properties[PROP_ICON] = file; + GUIEngine::IconButtonWidget* screenshot = getWidget("screenshot"); + screenshot->setImage(file, IconButtonWidget::ICON_PATH_TYPE_ABSOLUTE); + screenshot->m_properties[PROP_ICON] = file; } // onUpdate /** Get number of available tracks for random GPs diff --git a/src/states_screens/gp_info_screen.hpp b/src/states_screens/gp_info_screen.hpp index 2e2149c04..5b2a30321 100644 --- a/src/states_screens/gp_info_screen.hpp +++ b/src/states_screens/gp_info_screen.hpp @@ -61,7 +61,6 @@ private: int getMaxNumTracks(std::string group); protected: // Necessary for RandomGPInfoScreen - GUIEngine::IconButtonWidget* m_screenshot_widget; float m_curr_time; /** The grand prix data. */ diff --git a/src/states_screens/track_info_screen.cpp b/src/states_screens/track_info_screen.cpp index fbb70f59a..83daceaf6 100644 --- a/src/states_screens/track_info_screen.cpp +++ b/src/states_screens/track_info_screen.cpp @@ -59,7 +59,6 @@ DEFINE_SCREEN_SINGLETON( TrackInfoScreen ); TrackInfoScreen::TrackInfoScreen() : Screen("track_info.stkgui") { - m_screenshot = NULL; } // TrackInfoScreen // ---------------------------------------------------------------------------- @@ -105,37 +104,24 @@ void TrackInfoScreen::init() false ); // ---- Track screenshot - Widget* screenshot_div = getWidget("screenshot_div"); - if(!m_screenshot || !m_widgets.contains(m_screenshot)) - { - m_screenshot = - new IconButtonWidget(IconButtonWidget::SCALE_MODE_KEEP_CUSTOM_ASPECT_RATIO, - false /* tab stop */, false /* focusable */); - m_screenshot->setCustomAspectRatio(4.0f / 3.0f); + GUIEngine::IconButtonWidget* screenshot = getWidget("screenshot"); - m_screenshot->m_x = screenshot_div->m_x; - m_screenshot->m_y = screenshot_div->m_y; - m_screenshot->m_w = screenshot_div->m_w; - m_screenshot->m_h = screenshot_div->m_h; - m_screenshot->add(); - m_widgets.push_back(m_screenshot); - } // images are saved squared, but must be stretched to 4: // temporary icon, will replace it just after (but it will be shown if the given icon is not found) - m_screenshot->m_properties[PROP_ICON] = "gui/main_help.png"; + screenshot->m_properties[PROP_ICON] = "gui/main_help.png"; - ITexture* screenshot = irr_driver->getTexture(m_track->getScreenshotFile(), + ITexture* image = irr_driver->getTexture(m_track->getScreenshotFile(), "While loading screenshot for track '%s':", m_track->getFilename() ); - if(!screenshot) + if(!image) { - screenshot = irr_driver->getTexture("main_help.png", + image = irr_driver->getTexture("main_help.png", "While loading screenshot for track '%s':", m_track->getFilename()); } - if (screenshot != NULL) - m_screenshot->setImage(screenshot); + if (image != NULL) + screenshot->setImage(image); // Lap count m_lap_spinner // ----------------------- diff --git a/src/states_screens/track_info_screen.hpp b/src/states_screens/track_info_screen.hpp index e84173d6a..c35970cb1 100644 --- a/src/states_screens/track_info_screen.hpp +++ b/src/states_screens/track_info_screen.hpp @@ -52,9 +52,6 @@ class TrackInfoScreen : public GUIEngine::Screen, /** Spinner for number of AI karts. */ GUIEngine::SpinnerWidget* m_ai_kart_spinner; - /** Screenshot widget. */ - GUIEngine::IconButtonWidget *m_screenshot; - /** Check box for reverse mode. */ GUIEngine::CheckBoxWidget* m_reverse; From 92801f2b744611f2d926cd6053d3a809c7b75354 Mon Sep 17 00:00:00 2001 From: samuncle Date: Mon, 24 Nov 2014 20:23:55 +0100 Subject: [PATCH 11/21] Tweak the snow --- data/gfx/snow.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/data/gfx/snow.xml b/data/gfx/snow.xml index f1fcbfe67..03cda1e7f 100644 --- a/data/gfx/snow.xml +++ b/data/gfx/snow.xml @@ -17,11 +17,11 @@ + max="9000" /> - + From 220d3dbc9a8ccd75d8e313b5b3e29be6a7bce571 Mon Sep 17 00:00:00 2001 From: Deve Date: Mon, 24 Nov 2014 20:41:49 +0100 Subject: [PATCH 12/21] Restore screenshot properties --- src/states_screens/gp_info_screen.cpp | 4 ++++ src/states_screens/track_info_screen.cpp | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/src/states_screens/gp_info_screen.cpp b/src/states_screens/gp_info_screen.cpp index d776a0063..15af2518b 100644 --- a/src/states_screens/gp_info_screen.cpp +++ b/src/states_screens/gp_info_screen.cpp @@ -83,6 +83,10 @@ void GPInfoScreen::loadedFromFile() m_num_tracks_spinner->setValue(1); m_ai_kart_spinner = getWidget("ai-spinner"); + + GUIEngine::IconButtonWidget* screenshot = getWidget("screenshot"); + screenshot->setFocusable(false); + screenshot->m_tab_stop = false; } // loadedFromFile // ---------------------------------------------------------------------------- diff --git a/src/states_screens/track_info_screen.cpp b/src/states_screens/track_info_screen.cpp index 83daceaf6..4d1d10d21 100644 --- a/src/states_screens/track_info_screen.cpp +++ b/src/states_screens/track_info_screen.cpp @@ -79,6 +79,10 @@ void TrackInfoScreen::loadedFromFile() m_highscore_entries[0] = getWidget("highscore1"); m_highscore_entries[1] = getWidget("highscore2"); m_highscore_entries[2] = getWidget("highscore3"); + + GUIEngine::IconButtonWidget* screenshot = getWidget("screenshot"); + screenshot->setFocusable(false); + screenshot->m_tab_stop = false; } // loadedFromFile // ---------------------------------------------------------------------------- From cd7bc96d68011426c89cb40dac0e2bf726feacc5 Mon Sep 17 00:00:00 2001 From: Marianne Gagnon Date: Mon, 24 Nov 2014 18:31:38 -0500 Subject: [PATCH 13/21] Fix invalid snow particles XML file that would cause assertion failures --- data/gfx/snow.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data/gfx/snow.xml b/data/gfx/snow.xml index 03cda1e7f..ebf7b4b1b 100644 --- a/data/gfx/snow.xml +++ b/data/gfx/snow.xml @@ -16,8 +16,8 @@ max="1000" /> - + Date: Mon, 24 Nov 2014 19:08:20 -0500 Subject: [PATCH 14/21] Fix LOD issues in multiplayer, fixes #1710 --- src/graphics/camera.cpp | 12 +++++++----- src/graphics/camera.hpp | 2 +- src/graphics/render.cpp | 3 +-- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/graphics/camera.cpp b/src/graphics/camera.cpp index 9b362bbb0..fa3e5e352 100644 --- a/src/graphics/camera.cpp +++ b/src/graphics/camera.cpp @@ -736,13 +736,15 @@ void Camera::handleEndCamera(float dt) /** Sets viewport etc. for this camera. Called from irr_driver just before * rendering the view for this kart. */ -void Camera::activate() +void Camera::activate(bool alsoActivateInIrrlicht) { s_active_camera = this; - irr::scene::ISceneManager *sm = irr_driver->getSceneManager(); - sm->setActiveCamera(m_camera); - irr_driver->getVideoDriver()->setViewPort(m_viewport); - + if (alsoActivateInIrrlicht) + { + irr::scene::ISceneManager *sm = irr_driver->getSceneManager(); + sm->setActiveCamera(m_camera); + irr_driver->getVideoDriver()->setViewPort(m_viewport); + } } // activate // ---------------------------------------------------------------------------- diff --git a/src/graphics/camera.hpp b/src/graphics/camera.hpp index 56c9ab48f..071e8db91 100644 --- a/src/graphics/camera.hpp +++ b/src/graphics/camera.hpp @@ -257,7 +257,7 @@ public: int getIndex() const {return m_index;} void reset (); void setInitialTransform(); - void activate(); + void activate(bool alsoActivateInIrrlicht=true); void update (float dt); void setKart (AbstractKart *new_kart); diff --git a/src/graphics/render.cpp b/src/graphics/render.cpp index a85803174..d10e6897b 100644 --- a/src/graphics/render.cpp +++ b/src/graphics/render.cpp @@ -166,8 +166,7 @@ void IrrDriver::renderGLSL(float dt) oss << "drawAll() for kart " << cam; PROFILER_PUSH_CPU_MARKER(oss.str().c_str(), (cam+1)*60, 0x00, 0x00); - if (!UserConfigParams::m_dynamic_lights) - camera->activate(); + camera->activate(!UserConfigParams::m_dynamic_lights); rg->preRenderCallback(camera); // adjusts start referee m_scene_manager->setActiveCamera(camnode); From af186b6926962288c75d344e3c886cee83f2a5d7 Mon Sep 17 00:00:00 2001 From: hiker Date: Tue, 25 Nov 2014 13:58:28 +1100 Subject: [PATCH 15/21] Fixed compiler warnings. --- src/graphics/lod_node.cpp | 1 - src/graphics/post_processing.cpp | 4 ---- src/graphics/render_geometry.cpp | 1 - src/graphics/render_lighting.cpp | 3 +-- src/graphics/stkanimatedmesh.cpp | 3 --- 5 files changed, 1 insertion(+), 11 deletions(-) diff --git a/src/graphics/lod_node.cpp b/src/graphics/lod_node.cpp index 31ab6d731..046b8e30f 100644 --- a/src/graphics/lod_node.cpp +++ b/src/graphics/lod_node.cpp @@ -75,7 +75,6 @@ int LODNode::getLevel() if(m_forced_lod>-1) return m_forced_lod; - scene::ICameraSceneNode* curr_cam = irr_driver->getSceneManager()->getActiveCamera(); Camera* camera = Camera::getActiveCamera(); if (camera == NULL) return (int)m_detail.size() - 1; diff --git a/src/graphics/post_processing.cpp b/src/graphics/post_processing.cpp index 98d95c424..123da79ba 100644 --- a/src/graphics/post_processing.cpp +++ b/src/graphics/post_processing.cpp @@ -519,11 +519,7 @@ void PostProcessing::renderFog() const Track * const track = World::getWorld()->getTrack(); // This function is only called once per frame - thus no need for setters. - const float fogmax = track->getFogMax(); - const float startH = track->getFogStartHeight(); - const float endH = track->getFogEndHeight(); const float start = track->getFogStart(); - const float end = track->getFogEnd(); const SColor tmpcol = track->getFogColor(); core::vector3df col( tmpcol.getRed() / 255.0f, diff --git a/src/graphics/render_geometry.cpp b/src/graphics/render_geometry.cpp index b60c63183..37089a38a 100644 --- a/src/graphics/render_geometry.cpp +++ b/src/graphics/render_geometry.cpp @@ -692,7 +692,6 @@ static void renderInstancedMeshNormals() glBindVertexArray(VAOManager::getInstance()->getInstanceVAO(T::VertexType, T::Instance)); for (unsigned i = 0; i < meshes.size(); i++) { - GLMesh *mesh = meshes[i]; MeshShader::NormalVisualizer::getInstance()->setUniforms(video::SColor(255, 0, 255, 0)); glDrawElementsIndirect(GL_TRIANGLES, GL_UNSIGNED_SHORT, (const void*)((SolidPassCmd::getInstance()->Offset[T::MaterialType] + i) * sizeof(DrawElementsIndirectCommand))); } diff --git a/src/graphics/render_lighting.cpp b/src/graphics/render_lighting.cpp index bc21d4c5a..1262f0881 100644 --- a/src/graphics/render_lighting.cpp +++ b/src/graphics/render_lighting.cpp @@ -201,7 +201,6 @@ void IrrDriver::renderLightsScatter(unsigned pointlightcount) const Track * const track = World::getWorld()->getTrack(); const float start = track->getFogStart(); - const video::SColor tmpcol = track->getFogColor(); core::vector3df col(1., 1., 1.); glUseProgram(LightShader::PointLightScatterShader::getInstance()->Program); @@ -223,4 +222,4 @@ void IrrDriver::renderLightsScatter(unsigned pointlightcount) glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); getFBO(FBO_COLORS).Bind(); m_post_processing->renderPassThrough(getRenderTargetTexture(RTT_HALF1)); -} \ No newline at end of file +} diff --git a/src/graphics/stkanimatedmesh.cpp b/src/graphics/stkanimatedmesh.cpp index f6746ee70..471f02687 100644 --- a/src/graphics/stkanimatedmesh.cpp +++ b/src/graphics/stkanimatedmesh.cpp @@ -208,9 +208,6 @@ void STKAnimatedMesh::updateGL() void STKAnimatedMesh::render() { - bool isTransparentPass = - SceneManager->getSceneNodeRenderPass() == scene::ESNRP_TRANSPARENT; - ++PassCount; updateNoGL(); From 63e5acdf2b1b43ab4613d411b558e496c49d1ad4 Mon Sep 17 00:00:00 2001 From: hiker Date: Tue, 25 Nov 2014 14:00:43 +1100 Subject: [PATCH 16/21] The (float) cast is not necessary, and makes it harder to read. --- src/input/wiimote.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/input/wiimote.cpp b/src/input/wiimote.cpp index eae2adbd8..f9de58a1e 100644 --- a/src/input/wiimote.cpp +++ b/src/input/wiimote.cpp @@ -44,7 +44,7 @@ Wiimote::Wiimote(wiimote_t* wiimote_handle, int wiimote_id, gamepad_config->setPlugged(); // Determine number of bits in the bit mask of all buttons. - int button_count = (int)( log((float)WIIMOTE_BUTTON_ALL) / log((float)2.0f))+1; + int button_count = (int)( log((float)WIIMOTE_BUTTON_ALL) / log(2.0f))+1; m_gamepad_device = new GamePadDevice(getIrrId(), gamepad_name.c_str(), From aac261d8734d040fe9d4b5dbb40be5ecf05f8db9 Mon Sep 17 00:00:00 2001 From: hiker Date: Tue, 25 Nov 2014 14:02:34 +1100 Subject: [PATCH 17/21] Use proper format (instead of casting unsigned to int). --- src/race/history.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/race/history.cpp b/src/race/history.cpp index 599ff26fd..bedd59769 100644 --- a/src/race/history.cpp +++ b/src/race/history.cpp @@ -253,7 +253,7 @@ void History::Load() Log::fatal("History", "Could not read history.dat."); unsigned int num_karts; - if(sscanf(s, "numkarts: %d",(int*) &num_karts)!=1) + if(sscanf(s, "numkarts: %u", &num_karts)!=1) Log::fatal("History", "No number of karts found in history file."); race_manager->setNumKarts(num_karts); From 6fbcd90226f5ee671fbaa3f353cda43e02d2f794 Mon Sep 17 00:00:00 2001 From: hiker Date: Tue, 25 Nov 2014 14:14:32 +1100 Subject: [PATCH 18/21] Better handle out-of-memory situations. --- src/graphics/gpuparticles.cpp | 57 +++++++++++++++++++++++------------ src/graphics/gpuparticles.hpp | 7 ++++- 2 files changed, 43 insertions(+), 21 deletions(-) diff --git a/src/graphics/gpuparticles.cpp b/src/graphics/gpuparticles.cpp index e873fe11e..5c0d16fd1 100644 --- a/src/graphics/gpuparticles.cpp +++ b/src/graphics/gpuparticles.cpp @@ -128,15 +128,23 @@ void generateLifetimeSizeDirection(scene::IParticleEmitter *emitter, float &life void ParticleSystemProxy::generateParticlesFromPointEmitter(scene::IParticlePointEmitter *emitter) { - ParticleData* ParticleParamsTmp = (ParticleData *) realloc(ParticleParams, sizeof(ParticleData) * count); - ParticleData* InitialValuesTmp = (ParticleData *)realloc(InitialValues, sizeof(ParticleData)* count); + ParticleData* ParticleParamsTmp = (ParticleData *) realloc(ParticleParams, sizeof(ParticleData) * m_count); + ParticleData* InitialValuesTmp = (ParticleData *)realloc(InitialValues, sizeof(ParticleData)* m_count); if(ParticleParamsTmp != NULL) // In case memory allocation succeeded + { + Log::error("GPUParticles", "Not enough memory for %d from point particles.", m_count); ParticleParams = ParticleParamsTmp; + m_count = m_previous_count; + } if(InitialValuesTmp != NULL) + { + Log::fatal("GPUParticles", "Not enough memory for %d from point particles.", m_count); InitialValues = InitialValuesTmp; + m_count = m_previous_count; + } - for (unsigned i = 0; i < count; i++) + for (unsigned i = 0; i < m_count; i++) { ParticleParams[i].PositionX = 0; ParticleParams[i].PositionY = 0; @@ -155,17 +163,25 @@ void ParticleSystemProxy::generateParticlesFromPointEmitter(scene::IParticlePoin void ParticleSystemProxy::generateParticlesFromBoxEmitter(scene::IParticleBoxEmitter *emitter) { - ParticleData* ParticleParamsTmp = (ParticleData *) realloc(ParticleParams, sizeof(ParticleData) * count); - ParticleData* InitialValuesTmp = (ParticleData *)realloc(InitialValues, sizeof(ParticleData)* count); + ParticleData* ParticleParamsTmp = (ParticleData *) realloc(ParticleParams, sizeof(ParticleData) * m_count); + ParticleData* InitialValuesTmp = (ParticleData *)realloc(InitialValues, sizeof(ParticleData)* m_count); if(ParticleParamsTmp != NULL) // In case memory allocation succeeded + { + Log::error("GPUParticles", "Not enough memory for %d from box particles.", m_count); ParticleParams = ParticleParamsTmp; + m_count = m_previous_count; + } if(InitialValuesTmp != NULL) + { + Log::error("GPUParticles", "Not enough memory for %d from box particles.", m_count); InitialValues = InitialValuesTmp; + m_count = m_previous_count; + } const core::vector3df& extent = emitter->getBox().getExtent(); - for (unsigned i = 0; i < count; i++) + for (unsigned i = 0; i < m_count; i++) { ParticleParams[i].PositionX = emitter->getBox().MinEdge.X + os::Randomizer::frand() * extent.X; ParticleParams[i].PositionY = emitter->getBox().MinEdge.Y + os::Randomizer::frand() * extent.Y; @@ -187,15 +203,15 @@ void ParticleSystemProxy::generateParticlesFromBoxEmitter(scene::IParticleBoxEmi void ParticleSystemProxy::generateParticlesFromSphereEmitter(scene::IParticleSphereEmitter *emitter) { - ParticleData* ParticleParamsTmp = (ParticleData *) realloc(ParticleParams, sizeof(ParticleData) * count); - ParticleData* InitialValuesTmp = (ParticleData *)realloc(InitialValues, sizeof(ParticleData)* count); + ParticleData* ParticleParamsTmp = (ParticleData *) realloc(ParticleParams, sizeof(ParticleData) * m_count); + ParticleData* InitialValuesTmp = (ParticleData *)realloc(InitialValues, sizeof(ParticleData)* m_count); if(ParticleParamsTmp != NULL) // In case memory allocation succeeded ParticleParams = ParticleParamsTmp; if(InitialValuesTmp != NULL) InitialValues = InitialValuesTmp; - for (unsigned i = 0; i < count; i++) { + for (unsigned i = 0; i < m_count; i++) { // Random distance from center const f32 distance = os::Randomizer::frand() * emitter->getRadius(); @@ -242,7 +258,8 @@ void ParticleSystemProxy::setEmitter(scene::IParticleEmitter* emitter) flip = false; m_first_execution = true; - count = emitter->getMaxParticlesPerSecond() * emitter->getMaxLifeTime() / 1000; + m_previous_count = m_count; // save to handle out of memory errors + m_count = emitter->getMaxParticlesPerSecond() * emitter->getMaxLifeTime() / 1000; switch (emitter->getType()) { case scene::EPET_POINT: @@ -355,7 +372,7 @@ void ParticleSystemProxy::simulate() glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 0, tfb_buffers[1]); glBeginTransformFeedback(GL_POINTS); - glDrawArrays(GL_POINTS, 0, count); + glDrawArrays(GL_POINTS, 0, m_count); glEndTransformFeedback(); glBindVertexArray(0); @@ -374,7 +391,7 @@ void ParticleSystemProxy::drawFlip() ParticleShader::FlipParticleRender::getInstance()->setUniforms(); glBindVertexArray(current_rendering_vao); - glDrawArraysInstanced(GL_TRIANGLE_STRIP, 0, 4, count); + glDrawArraysInstanced(GL_TRIANGLE_STRIP, 0, 4, m_count); } void ParticleSystemProxy::drawNotFlip() @@ -392,7 +409,7 @@ void ParticleSystemProxy::drawNotFlip() ParticleShader::SimpleParticleRender::getInstance()->setUniforms(ColorFrom, ColorTo); glBindVertexArray(current_rendering_vao); - glDrawArraysInstanced(GL_TRIANGLE_STRIP, 0, 4, count); + glDrawArraysInstanced(GL_TRIANGLE_STRIP, 0, 4, m_count); } void ParticleSystemProxy::draw() @@ -408,12 +425,12 @@ void ParticleSystemProxy::generateVAOs() glBindVertexArray(0); glGenBuffers(1, &initial_values_buffer); glBindBuffer(GL_ARRAY_BUFFER, initial_values_buffer); - glBufferData(GL_ARRAY_BUFFER, count * sizeof(ParticleData), ParticleParams, GL_STREAM_COPY); + glBufferData(GL_ARRAY_BUFFER, m_count * sizeof(ParticleData), ParticleParams, GL_STREAM_COPY); glGenBuffers(2, tfb_buffers); glBindBuffer(GL_ARRAY_BUFFER, tfb_buffers[0]); - glBufferData(GL_ARRAY_BUFFER, count * sizeof(ParticleData), InitialValues, GL_STREAM_COPY); + glBufferData(GL_ARRAY_BUFFER, m_count * sizeof(ParticleData), InitialValues, GL_STREAM_COPY); glBindBuffer(GL_ARRAY_BUFFER, tfb_buffers[1]); - glBufferData(GL_ARRAY_BUFFER, count * sizeof(ParticleData), 0, GL_STREAM_COPY); + glBufferData(GL_ARRAY_BUFFER, m_count * sizeof(ParticleData), 0, GL_STREAM_COPY); glBindBuffer(GL_ARRAY_BUFFER, 0); glGenVertexArrays(1, ¤t_rendering_vao); @@ -430,8 +447,8 @@ void ParticleSystemProxy::generateVAOs() glBindVertexArray(0); if (flip) { - float *quaternions = new float[4 * count]; - for (unsigned i = 0; i < count; i++) + float *quaternions = new float[4 * m_count]; + for (unsigned i = 0; i < m_count; i++) { core::vector3df rotationdir(0., 1., 0.); @@ -442,7 +459,7 @@ void ParticleSystemProxy::generateVAOs() } glGenBuffers(1, &quaternionsbuffer); glBindBuffer(GL_ARRAY_BUFFER, quaternionsbuffer); - glBufferData(GL_ARRAY_BUFFER, 4 * count * sizeof(float), quaternions, GL_STREAM_COPY); + glBufferData(GL_ARRAY_BUFFER, 4 * m_count * sizeof(float), quaternions, GL_STREAM_COPY); delete[] quaternions; } @@ -469,4 +486,4 @@ void ParticleSystemProxy::render() { m_first_execution = false; simulate(); draw(); -} \ No newline at end of file +} diff --git a/src/graphics/gpuparticles.hpp b/src/graphics/gpuparticles.hpp index 22844044f..be6b39d4e 100644 --- a/src/graphics/gpuparticles.hpp +++ b/src/graphics/gpuparticles.hpp @@ -21,7 +21,12 @@ protected: bool m_randomize_initial_y; GLuint texture; - unsigned count; + + /** Current count of particles. */ + unsigned m_count; + /** Previous count - for error handling only. */ + unsigned m_previous_count; + static void CommonRenderingVAO(GLuint PositionBuffer); static void AppendQuaternionRenderingVAO(GLuint QuaternionBuffer); static void CommonSimulationVAO(GLuint position_vbo, GLuint initialValues_vbo); From ebfbf5e2aa928a9ce06aa6318b024535d9954421 Mon Sep 17 00:00:00 2001 From: hiker Date: Tue, 25 Nov 2014 15:05:51 +1100 Subject: [PATCH 19/21] Updated pot file (just to check launchpad integration, no string freeze yet). --- data/po/supertuxkart.pot | 2617 +++++++++++++++++++++++++------------- 1 file changed, 1753 insertions(+), 864 deletions(-) diff --git a/data/po/supertuxkart.pot b/data/po/supertuxkart.pot index 5ddb09ded..47511a371 100644 --- a/data/po/supertuxkart.pot +++ b/data/po/supertuxkart.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: supertuxkart\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-11-12 11:39+1100\n" +"POT-Creation-Date: 2014-11-25 15:04+1100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -20,208 +20,107 @@ msgstr "" #. I18N: Do NOT literally translate this string!! Please enter Y as the #. translation if your language is a RTL (right-to-left) language, #. N (or nothing) otherwise -#: src/utils/translation.cpp:263 +#: src/utils/translation.cpp:262 msgid " Is this a RTL language?" msgstr "" -#. I18N: Cutscene subtitle from ./data/tracks/introcutscene2/scene.xml -#. I18N: ./data/tracks/introcutscene2/scene.xml -#: data/po/gui_strings.h:98 data/po/gui_strings.h:101 -msgid "" -" But you pathetic little twerps will never be able to beat me - King of the " -"Karts!" -msgstr "" - -#. I18N: shown when hit by plunger. %0 is the victim, %1 is the attacker -#: src/items/rubber_band.cpp:49 -msgid "%0 bites %1's bait" -msgstr "" - -#. I18N: shown when hit by cake. %1 is the attacker, %0 is the victim. -#: src/items/cake.cpp:151 -msgid "%0 eats too much of %1's cake" -msgstr "" - -#. I18N: shown when a player receives a plunger in his face -#: src/items/plunger.cpp:133 -msgid "%0 gets a fancy mask from %1" -msgstr "" - -#. I18N: shown when hit by bowling ball. %1 is the attacker, %0 is -#. the victim. -#: src/items/bowling.cpp:136 -msgid "%0 is bowled over by %1" -msgstr "" - -#. I18N: shown when hit by cake. %1 is the attacker, %0 is the victim. -#: src/items/cake.cpp:153 -msgid "%0 is dubious of %1's cooking skills" -msgstr "" - -#. I18N: shown when hit by cake. %1 is the attacker, %0 is the victim. -#: src/items/cake.cpp:155 -msgid "%0 should not play with %1's lunch" -msgstr "" - -#. I18N: shown when hit by bowling ball. %1 is the attacker, %0 is -#. the victim. -#: src/items/bowling.cpp:130 -msgid "%0 will not go bowling with %1 again" -msgstr "" - -#. I18N: shown when hit by swatter. %1 is the attacker, %0 is the victim. -#: src/items/swatter.cpp:340 -msgid "%1 flattens %0" -msgstr "" - -#. I18N: shown when hit by plunger. %0 is the victim, %1 is the attacker -#: src/items/rubber_band.cpp:51 -msgid "%1 latches onto %0 for a free ride" -msgstr "" - -#. I18N: shown when a player receives a plunger in his face -#: src/items/plunger.cpp:135 -msgid "%1 merges %0's face with a plunger" -msgstr "" - -#. I18N: shown when hit by cake. %1 is the attacker, %0 is the victim. -#: src/items/cake.cpp:157 -msgid "%1 ruins %0's cakeless diet" -msgstr "" - -#. I18N: shown when hit by bowling ball. %1 is the attacker, %0 is -#. the victim. -#: src/items/bowling.cpp:133 -msgid "%1 strikes %0" -msgstr "" - -#. I18N: shown when hit by plunger. %0 is the victim, %1 is the attacker -#: src/items/rubber_band.cpp:53 -msgid "%1 tests a tractor beam on %0" -msgstr "" - -#. I18N: shown when hit by swatter. %1 is the attacker, %0 is the victim. -#: src/items/swatter.cpp:338 -msgid "%1 thinks %0 is a big fly" -msgstr "" - -#. I18N: ./data/gui/track_info_dialog.stkgui -#. I18N: In the track setup screen (number of laps choice, where %i is the number) -#: data/po/gui_strings.h:316 +#: src/online/online_player_profile.cpp:406 #, c-format -msgid "%i laps" +msgid "%d friends are now online." msgstr "" -#. I18N: as in: The Old Island by Johannes Sjolund -#: src/states_screens/addons_screen.cpp:314 +#: src/guiengine/widgets/player_kart_widget.cpp:359 #, c-format -msgid "" -"%s\n" -"by %s" +msgid "%s (handicapped)" msgstr "" -#: src/states_screens/dialogs/addons_loading.cpp:171 -#: src/states_screens/dialogs/addons_loading.cpp:175 +#: src/states_screens/dialogs/addons_loading.cpp:172 +#: src/states_screens/dialogs/addons_loading.cpp:176 #, c-format msgid "%s KB" msgstr "" -#: src/states_screens/dialogs/addons_loading.cpp:164 +#: src/states_screens/dialogs/addons_loading.cpp:165 #, c-format msgid "%s MB" msgstr "" +#: src/online/online_player_profile.cpp:396 +#, c-format +msgid "%s and %s are now online." +msgstr "" + #. I18N: as in: The Old Island by Johannes Sjolund -#: src/states_screens/addons_screen.cpp:304 +#: src/states_screens/addons_screen.cpp:306 #, c-format msgctxt "addons" msgid "%s by %s" msgstr "" #. I18N: as in "fastest lap: 60 seconds by Wilber" -#: src/modes/linear_world.cpp:350 +#: src/modes/linear_world.cpp:355 #, c-format msgctxt "fastest_lap" msgid "%s by %s" msgstr "" -#. I18N: shown when hit by swatter. %s is the victim -#: src/items/swatter.cpp:342 +#: src/online/online_player_profile.cpp:392 #, c-format -msgid "%s feels flat today" +msgid "%s is now online." msgstr "" -#: src/items/powerup.cpp:51 -#, c-format -msgid "%s is a mighty pirate!" -msgstr "" - -#. I18N: shown when a player is hit by a rubber ball. %1 is the -#. attacker, %0 is the victim. -#: src/items/rubber_ball.cpp:310 -#, c-format -msgid "%s is being bounced around." -msgstr "" - -#. I18N: shown when hit by own bowling ball. %s is the kart. -#: src/items/bowling.cpp:146 -#, c-format -msgid "%s is practicing with a blue, big, spheric yo-yo" -msgstr "" - -#: src/states_screens/kart_selection.cpp:597 +#: src/guiengine/widgets/player_kart_widget.cpp:419 #, c-format msgid "%s is ready" msgstr "" -#. I18N: shown when hit by own bowling ball. %s is the kart. -#: src/items/bowling.cpp:148 +#: src/online/online_player_profile.cpp:401 #, c-format -msgid "%s is the world master of the boomerang ball" +msgid "%s, %s and %s are now online." msgstr "" -#: src/items/powerup.cpp:50 -#, c-format -msgid "%s pays the next round of grog!" -msgstr "" - -#. I18N: shown when hit by own bowling ball. %s is the kart. -#: src/items/bowling.cpp:150 -#, c-format -msgid "%s should play (rubber) darts instead of bowling" -msgstr "" - -#: src/modes/world.cpp:1028 +#: src/modes/world.cpp:1149 #, c-format msgid "'%s' has been eliminated." msgstr "" +#: src/states_screens/online_profile_base.cpp:102 +msgid "'s profile" +msgstr "" + +#: src/states_screens/create_server_screen.cpp:60 +msgid "'s server" +msgstr "" + #. I18N: for empty highscores entries -#. I18N: ./data/gui/track_info_dialog.stkgui -#: src/states_screens/dialogs/track_info_dialog.cpp:227 -#: data/po/gui_strings.h:302 data/po/gui_strings.h:305 -#: data/po/gui_strings.h:308 +#. I18N: ./data/gui/track_info.stkgui +#: src/states_screens/track_info_screen.cpp:252 data/po/gui_strings.h:211 +#: data/po/gui_strings.h:214 data/po/gui_strings.h:217 msgid "(Empty)" msgstr "" #. I18N: ./data/gui/help4.stkgui -#: data/po/gui_strings.h:241 +#: data/po/gui_strings.h:189 msgid "(network play is not yet available)" msgstr "" -#: src/states_screens/options_screen_input2.cpp:322 +#: src/states_screens/options_screen_input2.cpp:372 msgid "* A blue item means a conflict with another configuration" msgstr "" +#: src/states_screens/options_screen_input2.cpp:377 +msgid "* A red item means a conflict in the current configuration" +msgstr "" + #. I18N: ./data/gui/help1.stkgui #. I18N: in the help screen -#: data/po/gui_strings.h:646 +#: data/po/gui_strings.h:1128 msgid "* Current key bindings can be seen/changed in menu Options" msgstr "" #. I18N: ./data/gui/help3.stkgui #. I18N: In the help menu -#: data/po/gui_strings.h:760 +#: data/po/gui_strings.h:1232 msgid "" "* Most of these game modes can also be played in a Grand Prix fashion: " "instead of playing a single race, you play many in a row. The better you " @@ -229,102 +128,163 @@ msgid "" "wins the cup." msgstr "" +#. I18N: ./data/gui/custom_video_settings.stkgui +#. I18N: Video settings +#: data/po/gui_strings.h:785 +msgid "* Restart STK to apply new settings" +msgstr "" + #. I18N: ./data/gui/options_input.stkgui -#: data/po/gui_strings.h:216 +#: data/po/gui_strings.h:164 msgid "" -"* Which config to use will be inferred from which 'fire' key is pressed to " +"* Which config to use will be inferred from which 'Select' key is pressed to " "join the game." msgstr "" -#: src/states_screens/addons_screen.cpp:49 +#. I18N: ./data/gui/online/profile_overview.stkgui +#. I18N: ./data/gui/online/profile_achievements.stkgui +#. I18N: ./data/gui/online/profile_settings.stkgui +#. I18N: ./data/gui/online/profile_friends.stkgui +#: data/po/gui_strings.h:295 data/po/gui_strings.h:310 +#: data/po/gui_strings.h:404 data/po/gui_strings.h:574 +msgid "..." +msgstr "" + +#: src/states_screens/addons_screen.cpp:52 msgid "1 month" msgstr "" -#: src/states_screens/addons_screen.cpp:47 +#: src/states_screens/addons_screen.cpp:50 msgid "1 week" msgstr "" -#: src/states_screens/addons_screen.cpp:53 +#: src/states_screens/addons_screen.cpp:56 msgid "1 year" msgstr "" -#: src/states_screens/addons_screen.cpp:48 +#: src/states_screens/addons_screen.cpp:51 msgid "2 weeks" msgstr "" -#: src/states_screens/addons_screen.cpp:54 +#: src/states_screens/addons_screen.cpp:57 msgid "2 years" msgstr "" #. I18N: Game mode -#: src/race/race_manager.hpp:181 +#: src/race/race_manager.hpp:182 msgid "3 Strikes Battle" msgstr "" #. I18N: ./data/gui/help3.stkgui #. I18N: In the help menu -#: data/po/gui_strings.h:748 +#: data/po/gui_strings.h:1220 msgid "" "3 Strikes Battle: Only in multiplayer games. Hit others with weapons until " "they lose all their lives." msgstr "" -#: src/states_screens/addons_screen.cpp:50 +#: src/states_screens/addons_screen.cpp:53 msgid "3 months" msgstr "" -#: src/states_screens/addons_screen.cpp:51 +#: src/states_screens/addons_screen.cpp:54 msgid "6 months" msgstr "" -#: src/states_screens/addons_screen.cpp:52 +#: src/states_screens/addons_screen.cpp:55 msgid "9 months" msgstr "" -#. I18N: ./data/gui/track_info_dialog.stkgui -#: data/po/gui_strings.h:299 +#. I18N: ./data/gui/track_info.stkgui +#: data/po/gui_strings.h:208 msgid "= Highscores =" msgstr "" -#: src/items/powerup.cpp:84 -msgid "A wizard did it!" +#. I18N: ./data/gui/gp_info.stkgui +#. I18N: In the grand prix info screen +#: data/po/gui_strings.h:126 +msgid "AI karts" msgstr "" -#: src/states_screens/race_result_gui.cpp:126 +#: src/states_screens/race_result_gui.cpp:178 msgid "Abort Grand Prix" msgstr "" #. I18N: ./data/gui/main.stkgui -#. I18N: Main menu button -#: data/po/gui_strings.h:546 +#. I18N: In the main screen +#: data/po/gui_strings.h:1006 msgid "About" msgstr "" #. I18N: Key binding name -#: src/states_screens/options_screen_input2.cpp:190 +#: src/states_screens/options_screen_input2.cpp:236 msgid "Accelerate" msgstr "" -#: src/tracks/track_object_presentation.cpp:667 +#: src/tracks/track_object_presentation.cpp:942 #, c-format msgid "" "Accelerate and press the <%s> key while turning to skid. Skidding for a " "short while can help you turn faster to take sharp turns." msgstr "" -#: src/tracks/track_object_presentation.cpp:610 +#: src/tracks/track_object_presentation.cpp:875 #, c-format msgid "Accelerate with <%s> and steer with <%s> and <%s>" msgstr "" +#. I18N: ./data/gui/online/user_info_dialog.stkgui +#. I18N: User info dialog +#. I18N: ./data/gui/online/registration_terms.stkgui +#. I18N: In the registration dialog +#: data/po/gui_strings.h:358 data/po/gui_strings.h:621 +msgid "Accept" +msgstr "" + +#. I18N: ./data/gui/online/recovery_input.stkgui +#. I18N: In the recovery dialog +#. I18N: ./data/gui/online/recovery_info.stkgui +#. I18N: In the recovery dialog +#: data/po/gui_strings.h:479 data/po/gui_strings.h:563 +msgid "Account Recovery" +msgstr "" + +#. I18N: ./data/gui/online/profile_settings.stkgui +#. I18N: Section in the profile screen +#: src/states_screens/online_profile_base.cpp:95 data/po/gui_strings.h:408 +msgid "Account Settings" +msgstr "" + +#. I18N: ./data/gui/online/profile_achievements.stkgui +#. I18N: Section in the profile screen +#: src/states_screens/online_profile_base.cpp:94 data/po/gui_strings.h:314 +msgid "Achievements" +msgstr "" + +#: src/states_screens/options_screen_input2.cpp:71 +msgid "Action" +msgstr "" + +#. I18N: ./data/gui/gpedit.stkgui +#. I18N: Menu item +#: data/po/gui_strings.h:1305 +msgid "Add" +msgstr "" + +#. I18N: ./data/gui/online/user_info_dialog.stkgui +#. I18N: User info dialog +#: data/po/gui_strings.h:354 +msgid "Add Friend" +msgstr "" + #. I18N: In the 'add new input device' dialog #: src/states_screens/dialogs/add_device_dialog.cpp:111 msgid "Add Keyboard Configuration" msgstr "" #. I18N: ./data/gui/options_players.stkgui -#. I18N: In players configuration menu -#: data/po/gui_strings.h:514 +#. I18N: In the player configuration screen +#: data/po/gui_strings.h:948 msgid "Add Player" msgstr "" @@ -335,34 +295,49 @@ msgstr "" #. I18N: ./data/gui/options_input.stkgui #. I18N: In the input configuration screen -#: data/po/gui_strings.h:213 +#: data/po/gui_strings.h:161 msgid "Add a device" msgstr "" +#. I18N: ./data/gui/user_screen_tab.stkgui +#. I18N: In the user screen +#. I18N: ./data/gui/user_screen.stkgui +#. I18N: In the user screen +#: data/po/gui_strings.h:264 data/po/gui_strings.h:918 +msgid "Add user" +msgstr "" + #. I18N: arena group name #. I18N: track group name #. I18N: kart group name +#. I18N: track group name +#. I18N: ./data/gui/easter_egg.stkgui +#. I18N: track group #. I18N: ./data/gui/arenas.stkgui #. I18N: track group -#: src/states_screens/arenas_screen.cpp:81 -#: src/states_screens/tracks_screen.cpp:176 -#: src/states_screens/kart_selection.cpp:1042 data/po/gui_strings.h:585 +#: src/states_screens/arenas_screen.cpp:83 +#: src/states_screens/grand_prix_editor_screen.cpp:336 +#: src/states_screens/tracks_screen.cpp:154 +#: src/states_screens/kart_selection.cpp:286 +#: src/states_screens/easter_egg_screen.cpp:145 data/po/gui_strings.h:288 +#: data/po/gui_strings.h:1067 msgid "Add-Ons" msgstr "" -#: src/states_screens/addons_screen.cpp:107 +#: src/states_screens/addons_screen.cpp:110 msgid "Add-on name" msgstr "" #. I18N: ./data/gui/main.stkgui #. I18N: Main menu button -#: data/po/gui_strings.h:530 +#: data/po/gui_strings.h:968 msgid "Addons" msgstr "" -#. I18N: ./data/karts/adiumy/kart.xml -#: data/po/gui_strings.h:867 -msgid "Adiumy" +#. I18N: ./data/gui/custom_video_settings.stkgui +#. I18N: Video settings +#: data/po/gui_strings.h:721 +msgid "Advanced pipeline (lights, etc.)" msgstr "" #. I18N: name of the tab that will show arenas from all groups @@ -370,408 +345,464 @@ msgstr "" #. I18N: Time filters for add-ons #. I18N: name of the tab that will show tracks from all groups #. I18N: if all kart animations are enabled +#. I18N: ./data/gui/easter_egg.stkgui +#. I18N: track group #. I18N: ./data/gui/arenas.stkgui #. I18N: track group -#: src/states_screens/arenas_screen.cpp:73 -#: src/states_screens/tracks_screen.cpp:168 -#: src/states_screens/addons_screen.cpp:46 -#: src/states_screens/kart_selection.cpp:1034 -#: src/states_screens/options_screen_video.cpp:353 data/po/gui_strings.h:589 +#: src/states_screens/arenas_screen.cpp:75 +#: src/states_screens/grand_prix_editor_screen.cpp:333 +#: src/states_screens/tracks_screen.cpp:146 +#: src/states_screens/addons_screen.cpp:49 +#: src/states_screens/kart_selection.cpp:278 +#: src/states_screens/easter_egg_screen.cpp:137 +#: src/states_screens/gp_info_screen.cpp:76 +#: src/states_screens/edit_track_screen.cpp:147 +#: src/states_screens/options_screen_video.cpp:412 data/po/gui_strings.h:292 +#: data/po/gui_strings.h:1071 msgid "All" msgstr "" #. I18N: ./data/gui/tracks.stkgui -#. I18N: Section in track selection screen -#: data/po/gui_strings.h:194 +#. I18N: In the track selection screen +#. I18N: ./data/gui/easter_egg.stkgui +#. I18N: Section in easter egg tracks selection screen +#: data/po/gui_strings.h:118 data/po/gui_strings.h:280 msgid "All Tracks" msgstr "" -#: src/states_screens/race_setup_screen.cpp:259 +#: src/states_screens/race_setup_screen.cpp:202 msgid "All blows allowed, so catch weapons and make clever use of them!" msgstr "" #. I18N: ./data/gui/options_ui.stkgui #. I18N: In the ui settings -#: data/po/gui_strings.h:451 -msgid "Allow STK to connect to the Internet" +#: data/po/gui_strings.h:807 +msgid "Always show login screen" msgstr "" -#. I18N: ./data/tracks/jungle/track.xml -#: data/po/gui_strings.h:17 -msgid "Amazonian Journey" +#. I18N: ./data/gui/custom_video_settings.stkgui +#. I18N: Video settings +#: data/po/gui_strings.h:737 +msgid "Ambient Occlusion" +msgstr "" + +#. I18N: in graphical options +#: src/states_screens/options_screen_video.cpp:442 +#, c-format +msgid "Ambient occlusion : %s" +msgstr "" + +#: src/states_screens/edit_gp_screen.cpp:323 +msgid "An error occurred while trying to save your grand prix." msgstr "" #. I18N: ./data/gui/help2.stkgui -#: data/po/gui_strings.h:687 +#: data/po/gui_strings.h:1169 msgid "Anchor - slows down greatly the kart in the first position." msgstr "" #. I18N: ./data/gui/custom_video_settings.stkgui #. I18N: Video settings -#: data/po/gui_strings.h:413 +#: data/po/gui_strings.h:777 msgid "Animated Characters" msgstr "" #. I18N: in graphical options -#: src/states_screens/options_screen_video.cpp:379 +#: src/states_screens/options_screen_video.cpp:428 #, c-format msgid "Animated Characters : %s" msgstr "" #. I18N: ./data/gui/custom_video_settings.stkgui #. I18N: Video settings -#: data/po/gui_strings.h:405 +#: data/po/gui_strings.h:765 msgid "Animated Scenery" msgstr "" #. I18N: in graphical options -#: src/states_screens/options_screen_video.cpp:373 +#. tooltip = tooltip + L"\n" + _("Pixel shaders : %s", +#. UserConfigParams::m_pixel_shaders ? enabled : disabled); +#. I18N: in graphical options +#: src/states_screens/options_screen_video.cpp:422 #, c-format msgid "Animated Scenery : %s" msgstr "" -#: src/states_screens/dialogs/custom_video_settings.cpp:75 +#: src/states_screens/dialogs/custom_video_settings.cpp:79 msgid "Anisotropic x16" msgstr "" -#: src/states_screens/dialogs/custom_video_settings.cpp:72 +#: src/states_screens/dialogs/custom_video_settings.cpp:76 msgid "Anisotropic x2" msgstr "" -#: src/states_screens/dialogs/custom_video_settings.cpp:73 +#: src/states_screens/dialogs/custom_video_settings.cpp:77 msgid "Anisotropic x4" msgstr "" -#: src/states_screens/dialogs/custom_video_settings.cpp:74 +#: src/states_screens/dialogs/custom_video_settings.cpp:78 msgid "Anisotropic x8" msgstr "" +#: src/states_screens/dialogs/enter_gp_name_dialog.cpp:95 +msgid "Another grand prix with this name already exists." +msgstr "" + #. I18N: ./data/gui/custom_video_settings.stkgui #. I18N: Video settings -#: data/po/gui_strings.h:421 -msgid "Anti-aliasing (requires restart)" +#: data/po/gui_strings.h:749 +msgid "Anti-aliasing" msgstr "" #. I18N: in graphical options -#: src/states_screens/options_screen_video.cpp:384 +#: src/states_screens/options_screen_video.cpp:439 #, c-format -msgid "Anti-aliasing (requires restart) : %s" +msgid "Anti-aliasing : %s" +msgstr "" + +#. I18N: ./data/gui/custom_video_settings.stkgui +#: data/po/gui_strings.h:788 +msgid "Apply" msgstr "" #. I18N: ./data/gui/options_video.stkgui -#. I18N: In the video settings menu -#: data/po/gui_strings.h:296 +#. I18N: In the video settings +#: data/po/gui_strings.h:660 msgid "Apply new resolution" msgstr "" #. I18N: shown before deleting an input configuration -#: src/states_screens/options_screen_input2.cpp:504 +#: src/states_screens/options_screen_input2.cpp:575 msgid "Are you sure you want to permanently delete this configuration?" msgstr "" +#: src/states_screens/grand_prix_editor_screen.cpp:109 +#: src/states_screens/edit_gp_screen.cpp:123 +#, c-format +msgid "Are you sure you want to remove '%s'?" +msgstr "" + #. I18N: ./data/gui/addons_screen.stkgui -#. I18N: Section in the addons menu +#. I18N: In the addons screen #. I18N: ./data/gui/arenas.stkgui #. I18N: Section in arena tracks selection screen -#: data/po/gui_strings.h:573 data/po/gui_strings.h:577 +#: data/po/gui_strings.h:1051 data/po/gui_strings.h:1059 msgid "Arenas" msgstr "" -#. I18N: ./data/tracks/lighthouse/track.xml -#: data/po/gui_strings.h:44 -msgid "Around the lighthouse" -msgstr "" - -#. I18N: shown when anchor applied. %s is the victim. -#: src/items/powerup.cpp:49 -#, c-format -msgid "Arrr, the %s dropped anchor, Captain!" -msgstr "" - #. I18N: ./data/gui/press_a_key_dialog.stkgui #. I18N: When configuring input -#: data/po/gui_strings.h:462 +#: data/po/gui_strings.h:830 +msgid "Assign nothing" +msgstr "" + +#. I18N: ./data/gui/press_a_key_dialog.stkgui +#. I18N: When configuring input +#: data/po/gui_strings.h:826 msgid "Assign to ESC key" msgstr "" #. I18N: ./data/grandprix/4_atworldsend.grandprix -#: data/po/gui_strings.h:110 data/po/gui_strings.h:816 +#: data/po/gui_strings.h:8 data/po/gui_strings.h:1326 msgid "At World's End" msgstr "" #. I18N: ./data/gui/options_audio.stkgui #. I18N: Section in the settings menu -#: src/states_screens/options_screen_input2.cpp:71 -#: src/states_screens/options_screen_input.cpp:138 -#: src/states_screens/options_screen_players.cpp:71 -#: src/states_screens/options_screen_ui.cpp:112 -#: src/states_screens/options_screen_video.cpp:87 data/po/gui_strings.h:139 +#: src/states_screens/options_screen_input2.cpp:86 +#: src/states_screens/options_screen_input.cpp:139 +#: src/states_screens/options_screen_ui.cpp:119 +#: src/states_screens/user_screen.cpp:592 +#: src/states_screens/options_screen_video.cpp:136 data/po/gui_strings.h:51 msgid "Audio" msgstr "" #. I18N: ./data/gui/help1.stkgui #. I18N: In the help menu -#: src/tracks/track_object_presentation.cpp:618 data/po/gui_strings.h:630 +#: src/tracks/track_object_presentation.cpp:883 data/po/gui_strings.h:1112 msgid "Avoid bananas!" msgstr "" #. I18N: to appear in input configuration screen, for gamepad axes -#: src/input/binding.cpp:293 +#: src/input/binding.cpp:284 #, c-format msgid "Axis %d" msgstr "" #. I18N: to appear in input configuration screen, for gamepad axes -#: src/input/binding.cpp:281 +#: src/input/binding.cpp:272 #, c-format msgid "Axis %d %s" msgstr "" #. I18N: to appear in input configuration screen, for gamepad axes -#: src/input/binding.cpp:288 +#: src/input/binding.cpp:279 #, c-format msgid "Axis %d inverted" msgstr "" #. I18N: ./data/gui/addons_loading.stkgui -#. I18N: Add-ons screen action -#: src/states_screens/dialogs/addons_loading.cpp:260 data/po/gui_strings.h:186 +#. I18N: Add-on screen action +#: src/states_screens/dialogs/addons_loading.cpp:284 +#: src/input/gamepad_config.cpp:203 data/po/gui_strings.h:102 msgid "Back" msgstr "" #. I18N: ./data/gui/overworld_dialog.stkgui -#. I18N: Race paused button -#: data/po/gui_strings.h:476 +#. I18N: In the in-game dialog +#: data/po/gui_strings.h:847 msgid "Back to Game" msgstr "" #. I18N: ./data/gui/race_paused_dialog.stkgui #. I18N: Race paused button -#: data/po/gui_strings.h:326 +#: data/po/gui_strings.h:667 msgid "Back to Race" msgstr "" -#: src/states_screens/race_result_gui.cpp:142 +#: src/states_screens/race_result_gui.cpp:194 msgid "Back to challenge selection" msgstr "" #. I18N: ./data/gui/options_device.stkgui #. I18N: In the input configuration screen -#: data/po/gui_strings.h:398 +#: data/po/gui_strings.h:714 msgid "Back to device list" msgstr "" #. I18N: ./data/gui/overworld_dialog.stkgui -#. I18N: Race paused button -#: data/po/gui_strings.h:492 +#. I18N: In the in-game dialog +#: data/po/gui_strings.h:863 msgid "Back to menu" msgstr "" -#: src/states_screens/race_result_gui.cpp:148 +#: src/states_screens/race_result_gui.cpp:200 msgid "Back to the menu" msgstr "" -#: src/items/powerup.cpp:85 -msgid "Banana? Box? Banana? Box? Banana? Box?" -msgstr "" - #. I18N: ./data/gui/help2.stkgui -#: data/po/gui_strings.h:693 +#: data/po/gui_strings.h:1175 msgid "" "Basket Ball - bounces after the leader, and might squash and slow down karts " "down on the way." msgstr "" -#. I18N: ./data/tracks/battleisland/track.xml -#: data/po/gui_strings.h:23 -msgid "Battle Island" -msgstr "" - -#. I18N: ./data/karts/beagle/kart.xml -#: data/po/gui_strings.h:837 -msgid "Beagle" -msgstr "" - -#. I18N: ./data/karts/beastie/kart.xml -#: data/po/gui_strings.h:849 -msgid "Beastie" -msgstr "" - #. I18N: when failing a GP -#: src/states_screens/grand_prix_lose.cpp:260 +#: src/states_screens/grand_prix_lose.cpp:163 msgid "Better luck next time!" msgstr "" -#: src/states_screens/dialogs/custom_video_settings.cpp:70 +#: src/states_screens/dialogs/custom_video_settings.cpp:74 msgid "Bilinear" msgstr "" -#. I18N: ./data/tracks/mansion/track.xml -#: data/po/gui_strings.h:29 -msgid "Blackhill Mansion" +#. I18N: Name of the black button on xbox controller +#: src/input/gamepad_config.cpp:167 +msgid "Black" msgstr "" -#: src/states_screens/race_result_gui.cpp:864 +#. I18N: ./data/gui/custom_video_settings.stkgui +#. I18N: Video settings +#: data/po/gui_strings.h:729 +msgid "Bloom" +msgstr "" + +#. I18N: in graphical options +#: src/states_screens/options_screen_video.cpp:449 +#, c-format +msgid "Bloom : %s" +msgstr "" + +#. I18N: ./data/gui/debug_slider.stkgui +#: data/po/gui_strings.h:1019 +msgid "Blue" +msgstr "" + +#: src/states_screens/race_result_gui.cpp:959 msgid "Blue Team Wins" msgstr "" -#. I18N: ./data/tracks/farm/track.xml -#: data/po/gui_strings.h:38 -msgid "Bovine Barnyard" -msgstr "" - #. I18N: ./data/gui/help2.stkgui -#: data/po/gui_strings.h:681 +#: data/po/gui_strings.h:1163 msgid "" "Bowling Ball - bounces off walls. If you are looking back, it will be thrown " "backwards." msgstr "" #. I18N: Key binding name -#: src/states_screens/options_screen_input2.cpp:193 +#: src/states_screens/options_screen_input2.cpp:239 msgid "Brake" msgstr "" #. I18N: ./data/gui/help2.stkgui -#: data/po/gui_strings.h:672 +#: data/po/gui_strings.h:1154 msgid "" "BubbleGum - protect yourself with a shield, or use while looking back to " "leave a sticky pink puddle behind you." msgstr "" -#. I18N: Cutscene subtitle from ./data/tracks/introcutscene2/scene.xml -#. I18N: ./data/tracks/introcutscene2/scene.xml -#: data/po/gui_strings.h:86 data/po/gui_strings.h:89 -msgid "But I'm a fair creature, so I'll make you a deal." -msgstr "" - #. I18N: ./data/gui/help2.stkgui -#: data/po/gui_strings.h:675 +#: data/po/gui_strings.h:1157 msgid "" "Cake - thrown at the closest rival, best on short ranges and long straights." msgstr "" -#: src/addons/network_http.cpp:432 src/addons/news_manager.cpp:149 +#: src/addons/addons_manager.cpp:97 src/addons/news_manager.cpp:315 msgid "Can't access stkaddons server..." msgstr "" -#: src/addons/network_http.cpp:339 -msgid "Can't download addons list, check terminal for details." -msgstr "" - -#: src/addons/network_http.cpp:349 -msgid "Can't download news file, check terminal for details." -msgstr "" - +#. I18N: ./data/gui/edit_track.stkgui +#. I18N: ./data/gui/enter_player_name_dialog.stkgui +#. I18N: In the 'add new player' dialog #. I18N: ./data/gui/confirm_dialog.stkgui #. I18N: In a 'are you sure?' dialog -#. I18N: ./data/gui/story_mode_new.stkgui +#. I18N: ./data/gui/user_screen_tab.stkgui +#. I18N: In the user screen +#. I18N: ./data/gui/online/server_info_dialog.stkgui +#. I18N: In the server info dialog +#. I18N: ./data/gui/online/create_server.stkgui +#. I18N: In the server creation screen +#. I18N: ./data/gui/online/register.stkgui +#. I18N: In the registration dialog +#. I18N: ./data/gui/online/recovery_input.stkgui +#. I18N: In the recovery dialog +#. I18N: ./data/gui/online/registration_terms.stkgui +#. I18N: In the registration dialog #. I18N: ./data/gui/confirm_resolution_dialog.stkgui #. I18N: In the 'confirm resolution' dialog, that's shown when switching resoluton +#. I18N: ./data/gui/user_screen.stkgui +#. I18N: In the user screen #: src/states_screens/dialogs/add_device_dialog.cpp:128 -#: src/states_screens/dialogs/player_info_dialog.cpp:106 -#: src/states_screens/dialogs/addons_loading.cpp:226 data/po/gui_strings.h:257 -#: data/po/gui_strings.h:375 data/po/gui_strings.h:383 +#: src/states_screens/dialogs/addons_loading.cpp:227 +#: src/states_screens/user_screen.cpp:83 data/po/gui_strings.h:44 +#: data/po/gui_strings.h:87 data/po/gui_strings.h:205 +#: data/po/gui_strings.h:276 data/po/gui_strings.h:338 +#: data/po/gui_strings.h:435 data/po/gui_strings.h:475 +#: data/po/gui_strings.h:498 data/po/gui_strings.h:625 +#: data/po/gui_strings.h:699 data/po/gui_strings.h:930 msgid "Cancel" msgstr "" -#. I18N: In the player info dialog (when deleting) -#: src/states_screens/dialogs/player_info_dialog.cpp:198 -msgid "Cancel Remove" -msgstr "" - #. I18N: Key binding name -#: src/states_screens/options_screen_input2.cpp:231 +#: src/states_screens/options_screen_input2.cpp:277 msgid "Cancel/Back" msgstr "" -#: src/states_screens/dialogs/enter_player_name_dialog.cpp:126 -#: src/states_screens/dialogs/enter_player_name_dialog.cpp:145 -msgid "Cannot add a player with this name." -msgstr "" - -#. I18N: ./data/tracks/cave/track.xml -#: data/po/gui_strings.h:20 -msgid "Cave X" -msgstr "" - -#: src/states_screens/feature_unlocked.cpp:574 +#: src/states_screens/feature_unlocked.cpp:492 msgid "Challenge Completed" msgstr "" -#: src/states_screens/race_gui.cpp:320 src/states_screens/race_gui.cpp:322 +#: src/states_screens/race_gui.cpp:313 src/states_screens/race_gui.cpp:315 msgid "Challenge Failed" msgstr "" #. I18N: ./data/gui/challenges.stkgui #. I18N: Title for challenges screen -#: data/po/gui_strings.h:496 +#: data/po/gui_strings.h:891 msgid "Challenges : Trophy Room" msgstr "" +#. I18N: ./data/gui/online/profile_settings.stkgui +#: data/po/gui_strings.h:415 +msgid "Change" +msgstr "" + +#. I18N: ./data/gui/karts_online.stkgui +#. I18N: In the kart selection (player setup) screen #. I18N: ./data/gui/karts.stkgui #. I18N: In the kart selection (player setup) screen -#: data/po/gui_strings.h:600 +#: data/po/gui_strings.h:1055 data/po/gui_strings.h:1082 msgid "Choose a Kart" msgstr "" #. I18N: ./data/gui/help1.stkgui -#: data/po/gui_strings.h:622 +#: data/po/gui_strings.h:1104 msgid "Click here to play the tutorial" msgstr "" -#. I18N: ./data/gui/custom_video_settings.stkgui -#: data/po/gui_strings.h:432 +#. I18N: ./data/gui/online/vote_dialog.stkgui +#. I18N: Vote dialog +#. I18N: ./data/gui/online/notification_dialog.stkgui +#. I18N: User info dialog +#. I18N: ./data/gui/online/user_info_dialog.stkgui +#. I18N: User info dialog +#. I18N: ./data/gui/online/guest_login.stkgui +#. I18N: In the login dialog +#. I18N: ./data/gui/online/recovery_info.stkgui +#. I18N: In the recovery dialog +#. I18N: ./data/gui/online/change_password.stkgui +#. I18N: In the change password dialog +#: data/po/gui_strings.h:307 data/po/gui_strings.h:322 +#: data/po/gui_strings.h:370 data/po/gui_strings.h:401 +#: data/po/gui_strings.h:571 data/po/gui_strings.h:609 msgid "Close" msgstr "" #. I18N: ./data/gui/help1.stkgui #. I18N: In the help menu -#: data/po/gui_strings.h:626 +#: data/po/gui_strings.h:1108 msgid "Collect blue boxes : they will give you weapons or other powerups" msgstr "" -#: src/tracks/track_object_presentation.cpp:627 +#: src/tracks/track_object_presentation.cpp:892 #, c-format msgid "" "Collect gift boxes, and fire the weapon with <%s> to blow away these boxes!" msgstr "" -#: src/tracks/track_object_presentation.cpp:634 +#: src/tracks/track_object_presentation.cpp:909 msgid "Collect nitro bottles (we will use them after the curve)" msgstr "" -#: src/states_screens/race_gui_base.cpp:730 +#: src/states_screens/race_gui_base.cpp:650 msgid "Collect nitro!" msgstr "" #. I18N: ./data/gui/help1.stkgui #. I18N: In the help menu -#: data/po/gui_strings.h:634 +#: data/po/gui_strings.h:1116 msgid "" "Collecting nitro allows you to get speed boosts whenever you wish by " "pressing the appropriate key. You can see your current level of nitro in the " "bar at the right of the game screen." msgstr "" -#. I18N: In the player info dialog (when deleting) -#: src/states_screens/dialogs/player_info_dialog.cpp:179 -msgid "Confirm Remove" +#: src/tracks/track_object_presentation.cpp:859 +msgid "Complete all challenges to unlock the big door!" +msgstr "" + +#: src/achievements/achievement.cpp:202 +#, c-format +msgid "Completed achievement \"%s\"." +msgstr "" + +#. I18N: ./data/gui/online/register.stkgui +#. I18N: In the registration dialog +#. I18N: ./data/gui/online/change_password.stkgui +#. I18N: In the change password dialog +#: data/po/gui_strings.h:459 data/po/gui_strings.h:601 +msgid "Confirm" msgstr "" #. I18N: In the 'confirm resolution' dialog, that's shown when switching resoluton -#: src/states_screens/dialogs/confirm_resolution_dialog.cpp:72 +#: src/states_screens/dialogs/confirm_resolution_dialog.cpp:81 #, c-format msgid "Confirm resolution within %i seconds" msgstr "" -#: src/input/wiimote_manager.cpp:309 +#. I18N: ./data/gui/options_ui.stkgui +#. I18N: In the ui settings +#: data/po/gui_strings.h:819 +msgid "Connect to the Internet" +msgstr "" + +#: src/input/wiimote_manager.cpp:387 msgid "" "Connect your wiimote to the Bluetooth manager, then click on Ok.Detailed " "instructions at supertuxkart.net/Wiimote" msgstr "" -#: src/states_screens/race_setup_screen.cpp:266 +#: src/states_screens/race_setup_screen.cpp:209 msgid "Contains no powerups, so only your driving skills matter!" msgstr "" @@ -782,108 +813,240 @@ msgstr "" #. I18N: ./data/gui/grand_prix_lose.stkgui #. I18N: ./data/gui/soccer_setup.stkgui #. I18N: In soccer setup screen -#: src/states_screens/race_result_gui.cpp:123 data/po/gui_strings.h:174 -#: data/po/gui_strings.h:198 data/po/gui_strings.h:469 -#: data/po/gui_strings.h:789 data/po/gui_strings.h:807 +#: src/states_screens/race_result_gui.cpp:175 +#: src/states_screens/dialogs/gp_info_dialog.cpp:212 data/po/gui_strings.h:90 +#: data/po/gui_strings.h:122 data/po/gui_strings.h:837 +#: data/po/gui_strings.h:1260 data/po/gui_strings.h:1289 msgid "Continue" msgstr "" +#. I18N: ./data/gui/gp_info.stkgui +#. I18N: In the grand prix info screen +#: src/states_screens/gp_info_screen.cpp:142 data/po/gui_strings.h:146 +msgid "Continue saved GP" +msgstr "" + +#: src/states_screens/race_result_gui.cpp:145 +msgid "Continue." +msgstr "" + #. I18N: ./data/gui/options_input.stkgui #. I18N: Section in the settings menu #. I18N: ./data/gui/options_device.stkgui #. I18N: Section in the settings menu -#: src/states_screens/options_screen_players.cpp:73 -#: src/states_screens/options_screen_ui.cpp:114 -#: src/states_screens/options_screen_audio.cpp:66 -#: src/states_screens/options_screen_video.cpp:90 data/po/gui_strings.h:205 -#: data/po/gui_strings.h:390 +#: src/states_screens/options_screen_ui.cpp:121 +#: src/states_screens/options_screen_audio.cpp:67 +#: src/states_screens/user_screen.cpp:594 +#: src/states_screens/options_screen_video.cpp:139 data/po/gui_strings.h:153 +#: data/po/gui_strings.h:706 msgid "Controls" msgstr "" -#: src/input/wiimote_manager.cpp:344 +#. I18N: ./data/gui/gpeditor.stkgui +#. I18N: Menu item +#: data/po/gui_strings.h:875 +msgid "Copy" +msgstr "" + +#: src/states_screens/register_screen.cpp:178 +#: src/states_screens/register_screen.cpp:185 +#, c-format +msgid "Could not create player '%s'." +msgstr "" + +#: src/input/wiimote_manager.cpp:422 msgid "Could not detect any wiimote :/" msgstr "" -#. I18N: ./data/gui/story_mode_lobby.stkgui -#. I18N: In story mode 'select a game slot' menu -#: data/po/gui_strings.h:706 -msgid "Create a new player" +#. I18N: ./data/gui/online/create_server.stkgui +#. I18N: In the server creation screen +#: data/po/gui_strings.h:431 +msgid "Create" +msgstr "" + +#. I18N: ./data/gui/online/main.stkgui +#. I18N: In the online multiplayer screen +#: data/po/gui_strings.h:535 +msgid "Create Server" +msgstr "" + +#. I18N: ./data/gui/online/register.stkgui +#. I18N: In the registration dialog +#: data/po/gui_strings.h:439 +msgid "Create User" +msgstr "" + +#. I18N: ./data/gui/online/register.stkgui +#. I18N: In the registration dialog +#: data/po/gui_strings.h:447 +msgid "Create online account" +msgstr "" + +#: src/states_screens/create_server_screen.cpp:117 +msgid "Creating server" msgstr "" #. I18N: ./data/gui/credits.stkgui #. I18N: Title in credits screen -#: data/po/gui_strings.h:710 +#: data/po/gui_strings.h:1182 msgid "Credits" msgstr "" +#. I18N: ./data/gui/online/change_password.stkgui +#. I18N: In the change password dialog +#: data/po/gui_strings.h:593 +msgid "Current Password" +msgstr "" + +#: src/states_screens/dialogs/change_password_dialog.cpp:134 +msgid "Current password invalid." +msgstr "" + +#: src/config/player_manager.cpp:91 +msgid "Currently not signed in" +msgstr "" + #. I18N: custom video settings -#: src/states_screens/options_screen_video.cpp:330 +#: src/states_screens/options_screen_video.cpp:389 msgid "Custom" msgstr "" #. I18N: ./data/gui/options_video.stkgui #. I18N: In the video settings -#: data/po/gui_strings.h:272 +#: data/po/gui_strings.h:640 msgid "Custom settings..." msgstr "" +#: src/input/gamepad_config.cpp:186 src/input/gamepad_config.cpp:225 +msgid "DPad down" +msgstr "" + +#: src/input/gamepad_config.cpp:185 src/input/gamepad_config.cpp:227 +msgid "DPad left" +msgstr "" + +#: src/input/gamepad_config.cpp:184 src/input/gamepad_config.cpp:226 +msgid "DPad right" +msgstr "" + +#: src/input/gamepad_config.cpp:187 src/input/gamepad_config.cpp:224 +msgid "DPad up" +msgstr "" + +#. I18N: ./data/gui/online/user_info_dialog.stkgui +#. I18N: User info dialog +#: data/po/gui_strings.h:362 +msgid "Decline" +msgstr "" + +#: src/states_screens/gp_info_screen.cpp:74 +msgid "Default" +msgstr "" + +#. I18N: ./data/gui/user_screen_tab.stkgui +#. I18N: In the user screen +#. I18N: ./data/gui/user_screen.stkgui +#. I18N: In the user screen +#: data/po/gui_strings.h:268 data/po/gui_strings.h:922 +msgid "Delete" +msgstr "" + #. I18N: ./data/gui/options_device.stkgui -#. I18N: To delete a keyboard configuration -#: src/states_screens/options_screen_input2.cpp:96 data/po/gui_strings.h:394 +#. I18N: In the input configuration screen +#: src/states_screens/options_screen_input2.cpp:111 data/po/gui_strings.h:710 msgid "Delete Configuration" msgstr "" +#. I18N: ./data/gui/custom_video_settings.stkgui +#. I18N: Video settings +#: data/po/gui_strings.h:757 +msgid "Depth of field" +msgstr "" + +#. I18N: in graphical options +#: src/states_screens/options_screen_video.cpp:461 +#, c-format +msgid "Depth of field : %s" +msgstr "" + #. I18N: button to disable a gamepad configuration -#: src/states_screens/options_screen_input2.cpp:81 -#: src/states_screens/options_screen_input2.cpp:516 +#: src/states_screens/options_screen_input2.cpp:96 +#: src/states_screens/options_screen_input2.cpp:587 msgid "Disable Device" msgstr "" #. I18N: in the graphical options tooltip; #. indicates a graphical feature is disabled -#: src/states_screens/dialogs/custom_video_settings.cpp:56 -#: src/states_screens/dialogs/custom_video_settings.cpp:80 -#: src/states_screens/options_screen_video.cpp:351 +#: src/states_screens/dialogs/custom_video_settings.cpp:60 +#: src/states_screens/dialogs/custom_video_settings.cpp:84 +#: src/states_screens/options_screen_video.cpp:410 msgid "Disabled" msgstr "" #. I18N: ./data/gui/options_ui.stkgui #. I18N: In the ui settings -#: data/po/gui_strings.h:447 +#: data/po/gui_strings.h:803 msgid "Display FPS" msgstr "" -#: src/states_screens/race_result_gui.cpp:238 +#: src/states_screens/race_result_gui.cpp:342 msgid "Do you really want to abort the Grand Prix?" msgstr "" #. I18N: In the player info dialog (when deleting) -#: src/states_screens/dialogs/player_info_dialog.cpp:155 +#: src/states_screens/user_screen.cpp:528 #, c-format msgid "Do you really want to delete player '%s' ?" msgstr "" -#: src/items/powerup.cpp:68 -msgid "Do you want to fly kites?" +#: src/states_screens/edit_gp_screen.cpp:140 +msgid "Do you want to save your changes?" msgstr "" -#: src/karts/controller/player_controller.cpp:334 +#: src/karts/controller/network_player_controller.cpp:283 +#: src/karts/controller/player_controller.cpp:340 msgid "Don't accelerate before go" msgstr "" #. I18N: Key binding name -#: src/states_screens/options_screen_input2.cpp:219 +#: src/states_screens/options_screen_input2.cpp:265 msgid "Down" msgstr "" +#. I18N: ./data/gui/track_info.stkgui +#. I18N: In the track info screen +#: data/po/gui_strings.h:229 +msgid "Drive in reverse" +msgstr "" + +#. I18N: in graphical options +#: src/states_screens/options_screen_video.cpp:433 +#, c-format +msgid "Dynamic lights : %s" +msgstr "" + +#. I18N: ./data/gui/gpeditor.stkgui +#. I18N: Menu item +#. I18N: ./data/gui/gpedit.stkgui +#. I18N: Menu item +#: data/po/gui_strings.h:879 data/po/gui_strings.h:1309 +msgid "Edit" +msgstr "" + +#. I18N: ./data/gui/gpedit.stkgui +#. I18N: Title in edit grand prix screen +#: data/po/gui_strings.h:1293 +msgid "Edit Grand Prix" +msgstr "" + #. I18N: Game mode -#: src/race/race_manager.hpp:183 +#: src/race/race_manager.hpp:184 msgid "Egg Hunt" msgstr "" #. I18N: ./data/gui/help3.stkgui #. I18N: In the help menu -#: data/po/gui_strings.h:756 +#: data/po/gui_strings.h:1228 msgid "Egg hunt: Explore tracks to find all hidden eggs." msgstr "" @@ -892,92 +1055,156 @@ msgstr "" msgid "Eggs: %d / %d" msgstr "" -#. I18N: ./data/karts/elephpant/kart.xml -#: data/po/gui_strings.h:858 -msgid "Elephpant" -msgstr "" - -#: src/states_screens/race_result_gui.cpp:353 -#: src/states_screens/race_result_gui.cpp:717 +#: src/states_screens/race_result_gui.cpp:462 +#: src/states_screens/race_result_gui.cpp:823 msgid "Eliminated" msgstr "" -#. I18N: ./data/karts/emule/kart.xml -#: data/po/gui_strings.h:840 -msgid "Emule" +#. I18N: ./data/gui/online/register.stkgui +#. I18N: In the registration dialog +#. I18N: ./data/gui/online/recovery_input.stkgui +#. I18N: In the recovery dialog +#: data/po/gui_strings.h:463 data/po/gui_strings.h:490 +msgid "Email" +msgstr "" + +#: src/states_screens/register_screen.cpp:246 +msgid "Email has to be between 4 and 50 characters long!" +msgstr "" + +#: src/states_screens/register_screen.cpp:252 +msgid "Email is invalid!" +msgstr "" + +#: src/states_screens/register_screen.cpp:230 +msgid "Emails don't match!" msgstr "" #. I18N: button to enable a gamepad configuration -#: src/states_screens/options_screen_input2.cpp:83 -#: src/states_screens/options_screen_input2.cpp:517 +#: src/states_screens/options_screen_input2.cpp:98 +#: src/states_screens/options_screen_input2.cpp:588 msgid "Enable Device" msgstr "" +#. I18N: ./data/gui/options_ui.stkgui +#. I18N: In the ui settings +#: data/po/gui_strings.h:815 +msgid "Enable handicaped users" +msgstr "" + #. I18N: in the graphical options tooltip; #. indicates a graphical feature is enabled #. I18N: ./data/gui/options_audio.stkgui -#. I18N: Next to checkbox in settings menu -#: src/states_screens/options_screen_video.cpp:348 data/po/gui_strings.h:147 -#: data/po/gui_strings.h:159 +#. I18N: In the audio options screen +#: src/states_screens/options_screen_video.cpp:407 data/po/gui_strings.h:59 +#: data/po/gui_strings.h:71 msgid "Enabled" msgstr "" #. I18N: animations setting (all karts are animated) -#: src/states_screens/dialogs/custom_video_settings.cpp:60 +#: src/states_screens/dialogs/custom_video_settings.cpp:64 msgid "Enabled for all" msgstr "" #. I18N: ./data/gui/enter_player_name_dialog.stkgui #. I18N: In the 'add new player' dialog -#: data/po/gui_strings.h:167 +#: data/po/gui_strings.h:79 msgid "Enter the new player's name" msgstr "" -#: src/states_screens/kart_selection.cpp:1287 +#: src/addons/news_manager.cpp:172 +#, c-format +msgid "Error downloading news: '%s'." +msgstr "" + +#: src/states_screens/kart_selection.cpp:927 msgid "" "Everyone:\n" "Press 'Select' now to join the game!" msgstr "" +#. I18N: ./data/gui/online/lobby.stkgui +#. I18N: In the networking lobby +#: data/po/gui_strings.h:559 +msgid "Exit" +msgstr "" + #. I18N: ./data/gui/race_paused_dialog.stkgui #. I18N: Race paused button -#: data/po/gui_strings.h:350 +#: data/po/gui_strings.h:691 msgid "Exit Race" msgstr "" +#: src/states_screens/user_screen.cpp:82 +msgid "Exit game" +msgstr "" + #. I18N: ./data/gui/select_challenge.stkgui #. I18N: Difficulty -#. I18N: ./data/gui/story_mode_new.stkgui -#. I18N: Difficulty #. I18N: ./data/gui/racesetup.stkgui #. I18N: Difficulty -#: data/po/gui_strings.h:132 data/po/gui_strings.h:369 -#: data/po/gui_strings.h:779 +#: data/po/gui_strings.h:30 data/po/gui_strings.h:1250 msgid "Expert" msgstr "" -#: src/states_screens/race_setup_screen.cpp:309 +#: src/states_screens/race_setup_screen.cpp:252 msgid "Explore tracks to find all hidden eggs" msgstr "" -#. I18N: shown when a player is hit by a rubber ball. %1 is the -#. attacker, %0 is the victim. -#: src/items/rubber_ball.cpp:313 -msgid "Fetch the ball, %0!" +#: src/graphics/irr_driver.cpp:1837 +#, c-format +msgid "FPS: %d/%d/%d - PolyCount: %d Solid, %d Shadows - LightDist : %d" msgstr "" -#: src/modes/linear_world.cpp:266 +#: src/graphics/irr_driver.cpp:1846 +#, c-format +msgid "FPS: %d/%d/%d - %d KTris" +msgstr "" + +#: src/states_screens/online_profile_achievements.cpp:126 +#: src/states_screens/online_profile_achievements.cpp:166 +msgid "Fetching achievements" +msgstr "" + +#: src/states_screens/online_profile_friends.cpp:88 +#: src/states_screens/online_profile_friends.cpp:174 +msgid "Fetching friends" +msgstr "" + +#: src/states_screens/dialogs/vote_dialog.cpp:171 +msgid "Fetching last vote" +msgstr "" + +#: src/states_screens/server_selection.cpp:67 +#: src/states_screens/server_selection.cpp:210 +msgid "Fetching servers" +msgstr "" + +#. I18N: ./data/gui/online/recovery_input.stkgui +#: data/po/gui_strings.h:482 +msgid "" +"Fill in the username and email address you supplied at registration to be " +"able to reset your password." +msgstr "" + +#: src/modes/linear_world.cpp:277 msgid "Final lap!" msgstr "" +#. I18N: ./data/gui/online/main.stkgui +#. I18N: In the online multiplayer screen +#: data/po/gui_strings.h:531 +msgid "Find Server" +msgstr "" + #. I18N: Key binding name -#: src/states_screens/options_screen_input2.cpp:196 +#: src/states_screens/options_screen_input2.cpp:242 msgid "Fire" msgstr "" #. I18N: ./data/gui/help4.stkgui #. I18N: In the help menu -#: data/po/gui_strings.h:245 +#: data/po/gui_strings.h:193 msgid "" "First, you will need several input devices (having multiple gamepads or " "joysticks is the best way to play with several people). Go in the input " @@ -988,46 +1215,67 @@ msgid "" msgstr "" #. I18N: Game mode -#: src/race/race_manager.hpp:179 +#: src/race/race_manager.hpp:180 msgid "Follow the Leader" msgstr "" -#: src/states_screens/race_gui_base.cpp:732 +#: src/states_screens/race_gui_base.cpp:652 msgid "Follow the leader!" msgstr "" #. I18N: ./data/gui/help3.stkgui #. I18N: In the help menu -#: data/po/gui_strings.h:744 +#: data/po/gui_strings.h:1216 msgid "" "Follow the leader: Run for second place, as the last kart will be " "disqualified every time the counter hits zero. Beware : going in front of " "the leader will get you eliminated too!" msgstr "" -#. I18N: ./data/tracks/fortmagma/track.xml -#: data/po/gui_strings.h:56 -msgid "Fort Magma" -msgstr "" - -#: src/input/wiimote_manager.cpp:336 +#: src/input/wiimote_manager.cpp:414 #, c-format msgid "Found %d wiimote(s)" msgstr "" +#: src/states_screens/dialogs/user_info_dialog.cpp:313 +msgid "Friend removed!" +msgstr "" + +#: src/states_screens/dialogs/user_info_dialog.cpp:215 +msgid "Friend request accepted!" +msgstr "" + +#: src/states_screens/dialogs/user_info_dialog.cpp:364 +msgid "Friend request cancelled!" +msgstr "" + +#: src/states_screens/dialogs/user_info_dialog.cpp:267 +msgid "Friend request declined!" +msgstr "" + +#: src/states_screens/dialogs/user_info_dialog.cpp:158 +msgid "Friend request send!" +msgstr "" + +#. I18N: ./data/gui/online/profile_friends.stkgui +#. I18N: Section in the profile screen +#: src/states_screens/online_profile_base.cpp:93 data/po/gui_strings.h:578 +msgid "Friends" +msgstr "" + #. I18N: ./data/gui/options_video.stkgui #. I18N: In the video settings -#: data/po/gui_strings.h:288 +#: data/po/gui_strings.h:652 msgid "Fullscreen" msgstr "" #. I18N: Shown when a goal is scored -#: src/states_screens/race_gui_base.cpp:73 +#: src/states_screens/race_gui_base.cpp:70 msgid "GOAL!" msgstr "" #. I18N: Key binding section -#: src/states_screens/options_screen_input2.cpp:129 +#: src/states_screens/options_screen_input2.cpp:144 msgid "Game Keys" msgstr "" @@ -1039,19 +1287,25 @@ msgstr "" #. I18N: Tab in help menu #. I18N: ./data/gui/help3.stkgui #. I18N: Tab in help menu -#: data/po/gui_strings.h:231 data/po/gui_strings.h:615 -#: data/po/gui_strings.h:661 data/po/gui_strings.h:725 +#: data/po/gui_strings.h:179 data/po/gui_strings.h:1097 +#: data/po/gui_strings.h:1143 data/po/gui_strings.h:1197 msgid "Game Modes" msgstr "" +#. I18N: ./data/gui/soccer_setup.stkgui +#. I18N: In soccer setup screen +#: data/po/gui_strings.h:1278 +msgid "Game type (Goals limit / Time limit)" +msgstr "" + #. I18N: to appear in input configuration screen, for gamepad buttons -#: src/input/binding.cpp:301 +#: src/input/binding.cpp:292 #, c-format msgid "Gamepad button %d" msgstr "" #. I18N: to appear in input configuration screen, for gamepad hats -#: src/input/binding.cpp:269 src/input/binding.cpp:274 +#: src/input/binding.cpp:260 src/input/binding.cpp:265 #, c-format msgid "Gamepad hat %d" msgstr "" @@ -1064,269 +1318,408 @@ msgstr "" #. I18N: Tab in help menu #. I18N: ./data/gui/help3.stkgui #. I18N: Tab in help menu -#: data/po/gui_strings.h:223 data/po/gui_strings.h:607 -#: data/po/gui_strings.h:653 data/po/gui_strings.h:717 +#: data/po/gui_strings.h:171 data/po/gui_strings.h:1089 +#: data/po/gui_strings.h:1135 data/po/gui_strings.h:1189 msgid "General" msgstr "" -#: src/items/powerup.cpp:66 -msgid "Geronimo!!!" -msgstr "" - #. I18N: ./data/gui/race_paused_dialog.stkgui #. I18N: Race paused button -#: data/po/gui_strings.h:338 +#: data/po/gui_strings.h:679 msgid "Give Up Race" msgstr "" -#. I18N: ./data/karts/gnu/kart.xml -#: data/po/gui_strings.h:828 -msgid "Gnu" +#. I18N: ./data/gui/custom_video_settings.stkgui +#. I18N: Video settings +#: data/po/gui_strings.h:741 +msgid "Global illumination" +msgstr "" + +#. I18N: in graphical options +#: src/states_screens/options_screen_video.cpp:465 +#, c-format +msgid "Global illumination : %s" +msgstr "" + +#. I18N: ./data/gui/custom_video_settings.stkgui +#. I18N: Video settings +#: data/po/gui_strings.h:745 +msgid "Glow (outlines)" +msgstr "" + +#. I18N: in graphical options +#: src/states_screens/options_screen_video.cpp:453 +#, c-format +msgid "Glow (outlines) : %s" msgstr "" #. I18N: as in "ready, set, go", shown at the beginning of the race -#: src/states_screens/race_gui_base.cpp:71 +#: src/states_screens/race_gui_base.cpp:68 msgid "Go!" msgstr "" #. I18N: ./data/gui/tracks.stkgui -#. I18N: Section in track selection screen -#: src/states_screens/dialogs/select_challenge.cpp:140 -#: data/po/gui_strings.h:190 +#. I18N: In the track selection screen +#: src/states_screens/dialogs/select_challenge.cpp:145 +#: data/po/gui_strings.h:114 msgid "Grand Prix" msgstr "" -#: src/states_screens/race_result_gui.cpp:1070 +#. I18N: ./data/gui/main.stkgui +#. I18N: In the main screen +#: data/po/gui_strings.h:1002 +msgid "Grand Prix Editor" +msgstr "" + +#. I18N: ./data/gui/gpeditor.stkgui +#. I18N: Title in grand prix editor screen +#: data/po/gui_strings.h:867 +msgid "Grand Prix editor" +msgstr "" + +#: src/states_screens/race_result_gui.cpp:1204 msgid "Grand Prix progress:" msgstr "" #. I18N: ./data/gui/options_video.stkgui -#. I18N: In the graphics settings -#: data/po/gui_strings.h:268 +#. I18N: In the video settings +#: data/po/gui_strings.h:636 msgid "Graphical Effects Level" msgstr "" #. I18N: ./data/gui/options_video.stkgui #. I18N: Section in the settings menu -#: src/states_screens/options_screen_input2.cpp:70 -#: src/states_screens/options_screen_input.cpp:137 -#: src/states_screens/options_screen_players.cpp:70 -#: src/states_screens/options_screen_ui.cpp:111 -#: src/states_screens/options_screen_audio.cpp:63 data/po/gui_strings.h:264 +#: src/states_screens/options_screen_input2.cpp:85 +#: src/states_screens/options_screen_input.cpp:138 +#: src/states_screens/options_screen_ui.cpp:118 +#: src/states_screens/options_screen_audio.cpp:64 +#: src/states_screens/user_screen.cpp:591 data/po/gui_strings.h:632 msgid "Graphics" msgstr "" #. I18N: ./data/gui/custom_video_settings.stkgui -#: data/po/gui_strings.h:401 +#: data/po/gui_strings.h:717 msgid "Graphics Settings" msgstr "" -#. I18N: ./data/tracks/greenvalley/track.xml -#: data/po/gui_strings.h:8 -msgid "Green Valley" +#. I18N: ./data/gui/debug_slider.stkgui +#: data/po/gui_strings.h:1016 +msgid "Green" msgstr "" -#: src/config/user_config.cpp:607 src/config/user_config.cpp:727 +#. I18N: Name of first guest player (without number) +#: src/config/player_manager.cpp:392 msgid "Guest" msgstr "" -#. I18N: ./data/tracks/hacienda/track.xml -#: data/po/gui_strings.h:62 -msgid "Hacienda" +#. I18N: Name of further guest players, with a 1, 2, ... attached +#: src/config/player_manager.cpp:397 +#, c-format +msgid "Guest %d" +msgstr "" + +#. I18N: ./data/gui/online/guest_login.stkgui +#. I18N: In the login dialog +#: data/po/gui_strings.h:389 +msgid "Guest Sign in" msgstr "" #. I18N: ./data/gui/race_paused_dialog.stkgui #. I18N: Race paused button #. I18N: ./data/gui/overworld_dialog.stkgui -#. I18N: Race paused button +#. I18N: In the in-game dialog #. I18N: ./data/gui/main.stkgui -#. I18N: Main menu button -#: data/po/gui_strings.h:346 data/po/gui_strings.h:488 -#: data/po/gui_strings.h:538 +#. I18N: In the main screen +#: data/po/gui_strings.h:687 data/po/gui_strings.h:859 +#: data/po/gui_strings.h:994 msgid "Help" msgstr "" -#. I18N: ./data/karts/hexley/kart.xml -#: data/po/gui_strings.h:825 -msgid "Hexley" -msgstr "" - -#: src/states_screens/race_result_gui.cpp:1103 +#: src/states_screens/race_result_gui.cpp:1242 msgid "Highscores" msgstr "" -#: src/states_screens/race_setup_screen.cpp:288 +#: src/states_screens/race_setup_screen.cpp:231 msgid "" "Hit others with weapons until they lose all their lives. (Only in " "multiplayer games)" msgstr "" #. I18N: animations setting (only karts with human players are animated) -#: src/states_screens/dialogs/custom_video_settings.cpp:58 +#: src/states_screens/dialogs/custom_video_settings.cpp:62 msgid "Human players only" msgstr "" -#. I18N: Cutscene subtitle from ./data/tracks/introcutscene2/scene.xml -#. I18N: ./data/tracks/introcutscene2/scene.xml -#: data/po/gui_strings.h:92 data/po/gui_strings.h:95 -msgid "If you can beat me at racing, I will free the old codger." +#. I18N: ./data/gui/online/registration_terms.stkgui +#. I18N: In the registration dialog +#: data/po/gui_strings.h:617 +msgid "I agree to the above terms and am 13 years or older. " msgstr "" #. I18N: ./data/gui/help1.stkgui #. I18N: In the help menu -#: data/po/gui_strings.h:638 +#: data/po/gui_strings.h:1120 msgid "" "If you see a button with a lock like this one, you need to complete a " "challenge to unlock it." msgstr "" -#: src/input/input_manager.cpp:656 +#: src/input/input_manager.cpp:716 #, c-format msgid "Ignoring '%s', you needed to join earlier to play!" msgstr "" #. I18N: ./data/gui/addons_loading.stkgui #. I18N: Add-on screen action -#: data/po/gui_strings.h:178 +#: data/po/gui_strings.h:94 msgid "Install" msgstr "" #. I18N: ./data/gui/select_challenge.stkgui #. I18N: Difficulty -#. I18N: ./data/gui/story_mode_new.stkgui -#. I18N: Difficulty #. I18N: ./data/gui/racesetup.stkgui #. I18N: Difficulty -#: data/po/gui_strings.h:128 data/po/gui_strings.h:365 -#: data/po/gui_strings.h:775 +#: data/po/gui_strings.h:26 data/po/gui_strings.h:1246 msgid "Intermediate" msgstr "" -#: src/states_screens/race_result_gui.cpp:869 +#: src/states_screens/register_screen.cpp:347 +#: src/states_screens/user_screen.cpp:277 +msgid "Internet access is disabled, please enable it in the options" +msgstr "" + +#: src/states_screens/race_result_gui.cpp:964 msgid "It's a draw" msgstr "" +#. I18N: ./data/gui/online/server_info_dialog.stkgui +#. I18N: In the server info dialog +#: data/po/gui_strings.h:334 +msgid "Join" +msgstr "" + +#: src/states_screens/dialogs/server_info_dialog.cpp:155 +msgid "Joining server" +msgstr "" + #. I18N: ./data/gui/addons_screen.stkgui -#. I18N: Section in the addons menu -#: data/po/gui_strings.h:565 +#. I18N: In the addons screen +#: data/po/gui_strings.h:1043 msgid "Karts" msgstr "" #. I18N: ./data/gui/confirm_resolution_dialog.stkgui #. I18N: In the 'confirm resolution' dialog, that's shown when switching resoluton -#: data/po/gui_strings.h:379 +#: data/po/gui_strings.h:695 msgid "Keep this resolution" msgstr "" #. I18N: short definition for follow-the-leader game mode -#: src/states_screens/race_setup_screen.cpp:279 +#: src/states_screens/race_setup_screen.cpp:222 msgid "Keep up with the leader kart but don't overtake it!" msgstr "" -#: src/states_screens/options_screen_input.cpp:96 +#: src/states_screens/options_screen_input2.cpp:72 +msgid "Key binding" +msgstr "" + +#: src/states_screens/options_screen_input.cpp:97 #, c-format msgid "Keyboard %i" msgstr "" -#. I18N: ./data/karts/konqi/kart.xml -#: data/po/gui_strings.h:861 -msgid "Konqi" -msgstr "" - #. I18N: Shown at the end of a race -#: src/states_screens/race_gui.cpp:103 -#: src/states_screens/race_gui_overworld.cpp:106 +#: src/states_screens/race_gui_overworld.cpp:108 msgid "Lap" msgstr "" -#: src/modes/linear_world.cpp:293 +#: src/modes/linear_world.cpp:304 #, c-format msgid "Lap %i" msgstr "" +#: src/states_screens/edit_gp_screen.cpp:67 +msgid "Laps" +msgstr "" + #. I18N: number of laps to race in a challenge -#: src/challenges/challenge_data.cpp:255 +#: src/challenges/challenge_data.cpp:249 #, c-format msgid "Laps : %i" msgstr "" -#: src/modes/follow_the_leader.cpp:56 src/modes/follow_the_leader.cpp:251 +#: src/modes/follow_the_leader.cpp:57 src/modes/follow_the_leader.cpp:252 msgid "Leader" msgstr "" #. I18N: Key binding name -#: src/states_screens/options_screen_input2.cpp:222 +#: src/states_screens/options_screen_input2.cpp:268 msgid "Left" msgstr "" -#: src/guiengine/engine.cpp:1286 +#: src/input/gamepad_config.cpp:201 +msgid "Left bumper" +msgstr "" + +#: src/input/gamepad_config.cpp:205 +msgid "Left thumb button" +msgstr "" + +#: src/input/gamepad_config.cpp:216 +msgid "Left thumb down" +msgstr "" + +#: src/input/gamepad_config.cpp:215 +msgid "Left thumb left" +msgstr "" + +#: src/input/gamepad_config.cpp:214 +msgid "Left thumb right" +msgstr "" + +#: src/input/gamepad_config.cpp:217 +msgid "Left thumb up" +msgstr "" + +#: src/input/gamepad_config.cpp:178 src/input/gamepad_config.cpp:218 +msgid "Left trigger" +msgstr "" + +#. I18N: ./data/gui/custom_video_settings.stkgui +#. I18N: Video settings +#: data/po/gui_strings.h:733 +msgid "Light shaft (God rays)" +msgstr "" + +#. I18N: in graphical options +#: src/states_screens/options_screen_video.cpp:457 +#, c-format +msgid "Light shaft (God rays) : %s" +msgstr "" + +#: src/guiengine/engine.cpp:1324 msgid "Loading" msgstr "" -#: src/states_screens/kart_selection.cpp:933 +#. I18N: ./data/gui/online/lobby.stkgui +#. I18N: In networking lobby +#: data/po/gui_strings.h:547 +msgid "Lobby" +msgstr "" + +#. I18N: ./data/gui/online/lobby_settings.stkgui +#. I18N: In the lobby settings screen +#: data/po/gui_strings.h:508 +msgid "Lobby Settings" +msgstr "" + +#. I18N: ./data/gui/online/register.stkgui +#. I18N: In the registration dialog +#: data/po/gui_strings.h:443 +msgid "Local Username" +msgstr "" + +#: src/states_screens/kart_selection.cpp:856 msgid "Locked" msgstr "" -#: src/states_screens/arenas_screen.cpp:239 -#: src/states_screens/arenas_screen.cpp:269 -#: src/states_screens/tracks_screen.cpp:297 -#: src/states_screens/tracks_screen.cpp:328 -#: src/states_screens/kart_selection.cpp:938 -#: src/states_screens/kart_selection.cpp:2064 -#: src/states_screens/kart_selection.cpp:2096 -#: src/states_screens/race_setup_screen.cpp:271 +#: src/states_screens/arenas_screen.cpp:237 +#: src/states_screens/arenas_screen.cpp:267 +#: src/states_screens/tracks_screen.cpp:282 +#: src/states_screens/kart_selection.cpp:861 +#: src/states_screens/kart_selection.cpp:1453 +#: src/states_screens/easter_egg_screen.cpp:225 +#: src/states_screens/easter_egg_screen.cpp:256 +#: src/states_screens/race_setup_screen.cpp:214 msgid "Locked : solve active challenges to gain access to more!" msgstr "" -#: src/states_screens/tracks_screen.cpp:234 +#: src/states_screens/tracks_screen.cpp:200 msgid "Locked!" msgstr "" +#. I18N: ./data/gui/online/guest_login.stkgui +#. I18N: ./data/gui/user_screen.stkgui +#: src/states_screens/main_menu_screen.cpp:175 +#: src/states_screens/main_menu_screen.cpp:186 data/po/gui_strings.h:373 +#: data/po/gui_strings.h:894 +msgid "Login" +msgstr "" + #. I18N: Key binding name -#: src/states_screens/options_screen_input2.cpp:205 +#: src/states_screens/options_screen_input2.cpp:251 msgid "Look Back" msgstr "" -#: src/items/powerup.cpp:83 -msgid "Magic, son. Nothing else in the world smells like that." +#. I18N: ./data/gui/online/profile_friends.stkgui +#. I18N: In the profile screen +#: data/po/gui_strings.h:582 +msgid "Look for more friends:" +msgstr "" + +#. I18N: ./data/gui/online/create_server.stkgui +#. I18N: In the server creation screen +#. I18N: ./data/gui/online/lobby_settings.stkgui +#. I18N: In the lobby settings screen +#: data/po/gui_strings.h:427 data/po/gui_strings.h:516 +msgid "Max. number of players" +msgstr "" + +#. I18N: ./data/gui/soccer_setup.stkgui +#. I18N: In soccer setup screen +#: data/po/gui_strings.h:1274 +msgid "Maximum time (min.)" msgstr "" #. I18N: if some kart animations are enabled -#: src/states_screens/options_screen_video.cpp:355 +#: src/states_screens/options_screen_video.cpp:414 msgid "Me Only" msgstr "" #. I18N: Key binding section -#: src/states_screens/options_screen_input2.cpp:143 +#: src/states_screens/options_screen_input2.cpp:158 msgid "Menu Keys" msgstr "" -#. I18N: ./data/tracks/minigolf/track.xml -#: data/po/gui_strings.h:47 -msgid "Minigolf Mischief" +#. I18N: ./data/gui/custom_video_settings.stkgui +#. I18N: Video settings +#: data/po/gui_strings.h:753 +msgid "Motion blur" msgstr "" -#. I18N: ./data/gui/options_ui.stkgui -#. I18N: In the ui settings -#: data/po/gui_strings.h:455 -msgid "Minimal Race GUI" +#. I18N: in graphical options +#: src/states_screens/options_screen_video.cpp:436 +#, c-format +msgid "Motion blur: %s" msgstr "" #. I18N: to appear in input configuration screen, for mouse (might not be used at all) -#: src/input/binding.cpp:308 +#: src/input/binding.cpp:299 #, c-format msgid "Mouse axis %d %s" msgstr "" #. I18N: to appear in input configuration screen, for mouse (might not be used at all) -#: src/input/binding.cpp:304 +#: src/input/binding.cpp:295 #, c-format msgid "Mouse button %d" msgstr "" +#. I18N: ./data/gui/gpedit.stkgui +#. I18N: Menu item +#: data/po/gui_strings.h:1301 +msgid "Move down" +msgstr "" + +#. I18N: ./data/gui/gpedit.stkgui +#. I18N: Menu item +#: data/po/gui_strings.h:1297 +msgid "Move up" +msgstr "" + #. I18N: ./data/gui/main.stkgui #. I18N: Main menu button -#: data/po/gui_strings.h:526 +#: data/po/gui_strings.h:960 msgid "Multiplayer" msgstr "" @@ -1338,81 +1731,118 @@ msgstr "" #. I18N: Tab in help menu #. I18N: ./data/gui/help3.stkgui #. I18N: Tab in help menu -#: data/po/gui_strings.h:235 data/po/gui_strings.h:619 -#: data/po/gui_strings.h:665 data/po/gui_strings.h:729 +#: data/po/gui_strings.h:183 data/po/gui_strings.h:1101 +#: data/po/gui_strings.h:1147 data/po/gui_strings.h:1201 msgid "Multi­player" msgstr "" #. I18N: ./data/gui/options_audio.stkgui -#. I18N: Section in the audio/video settings submenu -#: data/po/gui_strings.h:143 +#. I18N: In the audio options screen +#: data/po/gui_strings.h:55 msgid "Music" msgstr "" -#. I18N: ./data/gui/story_mode_new.stkgui -#: data/po/gui_strings.h:353 -msgid "New Game" +#. I18N: ./data/gui/online/server_info_dialog.stkgui +#. I18N: In the server info dialog +#. I18N: ./data/gui/online/user_info_dialog.stkgui +#. I18N: User info dialog +#: src/states_screens/online_profile_achievements.cpp:72 +#: src/states_screens/server_selection.cpp:91 data/po/gui_strings.h:330 +#: data/po/gui_strings.h:346 +msgid "Name" msgstr "" -#: src/challenges/challenge_data.cpp:509 +#: src/states_screens/create_server_screen.cpp:132 +msgid "Name has to be between 4 and 30 characters long!" +msgstr "" + +#: src/states_screens/dialogs/enter_gp_name_dialog.cpp:89 +msgid "Name is empty." +msgstr "" + +#: src/states_screens/dialogs/enter_gp_name_dialog.cpp:100 +msgid "Name is too long." +msgstr "" + +#. I18N: ./data/gui/online/create_server.stkgui +#. I18N: In the server creation screen +#. I18N: ./data/gui/online/lobby_settings.stkgui +#. I18N: In the lobby settings screen +#: data/po/gui_strings.h:423 data/po/gui_strings.h:512 +msgid "Name of the server" +msgstr "" + +#. I18N: ./data/gui/gpeditor.stkgui +#. I18N: Menu item +#: data/po/gui_strings.h:871 +msgid "New" +msgstr "" + +#: src/challenges/challenge_data.cpp:502 #, c-format msgid "New Grand Prix '%s' now available" msgstr "" -#: src/challenges/challenge_data.cpp:513 +#. I18N: ./data/gui/online/change_password.stkgui +#. I18N: In the change password dialog +#: data/po/gui_strings.h:597 +msgid "New Password" +msgstr "" + +#: src/states_screens/online_profile_friends.cpp:145 +msgid "New Request" +msgstr "" + +#: src/challenges/challenge_data.cpp:506 #, c-format msgid "New difficulty '%s' now available" msgstr "" -#: src/modes/linear_world.cpp:356 +#: src/modes/linear_world.cpp:361 msgid "New fastest lap" msgstr "" -#: src/challenges/challenge_data.cpp:499 +#: src/challenges/challenge_data.cpp:492 #, c-format msgid "New game mode '%s' now available" msgstr "" -#: src/challenges/challenge_data.cpp:523 +#: src/challenges/challenge_data.cpp:516 #, c-format msgid "New kart '%s' now available" msgstr "" -#: src/challenges/challenge_data.cpp:493 +#: src/challenges/challenge_data.cpp:486 #, c-format msgid "New track '%s' now available" msgstr "" #. I18N: Key binding name -#: src/states_screens/options_screen_input2.cpp:199 +#: src/states_screens/options_screen_input2.cpp:245 msgid "Nitro" msgstr "" -#: src/states_screens/dialogs/select_challenge.cpp:142 +#: src/states_screens/dialogs/select_challenge.cpp:147 msgid "Nitro challenge" msgstr "" -#. I18N: ./data/karts/nolok/kart.xml -#: data/po/gui_strings.h:834 -msgid "Nolok" +#: src/states_screens/edit_gp_screen.cpp:253 +#: src/states_screens/dialogs/message_dialog.cpp:101 +msgid "No" msgstr "" #. I18N: if no kart animations are enabled -#: src/states_screens/options_screen_video.cpp:357 +#: src/states_screens/gp_info_screen.cpp:75 +#: src/states_screens/options_screen_video.cpp:416 msgid "None" msgstr "" #. I18N: Game mode -#: src/race/race_manager.hpp:175 +#: src/race/race_manager.hpp:176 msgid "Normal Race" msgstr "" -#. I18N: ./data/tracks/snowmountain/track.xml -#: data/po/gui_strings.h:65 -msgid "Northern Resort" -msgstr "" - -#: src/tracks/track_object_presentation.cpp:675 +#: src/tracks/track_object_presentation.cpp:950 msgid "" "Note that if you manage to skid for several seconds, you will receive a " "bonus speedup as a reward!" @@ -1420,63 +1850,104 @@ msgstr "" #. I18N: ./data/gui/select_challenge.stkgui #. I18N: Difficulty -#. I18N: ./data/gui/story_mode_new.stkgui -#. I18N: Difficulty #. I18N: ./data/gui/racesetup.stkgui #. I18N: Difficulty -#: data/po/gui_strings.h:124 data/po/gui_strings.h:361 -#: data/po/gui_strings.h:771 +#: data/po/gui_strings.h:22 data/po/gui_strings.h:1242 msgid "Novice" msgstr "" -#: src/states_screens/dialogs/select_challenge.cpp:65 +#: src/states_screens/dialogs/select_challenge.cpp:68 #, c-format msgid "Number of AI Karts : %i" msgstr "" -#. I18N: ./data/gui/racesetup.stkgui -#. I18N: In race setup menu -#: data/po/gui_strings.h:767 +#. I18N: ./data/gui/track_info.stkgui +#. I18N: In the track info screen +#: data/po/gui_strings.h:225 msgid "Number of AI karts" msgstr "" #. I18N: ./data/gui/soccer_setup.stkgui -#. I18N: In soccer setup menu -#: data/po/gui_strings.h:796 +#. I18N: In soccer setup screen +#: data/po/gui_strings.h:1270 msgid "Number of goals to win" msgstr "" -#: src/states_screens/dialogs/message_dialog.cpp:86 -#: src/states_screens/dialogs/message_dialog.cpp:93 +#. I18N: ./data/gui/track_info.stkgui +#. I18N: In the track info screen +#: data/po/gui_strings.h:221 +msgid "Number of laps" +msgstr "" + +#. I18N: ./data/gui/edit_track.stkgui +#. I18N: In the edit track screen +#: data/po/gui_strings.h:34 +msgid "Number of laps:" +msgstr "" + +#. I18N: ./data/gui/edit_track.stkgui +#. I18N: ./data/gui/enter_player_name_dialog.stkgui +#. I18N: In the 'add new player' dialog +#. I18N: ./data/gui/user_screen_tab.stkgui +#. I18N: In the user screen +#. I18N: ./data/gui/online/register.stkgui +#. I18N: In the registration dialog +#. I18N: ./data/gui/user_screen.stkgui +#. I18N: In the user screen +#: src/states_screens/dialogs/message_dialog.cpp:95 +#: src/states_screens/dialogs/message_dialog.cpp:108 data/po/gui_strings.h:41 +#: data/po/gui_strings.h:83 data/po/gui_strings.h:260 +#: data/po/gui_strings.h:471 data/po/gui_strings.h:914 msgid "OK" msgstr "" #. I18N: ./data/grandprix/2_offthebeatentrack.grandprix -#: data/po/gui_strings.h:113 data/po/gui_strings.h:819 +#: data/po/gui_strings.h:11 data/po/gui_strings.h:1329 msgid "Off the beaten track" msgstr "" -#. I18N: Cutscene subtitle from ./data/tracks/introcutscene2/scene.xml -#. I18N: ./data/tracks/introcutscene2/scene.xml -#: data/po/gui_strings.h:80 data/po/gui_strings.h:83 -msgid "Oh yes, see, he's in my castle now and will be served for supper..." +#: src/states_screens/online_profile_friends.cpp:150 +msgid "Offline" msgstr "" -#. I18N: ./data/tracks/mines/track.xml -#: data/po/gui_strings.h:71 -msgid "Old Mine" +#. I18N: ./data/gui/user_screen_tab.stkgui +#. I18N: In the user screen +#. I18N: ./data/gui/user_screen.stkgui +#. I18N: In the user screen +#. I18N: ./data/gui/main.stkgui +#. I18N: Main menu button +#: src/states_screens/main_menu_screen.cpp:170 +#: src/states_screens/main_menu_screen.cpp:185 +#: src/states_screens/online_profile_friends.cpp:149 data/po/gui_strings.h:244 +#: data/po/gui_strings.h:898 data/po/gui_strings.h:964 +msgid "Online" msgstr "" -#. I18N: ./data/tracks/olivermath/track.xml -#: data/po/gui_strings.h:5 -msgid "Oliver's Math Class" +#. I18N: ./data/gui/online/main.stkgui +#. I18N: In the online multiplayer screen +#: data/po/gui_strings.h:523 +msgid "Online Multiplayer" msgstr "" -#: src/input/input_manager.cpp:686 +#. I18N: ./data/gui/online/register.stkgui +#. I18N: In the registration dialog +#: data/po/gui_strings.h:451 +msgid "Online Username" +msgstr "" + +#: src/states_screens/register_screen.cpp:234 +msgid "Online username has to be between 3 and 30 characters long!" +msgstr "" + +#: src/states_screens/register_screen.cpp:238 +msgid "Online username must not start with a number!" +msgstr "" + +#: src/input/input_manager.cpp:746 msgid "Only the Game Master may act at this point!" msgstr "" -#: src/tracks/track_object_presentation.cpp:654 +#: src/tracks/track_object_presentation.cpp:929 #, c-format msgid "Oops! When you're in trouble, press <%s> to be rescued" msgstr "" @@ -1484,461 +1955,711 @@ msgstr "" #. I18N: ./data/gui/race_paused_dialog.stkgui #. I18N: Race paused button #. I18N: ./data/gui/overworld_dialog.stkgui -#. I18N: Race paused button +#. I18N: In the in-game dialog #. I18N: ./data/gui/main.stkgui -#. I18N: Main menu button -#: data/po/gui_strings.h:342 data/po/gui_strings.h:484 -#: data/po/gui_strings.h:534 +#. I18N: In the main screen +#: data/po/gui_strings.h:683 data/po/gui_strings.h:855 +#: data/po/gui_strings.h:990 msgid "Options" msgstr "" +#. I18N: ./data/gui/online/profile_overview.stkgui +#. I18N: Section in the profile screen +#: data/po/gui_strings.h:299 +msgid "Overview" +msgstr "" + #. I18N: ./data/gui/help2.stkgui -#: data/po/gui_strings.h:684 +#: data/po/gui_strings.h:1166 msgid "Parachute - slows down all karts in a better position." msgstr "" +#. I18N: ./data/gui/user_screen_tab.stkgui +#. I18N: In the registration dialog +#. I18N: ./data/gui/online/register.stkgui +#. I18N: In the registration dialog +#. I18N: ./data/gui/user_screen.stkgui +#. I18N: In the user screen +#: data/po/gui_strings.h:256 data/po/gui_strings.h:455 +#: data/po/gui_strings.h:910 +msgid "Password" +msgstr "" + +#. I18N: ./data/gui/online/profile_settings.stkgui +#. I18N: In the online account settings screen +#: data/po/gui_strings.h:412 +msgid "Password :" +msgstr "" + +#. I18N: ./data/gui/online/change_password.stkgui +#. I18N: In the change password dialog +#: data/po/gui_strings.h:589 +msgid "Password Change" +msgstr "" + +#: src/states_screens/register_screen.cpp:242 +#: src/states_screens/dialogs/change_password_dialog.cpp:140 +msgid "Password has to be between 8 and 30 characters long!" +msgstr "" + +#: src/states_screens/dialogs/change_password_dialog.cpp:210 +msgid "Password successfully changed." +msgstr "" + +#: src/states_screens/register_screen.cpp:226 +#: src/states_screens/dialogs/change_password_dialog.cpp:147 +msgid "Passwords don't match!" +msgstr "" + #. I18N: Key binding name -#: src/states_screens/options_screen_input2.cpp:211 +#: src/states_screens/options_screen_input2.cpp:257 msgid "Pause Game" msgstr "" #. I18N: ./data/gui/race_paused_dialog.stkgui #. I18N: ./data/gui/overworld_dialog.stkgui -#: data/po/gui_strings.h:322 data/po/gui_strings.h:472 +#: data/po/gui_strings.h:663 data/po/gui_strings.h:843 msgid "Paused" msgstr "" -#: src/karts/controller/player_controller.cpp:332 +#: src/karts/controller/network_player_controller.cpp:281 +#: src/karts/controller/player_controller.cpp:338 msgid "Penalty time!!" msgstr "" +#: src/states_screens/online_profile_friends.cpp:146 +msgid "Pending" +msgstr "" + #. I18N: ./data/grandprix/1_penguinplayground.grandprix -#: data/po/gui_strings.h:104 data/po/gui_strings.h:810 +#: data/po/gui_strings.h:2 data/po/gui_strings.h:1320 msgid "Penguin Playground" msgstr "" -#. I18N: ./data/karts/pidgin/kart.xml -#: data/po/gui_strings.h:852 -msgid "Pidgin" -msgstr "" - -#. I18N: ./data/gui/custom_video_settings.stkgui -#. I18N: Video settings -#: data/po/gui_strings.h:429 -msgid "Pixel Shaders" -msgstr "" - -#. I18N: in graphical options -#: src/states_screens/options_screen_video.cpp:387 -#, c-format -msgid "Pixel shaders : %s" +#: src/states_screens/dialogs/vote_dialog.cpp:247 +msgid "Performing vote" msgstr "" #. I18N: ./data/gui/tutorial.stkgui -#: data/po/gui_strings.h:596 +#: data/po/gui_strings.h:1078 msgid "Play all" msgstr "" +#. I18N: ./data/gui/user_screen_tab.stkgui +#. I18N: Section in the settings menu #. I18N: ./data/gui/options_players.stkgui #. I18N: Section in the settings menu -#: src/states_screens/options_screen_input2.cpp:73 -#: src/states_screens/options_screen_input.cpp:140 -#: src/states_screens/options_screen_ui.cpp:113 -#: src/states_screens/options_screen_audio.cpp:65 -#: src/states_screens/options_screen_video.cpp:89 data/po/gui_strings.h:503 +#: src/states_screens/options_screen_input2.cpp:88 +#: src/states_screens/options_screen_input.cpp:141 +#: src/states_screens/server_selection.cpp:92 +#: src/states_screens/options_screen_ui.cpp:120 +#: src/states_screens/options_screen_audio.cpp:66 +#: src/states_screens/options_screen_video.cpp:138 data/po/gui_strings.h:240 +#: data/po/gui_strings.h:937 msgid "Players" msgstr "" +#. I18N: ./data/gui/enter_gp_name_dialog.stkgui +#. I18N: In the 'add new grand prix' dialog +#: data/po/gui_strings.h:106 +msgid "Please enter the name of the grand prix" +msgstr "" + #. I18N: shown when config file is too old -#: src/input/device_manager.cpp:480 +#: src/input/device_manager.cpp:500 msgid "Please re-configure your key bindings." msgstr "" -#: src/states_screens/addons_screen.cpp:434 +#: src/states_screens/addons_screen.cpp:437 msgid "Please wait while addons are updated" msgstr "" -#: src/states_screens/main_menu_screen.cpp:403 +#: src/states_screens/main_menu_screen.cpp:553 msgid "Please wait while the add-ons are loading" msgstr "" #. I18N: ./data/gui/help2.stkgui -#: data/po/gui_strings.h:678 +#: data/po/gui_strings.h:1160 msgid "" "Plunger - throw straight to pull an opponent back, or throw while looking " "back to make one lose sight." msgstr "" -#. I18N: ./data/gui/custom_video_settings.stkgui -#. I18N: Video settings -#: data/po/gui_strings.h:425 -msgid "Post-processing (motion blur)" -msgstr "" - -#. I18N: in graphical options -#: src/states_screens/options_screen_video.cpp:390 +#: src/tracks/track_object_presentation.cpp:902 #, c-format -msgid "Post-processing (motion blur) : %s" +msgid "" +"Press to look behind, to fire the weapon with <%s> while pressing to " +"to fire behind!" msgstr "" -#. I18N: ./data/gui/enter_player_name_dialog.stkgui -#. I18N: When configuring input +#. I18N: ./data/gui/enter_gp_name_dialog.stkgui +#. I18N: In the 'add new grand prix' dialog #. I18N: ./data/gui/press_a_key_dialog.stkgui #. I18N: When configuring input -#: data/po/gui_strings.h:171 data/po/gui_strings.h:466 +#: data/po/gui_strings.h:110 data/po/gui_strings.h:834 msgid "Press ESC to cancel" msgstr "" #. I18N: ./data/gui/press_a_key_dialog.stkgui -#: data/po/gui_strings.h:458 +#: data/po/gui_strings.h:822 msgid "Press a key" msgstr "" #. I18N: ./data/gui/options_input.stkgui -#. I18N: In key bindings configuration menu -#: data/po/gui_strings.h:209 +#. I18N: In the input configuration screen +#: data/po/gui_strings.h:157 msgid "Press enter or double-click on a device to configure it" msgstr "" #. I18N: ./data/gui/options_players.stkgui -#. I18N: In players configuration menu -#: data/po/gui_strings.h:510 +#. I18N: In the player configuration screen +#: data/po/gui_strings.h:944 msgid "Press enter or double-click on a player to edit him/her" msgstr "" -#: src/states_screens/race_gui_overworld.cpp:455 +#: src/states_screens/race_gui_overworld.cpp:464 msgid "Press fire to play the tutorial" msgstr "" -#: src/states_screens/race_gui_overworld.cpp:515 +#: src/states_screens/race_gui_overworld.cpp:534 msgid "Press fire to start the challenge" msgstr "" -#: src/input/wiimote_manager.cpp:312 +#: src/input/wiimote_manager.cpp:390 msgid "" "Press the buttons 1+2 simultaneously on your wiimote to put it in discovery " "mode, then click on Ok.Detailed instructions at supertuxkart.net/Wiimote" msgstr "" -#: src/states_screens/dialogs/addons_loading.cpp:326 +#: src/states_screens/dialogs/addons_loading.cpp:358 #, c-format msgid "Problems installing the addon '%s'." msgstr "" -#: src/states_screens/dialogs/addons_loading.cpp:366 +#: src/states_screens/dialogs/addons_loading.cpp:397 #, c-format msgid "Problems removing the addon '%s'." msgstr "" -#. I18N: ./data/karts/puffy/kart.xml -#: data/po/gui_strings.h:846 -msgid "Puffy" +#: src/states_screens/dialogs/user_info_dialog.cpp:474 +msgid "Processing" msgstr "" -#: src/states_screens/race_setup_screen.cpp:297 +#. I18N: ./data/gui/online/main.stkgui +#. I18N: In the online multiplayer screen +#: data/po/gui_strings.h:539 +msgid "Profile" +msgstr "" + +#: src/states_screens/online_profile_achievements.cpp:78 +msgid "Progress" +msgstr "" + +#: src/states_screens/race_setup_screen.cpp:240 msgid "" "Push the ball to the opposite cage to score goals. (Only in multiplayer " "games)" msgstr "" +#. I18N: ./data/gui/online/main.stkgui +#. I18N: In the online multiplayer screen +#: data/po/gui_strings.h:527 +msgid "Quick Play" +msgstr "" + #. I18N: ./data/gui/main.stkgui -#. I18N: Main menu button -#: data/po/gui_strings.h:550 +#. I18N: In the main screen +#: data/po/gui_strings.h:1010 msgid "Quit" msgstr "" +#: src/states_screens/race_result_gui.cpp:148 +msgid "Quit the server." +msgstr "" + #. I18N: ./data/gui/select_challenge.stkgui #. I18N: ./data/gui/racesetup.stkgui #. I18N: ./data/gui/soccer_setup.stkgui -#: data/po/gui_strings.h:116 data/po/gui_strings.h:763 -#: data/po/gui_strings.h:792 +#: data/po/gui_strings.h:14 data/po/gui_strings.h:1235 +#: data/po/gui_strings.h:1266 msgid "Race Setup" msgstr "" -#: src/states_screens/arenas_screen.cpp:279 +#: src/states_screens/gp_info_screen.cpp:77 +msgid "Random" +msgstr "" + +#: src/states_screens/arenas_screen.cpp:277 msgid "Random Arena" msgstr "" -#: src/states_screens/kart_selection.cpp:919 -#: src/states_screens/kart_selection.cpp:2115 +#: src/states_screens/gp_info_screen.cpp:175 +msgid "Random Grand Prix" +msgstr "" + +#: src/states_screens/kart_selection.cpp:842 +#: src/states_screens/kart_selection.cpp:1472 msgid "Random Kart" msgstr "" -#: src/states_screens/tracks_screen.cpp:342 +#: src/states_screens/tracks_screen.cpp:296 +#: src/states_screens/easter_egg_screen.cpp:270 msgid "Random Track" msgstr "" -#: src/states_screens/race_gui.cpp:104 -#: src/states_screens/race_gui_overworld.cpp:107 +#: src/states_screens/race_gui_overworld.cpp:109 msgid "Rank" msgstr "" #. I18N: ./data/gui/addons_screen.stkgui -#. I18N: In addons screen, in the filtering bar, to enable a filter that will show only recently items with good rating -#: data/po/gui_strings.h:561 +#. I18N: In addons screen, in the filtering bar, to enable a filter that will show only items with good rating +#: data/po/gui_strings.h:1039 msgid "Rating >=" msgstr "" #. I18N: as in "ready, set, go", shown at the beginning of the race -#: src/states_screens/race_gui_base.cpp:67 +#: src/states_screens/race_gui_base.cpp:64 msgid "Ready!" msgstr "" -#: src/states_screens/race_result_gui.cpp:860 +#. I18N: ./data/gui/debug_slider.stkgui +#: data/po/gui_strings.h:1013 +msgid "Red" +msgstr "" + +#: src/states_screens/race_result_gui.cpp:955 msgid "Red Team Wins" msgstr "" +#. I18N: ./data/gui/online/guest_login.stkgui +#. I18N: Tab in login menu +#: data/po/gui_strings.h:385 +msgid "Register" +msgstr "" + #. I18N: ./data/gui/help3.stkgui #. I18N: In the help menu -#: data/po/gui_strings.h:736 +#: data/po/gui_strings.h:1208 msgid "" "Regular Race: All blows allowed, so catch weapons and make clever use of " "them!" msgstr "" -#. I18N: ./data/gui/story_mode_lobby.stkgui -#: data/po/gui_strings.h:702 -msgid "Remember me" +#: src/states_screens/gp_info_screen.cpp:149 +#: src/states_screens/gp_info_screen.cpp:174 +msgid "Reload" +msgstr "" + +#. I18N: ./data/gui/user_screen_tab.stkgui +#. I18N: In the user screen +#. I18N: ./data/gui/user_screen.stkgui +#. I18N: In the user screen +#: data/po/gui_strings.h:248 data/po/gui_strings.h:902 +msgid "Remember password" msgstr "" #. I18N: ./data/gui/options_video.stkgui #. I18N: In the video settings -#: data/po/gui_strings.h:292 +#: data/po/gui_strings.h:656 msgid "Remember window location" msgstr "" -#. I18N: In the player info dialog -#: src/states_screens/dialogs/player_info_dialog.cpp:125 +#. I18N: ./data/gui/online/user_info_dialog.stkgui +#. I18N: User info dialog +#. I18N: ./data/gui/gpeditor.stkgui +#. I18N: Menu item +#. I18N: ./data/gui/gpedit.stkgui +#. I18N: Menu item +#: data/po/gui_strings.h:350 data/po/gui_strings.h:883 +#: data/po/gui_strings.h:1313 msgid "Remove" msgstr "" -#. I18N: In the player info dialog -#: src/states_screens/dialogs/player_info_dialog.cpp:91 +#. I18N: ./data/gui/user_screen_tab.stkgui +#. I18N: In the user screen +#. I18N: ./data/gui/gpeditor.stkgui +#. I18N: Menu item +#. I18N: ./data/gui/user_screen.stkgui +#. I18N: In the user screen +#: data/po/gui_strings.h:272 data/po/gui_strings.h:887 +#: data/po/gui_strings.h:926 msgid "Rename" msgstr "" -#: src/states_screens/dialogs/select_challenge.cpp:61 +#: src/states_screens/dialogs/select_challenge.cpp:64 #, c-format msgid "Required Nitro Points : %i" msgstr "" -#: src/states_screens/dialogs/select_challenge.cpp:50 +#: src/states_screens/dialogs/select_challenge.cpp:53 #, c-format msgid "Required Rank : %i" msgstr "" -#: src/states_screens/dialogs/select_challenge.cpp:55 +#: src/states_screens/dialogs/select_challenge.cpp:58 #, c-format msgid "Required Time : %i" msgstr "" #. I18N: Key binding name -#: src/states_screens/options_screen_input2.cpp:208 +#: src/states_screens/options_screen_input2.cpp:254 msgid "Rescue" msgstr "" #. I18N: ./data/gui/options_video.stkgui -#. I18N: In the graphics settings -#: data/po/gui_strings.h:284 +#. I18N: In the video settings +#: data/po/gui_strings.h:648 msgid "Resolution" msgstr "" -#: src/states_screens/race_result_gui.cpp:136 +#: src/states_screens/race_result_gui.cpp:188 msgid "Restart" msgstr "" #. I18N: ./data/gui/race_paused_dialog.stkgui #. I18N: Race paused button -#: data/po/gui_strings.h:334 +#: data/po/gui_strings.h:675 msgid "Restart Race" msgstr "" -#. I18N: ./data/gui/track_info_dialog.stkgui -#. I18N: Drive the track reverse -#: data/po/gui_strings.h:312 +#. I18N: ./data/gui/gp_info.stkgui +#. I18N: In the grand prix info screen +#: data/po/gui_strings.h:130 msgid "Reverse" msgstr "" +#. I18N: ./data/gui/edit_track.stkgui +#. I18N: In the edit track screen +#: data/po/gui_strings.h:38 +msgid "Reverse:" +msgstr "" + +#: src/states_screens/edit_gp_screen.cpp:68 +msgid "Reversed" +msgstr "" + #. I18N: Key binding name -#: src/states_screens/options_screen_input2.cpp:225 +#: src/states_screens/options_screen_input2.cpp:271 msgid "Right" msgstr "" -#. I18N: ./data/tracks/startrack/track.xml -#: data/po/gui_strings.h:41 -msgid "STK Enterprise" +#: src/input/gamepad_config.cpp:202 +msgid "Right bumper" msgstr "" -#. I18N: ./data/karts/sara/kart.xml -#: data/po/gui_strings.h:855 -msgid "Sara" +#: src/input/gamepad_config.cpp:206 +msgid "Right thumb button" msgstr "" -#. I18N: ./data/tracks/scotland/track.xml -#: data/po/gui_strings.h:2 -msgid "Scotland" +#: src/input/gamepad_config.cpp:181 src/input/gamepad_config.cpp:220 +msgid "Right thumb down" +msgstr "" + +#: src/input/gamepad_config.cpp:180 src/input/gamepad_config.cpp:223 +msgid "Right thumb left" +msgstr "" + +#: src/input/gamepad_config.cpp:179 src/input/gamepad_config.cpp:222 +msgid "Right thumb right" +msgstr "" + +#: src/input/gamepad_config.cpp:182 src/input/gamepad_config.cpp:221 +msgid "Right thumb up" +msgstr "" + +#: src/input/gamepad_config.cpp:183 src/input/gamepad_config.cpp:219 +msgid "Right trigger" +msgstr "" + +#. I18N: ./data/gui/debug_slider.stkgui +#: data/po/gui_strings.h:1025 +msgid "SSAO K" +msgstr "" + +#. I18N: ./data/gui/debug_slider.stkgui +#: data/po/gui_strings.h:1022 +msgid "SSAO Radius" +msgstr "" + +#. I18N: ./data/gui/debug_slider.stkgui +#: data/po/gui_strings.h:1028 +msgid "SSAO sigma" +msgstr "" + +#. I18N: ./data/gui/gpedit.stkgui +#. I18N: Menu item +#: data/po/gui_strings.h:1317 +msgid "Save" +msgstr "" + +#. I18N: ./data/gui/grand_prix_win.stkgui +#. I18N: ./data/gui/grand_prix_lose.stkgui +#: data/po/gui_strings.h:840 data/po/gui_strings.h:1263 +msgid "Save Grand Prix" +msgstr "" + +#. I18N: ./data/gui/online/user_search.stkgui +#. I18N: ./data/gui/online/profile_friends.stkgui +#: data/po/gui_strings.h:504 data/po/gui_strings.h:585 +msgid "Search" +msgstr "" + +#: src/states_screens/online_user_search.cpp:208 +#: src/states_screens/online_user_search.cpp:287 +msgid "Searching" msgstr "" #. I18N: Key binding name -#: src/states_screens/options_screen_input2.cpp:228 +#: src/states_screens/options_screen_input2.cpp:274 msgid "Select" msgstr "" -#. I18N: ./data/gui/story_mode_lobby.stkgui -#: data/po/gui_strings.h:699 -msgid "Select a Player" +#. I18N: ./data/gui/racesetup.stkgui +#: data/po/gui_strings.h:1238 +msgid "Select a difficulty" msgstr "" #. I18N: ./data/gui/racesetup.stkgui -#: data/po/gui_strings.h:786 +#: data/po/gui_strings.h:1257 msgid "Select a game mode" msgstr "" +#: src/states_screens/edit_track_screen.cpp:238 +msgid "Select a track" +msgstr "" + #. I18N: ./data/gui/overworld_dialog.stkgui -#. I18N: Race paused button -#: data/po/gui_strings.h:480 +#. I18N: In the in-game dialog +#: data/po/gui_strings.h:851 msgid "Select kart" msgstr "" -#. I18N: ./data/gui/story_mode_new.stkgui -#. I18N: In the new story mode game dialog -#: data/po/gui_strings.h:357 -msgid "Select your identity" +#. I18N: ./data/gui/options_ui.stkgui +#. I18N: In the ui settings +#: data/po/gui_strings.h:811 +msgid "Send anonymous HW statistics" +msgstr "" + +#. I18N: ./data/gui/online/create_server.stkgui +#. I18N: In the server creation screen +#: data/po/gui_strings.h:419 +msgid "Server Creation" +msgstr "" + +#. I18N: ./data/gui/online/server_info_dialog.stkgui +#. I18N: In the server info dialog +#: data/po/gui_strings.h:326 +msgid "Server Info" +msgstr "" + +#. I18N: ./data/gui/online/server_selection.stkgui +#: data/po/gui_strings.h:519 +msgid "Server Selection" +msgstr "" + +#. I18N: ./data/gui/online/lobby.stkgui +#. I18N: In the networking lobby +#: data/po/gui_strings.h:551 +msgid "Server name :" +msgstr "" + +#: src/states_screens/dialogs/server_info_dialog.cpp:58 +msgid "Server successfully created. You can now join it." msgstr "" #. I18N: as in "ready, set, go", shown at the beginning of the race -#: src/states_screens/race_gui_base.cpp:69 +#: src/states_screens/race_gui_base.cpp:66 msgid "Set!" msgstr "" #. I18N: ./data/gui/race_paused_dialog.stkgui #. I18N: Race paused button -#: src/states_screens/race_result_gui.cpp:146 data/po/gui_strings.h:330 +#: src/states_screens/race_result_gui.cpp:198 data/po/gui_strings.h:671 msgid "Setup New Race" msgstr "" -#. I18N: ./data/tracks/sandtrack/track.xml -#: data/po/gui_strings.h:59 -msgid "Shifting Sands" +#. I18N: ./data/gui/custom_video_settings.stkgui +#. I18N: Video settings +#: data/po/gui_strings.h:725 +msgid "Shadows" msgstr "" -#. I18N: ./data/tracks/city/track.xml -#: data/po/gui_strings.h:14 -msgid "Shiny Suburbs" +#. I18N: in graphical options +#: src/states_screens/options_screen_video.cpp:445 +#, c-format +msgid "Shadows: %s" +msgstr "" + +#. I18N: ./data/gui/online/guest_login.stkgui +#. I18N: Tab in login menu +#. I18N: ./data/gui/online/guest_login.stkgui +#. I18N: In the login dialog +#: data/po/gui_strings.h:377 data/po/gui_strings.h:397 +msgid "Sign In" +msgstr "" + +#. I18N: ./data/gui/online/guest_login.stkgui +#. I18N: Tab in login menu +#: data/po/gui_strings.h:381 +msgid "Sign In As Guest" +msgstr "" + +#. I18N: ./data/gui/online/main.stkgui +#. I18N: In the online multiplayer screen +#: data/po/gui_strings.h:543 +msgid "Sign Out" +msgstr "" + +#: src/states_screens/online_screen.cpp:139 +#, c-format +msgid "Signed in as: %s." +msgstr "" + +#: src/states_screens/online_screen.cpp:155 +msgid "Signing in" +msgstr "" + +#: src/states_screens/user_screen.cpp:439 +#, c-format +msgid "Signing in '%s'" +msgstr "" + +#. I18N: ./data/gui/online/guest_login.stkgui +#. I18N: In the login dialog +#: data/po/gui_strings.h:393 +msgid "" +"Signing in as a guest allows you to participate in online races, but it does " +"not allow you to vote for addons, or collect any achievements while being " +"online." +msgstr "" + +#: src/states_screens/online_screen.cpp:160 +msgid "Signing out" +msgstr "" + +#: src/states_screens/user_screen.cpp:438 +#, c-format +msgid "Signing out '%s'" +msgstr "" + +#: src/states_screens/online_profile_friends.cpp:70 +msgid "Since" msgstr "" #. I18N: ./data/gui/main.stkgui #. I18N: Main menu button -#: data/po/gui_strings.h:522 -msgid "Single-player" +#: data/po/gui_strings.h:956 +msgid "Singleplayer" msgstr "" -#: src/states_screens/dialogs/addons_loading.cpp:176 +#: src/states_screens/dialogs/addons_loading.cpp:177 #, c-format msgid "Size: %s" msgstr "" #. I18N: Key binding name -#: src/states_screens/options_screen_input2.cpp:202 +#: src/states_screens/options_screen_input2.cpp:248 msgid "Skidding" msgstr "" #. I18N: ./data/gui/options_ui.stkgui -#. I18N: In the graphics settings -#: data/po/gui_strings.h:443 +#. I18N: In the ui settings +#: data/po/gui_strings.h:799 msgid "Skin" msgstr "" -#. I18N: ./data/tracks/snowtuxpeak/track.xml -#: data/po/gui_strings.h:11 -msgid "Snow Peak" -msgstr "" - #. I18N: Game mode -#: src/race/race_manager.hpp:185 +#: src/race/race_manager.hpp:186 msgid "Soccer" msgstr "" -#. I18N: ./data/tracks/soccer_field/track.xml -#: data/po/gui_strings.h:26 -msgid "Soccer field" -msgstr "" - #. I18N: ./data/gui/help3.stkgui #. I18N: In the help menu -#: data/po/gui_strings.h:752 +#: data/po/gui_strings.h:1224 msgid "" "Soccer: Only in multiplayer games. Use your kart to push the ball into the " "goal." msgstr "" -#: src/states_screens/addons_screen.cpp:512 -#: src/states_screens/main_menu_screen.cpp:396 +#: src/states_screens/addons_screen.cpp:514 +#: src/states_screens/main_menu_screen.cpp:546 msgid "" "Sorry, an error occurred while contacting the add-ons website. Make sure you " "are connected to the Internet and that SuperTuxKart is not blocked by a " "firewall" msgstr "" -#: src/states_screens/dialogs/addons_loading.cpp:255 +#: src/states_screens/dialogs/addons_loading.cpp:279 msgid "Sorry, downloading the add-on failed" msgstr "" #. I18N: ./data/gui/options_audio.stkgui -#. I18N: Section in audio/video settings submenu -#: data/po/gui_strings.h:155 +#. I18N: In the audio options screen +#: data/po/gui_strings.h:67 msgid "Sound Effects" msgstr "" +#. I18N: ./data/gui/easter_egg.stkgui +#. I18N: track group #. I18N: ./data/gui/arenas.stkgui #. I18N: track group -#: data/po/gui_strings.h:581 +#: src/states_screens/grand_prix_editor_screen.cpp:334 +#: data/po/gui_strings.h:284 data/po/gui_strings.h:1063 msgid "Standard" msgstr "" -#. I18N: ./data/gui/story_mode_new.stkgui -#: data/po/gui_strings.h:372 -msgid "Start Game" +#: src/input/gamepad_config.cpp:204 +msgid "Start" msgstr "" -#: src/states_screens/dialogs/gp_info_dialog.cpp:146 +#: src/states_screens/dialogs/gp_info_dialog.cpp:209 msgid "Start Grand Prix" msgstr "" -#. I18N: ./data/gui/track_info_dialog.stkgui -#: data/po/gui_strings.h:319 +#. I18N: ./data/gui/gp_info.stkgui +#. I18N: In the grand prix info screen +#. I18N: ./data/gui/track_info.stkgui +#. I18N: In the track info screen +#: data/po/gui_strings.h:142 data/po/gui_strings.h:233 msgid "Start Race" msgstr "" +#: src/states_screens/online_profile_friends.cpp:71 +msgid "Status" +msgstr "" + #. I18N: Key binding name -#: src/states_screens/options_screen_input2.cpp:184 +#: src/states_screens/options_screen_input2.cpp:230 msgid "Steer Left" msgstr "" #. I18N: Key binding name -#: src/states_screens/options_screen_input2.cpp:187 +#: src/states_screens/options_screen_input2.cpp:233 msgid "Steer Right" msgstr "" #. I18N: ./data/gui/main.stkgui #. I18N: Main menu button -#: data/po/gui_strings.h:518 +#: data/po/gui_strings.h:952 msgid "Story Mode" msgstr "" -#. I18N: ./data/tracks/subsea/track.xml -#: data/po/gui_strings.h:50 -msgid "Subsea" +#. I18N: ./data/gui/online/recovery_input.stkgui +#. I18N: In the recovery dialog +#. I18N: ./data/gui/online/change_password.stkgui +#. I18N: In the change password dialog +#: data/po/gui_strings.h:494 data/po/gui_strings.h:605 +msgid "Submit" msgstr "" #. I18N: ./data/gui/racesetup.stkgui #. I18N: Difficulty -#: data/po/gui_strings.h:783 +#: data/po/gui_strings.h:1254 msgid "SuperTux" msgstr "" #. I18N: ./data/gui/addons_screen.stkgui -#: data/po/gui_strings.h:553 +#: data/po/gui_strings.h:1031 msgid "SuperTuxKart Addons" msgstr "" @@ -1946,111 +2667,138 @@ msgstr "" #. I18N: ./data/gui/help1.stkgui #. I18N: ./data/gui/help2.stkgui #. I18N: ./data/gui/help3.stkgui -#: data/po/gui_strings.h:219 data/po/gui_strings.h:603 -#: data/po/gui_strings.h:649 data/po/gui_strings.h:713 +#: data/po/gui_strings.h:167 data/po/gui_strings.h:1085 +#: data/po/gui_strings.h:1131 data/po/gui_strings.h:1185 msgid "SuperTuxKart Help" msgstr "" #. I18N: ./data/gui/options_audio.stkgui #. I18N: ./data/gui/options_input.stkgui +#. I18N: ./data/gui/user_screen_tab.stkgui #. I18N: ./data/gui/options_video.stkgui #. I18N: ./data/gui/options_device.stkgui #. I18N: ./data/gui/options_ui.stkgui #. I18N: ./data/gui/options_players.stkgui -#: data/po/gui_strings.h:135 data/po/gui_strings.h:201 -#: data/po/gui_strings.h:260 data/po/gui_strings.h:386 -#: data/po/gui_strings.h:435 data/po/gui_strings.h:499 +#: data/po/gui_strings.h:47 data/po/gui_strings.h:149 +#: data/po/gui_strings.h:236 data/po/gui_strings.h:628 +#: data/po/gui_strings.h:702 data/po/gui_strings.h:791 +#: data/po/gui_strings.h:933 msgid "SuperTuxKart Options" msgstr "" #. I18N: ./data/gui/help4.stkgui -#: data/po/gui_strings.h:238 +#: data/po/gui_strings.h:186 msgid "SuperTuxKart can be played in multiplayer mode on the same computer" msgstr "" #. I18N: ./data/gui/help3.stkgui -#: data/po/gui_strings.h:732 +#: data/po/gui_strings.h:1204 msgid "SuperTuxKart features several game modes" msgstr "" -#: src/main.cpp:1439 +#: src/main.cpp:1154 msgid "" "SuperTuxKart may connect to a server to download add-ons and notify you of " -"updates. Would you like this feature to be enabled? (To change this setting " -"at a later time, go to options, select tab 'User Interface', and edit " -"\"Allow STK to connect to the Internet\")." -msgstr "" - -#. I18N: ./data/karts/suzanne/kart.xml -#: data/po/gui_strings.h:831 -msgid "Suzanne" +"updates. We also collect anonymous hardware statistics to help with the " +"development of STK. Would you like this feature to be enabled? (To change " +"this setting at a later time, go to options, select tab 'User Interface', " +"and edit \"Allow STK to connect to the Internet\" and \"Allow STK to send " +"anonymous HW statistics\")." msgstr "" #. I18N: ./data/gui/help2.stkgui -#: data/po/gui_strings.h:690 +#: data/po/gui_strings.h:1172 msgid "" "Swapper - gift boxes are transformed into bananas and vice versa for a short " "time." msgstr "" #. I18N: ./data/gui/help2.stkgui -#: data/po/gui_strings.h:696 +#: data/po/gui_strings.h:1178 msgid "Swatter - will squash karts close by, slowing them down." msgstr "" #. I18N: in the language choice, to select the same language as the OS -#: src/states_screens/options_screen_ui.cpp:162 +#: src/states_screens/options_screen_ui.cpp:186 msgid "System Language" msgstr "" +#. I18N: ./data/gui/main.stkgui +#: data/po/gui_strings.h:974 +msgid "TEST: GPLose" +msgstr "" + +#. I18N: ./data/gui/main.stkgui +#: data/po/gui_strings.h:971 +msgid "TEST: GPWin" +msgstr "" + +#. I18N: ./data/gui/main.stkgui +#: data/po/gui_strings.h:983 +msgid "TEST: Intro" +msgstr "" + +#. I18N: ./data/gui/main.stkgui +#: data/po/gui_strings.h:986 +msgid "TEST: Outro" +msgstr "" + +#. I18N: ./data/gui/main.stkgui +#: data/po/gui_strings.h:977 +msgid "TEST: Unlocked" +msgstr "" + +#. I18N: ./data/gui/main.stkgui +#: data/po/gui_strings.h:980 +msgid "TEST: Unlocked 2" +msgstr "" + +#. I18N: ./data/gui/online/registration_terms.stkgui +#. I18N: In the registration dialog +#: data/po/gui_strings.h:613 +msgid "Terms and Agreement" +msgstr "" + #. I18N: ./data/gui/custom_video_settings.stkgui #. I18N: Video settings -#: data/po/gui_strings.h:417 +#: data/po/gui_strings.h:769 +msgid "Texture compression" +msgstr "" + +#. I18N: ./data/gui/custom_video_settings.stkgui +#. I18N: Video settings +#: data/po/gui_strings.h:781 msgid "Texture filtering" msgstr "" #. I18N: ./data/gui/help1.stkgui #. I18N: in the help menu -#: data/po/gui_strings.h:642 +#: data/po/gui_strings.h:1124 msgid "The 'skidding' key allows you to skid in sharp turns and get a boost." msgstr "" -#. I18N: ./data/tracks/islandtrack/track.xml -#: data/po/gui_strings.h:53 -msgid "The Island" -msgstr "" - -#: src/items/powerup.cpp:67 -msgid "The Space Shuttle has landed!" -msgstr "" - -#. I18N: ./data/tracks/stadium/track.xml -#: data/po/gui_strings.h:35 -msgid "The Stadium" -msgstr "" - -#: src/states_screens/main_menu_screen.cpp:391 +#: src/states_screens/main_menu_screen.cpp:541 msgid "The add-ons module is currently disabled in the Options screen" msgstr "" -#: src/race/highscore_manager.cpp:100 +#: src/race/highscore_manager.cpp:101 msgid "" "The highscore file was too old,\n" "all highscores have been erased." msgstr "" -#: src/states_screens/dialogs/gp_info_dialog.cpp:151 -msgid "This Grand Prix is broken!" +#: src/states_screens/create_server_screen.cpp:136 +msgid "The maxinum number of players has to be between 2 and 12." msgstr "" #. I18N: Game mode -#: src/race/race_manager.hpp:177 +#: src/race/race_manager.hpp:178 msgid "Time Trial" msgstr "" #. I18N: ./data/gui/help3.stkgui #. I18N: In the help menu -#: data/po/gui_strings.h:740 +#: data/po/gui_strings.h:1212 msgid "Time Trial: Contains no powerups, so only your driving skills matter!" msgstr "" @@ -2068,73 +2816,101 @@ msgstr "" #. I18N: ./data/gui/help2.stkgui #. I18N: In the help menu -#: data/po/gui_strings.h:669 +#: data/po/gui_strings.h:1151 msgid "To help you win, there are some powerups you can collect :" msgstr "" #. I18N: ./data/grandprix/3_tothemoonandback.grandprix -#: data/po/gui_strings.h:107 data/po/gui_strings.h:813 +#: data/po/gui_strings.h:5 data/po/gui_strings.h:1323 msgid "To the moon and back" msgstr "" +#: src/states_screens/dialogs/user_info_dialog.cpp:154 +#: src/states_screens/dialogs/user_info_dialog.cpp:211 +msgid "Today" +msgstr "" + #. I18N: When some GlobalPlayerIcons are hidden, write "Top 10" to show it -#: src/states_screens/race_gui_base.cpp:97 +#: src/states_screens/race_gui_base.cpp:103 #, c-format msgid "Top %i" msgstr "" -#. I18N: when showing who is the author of track '%s' (place %s where the name of the author should appear) -#: src/states_screens/dialogs/track_info_dialog.cpp:69 +#: src/states_screens/edit_gp_screen.cpp:66 +msgid "Track" +msgstr "" + +#: src/states_screens/race_result_gui.cpp:1120 +#, c-format +msgid "Track %i/%i" +msgstr "" + +#. I18N: when showing who is the author of track '%s' +#. I18N: (place %s where the name of the author should appear) +#: src/states_screens/track_info_screen.cpp:107 #, c-format msgid "Track by %s" msgstr "" +#. I18N: ./data/gui/gp_info.stkgui +#. I18N: In the grand prix info screen +#: data/po/gui_strings.h:138 +msgid "Track group" +msgstr "" + +#. I18N: ./data/gui/gp_info.stkgui +#. I18N: In the grand prix info screen #. I18N: ./data/gui/addons_screen.stkgui -#. I18N: Section in the addons menu -#: data/po/gui_strings.h:569 +#. I18N: In the addons screen +#: data/po/gui_strings.h:134 data/po/gui_strings.h:1047 msgid "Tracks" msgstr "" -#: src/states_screens/dialogs/custom_video_settings.cpp:71 +#: src/states_screens/dialogs/custom_video_settings.cpp:75 msgid "Trilinear" msgstr "" -#: src/states_screens/dialogs/addons_loading.cpp:338 -#: src/states_screens/dialogs/addons_loading.cpp:378 +#: src/states_screens/dialogs/addons_loading.cpp:370 +#: src/states_screens/dialogs/addons_loading.cpp:409 msgid "Try again" msgstr "" #. I18N: ./data/gui/main.stkgui -#. I18N: Main menu button -#: src/states_screens/race_gui_overworld.cpp:448 data/po/gui_strings.h:542 +#. I18N: In the main screen +#: src/states_screens/race_gui_overworld.cpp:457 data/po/gui_strings.h:998 msgid "Tutorial" msgstr "" #. I18N: ./data/gui/tutorial.stkgui #. I18N: Title for tutorials screen -#: data/po/gui_strings.h:593 +#: data/po/gui_strings.h:1075 msgid "Tutorial : Selection Room" msgstr "" -#. I18N: ./data/karts/tux/kart.xml -#: data/po/gui_strings.h:843 -msgid "Tux" -msgstr "" - #. I18N: ./data/gui/select_challenge.stkgui #. I18N: Type of race, in a challenge -#: data/po/gui_strings.h:120 +#: data/po/gui_strings.h:18 msgid "Type :" msgstr "" +#: src/states_screens/race_gui_overworld.cpp:504 +msgid "Type: Grand Prix" +msgstr "" + +#: src/online/xml_request.cpp:77 +msgid "" +"Unable to connect to the server. Check your internet connection or try again " +"later." +msgstr "" + #. I18N: ./data/gui/addons_loading.stkgui #. I18N: Add-on screen action -#: data/po/gui_strings.h:182 +#: data/po/gui_strings.h:98 msgid "Uninstall" msgstr "" #. I18N: Key binding name -#: src/states_screens/options_screen_input2.cpp:216 +#: src/states_screens/options_screen_input2.cpp:262 msgid "Up" msgstr "" @@ -2144,46 +2920,83 @@ msgstr "" #. I18N: ./data/gui/addons_screen.stkgui #. I18N: In addons screen, in the filtering bar, to enable a filter that will show only recently updated items -#: data/po/gui_strings.h:557 +#: data/po/gui_strings.h:1035 msgid "Updated" msgstr "" -#: src/states_screens/addons_screen.cpp:108 +#: src/states_screens/addons_screen.cpp:111 msgid "Updated date" msgstr "" -#. I18N: ./data/gui/options_video.stkgui -#. I18N: In the video settings -#: data/po/gui_strings.h:280 -msgid "Use Frame Buffer Objects (requires restart)" +#. I18N: ./data/gui/custom_video_settings.stkgui +#. I18N: Video settings +#: data/po/gui_strings.h:773 +msgid "Use high definition textures" msgstr "" #. I18N: ./data/gui/soccer_setup.stkgui -#. I18N: In soccer setup menu -#: data/po/gui_strings.h:800 -msgid "Use left/right to choose your team" +#. I18N: In soccer setup screen +#: data/po/gui_strings.h:1282 +msgid "Use left/right to choose your team and press fire" msgstr "" -#: src/tracks/track_object_presentation.cpp:644 +#: src/tracks/track_object_presentation.cpp:919 #, c-format msgid "Use the nitro you collected by pressing <%s>!" msgstr "" +#. I18N: ./data/gui/online/user_info_dialog.stkgui +#. I18N: User info dialog' dialog +#: data/po/gui_strings.h:342 +msgid "User Info" +msgstr "" + #. I18N: ./data/gui/options_ui.stkgui #. I18N: Section in the settings menu -#: src/states_screens/options_screen_input2.cpp:72 -#: src/states_screens/options_screen_input.cpp:139 -#: src/states_screens/options_screen_players.cpp:72 -#: src/states_screens/options_screen_audio.cpp:64 -#: src/states_screens/options_screen_video.cpp:88 data/po/gui_strings.h:439 +#: src/states_screens/options_screen_input2.cpp:87 +#: src/states_screens/options_screen_input.cpp:140 +#: src/states_screens/options_screen_audio.cpp:65 +#: src/states_screens/user_screen.cpp:593 +#: src/states_screens/options_screen_video.cpp:137 data/po/gui_strings.h:795 msgid "User Interface" msgstr "" +#: src/states_screens/grand_prix_editor_screen.cpp:335 +msgid "User defined" +msgstr "" + +#. I18N: ./data/gui/online/user_search.stkgui +#: data/po/gui_strings.h:501 +msgid "User search" +msgstr "" + +#. I18N: ./data/gui/user_screen_tab.stkgui +#. I18N: In the user screen +#. I18N: ./data/gui/online/recovery_input.stkgui +#. I18N: In the recovery dialog +#. I18N: ./data/gui/user_screen.stkgui +#. I18N: In the user screen +#: src/states_screens/online_user_search.cpp:74 +#: src/states_screens/online_profile_friends.cpp:67 data/po/gui_strings.h:252 +#: data/po/gui_strings.h:486 data/po/gui_strings.h:906 +msgid "Username" +msgstr "" + +#: src/states_screens/dialogs/recovery_dialog.cpp:121 +msgid "Username and/or email address invalid." +msgstr "" + #. I18N: ./data/gui/soccer_setup.stkgui -#: data/po/gui_strings.h:803 +#: data/po/gui_strings.h:1285 msgid "VS" msgstr "" +#: src/states_screens/register_screen.cpp:302 +#: src/states_screens/dialogs/change_password_dialog.cpp:235 +#: src/states_screens/dialogs/recovery_dialog.cpp:209 +msgid "Validating info" +msgstr "" + #: src/states_screens/dialogs/addons_loading.cpp:108 #, c-format msgid "Version: %d" @@ -2191,23 +3004,39 @@ msgstr "" #. I18N: ./data/gui/options_video.stkgui #. I18N: In the video settings -#: data/po/gui_strings.h:276 +#: data/po/gui_strings.h:644 msgid "Vertical Sync (requires restart)" msgstr "" +#. I18N: ./data/gui/online/notification_dialog.stkgui +#. I18N: User info dialog +#. I18N: ./data/gui/online/user_info_dialog.stkgui +#. I18N: User info dialog +#: data/po/gui_strings.h:318 data/po/gui_strings.h:366 +msgid "View" +msgstr "" + #. I18N: ./data/gui/options_audio.stkgui -#. I18N: Music volume in options -#. I18N: ./data/gui/options_audio.stkgui -#. I18N: Sound volume in options -#: data/po/gui_strings.h:151 data/po/gui_strings.h:163 +#. I18N: In the audio options screen +#: data/po/gui_strings.h:63 data/po/gui_strings.h:75 msgid "Volume" msgstr "" -#: src/modes/linear_world.cpp:854 +#. I18N: ./data/gui/online/vote_dialog.stkgui +#. I18N: In the vote dialog +#: data/po/gui_strings.h:303 +msgid "Vote" +msgstr "" + +#: src/states_screens/dialogs/vote_dialog.cpp:230 +msgid "Vote successful! You can now close the window." +msgstr "" + +#: src/modes/linear_world.cpp:883 msgid "WRONG WAY!" msgstr "" -#: src/states_screens/options_screen_input2.cpp:410 +#: src/states_screens/options_screen_input2.cpp:479 msgid "" "Warning, 'Shift' is not a recommended key : when shift is pressed down, all " "keys that contain a character that is different in upper-case will stop " @@ -2222,32 +3051,26 @@ msgstr "" #. I18N: Tab in help menu #. I18N: ./data/gui/help3.stkgui #. I18N: Tab in help menu -#: data/po/gui_strings.h:227 data/po/gui_strings.h:611 -#: data/po/gui_strings.h:657 data/po/gui_strings.h:721 +#: data/po/gui_strings.h:175 data/po/gui_strings.h:1093 +#: data/po/gui_strings.h:1139 data/po/gui_strings.h:1193 msgid "Weapons" msgstr "" #. I18N: ./data/gui/custom_video_settings.stkgui #. I18N: Video settings -#: data/po/gui_strings.h:409 +#: data/po/gui_strings.h:761 msgid "Weather Effects" msgstr "" #. I18N: in graphical options -#: src/states_screens/options_screen_video.cpp:376 +#: src/states_screens/options_screen_video.cpp:425 #, c-format msgid "Weather Effects : %s" msgstr "" -#. I18N: Cutscene subtitle from ./data/tracks/introcutscene2/scene.xml -#. I18N: ./data/tracks/introcutscene2/scene.xml -#: data/po/gui_strings.h:74 data/po/gui_strings.h:77 -msgid "What's wrong, little hippies? Your great gnu leader is missing?" -msgstr "" - #. I18N: ./data/gui/help4.stkgui #. I18N: In the help menu -#: data/po/gui_strings.h:249 +#: data/po/gui_strings.h:197 msgid "" "When input devices are configured, you are ready to play. Select the " "'multiplayer race' icon in the main menu. When it is time to choose a kart, " @@ -2257,139 +3080,205 @@ msgid "" "not be used for this operation." msgstr "" -#. I18N: ./data/karts/wilber/kart.xml -#: data/po/gui_strings.h:864 -msgid "Wilber" -msgstr "" - -#. I18N: ./data/tracks/xr591/track.xml -#: data/po/gui_strings.h:32 -msgid "XR591" -msgstr "" - -#. I18N: ./data/karts/xfcemouse/kart.xml -#: data/po/gui_strings.h:822 -msgid "Xue" +#. I18N: Name of the white button on xbox controller +#: src/input/gamepad_config.cpp:171 +msgid "White" msgstr "" #. I18N: ./data/gui/confirm_dialog.stkgui #. I18N: In a 'are you sure?' dialog -#: data/po/gui_strings.h:253 +#: src/states_screens/edit_gp_screen.cpp:253 data/po/gui_strings.h:201 msgid "Yes" msgstr "" -#: src/tracks/track_object_presentation.cpp:683 +#: src/tracks/track_object_presentation.cpp:958 msgid "You are now ready to race. Good luck!" msgstr "" #. I18N: ./data/gui/options_players.stkgui -#: data/po/gui_strings.h:506 +#: data/po/gui_strings.h:940 msgid "You are playing as" msgstr "" -#: src/states_screens/dialogs/player_info_dialog.cpp:160 -msgid "You cannot delete this player because it is currently in use." +#: src/states_screens/dialogs/vote_dialog.cpp:190 +msgid "You can adapt your previous rating by clicking the stars beneath." msgstr "" -#: src/states_screens/grand_prix_win.cpp:104 -#: src/states_screens/race_result_gui.cpp:112 +#: src/states_screens/main_menu_screen.cpp:513 +msgid "" +"You can not download addons without internet access. If you want to download " +"addons, go to options, select tab 'User Interface', and edit \"Allow STK to " +"connect to the Internet\"." +msgstr "" + +#: src/states_screens/main_menu_screen.cpp:488 +msgid "" +"You can not play online without internet access. If you want to play online, " +"go to options, select tab 'User Interface', and edit \"Allow STK to connect " +"to the Internet\"." +msgstr "" + +#. I18N: ./data/gui/online/register.stkgui +#. I18N: In the registration dialog +#: data/po/gui_strings.h:467 +msgid "" +"You can play without creating an online account by unchecking the online " +"checkbox, though then you can not connect to friends, vote for addons etc. " +"You can also use an existing SuperTuxKart Addons account in the next screen " +"if you already have one. Please read our privacy statement at http://privacy." +"supertuxkart.net" +msgstr "" + +#: src/states_screens/grand_prix_win.cpp:125 +#: src/states_screens/race_result_gui.cpp:164 msgid "You completed a challenge!" msgstr "" -#: src/states_screens/race_result_gui.cpp:113 +#: src/states_screens/race_result_gui.cpp:165 msgid "You completed challenges!" msgstr "" -#: src/states_screens/grand_prix_win.cpp:380 +#: src/states_screens/grand_prix_win.cpp:280 msgid "You completed the Grand Prix!" msgstr "" -#: src/states_screens/feature_unlocked.cpp:182 -#, c-format -msgid "You completed the difficult challenge! This trophy is worth %i points" -msgstr "" - -#: src/states_screens/feature_unlocked.cpp:174 -#, c-format -msgid "You completed the easy challenge! This trophy is worth %i points" -msgstr "" - -#: src/states_screens/feature_unlocked.cpp:178 +#: src/states_screens/feature_unlocked.cpp:208 #, c-format msgid "" -"You completed the intermediate challenge! This trophy is worth %i points" +"You completed the difficult challenge! Points earned on this level: %i/%i" msgstr "" -#: src/karts/kart.cpp:825 +#: src/states_screens/feature_unlocked.cpp:200 +#, c-format +msgid "You completed the easy challenge! Points earned on this level: %i/%i" +msgstr "" + +#: src/states_screens/feature_unlocked.cpp:204 +#, c-format +msgid "" +"You completed the intermediate challenge! Points earned on this level: %i/%i" +msgstr "" + +#: src/karts/kart.cpp:855 msgid "You finished the race!" msgstr "" -#: src/modes/world.cpp:1025 +#: src/online/online_player_profile.cpp:442 +#, c-format +msgid "You have %d new friend requests!" +msgstr "" + +#: src/online/online_player_profile.cpp:447 +msgid "You have a new friend request!" +msgstr "" + +#: src/modes/world.cpp:1146 msgid "You have been eliminated!" msgstr "" -#: src/karts/kart.cpp:1814 +#: src/states_screens/dialogs/vote_dialog.cpp:195 msgid "" -"You need more points\n" -"to enter this challenge!" +"You have not yet voted for this addon. Select your desired rating by " +"clicking the stars beneath" msgstr "" -#: src/states_screens/feature_unlocked.cpp:649 +#: src/karts/kart.cpp:1898 +msgid "" +"You need more points\n" +"to enter this challenge!\n" +"Check the minimap for\n" +"available challenges." +msgstr "" + +#: src/states_screens/user_screen.cpp:417 +msgid "You need to enter a password." +msgstr "" + +#: src/states_screens/feature_unlocked.cpp:567 msgid "You unlocked grand prix %0" msgstr "" -#: src/states_screens/feature_unlocked.cpp:611 +#: src/states_screens/feature_unlocked.cpp:529 msgid "You unlocked track %0" msgstr "" -#: src/karts/kart.cpp:825 src/karts/kart.cpp:843 +#. I18N: ./data/gui/online/recovery_info.stkgui +#. I18N: In the recovery dialog +#: data/po/gui_strings.h:567 +msgid "" +"You will receive an email with further instructions on how to reset your " +"password. Please be patient and be sure to check your spam folder." +msgstr "" + +#: src/states_screens/register_screen.cpp:310 +msgid "" +"You will receive an email with further instructions regarding account " +"activation. Please be patient and be sure to check your spam folder." +msgstr "" + +#: src/karts/kart.cpp:855 src/karts/kart.cpp:874 msgid "You won the race!" msgstr "" -#: src/config/user_config.cpp:658 +#: src/config/user_config.cpp:700 msgid "" "Your config file was malformed, so it was deleted and a new one will be " "created." msgstr "" -#: src/config/user_config.cpp:669 +#: src/config/user_config.cpp:711 msgid "" "Your config file was too old, so it was deleted and a new one will be " "created." msgstr "" -#: src/input/device_manager.cpp:482 +#: src/input/device_manager.cpp:501 msgid "Your input config file is not compatible with this version of STK." msgstr "" -#. I18N: ./data/tracks/zengarden/track.xml -#: data/po/gui_strings.h:68 -msgid "Zen Garden" +#: src/states_screens/online_profile_base.cpp:99 +msgid "Your profile" msgstr "" #. I18N: Unbound key binding -#: src/input/binding.cpp:100 +#: src/input/binding.cpp:90 msgid "[none]" msgstr "" +#. I18N: ./data/gui/online/lobby.stkgui +#. I18N: In networking lobby +#: data/po/gui_strings.h:555 +msgid "actions" +msgstr "" + #. I18N: string used to show the author of the music. (e.g. "Sunny Song" by "John Doe") -#: src/states_screens/race_gui_base.cpp:623 +#: src/states_screens/race_gui_base.cpp:542 msgid "by" msgstr "" -#: src/states_screens/dialogs/addons_loading.cpp:138 +#: src/states_screens/dialogs/addons_loading.cpp:139 msgid "featured" msgstr "" +#: src/states_screens/dialogs/custom_video_settings.cpp:86 +msgid "high" +msgstr "" + +#: src/states_screens/dialogs/custom_video_settings.cpp:85 +msgid "low" +msgstr "" + #. I18N: arena group name #. I18N: track group name #. I18N: kart group name -#: src/states_screens/arenas_screen.cpp:79 -#: src/states_screens/tracks_screen.cpp:174 -#: src/states_screens/kart_selection.cpp:1040 +#. I18N: track group name +#: src/states_screens/arenas_screen.cpp:81 +#: src/states_screens/tracks_screen.cpp:152 +#: src/states_screens/kart_selection.cpp:284 +#: src/states_screens/easter_egg_screen.cpp:143 msgid "standard" msgstr "" -#: src/states_screens/credits.cpp:213 +#: src/states_screens/credits.cpp:209 msgid "translator-credits" msgstr "" From 49474a53709e4573676a0a43830d0d2b322d8ce9 Mon Sep 17 00:00:00 2001 From: hiker Date: Tue, 25 Nov 2014 17:08:31 +1100 Subject: [PATCH 20/21] Fixed my "Better handle out-of-memory situations." ... to now actually work :P --- src/graphics/gpuparticles.cpp | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/src/graphics/gpuparticles.cpp b/src/graphics/gpuparticles.cpp index 5c0d16fd1..cb0bdfb98 100644 --- a/src/graphics/gpuparticles.cpp +++ b/src/graphics/gpuparticles.cpp @@ -131,16 +131,22 @@ void ParticleSystemProxy::generateParticlesFromPointEmitter(scene::IParticlePoin ParticleData* ParticleParamsTmp = (ParticleData *) realloc(ParticleParams, sizeof(ParticleData) * m_count); ParticleData* InitialValuesTmp = (ParticleData *)realloc(InitialValues, sizeof(ParticleData)* m_count); - if(ParticleParamsTmp != NULL) // In case memory allocation succeeded + if (ParticleParamsTmp != NULL) // In case memory allocation succeeded + { + ParticleParams = ParticleParamsTmp; + } + else { Log::error("GPUParticles", "Not enough memory for %d from point particles.", m_count); - ParticleParams = ParticleParamsTmp; m_count = m_previous_count; } - if(InitialValuesTmp != NULL) + if (InitialValuesTmp != NULL) + { + InitialValues = InitialValuesTmp; + } + else { Log::fatal("GPUParticles", "Not enough memory for %d from point particles.", m_count); - InitialValues = InitialValuesTmp; m_count = m_previous_count; } @@ -166,17 +172,23 @@ void ParticleSystemProxy::generateParticlesFromBoxEmitter(scene::IParticleBoxEmi ParticleData* ParticleParamsTmp = (ParticleData *) realloc(ParticleParams, sizeof(ParticleData) * m_count); ParticleData* InitialValuesTmp = (ParticleData *)realloc(InitialValues, sizeof(ParticleData)* m_count); - if(ParticleParamsTmp != NULL) // In case memory allocation succeeded + if (ParticleParamsTmp != NULL) // In case memory allocation succeeded { - Log::error("GPUParticles", "Not enough memory for %d from box particles.", m_count); ParticleParams = ParticleParamsTmp; - m_count = m_previous_count; } - if(InitialValuesTmp != NULL) + else { Log::error("GPUParticles", "Not enough memory for %d from box particles.", m_count); + m_count = m_previous_count; + } + if (InitialValuesTmp != NULL) + { InitialValues = InitialValuesTmp; - m_count = m_previous_count; + } + else + { + Log::error("GPUParticles", "Not enough memory for %d from box particles.", m_count); + m_count = m_previous_count; } const core::vector3df& extent = emitter->getBox().getExtent(); From ea3a43314723c6cda8ac78ad4c41bf91060e2694 Mon Sep 17 00:00:00 2001 From: hiker Date: Tue, 25 Nov 2014 17:12:47 +1100 Subject: [PATCH 21/21] Fix #1620 (Player's achievements can only be seen when logged in). --- data/gui/main.stkgui | 2 + data/gui/online/profile_achievements.stkgui | 7 -- .../online/profile_achievements_tab.stkgui | 22 ++++++ src/states_screens/main_menu_screen.cpp | 6 +- .../online_profile_achievements.cpp | 24 +++--- .../online_profile_achievements.hpp | 49 +++++++++++- src/states_screens/online_profile_base.cpp | 75 +++++++++++-------- src/states_screens/online_profile_base.hpp | 2 +- 8 files changed, 131 insertions(+), 56 deletions(-) create mode 100644 data/gui/online/profile_achievements_tab.stkgui diff --git a/data/gui/main.stkgui b/data/gui/main.stkgui index 382b7f854..788b48e71 100644 --- a/data/gui/main.stkgui +++ b/data/gui/main.stkgui @@ -57,6 +57,8 @@ I18N="In the main screen" text="Help" label_location="hover"/> + - - - - - - diff --git a/data/gui/online/profile_achievements_tab.stkgui b/data/gui/online/profile_achievements_tab.stkgui new file mode 100644 index 000000000..33b0900d1 --- /dev/null +++ b/data/gui/online/profile_achievements_tab.stkgui @@ -0,0 +1,22 @@ + + + + +
+ +
+ + + + + + + + + + + + +
+
diff --git a/src/states_screens/main_menu_screen.cpp b/src/states_screens/main_menu_screen.cpp index 2477205b1..e499568b0 100644 --- a/src/states_screens/main_menu_screen.cpp +++ b/src/states_screens/main_menu_screen.cpp @@ -496,7 +496,7 @@ void MainMenuScreen::eventCallback(Widget* widget, const std::string& name, // For 0.8.2 disable the server menu, instead go to online profile //OnlineScreen::getInstance()->push(); ProfileManager::get()->setVisiting(PlayerManager::getCurrentOnlineId()); - OnlineProfileAchievements::getInstance()->push(); + TabOnlineProfileAchievements::getInstance()->push(); } else { @@ -522,6 +522,10 @@ void MainMenuScreen::eventCallback(Widget* widget, const std::string& name, { GrandPrixEditorScreen::getInstance()->push(); } + else if (selection == "achievements") + { + OnlineProfileAchievements::getInstance()->push(); + } } // eventCallback // ---------------------------------------------------------------------------- diff --git a/src/states_screens/online_profile_achievements.cpp b/src/states_screens/online_profile_achievements.cpp index 524ec27e5..9c616e542 100644 --- a/src/states_screens/online_profile_achievements.cpp +++ b/src/states_screens/online_profile_achievements.cpp @@ -40,21 +40,22 @@ using namespace irr::core; using namespace irr::gui; using namespace Online; -DEFINE_SCREEN_SINGLETON( OnlineProfileAchievements ); +DEFINE_SCREEN_SINGLETON( OnlineProfileAchievements ); +DEFINE_SCREEN_SINGLETON( TabOnlineProfileAchievements ); // ----------------------------------------------------------------------------- /** Constructor. */ -OnlineProfileAchievements::OnlineProfileAchievements() - : OnlineProfileBase("online/profile_achievements.stkgui") +BaseOnlineProfileAchievements::BaseOnlineProfileAchievements(const std::string &name) + : OnlineProfileBase(name) { m_selected_achievement_index = -1; -} // OnlineProfileAchievements +} // BaseOnlineProfileAchievements // ----------------------------------------------------------------------------- /** Callback when the xml file was loaded. */ -void OnlineProfileAchievements::loadedFromFile() +void BaseOnlineProfileAchievements::loadedFromFile() { OnlineProfileBase::loadedFromFile(); m_achievements_list_widget = getWidget("achievements_list"); @@ -65,7 +66,7 @@ void OnlineProfileAchievements::loadedFromFile() // ---------------------------------------------------------------------------- /** Callback before widgets are added. Clears all widgets. */ -void OnlineProfileAchievements::beforeAddingWidget() +void BaseOnlineProfileAchievements::beforeAddingWidget() { OnlineProfileBase::beforeAddingWidget(); m_achievements_list_widget->clearColumns(); @@ -82,11 +83,12 @@ void OnlineProfileAchievements::beforeAddingWidget() // ----------------------------------------------------------------------------- /** Called when entering this menu (after widgets have been added). */ -void OnlineProfileAchievements::init() +void BaseOnlineProfileAchievements::init() { OnlineProfileBase::init(); - m_profile_tabs->select( m_achievements_tab->m_properties[PROP_ID], - PLAYER_ID_GAME_MASTER ); + if (m_profile_tabs) + m_profile_tabs->select(m_achievements_tab->m_properties[PROP_ID], + PLAYER_ID_GAME_MASTER); // For current user add the progrss information. // m_visiting_profile is NULL if the user is not logged in. @@ -129,7 +131,7 @@ void OnlineProfileAchievements::init() // ----------------------------------------------------------------------------- -void OnlineProfileAchievements::eventCallback(Widget* widget, +void BaseOnlineProfileAchievements::eventCallback(Widget* widget, const std::string& name, const int playerID) { @@ -155,7 +157,7 @@ void OnlineProfileAchievements::eventCallback(Widget* widget, /** Called every frame. It will check if results from an achievement request * have been received, and if so, display them. */ -void OnlineProfileAchievements::onUpdate(float delta) +void BaseOnlineProfileAchievements::onUpdate(float delta) { if (!m_waiting_for_achievements) return; diff --git a/src/states_screens/online_profile_achievements.hpp b/src/states_screens/online_profile_achievements.hpp index 03a54b643..963fbb8fe 100644 --- a/src/states_screens/online_profile_achievements.hpp +++ b/src/states_screens/online_profile_achievements.hpp @@ -35,18 +35,20 @@ namespace GUIEngine { class Widget; } * \brief Online profiel overview screen * \ingroup states_screens */ -class OnlineProfileAchievements : public OnlineProfileBase, public GUIEngine::ScreenSingleton +class BaseOnlineProfileAchievements : public OnlineProfileBase { private: - OnlineProfileAchievements(); GUIEngine::ListWidget * m_achievements_list_widget; int m_selected_achievement_index; bool m_waiting_for_achievements; +protected: + BaseOnlineProfileAchievements(const std::string &filename); + public: - friend class GUIEngine::ScreenSingleton; + friend class GUIEngine::ScreenSingleton; /** \brief implement callback from parent class GUIEngine::Screen */ virtual void loadedFromFile() OVERRIDE; @@ -61,7 +63,46 @@ public: virtual void beforeAddingWidget() OVERRIDE; - virtual void refreshAchievementsList() { m_waiting_for_achievements = true; } + // ------------------------------------------------------------------------ + virtual void refreshAchievementsList() + { + m_waiting_for_achievements = true; + } // refreshAchievementsList }; +// ============================================================================ +/** +* \brief Online profiel overview screen +* \ingroup states_screens +*/ +class TabOnlineProfileAchievements : public BaseOnlineProfileAchievements, + public GUIEngine::ScreenSingleton +{ +protected: + friend class GUIEngine::ScreenSingleton; + + TabOnlineProfileAchievements() + : BaseOnlineProfileAchievements("online/profile_achievements_tab.stkgui") + {} + +}; // TabOnlineProfileAchievements + +// ============================================================================ +/** +* \brief Online profiel overview screen +* \ingroup states_screens +*/ +class OnlineProfileAchievements : public BaseOnlineProfileAchievements, + public GUIEngine::ScreenSingleton < OnlineProfileAchievements > +{ +protected: + friend class GUIEngine::ScreenSingleton; + + OnlineProfileAchievements() + : BaseOnlineProfileAchievements("online/profile_achievements.stkgui") + {} + +}; // class + + #endif diff --git a/src/states_screens/online_profile_base.cpp b/src/states_screens/online_profile_base.cpp index 0d90bdd0d..8f350df93 100644 --- a/src/states_screens/online_profile_base.cpp +++ b/src/states_screens/online_profile_base.cpp @@ -38,7 +38,8 @@ using namespace irr::gui; using namespace Online; -OnlineProfileBase::OnlineProfileBase(const char* filename) : Screen(filename) +OnlineProfileBase::OnlineProfileBase(const std::string &filename) + : Screen(filename.c_str()) { } // OnlineProfileBase @@ -48,19 +49,19 @@ OnlineProfileBase::OnlineProfileBase(const char* filename) : Screen(filename) void OnlineProfileBase::loadedFromFile() { m_profile_tabs = getWidget("profile_tabs"); - assert(m_profile_tabs != NULL); + m_header = getWidget("title"); assert(m_header != NULL); - m_friends_tab = + m_friends_tab = !m_profile_tabs ? NULL : (IconButtonWidget *) m_profile_tabs->findWidgetNamed("tab_friends"); - assert(m_friends_tab != NULL); - m_achievements_tab = + assert(m_profile_tabs == NULL || m_friends_tab != NULL); + m_achievements_tab = !m_profile_tabs ? NULL : (IconButtonWidget*)m_profile_tabs->findWidgetNamed("tab_achievements"); - assert(m_achievements_tab != NULL); - m_settings_tab = + assert(m_profile_tabs == NULL || m_achievements_tab != NULL); + m_settings_tab = !m_profile_tabs ? NULL : (IconButtonWidget *) m_profile_tabs->findWidgetNamed("tab_settings"); - assert(m_settings_tab != NULL); + assert(m_profile_tabs == NULL || m_settings_tab != NULL); } // loadedFromFile // ----------------------------------------------------------------------------- @@ -70,17 +71,20 @@ void OnlineProfileBase::loadedFromFile() void OnlineProfileBase::beforeAddingWidget() { m_visiting_profile = ProfileManager::get()->getVisitingProfile(); - if (!m_visiting_profile || !m_visiting_profile->isCurrentUser()) - m_settings_tab->setVisible(false); - else - m_settings_tab->setVisible(true); - - // If not logged in, don't show profile or friends - if (!m_visiting_profile) + if (m_profile_tabs) { - m_friends_tab->setVisible(false); - m_profile_tabs->setVisible(false); - } + if (!m_visiting_profile || !m_visiting_profile->isCurrentUser()) + m_settings_tab->setVisible(false); + else + m_settings_tab->setVisible(true); + + // If not logged in, don't show profile or friends + if (!m_visiting_profile) + { + m_friends_tab->setVisible(false); + m_profile_tabs->setVisible(false); + } + } // if m_profile_tabhs } // beforeAddingWidget // ----------------------------------------------------------------------------- @@ -90,20 +94,26 @@ void OnlineProfileBase::init() { Screen::init(); - m_friends_tab->setTooltip( _("Friends") ); - m_achievements_tab->setTooltip( _("Achievements") ); - m_settings_tab->setTooltip( _("Account Settings") ); - - // If no visiting_profile is defined, use the data of the current player. - if (!m_visiting_profile || m_visiting_profile->isCurrentUser()) - m_header->setText(_("Your profile"), false); - else if (m_visiting_profile) + if (m_profile_tabs) { - m_header->setText(m_visiting_profile->getUserName() + _("'s profile"), false); - } - else - Log::error("OnlineProfileBase", "No visting profile"); + m_friends_tab->setTooltip(_("Friends")); + m_achievements_tab->setTooltip(_("Achievements")); + m_settings_tab->setTooltip(_("Account Settings")); + // If no visiting_profile is defined, use the data of the current player. + if (!m_visiting_profile || m_visiting_profile->isCurrentUser()) + m_header->setText(_("Your profile"), false); + else if (m_visiting_profile) + { + m_header->setText(m_visiting_profile->getUserName() + _("'s profile"), false); + } + else + Log::error("OnlineProfileBase", "No visting profile"); + } + else // no tabs, so must be local player achievements: + { + m_header->setText(_("Your profile"), false); + } } // init // ----------------------------------------------------------------------------- @@ -115,7 +125,8 @@ bool OnlineProfileBase::onEscapePressed() //return to your profile if it's another profile ProfileManager::get()->setVisiting(PlayerManager::getCurrentOnlineId()); - StateManager::get()->replaceTopMostScreen(OnlineProfileAchievements::getInstance()); + StateManager::get()->replaceTopMostScreen( + TabOnlineProfileAchievements::getInstance()); return false; } // onEscapePressed @@ -125,7 +136,7 @@ bool OnlineProfileBase::onEscapePressed() void OnlineProfileBase::eventCallback(Widget* widget, const std::string& name, const int playerID) { - if (name == m_profile_tabs->m_properties[PROP_ID]) + if (m_profile_tabs && name == m_profile_tabs->m_properties[PROP_ID]) { std::string selection = ((RibbonWidget*)widget)->getSelectionIDString(PLAYER_ID_GAME_MASTER); diff --git a/src/states_screens/online_profile_base.hpp b/src/states_screens/online_profile_base.hpp index 247de6e95..2a57567ad 100644 --- a/src/states_screens/online_profile_base.hpp +++ b/src/states_screens/online_profile_base.hpp @@ -37,7 +37,7 @@ namespace GUIEngine { class Widget; } class OnlineProfileBase : public GUIEngine::Screen { protected: - OnlineProfileBase(const char* filename); + OnlineProfileBase(const std::string &filename); /** Pointer to the various widgets on the screen. */ GUIEngine::LabelWidget * m_header;