-
-
+
+
diff --git a/data/gui/main.stkgui b/data/gui/main.stkgui
index 66ca6f8ca..788b48e71 100644
--- a/data/gui/main.stkgui
+++ b/data/gui/main.stkgui
@@ -45,14 +45,20 @@
text="TEST: GPLose" 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/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/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 ""
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);
+}
diff --git a/src/audio/sfx_manager.cpp b/src/audio/sfx_manager.cpp
index 03261862c..0c982a13e 100644
--- a/src/audio/sfx_manager.cpp
+++ b/src/audio/sfx_manager.cpp
@@ -209,7 +209,8 @@ void SFXManager::queue(SFXCommands command, SFXBase *sfx, const Vec3 &p)
void SFXManager::queueCommand(SFXCommand *command)
{
m_sfx_commands.lock();
- if(m_sfx_commands.getData().size() > 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/graphics/camera.cpp b/src/graphics/camera.cpp
index f49186d13..0ce966d24 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/gpuparticles.cpp b/src/graphics/gpuparticles.cpp
index c9b1370c9..cb0bdfb98 100644
--- a/src/graphics/gpuparticles.cpp
+++ b/src/graphics/gpuparticles.cpp
@@ -128,10 +128,29 @@ 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) * m_count);
+ ParticleData* InitialValuesTmp = (ParticleData *)realloc(InitialValues, sizeof(ParticleData)* m_count);
- for (unsigned i = 0; i < count; i++)
+ if (ParticleParamsTmp != NULL) // In case memory allocation succeeded
+ {
+ ParticleParams = ParticleParamsTmp;
+ }
+ else
+ {
+ Log::error("GPUParticles", "Not enough memory for %d from point particles.", m_count);
+ m_count = m_previous_count;
+ }
+ if (InitialValuesTmp != NULL)
+ {
+ InitialValues = InitialValuesTmp;
+ }
+ else
+ {
+ Log::fatal("GPUParticles", "Not enough memory for %d from point particles.", m_count);
+ m_count = m_previous_count;
+ }
+
+ for (unsigned i = 0; i < m_count; i++)
{
ParticleParams[i].PositionX = 0;
ParticleParams[i].PositionY = 0;
@@ -150,12 +169,31 @@ 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) * m_count);
+ ParticleData* InitialValuesTmp = (ParticleData *)realloc(InitialValues, sizeof(ParticleData)* m_count);
+
+ if (ParticleParamsTmp != NULL) // In case memory allocation succeeded
+ {
+ ParticleParams = ParticleParamsTmp;
+ }
+ else
+ {
+ Log::error("GPUParticles", "Not enough memory for %d from box particles.", m_count);
+ m_count = m_previous_count;
+ }
+ if (InitialValuesTmp != NULL)
+ {
+ InitialValues = InitialValuesTmp;
+ }
+ 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();
- 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;
@@ -177,10 +215,15 @@ 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) * m_count);
+ ParticleData* InitialValuesTmp = (ParticleData *)realloc(InitialValues, sizeof(ParticleData)* m_count);
- for (unsigned i = 0; i < count; i++) {
+ if(ParticleParamsTmp != NULL) // In case memory allocation succeeded
+ ParticleParams = ParticleParamsTmp;
+ if(InitialValuesTmp != NULL)
+ InitialValues = InitialValuesTmp;
+
+ for (unsigned i = 0; i < m_count; i++) {
// Random distance from center
const f32 distance = os::Randomizer::frand() * emitter->getRadius();
@@ -227,7 +270,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:
@@ -340,7 +384,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);
@@ -359,7 +403,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()
@@ -377,7 +421,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()
@@ -393,12 +437,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);
@@ -415,8 +459,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.);
@@ -427,7 +471,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;
}
@@ -454,4 +498,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);
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 7112a86bc..123da79ba 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);
}
}
@@ -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.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);
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/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();
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();
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/input/input_manager.cpp b/src/input/input_manager.cpp
index 58ffeb198..737bd30b1 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_fpscam_max_angular_velocity : 0);
+ UserConfigParams::m_fpscam_max_angular_velocity : 0.0f);
break;
}
case KEY_KEY_E:
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..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",&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);
diff --git a/src/replay/replay_play.cpp b/src/replay/replay_play.cpp
index a3af26002..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", &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", &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",&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",&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);
diff --git a/src/states_screens/gp_info_screen.cpp b/src/states_screens/gp_info_screen.cpp
index d3338b928..15af2518b 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
@@ -84,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
// ----------------------------------------------------------------------------
@@ -266,34 +269,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 +365,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/kart_selection.cpp b/src/states_screens/kart_selection.cpp
index 0184eb2dd..3dda75eff 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() <= ((unsigned int) 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
@@ -554,7 +554,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)
@@ -588,7 +588,7 @@ bool KartSelectionScreen::playerQuit(StateManager::ActivePlayer* player)
return true;
}
- playerID = n;
+ player_id = n;
}
else
{
@@ -596,21 +596,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.
@@ -624,10 +624,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();
@@ -706,23 +706,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;
@@ -738,16 +738,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)
@@ -763,13 +763,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");
@@ -959,7 +959,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)
@@ -1032,8 +1032,8 @@ void KartSelectionScreen::eventCallback(Widget* widget,
}
else if (name == "karts")
{
- if (m_kart_widgets.size() > ((unsigned int) playerID))
- playerConfirm(playerID);
+ if (m_kart_widgets.size() > unsigned(player_id))
+ playerConfirm(player_id);
}
else if (name == "back")
{
@@ -1045,7 +1045,7 @@ void KartSelectionScreen::eventCallback(Widget* widget,
const int amount = m_kart_widgets.size();
for (int n=0; nremoveChildNamed("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")
@@ -463,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
{
@@ -489,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;
diff --git a/src/states_screens/track_info_screen.cpp b/src/states_screens/track_info_screen.cpp
index fbb70f59a..4d1d10d21 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
// ----------------------------------------------------------------------------
@@ -80,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
// ----------------------------------------------------------------------------
@@ -105,37 +108,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;