diff --git a/data/CREDITS b/data/CREDITS
index f3a12c1af..269816c84 100644
Binary files a/data/CREDITS and b/data/CREDITS differ
diff --git a/data/challenges/fortmagma.challenge b/data/challenges/fortmagma.challenge
index 6daf261f1..8868e0270 100644
--- a/data/challenges/fortmagma.challenge
+++ b/data/challenges/fortmagma.challenge
@@ -19,5 +19,6 @@
+
diff --git a/data/fonts/LayneHansom0.png b/data/fonts/LayneHansom0.png
index 61a08a412..0a95d96e7 100644
Binary files a/data/fonts/LayneHansom0.png and b/data/fonts/LayneHansom0.png differ
diff --git a/data/fonts/StkFont.xml b/data/fonts/StkFont.xml
index 3485abddf..8653367f0 100644
Binary files a/data/fonts/StkFont.xml and b/data/fonts/StkFont.xml differ
diff --git a/data/gfx/explosion.xml b/data/gfx/explosion.xml
new file mode 100644
index 000000000..58c0c750a
--- /dev/null
+++ b/data/gfx/explosion.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/gfx/explosion_bomb.xml b/data/gfx/explosion_bomb.xml
new file mode 100644
index 000000000..58c0c750a
--- /dev/null
+++ b/data/gfx/explosion_bomb.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/gfx/explosion_cake.xml b/data/gfx/explosion_cake.xml
new file mode 100644
index 000000000..58c0c750a
--- /dev/null
+++ b/data/gfx/explosion_cake.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/gfx/jump_explosion.xml b/data/gfx/jump_explosion.xml
new file mode 100644
index 000000000..219f778ec
--- /dev/null
+++ b/data/gfx/jump_explosion.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/gfx/nitro-smoke.xml b/data/gfx/nitro-smoke.xml
new file mode 100644
index 000000000..57a6dee61
--- /dev/null
+++ b/data/gfx/nitro-smoke.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/gfx/nitro.xml b/data/gfx/nitro.xml
index 5bc947cbe..6f68e4b67 100644
--- a/data/gfx/nitro.xml
+++ b/data/gfx/nitro.xml
@@ -1,30 +1,33 @@
-
+
-
+
+ z="0.000" />
-
+
-
+
-
+
-
+
diff --git a/data/gfx/skid2.xml b/data/gfx/skid2.xml
index be3d0c7b3..d4e382b45 100644
--- a/data/gfx/skid2.xml
+++ b/data/gfx/skid2.xml
@@ -21,7 +21,7 @@
+ max="0.75" />
diff --git a/data/gui/addons_loading.stkgui b/data/gui/addons_loading.stkgui
index aa3c34a4a..66d721b87 100644
--- a/data/gui/addons_loading.stkgui
+++ b/data/gui/addons_loading.stkgui
@@ -16,8 +16,8 @@
-
diff --git a/data/gui/addons_screen.stkgui b/data/gui/addons_screen.stkgui
index 412d6ae23..4619db7ee 100644
--- a/data/gui/addons_screen.stkgui
+++ b/data/gui/addons_screen.stkgui
@@ -5,11 +5,22 @@
-
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
diff --git a/data/gui/search.png b/data/gui/search.png
new file mode 100644
index 000000000..358b94fab
Binary files /dev/null and b/data/gui/search.png differ
diff --git a/data/gui/skins/Glass.stkskin b/data/gui/skins/Glass.stkskin
index 1e7926ed1..2691f1e44 100644
--- a/data/gui/skins/Glass.stkskin
+++ b/data/gui/skins/Glass.stkskin
@@ -3,6 +3,7 @@
Glass skin by Marianne Gagnon, released under creative-commons BY-SA 3.0+
Except background.jpg, by elisee
Except left_arrow, right_arrow and list_sort_up by Dakal
+Except stars, by s@f
To make your own skin, I suggest simply duplicating this file and modifying it as needed.
There are two types of images : some will be simply stretched as a whole, others will
@@ -208,7 +209,12 @@ when the border that intersect at this corner are enabled.
-
+
+
+
+
+
+
diff --git a/data/gui/skins/Ocean.stkskin b/data/gui/skins/Ocean.stkskin
index cd3be7a98..079520eaf 100644
--- a/data/gui/skins/Ocean.stkskin
+++ b/data/gui/skins/Ocean.stkskin
@@ -2,6 +2,7 @@
Ocean skin by Dakal and Marianne Gagnon, released under creative-commons BY-SA 3.0+
Except background.jpg, by elisee
+Except stars, by s@f
To make your own skin, I suggest simply duplicating this file and modifying it as needed.
There are two types of images : some will be simply stretched as a whole, others will
@@ -208,7 +209,12 @@ when the border that intersect at this corner are enabled.
-
-
+
+
+
+
+
+
+
diff --git a/data/gui/skins/Peach.stkskin b/data/gui/skins/Peach.stkskin
index cd0e733a8..c1018edb8 100644
--- a/data/gui/skins/Peach.stkskin
+++ b/data/gui/skins/Peach.stkskin
@@ -2,6 +2,7 @@
Peach skin by Dakal and Marianne Gagnon, released under creative-commons BY-SA 3.0+
Except background.jpg, by elisee
+Except stars, by s@f
To make your own skin, I suggest simply duplicating this file and modifying it as needed.
There are two types of images : some will be simply stretched as a whole, others will
@@ -207,7 +208,12 @@ when the border that intersect at this corner are enabled.
-
-
+
+
+
+
+
+
+
diff --git a/data/gui/skins/glass/rating_star.png b/data/gui/skins/glass/rating_star.png
new file mode 100644
index 000000000..63e8bc882
Binary files /dev/null and b/data/gui/skins/glass/rating_star.png differ
diff --git a/data/gui/skins/ocean/rating_star.png b/data/gui/skins/ocean/rating_star.png
new file mode 100644
index 000000000..63e8bc882
Binary files /dev/null and b/data/gui/skins/ocean/rating_star.png differ
diff --git a/data/gui/skins/peach/rating_star.png b/data/gui/skins/peach/rating_star.png
new file mode 100644
index 000000000..63e8bc882
Binary files /dev/null and b/data/gui/skins/peach/rating_star.png differ
diff --git a/data/models/materials.xml b/data/models/materials.xml
index c4c8645cb..7777dc9e8 100644
--- a/data/models/materials.xml
+++ b/data/models/materials.xml
@@ -7,10 +7,10 @@
-
-
-
-
+
+
+
+
diff --git a/data/models/nitro-tank.png b/data/models/nitro-tank.png
deleted file mode 100644
index be3fc7480..000000000
Binary files a/data/models/nitro-tank.png and /dev/null differ
diff --git a/data/models/nitrotank-big-low.b3d b/data/models/nitrotank-big-low.b3d
index fe17c2ec9..9009158bb 100644
Binary files a/data/models/nitrotank-big-low.b3d and b/data/models/nitrotank-big-low.b3d differ
diff --git a/data/models/nitrotank-big.b3d b/data/models/nitrotank-big.b3d
index ce8a30e8d..53b8032bf 100644
Binary files a/data/models/nitrotank-big.b3d and b/data/models/nitrotank-big.b3d differ
diff --git a/data/models/nitrotank-small-low.b3d b/data/models/nitrotank-small-low.b3d
index 8af58ebdb..568bccfd8 100644
Binary files a/data/models/nitrotank-small-low.b3d and b/data/models/nitrotank-small-low.b3d differ
diff --git a/data/models/nitrotank-small.b3d b/data/models/nitrotank-small.b3d
index 18547aff3..1afb4eead 100644
Binary files a/data/models/nitrotank-small.b3d and b/data/models/nitrotank-small.b3d differ
diff --git a/data/models/stk_mod_nitroBarrel.png b/data/models/stk_mod_nitroBarrel.png
new file mode 100644
index 000000000..5d29a7f5f
Binary files /dev/null and b/data/models/stk_mod_nitroBarrel.png differ
diff --git a/data/models/stk_mod_nitroBottle.png b/data/models/stk_mod_nitroBottle.png
new file mode 100644
index 000000000..c996eef59
Binary files /dev/null and b/data/models/stk_mod_nitroBottle.png differ
diff --git a/data/models/stk_mod_nitroLogo.png b/data/models/stk_mod_nitroLogo.png
new file mode 100644
index 000000000..4dae47fbf
Binary files /dev/null and b/data/models/stk_mod_nitroLogo.png differ
diff --git a/data/models/tank-blue.png b/data/models/tank-blue.png
deleted file mode 100644
index 1149b1667..000000000
Binary files a/data/models/tank-blue.png and /dev/null differ
diff --git a/data/models/tank-cyan.png b/data/models/tank-cyan.png
deleted file mode 100644
index 85f186dd4..000000000
Binary files a/data/models/tank-cyan.png and /dev/null differ
diff --git a/data/models/tank-green.png b/data/models/tank-green.png
deleted file mode 100644
index db4db2fda..000000000
Binary files a/data/models/tank-green.png and /dev/null differ
diff --git a/data/po/fr.po b/data/po/fr.po
index db73be927..b2cbc2f54 100644
--- a/data/po/fr.po
+++ b/data/po/fr.po
@@ -1034,7 +1034,7 @@ msgstr "Réglages visuels"
#. I18N: ./data/tracks/greenvalley/track.xml
#: data/po/gui_strings.h:8
msgid "Green Valley"
-msgstr "Vallée luxuriente"
+msgstr "Vallée luxuriante"
#: src/config/user_config.cpp:546
msgid "Guest"
diff --git a/data/po/gui_strings.h b/data/po/gui_strings.h
deleted file mode 100644
index 4007082b5..000000000
--- a/data/po/gui_strings.h
+++ /dev/null
@@ -1,856 +0,0 @@
-//I18N: ./data/tracks/jungle/track.xml
-_("Amazonian Journey")
-
-//I18N: ./data/tracks/minigolf/track.xml
-_("Minigolf Mischief")
-
-//I18N: ./data/tracks/lighthouse/track.xml
-_("Around the Lighthouse")
-
-//I18N: ./data/tracks/subsea/track.xml
-_("Subsea")
-
-//I18N: ./data/tracks/city/track.xml
-_("Shiny Suburbs")
-
-//I18N: ./data/tracks/snowmountain/track.xml
-_("Northern Resort")
-
-//I18N: ./data/tracks/olivermath/track.xml
-_("Oliver's Math Class")
-
-//I18N: ./data/tracks/cave/track.xml
-_("Cave X")
-
-//I18N: ./data/tracks/battleisland/track.xml
-_("Battle Island")
-
-//I18N: ./data/tracks/alpha-planetarium/track.xml
-_("planetarium")
-
-//I18N: ./data/tracks/hacienda/track.xml
-_("Hacienda")
-
-//I18N: ./data/tracks/mines/track.xml
-_("Old Mine")
-
-//I18N: ./data/tracks/snowtuxpeak/track.xml
-_("Snow Peak")
-
-//I18N: ./data/tracks/islandtrack/track.xml
-_("The Island")
-
-//I18N: ./data/tracks/xr591/track.xml
-_("XR591")
-
-//I18N: ./data/tracks/mansion/track.xml
-_("Blackhill Mansion")
-
-//I18N: ./data/tracks/startrack/track.xml
-_("Star Track")
-
-//I18N: ./data/tracks/sandtrack/track.xml
-_("Shifting Sands")
-
-//I18N: ./data/tracks/stadium/track.xml
-_("The Stadium")
-
-//I18N: ./data/tracks/farm/track.xml
-_("Bovine Barnyard")
-
-//I18N: ./data/tracks/soccer_field/track.xml
-_("Soccer field")
-
-//I18N: ./data/tracks/fortmagma/track.xml
-_("Fort Magma")
-
-//I18N: ./data/tracks/scotland/track.xml
-_("Scotland")
-
-//I18N: ./data/tracks/greenvalley/track.xml
-_("Green Valley")
-
-//I18N: ./data/tracks/zengarden/track.xml
-_("Zen Garden")
-
-//I18N: Cutscene subtitle from ./data/tracks/introcutscene2/scene.xml
-_("What's wrong, little hippies? Your great gnu leader is missing?")
-
-//I18N: ./data/tracks/introcutscene2/scene.xml
-_("What's wrong, little hippies? Your great gnu leader is missing?")
-
-//I18N: Cutscene subtitle from ./data/tracks/introcutscene2/scene.xml
-_("Oh yes, see, he's in my castle now and will be served for supper...")
-
-//I18N: ./data/tracks/introcutscene2/scene.xml
-_("Oh yes, see, he's in my castle now and will be served for supper...")
-
-//I18N: Cutscene subtitle from ./data/tracks/introcutscene2/scene.xml
-_("But I'm a fair creature, so I'll make you a deal.")
-
-//I18N: ./data/tracks/introcutscene2/scene.xml
-_("But I'm a fair creature, so I'll make you a deal.")
-
-//I18N: Cutscene subtitle from ./data/tracks/introcutscene2/scene.xml
-_("If you can beat me at racing, I will free the old codger.")
-
-//I18N: ./data/tracks/introcutscene2/scene.xml
-_("If you can beat me at racing, I will free the old codger.")
-
-//I18N: Cutscene subtitle from ./data/tracks/introcutscene2/scene.xml
-_(" But you pathetic little twerps will never be able to beat me - King of the Karts!")
-
-//I18N: ./data/tracks/introcutscene2/scene.xml
-_(" But you pathetic little twerps will never be able to beat me - King of the Karts!")
-
-//I18N: ./data/grandprix/4_atworldsend.grandprix
-_("At World's End")
-
-//I18N: ./data/grandprix/2_offthebeatentrack.grandprix
-_("Off the beaten track")
-
-//I18N: ./data/grandprix/1_penguinplayground.grandprix
-_("Penguin Playground")
-
-//I18N: ./data/grandprix/3_tothemoonandback.grandprix
-_("To the moon and back")
-
-//I18N: ./data/gui/track_info_dialog.stkgui
-_("= Highscores =")
-
-//I18N: ./data/gui/track_info_dialog.stkgui
-_("(Empty)")
-
-//I18N: ./data/gui/track_info_dialog.stkgui
-_("(Empty)")
-
-//I18N: ./data/gui/track_info_dialog.stkgui
-_("(Empty)")
-
-//I18N: ./data/gui/track_info_dialog.stkgui
-//I18N: Drive the track reverse
-_("Reverse");
-
-//I18N: ./data/gui/track_info_dialog.stkgui
-//I18N: In the track setup screen (number of laps choice, where %i is the number)
-_("%i laps");
-
-//I18N: ./data/gui/track_info_dialog.stkgui
-_("Start Race")
-
-//I18N: ./data/gui/help2.stkgui
-_("SuperTuxKart Help")
-
-//I18N: ./data/gui/help2.stkgui
-//I18N: Tab in help menu
-_("General");
-
-//I18N: ./data/gui/help2.stkgui
-//I18N: Tab in help menu
-_("Weapons");
-
-//I18N: ./data/gui/help2.stkgui
-//I18N: Tab in help menu
-_("Game Modes");
-
-//I18N: ./data/gui/help2.stkgui
-//I18N: Tab in help menu
-_("Multiplayer");
-
-//I18N: ./data/gui/help2.stkgui
-//I18N: In the help menu
-_("To help you win, there are some powerups you can collect :");
-
-//I18N: ./data/gui/help2.stkgui
-_("BubbleGum - leave a sticky pink puddle behind you.")
-
-//I18N: ./data/gui/help2.stkgui
-_("Cake - thrown at the closest rival, best on short ranges and long straights.")
-
-//I18N: ./data/gui/help2.stkgui
-_("Plunger - throw straight to pull an opponent back, or throw while looking back to make one lose sight.")
-
-//I18N: ./data/gui/help2.stkgui
-_("Bowling Ball - bounces off walls. If you are looking back, it will be thrown backwards.")
-
-//I18N: ./data/gui/help2.stkgui
-_("Parachute - slows down all karts in a better position.")
-
-//I18N: ./data/gui/help2.stkgui
-_("Anchor - slows down greatly the kart in the first position.")
-
-//I18N: ./data/gui/help2.stkgui
-_("Swapper - gift boxes are transformed into bananas and vice versa for a short time.")
-
-//I18N: ./data/gui/help2.stkgui
-_("Basket Ball - bounces after the leader, and might squash and slow down karts down on the way.")
-
-//I18N: ./data/gui/help2.stkgui
-_("Swatter - will squash karts close by, slowing them down.")
-
-//I18N: ./data/gui/select_challenge.stkgui
-_("Race Setup")
-
-//I18N: ./data/gui/select_challenge.stkgui
-//I18N: Type of race, in a challenge
-_("Type :");
-
-//I18N: ./data/gui/select_challenge.stkgui
-//I18N: Difficulty
-_("Novice");
-
-//I18N: ./data/gui/select_challenge.stkgui
-//I18N: Difficulty
-_("Intermediate");
-
-//I18N: ./data/gui/select_challenge.stkgui
-//I18N: Difficulty
-_("Expert");
-
-//I18N: ./data/gui/confirm_dialog.stkgui
-//I18N: In a 'are you sure?' dialog
-_("Yes");
-
-//I18N: ./data/gui/confirm_dialog.stkgui
-//I18N: In a 'are you sure?' dialog
-_("Cancel");
-
-//I18N: ./data/gui/tutorial_message_dialog.stkgui
-//I18N: Button in tutorial
-_("Continue");
-
-//I18N: ./data/gui/custom_video_settings.stkgui
-_("Graphics Settings")
-
-//I18N: ./data/gui/custom_video_settings.stkgui
-//I18N: Video settings
-_("Animated Scenery");
-
-//I18N: ./data/gui/custom_video_settings.stkgui
-//I18N: Video settings
-_("Weather Effects");
-
-//I18N: ./data/gui/custom_video_settings.stkgui
-//I18N: Video settings
-_("Animated Characters");
-
-//I18N: ./data/gui/custom_video_settings.stkgui
-//I18N: Video settings
-_("Texture filtering");
-
-//I18N: ./data/gui/custom_video_settings.stkgui
-//I18N: Video settings
-_("Anti-aliasing (requires restart)");
-
-//I18N: ./data/gui/custom_video_settings.stkgui
-//I18N: Video settings
-_("Post-processing (motion blur)");
-
-//I18N: ./data/gui/custom_video_settings.stkgui
-//I18N: Video settings
-_("Pixel Shaders");
-
-//I18N: ./data/gui/custom_video_settings.stkgui
-_("Close")
-
-//I18N: ./data/gui/story_mode_lobby.stkgui
-_("Select a Player")
-
-//I18N: ./data/gui/story_mode_lobby.stkgui
-_("Remember me")
-
-//I18N: ./data/gui/story_mode_lobby.stkgui
-//I18N: In story mode 'select a game slot' menu
-_("Create a new player");
-
-//I18N: ./data/gui/racesetup.stkgui
-_("Race Setup")
-
-//I18N: ./data/gui/racesetup.stkgui
-//I18N: In race setup menu
-_("Number of AI karts");
-
-//I18N: ./data/gui/racesetup.stkgui
-//I18N: Difficulty
-_("Novice");
-
-//I18N: ./data/gui/racesetup.stkgui
-//I18N: Difficulty
-_("Intermediate");
-
-//I18N: ./data/gui/racesetup.stkgui
-//I18N: Difficulty
-_("Expert");
-
-//I18N: ./data/gui/racesetup.stkgui
-//I18N: Difficulty
-_("Iron man");
-
-//I18N: ./data/gui/racesetup.stkgui
-_("Select a game mode")
-
-//I18N: ./data/gui/help4.stkgui
-_("SuperTuxKart Help")
-
-//I18N: ./data/gui/help4.stkgui
-//I18N: Tab in help menu
-_("General");
-
-//I18N: ./data/gui/help4.stkgui
-//I18N: Tab in help menu
-_("Weapons");
-
-//I18N: ./data/gui/help4.stkgui
-//I18N: Tab in help menu
-_("Game Modes");
-
-//I18N: ./data/gui/help4.stkgui
-//I18N: Tab in help menu
-_("Multiplayer");
-
-//I18N: ./data/gui/help4.stkgui
-_("SuperTuxKart can be played in multiplayer mode on the same computer")
-
-//I18N: ./data/gui/help4.stkgui
-_("(network play is not yet available)")
-
-//I18N: ./data/gui/help4.stkgui
-//I18N: In the help menu
-_("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 configuration screen and setup the gamepads. It is also possible to play on keyboard(s), however each player will need a different set of keys, and keep in mind that most keyboards are not appropriate for multiplayer gameplay because they do not support large number of keypresses.");
-
-//I18N: ./data/gui/help4.stkgui
-//I18N: In the help menu
-_("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, each player can press on the 'fire' key of their gamepad or keyboard to join the game. Each player can use their input device to select their kart. The game continues when everyone selected their kart. Note that the mouse may not be used for this operation.");
-
-//I18N: ./data/gui/challenges.stkgui
-//I18N: Title for challenges screen
-_("Challenges : Trophy Room");
-
-//I18N: ./data/gui/tutorial.stkgui
-//I18N: Title for tutorials screen
-_("Tutorial : Selection Room");
-
-//I18N: ./data/gui/tutorial.stkgui
-_("Play all")
-
-//I18N: ./data/gui/options_audio.stkgui
-_("SuperTuxKart Options")
-
-//I18N: ./data/gui/options_audio.stkgui
-//I18N: Section in the settings menu
-_("Audio");
-
-//I18N: ./data/gui/options_audio.stkgui
-//I18N: Section in the audio/video settings submenu
-_("Music");
-
-//I18N: ./data/gui/options_audio.stkgui
-//I18N: Next to checkbox in settings menu
-_("Enabled");
-
-//I18N: ./data/gui/options_audio.stkgui
-//I18N: Music volume in options
-_("Volume");
-
-//I18N: ./data/gui/options_audio.stkgui
-//I18N: Section in audio/video settings submenu
-_("Sound Effects");
-
-//I18N: ./data/gui/options_audio.stkgui
-//I18N: Next to checkbox in settings menu
-_("Enabled");
-
-//I18N: ./data/gui/options_audio.stkgui
-//I18N: Sound volume in options
-_("Volume");
-
-//I18N: ./data/gui/options_video.stkgui
-_("SuperTuxKart Options")
-
-//I18N: ./data/gui/options_video.stkgui
-//I18N: Section in the settings menu
-_("Graphics");
-
-//I18N: ./data/gui/options_video.stkgui
-//I18N: In the graphics settings
-_("Graphical Effects Level");
-
-//I18N: ./data/gui/options_video.stkgui
-//I18N: In the video settings
-_("Custom settings...");
-
-//I18N: ./data/gui/options_video.stkgui
-//I18N: In the video settings
-_("Vertical Sync (requires restart)");
-
-//I18N: ./data/gui/options_video.stkgui
-//I18N: In the video settings
-_("Use Frame Buffer Objects (requires restart)");
-
-//I18N: ./data/gui/options_video.stkgui
-//I18N: In the graphics settings
-_("Resolution");
-
-//I18N: ./data/gui/options_video.stkgui
-//I18N: In the video settings
-_("Fullscreen");
-
-//I18N: ./data/gui/options_video.stkgui
-//I18N: In the video settings
-_("Remember window location");
-
-//I18N: ./data/gui/options_video.stkgui
-//I18N: In the video settings menu
-_("Apply new resolution");
-
-//I18N: ./data/gui/soccer_setup.stkgui
-_("Race Setup")
-
-//I18N: ./data/gui/soccer_setup.stkgui
-//I18N: In soccer setup menu
-_("Number of goals to win");
-
-//I18N: ./data/gui/soccer_setup.stkgui
-//I18N: In soccer setup menu
-_("Use left/right to choose your team");
-
-//I18N: ./data/gui/soccer_setup.stkgui
-_("VS")
-
-//I18N: ./data/gui/soccer_setup.stkgui
-//I18N: In soccer setup screen
-_("Continue");
-
-//I18N: ./data/gui/karts.stkgui
-//I18N: In the kart selection (player setup) screen
-_("Choose a Kart");
-
-//I18N: ./data/gui/options_device.stkgui
-_("SuperTuxKart Options")
-
-//I18N: ./data/gui/options_device.stkgui
-//I18N: Section in the settings menu
-_("Controls");
-
-//I18N: ./data/gui/options_device.stkgui
-//I18N: To delete a keyboard configuration
-_("Delete Configuration");
-
-//I18N: ./data/gui/options_device.stkgui
-//I18N: In the input configuration screen
-_("Back to device list");
-
-//I18N: ./data/gui/help3.stkgui
-_("SuperTuxKart Help")
-
-//I18N: ./data/gui/help3.stkgui
-//I18N: Tab in help menu
-_("General");
-
-//I18N: ./data/gui/help3.stkgui
-//I18N: Tab in help menu
-_("Weapons");
-
-//I18N: ./data/gui/help3.stkgui
-//I18N: Tab in help menu
-_("Game Modes");
-
-//I18N: ./data/gui/help3.stkgui
-//I18N: Tab in help menu
-_("Multiplayer");
-
-//I18N: ./data/gui/help3.stkgui
-_("SuperTuxKart features several game modes")
-
-//I18N: ./data/gui/help3.stkgui
-//I18N: In the help menu
-_("Regular Race: all blows allowed, so catch weapons and make clever use of them!");
-
-//I18N: ./data/gui/help3.stkgui
-//I18N: In the help menu
-_("Time Trial: Contains no powerups, so only your driving skills matter!");
-
-//I18N: ./data/gui/help3.stkgui
-//I18N: In the help menu
-_("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!");
-
-//I18N: ./data/gui/help3.stkgui
-//I18N: In the help menu
-_("3 Strikes Battle: only in multiplayer games. Hit others with weapons until they lose all their lives.");
-
-//I18N: ./data/gui/help3.stkgui
-//I18N: In the help menu
-_("* 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 rank, the more points you get. In the end, the player with the most points wins the cup.");
-
-//I18N: ./data/gui/confirm_resolution_dialog.stkgui
-//I18N: In the 'confirm resolution' dialog, that's shown when switching resoluton
-_("Keep this resolution");
-
-//I18N: ./data/gui/confirm_resolution_dialog.stkgui
-//I18N: In the 'confirm resolution' dialog, that's shown when switching resoluton
-_("Cancel");
-
-//I18N: ./data/gui/credits.stkgui
-//I18N: Title in credits screen
-_("Credits");
-
-//I18N: ./data/gui/options_players.stkgui
-_("SuperTuxKart Options")
-
-//I18N: ./data/gui/options_players.stkgui
-//I18N: Section in the settings menu
-_("Players");
-
-//I18N: ./data/gui/options_players.stkgui
-_("You are playing as")
-
-//I18N: ./data/gui/options_players.stkgui
-//I18N: In players configuration menu
-_("Press enter or double-click on a player to edit him/her");
-
-//I18N: ./data/gui/options_players.stkgui
-//I18N: In players configuration menu
-_("Add Player");
-
-//I18N: ./data/gui/overworld_dialog.stkgui
-_("Paused")
-
-//I18N: ./data/gui/overworld_dialog.stkgui
-//I18N: Race paused button
-_("Back to Game");
-
-//I18N: ./data/gui/overworld_dialog.stkgui
-//I18N: Race paused button
-_("Select kart");
-
-//I18N: ./data/gui/overworld_dialog.stkgui
-//I18N: Race paused button
-_("Options");
-
-//I18N: ./data/gui/overworld_dialog.stkgui
-//I18N: Race paused button
-_("Help");
-
-//I18N: ./data/gui/overworld_dialog.stkgui
-//I18N: Race paused button
-_("Back to menu");
-
-//I18N: ./data/gui/story_mode_new.stkgui
-_("New Game")
-
-//I18N: ./data/gui/story_mode_new.stkgui
-//I18N: In the new story mode game dialog
-_("Select your identity");
-
-//I18N: ./data/gui/story_mode_new.stkgui
-//I18N: Difficulty
-_("Novice");
-
-//I18N: ./data/gui/story_mode_new.stkgui
-//I18N: Difficulty
-_("Intermediate");
-
-//I18N: ./data/gui/story_mode_new.stkgui
-//I18N: Difficulty
-_("Expert");
-
-//I18N: ./data/gui/story_mode_new.stkgui
-_("Start Game")
-
-//I18N: ./data/gui/story_mode_new.stkgui
-_("Cancel")
-
-//I18N: ./data/gui/enter_player_name_dialog.stkgui
-//I18N: In the 'add new player' dialog
-_("Enter the new player's name");
-
-//I18N: ./data/gui/enter_player_name_dialog.stkgui
-//I18N: When configuring input
-_("Press ESC to cancel");
-
-//I18N: ./data/gui/options_input.stkgui
-_("SuperTuxKart Options")
-
-//I18N: ./data/gui/options_input.stkgui
-//I18N: Section in the settings menu
-_("Controls");
-
-//I18N: ./data/gui/options_input.stkgui
-//I18N: In key bindings configuration menu
-_("Press enter or double-click on a device to configure it");
-
-//I18N: ./data/gui/options_input.stkgui
-//I18N: In the input configuration screen
-_("Add a device");
-
-//I18N: ./data/gui/options_input.stkgui
-_("* Which config to use will be inferred from which 'fire' key is pressed to join the game.")
-
-//I18N: ./data/gui/grand_prix_win.stkgui
-_("Continue")
-
-//I18N: ./data/gui/addons_screen.stkgui
-_("SuperTuxKart Addons")
-
-//I18N: ./data/gui/addons_screen.stkgui
-//I18N: Reload button to reload addon data
-_("Reload");
-
-//I18N: ./data/gui/addons_screen.stkgui
-//I18N: Section in the addons menu
-_("Karts");
-
-//I18N: ./data/gui/addons_screen.stkgui
-//I18N: Section in the addons menu
-_("Tracks");
-
-//I18N: ./data/gui/addons_screen.stkgui
-//I18N: Section in the addons menu
-_("Arenas");
-
-//I18N: ./data/gui/feature_unlocked.stkgui
-_("Continue")
-
-//I18N: ./data/gui/race_paused_dialog.stkgui
-_("Paused")
-
-//I18N: ./data/gui/race_paused_dialog.stkgui
-//I18N: Race paused button
-_("Back to Race");
-
-//I18N: ./data/gui/race_paused_dialog.stkgui
-//I18N: Race paused button
-_("Setup New Race");
-
-//I18N: ./data/gui/race_paused_dialog.stkgui
-//I18N: Race paused button
-_("Restart Race");
-
-//I18N: ./data/gui/race_paused_dialog.stkgui
-//I18N: Race paused button
-_("Give Up Race");
-
-//I18N: ./data/gui/race_paused_dialog.stkgui
-//I18N: Race paused button
-_("Options");
-
-//I18N: ./data/gui/race_paused_dialog.stkgui
-//I18N: Race paused button
-_("Help");
-
-//I18N: ./data/gui/race_paused_dialog.stkgui
-//I18N: Race paused button
-_("Exit Race");
-
-//I18N: ./data/gui/grand_prix_lose.stkgui
-_("Continue")
-
-//I18N: ./data/gui/options_ui.stkgui
-_("SuperTuxKart Options")
-
-//I18N: ./data/gui/options_ui.stkgui
-//I18N: Section in the settings menu
-_("User Interface");
-
-//I18N: ./data/gui/options_ui.stkgui
-//I18N: In the graphics settings
-_("Skin");
-
-//I18N: ./data/gui/options_ui.stkgui
-//I18N: In the ui settings
-_("Display FPS");
-
-//I18N: ./data/gui/options_ui.stkgui
-//I18N: In the ui settings
-_("Allow STK to connect to the Internet");
-
-//I18N: ./data/gui/options_ui.stkgui
-//I18N: In the ui settings
-_("Minimal Race GUI");
-
-//I18N: ./data/gui/main.stkgui
-//I18N: Main menu button
-_("Story Mode");
-
-//I18N: ./data/gui/main.stkgui
-//I18N: Main menu button
-_("Single-player");
-
-//I18N: ./data/gui/main.stkgui
-//I18N: Main menu button
-_("Multiplayer");
-
-//I18N: ./data/gui/main.stkgui
-//I18N: Main menu button
-_("Addons");
-
-//I18N: ./data/gui/main.stkgui
-//I18N: Main menu button
-_("Options");
-
-//I18N: ./data/gui/main.stkgui
-//I18N: Main menu button
-_("Help");
-
-//I18N: ./data/gui/main.stkgui
-//I18N: Main menu button
-_("Tutorial");
-
-//I18N: ./data/gui/main.stkgui
-//I18N: Main menu button
-_("About");
-
-//I18N: ./data/gui/main.stkgui
-//I18N: Main menu button
-_("Quit");
-
-//I18N: ./data/gui/press_a_key_dialog.stkgui
-_("Press a key")
-
-//I18N: ./data/gui/press_a_key_dialog.stkgui
-//I18N: When configuring input
-_("Assign to ESC key");
-
-//I18N: ./data/gui/press_a_key_dialog.stkgui
-//I18N: When configuring input
-_("Press ESC to cancel");
-
-//I18N: ./data/gui/tracks.stkgui
-//I18N: Section in track selection screen
-_("Grand Prix");
-
-//I18N: ./data/gui/tracks.stkgui
-//I18N: Section in track selection screen
-_("All Tracks");
-
-//I18N: ./data/gui/help1.stkgui
-_("SuperTuxKart Help")
-
-//I18N: ./data/gui/help1.stkgui
-//I18N: Tab in help menu
-_("General");
-
-//I18N: ./data/gui/help1.stkgui
-//I18N: Tab in help menu
-_("Weapons");
-
-//I18N: ./data/gui/help1.stkgui
-//I18N: Tab in help menu
-_("Game Modes");
-
-//I18N: ./data/gui/help1.stkgui
-//I18N: Tab in help menu
-_("Multiplayer");
-
-//I18N: ./data/gui/help1.stkgui
-_("Click here to play the tutorial")
-
-//I18N: ./data/gui/help1.stkgui
-//I18N: In the help menu
-_("Collect blue boxes : they will give you weapons or other powerups");
-
-//I18N: ./data/gui/help1.stkgui
-//I18N: In the help menu
-_("Avoid bananas!");
-
-//I18N: ./data/gui/help1.stkgui
-//I18N: In the help menu
-_("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.");
-
-//I18N: ./data/gui/help1.stkgui
-//I18N: In the help menu
-_("If you see a button with a lock like this one, you need to complete a challenge to unlock it.");
-
-//I18N: ./data/gui/help1.stkgui
-//I18N: in the help menu
-_("The 'skidding' key allows you to skid in sharp turns and get a boost.");
-
-//I18N: ./data/gui/help1.stkgui
-//I18N: in the help screen
-_("* Current key bindings can be seen/changed in menu Options");
-
-//I18N: ./data/gui/addons_loading.stkgui
-//I18N: Add-on screen action
-_("Install");
-
-//I18N: ./data/gui/addons_loading.stkgui
-//I18N: Add-on screen action
-_("Uninstall");
-
-//I18N: ./data/gui/addons_loading.stkgui
-//I18N: Add-ons screen action
-_("Back");
-
-//I18N: ./data/gui/arenas.stkgui
-//I18N: Section in arena tracks selection screen
-_("Arenas");
-
-//I18N: ./data/gui/arenas.stkgui
-//I18N: track group
-_("Standard");
-
-//I18N: ./data/gui/arenas.stkgui
-//I18N: track group
-_("Add-Ons");
-
-//I18N: ./data/gui/arenas.stkgui
-//I18N: track group
-_("All");
-
-//I18N: ./data/grandprix/4_atworldsend.grandprix
-_("At World's End")
-
-//I18N: ./data/grandprix/2_offthebeatentrack.grandprix
-_("Off the beaten track")
-
-//I18N: ./data/grandprix/1_penguinplayground.grandprix
-_("Penguin Playground")
-
-//I18N: ./data/grandprix/3_tothemoonandback.grandprix
-_("To the moon and back")
-
-//I18N: ./data/karts/beagle/kart.xml
-_("Beagle")
-
-//I18N: ./data/karts/hexley/kart.xml
-_("Hexley")
-
-//I18N: ./data/karts/nolok/kart.xml
-_("Nolok")
-
-//I18N: ./data/karts/beastie/kart.xml
-_("Beastie")
-
-//I18N: ./data/karts/puffy/kart.xml
-_("Puffy")
-
-//I18N: ./data/karts/mozilla/kart.xml
-_("Mozilla")
-
-//I18N: ./data/karts/gnu/kart.xml
-_("Gnu")
-
-//I18N: ./data/karts/konqi/kart.xml
-_("Konqi")
-
-//I18N: ./data/karts/adiumy/kart.xml
-_("Adiumy")
-
-//I18N: ./data/karts/pidgin/kart.xml
-_("Pidgin")
-
-//I18N: ./data/karts/emule/kart.xml
-_("Emule")
-
-//I18N: ./data/karts/wilber/kart.xml
-_("Wilber")
-
-//I18N: ./data/karts/tux/kart.xml
-_("Tux")
-
-//I18N: ./data/karts/elephpant/kart.xml
-_("Elephpant")
-
-//I18N: ./data/karts/suzanne/kart.xml
-_("Suzanne")
-
diff --git a/data/shaders/Makefile.am b/data/shaders/Makefile.am
index fe814b43e..9a6da0594 100644
--- a/data/shaders/Makefile.am
+++ b/data/shaders/Makefile.am
@@ -3,5 +3,5 @@
pkgdatadir = $(datadir)/games/@PACKAGE@/data/shaders
dist_pkgdata_DATA = $(shell find $(srcdir) -name "*.frag") \
- $(shell find $(srcdir) -name "*.vert")
+ $(shell find $(srcdir) -name "*.vert")
diff --git a/data/shaders/bubble.vert b/data/shaders/bubble.vert
index f2dfdbbcf..8a8b470e5 100644
--- a/data/shaders/bubble.vert
+++ b/data/shaders/bubble.vert
@@ -7,7 +7,7 @@ void main()
{
gl_TexCoord[0] = gl_MultiTexCoord0;
gl_Position = ftransform();
-
+
float delta_x = cos(time*3.0) * sin( 4.0 * gl_TexCoord[0].st.s * 6.28318531 );
float delta_y = cos(time*2.0) * sin( 3.0 * gl_TexCoord[0].st.t * 6.28318531 );
diff --git a/data/shaders/grass.frag b/data/shaders/grass.frag
index 42390956e..225bdb5c2 100644
--- a/data/shaders/grass.frag
+++ b/data/shaders/grass.frag
@@ -9,7 +9,7 @@ void main()
{
vec4 color = texture2D(tex, gl_TexCoord[0].st);
vec4 solidColor = vec4(color.r, color.g, color.b, 1);
-
+
if (fog == 1)
{
if (coord.z > fogTo)
diff --git a/data/shaders/motion_blur.frag b/data/shaders/motion_blur.frag
index 0bcbff4be..e9e685f92 100644
--- a/data/shaders/motion_blur.frag
+++ b/data/shaders/motion_blur.frag
@@ -15,7 +15,7 @@ uniform vec2 center;
// The direction to which the blurring aims at
uniform vec2 direction;
-// Radius of mask around the character in which no blurring happens
+// Radius of mask around the character in which no blurring happens
// so that the kart doesn't get blurred.
uniform float mask_radius;
@@ -28,10 +28,10 @@ uniform float max_tex_height;
void main()
{
vec2 texcoords = gl_TexCoord[0].st;
-
+
// Sample the color buffer
vec3 color = texture2D(color_buffer, texcoords).rgb;
-
+
// If no motion blur is needed, don't do any of the blur computation,
// just return the color from the texture.
if(boost_amount==0.0)
@@ -39,25 +39,25 @@ void main()
gl_FragColor = vec4(color, 1.0);
return;
}
-
+
// Compute the blur direction.
// IMPORTANT: we don't normalize it so that it avoids a glitch around 'center',
// plus it naturally scales the motion blur in a cool way :)
vec2 blur_dir = direction - texcoords;
-
+
// Compute the blurring factor:
// - apply the mask, i.e. no blurring in a small circle around the kart
float blur_factor = max(0.0, length(texcoords - center) - mask_radius);
-
+
// - avoid blurring the top of the screen
blur_factor *= (max_tex_height - texcoords.t);
-
+
// - apply the boost amount
blur_factor *= boost_amount;
-
+
// Scale the blur direction
blur_dir *= blur_factor;
-
+
// Compute the blur
vec2 inc_vec = blur_dir / vec2(NB_SAMPLES);
vec2 blur_texcoords = texcoords + inc_vec;
diff --git a/data/shaders/normalmap.frag b/data/shaders/normalmap.frag
index 07e95338e..dfc10424b 100644
--- a/data/shaders/normalmap.frag
+++ b/data/shaders/normalmap.frag
@@ -1,11 +1,11 @@
// Shader based on work by Fabien Sanglard
// Released under the terms of CC-BY 3.0
-uniform sampler2D BumpTex; //The bump-map
+uniform sampler2D BumpTex; //The bump-map
uniform sampler2D DecalTex; //The texture
uniform sampler2D LightMapTex;
int HasLightMap;
-
+
// New bumpmapping
varying vec3 lightVec;
varying vec3 halfVec;
@@ -17,11 +17,11 @@ void main()
// lookup normal from normal map, move from [0,1] to [-1, 1] range, normalize
vec3 normal = 2.0 * texture2D (BumpTex, gl_TexCoord[0].st).rgb - 1.0;
normal = normalize (normal);
-
+
// compute diffuse lighting
float lamberFactor = max (dot (lightVec, normal), 0.0) ;
vec4 diffuseMaterial;
-
+
diffuseMaterial = texture2D (DecalTex, gl_TexCoord[0].st);
if (HasLightMap < 1)
@@ -33,4 +33,4 @@ void main()
{
gl_FragColor = diffuseMaterial * (0.5 + lamberFactor*0.5) * texture2D(LightMapTex, gl_TexCoord[0].st);
}
-}
+}
diff --git a/data/shaders/normalmap.vert b/data/shaders/normalmap.vert
index 1facef702..118917190 100644
--- a/data/shaders/normalmap.vert
+++ b/data/shaders/normalmap.vert
@@ -11,34 +11,34 @@ void main()
{
gl_TexCoord[0] = gl_MultiTexCoord0;
-
+
// Building the matrix Eye Space -> Tangent Space
vec3 n = normalize (gl_NormalMatrix * gl_Normal);
vec3 t = normalize (gl_NormalMatrix * gl_MultiTexCoord1.xyz); // tangent
vec3 b = cross (n, t);
-
+
vec3 vertexPosition = vec3(gl_ModelViewMatrix * gl_Vertex);
-
+
// transform light and half angle vectors by tangent basis
vec3 v;
v.x = dot (lightdir, t);
v.y = dot (lightdir, b);
v.z = dot (lightdir, n);
lightVec = normalize (v);
-
-
+
+
v.x = dot (vertexPosition, t);
v.y = dot (vertexPosition, b);
v.z = dot (vertexPosition, n);
eyeVec = normalize (v);
-
-
+
+
vertexPosition = normalize(vertexPosition);
-
+
// Normalize the halfVector to pass it to the fragment shader
// No need to divide by two, the result is normalized anyway.
- // vec3 halfVector = normalize((vertexPosition + lightDir) / 2.0);
+ // vec3 halfVector = normalize((vertexPosition + lightDir) / 2.0);
vec3 halfVector = normalize(vertexPosition + lightdir);
v.x = dot (halfVector, t);
v.y = dot (halfVector, b);
@@ -46,9 +46,9 @@ void main()
// No need to normalize, t,b,n and halfVector are normal vectors.
//normalize (v);
- halfVec = v ;
-
-
+ halfVec = v ;
+
+
gl_Position = ftransform();
}
\ No newline at end of file
diff --git a/data/shaders/skinning.vert b/data/shaders/skinning.vert
index a61ff4b89..07f53e2bd 100644
--- a/data/shaders/skinning.vert
+++ b/data/shaders/skinning.vert
@@ -5,7 +5,7 @@
uniform mat4 JointTransform[MAX_JOINT_NUM];
-void main()
+void main()
{
int index;
vec4 ecPos;
@@ -15,10 +15,10 @@ void main()
float dist;
mat4 ModelTransform = gl_ModelViewProjectionMatrix;
-
+
index = int(gl_Color.r * 255.99);
mat4 vertTran = JointTransform[index - 1];
-
+
index = int(gl_Color.g * 255.99);
if(index > 0)
vertTran += JointTransform[index - 1];
@@ -26,15 +26,16 @@ void main()
index = int(gl_Color.b * 255.99);
if(index > 0)
vertTran += JointTransform[index - 1];
-
+
index = int(gl_Color.a * 255.99);
if(index > 0)
vertTran += JointTransform[index - 1];
-
+
ecPos = gl_ModelViewMatrix * vertTran * gl_Vertex;
-
- normal = normalize(gl_NormalMatrix * mat3(vertTran) * gl_Normal);
-
+
+ normal = (vertTran * vec4(gl_Normal, 0.0)).xyz;
+ normal = normalize(gl_NormalMatrix * normal);
+
gl_FrontColor = vec4(0,0,0,0);
for(int i = 0;i < MAX_LIGHT_NUM;i++)
{
@@ -45,15 +46,15 @@ void main()
gl_FrontColor += gl_LightSource[i].diffuse * n_dot_l;
}
gl_FrontColor = clamp(gl_FrontColor,0.3,1.0);
-
+
ModelTransform *= vertTran;
-
+
gl_Position = ModelTransform * gl_Vertex;
gl_TexCoord[0] = gl_MultiTexCoord0;
gl_TexCoord[1] = gl_MultiTexCoord1;
-
- /*
+
+ /*
// Reflections.
vec3 r = reflect( ecPos.xyz , normal );
float m = 2.0 * sqrt( r.x*r.x + r.y*r.y + (r.z+1.0)*(r.z+1.0) );
diff --git a/data/shaders/spheremap.frag b/data/shaders/spheremap.frag
index dbf6cfc1e..c110cfadf 100644
--- a/data/shaders/spheremap.frag
+++ b/data/shaders/spheremap.frag
@@ -10,26 +10,26 @@ varying vec3 lightVec;
void main()
{
vec3 forward = vec3(0.0, 0.0, 1.0);
-
+
// get the angle between the forward vector and the horizontal portion of the normal
vec3 normal_x = normalize(vec3(normal.x, 0.0, normal.z));
float sin_theta_x = length(cross( forward, normal_x )) * normal.x/abs(normal.x);
-
+
// get the angle between the forward vector and the vertical portion of the normal
vec3 normal_y = normalize(vec3(0.0, normal.y, normal.z));
float sin_theta_y = length(cross( forward, normal_y ))* normal.y/abs(normal.y);
-
+
vec4 detail0 = texture2D(texture, vec2(0.5 + sin_theta_x*0.5, 0.5 + sin_theta_y*0.5));
- gl_FragColor = detail0 * (0.5 + dot(lightdir, normal)) * vertex_color; // 0.5 is the ambient light.
+ gl_FragColor = detail0 * (0.5 + dot(lightdir, normal)) * vertex_color; // 0.5 is the ambient light.
//gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);
-
+
// specular (phong)
vec3 R = normalize(reflect(lightVec, normal));
float specular = max(dot(R,eyeVec),0.0);
-
+
//gl_FragColor = vec4(specular, specular, specular, 1.0);
-
+
if (specular > 0.0)
{
// weak specular
@@ -37,7 +37,7 @@ void main()
specular = specular*specular;
float specular_weak = specular*2.0; //max(specular*1.1, 1.0);
gl_FragColor += vec4(specular_weak, specular_weak, specular_weak, 0.0);
-
+
/*
// strong specular
specular = specular*specular;
diff --git a/data/shaders/spheremap.vert b/data/shaders/spheremap.vert
index 42a337b82..63b4f6825 100644
--- a/data/shaders/spheremap.vert
+++ b/data/shaders/spheremap.vert
@@ -9,19 +9,19 @@ void main()
gl_TexCoord[0] = gl_MultiTexCoord0;
gl_Position = ftransform();
vertex_color = gl_Color;
-
+
//vec3 normal3 = normalize(gl_Normal);
//vec4 normal4 = vec4(normal3.x, normal3.y, normal3.z, 0.0)*gl_ModelViewMatrix;
//normal = normal4.xyz;
-
- eyeVec = normalize(-gl_Position).xyz; // we are in Eye Coordinates, so EyePos is (0,0,0)
+
+ eyeVec = normalize(-gl_Position).xyz; // we are in Eye Coordinates, so EyePos is (0,0,0)
normal = normalize(gl_NormalMatrix*gl_Normal);
-
+
// Building the matrix Eye Space -> Tangent Space
// gl_MultiTexCoord1.xyz
vec3 t = normalize (gl_NormalMatrix * vec3(0.0, 0.0, 1.0)); // tangent
vec3 b = cross (normal, t);
-
+
// transform light and half angle vectors by tangent basis
vec3 v;
v.x = dot(lightdir, t);
diff --git a/data/shaders/splatting.frag b/data/shaders/splatting.frag
index 79ced8131..0c43a5d15 100644
--- a/data/shaders/splatting.frag
+++ b/data/shaders/splatting.frag
@@ -18,7 +18,7 @@ void main()
vec4 detail2 = texture2D(tex_detail2, gl_TexCoord[0].st);
vec4 detail3 = texture2D(tex_detail3, gl_TexCoord[0].st);
vec4 detail4 = texture2D(tex_detail4, gl_TexCoord[0].st);
-
+
gl_FragColor = (splatting.r * detail0 +
splatting.g * detail1 +
splatting.b * detail2 +
diff --git a/data/shaders/splatting.vert b/data/shaders/splatting.vert
index 700800584..47a007bda 100644
--- a/data/shaders/splatting.vert
+++ b/data/shaders/splatting.vert
@@ -9,7 +9,7 @@ void main()
gl_TexCoord[1] = gl_MultiTexCoord1;
gl_Position = ftransform();
vertex_color = gl_Color;
-
+
//normal = normalize(gl_NormalMatrix * gl_Normal);
normal = normalize(gl_Normal);
lightdir2 = normalize(lightdir);
diff --git a/data/shaders/water.frag b/data/shaders/water.frag
index 01745de65..70899ea2e 100644
--- a/data/shaders/water.frag
+++ b/data/shaders/water.frag
@@ -17,13 +17,13 @@ void main()
// lookup normal from normal map, move from [0,1] to [-1, 1] range, normalize
vec3 normal = 2.0 * texture2D (BumpTex1, gl_TexCoord[0].st + delta1).rgb - 1.0;
vec3 normal2 = 2.0 * texture2D (BumpTex2, gl_TexCoord[0].st + delta2).rgb - 1.0;
-
+
// scale normals
normal.y = 4.0*normal.y;
normal2.y = 4.0*normal2.y;
-
+
normal = (normalize(normal) + normalize(normal2))/2.0;
-
+
// compute diffuse lighting
float lamberFactor = max (dot (lightVec, normal), 0.0);
vec4 diffuseMaterial;
@@ -38,11 +38,11 @@ void main()
//}
gl_FragColor = diffuseMaterial * (0.3 + lamberFactor*0.7);
-
+
// specular (phong)
vec3 R = normalize(reflect(lightVec, normal));
float specular = max(dot(R,eyeVec),0.0);
-
+
if (specular > 0.0)
{
// weak specular
@@ -50,7 +50,7 @@ void main()
specular = specular*specular;
float specular_weak = specular*0.05;
gl_FragColor += vec4(specular_weak, specular_weak, specular_weak, 0.0);
-
+
// strong specular
specular = specular*specular;
float specular_strong = specular*0.3;
diff --git a/data/shaders/water.vert b/data/shaders/water.vert
index bcf5ba2d9..9b88f362d 100644
--- a/data/shaders/water.vert
+++ b/data/shaders/water.vert
@@ -11,15 +11,15 @@ void main()
{
gl_TexCoord[0] = gl_MultiTexCoord0;
-
+
// Building the matrix Eye Space -> Tangent Space
vec3 n = normalize (gl_NormalMatrix * gl_Normal);
// gl_MultiTexCoord1.xyz
vec3 t = normalize (gl_NormalMatrix * vec3(1.0, 0.0, 0.0)); // tangent
vec3 b = cross (n, t);
-
+
vec3 vertexPosition = vec3(gl_ModelViewMatrix * gl_Vertex);
-
+
// transform light and half angle vectors by tangent basis
vec3 v;
v.x = dot (lightdir, t);
@@ -28,13 +28,13 @@ void main()
lightVec = normalize (v);
vertexPosition = normalize(vertexPosition);
-
- eyeVec = normalize(-vertexPosition); // we are in Eye Coordinates, so EyePos is (0,0,0)
+
+ eyeVec = normalize(-vertexPosition); // we are in Eye Coordinates, so EyePos is (0,0,0)
// Normalize the halfVector to pass it to the fragment shader
// No need to divide by two, the result is normalized anyway.
- // vec3 halfVector = normalize((vertexPosition + lightDir) / 2.0);
+ // vec3 halfVector = normalize((vertexPosition + lightDir) / 2.0);
vec3 halfVector = normalize(vertexPosition + lightdir);
v.x = dot (halfVector, t);
v.y = dot (halfVector, b);
@@ -42,7 +42,7 @@ void main()
// No need to normalize, t,b,n and halfVector are normal vectors.
//normalize (v);
- halfVec = v ;
-
+ halfVec = v ;
+
gl_Position = ftransform();
}
\ No newline at end of file
diff --git a/data/shaders/water_fog.frag b/data/shaders/water_fog.frag
index 0e17f4717..63a8f5a70 100644
--- a/data/shaders/water_fog.frag
+++ b/data/shaders/water_fog.frag
@@ -22,13 +22,13 @@ void main()
// lookup normal from normal map, move from [0,1] to [-1, 1] range, normalize
vec3 normal = 2.0 * texture2D (BumpTex1, gl_TexCoord[0].st + delta1).rgb - 1.0;
vec3 normal2 = 2.0 * texture2D (BumpTex2, gl_TexCoord[0].st + delta2).rgb - 1.0;
-
+
// scale normals
normal.y = 4.0*normal.y;
normal2.y = 4.0*normal2.y;
-
+
normal = (normalize(normal) + normalize(normal2))/2.0;
-
+
// compute diffuse lighting
float lamberFactor = max (dot (lightVec, normal), 0.0);
vec4 diffuseMaterial;
@@ -43,11 +43,11 @@ void main()
//}
gl_FragColor = diffuseMaterial * (0.3 + lamberFactor*0.7);
-
+
// specular (phong)
vec3 R = normalize(reflect(lightVec, normal));
float specular = max(dot(R,eyeVec),0.0);
-
+
if (specular > 0.0)
{
// weak specular
@@ -55,13 +55,13 @@ void main()
specular = specular*specular;
float specular_weak = specular*0.05;
gl_FragColor += vec4(specular_weak, specular_weak, specular_weak, 0.0);
-
+
// strong specular
specular = specular*specular;
float specular_strong = specular*0.3;
gl_FragColor += vec4(specular_strong, specular_strong, specular_strong, 0.0);
}
-
+
if (coord.z > fogTo)
{
gl_FragColor = fogColor;
diff --git a/data/shaders/water_fog.vert b/data/shaders/water_fog.vert
index 35d7db34e..4419ca428 100644
--- a/data/shaders/water_fog.vert
+++ b/data/shaders/water_fog.vert
@@ -11,15 +11,15 @@ void main()
{
gl_TexCoord[0] = gl_MultiTexCoord0;
-
+
// Building the matrix Eye Space -> Tangent Space
vec3 n = normalize (gl_NormalMatrix * gl_Normal);
// gl_MultiTexCoord1.xyz
vec3 t = normalize (gl_NormalMatrix * vec3(1.0, 0.0, 0.0)); // tangent
vec3 b = cross (n, t);
-
+
vec3 vertexPosition = vec3(gl_ModelViewMatrix * gl_Vertex);
-
+
// transform light and half angle vectors by tangent basis
vec3 v;
v.x = dot (lightdir, t);
@@ -28,13 +28,13 @@ void main()
lightVec = normalize (v);
vertexPosition = normalize(vertexPosition);
-
- eyeVec = normalize(-vertexPosition); // we are in Eye Coordinates, so EyePos is (0,0,0)
+
+ eyeVec = normalize(-vertexPosition); // we are in Eye Coordinates, so EyePos is (0,0,0)
// Normalize the halfVector to pass it to the fragment shader
// No need to divide by two, the result is normalized anyway.
- // vec3 halfVector = normalize((vertexPosition + lightDir) / 2.0);
+ // vec3 halfVector = normalize((vertexPosition + lightDir) / 2.0);
vec3 halfVector = normalize(vertexPosition + lightdir);
v.x = dot (halfVector, t);
v.y = dot (halfVector, b);
@@ -42,8 +42,8 @@ void main()
// No need to normalize, t,b,n and halfVector are normal vectors.
//normalize (v);
- halfVec = v ;
-
+ halfVec = v ;
+
gl_Position = ftransform();
coord = gl_Position;
}
diff --git a/data/stk_config.xml b/data/stk_config.xml
index 84e822da1..546d30252 100644
--- a/data/stk_config.xml
+++ b/data/stk_config.xml
@@ -114,8 +114,8 @@
nolok-bubble-gum, easter egg -->
-
-
+
+
@@ -179,6 +179,14 @@
+
+
+
+
+
delta is 0, which is considered to be not skidding.
const Skidding *skid = m_kart.getSkidding();
bool is_skidding = raycast_right.m_isInContact &&
- ( force_skid_marks ||
- ( (skid->getSkidState()==Skidding::SKID_ACCUMULATE_LEFT ||
- skid->getSkidState()==Skidding::SKID_ACCUMULATE_RIGHT )
- && m_kart.getSkidding()->getGraphicalJumpOffset()<=0
- && delta.length2()>=0.0001f ) );
+ ( force_skid_marks ||
+ ( (skid->getSkidState()==Skidding::SKID_ACCUMULATE_LEFT||
+ skid->getSkidState()==Skidding::SKID_ACCUMULATE_RIGHT )
+ && skid->getGraphicalJumpOffset()<=0
+ && delta.length2()>=0.0001f ) );
if(m_skid_marking)
{
diff --git a/src/guiengine/abstract_top_level_container.cpp b/src/guiengine/abstract_top_level_container.cpp
index db01c9ffc..1210ace7d 100644
--- a/src/guiengine/abstract_top_level_container.cpp
+++ b/src/guiengine/abstract_top_level_container.cpp
@@ -15,7 +15,6 @@
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#include "graphics/irr_driver.hpp"
#include "guiengine/abstract_top_level_container.hpp"
#include "guiengine/engine.hpp"
#include "guiengine/scalable_font.hpp"
diff --git a/src/guiengine/screen_loader.cpp b/src/guiengine/screen_loader.cpp
index e26c81a47..8a1be9fcb 100644
--- a/src/guiengine/screen_loader.cpp
+++ b/src/guiengine/screen_loader.cpp
@@ -175,6 +175,10 @@ void Screen::parseScreenFileDiv(irr::io::IXMLReader* xml, PtrVector& app
{
append_to.push_back(new TextBoxWidget());
}
+ else if (wcscmp(L"ratingbar", xml->getNodeName()) == 0)
+ {
+ append_to.push_back(new RatingBarWidget());
+ }
else
{
std::cerr << "/!\\ Warning /!\\ : unknown tag found in STK GUI file : '"
diff --git a/src/guiengine/skin.cpp b/src/guiengine/skin.cpp
index 85ea88133..388db1c8d 100644
--- a/src/guiengine/skin.cpp
+++ b/src/guiengine/skin.cpp
@@ -805,6 +805,60 @@ void Skin::drawProgress(Widget* w, const core::recti &rect,
}
} // drawProgress
+// ----------------------------------------------------------------------------
+/**
+ * @param focused whether this element is focus by the master player (focus
+ * for other players is not supported)
+ */
+void Skin::drawRatingBar(Widget *w, const core::recti &rect,
+ const bool pressed, const bool focused)
+{
+ static const int step_number = 3; // Harcoded number of step.
+
+ const ITexture *texture = SkinConfig::m_render_params["rating::neutral"].getImage();
+ const int texture_w = texture->getSize().Width / 4;
+ const int texture_h = texture->getSize().Height;
+ const float aspect_ratio = 1.0f;
+
+ RatingBarWidget *ratingBar = (RatingBarWidget*)w;
+ const int star_number = ratingBar->getStarNumber();
+
+ int star_h = rect.getHeight();
+ int star_w = (int)(aspect_ratio * star_h);
+
+ if (rect.getWidth() < star_w * star_number)
+ {
+ const float scale_factor = rect.getWidth() / (float)(star_w * star_number);
+ star_w = (int)(star_w * scale_factor);
+ star_h = (int)(star_h * scale_factor);
+ }
+
+ // center horizontally and vertically
+ const int x_from = rect.UpperLeftCorner.X + (rect.getWidth() - star_w) / 2;
+ const int y_from = rect.UpperLeftCorner.Y + (rect.getHeight() - star_h) / 2;
+
+ for (int i = 0; i < star_number; i++)
+ {
+ core::recti star_rect = rect;
+
+ star_rect.UpperLeftCorner.X = x_from + i * star_w;
+ star_rect.UpperLeftCorner.Y = y_from;
+ star_rect.LowerRightCorner.X = x_from + (i + 1) * star_w;
+ star_rect.LowerRightCorner.Y = y_from + star_h;
+
+ int step = ratingBar->getStepOfStar(i, step_number);
+
+ const core::recti source_area(texture_w * step, 0,
+ texture_w * (step + 1), texture_h);
+
+ GUIEngine::getDriver()->draw2DImage(texture,
+ star_rect, source_area,
+ 0 /* no clipping */, 0,
+ true /* alpha */);
+ }
+
+} // drawRatingBar
+
// ----------------------------------------------------------------------------
SColor Skin::getColor(const std::string &name)
{
@@ -1810,6 +1864,10 @@ void Skin::process3DPane(IGUIElement *element, const core::recti &rect,
{
drawCheckBox(rect, widget, focused);
}
+ else if(type == WTYPE_RATINGBAR)
+ {
+ drawRatingBar(widget, rect, pressed, focused);
+ }
if (ID_DEBUG && id != -1 && Widget::isFocusableId(id))
@@ -1954,70 +2012,41 @@ void Skin::draw3DSunkenPane (IGUIElement *element, video::SColor bgcolor,
if (element->getType()==gui::EGUIET_EDIT_BOX)
{
- SColor& color = SkinConfig::m_colors["text_field::neutral"];
- SColor& colorFocus = SkinConfig::m_colors["text_field::focused"];
+ SColor& bg_color = SkinConfig::m_colors["text_field::background"];
+ SColor& bg_color_focused = SkinConfig::m_colors["text_field::background_focused"];
+ SColor& border_color = SkinConfig::m_colors["text_field::neutral"];
+ SColor& border_color_focus = SkinConfig::m_colors["text_field::focused"];
- if (focused)
+ core::recti borderArea = rect;
+ borderArea.UpperLeftCorner -= position2d< s32 >( 2, 2 );
+ borderArea.LowerRightCorner += position2d< s32 >( 2, 2 );
+
+ // if within an appearing dialog, grow
+ if (m_dialog && m_dialog_size < 1.0f && widget->m_parent != NULL &&
+ widget->m_parent->getType() == gui::EGUIET_WINDOW)
{
- core::recti borderArea = rect;
- borderArea.UpperLeftCorner -= position2d< s32 >( 2, 2 );
- borderArea.LowerRightCorner += position2d< s32 >( 2, 2 );
+ core::position2d center(irr_driver->getFrameSize()/2);
+ const float texture_size = sin(m_dialog_size*M_PI*0.5f);
- // if within an appearing dialog, grow
- if (m_dialog && m_dialog_size < 1.0f && widget->m_parent != NULL &&
- widget->m_parent->getType() == gui::EGUIET_WINDOW)
- {
- core::position2d center(irr_driver->getFrameSize()/2);
- const float texture_size = sin(m_dialog_size*M_PI*0.5f);
-
- borderArea.UpperLeftCorner.X =
- center.X + (int)(((int)rect.UpperLeftCorner.X
- - (int)center.X)*texture_size);
- borderArea.UpperLeftCorner.Y =
- center.Y + (int)(((int)rect.UpperLeftCorner.Y
- - (int)center.Y)*texture_size);
- borderArea.LowerRightCorner.X =
- center.X + (int)(((int)rect.LowerRightCorner.X
- - (int)center.X)*texture_size);
- borderArea.LowerRightCorner.Y =
- center.Y + (int)(((int)rect.LowerRightCorner.Y
- - (int)center.Y)*texture_size);
- }
- GUIEngine::getDriver()->draw2DRectangle( colorFocus, borderArea );
-
- core::recti innerArea = borderArea;
- innerArea.UpperLeftCorner += position2d< s32 >( 2, 2 );
- innerArea.LowerRightCorner -= position2d< s32 >( 2, 2 );
- GUIEngine::getDriver()->draw2DRectangle( color, innerArea );
- }
- else
- {
- // if within an appearing dialog, grow
- if (m_dialog && m_dialog_size < 1.0f && widget->m_parent != NULL &&
- widget->m_parent->getType() == gui::EGUIET_WINDOW)
- {
- core::position2d center(irr_driver->getFrameSize()/2);
- const float texture_size = sin(m_dialog_size*M_PI*0.5f);
- core::recti sizedRect;
- sizedRect.UpperLeftCorner.X =
- center.X + (int)(((int)rect.UpperLeftCorner.X
- - (int)center.X)*texture_size);
- sizedRect.UpperLeftCorner.Y =
- center.Y + (int)(((int)rect.UpperLeftCorner.Y
- - (int)center.Y)*texture_size);
- sizedRect.LowerRightCorner.X =
- center.X + (int)(((int)rect.LowerRightCorner.X
- - (int)center.X)*texture_size);
- sizedRect.LowerRightCorner.Y =
- center.Y + (int)(((int)rect.LowerRightCorner.Y
- - (int)center.Y)*texture_size);
- GUIEngine::getDriver()->draw2DRectangle( color, sizedRect );
- }
- else
- {
- GUIEngine::getDriver()->draw2DRectangle( color, rect );
- }
+ borderArea.UpperLeftCorner.X =
+ center.X + (int)(((int)rect.UpperLeftCorner.X
+ - (int)center.X)*texture_size);
+ borderArea.UpperLeftCorner.Y =
+ center.Y + (int)(((int)rect.UpperLeftCorner.Y
+ - (int)center.Y)*texture_size);
+ borderArea.LowerRightCorner.X =
+ center.X + (int)(((int)rect.LowerRightCorner.X
+ - (int)center.X)*texture_size);
+ borderArea.LowerRightCorner.Y =
+ center.Y + (int)(((int)rect.LowerRightCorner.Y
+ - (int)center.Y)*texture_size);
}
+ GUIEngine::getDriver()->draw2DRectangle(focused ? border_color_focus : border_color, borderArea);
+
+ core::recti innerArea = borderArea;
+ innerArea.UpperLeftCorner += position2d< s32 >( 2, 2 );
+ innerArea.LowerRightCorner -= position2d< s32 >( 2, 2 );
+ GUIEngine::getDriver()->draw2DRectangle(focused ? bg_color_focused : bg_color, innerArea);
return;
}
else if (type == WTYPE_LIST)
diff --git a/src/guiengine/skin.hpp b/src/guiengine/skin.hpp
index 969399c67..51657d660 100644
--- a/src/guiengine/skin.hpp
+++ b/src/guiengine/skin.hpp
@@ -293,6 +293,8 @@ namespace GUIEngine
const bool pressed, const bool focused);
void drawProgress(Widget* w, const core::rect< s32 > &rect,
const bool pressed, const bool focused);
+ void drawRatingBar(Widget* w, const core::rect< s32 > &rect,
+ const bool pressed, const bool focused);
void drawRibbon(const core::rect< s32 > &rect, Widget* widget,
const bool pressed, bool focused);
void drawRibbonChild(const core::rect< s32 > &rect, Widget* widget,
diff --git a/src/guiengine/widget.cpp b/src/guiengine/widget.cpp
index 6842e573c..33d740028 100644
--- a/src/guiengine/widget.cpp
+++ b/src/guiengine/widget.cpp
@@ -28,7 +28,6 @@ using namespace video;
using namespace io;
using namespace gui;
-#include "graphics/irr_driver.hpp"
#include "guiengine/engine.hpp"
#include "guiengine/scalable_font.hpp"
#include "guiengine/screen.hpp"
diff --git a/src/guiengine/widget.hpp b/src/guiengine/widget.hpp
index 3cbaaf88e..b915f1913 100644
--- a/src/guiengine/widget.hpp
+++ b/src/guiengine/widget.hpp
@@ -52,7 +52,8 @@ namespace GUIEngine
WTYPE_MODEL_VIEW,
WTYPE_LIST,
WTYPE_TEXTBOX,
- WTYPE_PROGRESS
+ WTYPE_PROGRESS,
+ WTYPE_RATINGBAR
};
enum BadgeType
diff --git a/src/guiengine/widgets.hpp b/src/guiengine/widgets.hpp
index 360309081..a2da6c9cc 100644
--- a/src/guiengine/widgets.hpp
+++ b/src/guiengine/widgets.hpp
@@ -13,3 +13,4 @@
#include "guiengine/widgets/text_box_widget.hpp"
#include "guiengine/widgets/label_widget.hpp"
#include "guiengine/widgets/check_box_widget.hpp"
+#include "guiengine/widgets/rating_bar_widget.hpp"
diff --git a/src/guiengine/widgets/dynamic_ribbon_widget.cpp b/src/guiengine/widgets/dynamic_ribbon_widget.cpp
index 052f91cc0..617edd8e3 100644
--- a/src/guiengine/widgets/dynamic_ribbon_widget.cpp
+++ b/src/guiengine/widgets/dynamic_ribbon_widget.cpp
@@ -15,7 +15,6 @@
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#include "graphics/irr_driver.hpp"
#include "guiengine/engine.hpp"
#include "guiengine/widgets/dynamic_ribbon_widget.hpp"
#include "io/file_manager.hpp"
diff --git a/src/guiengine/widgets/list_widget.cpp b/src/guiengine/widgets/list_widget.cpp
index 08c34d1c6..19c9f2094 100644
--- a/src/guiengine/widgets/list_widget.cpp
+++ b/src/guiengine/widgets/list_widget.cpp
@@ -15,7 +15,6 @@
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#include "graphics/irr_driver.hpp"
#include "guiengine/CGUISpriteBank.h"
#include "guiengine/engine.hpp"
#include "guiengine/widgets/list_widget.hpp"
diff --git a/src/guiengine/widgets/model_view_widget.cpp b/src/guiengine/widgets/model_view_widget.cpp
index 96a78b1e7..555a543ad 100644
--- a/src/guiengine/widgets/model_view_widget.cpp
+++ b/src/guiengine/widgets/model_view_widget.cpp
@@ -15,7 +15,6 @@
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#include "graphics/irr_driver.hpp"
#include "guiengine/engine.hpp"
#include "guiengine/widgets/model_view_widget.hpp"
using namespace GUIEngine;
diff --git a/src/guiengine/widgets/rating_bar_widget.cpp b/src/guiengine/widgets/rating_bar_widget.cpp
new file mode 100644
index 000000000..7ee7c1188
--- /dev/null
+++ b/src/guiengine/widgets/rating_bar_widget.cpp
@@ -0,0 +1,85 @@
+// SuperTuxKart - a fun racing game with go-kart
+// Copyright (C) 2009 Marianne Gagnon
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 3
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+#include "guiengine/engine.hpp"
+#include "guiengine/widgets/rating_bar_widget.hpp"
+#include "utils/string_utils.hpp"
+#include
+
+#include
+#include
+#include
+
+using namespace GUIEngine;
+using namespace irr::core;
+using namespace irr;
+
+// -----------------------------------------------------------------------------
+RatingBarWidget::RatingBarWidget() : Widget(WTYPE_RATINGBAR)
+{
+ m_rating = 0;
+ m_star_number = 0;
+}
+
+// -----------------------------------------------------------------------------
+void RatingBarWidget::add()
+{
+ rect widget_size = rect(m_x, m_y, m_x + m_w, m_y + m_h);
+ m_element = GUIEngine::getGUIEnv()->addButton(widget_size, m_parent, getNewNoFocusID(), NULL, L"");
+
+ m_id = m_element->getID();
+ m_element->setTabStop(false);
+ m_element->setTabGroup(false);
+}
+
+// -----------------------------------------------------------------------------
+/** Get the current step of the star
+ *
+ * \param index The index of the star.
+ * \param max_step The number of different steps that a star can display. Two
+ * step are obligatory: full and empty.
+ * \return The current step of the star.
+ */
+int RatingBarWidget::getStepOfStar(int index, int max_step)
+{
+ assert(index >= 0 && index < m_star_number); // Index must be between 0 and m_star_number - 1.
+ assert(max_step >= 2); // The maximun number of step must be superior or equals to 2.
+
+ if (m_rating < index)
+ {
+ return 0;
+ }
+ else if (m_rating > index + 1)
+ {
+ return max_step - 1;
+ }
+ else
+ {
+ float step_size = 1 / (float)(max_step - 1);
+
+ for (int i = 0; i < max_step; i++)
+ {
+ if (m_rating > index + step_size * (i - 0.5)
+ && m_rating < index + step_size * (i + 0.5))
+ return i;
+ }
+ }
+
+ return 0;
+ // TODO: Assert or throws a exception, what type?
+} // getStepOfStar
+
diff --git a/src/guiengine/widgets/rating_bar_widget.hpp b/src/guiengine/widgets/rating_bar_widget.hpp
new file mode 100644
index 000000000..d0996d6cc
--- /dev/null
+++ b/src/guiengine/widgets/rating_bar_widget.hpp
@@ -0,0 +1,66 @@
+// SuperTuxKart - a fun racing game with go-kart
+// Copyright (C) 2009 Marianne Gagnon
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 3
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+
+
+#ifndef HEADER_RATING_BAR_HPP
+#define HEADER_RATING_BAR_HPP
+
+#include
+
+#include "guiengine/widget.hpp"
+#include "utils/leak_check.hpp"
+#include "utils/ptr_vector.hpp"
+
+namespace GUIEngine
+{
+ /**
+ * \brief A rating bar widget.
+ * \ingroup widgetsgroup
+ */
+ class RatingBarWidget : public Widget
+ {
+
+ float m_rating;
+ int m_star_number;
+
+ public:
+
+ LEAK_CHECK()
+
+ RatingBarWidget();
+ virtual ~RatingBarWidget() {}
+
+ void add();
+
+ /** Change the rating value of the widget. */
+ void setRating(float rating) { m_rating = rating; };
+
+ /** Get the current value of the widget. */
+ float getRating() {return m_rating; };
+
+ /** Change the number of star of the widget. */
+ void setStarNumber(int star_number) { m_star_number = star_number; };
+
+ /** Get the current number of star of the widget. */
+ int getStarNumber() {return m_star_number; };
+
+ int getStepOfStar(int index, int max_step);
+ };
+}
+
+#endif
diff --git a/src/ide/vc10/supertuxkart.vcxproj b/src/ide/vc10/supertuxkart.vcxproj
index 1636330ec..370e71f51 100644
--- a/src/ide/vc10/supertuxkart.vcxproj
+++ b/src/ide/vc10/supertuxkart.vcxproj
@@ -1,743 +1,745 @@
-
-
-
-
- debug
- Win32
-
-
- debug
- x64
-
-
- Release
- Win32
-
-
- Release
- x64
-
-
-
- {B1BC2764-1A43-4800-A654-788B0D05EDA2}
- supertuxkart
- Win32Proj
-
-
-
- Application
- MultiByte
-
-
- Application
- NotSet
- v100
-
-
- Application
- MultiByte
- true
-
-
- Application
- MultiByte
- true
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <_ProjectFileVersion>10.0.30319.1
- ..\..\../
- ..\..\../
- $(Configuration)\
- $(Configuration)\
- false
- false
- ..\..\../
- ..\..\../
- $(Configuration)\
- $(Configuration)\
- true
- true
- $(ProjectName)_d
- $(ProjectName)_d
- C:\Program Files\Microsoft SDKs\Windows\v7.0A\Include;$(IncludePath)
-
-
-
- true
- ../../../src;../../../lib/bullet/src;../../../lib/enet/include;../../../dependencies/include;../../../lib/irrlicht/include;%(AdditionalIncludeDirectories)
- HAVE_OGGVORBIS;NDEBUG;WIN32;NOMINMAX;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;BT_NO_PROFILE;PACKAGE="supertuxkart";ENABLE_BIDI;ADDONS_MANAGER;_IRR_STATIC_LIB_;%(PreprocessorDefinitions)
- MultiThreadedDLL
-
-
- Level3
- ProgramDatabase
-
-
- opengl32.lib;user32.lib;gdi32.lib;winmm.lib;advapi32.lib;OpenAL32.lib;libogg.lib;libvorbis.lib;libvorbisfile.lib;Irrlicht.lib;ws2_32.lib;fribidi.lib;pthreadVC2.lib;libcurl_imp.lib;%(AdditionalDependencies)
- $(OutDir)/$(ProjectName).exe
- ../../../dependencies/lib;../../../lib/irrlicht/lib/Win32-visualstudio;%(AdditionalLibraryDirectories)
- libcmt.lib;%(IgnoreSpecificDefaultLibraries)
- true
- Windows
- true
- true
- false
-
-
- MachineX86
-
-
-
-
- true
- ../../../src;../../../lib/bullet/src;../../../lib/enet/include;../../../dependencies/include;../../../lib/irrlicht/include;%(AdditionalIncludeDirectories)
- HAVE_OGGVORBIS;NDEBUG;WIN32;NOMINMAX;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;BT_NO_PROFILE;PACKAGE="supertuxkart";ENABLE_BIDI;WIN64;_IRR_STATIC_LIB_;%(PreprocessorDefinitions)
- MultiThreadedDLL
- NotUsing
- Level3
- ProgramDatabase
- StreamingSIMDExtensions2
- true
-
-
- opengl32.lib;user32.lib;gdi32.lib;winmm.lib;advapi32.lib;OpenAL32.lib;libogg.lib;libvorbis.lib;libvorbisfile.lib;Irrlicht.lib;ws2_32.lib;libfribidi.lib;pthreadVC2.lib;libcurl.lib;%(AdditionalDependencies)
- $(OutDir)/$(ProjectName).exe
- ../../../lib/irrlicht/lib/Win64-visualStudio;../../../dependencies/lib;%(AdditionalLibraryDirectories)
- libcmt.lib;%(IgnoreSpecificDefaultLibraries)
- true
- Windows
- true
- true
- false
-
-
-
-
-
-
- Disabled
- false
- ../../../src;../../../lib/bullet/src;../../../lib/enet/include;../../../dependencies/include;../../../lib/irrlicht/include;%(AdditionalIncludeDirectories)
- BT_NO_PROFILE;HAVE_OGGVORBIS;_DEBUG;WIN32;NOMINMAX;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;DEBUG;PACKAGE="supertuxkart";_CRTDBG_MAP_ALLOC;ENABLE_BIDI;_IRR_STATIC_LIB_;%(PreprocessorDefinitions)
- false
- false
- true
- EnableFastChecks
- MultiThreadedDebugDLL
- false
-
-
- Level3
- EditAndContinue
-
-
- opengl32.lib;user32.lib;gdi32.lib;winmm.lib;advapi32.lib;OpenAL32.lib;libogg.lib;libvorbis.lib;libvorbisfile.lib;Irrlicht.lib;ws2_32.lib;fribidi.lib;pthreadVC2.lib;libcurl_imp.lib;%(AdditionalDependencies)
- $(TargetPath)
- ../../../dependencies/lib;../../../lib/irrlicht/lib/Win32-visualstudio;%(AdditionalLibraryDirectories)
- false
- libcmt.lib;%(IgnoreSpecificDefaultLibraries)
- true
- false
-
-
- false
- Windows
-
-
- false
-
-
- MachineX86
- false
-
-
-
-
- Disabled
- false
- ../../../src;../../../lib/bullet/src;../../../lib/enet/include;../../../dependencies/include;../../../lib/irrlicht/include;%(AdditionalIncludeDirectories)
- BT_NO_PROFILE;HAVE_OGGVORBIS;_DEBUG;WIN32;NOMINMAX;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;DEBUG;PACKAGE="supertuxkart";_CRTDBG_MAP_ALLOC;ENABLE_BIDI;ADDONS_MANAGER;_WIN64;_IRR_STATIC_LIB_;%(PreprocessorDefinitions)
- false
- false
- EnableFastChecks
- MultiThreadedDebugDLL
- false
-
-
- Level3
- ProgramDatabase
- false
- StreamingSIMDExtensions2
-
-
- opengl32.lib;user32.lib;gdi32.lib;winmm.lib;advapi32.lib;OpenAL32.lib;libogg.lib;libvorbis.lib;libvorbisfile.lib;Irrlicht.lib;ws2_32.lib;libfribidi.lib;pthreadVC2.lib;libcurl.lib;%(AdditionalDependencies)
- $(TargetPath)
- ../../../dependencies/lib;../../../lib/irrlicht/lib/Win64-VisualStudio;%(AdditionalLibraryDirectories)
- false
- libcmt.lib;%(IgnoreSpecificDefaultLibraries)
- true
- false
-
-
- false
- Windows
-
-
- false
-
-
- false
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- false
- false
- false
- false
- false
- false
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {e08e042a-6c45-411b-92be-3cc31331019f}
- true
- true
- false
- true
- false
-
-
- {54aa44b9-b07b-49da-8b1a-05bbfe8ad5d4}
- false
-
-
- {b0e92b97-089a-4d5b-bf17-77f1bc5daeef}
- false
-
-
-
-
-
+
+
+
+
+ debug
+ Win32
+
+
+ debug
+ x64
+
+
+ Release
+ Win32
+
+
+ Release
+ x64
+
+
+
+ {B1BC2764-1A43-4800-A654-788B0D05EDA2}
+ supertuxkart
+ Win32Proj
+
+
+
+ Application
+ MultiByte
+
+
+ Application
+ NotSet
+ v100
+
+
+ Application
+ MultiByte
+ true
+
+
+ Application
+ MultiByte
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <_ProjectFileVersion>10.0.30319.1
+ ..\..\../
+ ..\..\../
+ $(Configuration)\
+ $(Configuration)\
+ false
+ false
+ ..\..\../
+ ..\..\../
+ $(Configuration)\
+ $(Configuration)\
+ true
+ true
+ $(ProjectName)_d
+ $(ProjectName)_d
+ C:\Program Files\Microsoft SDKs\Windows\v7.0A\Include;$(IncludePath)
+
+
+
+ true
+ ../../../src;../../../lib/bullet/src;../../../lib/enet/include;../../../dependencies/include;../../../lib/irrlicht/include;%(AdditionalIncludeDirectories)
+ HAVE_OGGVORBIS;NDEBUG;WIN32;NOMINMAX;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;BT_NO_PROFILE;PACKAGE="supertuxkart";ENABLE_BIDI;ADDONS_MANAGER;_IRR_STATIC_LIB_;%(PreprocessorDefinitions)
+ MultiThreadedDLL
+
+
+ Level3
+ ProgramDatabase
+
+
+ opengl32.lib;user32.lib;gdi32.lib;winmm.lib;advapi32.lib;OpenAL32.lib;libogg.lib;libvorbis.lib;libvorbisfile.lib;Irrlicht.lib;ws2_32.lib;fribidi.lib;pthreadVC2.lib;libcurl_imp.lib;%(AdditionalDependencies)
+ $(OutDir)/$(ProjectName).exe
+ ../../../dependencies/lib;../../../lib/irrlicht/lib/Win32-visualstudio;%(AdditionalLibraryDirectories)
+ libcmt.lib;%(IgnoreSpecificDefaultLibraries)
+ true
+ Windows
+ true
+ true
+ false
+
+
+ MachineX86
+
+
+
+
+ true
+ ../../../src;../../../lib/bullet/src;../../../lib/enet/include;../../../dependencies/include;../../../lib/irrlicht/include;%(AdditionalIncludeDirectories)
+ HAVE_OGGVORBIS;NDEBUG;WIN32;NOMINMAX;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;BT_NO_PROFILE;PACKAGE="supertuxkart";ENABLE_BIDI;WIN64;_IRR_STATIC_LIB_;%(PreprocessorDefinitions)
+ MultiThreadedDLL
+ NotUsing
+ Level3
+ ProgramDatabase
+ StreamingSIMDExtensions2
+ true
+
+
+ opengl32.lib;user32.lib;gdi32.lib;winmm.lib;advapi32.lib;OpenAL32.lib;libogg.lib;libvorbis.lib;libvorbisfile.lib;Irrlicht.lib;ws2_32.lib;libfribidi.lib;pthreadVC2.lib;libcurl.lib;%(AdditionalDependencies)
+ $(OutDir)/$(ProjectName).exe
+ ../../../lib/irrlicht/lib/Win64-visualStudio;../../../dependencies/lib;%(AdditionalLibraryDirectories)
+ libcmt.lib;%(IgnoreSpecificDefaultLibraries)
+ true
+ Windows
+ true
+ true
+ false
+
+
+
+
+
+
+ Disabled
+ false
+ ../../../src;../../../lib/bullet/src;../../../lib/enet/include;../../../dependencies/include;../../../lib/irrlicht/include;%(AdditionalIncludeDirectories)
+ BT_NO_PROFILE;HAVE_OGGVORBIS;_DEBUG;WIN32;NOMINMAX;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;DEBUG;PACKAGE="supertuxkart";_CRTDBG_MAP_ALLOC;ENABLE_BIDI;_IRR_STATIC_LIB_;%(PreprocessorDefinitions)
+ false
+ false
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+ false
+
+
+ Level3
+ EditAndContinue
+
+
+ opengl32.lib;user32.lib;gdi32.lib;winmm.lib;advapi32.lib;OpenAL32.lib;libogg.lib;libvorbis.lib;libvorbisfile.lib;Irrlicht.lib;ws2_32.lib;fribidi.lib;pthreadVC2.lib;libcurl_imp.lib;%(AdditionalDependencies)
+ $(TargetPath)
+ ../../../dependencies/lib;../../../lib/irrlicht/lib/Win32-visualstudio;%(AdditionalLibraryDirectories)
+ false
+ libcmt.lib;%(IgnoreSpecificDefaultLibraries)
+ true
+ false
+
+
+ false
+ Windows
+
+
+ false
+
+
+ MachineX86
+ false
+
+
+
+
+ Disabled
+ false
+ ../../../src;../../../lib/bullet/src;../../../lib/enet/include;../../../dependencies/include;../../../lib/irrlicht/include;%(AdditionalIncludeDirectories)
+ BT_NO_PROFILE;HAVE_OGGVORBIS;_DEBUG;WIN32;NOMINMAX;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;DEBUG;PACKAGE="supertuxkart";_CRTDBG_MAP_ALLOC;ENABLE_BIDI;ADDONS_MANAGER;_WIN64;_IRR_STATIC_LIB_;%(PreprocessorDefinitions)
+ false
+ false
+ EnableFastChecks
+ MultiThreadedDebugDLL
+ false
+
+
+ Level3
+ ProgramDatabase
+ false
+ StreamingSIMDExtensions2
+
+
+ opengl32.lib;user32.lib;gdi32.lib;winmm.lib;advapi32.lib;OpenAL32.lib;libogg.lib;libvorbis.lib;libvorbisfile.lib;Irrlicht.lib;ws2_32.lib;libfribidi.lib;pthreadVC2.lib;libcurl.lib;%(AdditionalDependencies)
+ $(TargetPath)
+ ../../../dependencies/lib;../../../lib/irrlicht/lib/Win64-VisualStudio;%(AdditionalLibraryDirectories)
+ false
+ libcmt.lib;%(IgnoreSpecificDefaultLibraries)
+ true
+ false
+
+
+ false
+ Windows
+
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ false
+ false
+ false
+ false
+ false
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {e08e042a-6c45-411b-92be-3cc31331019f}
+ true
+ true
+ false
+ true
+ false
+
+
+ {54aa44b9-b07b-49da-8b1a-05bbfe8ad5d4}
+ false
+
+
+ {b0e92b97-089a-4d5b-bf17-77f1bc5daeef}
+ false
+
+
+
+
+
\ No newline at end of file
diff --git a/src/ide/vc10/supertuxkart.vcxproj.filters b/src/ide/vc10/supertuxkart.vcxproj.filters
index 91f547e28..9df51f880 100644
--- a/src/ide/vc10/supertuxkart.vcxproj.filters
+++ b/src/ide/vc10/supertuxkart.vcxproj.filters
@@ -1,1671 +1,1677 @@
-
-
-
-
- {93995380-89BD-4b04-88EB-625FBE52EBFB}
- h;hpp;hxx;hm;inl;inc;xsd
-
-
- {55621666-34fd-482a-b2a0-077db2794fc5}
-
-
- {386e9299-f42e-4175-8f00-c205aa480876}
-
-
- {865587a4-41b6-4832-a961-2f012204ef4c}
-
-
- {1953a99d-3f65-4efe-93d3-b0adb25f970d}
-
-
- {fa2fbc61-28e7-44cc-830d-7d31019b910c}
-
-
- {b231fec4-a731-46b5-a8cf-1ef8fa0bf7be}
-
-
- {06defe0c-00ba-4c91-b0f4-fe0890362f0f}
-
-
- {9f93fb34-c97b-4108-9cd0-3f844d421e11}
-
-
- {6c09fe56-1df1-4fdc-9023-47887316c0b2}
-
-
- {1298df87-da0e-462e-b074-a496598571d8}
-
-
- {11a7d573-5959-4be8-8a3f-d455d7833333}
-
-
- {d477b64b-eb9c-4059-a647-98f3a2f7203a}
-
-
- {2f186570-85e9-4cea-88dc-0f716c6e141a}
-
-
- {f2f3feeb-648b-4edf-8025-fb86e1a6d9bb}
-
-
- {1ea79cd5-39b0-4228-b002-7bddf4d45fda}
-
-
- {24d03539-463f-4c91-9ea0-6fd4b5f1dde0}
-
-
- {24740454-5060-4191-bc49-7ff560db2aba}
-
-
- {03371ee6-3cf3-4ed8-b69e-21a2d0f70351}
-
-
- {62844994-aa74-4a31-b255-1815884856e2}
-
-
- {79bdc1db-0db0-4d69-9e25-c9404a5ab2ee}
-
-
- {fbc2e0f1-a87f-4205-94b4-2a8805338d2c}
-
-
- {533141f3-f1ce-4815-8e9c-4253fd5e9f5e}
-
-
- {5c9f42c5-1a5b-476b-998f-f84384767684}
-
-
- {8da5c73a-5884-4e8d-818a-20521a66e611}
-
-
- {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
- cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
-
-
- {88b6497f-6336-4d65-b0e3-5fad9ff35ffb}
-
-
- {c4431a49-640d-48e5-9ac7-473955a15283}
-
-
- {6eeebf67-9364-4c48-9e24-e89164897f9e}
-
-
- {3ee2b9d8-e9b8-4af3-a5bf-28ae532ed5cc}
-
-
- {1bda54ec-85a1-4725-8425-e5942887808d}
-
-
- {0f42eff9-e52c-4975-bc4a-52b0310ddb99}
-
-
- {c3be189e-ac78-42f5-b6e2-7193d9b32e80}
-
-
- {b91bda77-4ae6-4d47-8de1-65b8b992251e}
-
-
- {cd929227-595c-45e8-bf99-ab06e6d586d8}
-
-
- {4bb34709-b7d7-4c3b-9f26-e7a26ffd817a}
-
-
- {8d8a1efe-f3d5-4532-8271-101ed960defc}
-
-
- {45a7521f-d7d3-4404-8f6f-62e2b08c8f4c}
-
-
- {07a426a7-14fb-495b-bff3-5a402664e035}
-
-
- {00e74e62-f481-4883-a49f-661a5b3c9d88}
-
-
- {1e496486-52dd-4fe4-9bd0-3ec0f2b280fc}
-
-
- {7d4fb5af-51c8-4073-bdbf-e0420a211096}
-
-
- {7d4c8018-8cb8-4335-b0db-217883ee8954}
-
-
- {29b448e9-cfd5-4024-a3d7-360ad6d89fed}
-
-
- {305929ad-22c9-4dce-8514-2b3ceab47d2b}
-
-
- {02e2a507-6184-43fb-aa71-46ef3fc77a37}
-
-
- {9ea7a6dd-0714-414c-970c-881b61411ef8}
-
-
- {376d4c71-33a2-4def-949e-31bcb5b72812}
-
-
- {5faa19dc-78e6-438e-a2a0-6a489961f098}
-
-
- {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
- rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav
-
-
-
-
- Source Files
-
-
- Source Files
-
-
- Source Files\guiengine
-
-
- Source Files\guiengine
-
-
- Source Files\guiengine
-
-
- Source Files\guiengine
-
-
- Source Files\guiengine
-
-
- Source Files\guiengine
-
-
- Source Files\guiengine
-
-
- Source Files\guiengine
-
-
- Source Files\guiengine
-
-
- Source Files\guiengine
-
-
- Source Files\guiengine
-
-
- Source Files\guiengine
-
-
- Source Files\guiengine\widgets
-
-
- Source Files\guiengine\widgets
-
-
- Source Files\guiengine\widgets
-
-
- Source Files\guiengine\widgets
-
-
- Source Files\guiengine\widgets
-
-
- Source Files\guiengine\widgets
-
-
- Source Files\guiengine\widgets
-
-
- Source Files\guiengine\widgets
-
-
- Source Files\guiengine\widgets
-
-
- Source Files\guiengine\widgets
-
-
- Source Files\guiengine\widgets
-
-
- Source Files\guiengine\widgets
-
-
- Source Files\challenges
-
-
- Source Files\challenges
-
-
- Source Files\challenges
-
-
- Source Files\utils
-
-
- Source Files\utils
-
-
- Source Files\utils
-
-
- Source Files\utils
-
-
- Source Files\utils
-
-
- Source Files\audio
-
-
- Source Files\audio
-
-
- Source Files\audio
-
-
- Source Files\audio
-
-
- Source Files\audio
-
-
- Source Files\audio
-
-
- Source Files\modes
-
-
- Source Files\modes
-
-
- Source Files\modes
-
-
- Source Files\modes
-
-
- Source Files\modes
-
-
- Source Files\modes
-
-
- Source Files\modes
-
-
- Source Files\modes
-
-
- Source Files\items
-
-
- Source Files\items
-
-
- Source Files\items
-
-
- Source Files\items
-
-
- Source Files\items
-
-
- Source Files\items
-
-
- Source Files\items
-
-
- Source Files\items
-
-
- Source Files\items
-
-
- Source Files\items
-
-
- Source Files\items
-
-
- Source Files\items
-
-
- Source Files\physics
-
-
- Source Files\physics
-
-
- Source Files\physics
-
-
- Source Files\physics
-
-
- Source Files\physics
-
-
- Source Files\physics
-
-
- Source Files\karts
-
-
- Source Files\karts
-
-
- Source Files\karts
-
-
- Source Files\karts
-
-
- Source Files\karts
-
-
- Source Files\karts
-
-
- Source Files\karts\controller
-
-
- Source Files\karts\controller
-
-
- Source Files\karts\controller
-
-
- Source Files\karts\controller
-
-
- Source Files\graphics
-
-
- Source Files\graphics
-
-
- Source Files\graphics
-
-
- Source Files\graphics
-
-
- Source Files\graphics
-
-
- Source Files\graphics
-
-
- Source Files\graphics
-
-
- Source Files\graphics
-
-
- Source Files\graphics
-
-
- Source Files\graphics
-
-
- Source Files\graphics
-
-
- Source Files\graphics
-
-
- Source Files\graphics
-
-
- Source Files\graphics
-
-
- Source Files\network
-
-
- Source Files\network
-
-
- Source Files\network
-
-
- Source Files\network
-
-
- Source Files\network
-
-
- Source Files\network
-
-
- Source Files\network
-
-
- Source Files\network
-
-
- Source Files\network
-
-
- Source Files\tracks
-
-
- Source Files\tracks
-
-
- Source Files\tracks
-
-
- Source Files\tracks
-
-
- Source Files\tracks
-
-
- Source Files\tracks
-
-
- Source Files\tracks
-
-
- Source Files\tracks
-
-
- Source Files\tracks
-
-
- Source Files\tracks
-
-
- Source Files\tracks
-
-
- Source Files\tracks
-
-
- Source Files\tracks
-
-
- Source Files\tracks
-
-
- Source Files\tracks
-
-
- Source Files\tracks
-
-
- Source Files\io
-
-
- Source Files\io
-
-
- Source Files\io
-
-
- Source Files\input
-
-
- Source Files\input
-
-
- Source Files\input
-
-
- Source Files\input
-
-
- Source Files\race
-
-
- Source Files\race
-
-
- Source Files\race
-
-
- Source Files\race
-
-
- Source Files\race
-
-
- Source Files\race
-
-
- Source Files\config
-
-
- Source Files\config
-
-
- Source Files\config
-
-
- Source Files\animations
-
-
- Source Files\animations
-
-
- Source Files\animations
-
-
- Source Files\states_screens
-
-
- Source Files\states_screens
-
-
- Source Files\states_screens
-
-
- Source Files\states_screens
-
-
- Source Files\states_screens
-
-
- Source Files\states_screens
-
-
- Source Files\states_screens
-
-
- Source Files\states_screens
-
-
- Source Files\states_screens
-
-
- Source Files\states_screens
-
-
- Source Files\states_screens
-
-
- Source Files\states_screens
-
-
- Source Files\states_screens
-
-
- Source Files\states_screens
-
-
- Source Files\states_screens
-
-
- Source Files\states_screens
-
-
- Source Files\states_screens
-
-
- Source Files\states_screens
-
-
- Source Files\states_screens
-
-
- Source Files\states_screens
-
-
- Source Files\states_screens
-
-
- Source Files\states_screens
-
-
- Source Files\states_screens\dialogs
-
-
- Source Files\states_screens\dialogs
-
-
- Source Files\states_screens\dialogs
-
-
- Source Files\states_screens\dialogs
-
-
- Source Files\states_screens\dialogs
-
-
- Source Files\states_screens\dialogs
-
-
- Source Files\states_screens\dialogs
-
-
- Source Files\states_screens\dialogs
-
-
- Source Files\states_screens\dialogs
-
-
- Source Files\states_screens\dialogs
-
-
- Source Files\addons
-
-
- Source Files\addons
-
-
- Source Files\addons
-
-
- Source Files\addons
-
-
- Source Files\graphics
-
-
- Source Files\physics
-
-
- Source Files\states_screens
-
-
- Source Files\graphics
-
-
- Source Files\graphics
-
-
- Source Files\tinygettext
-
-
- Source Files\tinygettext
-
-
- Source Files\tinygettext
-
-
- Source Files\tinygettext
-
-
- Source Files\tinygettext
-
-
- Source Files\tinygettext
-
-
- Source Files\tinygettext
-
-
- Source Files\tinygettext
-
-
- Source Files\graphics
-
-
- Source Files\states_screens
-
-
- Source Files\guiengine\widgets
-
-
- Source Files\addons
-
-
- Source Files\addons
-
-
- Source Files\items
-
-
- Source Files\utils
-
-
- Source Files\graphics
-
-
- Source Files\items
-
-
- Source Files\graphics
-
-
- Source Files\karts
-
-
- Source Files\tracks
-
-
- Source Files\graphics
-
-
- Source Files\graphics
-
-
- Source Files\utils
-
-
- Source Files
-
-
- Source Files\challenges
-
-
- Source Files\states_screens
-
-
- Source Files\states_screens\dialogs
-
-
- Source Files\modes
-
-
- Source Files\states_screens
-
-
- Source Files\karts
-
-
- Source Files\states_screens\dialogs
-
-
- Source Files\replay
-
-
- Source Files\replay
-
-
- Source Files\replay
-
-
- Source Files\karts
-
-
- Source Files\karts
-
-
- Source Files\karts
-
-
- Source Files\karts
-
-
- Source Files\karts
-
-
- Source Files\karts
-
-
- Source Files\karts
-
-
- Source Files\karts
-
-
- Source Files\modes
-
-
- Source Files\config
-
-
- Source Files\tracks
-
-
- Source Files\graphics
-
-
- Source Files\karts\controller
-
-
- Source Files\modes
-
-
- Source Files\states_screens
-
-
- Source Files\addons
-
-
- Source Files\karts\controller
-
-
- Source Files\states_screens
-
-
- Source Files\tinygettext
-
-
- Source Files\states_screens\dialogs
-
-
- Source Files\utils
-
-
- Source Files\modes
-
-
- Source Files\modes
-
-
- Source Files\modes
-
-
- Source Files\states_screens
-
-
- Source Files\tracks
-
-
- Source Files\tracks
-
-
- Source Files\input
-
-
- Source Files
-
-
-
-
- Header Files
-
-
- Header Files\guiengine
-
-
- Header Files\guiengine
-
-
- Header Files\guiengine
-
-
- Header Files\guiengine
-
-
- Header Files\guiengine
-
-
- Header Files\guiengine
-
-
- Header Files\guiengine
-
-
- Header Files\guiengine
-
-
- Header Files\guiengine
-
-
- Header Files\guiengine
-
-
- Header Files\guiengine
-
-
- Header Files\guiengine\widgets
-
-
- Header Files\guiengine\widgets
-
-
- Header Files\guiengine\widgets
-
-
- Header Files\guiengine\widgets
-
-
- Header Files\guiengine\widgets
-
-
- Header Files\guiengine\widgets
-
-
- Header Files\guiengine\widgets
-
-
- Header Files\guiengine\widgets
-
-
- Header Files\guiengine\widgets
-
-
- Header Files\guiengine\widgets
-
-
- Header Files\guiengine\widgets
-
-
- Header Files\guiengine\widgets
-
-
- Header Files\challenges
-
-
- Header Files\challenges
-
-
- Header Files\challenges
-
-
- Header Files\network
-
-
- Header Files\network
-
-
- Header Files\network
-
-
- Header Files\network
-
-
- Header Files\network
-
-
- Header Files\network
-
-
- Header Files\network
-
-
- Header Files\network
-
-
- Header Files\network
-
-
- Header Files\network
-
-
- Header Files\network
-
-
- Header Files\network
-
-
- Header Files\network
-
-
- Header Files\network
-
-
- Header Files\network
-
-
- Header Files\network
-
-
- Header Files\network
-
-
- Header Files\network
-
-
- Header Files\network
-
-
- Header Files\utils
-
-
- Header Files\utils
-
-
- Header Files\utils
-
-
- Header Files\utils
-
-
- Header Files\utils
-
-
- Header Files\utils
-
-
- Header Files\utils
-
-
- Header Files\utils
-
-
- Header Files\audio
-
-
- Header Files\audio
-
-
- Header Files\audio
-
-
- Header Files\audio
-
-
- Header Files\audio
-
-
- Header Files\audio
-
-
- Header Files\audio
-
-
- Header Files\audio
-
-
- Header Files\modes
-
-
- Header Files\modes
-
-
- Header Files\modes
-
-
- Header Files\modes
-
-
- Header Files\modes
-
-
- Header Files\modes
-
-
- Header Files\modes
-
-
- Header Files\modes
-
-
- Header Files\items
-
-
- Header Files\items
-
-
- Header Files\items
-
-
- Header Files\items
-
-
- Header Files\items
-
-
- Header Files\items
-
-
- Header Files\items
-
-
- Header Files\items
-
-
- Header Files\items
-
-
- Header Files\items
-
-
- Header Files\items
-
-
- Header Files\items
-
-
- Header Files\physics
-
-
- Header Files\physics
-
-
- Header Files\physics
-
-
- Header Files\physics
-
-
- Header Files\physics
-
-
- Header Files\physics
-
-
- Header Files\physics
-
-
- Header Files\physics
-
-
- Header Files\karts
-
-
- Header Files\karts
-
-
- Header Files\karts
-
-
- Header Files\karts
-
-
- Header Files\karts
-
-
- Header Files\karts
-
-
- Header Files\karts
-
-
- Header Files\karts\controller
-
-
- Header Files\karts\controller
-
-
- Header Files\karts\controller
-
-
- Header Files\karts\controller
-
-
- Header Files\graphics
-
-
- Header Files\graphics
-
-
- Header Files\graphics
-
-
- Header Files\graphics
-
-
- Header Files\graphics
-
-
- Header Files\graphics
-
-
- Header Files\graphics
-
-
- Header Files\graphics
-
-
- Header Files\graphics
-
-
- Header Files\graphics
-
-
- Header Files\graphics
-
-
- Header Files\graphics
-
-
- Header Files\graphics
-
-
- Header Files\graphics
-
-
- Header Files\tracks
-
-
- Header Files\tracks
-
-
- Header Files\tracks
-
-
- Header Files\tracks
-
-
- Header Files\tracks
-
-
- Header Files\tracks
-
-
- Header Files\tracks
-
-
- Header Files\tracks
-
-
- Header Files\tracks
-
-
- Header Files\tracks
-
-
- Header Files\tracks
-
-
- Header Files\tracks
-
-
- Header Files\tracks
-
-
- Header Files\tracks
-
-
- Header Files\tracks
-
-
- Header Files\tracks
-
-
- Header Files\io
-
-
- Header Files\io
-
-
- Header Files\io
-
-
- Header Files\input
-
-
- Header Files\input
-
-
- Header Files\input
-
-
- Header Files\input
-
-
- Header Files\input
-
-
- Header Files\race
-
-
- Header Files\race
-
-
- Header Files\race
-
-
- Header Files\race
-
-
- Header Files\race
-
-
- Header Files\race
-
-
- Header Files\config
-
-
- Header Files\config
-
-
- Header Files\config
-
-
- Header Files\config
-
-
- Header Files\animations
-
-
- Header Files\animations
-
-
- Header Files\animations
-
-
- Header Files\states_screens
-
-
- Header Files\states_screens
-
-
- Header Files\states_screens
-
-
- Header Files\states_screens
-
-
- Header Files\states_screens
-
-
- Header Files\states_screens
-
-
- Header Files\states_screens
-
-
- Header Files\states_screens
-
-
- Header Files\states_screens
-
-
- Header Files\states_screens
-
-
- Header Files\states_screens
-
-
- Header Files\states_screens
-
-
- Header Files\states_screens
-
-
- Header Files\states_screens
-
-
- Header Files\states_screens
-
-
- Header Files\states_screens
-
-
- Header Files\states_screens
-
-
- Header Files\states_screens
-
-
- Header Files\states_screens
-
-
- Header Files\states_screens
-
-
- Header Files\states_screens
-
-
- Header Files\states_screens
-
-
- Header Files\states_screens
-
-
- Header Files\states_screens\dialogs
-
-
- Header Files\states_screens\dialogs
-
-
- Header Files\states_screens\dialogs
-
-
- Header Files\states_screens\dialogs
-
-
- Header Files\states_screens\dialogs
-
-
- Header Files\states_screens\dialogs
-
-
- Header Files\states_screens\dialogs
-
-
- Header Files\states_screens\dialogs
-
-
- Header Files\states_screens\dialogs
-
-
- Header Files\states_screens\dialogs
-
-
- Header Files\addons
-
-
- Header Files\addons
-
-
- Header Files\addons
-
-
- Header Files\addons
-
-
- Header Files\graphics
-
-
- Header Files\physics
-
-
- Header Files\states_screens
-
-
- Header Files\graphics
-
-
- Header Files\graphics
-
-
- Header Files\tinygettext
-
-
- Header Files\tinygettext
-
-
- Header Files\tinygettext
-
-
- Header Files\tinygettext
-
-
- Header Files\tinygettext
-
-
- Header Files\tinygettext
-
-
- Header Files\tinygettext
-
-
- Header Files\tinygettext
-
-
- Header Files\tinygettext
-
-
- Header Files\tinygettext
-
-
- Header Files\utils\utf8
-
-
- Header Files\utils\utf8
-
-
- Header Files\utils\utf8
-
-
- Header Files\utils
-
-
- Header Files\graphics
-
-
- Header Files\states_screens
-
-
- Header Files\utils
-
-
- Header Files\guiengine\widgets
-
-
- Header Files\addons
-
-
- Header Files\addons
-
-
- Header Files\items
-
-
- Header Files\utils
-
-
- Header Files\graphics
-
-
- Header Files\items
-
-
- Header Files\graphics
-
-
- Header Files\karts
-
-
- Header Files\tracks
-
-
- Header Files\graphics
-
-
- Header Files\graphics
-
-
- Header Files\graphics
-
-
- Header Files\utils
-
-
- Header Files
-
-
- Header Files\challenges
-
-
- Header Files\states_screens
-
-
- Header Files\states_screens\dialogs
-
-
- Header Files\modes
-
-
- Header Files\states_screens
-
-
- Header Files\karts
-
-
- Header Files\states_screens\dialogs
-
-
- Header Files\replay
-
-
- Header Files\replay
-
-
- Header Files\replay
-
-
- Header Files\karts
-
-
- Header Files\karts
-
-
- Header Files\karts
-
-
- Header Files\karts
-
-
- Header Files\karts
-
-
- Header Files\karts
-
-
- Header Files\karts
-
-
- Header Files\karts
-
-
- Header Files\modes
-
-
- Header Files\tracks
-
-
- Header Files\utils
-
-
- Header Files\graphics
-
-
- Header Files\karts\controller
-
-
- Header Files\modes
-
-
- Header Files\states_screens
-
-
- Header Files\addons
-
-
- Header Files\karts\controller
-
-
- Header Files\utils
-
-
- Header Files\tinygettext
-
-
- Header Files\states_screens\dialogs
-
-
- Header Files\utils
-
-
- Header Files\modes
-
-
- Header Files\modes
-
-
- Header Files\modes
-
-
- Header Files\states_screens
-
-
- Header Files\tracks
-
-
- Header Files\tracks
-
-
- Header Files\input
-
-
- Header Files
-
-
+
+
+
+
+ {93995380-89BD-4b04-88EB-625FBE52EBFB}
+ h;hpp;hxx;hm;inl;inc;xsd
+
+
+ {55621666-34fd-482a-b2a0-077db2794fc5}
+
+
+ {386e9299-f42e-4175-8f00-c205aa480876}
+
+
+ {865587a4-41b6-4832-a961-2f012204ef4c}
+
+
+ {1953a99d-3f65-4efe-93d3-b0adb25f970d}
+
+
+ {fa2fbc61-28e7-44cc-830d-7d31019b910c}
+
+
+ {b231fec4-a731-46b5-a8cf-1ef8fa0bf7be}
+
+
+ {06defe0c-00ba-4c91-b0f4-fe0890362f0f}
+
+
+ {9f93fb34-c97b-4108-9cd0-3f844d421e11}
+
+
+ {6c09fe56-1df1-4fdc-9023-47887316c0b2}
+
+
+ {1298df87-da0e-462e-b074-a496598571d8}
+
+
+ {11a7d573-5959-4be8-8a3f-d455d7833333}
+
+
+ {d477b64b-eb9c-4059-a647-98f3a2f7203a}
+
+
+ {2f186570-85e9-4cea-88dc-0f716c6e141a}
+
+
+ {f2f3feeb-648b-4edf-8025-fb86e1a6d9bb}
+
+
+ {1ea79cd5-39b0-4228-b002-7bddf4d45fda}
+
+
+ {24d03539-463f-4c91-9ea0-6fd4b5f1dde0}
+
+
+ {24740454-5060-4191-bc49-7ff560db2aba}
+
+
+ {03371ee6-3cf3-4ed8-b69e-21a2d0f70351}
+
+
+ {62844994-aa74-4a31-b255-1815884856e2}
+
+
+ {79bdc1db-0db0-4d69-9e25-c9404a5ab2ee}
+
+
+ {fbc2e0f1-a87f-4205-94b4-2a8805338d2c}
+
+
+ {533141f3-f1ce-4815-8e9c-4253fd5e9f5e}
+
+
+ {5c9f42c5-1a5b-476b-998f-f84384767684}
+
+
+ {8da5c73a-5884-4e8d-818a-20521a66e611}
+
+
+ {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
+ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
+
+
+ {88b6497f-6336-4d65-b0e3-5fad9ff35ffb}
+
+
+ {c4431a49-640d-48e5-9ac7-473955a15283}
+
+
+ {6eeebf67-9364-4c48-9e24-e89164897f9e}
+
+
+ {3ee2b9d8-e9b8-4af3-a5bf-28ae532ed5cc}
+
+
+ {1bda54ec-85a1-4725-8425-e5942887808d}
+
+
+ {0f42eff9-e52c-4975-bc4a-52b0310ddb99}
+
+
+ {c3be189e-ac78-42f5-b6e2-7193d9b32e80}
+
+
+ {b91bda77-4ae6-4d47-8de1-65b8b992251e}
+
+
+ {cd929227-595c-45e8-bf99-ab06e6d586d8}
+
+
+ {4bb34709-b7d7-4c3b-9f26-e7a26ffd817a}
+
+
+ {8d8a1efe-f3d5-4532-8271-101ed960defc}
+
+
+ {45a7521f-d7d3-4404-8f6f-62e2b08c8f4c}
+
+
+ {07a426a7-14fb-495b-bff3-5a402664e035}
+
+
+ {00e74e62-f481-4883-a49f-661a5b3c9d88}
+
+
+ {1e496486-52dd-4fe4-9bd0-3ec0f2b280fc}
+
+
+ {7d4fb5af-51c8-4073-bdbf-e0420a211096}
+
+
+ {7d4c8018-8cb8-4335-b0db-217883ee8954}
+
+
+ {29b448e9-cfd5-4024-a3d7-360ad6d89fed}
+
+
+ {305929ad-22c9-4dce-8514-2b3ceab47d2b}
+
+
+ {02e2a507-6184-43fb-aa71-46ef3fc77a37}
+
+
+ {9ea7a6dd-0714-414c-970c-881b61411ef8}
+
+
+ {376d4c71-33a2-4def-949e-31bcb5b72812}
+
+
+ {5faa19dc-78e6-438e-a2a0-6a489961f098}
+
+
+ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
+ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav
+
+
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files\guiengine
+
+
+ Source Files\guiengine
+
+
+ Source Files\guiengine
+
+
+ Source Files\guiengine
+
+
+ Source Files\guiengine
+
+
+ Source Files\guiengine
+
+
+ Source Files\guiengine
+
+
+ Source Files\guiengine
+
+
+ Source Files\guiengine
+
+
+ Source Files\guiengine
+
+
+ Source Files\guiengine
+
+
+ Source Files\guiengine
+
+
+ Source Files\guiengine\widgets
+
+
+ Source Files\guiengine\widgets
+
+
+ Source Files\guiengine\widgets
+
+
+ Source Files\guiengine\widgets
+
+
+ Source Files\guiengine\widgets
+
+
+ Source Files\guiengine\widgets
+
+
+ Source Files\guiengine\widgets
+
+
+ Source Files\guiengine\widgets
+
+
+ Source Files\guiengine\widgets
+
+
+ Source Files\guiengine\widgets
+
+
+ Source Files\guiengine\widgets
+
+
+ Source Files\guiengine\widgets
+
+
+ Source Files\challenges
+
+
+ Source Files\challenges
+
+
+ Source Files\challenges
+
+
+ Source Files\utils
+
+
+ Source Files\utils
+
+
+ Source Files\utils
+
+
+ Source Files\utils
+
+
+ Source Files\utils
+
+
+ Source Files\audio
+
+
+ Source Files\audio
+
+
+ Source Files\audio
+
+
+ Source Files\audio
+
+
+ Source Files\audio
+
+
+ Source Files\audio
+
+
+ Source Files\modes
+
+
+ Source Files\modes
+
+
+ Source Files\modes
+
+
+ Source Files\modes
+
+
+ Source Files\modes
+
+
+ Source Files\modes
+
+
+ Source Files\modes
+
+
+ Source Files\modes
+
+
+ Source Files\items
+
+
+ Source Files\items
+
+
+ Source Files\items
+
+
+ Source Files\items
+
+
+ Source Files\items
+
+
+ Source Files\items
+
+
+ Source Files\items
+
+
+ Source Files\items
+
+
+ Source Files\items
+
+
+ Source Files\items
+
+
+ Source Files\items
+
+
+ Source Files\items
+
+
+ Source Files\physics
+
+
+ Source Files\physics
+
+
+ Source Files\physics
+
+
+ Source Files\physics
+
+
+ Source Files\physics
+
+
+ Source Files\physics
+
+
+ Source Files\karts
+
+
+ Source Files\karts
+
+
+ Source Files\karts
+
+
+ Source Files\karts
+
+
+ Source Files\karts
+
+
+ Source Files\karts
+
+
+ Source Files\karts\controller
+
+
+ Source Files\karts\controller
+
+
+ Source Files\karts\controller
+
+
+ Source Files\karts\controller
+
+
+ Source Files\graphics
+
+
+ Source Files\graphics
+
+
+ Source Files\graphics
+
+
+ Source Files\graphics
+
+
+ Source Files\graphics
+
+
+ Source Files\graphics
+
+
+ Source Files\graphics
+
+
+ Source Files\graphics
+
+
+ Source Files\graphics
+
+
+ Source Files\graphics
+
+
+ Source Files\graphics
+
+
+ Source Files\graphics
+
+
+ Source Files\graphics
+
+
+ Source Files\graphics
+
+
+ Source Files\network
+
+
+ Source Files\network
+
+
+ Source Files\network
+
+
+ Source Files\network
+
+
+ Source Files\network
+
+
+ Source Files\network
+
+
+ Source Files\network
+
+
+ Source Files\network
+
+
+ Source Files\network
+
+
+ Source Files\tracks
+
+
+ Source Files\tracks
+
+
+ Source Files\tracks
+
+
+ Source Files\tracks
+
+
+ Source Files\tracks
+
+
+ Source Files\tracks
+
+
+ Source Files\tracks
+
+
+ Source Files\tracks
+
+
+ Source Files\tracks
+
+
+ Source Files\tracks
+
+
+ Source Files\tracks
+
+
+ Source Files\tracks
+
+
+ Source Files\tracks
+
+
+ Source Files\tracks
+
+
+ Source Files\tracks
+
+
+ Source Files\tracks
+
+
+ Source Files\io
+
+
+ Source Files\io
+
+
+ Source Files\io
+
+
+ Source Files\input
+
+
+ Source Files\input
+
+
+ Source Files\input
+
+
+ Source Files\input
+
+
+ Source Files\race
+
+
+ Source Files\race
+
+
+ Source Files\race
+
+
+ Source Files\race
+
+
+ Source Files\race
+
+
+ Source Files\race
+
+
+ Source Files\config
+
+
+ Source Files\config
+
+
+ Source Files\config
+
+
+ Source Files\animations
+
+
+ Source Files\animations
+
+
+ Source Files\animations
+
+
+ Source Files\states_screens
+
+
+ Source Files\states_screens
+
+
+ Source Files\states_screens
+
+
+ Source Files\states_screens
+
+
+ Source Files\states_screens
+
+
+ Source Files\states_screens
+
+
+ Source Files\states_screens
+
+
+ Source Files\states_screens
+
+
+ Source Files\states_screens
+
+
+ Source Files\states_screens
+
+
+ Source Files\states_screens
+
+
+ Source Files\states_screens
+
+
+ Source Files\states_screens
+
+
+ Source Files\states_screens
+
+
+ Source Files\states_screens
+
+
+ Source Files\states_screens
+
+
+ Source Files\states_screens
+
+
+ Source Files\states_screens
+
+
+ Source Files\states_screens
+
+
+ Source Files\states_screens
+
+
+ Source Files\states_screens
+
+
+ Source Files\states_screens
+
+
+ Source Files\states_screens\dialogs
+
+
+ Source Files\states_screens\dialogs
+
+
+ Source Files\states_screens\dialogs
+
+
+ Source Files\states_screens\dialogs
+
+
+ Source Files\states_screens\dialogs
+
+
+ Source Files\states_screens\dialogs
+
+
+ Source Files\states_screens\dialogs
+
+
+ Source Files\states_screens\dialogs
+
+
+ Source Files\states_screens\dialogs
+
+
+ Source Files\states_screens\dialogs
+
+
+ Source Files\addons
+
+
+ Source Files\addons
+
+
+ Source Files\addons
+
+
+ Source Files\addons
+
+
+ Source Files\graphics
+
+
+ Source Files\physics
+
+
+ Source Files\states_screens
+
+
+ Source Files\graphics
+
+
+ Source Files\graphics
+
+
+ Source Files\tinygettext
+
+
+ Source Files\tinygettext
+
+
+ Source Files\tinygettext
+
+
+ Source Files\tinygettext
+
+
+ Source Files\tinygettext
+
+
+ Source Files\tinygettext
+
+
+ Source Files\tinygettext
+
+
+ Source Files\tinygettext
+
+
+ Source Files\graphics
+
+
+ Source Files\states_screens
+
+
+ Source Files\guiengine\widgets
+
+
+ Source Files\addons
+
+
+ Source Files\addons
+
+
+ Source Files\items
+
+
+ Source Files\utils
+
+
+ Source Files\graphics
+
+
+ Source Files\items
+
+
+ Source Files\graphics
+
+
+ Source Files\karts
+
+
+ Source Files\tracks
+
+
+ Source Files\graphics
+
+
+ Source Files\graphics
+
+
+ Source Files\utils
+
+
+ Source Files
+
+
+ Source Files\challenges
+
+
+ Source Files\states_screens
+
+
+ Source Files\states_screens\dialogs
+
+
+ Source Files\modes
+
+
+ Source Files\states_screens
+
+
+ Source Files\karts
+
+
+ Source Files\states_screens\dialogs
+
+
+ Source Files\replay
+
+
+ Source Files\replay
+
+
+ Source Files\replay
+
+
+ Source Files\karts
+
+
+ Source Files\karts
+
+
+ Source Files\karts
+
+
+ Source Files\karts
+
+
+ Source Files\karts
+
+
+ Source Files\karts
+
+
+ Source Files\karts
+
+
+ Source Files\karts
+
+
+ Source Files\modes
+
+
+ Source Files\config
+
+
+ Source Files\tracks
+
+
+ Source Files\graphics
+
+
+ Source Files\karts\controller
+
+
+ Source Files\modes
+
+
+ Source Files\states_screens
+
+
+ Source Files\addons
+
+
+ Source Files\karts\controller
+
+
+ Source Files\states_screens
+
+
+ Source Files\tinygettext
+
+
+ Source Files\states_screens\dialogs
+
+
+ Source Files\utils
+
+
+ Source Files\modes
+
+
+ Source Files\modes
+
+
+ Source Files\modes
+
+
+ Source Files\states_screens
+
+
+ Source Files\tracks
+
+
+ Source Files\tracks
+
+
+ Source Files\input
+
+
+ Source Files
+
+
+ Source Files\guiengine\widgets
+
+
+
+
+ Header Files
+
+
+ Header Files\guiengine
+
+
+ Header Files\guiengine
+
+
+ Header Files\guiengine
+
+
+ Header Files\guiengine
+
+
+ Header Files\guiengine
+
+
+ Header Files\guiengine
+
+
+ Header Files\guiengine
+
+
+ Header Files\guiengine
+
+
+ Header Files\guiengine
+
+
+ Header Files\guiengine
+
+
+ Header Files\guiengine
+
+
+ Header Files\guiengine\widgets
+
+
+ Header Files\guiengine\widgets
+
+
+ Header Files\guiengine\widgets
+
+
+ Header Files\guiengine\widgets
+
+
+ Header Files\guiengine\widgets
+
+
+ Header Files\guiengine\widgets
+
+
+ Header Files\guiengine\widgets
+
+
+ Header Files\guiengine\widgets
+
+
+ Header Files\guiengine\widgets
+
+
+ Header Files\guiengine\widgets
+
+
+ Header Files\guiengine\widgets
+
+
+ Header Files\guiengine\widgets
+
+
+ Header Files\challenges
+
+
+ Header Files\challenges
+
+
+ Header Files\challenges
+
+
+ Header Files\network
+
+
+ Header Files\network
+
+
+ Header Files\network
+
+
+ Header Files\network
+
+
+ Header Files\network
+
+
+ Header Files\network
+
+
+ Header Files\network
+
+
+ Header Files\network
+
+
+ Header Files\network
+
+
+ Header Files\network
+
+
+ Header Files\network
+
+
+ Header Files\network
+
+
+ Header Files\network
+
+
+ Header Files\network
+
+
+ Header Files\network
+
+
+ Header Files\network
+
+
+ Header Files\network
+
+
+ Header Files\network
+
+
+ Header Files\network
+
+
+ Header Files\utils
+
+
+ Header Files\utils
+
+
+ Header Files\utils
+
+
+ Header Files\utils
+
+
+ Header Files\utils
+
+
+ Header Files\utils
+
+
+ Header Files\utils
+
+
+ Header Files\utils
+
+
+ Header Files\audio
+
+
+ Header Files\audio
+
+
+ Header Files\audio
+
+
+ Header Files\audio
+
+
+ Header Files\audio
+
+
+ Header Files\audio
+
+
+ Header Files\audio
+
+
+ Header Files\audio
+
+
+ Header Files\modes
+
+
+ Header Files\modes
+
+
+ Header Files\modes
+
+
+ Header Files\modes
+
+
+ Header Files\modes
+
+
+ Header Files\modes
+
+
+ Header Files\modes
+
+
+ Header Files\modes
+
+
+ Header Files\items
+
+
+ Header Files\items
+
+
+ Header Files\items
+
+
+ Header Files\items
+
+
+ Header Files\items
+
+
+ Header Files\items
+
+
+ Header Files\items
+
+
+ Header Files\items
+
+
+ Header Files\items
+
+
+ Header Files\items
+
+
+ Header Files\items
+
+
+ Header Files\items
+
+
+ Header Files\physics
+
+
+ Header Files\physics
+
+
+ Header Files\physics
+
+
+ Header Files\physics
+
+
+ Header Files\physics
+
+
+ Header Files\physics
+
+
+ Header Files\physics
+
+
+ Header Files\physics
+
+
+ Header Files\karts
+
+
+ Header Files\karts
+
+
+ Header Files\karts
+
+
+ Header Files\karts
+
+
+ Header Files\karts
+
+
+ Header Files\karts
+
+
+ Header Files\karts
+
+
+ Header Files\karts\controller
+
+
+ Header Files\karts\controller
+
+
+ Header Files\karts\controller
+
+
+ Header Files\karts\controller
+
+
+ Header Files\graphics
+
+
+ Header Files\graphics
+
+
+ Header Files\graphics
+
+
+ Header Files\graphics
+
+
+ Header Files\graphics
+
+
+ Header Files\graphics
+
+
+ Header Files\graphics
+
+
+ Header Files\graphics
+
+
+ Header Files\graphics
+
+
+ Header Files\graphics
+
+
+ Header Files\graphics
+
+
+ Header Files\graphics
+
+
+ Header Files\graphics
+
+
+ Header Files\graphics
+
+
+ Header Files\tracks
+
+
+ Header Files\tracks
+
+
+ Header Files\tracks
+
+
+ Header Files\tracks
+
+
+ Header Files\tracks
+
+
+ Header Files\tracks
+
+
+ Header Files\tracks
+
+
+ Header Files\tracks
+
+
+ Header Files\tracks
+
+
+ Header Files\tracks
+
+
+ Header Files\tracks
+
+
+ Header Files\tracks
+
+
+ Header Files\tracks
+
+
+ Header Files\tracks
+
+
+ Header Files\tracks
+
+
+ Header Files\tracks
+
+
+ Header Files\io
+
+
+ Header Files\io
+
+
+ Header Files\io
+
+
+ Header Files\input
+
+
+ Header Files\input
+
+
+ Header Files\input
+
+
+ Header Files\input
+
+
+ Header Files\input
+
+
+ Header Files\race
+
+
+ Header Files\race
+
+
+ Header Files\race
+
+
+ Header Files\race
+
+
+ Header Files\race
+
+
+ Header Files\race
+
+
+ Header Files\config
+
+
+ Header Files\config
+
+
+ Header Files\config
+
+
+ Header Files\config
+
+
+ Header Files\animations
+
+
+ Header Files\animations
+
+
+ Header Files\animations
+
+
+ Header Files\states_screens
+
+
+ Header Files\states_screens
+
+
+ Header Files\states_screens
+
+
+ Header Files\states_screens
+
+
+ Header Files\states_screens
+
+
+ Header Files\states_screens
+
+
+ Header Files\states_screens
+
+
+ Header Files\states_screens
+
+
+ Header Files\states_screens
+
+
+ Header Files\states_screens
+
+
+ Header Files\states_screens
+
+
+ Header Files\states_screens
+
+
+ Header Files\states_screens
+
+
+ Header Files\states_screens
+
+
+ Header Files\states_screens
+
+
+ Header Files\states_screens
+
+
+ Header Files\states_screens
+
+
+ Header Files\states_screens
+
+
+ Header Files\states_screens
+
+
+ Header Files\states_screens
+
+
+ Header Files\states_screens
+
+
+ Header Files\states_screens
+
+
+ Header Files\states_screens
+
+
+ Header Files\states_screens\dialogs
+
+
+ Header Files\states_screens\dialogs
+
+
+ Header Files\states_screens\dialogs
+
+
+ Header Files\states_screens\dialogs
+
+
+ Header Files\states_screens\dialogs
+
+
+ Header Files\states_screens\dialogs
+
+
+ Header Files\states_screens\dialogs
+
+
+ Header Files\states_screens\dialogs
+
+
+ Header Files\states_screens\dialogs
+
+
+ Header Files\states_screens\dialogs
+
+
+ Header Files\addons
+
+
+ Header Files\addons
+
+
+ Header Files\addons
+
+
+ Header Files\addons
+
+
+ Header Files\graphics
+
+
+ Header Files\physics
+
+
+ Header Files\states_screens
+
+
+ Header Files\graphics
+
+
+ Header Files\graphics
+
+
+ Header Files\tinygettext
+
+
+ Header Files\tinygettext
+
+
+ Header Files\tinygettext
+
+
+ Header Files\tinygettext
+
+
+ Header Files\tinygettext
+
+
+ Header Files\tinygettext
+
+
+ Header Files\tinygettext
+
+
+ Header Files\tinygettext
+
+
+ Header Files\tinygettext
+
+
+ Header Files\tinygettext
+
+
+ Header Files\utils\utf8
+
+
+ Header Files\utils\utf8
+
+
+ Header Files\utils\utf8
+
+
+ Header Files\utils
+
+
+ Header Files\graphics
+
+
+ Header Files\states_screens
+
+
+ Header Files\utils
+
+
+ Header Files\guiengine\widgets
+
+
+ Header Files\addons
+
+
+ Header Files\addons
+
+
+ Header Files\items
+
+
+ Header Files\utils
+
+
+ Header Files\graphics
+
+
+ Header Files\items
+
+
+ Header Files\graphics
+
+
+ Header Files\karts
+
+
+ Header Files\tracks
+
+
+ Header Files\graphics
+
+
+ Header Files\graphics
+
+
+ Header Files\graphics
+
+
+ Header Files\utils
+
+
+ Header Files
+
+
+ Header Files\challenges
+
+
+ Header Files\states_screens
+
+
+ Header Files\states_screens\dialogs
+
+
+ Header Files\modes
+
+
+ Header Files\states_screens
+
+
+ Header Files\karts
+
+
+ Header Files\states_screens\dialogs
+
+
+ Header Files\replay
+
+
+ Header Files\replay
+
+
+ Header Files\replay
+
+
+ Header Files\karts
+
+
+ Header Files\karts
+
+
+ Header Files\karts
+
+
+ Header Files\karts
+
+
+ Header Files\karts
+
+
+ Header Files\karts
+
+
+ Header Files\karts
+
+
+ Header Files\karts
+
+
+ Header Files\modes
+
+
+ Header Files\tracks
+
+
+ Header Files\utils
+
+
+ Header Files\graphics
+
+
+ Header Files\karts\controller
+
+
+ Header Files\modes
+
+
+ Header Files\states_screens
+
+
+ Header Files\addons
+
+
+ Header Files\karts\controller
+
+
+ Header Files\utils
+
+
+ Header Files\tinygettext
+
+
+ Header Files\states_screens\dialogs
+
+
+ Header Files\utils
+
+
+ Header Files\modes
+
+
+ Header Files\modes
+
+
+ Header Files\modes
+
+
+ Header Files\states_screens
+
+
+ Header Files\tracks
+
+
+ Header Files\tracks
+
+
+ Header Files\input
+
+
+ Header Files
+
+
+ Header Files\guiengine\widgets
+
+
\ No newline at end of file
diff --git a/src/ide/vc11/supertuxkart.vcxproj b/src/ide/vc11/supertuxkart.vcxproj
index 6db8e4dd3..c1e6cfff3 100644
--- a/src/ide/vc11/supertuxkart.vcxproj
+++ b/src/ide/vc11/supertuxkart.vcxproj
@@ -1,738 +1,739 @@
-
-
-
-
- debug
- Win32
-
-
- debug
- x64
-
-
- Release
- Win32
-
-
- Release
- x64
-
-
-
- {B1BC2764-1A43-4800-A654-788B0D05EDA2}
- supertuxkart
- Win32Proj
-
-
-
- Application
- MultiByte
- v110
-
-
- Application
- NotSet
- v110
-
-
- Application
- MultiByte
- true
- v110
-
-
- Application
- MultiByte
- true
- v110
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <_ProjectFileVersion>10.0.30319.1
- ..\..\../
- ..\..\../
- $(Configuration)\
- $(Configuration)\
- false
- false
- ..\..\../
- ..\..\../
- $(Configuration)\
- $(Configuration)\
- true
- true
- $(ProjectName)_d
- $(ProjectName)_d
- C:\Program Files\Microsoft SDKs\Windows\v7.0A\Include;$(IncludePath)
-
-
-
- true
- ../../../src;../../../lib/bullet/src;../../../lib/enet/include;../../../dependencies/include;../../../lib/irrlicht/include;%(AdditionalIncludeDirectories)
- HAVE_OGGVORBIS;NDEBUG;_CONSOLE;WIN32;NOMINMAX;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;BT_NO_PROFILE;PACKAGE="supertuxkart";ENABLE_BIDI;ADDONS_MANAGER;_IRR_STATIC_LIB_;%(PreprocessorDefinitions)
- MultiThreadedDLL
-
-
- Level3
- ProgramDatabase
-
-
- opengl32.lib;user32.lib;gdi32.lib;winmm.lib;advapi32.lib;OpenAL32.lib;libogg.lib;libvorbis.lib;libvorbisfile.lib;Irrlicht.lib;ws2_32.lib;fribidi.lib;pthreadVC2.lib;libcurl_imp.lib;%(AdditionalDependencies)
- $(OutDir)/$(ProjectName).exe
- ../../../dependencies/lib;../../../lib/irrlicht/lib/Win32-visualstudio;%(AdditionalLibraryDirectories)
- libcmt.lib;%(IgnoreSpecificDefaultLibraries)
- true
- Console
- true
- true
- false
-
-
- MachineX86
-
-
-
-
- true
- ../../../src;../../../lib/bullet/src;../../../lib/enet/include;../../../dependencies/include;../../../lib/irrlicht/include;%(AdditionalIncludeDirectories)
- HAVE_OGGVORBIS;NDEBUG;_CONSOLE;WIN32;NOMINMAX;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;BT_NO_PROFILE;PACKAGE="supertuxkart";ENABLE_BIDI;WIN64;_IRR_STATIC_LIB_;%(PreprocessorDefinitions)
- MultiThreadedDLL
- NotUsing
- Level3
- ProgramDatabase
- StreamingSIMDExtensions2
- true
-
-
- opengl32.lib;user32.lib;gdi32.lib;winmm.lib;advapi32.lib;OpenAL32.lib;libogg.lib;libvorbis.lib;libvorbisfile.lib;Irrlicht.lib;ws2_32.lib;libfribidi.lib;pthreadVC2.lib;libcurl.lib;%(AdditionalDependencies)
- $(OutDir)/$(ProjectName).exe
- ../../../lib/irrlicht/lib/Win64-visualStudio;../../../dependencies/lib;%(AdditionalLibraryDirectories)
- libcmt.lib;%(IgnoreSpecificDefaultLibraries)
- true
- Console
- true
- true
- false
-
-
-
-
-
-
- Disabled
- false
- ../../../src;../../../lib/bullet/src;../../../lib/enet/include;../../../dependencies/include;../../../lib/irrlicht/include;%(AdditionalIncludeDirectories)
- BT_NO_PROFILE;HAVE_OGGVORBIS;_DEBUG;_CONSOLE;WIN32;NOMINMAX;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;DEBUG;PACKAGE="supertuxkart";_CRTDBG_MAP_ALLOC;ENABLE_BIDI;_IRR_STATIC_LIB_;%(PreprocessorDefinitions):_ITERATOR_DEBUG_LEVEL=0
- false
- false
- false
- EnableFastChecks
- MultiThreadedDebugDLL
- false
-
-
- Level3
- EditAndContinue
- true
-
-
- opengl32.lib;user32.lib;gdi32.lib;winmm.lib;advapi32.lib;OpenAL32.lib;libogg.lib;libvorbis.lib;libvorbisfile.lib;Irrlicht.lib;ws2_32.lib;fribidi.lib;pthreadVC2.lib;libcurl_imp.lib;%(AdditionalDependencies)
- $(TargetPath)
- ../../../lib/irrlicht/lib/Win32-visualstudio;../../../dependencies/lib;%(AdditionalLibraryDirectories)
- false
- libcmt.lib;%(IgnoreSpecificDefaultLibraries)
- true
- false
-
-
- false
- Console
-
-
- false
-
-
- MachineX86
- false
-
-
-
-
- Disabled
- false
- ../../../src;../../../lib/bullet/src;../../../lib/enet/include;../../../dependencies/include;../../../lib/irrlicht/include;%(AdditionalIncludeDirectories)
- BT_NO_PROFILE;HAVE_OGGVORBIS;_DEBUG;_CONSOLE;WIN32;NOMINMAX;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;DEBUG;PACKAGE="supertuxkart";_CRTDBG_MAP_ALLOC;ENABLE_BIDI;ADDONS_MANAGER;_WIN64;_IRR_STATIC_LIB_;%(PreprocessorDefinitions)
- false
- false
- EnableFastChecks
- MultiThreadedDebugDLL
- false
-
-
- Level3
- ProgramDatabase
- false
- StreamingSIMDExtensions2
-
-
- opengl32.lib;user32.lib;gdi32.lib;winmm.lib;advapi32.lib;OpenAL32.lib;libogg.lib;libvorbis.lib;libvorbisfile.lib;Irrlicht.lib;ws2_32.lib;libfribidi.lib;pthreadVC2.lib;libcurl.lib;%(AdditionalDependencies)
- $(TargetPath)
- ../../../dependencies/lib;../../../lib/irrlicht/lib/Win64-VisualStudio;%(AdditionalLibraryDirectories)
- false
- libcmt.lib;%(IgnoreSpecificDefaultLibraries)
- true
- false
-
-
- false
- Console
-
-
- false
-
-
- false
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- false
- false
- false
- false
- false
- false
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {54aa44b9-b07b-49da-8b1a-05bbfe8ad5d4}
- false
-
-
- {b0e92b97-089a-4d5b-bf17-77f1bc5daeef}
- false
-
-
-
-
-
+
+
+
+
+ debug
+ Win32
+
+
+ debug
+ x64
+
+
+ Release
+ Win32
+
+
+ Release
+ x64
+
+
+
+ {B1BC2764-1A43-4800-A654-788B0D05EDA2}
+ supertuxkart
+ Win32Proj
+
+
+
+ Application
+ MultiByte
+ v110
+
+
+ Application
+ NotSet
+ v110
+
+
+ Application
+ MultiByte
+ true
+ v110
+
+
+ Application
+ MultiByte
+ true
+ v110
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <_ProjectFileVersion>10.0.30319.1
+ ..\..\../
+ ..\..\../
+ $(Configuration)\
+ $(Configuration)\
+ false
+ false
+ ..\..\../
+ ..\..\../
+ $(Configuration)\
+ $(Configuration)\
+ true
+ true
+ $(ProjectName)_d
+ $(ProjectName)_d
+ C:\Program Files\Microsoft SDKs\Windows\v7.0A\Include;$(IncludePath)
+
+
+
+ true
+ ../../../src;../../../lib/bullet/src;../../../lib/enet/include;../../../dependencies/include;../../../lib/irrlicht/include;%(AdditionalIncludeDirectories)
+ HAVE_OGGVORBIS;NDEBUG;_CONSOLE;WIN32;NOMINMAX;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;BT_NO_PROFILE;PACKAGE="supertuxkart";ENABLE_BIDI;ADDONS_MANAGER;_IRR_STATIC_LIB_;%(PreprocessorDefinitions)
+ MultiThreadedDLL
+
+
+ Level3
+ ProgramDatabase
+
+
+ opengl32.lib;user32.lib;gdi32.lib;winmm.lib;advapi32.lib;OpenAL32.lib;libogg.lib;libvorbis.lib;libvorbisfile.lib;Irrlicht.lib;ws2_32.lib;fribidi.lib;pthreadVC2.lib;libcurl_imp.lib;%(AdditionalDependencies)
+ $(OutDir)/$(ProjectName).exe
+ ../../../dependencies/lib;../../../lib/irrlicht/lib/Win32-visualstudio;%(AdditionalLibraryDirectories)
+ libcmt.lib;%(IgnoreSpecificDefaultLibraries)
+ true
+ Console
+ true
+ true
+ false
+
+
+ MachineX86
+
+
+
+
+ true
+ ../../../src;../../../lib/bullet/src;../../../lib/enet/include;../../../dependencies/include;../../../lib/irrlicht/include;%(AdditionalIncludeDirectories)
+ HAVE_OGGVORBIS;NDEBUG;_CONSOLE;WIN32;NOMINMAX;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;BT_NO_PROFILE;PACKAGE="supertuxkart";ENABLE_BIDI;WIN64;_IRR_STATIC_LIB_;%(PreprocessorDefinitions)
+ MultiThreadedDLL
+ NotUsing
+ Level3
+ ProgramDatabase
+ StreamingSIMDExtensions2
+ true
+
+
+ opengl32.lib;user32.lib;gdi32.lib;winmm.lib;advapi32.lib;OpenAL32.lib;libogg.lib;libvorbis.lib;libvorbisfile.lib;Irrlicht.lib;ws2_32.lib;libfribidi.lib;pthreadVC2.lib;libcurl.lib;%(AdditionalDependencies)
+ $(OutDir)/$(ProjectName).exe
+ ../../../lib/irrlicht/lib/Win64-visualStudio;../../../dependencies/lib;%(AdditionalLibraryDirectories)
+ libcmt.lib;%(IgnoreSpecificDefaultLibraries)
+ true
+ Console
+ true
+ true
+ false
+
+
+
+
+
+
+ Disabled
+ false
+ ../../../src;../../../lib/bullet/src;../../../lib/enet/include;../../../dependencies/include;../../../lib/irrlicht/include;%(AdditionalIncludeDirectories)
+ BT_NO_PROFILE;HAVE_OGGVORBIS;_DEBUG;_CONSOLE;WIN32;NOMINMAX;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;DEBUG;PACKAGE="supertuxkart";_CRTDBG_MAP_ALLOC;ENABLE_BIDI;_IRR_STATIC_LIB_;%(PreprocessorDefinitions):_ITERATOR_DEBUG_LEVEL=0
+ false
+ false
+ false
+ EnableFastChecks
+ MultiThreadedDebugDLL
+ false
+
+
+ Level3
+ EditAndContinue
+ true
+
+
+ opengl32.lib;user32.lib;gdi32.lib;winmm.lib;advapi32.lib;OpenAL32.lib;libogg.lib;libvorbis.lib;libvorbisfile.lib;Irrlicht.lib;ws2_32.lib;fribidi.lib;pthreadVC2.lib;libcurl_imp.lib;%(AdditionalDependencies)
+ $(TargetPath)
+ ../../../lib/irrlicht/lib/Win32-visualstudio;../../../dependencies/lib;%(AdditionalLibraryDirectories)
+ false
+ libcmt.lib;%(IgnoreSpecificDefaultLibraries)
+ true
+ false
+
+
+ false
+ Console
+
+
+ false
+
+
+ MachineX86
+ false
+
+
+
+
+ Disabled
+ false
+ ../../../src;../../../lib/bullet/src;../../../lib/enet/include;../../../dependencies/include;../../../lib/irrlicht/include;%(AdditionalIncludeDirectories)
+ BT_NO_PROFILE;HAVE_OGGVORBIS;_DEBUG;_CONSOLE;WIN32;NOMINMAX;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;DEBUG;PACKAGE="supertuxkart";_CRTDBG_MAP_ALLOC;ENABLE_BIDI;ADDONS_MANAGER;_WIN64;_IRR_STATIC_LIB_;%(PreprocessorDefinitions)
+ false
+ false
+ EnableFastChecks
+ MultiThreadedDebugDLL
+ false
+
+
+ Level3
+ ProgramDatabase
+ false
+ StreamingSIMDExtensions2
+
+
+ opengl32.lib;user32.lib;gdi32.lib;winmm.lib;advapi32.lib;OpenAL32.lib;libogg.lib;libvorbis.lib;libvorbisfile.lib;Irrlicht.lib;ws2_32.lib;libfribidi.lib;pthreadVC2.lib;libcurl.lib;%(AdditionalDependencies)
+ $(TargetPath)
+ ../../../dependencies/lib;../../../lib/irrlicht/lib/Win64-VisualStudio;%(AdditionalLibraryDirectories)
+ false
+ libcmt.lib;%(IgnoreSpecificDefaultLibraries)
+ true
+ false
+
+
+ false
+ Console
+
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ false
+ false
+ false
+ false
+ false
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {54aa44b9-b07b-49da-8b1a-05bbfe8ad5d4}
+ false
+
+
+ {b0e92b97-089a-4d5b-bf17-77f1bc5daeef}
+ false
+
+
+
+
+
\ No newline at end of file
diff --git a/src/ide/vc11/supertuxkart.vcxproj.filters b/src/ide/vc11/supertuxkart.vcxproj.filters
index 8b3824225..bcaf6f285 100644
--- a/src/ide/vc11/supertuxkart.vcxproj.filters
+++ b/src/ide/vc11/supertuxkart.vcxproj.filters
@@ -1,1668 +1,1671 @@
-
-
-
-
- {93995380-89BD-4b04-88EB-625FBE52EBFB}
- h;hpp;hxx;hm;inl;inc;xsd
-
-
- {55621666-34fd-482a-b2a0-077db2794fc5}
-
-
- {386e9299-f42e-4175-8f00-c205aa480876}
-
-
- {865587a4-41b6-4832-a961-2f012204ef4c}
-
-
- {1953a99d-3f65-4efe-93d3-b0adb25f970d}
-
-
- {fa2fbc61-28e7-44cc-830d-7d31019b910c}
-
-
- {b231fec4-a731-46b5-a8cf-1ef8fa0bf7be}
-
-
- {06defe0c-00ba-4c91-b0f4-fe0890362f0f}
-
-
- {9f93fb34-c97b-4108-9cd0-3f844d421e11}
-
-
- {6c09fe56-1df1-4fdc-9023-47887316c0b2}
-
-
- {1298df87-da0e-462e-b074-a496598571d8}
-
-
- {11a7d573-5959-4be8-8a3f-d455d7833333}
-
-
- {d477b64b-eb9c-4059-a647-98f3a2f7203a}
-
-
- {2f186570-85e9-4cea-88dc-0f716c6e141a}
-
-
- {f2f3feeb-648b-4edf-8025-fb86e1a6d9bb}
-
-
- {1ea79cd5-39b0-4228-b002-7bddf4d45fda}
-
-
- {24d03539-463f-4c91-9ea0-6fd4b5f1dde0}
-
-
- {24740454-5060-4191-bc49-7ff560db2aba}
-
-
- {03371ee6-3cf3-4ed8-b69e-21a2d0f70351}
-
-
- {62844994-aa74-4a31-b255-1815884856e2}
-
-
- {79bdc1db-0db0-4d69-9e25-c9404a5ab2ee}
-
-
- {fbc2e0f1-a87f-4205-94b4-2a8805338d2c}
-
-
- {533141f3-f1ce-4815-8e9c-4253fd5e9f5e}
-
-
- {5c9f42c5-1a5b-476b-998f-f84384767684}
-
-
- {8da5c73a-5884-4e8d-818a-20521a66e611}
-
-
- {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
- cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
-
-
- {88b6497f-6336-4d65-b0e3-5fad9ff35ffb}
-
-
- {c4431a49-640d-48e5-9ac7-473955a15283}
-
-
- {6eeebf67-9364-4c48-9e24-e89164897f9e}
-
-
- {3ee2b9d8-e9b8-4af3-a5bf-28ae532ed5cc}
-
-
- {1bda54ec-85a1-4725-8425-e5942887808d}
-
-
- {0f42eff9-e52c-4975-bc4a-52b0310ddb99}
-
-
- {c3be189e-ac78-42f5-b6e2-7193d9b32e80}
-
-
- {b91bda77-4ae6-4d47-8de1-65b8b992251e}
-
-
- {cd929227-595c-45e8-bf99-ab06e6d586d8}
-
-
- {4bb34709-b7d7-4c3b-9f26-e7a26ffd817a}
-
-
- {8d8a1efe-f3d5-4532-8271-101ed960defc}
-
-
- {45a7521f-d7d3-4404-8f6f-62e2b08c8f4c}
-
-
- {07a426a7-14fb-495b-bff3-5a402664e035}
-
-
- {00e74e62-f481-4883-a49f-661a5b3c9d88}
-
-
- {1e496486-52dd-4fe4-9bd0-3ec0f2b280fc}
-
-
- {7d4fb5af-51c8-4073-bdbf-e0420a211096}
-
-
- {7d4c8018-8cb8-4335-b0db-217883ee8954}
-
-
- {29b448e9-cfd5-4024-a3d7-360ad6d89fed}
-
-
- {305929ad-22c9-4dce-8514-2b3ceab47d2b}
-
-
- {02e2a507-6184-43fb-aa71-46ef3fc77a37}
-
-
- {9ea7a6dd-0714-414c-970c-881b61411ef8}
-
-
- {376d4c71-33a2-4def-949e-31bcb5b72812}
-
-
- {5faa19dc-78e6-438e-a2a0-6a489961f098}
-
-
- {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
- rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav
-
-
-
-
- Source Files
-
-
- Source Files
-
-
- Source Files\guiengine
-
-
- Source Files\guiengine
-
-
- Source Files\guiengine
-
-
- Source Files\guiengine
-
-
- Source Files\guiengine
-
-
- Source Files\guiengine
-
-
- Source Files\guiengine
-
-
- Source Files\guiengine
-
-
- Source Files\guiengine
-
-
- Source Files\guiengine
-
-
- Source Files\guiengine
-
-
- Source Files\guiengine
-
-
- Source Files\guiengine\widgets
-
-
- Source Files\guiengine\widgets
-
-
- Source Files\guiengine\widgets
-
-
- Source Files\guiengine\widgets
-
-
- Source Files\guiengine\widgets
-
-
- Source Files\guiengine\widgets
-
-
- Source Files\guiengine\widgets
-
-
- Source Files\guiengine\widgets
-
-
- Source Files\guiengine\widgets
-
-
- Source Files\guiengine\widgets
-
-
- Source Files\guiengine\widgets
-
-
- Source Files\guiengine\widgets
-
-
- Source Files\challenges
-
-
- Source Files\challenges
-
-
- Source Files\challenges
-
-
- Source Files\utils
-
-
- Source Files\utils
-
-
- Source Files\utils
-
-
- Source Files\utils
-
-
- Source Files\utils
-
-
- Source Files\audio
-
-
- Source Files\audio
-
-
- Source Files\audio
-
-
- Source Files\audio
-
-
- Source Files\audio
-
-
- Source Files\audio
-
-
- Source Files\modes
-
-
- Source Files\modes
-
-
- Source Files\modes
-
-
- Source Files\modes
-
-
- Source Files\modes
-
-
- Source Files\modes
-
-
- Source Files\modes
-
-
- Source Files\modes
-
-
- Source Files\items
-
-
- Source Files\items
-
-
- Source Files\items
-
-
- Source Files\items
-
-
- Source Files\items
-
-
- Source Files\items
-
-
- Source Files\items
-
-
- Source Files\items
-
-
- Source Files\items
-
-
- Source Files\items
-
-
- Source Files\items
-
-
- Source Files\items
-
-
- Source Files\physics
-
-
- Source Files\physics
-
-
- Source Files\physics
-
-
- Source Files\physics
-
-
- Source Files\physics
-
-
- Source Files\physics
-
-
- Source Files\karts
-
-
- Source Files\karts
-
-
- Source Files\karts
-
-
- Source Files\karts
-
-
- Source Files\karts
-
-
- Source Files\karts
-
-
- Source Files\karts\controller
-
-
- Source Files\karts\controller
-
-
- Source Files\karts\controller
-
-
- Source Files\karts\controller
-
-
- Source Files\graphics
-
-
- Source Files\graphics
-
-
- Source Files\graphics
-
-
- Source Files\graphics
-
-
- Source Files\graphics
-
-
- Source Files\graphics
-
-
- Source Files\graphics
-
-
- Source Files\graphics
-
-
- Source Files\graphics
-
-
- Source Files\graphics
-
-
- Source Files\graphics
-
-
- Source Files\graphics
-
-
- Source Files\graphics
-
-
- Source Files\graphics
-
-
- Source Files\network
-
-
- Source Files\network
-
-
- Source Files\network
-
-
- Source Files\network
-
-
- Source Files\network
-
-
- Source Files\network
-
-
- Source Files\network
-
-
- Source Files\network
-
-
- Source Files\network
-
-
- Source Files\tracks
-
-
- Source Files\tracks
-
-
- Source Files\tracks
-
-
- Source Files\tracks
-
-
- Source Files\tracks
-
-
- Source Files\tracks
-
-
- Source Files\tracks
-
-
- Source Files\tracks
-
-
- Source Files\tracks
-
-
- Source Files\tracks
-
-
- Source Files\tracks
-
-
- Source Files\tracks
-
-
- Source Files\tracks
-
-
- Source Files\tracks
-
-
- Source Files\tracks
-
-
- Source Files\tracks
-
-
- Source Files\io
-
-
- Source Files\io
-
-
- Source Files\io
-
-
- Source Files\input
-
-
- Source Files\input
-
-
- Source Files\input
-
-
- Source Files\input
-
-
- Source Files\race
-
-
- Source Files\race
-
-
- Source Files\race
-
-
- Source Files\race
-
-
- Source Files\race
-
-
- Source Files\race
-
-
- Source Files\config
-
-
- Source Files\config
-
-
- Source Files\config
-
-
- Source Files\animations
-
-
- Source Files\animations
-
-
- Source Files\animations
-
-
- Source Files\states_screens
-
-
- Source Files\states_screens
-
-
- Source Files\states_screens
-
-
- Source Files\states_screens
-
-
- Source Files\states_screens
-
-
- Source Files\states_screens
-
-
- Source Files\states_screens
-
-
- Source Files\states_screens
-
-
- Source Files\states_screens
-
-
- Source Files\states_screens
-
-
- Source Files\states_screens
-
-
- Source Files\states_screens
-
-
- Source Files\states_screens
-
-
- Source Files\states_screens
-
-
- Source Files\states_screens
-
-
- Source Files\states_screens
-
-
- Source Files\states_screens
-
-
- Source Files\states_screens
-
-
- Source Files\states_screens
-
-
- Source Files\states_screens
-
-
- Source Files\states_screens
-
-
- Source Files\states_screens
-
-
- Source Files\states_screens\dialogs
-
-
- Source Files\states_screens\dialogs
-
-
- Source Files\states_screens\dialogs
-
-
- Source Files\states_screens\dialogs
-
-
- Source Files\states_screens\dialogs
-
-
- Source Files\states_screens\dialogs
-
-
- Source Files\states_screens\dialogs
-
-
- Source Files\states_screens\dialogs
-
-
- Source Files\states_screens\dialogs
-
-
- Source Files\states_screens\dialogs
-
-
- Source Files\addons
-
-
- Source Files\addons
-
-
- Source Files\addons
-
-
- Source Files\addons
-
-
- Source Files\graphics
-
-
- Source Files\physics
-
-
- Source Files\states_screens
-
-
- Source Files\graphics
-
-
- Source Files\graphics
-
-
- Source Files\tinygettext
-
-
- Source Files\tinygettext
-
-
- Source Files\tinygettext
-
-
- Source Files\tinygettext
-
-
- Source Files\tinygettext
-
-
- Source Files\tinygettext
-
-
- Source Files\tinygettext
-
-
- Source Files\tinygettext
-
-
- Source Files\graphics
-
-
- Source Files\states_screens
-
-
- Source Files\guiengine\widgets
-
-
- Source Files\addons
-
-
- Source Files\addons
-
-
- Source Files\items
-
-
- Source Files\utils
-
-
- Source Files\graphics
-
-
- Source Files\items
-
-
- Source Files\graphics
-
-
- Source Files\karts
-
-
- Source Files\tracks
-
-
- Source Files\graphics
-
-
- Source Files\graphics
-
-
- Source Files\utils
-
-
- Source Files
-
-
- Source Files\challenges
-
-
- Source Files\states_screens
-
-
- Source Files\states_screens\dialogs
-
-
- Source Files\modes
-
-
- Source Files\states_screens
-
-
- Source Files\karts
-
-
- Source Files\states_screens\dialogs
-
-
- Source Files\replay
-
-
- Source Files\replay
-
-
- Source Files\replay
-
-
- Source Files\karts
-
-
- Source Files\karts
-
-
- Source Files\karts
-
-
- Source Files\karts
-
-
- Source Files\karts
-
-
- Source Files\karts
-
-
- Source Files\karts
-
-
- Source Files\karts
-
-
- Source Files\modes
-
-
- Source Files\config
-
-
- Source Files\tracks
-
-
- Source Files\graphics
-
-
- Source Files\karts\controller
-
-
- Source Files\modes
-
-
- Source Files\states_screens
-
-
- Source Files\addons
-
-
- Source Files\karts\controller
-
-
- Source Files\states_screens
-
-
- Source Files\tinygettext
-
-
- Source Files\states_screens\dialogs
-
-
- Source Files\utils
-
-
- Source Files\modes
-
-
- Source Files\modes
-
-
- Source Files\modes
-
-
- Source Files\states_screens
-
-
- Source Files\tracks
-
-
- Source Files\tracks
-
-
- Source Files\input
-
-
- Source Files
-
-
-
-
- Header Files
-
-
- Header Files\guiengine
-
-
- Header Files\guiengine
-
-
- Header Files\guiengine
-
-
- Header Files\guiengine
-
-
- Header Files\guiengine
-
-
- Header Files\guiengine
-
-
- Header Files\guiengine
-
-
- Header Files\guiengine
-
-
- Header Files\guiengine
-
-
- Header Files\guiengine
-
-
- Header Files\guiengine
-
-
- Header Files\guiengine\widgets
-
-
- Header Files\guiengine\widgets
-
-
- Header Files\guiengine\widgets
-
-
- Header Files\guiengine\widgets
-
-
- Header Files\guiengine\widgets
-
-
- Header Files\guiengine\widgets
-
-
- Header Files\guiengine\widgets
-
-
- Header Files\guiengine\widgets
-
-
- Header Files\guiengine\widgets
-
-
- Header Files\guiengine\widgets
-
-
- Header Files\guiengine\widgets
-
-
- Header Files\guiengine\widgets
-
-
- Header Files\challenges
-
-
- Header Files\challenges
-
-
- Header Files\challenges
-
-
- Header Files\network
-
-
- Header Files\network
-
-
- Header Files\network
-
-
- Header Files\network
-
-
- Header Files\network
-
-
- Header Files\network
-
-
- Header Files\network
-
-
- Header Files\network
-
-
- Header Files\network
-
-
- Header Files\network
-
-
- Header Files\network
-
-
- Header Files\network
-
-
- Header Files\network
-
-
- Header Files\network
-
-
- Header Files\network
-
-
- Header Files\network
-
-
- Header Files\network
-
-
- Header Files\network
-
-
- Header Files\network
-
-
- Header Files\utils
-
-
- Header Files\utils
-
-
- Header Files\utils
-
-
- Header Files\utils
-
-
- Header Files\utils
-
-
- Header Files\utils
-
-
- Header Files\utils
-
-
- Header Files\utils
-
-
- Header Files\audio
-
-
- Header Files\audio
-
-
- Header Files\audio
-
-
- Header Files\audio
-
-
- Header Files\audio
-
-
- Header Files\audio
-
-
- Header Files\audio
-
-
- Header Files\audio
-
-
- Header Files\modes
-
-
- Header Files\modes
-
-
- Header Files\modes
-
-
- Header Files\modes
-
-
- Header Files\modes
-
-
- Header Files\modes
-
-
- Header Files\modes
-
-
- Header Files\modes
-
-
- Header Files\items
-
-
- Header Files\items
-
-
- Header Files\items
-
-
- Header Files\items
-
-
- Header Files\items
-
-
- Header Files\items
-
-
- Header Files\items
-
-
- Header Files\items
-
-
- Header Files\items
-
-
- Header Files\items
-
-
- Header Files\items
-
-
- Header Files\items
-
-
- Header Files\physics
-
-
- Header Files\physics
-
-
- Header Files\physics
-
-
- Header Files\physics
-
-
- Header Files\physics
-
-
- Header Files\physics
-
-
- Header Files\physics
-
-
- Header Files\physics
-
-
- Header Files\karts
-
-
- Header Files\karts
-
-
- Header Files\karts
-
-
- Header Files\karts
-
-
- Header Files\karts
-
-
- Header Files\karts
-
-
- Header Files\karts
-
-
- Header Files\karts\controller
-
-
- Header Files\karts\controller
-
-
- Header Files\karts\controller
-
-
- Header Files\karts\controller
-
-
- Header Files\graphics
-
-
- Header Files\graphics
-
-
- Header Files\graphics
-
-
- Header Files\graphics
-
-
- Header Files\graphics
-
-
- Header Files\graphics
-
-
- Header Files\graphics
-
-
- Header Files\graphics
-
-
- Header Files\graphics
-
-
- Header Files\graphics
-
-
- Header Files\graphics
-
-
- Header Files\graphics
-
-
- Header Files\graphics
-
-
- Header Files\graphics
-
-
- Header Files\tracks
-
-
- Header Files\tracks
-
-
- Header Files\tracks
-
-
- Header Files\tracks
-
-
- Header Files\tracks
-
-
- Header Files\tracks
-
-
- Header Files\tracks
-
-
- Header Files\tracks
-
-
- Header Files\tracks
-
-
- Header Files\tracks
-
-
- Header Files\tracks
-
-
- Header Files\tracks
-
-
- Header Files\tracks
-
-
- Header Files\tracks
-
-
- Header Files\tracks
-
-
- Header Files\tracks
-
-
- Header Files\io
-
-
- Header Files\io
-
-
- Header Files\io
-
-
- Header Files\input
-
-
- Header Files\input
-
-
- Header Files\input
-
-
- Header Files\input
-
-
- Header Files\input
-
-
- Header Files\race
-
-
- Header Files\race
-
-
- Header Files\race
-
-
- Header Files\race
-
-
- Header Files\race
-
-
- Header Files\race
-
-
- Header Files\config
-
-
- Header Files\config
-
-
- Header Files\config
-
-
- Header Files\config
-
-
- Header Files\animations
-
-
- Header Files\animations
-
-
- Header Files\animations
-
-
- Header Files\states_screens
-
-
- Header Files\states_screens
-
-
- Header Files\states_screens
-
-
- Header Files\states_screens
-
-
- Header Files\states_screens
-
-
- Header Files\states_screens
-
-
- Header Files\states_screens
-
-
- Header Files\states_screens
-
-
- Header Files\states_screens
-
-
- Header Files\states_screens
-
-
- Header Files\states_screens
-
-
- Header Files\states_screens
-
-
- Header Files\states_screens
-
-
- Header Files\states_screens
-
-
- Header Files\states_screens
-
-
- Header Files\states_screens
-
-
- Header Files\states_screens
-
-
- Header Files\states_screens
-
-
- Header Files\states_screens
-
-
- Header Files\states_screens
-
-
- Header Files\states_screens
-
-
- Header Files\states_screens
-
-
- Header Files\states_screens
-
-
- Header Files\states_screens\dialogs
-
-
- Header Files\states_screens\dialogs
-
-
- Header Files\states_screens\dialogs
-
-
- Header Files\states_screens\dialogs
-
-
- Header Files\states_screens\dialogs
-
-
- Header Files\states_screens\dialogs
-
-
- Header Files\states_screens\dialogs
-
-
- Header Files\states_screens\dialogs
-
-
- Header Files\states_screens\dialogs
-
-
- Header Files\states_screens\dialogs
-
-
- Header Files\addons
-
-
- Header Files\addons
-
-
- Header Files\addons
-
-
- Header Files\addons
-
-
- Header Files\graphics
-
-
- Header Files\physics
-
-
- Header Files\states_screens
-
-
- Header Files\graphics
-
-
- Header Files\graphics
-
-
- Header Files\tinygettext
-
-
- Header Files\tinygettext
-
-
- Header Files\tinygettext
-
-
- Header Files\tinygettext
-
-
- Header Files\tinygettext
-
-
- Header Files\tinygettext
-
-
- Header Files\tinygettext
-
-
- Header Files\tinygettext
-
-
- Header Files\tinygettext
-
-
- Header Files\tinygettext
-
-
- Header Files\utils\utf8
-
-
- Header Files\utils\utf8
-
-
- Header Files\utils\utf8
-
-
- Header Files\utils
-
-
- Header Files\graphics
-
-
- Header Files\states_screens
-
-
- Header Files\utils
-
-
- Header Files\guiengine\widgets
-
-
- Header Files\addons
-
-
- Header Files\addons
-
-
- Header Files\items
-
-
- Header Files\utils
-
-
- Header Files\graphics
-
-
- Header Files\items
-
-
- Header Files\graphics
-
-
- Header Files\karts
-
-
- Header Files\tracks
-
-
- Header Files\graphics
-
-
- Header Files\graphics
-
-
- Header Files\graphics
-
-
- Header Files\utils
-
-
- Header Files
-
-
- Header Files\challenges
-
-
- Header Files\states_screens
-
-
- Header Files\states_screens\dialogs
-
-
- Header Files\modes
-
-
- Header Files\states_screens
-
-
- Header Files\karts
-
-
- Header Files\states_screens\dialogs
-
-
- Header Files\replay
-
-
- Header Files\replay
-
-
- Header Files\replay
-
-
- Header Files\karts
-
-
- Header Files\karts
-
-
- Header Files\karts
-
-
- Header Files\karts
-
-
- Header Files\karts
-
-
- Header Files\karts
-
-
- Header Files\karts
-
-
- Header Files\karts
-
-
- Header Files\modes
-
-
- Header Files\tracks
-
-
- Header Files\utils
-
-
- Header Files\graphics
-
-
- Header Files\karts\controller
-
-
- Header Files\modes
-
-
- Header Files\states_screens
-
-
- Header Files\addons
-
-
- Header Files\karts\controller
-
-
- Header Files\utils
-
-
- Header Files\tinygettext
-
-
- Header Files\states_screens\dialogs
-
-
- Header Files\utils
-
-
- Header Files\modes
-
-
- Header Files\modes
-
-
- Header Files\modes
-
-
- Header Files\states_screens
-
-
- Header Files\tracks
-
-
- Header Files\tracks
-
-
- Header Files\input
-
-
+
+
+
+
+ {93995380-89BD-4b04-88EB-625FBE52EBFB}
+ h;hpp;hxx;hm;inl;inc;xsd
+
+
+ {55621666-34fd-482a-b2a0-077db2794fc5}
+
+
+ {386e9299-f42e-4175-8f00-c205aa480876}
+
+
+ {865587a4-41b6-4832-a961-2f012204ef4c}
+
+
+ {1953a99d-3f65-4efe-93d3-b0adb25f970d}
+
+
+ {fa2fbc61-28e7-44cc-830d-7d31019b910c}
+
+
+ {b231fec4-a731-46b5-a8cf-1ef8fa0bf7be}
+
+
+ {06defe0c-00ba-4c91-b0f4-fe0890362f0f}
+
+
+ {9f93fb34-c97b-4108-9cd0-3f844d421e11}
+
+
+ {6c09fe56-1df1-4fdc-9023-47887316c0b2}
+
+
+ {1298df87-da0e-462e-b074-a496598571d8}
+
+
+ {11a7d573-5959-4be8-8a3f-d455d7833333}
+
+
+ {d477b64b-eb9c-4059-a647-98f3a2f7203a}
+
+
+ {2f186570-85e9-4cea-88dc-0f716c6e141a}
+
+
+ {f2f3feeb-648b-4edf-8025-fb86e1a6d9bb}
+
+
+ {1ea79cd5-39b0-4228-b002-7bddf4d45fda}
+
+
+ {24d03539-463f-4c91-9ea0-6fd4b5f1dde0}
+
+
+ {24740454-5060-4191-bc49-7ff560db2aba}
+
+
+ {03371ee6-3cf3-4ed8-b69e-21a2d0f70351}
+
+
+ {62844994-aa74-4a31-b255-1815884856e2}
+
+
+ {79bdc1db-0db0-4d69-9e25-c9404a5ab2ee}
+
+
+ {fbc2e0f1-a87f-4205-94b4-2a8805338d2c}
+
+
+ {533141f3-f1ce-4815-8e9c-4253fd5e9f5e}
+
+
+ {5c9f42c5-1a5b-476b-998f-f84384767684}
+
+
+ {8da5c73a-5884-4e8d-818a-20521a66e611}
+
+
+ {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
+ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
+
+
+ {88b6497f-6336-4d65-b0e3-5fad9ff35ffb}
+
+
+ {c4431a49-640d-48e5-9ac7-473955a15283}
+
+
+ {6eeebf67-9364-4c48-9e24-e89164897f9e}
+
+
+ {3ee2b9d8-e9b8-4af3-a5bf-28ae532ed5cc}
+
+
+ {1bda54ec-85a1-4725-8425-e5942887808d}
+
+
+ {0f42eff9-e52c-4975-bc4a-52b0310ddb99}
+
+
+ {c3be189e-ac78-42f5-b6e2-7193d9b32e80}
+
+
+ {b91bda77-4ae6-4d47-8de1-65b8b992251e}
+
+
+ {cd929227-595c-45e8-bf99-ab06e6d586d8}
+
+
+ {4bb34709-b7d7-4c3b-9f26-e7a26ffd817a}
+
+
+ {8d8a1efe-f3d5-4532-8271-101ed960defc}
+
+
+ {45a7521f-d7d3-4404-8f6f-62e2b08c8f4c}
+
+
+ {07a426a7-14fb-495b-bff3-5a402664e035}
+
+
+ {00e74e62-f481-4883-a49f-661a5b3c9d88}
+
+
+ {1e496486-52dd-4fe4-9bd0-3ec0f2b280fc}
+
+
+ {7d4fb5af-51c8-4073-bdbf-e0420a211096}
+
+
+ {7d4c8018-8cb8-4335-b0db-217883ee8954}
+
+
+ {29b448e9-cfd5-4024-a3d7-360ad6d89fed}
+
+
+ {305929ad-22c9-4dce-8514-2b3ceab47d2b}
+
+
+ {02e2a507-6184-43fb-aa71-46ef3fc77a37}
+
+
+ {9ea7a6dd-0714-414c-970c-881b61411ef8}
+
+
+ {376d4c71-33a2-4def-949e-31bcb5b72812}
+
+
+ {5faa19dc-78e6-438e-a2a0-6a489961f098}
+
+
+ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
+ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav
+
+
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files\guiengine
+
+
+ Source Files\guiengine
+
+
+ Source Files\guiengine
+
+
+ Source Files\guiengine
+
+
+ Source Files\guiengine
+
+
+ Source Files\guiengine
+
+
+ Source Files\guiengine
+
+
+ Source Files\guiengine
+
+
+ Source Files\guiengine
+
+
+ Source Files\guiengine
+
+
+ Source Files\guiengine
+
+
+ Source Files\guiengine
+
+
+ Source Files\guiengine\widgets
+
+
+ Source Files\guiengine\widgets
+
+
+ Source Files\guiengine\widgets
+
+
+ Source Files\guiengine\widgets
+
+
+ Source Files\guiengine\widgets
+
+
+ Source Files\guiengine\widgets
+
+
+ Source Files\guiengine\widgets
+
+
+ Source Files\guiengine\widgets
+
+
+ Source Files\guiengine\widgets
+
+
+ Source Files\guiengine\widgets
+
+
+ Source Files\guiengine\widgets
+
+
+ Source Files\guiengine\widgets
+
+
+ Source Files\challenges
+
+
+ Source Files\challenges
+
+
+ Source Files\challenges
+
+
+ Source Files\utils
+
+
+ Source Files\utils
+
+
+ Source Files\utils
+
+
+ Source Files\utils
+
+
+ Source Files\utils
+
+
+ Source Files\audio
+
+
+ Source Files\audio
+
+
+ Source Files\audio
+
+
+ Source Files\audio
+
+
+ Source Files\audio
+
+
+ Source Files\audio
+
+
+ Source Files\modes
+
+
+ Source Files\modes
+
+
+ Source Files\modes
+
+
+ Source Files\modes
+
+
+ Source Files\modes
+
+
+ Source Files\modes
+
+
+ Source Files\modes
+
+
+ Source Files\modes
+
+
+ Source Files\items
+
+
+ Source Files\items
+
+
+ Source Files\items
+
+
+ Source Files\items
+
+
+ Source Files\items
+
+
+ Source Files\items
+
+
+ Source Files\items
+
+
+ Source Files\items
+
+
+ Source Files\items
+
+
+ Source Files\items
+
+
+ Source Files\items
+
+
+ Source Files\items
+
+
+ Source Files\physics
+
+
+ Source Files\physics
+
+
+ Source Files\physics
+
+
+ Source Files\physics
+
+
+ Source Files\physics
+
+
+ Source Files\physics
+
+
+ Source Files\karts
+
+
+ Source Files\karts
+
+
+ Source Files\karts
+
+
+ Source Files\karts
+
+
+ Source Files\karts
+
+
+ Source Files\karts
+
+
+ Source Files\karts\controller
+
+
+ Source Files\karts\controller
+
+
+ Source Files\karts\controller
+
+
+ Source Files\karts\controller
+
+
+ Source Files\graphics
+
+
+ Source Files\graphics
+
+
+ Source Files\graphics
+
+
+ Source Files\graphics
+
+
+ Source Files\graphics
+
+
+ Source Files\graphics
+
+
+ Source Files\graphics
+
+
+ Source Files\graphics
+
+
+ Source Files\graphics
+
+
+ Source Files\graphics
+
+
+ Source Files\graphics
+
+
+ Source Files\graphics
+
+
+ Source Files\graphics
+
+
+ Source Files\graphics
+
+
+ Source Files\network
+
+
+ Source Files\network
+
+
+ Source Files\network
+
+
+ Source Files\network
+
+
+ Source Files\network
+
+
+ Source Files\network
+
+
+ Source Files\network
+
+
+ Source Files\network
+
+
+ Source Files\network
+
+
+ Source Files\tracks
+
+
+ Source Files\tracks
+
+
+ Source Files\tracks
+
+
+ Source Files\tracks
+
+
+ Source Files\tracks
+
+
+ Source Files\tracks
+
+
+ Source Files\tracks
+
+
+ Source Files\tracks
+
+
+ Source Files\tracks
+
+
+ Source Files\tracks
+
+
+ Source Files\tracks
+
+
+ Source Files\tracks
+
+
+ Source Files\tracks
+
+
+ Source Files\tracks
+
+
+ Source Files\tracks
+
+
+ Source Files\tracks
+
+
+ Source Files\io
+
+
+ Source Files\io
+
+
+ Source Files\io
+
+
+ Source Files\input
+
+
+ Source Files\input
+
+
+ Source Files\input
+
+
+ Source Files\input
+
+
+ Source Files\race
+
+
+ Source Files\race
+
+
+ Source Files\race
+
+
+ Source Files\race
+
+
+ Source Files\race
+
+
+ Source Files\race
+
+
+ Source Files\config
+
+
+ Source Files\config
+
+
+ Source Files\config
+
+
+ Source Files\animations
+
+
+ Source Files\animations
+
+
+ Source Files\animations
+
+
+ Source Files\states_screens
+
+
+ Source Files\states_screens
+
+
+ Source Files\states_screens
+
+
+ Source Files\states_screens
+
+
+ Source Files\states_screens
+
+
+ Source Files\states_screens
+
+
+ Source Files\states_screens
+
+
+ Source Files\states_screens
+
+
+ Source Files\states_screens
+
+
+ Source Files\states_screens
+
+
+ Source Files\states_screens
+
+
+ Source Files\states_screens
+
+
+ Source Files\states_screens
+
+
+ Source Files\states_screens
+
+
+ Source Files\states_screens
+
+
+ Source Files\states_screens
+
+
+ Source Files\states_screens
+
+
+ Source Files\states_screens
+
+
+ Source Files\states_screens
+
+
+ Source Files\states_screens
+
+
+ Source Files\states_screens
+
+
+ Source Files\states_screens
+
+
+ Source Files\states_screens\dialogs
+
+
+ Source Files\states_screens\dialogs
+
+
+ Source Files\states_screens\dialogs
+
+
+ Source Files\states_screens\dialogs
+
+
+ Source Files\states_screens\dialogs
+
+
+ Source Files\states_screens\dialogs
+
+
+ Source Files\states_screens\dialogs
+
+
+ Source Files\states_screens\dialogs
+
+
+ Source Files\states_screens\dialogs
+
+
+ Source Files\states_screens\dialogs
+
+
+ Source Files\addons
+
+
+ Source Files\addons
+
+
+ Source Files\addons
+
+
+ Source Files\addons
+
+
+ Source Files\graphics
+
+
+ Source Files\physics
+
+
+ Source Files\states_screens
+
+
+ Source Files\graphics
+
+
+ Source Files\graphics
+
+
+ Source Files\tinygettext
+
+
+ Source Files\tinygettext
+
+
+ Source Files\tinygettext
+
+
+ Source Files\tinygettext
+
+
+ Source Files\tinygettext
+
+
+ Source Files\tinygettext
+
+
+ Source Files\tinygettext
+
+
+ Source Files\tinygettext
+
+
+ Source Files\graphics
+
+
+ Source Files\states_screens
+
+
+ Source Files\guiengine\widgets
+
+
+ Source Files\addons
+
+
+ Source Files\addons
+
+
+ Source Files\items
+
+
+ Source Files\utils
+
+
+ Source Files\graphics
+
+
+ Source Files\items
+
+
+ Source Files\graphics
+
+
+ Source Files\karts
+
+
+ Source Files\tracks
+
+
+ Source Files\graphics
+
+
+ Source Files\graphics
+
+
+ Source Files\utils
+
+
+ Source Files
+
+
+ Source Files\challenges
+
+
+ Source Files\states_screens
+
+
+ Source Files\states_screens\dialogs
+
+
+ Source Files\modes
+
+
+ Source Files\states_screens
+
+
+ Source Files\karts
+
+
+ Source Files\states_screens\dialogs
+
+
+ Source Files\replay
+
+
+ Source Files\replay
+
+
+ Source Files\replay
+
+
+ Source Files\karts
+
+
+ Source Files\karts
+
+
+ Source Files\karts
+
+
+ Source Files\karts
+
+
+ Source Files\karts
+
+
+ Source Files\karts
+
+
+ Source Files\karts
+
+
+ Source Files\karts
+
+
+ Source Files\modes
+
+
+ Source Files\config
+
+
+ Source Files\tracks
+
+
+ Source Files\graphics
+
+
+ Source Files\karts\controller
+
+
+ Source Files\modes
+
+
+ Source Files\states_screens
+
+
+ Source Files\addons
+
+
+ Source Files\karts\controller
+
+
+ Source Files\states_screens
+
+
+ Source Files\tinygettext
+
+
+ Source Files\states_screens\dialogs
+
+
+ Source Files\utils
+
+
+ Source Files\modes
+
+
+ Source Files\modes
+
+
+ Source Files\modes
+
+
+ Source Files\states_screens
+
+
+ Source Files\tracks
+
+
+ Source Files\tracks
+
+
+ Source Files\input
+
+
+ Source Files
+
+
+ Source Files\guiengine\widgets
+
+
+
+
+ Header Files
+
+
+ Header Files\guiengine
+
+
+ Header Files\guiengine
+
+
+ Header Files\guiengine
+
+
+ Header Files\guiengine
+
+
+ Header Files\guiengine
+
+
+ Header Files\guiengine
+
+
+ Header Files\guiengine
+
+
+ Header Files\guiengine
+
+
+ Header Files\guiengine
+
+
+ Header Files\guiengine
+
+
+ Header Files\guiengine
+
+
+ Header Files\guiengine\widgets
+
+
+ Header Files\guiengine\widgets
+
+
+ Header Files\guiengine\widgets
+
+
+ Header Files\guiengine\widgets
+
+
+ Header Files\guiengine\widgets
+
+
+ Header Files\guiengine\widgets
+
+
+ Header Files\guiengine\widgets
+
+
+ Header Files\guiengine\widgets
+
+
+ Header Files\guiengine\widgets
+
+
+ Header Files\guiengine\widgets
+
+
+ Header Files\guiengine\widgets
+
+
+ Header Files\guiengine\widgets
+
+
+ Header Files\challenges
+
+
+ Header Files\challenges
+
+
+ Header Files\challenges
+
+
+ Header Files\network
+
+
+ Header Files\network
+
+
+ Header Files\network
+
+
+ Header Files\network
+
+
+ Header Files\network
+
+
+ Header Files\network
+
+
+ Header Files\network
+
+
+ Header Files\network
+
+
+ Header Files\network
+
+
+ Header Files\network
+
+
+ Header Files\network
+
+
+ Header Files\network
+
+
+ Header Files\network
+
+
+ Header Files\network
+
+
+ Header Files\network
+
+
+ Header Files\network
+
+
+ Header Files\network
+
+
+ Header Files\network
+
+
+ Header Files\network
+
+
+ Header Files\utils
+
+
+ Header Files\utils
+
+
+ Header Files\utils
+
+
+ Header Files\utils
+
+
+ Header Files\utils
+
+
+ Header Files\utils
+
+
+ Header Files\utils
+
+
+ Header Files\utils
+
+
+ Header Files\audio
+
+
+ Header Files\audio
+
+
+ Header Files\audio
+
+
+ Header Files\audio
+
+
+ Header Files\audio
+
+
+ Header Files\audio
+
+
+ Header Files\audio
+
+
+ Header Files\audio
+
+
+ Header Files\modes
+
+
+ Header Files\modes
+
+
+ Header Files\modes
+
+
+ Header Files\modes
+
+
+ Header Files\modes
+
+
+ Header Files\modes
+
+
+ Header Files\modes
+
+
+ Header Files\modes
+
+
+ Header Files\items
+
+
+ Header Files\items
+
+
+ Header Files\items
+
+
+ Header Files\items
+
+
+ Header Files\items
+
+
+ Header Files\items
+
+
+ Header Files\items
+
+
+ Header Files\items
+
+
+ Header Files\items
+
+
+ Header Files\items
+
+
+ Header Files\items
+
+
+ Header Files\items
+
+
+ Header Files\physics
+
+
+ Header Files\physics
+
+
+ Header Files\physics
+
+
+ Header Files\physics
+
+
+ Header Files\physics
+
+
+ Header Files\physics
+
+
+ Header Files\physics
+
+
+ Header Files\physics
+
+
+ Header Files\karts
+
+
+ Header Files\karts
+
+
+ Header Files\karts
+
+
+ Header Files\karts
+
+
+ Header Files\karts
+
+
+ Header Files\karts
+
+
+ Header Files\karts
+
+
+ Header Files\karts\controller
+
+
+ Header Files\karts\controller
+
+
+ Header Files\karts\controller
+
+
+ Header Files\karts\controller
+
+
+ Header Files\graphics
+
+
+ Header Files\graphics
+
+
+ Header Files\graphics
+
+
+ Header Files\graphics
+
+
+ Header Files\graphics
+
+
+ Header Files\graphics
+
+
+ Header Files\graphics
+
+
+ Header Files\graphics
+
+
+ Header Files\graphics
+
+
+ Header Files\graphics
+
+
+ Header Files\graphics
+
+
+ Header Files\graphics
+
+
+ Header Files\graphics
+
+
+ Header Files\graphics
+
+
+ Header Files\tracks
+
+
+ Header Files\tracks
+
+
+ Header Files\tracks
+
+
+ Header Files\tracks
+
+
+ Header Files\tracks
+
+
+ Header Files\tracks
+
+
+ Header Files\tracks
+
+
+ Header Files\tracks
+
+
+ Header Files\tracks
+
+
+ Header Files\tracks
+
+
+ Header Files\tracks
+
+
+ Header Files\tracks
+
+
+ Header Files\tracks
+
+
+ Header Files\tracks
+
+
+ Header Files\tracks
+
+
+ Header Files\tracks
+
+
+ Header Files\io
+
+
+ Header Files\io
+
+
+ Header Files\io
+
+
+ Header Files\input
+
+
+ Header Files\input
+
+
+ Header Files\input
+
+
+ Header Files\input
+
+
+ Header Files\input
+
+
+ Header Files\race
+
+
+ Header Files\race
+
+
+ Header Files\race
+
+
+ Header Files\race
+
+
+ Header Files\race
+
+
+ Header Files\race
+
+
+ Header Files\config
+
+
+ Header Files\config
+
+
+ Header Files\config
+
+
+ Header Files\config
+
+
+ Header Files\animations
+
+
+ Header Files\animations
+
+
+ Header Files\animations
+
+
+ Header Files\states_screens
+
+
+ Header Files\states_screens
+
+
+ Header Files\states_screens
+
+
+ Header Files\states_screens
+
+
+ Header Files\states_screens
+
+
+ Header Files\states_screens
+
+
+ Header Files\states_screens
+
+
+ Header Files\states_screens
+
+
+ Header Files\states_screens
+
+
+ Header Files\states_screens
+
+
+ Header Files\states_screens
+
+
+ Header Files\states_screens
+
+
+ Header Files\states_screens
+
+
+ Header Files\states_screens
+
+
+ Header Files\states_screens
+
+
+ Header Files\states_screens
+
+
+ Header Files\states_screens
+
+
+ Header Files\states_screens
+
+
+ Header Files\states_screens
+
+
+ Header Files\states_screens
+
+
+ Header Files\states_screens
+
+
+ Header Files\states_screens
+
+
+ Header Files\states_screens
+
+
+ Header Files\states_screens\dialogs
+
+
+ Header Files\states_screens\dialogs
+
+
+ Header Files\states_screens\dialogs
+
+
+ Header Files\states_screens\dialogs
+
+
+ Header Files\states_screens\dialogs
+
+
+ Header Files\states_screens\dialogs
+
+
+ Header Files\states_screens\dialogs
+
+
+ Header Files\states_screens\dialogs
+
+
+ Header Files\states_screens\dialogs
+
+
+ Header Files\states_screens\dialogs
+
+
+ Header Files\addons
+
+
+ Header Files\addons
+
+
+ Header Files\addons
+
+
+ Header Files\addons
+
+
+ Header Files\graphics
+
+
+ Header Files\physics
+
+
+ Header Files\states_screens
+
+
+ Header Files\graphics
+
+
+ Header Files\graphics
+
+
+ Header Files\tinygettext
+
+
+ Header Files\tinygettext
+
+
+ Header Files\tinygettext
+
+
+ Header Files\tinygettext
+
+
+ Header Files\tinygettext
+
+
+ Header Files\tinygettext
+
+
+ Header Files\tinygettext
+
+
+ Header Files\tinygettext
+
+
+ Header Files\tinygettext
+
+
+ Header Files\tinygettext
+
+
+ Header Files\utils\utf8
+
+
+ Header Files\utils\utf8
+
+
+ Header Files\utils\utf8
+
+
+ Header Files\utils
+
+
+ Header Files\graphics
+
+
+ Header Files\states_screens
+
+
+ Header Files\utils
+
+
+ Header Files\guiengine\widgets
+
+
+ Header Files\addons
+
+
+ Header Files\addons
+
+
+ Header Files\items
+
+
+ Header Files\utils
+
+
+ Header Files\graphics
+
+
+ Header Files\items
+
+
+ Header Files\graphics
+
+
+ Header Files\karts
+
+
+ Header Files\tracks
+
+
+ Header Files\graphics
+
+
+ Header Files\graphics
+
+
+ Header Files\graphics
+
+
+ Header Files\utils
+
+
+ Header Files
+
+
+ Header Files\challenges
+
+
+ Header Files\states_screens
+
+
+ Header Files\states_screens\dialogs
+
+
+ Header Files\modes
+
+
+ Header Files\states_screens
+
+
+ Header Files\karts
+
+
+ Header Files\states_screens\dialogs
+
+
+ Header Files\replay
+
+
+ Header Files\replay
+
+
+ Header Files\replay
+
+
+ Header Files\karts
+
+
+ Header Files\karts
+
+
+ Header Files\karts
+
+
+ Header Files\karts
+
+
+ Header Files\karts
+
+
+ Header Files\karts
+
+
+ Header Files\karts
+
+
+ Header Files\karts
+
+
+ Header Files\modes
+
+
+ Header Files\tracks
+
+
+ Header Files\utils
+
+
+ Header Files\graphics
+
+
+ Header Files\karts\controller
+
+
+ Header Files\modes
+
+
+ Header Files\states_screens
+
+
+ Header Files\addons
+
+
+ Header Files\karts\controller
+
+
+ Header Files\utils
+
+
+ Header Files\tinygettext
+
+
+ Header Files\states_screens\dialogs
+
+
+ Header Files\utils
+
+
+ Header Files\modes
+
+
+ Header Files\modes
+
+
+ Header Files\modes
+
+
+ Header Files\states_screens
+
+
+ Header Files\tracks
+
+
+ Header Files\tracks
+
+
+ Header Files\input
+
+
\ No newline at end of file
diff --git a/src/ide/vc9/supertuxkart.vcproj b/src/ide/vc9/supertuxkart.vcproj
index df78db14a..fdfe7dc1c 100644
--- a/src/ide/vc9/supertuxkart.vcproj
+++ b/src/ide/vc9/supertuxkart.vcproj
@@ -692,6 +692,10 @@
RelativePath="..\..\guiengine\widgets\progress_bar_widget.cpp"
>
+
+
@@ -1738,6 +1742,10 @@
RelativePath="..\..\guiengine\widgets\progress_bar_widget.hpp"
>
+
+
diff --git a/src/input/input_manager.cpp b/src/input/input_manager.cpp
index 534a4fb2c..4ed6bc650 100644
--- a/src/input/input_manager.cpp
+++ b/src/input/input_manager.cpp
@@ -164,7 +164,12 @@ void InputManager::handleStaticAction(int key, int value)
if (UserConfigParams::m_artist_debug_mode && world)
{
AbstractKart* kart = world->getLocalPlayerKart(0);
- kart->setPowerup(PowerupManager::POWERUP_BUBBLEGUM, 10000);
+
+ if (control_is_pressed)
+ kart->setPowerup(PowerupManager::POWERUP_SWATTER, 10000);
+ else
+ kart->setPowerup(PowerupManager::POWERUP_RUBBERBALL, 10000);
+
#ifdef FORCE_RESCUE_ON_FIRST_KART
// Can be useful for debugging places where the AI gets into
// a rescue loop: rescue, drive, crash, rescue to same place
@@ -176,6 +181,7 @@ void InputManager::handleStaticAction(int key, int value)
if (UserConfigParams::m_artist_debug_mode && world)
{
AbstractKart* kart = world->getLocalPlayerKart(0);
+
kart->setPowerup(PowerupManager::POWERUP_PLUNGER, 10000);
}
break;
diff --git a/src/items/attachment.cpp b/src/items/attachment.cpp
index e974de71f..1bbbdf2cc 100644
--- a/src/items/attachment.cpp
+++ b/src/items/attachment.cpp
@@ -222,7 +222,7 @@ void Attachment::hitBanana(Item *item, int new_attachment)
case ATTACH_BOMB:
{
add_a_new_item = false;
- HitEffect *he = new Explosion(m_kart->getXYZ(), "explosion");
+ HitEffect *he = new Explosion(m_kart->getXYZ(), "explosion", "explosion_bomb.xml");
if(m_kart->getController()->isPlayerController())
he->setPlayerKartHit();
projectile_manager->addHitEffect(he);
@@ -397,7 +397,7 @@ void Attachment::update(float dt)
}
if(m_time_left<=0.0)
{
- HitEffect *he = new Explosion(m_kart->getXYZ(), "explosion");
+ HitEffect *he = new Explosion(m_kart->getXYZ(), "explosion", "explosion_bomb.xml");
if(m_kart->getController()->isPlayerController())
he->setPlayerKartHit();
projectile_manager->addHitEffect(he);
diff --git a/src/items/flyable.cpp b/src/items/flyable.cpp
index c46496c16..d0116415d 100644
--- a/src/items/flyable.cpp
+++ b/src/items/flyable.cpp
@@ -512,7 +512,7 @@ void Flyable::explode(AbstractKart *kart_hit, PhysicalObject *object,
*/
HitEffect* Flyable::getHitEffect() const
{
- return new Explosion(getXYZ(), "explosion");
+ return new Explosion(getXYZ(), "explosion", "explosion_cake.xml");
} // getHitEffect
/* EOF */
diff --git a/src/items/item.cpp b/src/items/item.cpp
index e31bf1c2f..0713fa85a 100644
--- a/src/items/item.cpp
+++ b/src/items/item.cpp
@@ -115,7 +115,7 @@ void Item::initItem(ItemType type, const Vec3 &xyz)
switch(m_type)
{
case ITEM_BUBBLEGUM:
- m_disappear_counter = stk_config->m_bubble_gum_counter; break;
+ m_disappear_counter = stk_config->m_bubblegum_counter; break;
case ITEM_EASTER_EGG:
m_disappear_counter = -1; break;
default:
@@ -247,7 +247,7 @@ void Item::reset()
switch(m_type)
{
case ITEM_BUBBLEGUM:
- m_disappear_counter = stk_config->m_bubble_gum_counter; break;
+ m_disappear_counter = stk_config->m_bubblegum_counter; break;
case ITEM_EASTER_EGG:
m_disappear_counter = -1; break;
default:
diff --git a/src/items/item.hpp b/src/items/item.hpp
index c61d57dcf..40aedad00 100644
--- a/src/items/item.hpp
+++ b/src/items/item.hpp
@@ -26,7 +26,7 @@
namespace irr
{
- namespace scene { class IMesh; }
+ namespace scene { class IMesh; class ISceneNode; }
}
using namespace irr;
@@ -284,6 +284,12 @@ public:
if(left) return m_avoidance_points[0];
return m_avoidance_points[1];
} // getAvoidancePoint
+
+ // ------------------------------------------------------------------------
+ scene::ISceneNode *getSceneNode()
+ {
+ return (scene::ISceneNode *) m_node;
+ }
}; // class Item
#endif
diff --git a/src/items/item_manager.cpp b/src/items/item_manager.cpp
index 9432b9f01..4b7fc0ad1 100644
--- a/src/items/item_manager.cpp
+++ b/src/items/item_manager.cpp
@@ -23,7 +23,6 @@
#include
#include "config/stk_config.hpp"
-#include "config/user_config.hpp"
#include "graphics/irr_driver.hpp"
#include "graphics/material.hpp"
#include "graphics/material_manager.hpp"
diff --git a/src/items/plunger.cpp b/src/items/plunger.cpp
index 4839fa318..e6b50a0f5 100644
--- a/src/items/plunger.cpp
+++ b/src/items/plunger.cpp
@@ -21,7 +21,6 @@
#include "items/plunger.hpp"
-#include "graphics/irr_driver.hpp"
#include "io/xml_node.hpp"
#include "items/rubber_band.hpp"
#include "items/projectile_manager.hpp"
diff --git a/src/items/powerup.cpp b/src/items/powerup.cpp
index b566ac0c0..d6bd8022c 100644
--- a/src/items/powerup.cpp
+++ b/src/items/powerup.cpp
@@ -20,7 +20,6 @@
#include "audio/sfx_base.hpp"
#include "audio/sfx_manager.hpp"
-#include "config/user_config.hpp"
#include "config/stk_config.hpp"
#include "items/attachment.hpp"
#include "items/item_manager.hpp"
diff --git a/src/items/swatter.cpp b/src/items/swatter.cpp
index acb7bd318..0a147dadb 100644
--- a/src/items/swatter.cpp
+++ b/src/items/swatter.cpp
@@ -308,7 +308,7 @@ void Swatter::squashThingsAround()
if (kart->getAttachment()->getType()==Attachment::ATTACH_BOMB)
{ // make bomb explode
kart->getAttachment()->update(10000);
- HitEffect *he = new Explosion(m_kart->getXYZ(), "explosion");
+ HitEffect *he = new Explosion(m_kart->getXYZ(), "explosion", "explosion.xml");
if(m_kart->getController()->isPlayerController())
he->setPlayerKartHit();
projectile_manager->addHitEffect(he);
diff --git a/src/karts/abstract_kart.cpp b/src/karts/abstract_kart.cpp
index 190b78ebb..656c422f1 100644
--- a/src/karts/abstract_kart.cpp
+++ b/src/karts/abstract_kart.cpp
@@ -53,6 +53,8 @@ AbstractKart::AbstractKart(const std::string& ident,
m_kart_width = m_kart_model->getWidth();
m_kart_height = m_kart_model->getHeight();
m_kart_length = m_kart_model->getLength();
+ m_wheel_graphics_position = m_kart_model->getWheelsGraphicsPosition();
+ m_nitro_emitter_position = m_kart_model->getNitroEmittersPositon();
} // AbstractKart
// ----------------------------------------------------------------------------
diff --git a/src/karts/abstract_kart.hpp b/src/karts/abstract_kart.hpp
index b4972112e..4fd8b9e36 100644
--- a/src/karts/abstract_kart.hpp
+++ b/src/karts/abstract_kart.hpp
@@ -51,6 +51,10 @@ private:
float m_kart_width;
/** Height of the kart, copy of the data from KartModel. */
float m_kart_height;
+ /** The position of all four wheels in the 3d model */
+ const Vec3* m_wheel_graphics_position;
+ /** The position of all nitro emitters in the 3d model */
+ const Vec3* m_nitro_emitter_position;
/** Index of kart in world. */
unsigned int m_world_kart_id;
@@ -147,6 +151,16 @@ public:
// ------------------------------------------------------------------------
/** Returns true if this kart has no wheels. */
bool isWheeless() const;
+ // ------------------------------------------------------------------------
+ /** Returns the position of a wheel relative to the kart.
+ * \param i Index of the wheel: 0=front right, 1 = front left, 2 = rear
+ * right, 3 = rear left. */
+ const Vec3& getWheelGraphicsPosition(int i) const
+ {assert(i>=0 && i<4); return m_wheel_graphics_position[i];}
+ // ------------------------------------------------------------------------
+ /** Returns the position of a nitro emitter relative to the kart */
+ const Vec3& getNitroEmitterPosition(int i) const
+ {assert(i>=0 && i<2); return m_nitro_emitter_position[i];}
// ========================================================================
// Emergency animation related functions.
diff --git a/src/karts/kart.cpp b/src/karts/kart.cpp
index 9f4ca2775..97dfbbf58 100644
--- a/src/karts/kart.cpp
+++ b/src/karts/kart.cpp
@@ -49,6 +49,7 @@
#include "io/file_manager.hpp"
#include "items/attachment.hpp"
#include "items/item_manager.hpp"
+#include "items/projectile_manager.hpp"
#include "karts/controller/end_controller.hpp"
#include "karts/abstract_kart_animation.hpp"
#include "karts/kart_model.hpp"
@@ -67,6 +68,8 @@
#include "tracks/track_manager.hpp"
#include "utils/constants.hpp"
+#include "graphics/explosion.hpp"
+
#if defined(WIN32) && !defined(__CYGWIN__) && !defined(__MINGW32__)
// Disable warning for using 'this' in base member initializer list
# pragma warning(disable:4355)
@@ -116,6 +119,9 @@ Kart::Kart (const std::string& ident, unsigned int world_kart_id,
m_flying = false;
m_sky_particles_emitter= NULL;
m_stars_effect = NULL;
+ m_timeFlying = 0;
+ m_isTimeFlying = false;
+ m_hitGround = NULL;
m_view_blocked_by_plunger = 0;
m_has_caught_nolok_bubblegum = false;
@@ -297,15 +303,6 @@ void Kart::reset()
// Reset animations and wheels
m_kart_model->reset();
- // undo bubblegum effect
- if (m_bubblegum_time > 0.0f)
- {
- m_bubblegum_time = 0.0f;
- m_bubblegum_torque = 0.0f;
- m_body->setDamping(m_kart_properties->getChassisLinearDamping(),
- m_kart_properties->getChassisAngularDamping() );
- }
-
// If the controller was replaced (e.g. replaced by end controller),
// restore the original controller.
if(m_saved_controller)
@@ -337,8 +334,15 @@ void Kart::reset()
m_bounce_back_time = 0.0f;
m_time_last_crash = 0.0f;
m_speed = 0.0f;
+ m_current_lean = 0.0f;
m_view_blocked_by_plunger = 0.0f;
+ m_bubblegum_time = 0.0f;
+ m_bubblegum_torque = 0.0f;
m_has_caught_nolok_bubblegum = false;
+ // In case that the kart was in the air, in which case its
+ // linear damping is 0
+ m_body->setDamping(m_kart_properties->getChassisLinearDamping(),
+ m_kart_properties->getChassisAngularDamping() );
if(m_terrain_sound)
{
@@ -850,12 +854,18 @@ void Kart::collectedItem(Item *item, int add_info)
break;
}
case Item::ITEM_BUBBLEGUM:
- m_has_caught_nolok_bubblegum = (item->getEmitter() != NULL && item->getEmitter()->getIdent() == "nolok");
+ m_has_caught_nolok_bubblegum = (item->getEmitter() != NULL &&
+ item->getEmitter()->getIdent() == "nolok");
// slow down
- m_bubblegum_time = 1.0f;
- m_bubblegum_torque = (rand()%2) ? 500.0f : -500.0f;
- m_body->setDamping(0.8f, 0.8f);
+ m_bubblegum_time = m_kart_properties->getBubblegumTime();
+ m_bubblegum_torque = (rand()%2)
+ ? m_kart_properties->getBubblegumTorque()
+ : -m_kart_properties->getBubblegumTorque();
+ m_max_speed->setSlowdown(MaxSpeed::MS_DECREASE_BUBBLE,
+ m_kart_properties->getBubblegumSpeedFraction(),
+ m_kart_properties->getBubblegumFadeInTime(),
+ m_bubblegum_time);
m_goo_sound->position(getXYZ());
m_goo_sound->play();
// Play appropriate custom character sound
@@ -975,19 +985,14 @@ void Kart::update(float dt)
if(m_squash_time<=0)
{
m_node->setScale(core::vector3df(1.0f, 1.0f, 1.0f));
- m_max_speed->setSlowdown(MaxSpeed::MS_DECREASE_SQUASH,
- /*slowdown*/1.0f, /*fade in*/0.0f);
}
- }
+ } // if squashed
if (m_bubblegum_time > 0.0f)
{
m_bubblegum_time -= dt;
if (m_bubblegum_time <= 0.0f)
{
- // undo bubblegum effect
- m_body->setDamping(m_kart_properties->getChassisLinearDamping(),
- m_kart_properties->getChassisAngularDamping() );
m_bubblegum_torque = 0.0f;
}
}
@@ -1191,6 +1196,21 @@ void Kart::update(float dt)
// is rescued isOnGround might still be true, since the kart rigid
// body was removed from the physics, but still retain the old
// values for the raycasts).
+ if (!isOnGround())
+ {
+ m_timeFlying+=dt;
+ m_isTimeFlying = true;
+ }
+
+ if(isOnGround() && m_isTimeFlying)
+ {
+ m_isTimeFlying = false;
+ m_hitGround = new Explosion(getXYZ(), "jump",
+ "jump_explosion.xml");
+ projectile_manager->addHitEffect(m_hitGround);
+ m_timeFlying = 0;
+ }
+
if( (!isOnGround() || emergency) && m_shadow_enabled)
{
m_shadow_enabled = false;
@@ -1199,7 +1219,7 @@ void Kart::update(float dt)
if(!m_shadow_enabled && isOnGround() && !emergency)
{
m_shadow->enableShadow();
- m_shadow_enabled = true;
+ m_shadow_enabled = true;
}
} // update
@@ -1228,7 +1248,8 @@ void Kart::setSquash(float time, float slowdown)
return;
}
m_node->setScale(core::vector3df(1.0f, 0.5f, 1.0f));
- m_max_speed->setSlowdown(MaxSpeed::MS_DECREASE_SQUASH, slowdown, 0.1f);
+ m_max_speed->setSlowdown(MaxSpeed::MS_DECREASE_SQUASH, slowdown,
+ 0.1f, time);
m_squash_time = time;
} // setSquash
@@ -2241,21 +2262,87 @@ void Kart::updateGraphics(float dt, const Vec3& offset_xyz,
// The speed of the kart can be higher (due to powerups) than
// the normal maximum speed of the kart.
if(f>1.0f) f = 1.0f;
- m_kart_gfx->setCreationRateRelative(KartGFX::KGFX_NITRO, f);
+ m_kart_gfx->setCreationRateRelative(KartGFX::KGFX_NITRO1, f);
+ m_kart_gfx->setCreationRateRelative(KartGFX::KGFX_NITRO2, f);
+ m_kart_gfx->setCreationRateRelative(KartGFX::KGFX_NITROSMOKE1, f);
+ m_kart_gfx->setCreationRateRelative(KartGFX::KGFX_NITROSMOKE2, f);
}
else
- m_kart_gfx->setCreationRateAbsolute(KartGFX::KGFX_NITRO, 0);
- m_kart_gfx->resizeBox(KartGFX::KGFX_NITRO, getSpeed(), dt);
+ {
+ m_kart_gfx->setCreationRateAbsolute(KartGFX::KGFX_NITRO1, 0);
+ m_kart_gfx->setCreationRateAbsolute(KartGFX::KGFX_NITRO2, 0);
+ m_kart_gfx->setCreationRateAbsolute(KartGFX::KGFX_NITROSMOKE1, 0);
+ m_kart_gfx->setCreationRateAbsolute(KartGFX::KGFX_NITROSMOKE2, 0);
+
+ }
+ m_kart_gfx->resizeBox(KartGFX::KGFX_NITRO1, getSpeed(), dt);
+ m_kart_gfx->resizeBox(KartGFX::KGFX_NITRO2, getSpeed(), dt);
+ m_kart_gfx->resizeBox(KartGFX::KGFX_NITROSMOKE1, getSpeed(), dt);
+ m_kart_gfx->resizeBox(KartGFX::KGFX_NITROSMOKE2, getSpeed(), dt);
m_kart_gfx->resizeBox(KartGFX::KGFX_ZIPPER, getSpeed(), dt);
- Moveable::updateGraphics(dt, center_shift,
- btQuaternion(m_skidding->getVisualSkidRotation(),
- 0, 0));
+ // Note that we compare with maximum speed of the kart, not
+ // maximum speed including terrain effects. This avoids that
+ // leaning might get less if a kart gets a special that increases
+ // its maximum speed, but not the current speed (by much). On the
+ // other hand, that ratio can often be greater than 1.
+ float speed_frac = m_speed / m_kart_properties->getMaxSpeed();
+ if(speed_frac>1.0f)
+ speed_frac = 1.0f;
+ else if (speed_frac < 0.0f) // no leaning when backwards driving
+ speed_frac = 0.0f;
- /*
+ const float steer_frac = m_skidding->getSteeringFraction();
+
+ const float roll_speed = m_kart_properties->getLeanSpeed();
+ if(speed_frac > 0.8f && fabsf(steer_frac)>0.5f)
+ {
+ // Use steering ^ 7, which means less effect at lower
+ // steering
+ const float f = m_skidding->getSteeringFraction();
+ const float f2 = f*f;
+ const float max_lean = -m_kart_properties->getMaxLean()
+ * f2*f2*f2*f
+ * speed_frac;
+ if(max_lean>0)
+ {
+ m_current_lean += dt* roll_speed;
+ if(m_current_lean > max_lean)
+ m_current_lean = max_lean;
+ }
+ else if(max_lean<0)
+ {
+ m_current_lean -= dt*roll_speed;
+ if(m_current_lean < max_lean)
+ m_current_lean = max_lean;
+ }
+ }
+ else if(m_current_lean!=0.0f)
+ {
+ // Disable any potential roll factor that is still applied
+ // --------------------------------------------------------
+ if(m_current_lean>0)
+ {
+ m_current_lean -= dt * roll_speed;
+ if(m_current_lean < 0.0f)
+ m_current_lean = 0.0f;
+ }
+ else
+ {
+ m_current_lean += dt * roll_speed;
+ if(m_current_lean>0.0f)
+ m_current_lean = 0.0f;
+ }
+ }
+
+ float heading = m_skidding->getVisualSkidRotation();
+ Moveable::updateGraphics(dt, center_shift,
+ btQuaternion(heading, 0, m_current_lean));
+
+#ifdef XX
// cheap wheelie effect
- if (m_zipper_fire && m_zipper_fire->getCreationRate() > 0.0f)
+ if (m_controls.m_nitro)
{
m_node->updateAbsolutePosition();
m_kart_model->getWheelNodes()[0]->updateAbsolutePosition();
@@ -2263,8 +2350,8 @@ void Kart::updateGraphics(float dt, const Vec3& offset_xyz,
core::vector3df rot = m_node->getRotation();
- float ratio = float(m_zipper_fire->getCreationRate())
- /float(m_zipper_fire->getParticlesInfo()->getMaxRate());
+ float ratio = 0.8f; //float(m_zipper_fire->getCreationRate())
+ // /float(m_zipper_fire->getParticlesInfo()->getMaxRate());
const float a = (13.4f - ratio*13.0f);
float dst = -45.0f*sin((a*a)/180.f*M_PI);
@@ -2278,7 +2365,8 @@ void Kart::updateGraphics(float dt, const Vec3& offset_xyz,
m_node->setPosition(m_node->getPosition() + core::vector3df(0,wheel_y_after - wheel_y,0));
}
- */
+#endif
+
} // updateGraphics
// ----------------------------------------------------------------------------
diff --git a/src/karts/kart.hpp b/src/karts/kart.hpp
index e95e283cd..c99e8f3bf 100644
--- a/src/karts/kart.hpp
+++ b/src/karts/kart.hpp
@@ -51,6 +51,7 @@ class Skidding;
class SkidMarks;
class SlipStream;
class Stars;
+class HitEffect;
/** The main kart class. All type of karts are of this object, but with
* different controllers. The controllers are what turn a kart into a
@@ -108,7 +109,6 @@ private:
/** For stars rotating around head effect */
Stars *m_stars_effect;
-private:
/** True if the kart hasn't moved since 'ready-set-go' - used to
* determine startup boost. */
bool m_has_started;
@@ -127,6 +127,9 @@ private:
* the kart is squashed. */
float m_squash_time;
+ /** Current leaning of the kart. */
+ float m_current_lean;
+
/** If > 0 then bubble gum effect is on */
float m_bubblegum_time;
@@ -146,6 +149,15 @@ private:
// Graphical effects
// -----------------
+ /** The time where a kart is flying */
+ float m_timeFlying;
+
+ /** For the effect when the kart touch the ground */
+ HitEffect *m_hitGround;
+
+ /** Is time flying activated */
+ bool m_isTimeFlying;
+
/** The shadow of a kart. */
Shadow *m_shadow;
diff --git a/src/karts/kart_gfx.cpp b/src/karts/kart_gfx.cpp
index 975ba06b0..cf2906ffc 100644
--- a/src/karts/kart_gfx.cpp
+++ b/src/karts/kart_gfx.cpp
@@ -40,19 +40,40 @@ KartGFX::KartGFX(const AbstractKart *kart)
}
m_kart = kart;
-
+ /*
+ // FIXME Old Positioning system Maybe usefull for a future effect
Vec3 rear_left(-(kart->getKartWidth()+0.20f)*0.35f, (kart->getKartHeight()-0.6f)*0.35f,
-kart->getKartLength()*0.35f);
Vec3 rear_right((kart->getKartWidth()+0.20f)*0.35f, (kart->getKartHeight()-0.6f)*0.35f,
-kart->getKartLength()*0.35f);
+
+
+ */
+ Vec3 rear_left(kart->getWheelGraphicsPosition(3).toIrrVector().X, (kart->getKartHeight()-0.6f)*0.35f,
+ kart->getWheelGraphicsPosition(3).toIrrVector().Z);
+ Vec3 rear_right(kart->getWheelGraphicsPosition(2).toIrrVector().X, (kart->getKartHeight()-0.6f)*0.35f,
+ kart->getWheelGraphicsPosition(2).toIrrVector().Z);
Vec3 rear_center(0, kart->getKartHeight()*0.35f,
-kart->getKartLength()*0.35f);
+ // FIXME Used to match the emitter as seen in blender
+ const float delta = 0.6f;
+ Vec3 rear_nitro_right(kart->getNitroEmitterPosition(0).toIrrVector().X,
+ kart->getNitroEmitterPosition(0).toIrrVector().Y,
+ kart->getNitroEmitterPosition(0).toIrrVector().Z + delta);
+
+ Vec3 rear_nitro_left(kart->getNitroEmitterPosition(1).toIrrVector().X,
+ kart->getNitroEmitterPosition(1).toIrrVector().Y,
+ kart->getNitroEmitterPosition(1).toIrrVector().Z + delta);
+
// Create all effects. Note that they must be created
// in the order of KartGFXType.
- addEffect(KGFX_NITRO, "nitro.xml", rear_center);
+ addEffect(KGFX_NITRO1, "nitro.xml", rear_nitro_right);
+ addEffect(KGFX_NITRO2, "nitro.xml", rear_nitro_left);
+ addEffect(KGFX_NITROSMOKE1, "nitro-smoke.xml", rear_nitro_left);
+ addEffect(KGFX_NITROSMOKE2, "nitro-smoke.xml", rear_nitro_right);
addEffect(KGFX_ZIPPER, "zipper_fire.xml", rear_center);
addEffect(KGFX_TERRAIN, "smoke.xml", Vec3(0,0,0));
addEffect(KGFX_SKID1L, "skid1.xml", rear_left);
diff --git a/src/karts/kart_gfx.hpp b/src/karts/kart_gfx.hpp
index a0ff5ae00..24d178760 100644
--- a/src/karts/kart_gfx.hpp
+++ b/src/karts/kart_gfx.hpp
@@ -39,7 +39,10 @@ public:
* created. So KGFX_SKID1/2 store the two types, and KGFX_SKID
* = KGFX_SKID1 stores the actual emitter node. KGFX_COUNT
* is the number of entries and must therefore be last. */
- enum KartGFXType { KGFX_NITRO=0,
+ enum KartGFXType { KGFX_NITRO1=0,
+ KGFX_NITRO2,
+ KGFX_NITROSMOKE1,
+ KGFX_NITROSMOKE2,
KGFX_ZIPPER,
KGFX_TERRAIN,
KGFX_SKIDL,
diff --git a/src/karts/kart_model.cpp b/src/karts/kart_model.cpp
index 2daf915b9..94557ec8b 100644
--- a/src/karts/kart_model.cpp
+++ b/src/karts/kart_model.cpp
@@ -130,6 +130,25 @@ void KartModel::loadInfo(const XMLNode &node)
loadWheelInfo(*wheels_node, "rear-right", 2);
loadWheelInfo(*wheels_node, "rear-left", 3);
}
+
+ // FIXME fallback for karts that don't have nitro emitter
+ /*
+ m_nitro_emitter_position[0] = Vec3 (0, m_kart_height*0.35f,
+ -m_kart_length*0.35f);
+
+ m_nitro_emitter_position[1] = Vec3 (0, m_kart_height*0.35f,
+ -m_kart_length*0.35f); */
+
+ m_nitro_emitter_position[0] = Vec3 (0,0.1f,0);
+
+ m_nitro_emitter_position[1] = Vec3 (0,0.1f,0);
+
+ if(const XMLNode *nitroEmitter_node=node.getNode("nitro-emitter"))
+ {
+ loadNitroEmitterInfo(*nitroEmitter_node, "nitro-emitter-a", 0);
+ loadNitroEmitterInfo(*nitroEmitter_node, "nitro-emitter-b", 1);
+ }
+
if(const XMLNode *hat_node=node.getNode("hat"))
{
if(hat_node->get("offset", &m_hat_offset))
@@ -214,6 +233,10 @@ KartModel* KartModel::makeCopy()
km->m_animated_node = NULL;
km->m_hat_offset = m_hat_offset;
km->m_hat_name = m_hat_name;
+
+ km->m_nitro_emitter_position[0] = m_nitro_emitter_position[0];
+ km->m_nitro_emitter_position[1] = m_nitro_emitter_position[1];
+
for(unsigned int i=0; i<4; i++)
{
km->m_wheel_model[i] = m_wheel_model[i];
@@ -405,6 +428,31 @@ bool KartModel::loadModels(const KartProperties &kart_properties)
return true;
} // loadModels
+// ----------------------------------------------------------------------------
+/** Loads a single nitro emitter node. Currently this the position of the nitro
+ * emitter relative to the kart.
+ * \param emitter_name Name of the nitro emitter, e.g. emitter-a.
+ * \param index Index of this emitter in the global m_emitter* fields.
+ */
+void KartModel::loadNitroEmitterInfo(const XMLNode &node,
+ const std::string &emitter_name, int index)
+{
+ const XMLNode *emitter_node = node.getNode(emitter_name);
+ if(!emitter_node)
+ {
+ // Only print the warning if a model filename is given. Otherwise the
+ // stk_config file is read (which has no model information).
+ if(m_model_filename!="")
+ {
+ Log::error("Kart_Model", "Missing nitro emitter information for model"
+ "'%s'.", m_model_filename.c_str());
+ Log::error("Kart_Model", "This can be ignored, but the nitro particles will not work");
+ }
+ return;
+ }
+ emitter_node->get("position", &m_nitro_emitter_position[index]);
+} // loadNitroEmitterInfo
+
// ----------------------------------------------------------------------------
/** Loads a single wheel node. Currently this is the name of the wheel model
* and the position of the wheel relative to the kart.
diff --git a/src/karts/kart_model.hpp b/src/karts/kart_model.hpp
index 49a9caa54..c4ffe5954 100644
--- a/src/karts/kart_model.hpp
+++ b/src/karts/kart_model.hpp
@@ -113,6 +113,9 @@ private:
/** Radius of the graphical wheels. */
float m_wheel_graphics_radius[4];
+
+ /** The position of the nitro emitters */
+ Vec3 m_nitro_emitter_position[2];
/** Minimum suspension length. If the displayed suspension is
* shorter than this, the wheel would look wrong. */
@@ -141,6 +144,9 @@ private:
void loadWheelInfo(const XMLNode &node,
const std::string &wheel_name, int index);
+
+ void loadNitroEmitterInfo(const XMLNode &node,
+ const std::string &emitter_name, int index);
void OnAnimationEnd(scene::IAnimatedMeshSceneNode *node);
@@ -181,6 +187,11 @@ public:
const Vec3& getWheelGraphicsPosition(int i) const
{assert(i>=0 && i<4); return m_wheel_graphics_position[i];}
// ------------------------------------------------------------------------
+ /** Returns the position of wheels relative to the kart.
+ */
+ const Vec3* getWheelsGraphicsPosition() const
+ {return m_wheel_graphics_position;}
+ // ------------------------------------------------------------------------
/** Returns the position of a wheel relative to the kart for the physics.
* The physics wheels can be attached at a different place to make the
* karts more stable.
@@ -195,6 +206,11 @@ public:
float getWheelGraphicsRadius(int i) const
{assert(i>=0 && i<4); return m_wheel_graphics_radius[i]; }
// ------------------------------------------------------------------------
+ /** Returns the position of nitro emitter relative to the kart.
+ */
+ const Vec3* getNitroEmittersPositon() const
+ {return m_nitro_emitter_position;}
+ // ------------------------------------------------------------------------
/** Returns the length of the kart model. */
float getLength () const {return m_kart_length; }
// ------------------------------------------------------------------------
diff --git a/src/karts/kart_properties.cpp b/src/karts/kart_properties.cpp
index 387d799fc..58a41e88f 100644
--- a/src/karts/kart_properties.cpp
+++ b/src/karts/kart_properties.cpp
@@ -20,7 +20,6 @@
#include "addons/addon.hpp"
#include "config/stk_config.hpp"
-#include "config/user_config.hpp"
#include "graphics/irr_driver.hpp"
#include "graphics/material_manager.hpp"
#include "io/file_manager.hpp"
@@ -87,9 +86,11 @@ KartProperties::KartProperties(const std::string &filename)
m_camera_distance = m_camera_forward_up_angle =
m_camera_backward_up_angle = m_explosion_invulnerability_time =
m_rescue_time = m_rescue_height = m_explosion_time =
- m_explosion_radius =
+ m_explosion_radius = m_max_lean = m_lean_speed =
m_swatter_distance2 = m_swatter_duration = m_squash_slowdown =
- m_squash_duration = m_downward_impulse_factor = UNDEFINED;
+ m_squash_duration = m_downward_impulse_factor =
+ m_bubblegum_fade_in_time = m_bubblegum_speed_fraction =
+ m_bubblegum_time = m_bubblegum_torque = UNDEFINED;
m_engine_power.resize(RaceManager::DIFFICULTY_COUNT, UNDEFINED);
m_max_speed.resize(RaceManager::DIFFICULTY_COUNT, UNDEFINED);
@@ -223,8 +224,10 @@ void KartProperties::load(const std::string &filename, const std::string &node)
// (e.g. when freeing temp. materials from a track, the last icon
// would get deleted, too.
m_icon_material = material_manager->getMaterial(m_icon_file,
- /*is_full+path*/true,
- /*make_permanent*/true);
+ /*is_full_path*/true,
+ /*make_permanent*/true,
+ /*complain_if_not_found*/true,
+ /*strip_path*/false);
if(m_minimap_icon_file!="")
m_minimap_icon = irr_driver->getTexture(m_root+m_minimap_icon_file);
else
@@ -311,6 +314,14 @@ void KartProperties::getAllData(const XMLNode * root)
nitro_node->get("max", &m_nitro_max );
}
+ if(const XMLNode *bubble_node = root->getNode("bubblegum"))
+ {
+ bubble_node->get("time", &m_bubblegum_time );
+ bubble_node->get("speed-fraction", &m_bubblegum_speed_fraction);
+ bubble_node->get("fade-in-time", &m_bubblegum_fade_in_time );
+ bubble_node->get("torque", &m_bubblegum_torque );
+ }
+
if(const XMLNode *rescue_node = root->getNode("rescue"))
{
rescue_node->get("vert-offset", &m_rescue_vert_offset);
@@ -500,6 +511,14 @@ void KartProperties::getAllData(const XMLNode * root)
}
}
+ if(const XMLNode *lean_node= root->getNode("lean"))
+ {
+ lean_node->get("max", &m_max_lean );
+ lean_node->get("speed", &m_lean_speed);
+ m_max_lean *= DEGREE_TO_RAD;
+ m_lean_speed *= DEGREE_TO_RAD;
+ }
+
if(const XMLNode *camera_node= root->getNode("camera"))
{
camera_node->get("distance", &m_camera_distance);
@@ -652,10 +671,17 @@ void KartProperties::checkAllSet(const std::string &filename)
CHECK_NEG(m_nitro_duration, "nitro duration" );
CHECK_NEG(m_nitro_fade_out_time, "nitro fade-out-time" );
CHECK_NEG(m_nitro_max, "nitro max" );
+ CHECK_NEG(m_bubblegum_time, "bubblegum time" );
+ CHECK_NEG(m_bubblegum_speed_fraction, "bubblegum speed-fraction" );
+ CHECK_NEG(m_bubblegum_fade_in_time , "bubblegum fade-in-time" );
+ CHECK_NEG(m_bubblegum_torque, "bubblegum torque" );
+
CHECK_NEG(m_swatter_distance2, "swatter distance" );
CHECK_NEG(m_swatter_duration, "swatter duration" );
- CHECK_NEG(m_squash_duration, "squash-duration" );
- CHECK_NEG(m_squash_slowdown, "squash-slowdown" );
+ CHECK_NEG(m_squash_duration, "swatter squash-duration" );
+ CHECK_NEG(m_squash_slowdown, "swatter squash-slowdown" );
+ CHECK_NEG(m_max_lean, "lean max" );
+ CHECK_NEG(m_lean_speed, "lean speed" );
CHECK_NEG(m_rescue_height, "rescue height" );
CHECK_NEG(m_rescue_time, "rescue time" );
diff --git a/src/karts/kart_properties.hpp b/src/karts/kart_properties.hpp
index 77859bf93..5eb3199c1 100644
--- a/src/karts/kart_properties.hpp
+++ b/src/karts/kart_properties.hpp
@@ -215,6 +215,16 @@ private:
float m_nitro_fade_out_time;
/** Maximum nitro a kart can collect. */
float m_nitro_max;
+ /** Bubble gum diration. */
+ float m_bubblegum_time;
+ /** Torque to add when a bubble gum was hit in order to make the kart go
+ * sideways a bit. */
+ float m_bubblegum_torque;
+ /** Fraction of top speed that can be reached maximum after hitting a
+ * bubble gum. */
+ float m_bubblegum_speed_fraction;
+ /** How long to fade in the slowdown for a bubble gum. */
+ float m_bubblegum_fade_in_time;
/** Square of the maximum distance a swatter can operate. */
float m_swatter_distance2;
/** How long the swatter lasts. */
@@ -225,6 +235,14 @@ private:
* is max_speed*m_squash_slowdown. */
float m_squash_slowdown;
+ /** The maximum roll a kart graphics should show when driving in a fast
+ * curve. This is read in as degrees, but stored in radians. */
+ float m_max_lean;
+
+ /** The speed with which the roll (when leaning in a curve) changes
+ * (in radians/second). */
+ float m_lean_speed;
+
/** Engine sound effect. */
std::string m_engine_sfx_type;
@@ -560,7 +578,19 @@ public:
// ------------------------------------------------------------------------
/** Returns the maximum amount of nitro a kart can store. */
float getNitroMax () const {return m_nitro_max; }
-
+ // ------------------------------------------------------------------------
+ /** Returns how long a bubble gum is active. */
+ float getBubblegumTime() const { return m_bubblegum_time; }
+ // ------------------------------------------------------------------------
+ /** Returns the torque to add when a bubble gum was hit . */
+ float getBubblegumTorque() const { return m_bubblegum_torque; }
+ // ------------------------------------------------------------------------
+ /** Returns the fraction of top speed that can be reached maximum after
+ * hitting a bubble gum. */
+ float getBubblegumSpeedFraction() const {return m_bubblegum_speed_fraction;}
+ // ------------------------------------------------------------------------
+ /** Returns how long to fade in the slowdown for a bubble gum. */
+ float getBubblegumFadeInTime() const { return m_bubblegum_fade_in_time; }
// ------------------------------------------------------------------------
/** Returns a shift of the center of mass (lowering the center of mass
* makes the karts more stable. */
@@ -806,6 +836,13 @@ public:
/** Returns the slowdown of a kart that is squashed. */
float getSquashSlowdown() const {return m_squash_slowdown; }
+ // ------------------------------------------------------------------------
+ /** The maximum leaning a kart should show (In radians). */
+ float getMaxLean() const { return m_max_lean; }
+
+ // ------------------------------------------------------------------------
+ /** The speed with which a kart should lean (in radians/s). */
+ float getLeanSpeed() const { return m_lean_speed; }
// ------------------------------------------------------------------------
/** Returns true if wheels should have random rotation at start. */
bool hasRandomWheels() const { return m_has_rand_wheels; }
diff --git a/src/karts/max_speed.cpp b/src/karts/max_speed.cpp
index 66df22937..cacde5a88 100644
--- a/src/karts/max_speed.cpp
+++ b/src/karts/max_speed.cpp
@@ -157,13 +157,17 @@ void MaxSpeed::SpeedIncrease::update(float dt)
* \param category The category for which the speed is increased.
* \param max_speed_fraction Fraction of top speed to allow only.
* \param fade_in_time How long till maximum speed is capped.
+ * \param duration How long the effect will lasts. The value of -1 (default)
+ * indicates that this effect stays active forever (i.e. till its
+ * value is changed to something else).
*/
void MaxSpeed::setSlowdown(unsigned int category, float max_speed_fraction,
- float fade_in_time)
+ float fade_in_time, float duration)
{
assert(category>=MS_DECREASE_MIN && category -1.0f)
+ {
+ // It's a timed slowdown
+ m_duration -= dt;
+ if(m_duration<0)
+ {
+ m_duration = 0;
+ m_current_fraction = 1.0f;
+ m_max_speed_fraction = 1.0f;
+ return;
+ }
+ }
+
float diff = m_current_fraction - m_max_speed_fraction;
if(diff > 0)
{
@@ -206,16 +223,17 @@ void MaxSpeed::update(float dt)
// First compute the minimum max-speed fraction, which
// determines the overall decrease of maximum speed.
// ---------------------------------------------------
- float f = 1.0f;
+ float slowdown_factor = 1.0f;
for(unsigned int i=MS_DECREASE_MIN; igetKartProperties()->getMaxSpeed() * f;
+ m_current_max_speed = m_kart->getKartProperties()->getMaxSpeed();
// Then add the speed increase from each category
// ----------------------------------------------
@@ -226,6 +244,7 @@ void MaxSpeed::update(float dt)
m_current_max_speed += speedup.getSpeedIncrease();
m_add_engine_force += speedup.getEngineForce();
}
+ m_current_max_speed *= slowdown_factor;
// Then cap the current speed of the kart
// --------------------------------------
diff --git a/src/karts/max_speed.hpp b/src/karts/max_speed.hpp
index 3e10c32fd..c57cb0f64 100644
--- a/src/karts/max_speed.hpp
+++ b/src/karts/max_speed.hpp
@@ -42,6 +42,7 @@ public:
enum {MS_DECREASE_MIN,
MS_DECREASE_TERRAIN = MS_DECREASE_MIN,
MS_DECREASE_AI,
+ MS_DECREASE_BUBBLE,
MS_DECREASE_SQUASH,
MS_DECREASE_MAX};
@@ -115,6 +116,10 @@ private:
* into account. */
float m_current_fraction;
+ /** How long the effect should last. A -1.0f as value indicates
+ * that this effect stays active till it is changed back. */
+ float m_duration;
+
/** The constructor initialises the data with data that won't
* affect top speed at all. */
SpeedDecrease()
@@ -122,6 +127,7 @@ private:
m_max_speed_fraction = 1.0f;
m_fade_in_time = 0.0f;
m_current_fraction = 1.0f;
+ m_duration = -1.0f;
} // SpeedDecrease
void update(float dt);
// --------------------------------------------------------------------
@@ -150,7 +156,7 @@ public:
float engine_force, float duration,
float fade_out_time/*=1.0f*/);
void setSlowdown(unsigned int category, float max_speed_fraction,
- float fade_in_time);
+ float fade_in_time, float duration=-1.0f);
float getSpeedIncreaseTimeLeft(unsigned int category);
void update(float dt);
void reset();
diff --git a/src/karts/moveable.cpp b/src/karts/moveable.cpp
index 07aeb5a4b..5a5c6c225 100644
--- a/src/karts/moveable.cpp
+++ b/src/karts/moveable.cpp
@@ -19,7 +19,6 @@
#include "karts/moveable.hpp"
-#include "config/user_config.hpp"
#include "graphics/irr_driver.hpp"
#include "graphics/material.hpp"
#include "graphics/material_manager.hpp"
diff --git a/src/karts/skidding.cpp b/src/karts/skidding.cpp
index d6f5e5db7..4b5ff45e0 100644
--- a/src/karts/skidding.cpp
+++ b/src/karts/skidding.cpp
@@ -197,6 +197,13 @@ void Skidding::update(float dt, bool is_on_ground,
reset();
return;
}
+
+ // No skidding backwards or while stopped
+ if(m_kart->getSpeed() < 0.001f)
+ {
+ reset();
+ }
+
m_skid_bonus_ready = false;
if (is_on_ground)
{
diff --git a/src/main.cpp b/src/main.cpp
index 2f84d9c06..9af900f6b 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -1545,6 +1545,9 @@ int main(int argc, char *argv[] )
delete wiimote_manager;
#endif
+ // If the window was closed in the middle of a race, remove players,
+ // so we don't crash later when StateManager tries to access input devices.
+ StateManager::get()->resetActivePlayers();
if(input_manager) delete input_manager; // if early crash avoid delete NULL
cleanSuperTuxKart();
diff --git a/src/modes/follow_the_leader.cpp b/src/modes/follow_the_leader.cpp
index 9f6e78612..dda32aede 100644
--- a/src/modes/follow_the_leader.cpp
+++ b/src/modes/follow_the_leader.cpp
@@ -20,7 +20,6 @@
#include "audio/music_manager.hpp"
#include "challenges/unlock_manager.hpp"
#include "config/user_config.hpp"
-#include "graphics/irr_driver.hpp"
#include "items/powerup_manager.hpp"
#include "karts/abstract_kart.hpp"
#include "states_screens/race_gui_base.hpp"
diff --git a/src/modes/linear_world.cpp b/src/modes/linear_world.cpp
index da4ed70b0..d7aa84f17 100644
--- a/src/modes/linear_world.cpp
+++ b/src/modes/linear_world.cpp
@@ -634,7 +634,7 @@ void LinearWorld::moveKartAfterRescue(AbstractKart* kart)
m_track->getAngle(sector)));
kart->getBody()->setCenterOfMassTransform(pos);
-
+ kart->setXYZ(pos.getOrigin());
//project kart to surface of track
bool kart_over_ground = m_track->findGround(kart);
diff --git a/src/modes/soccer_world.cpp b/src/modes/soccer_world.cpp
index 0c086e0e4..22e4170f9 100644
--- a/src/modes/soccer_world.cpp
+++ b/src/modes/soccer_world.cpp
@@ -21,7 +21,6 @@
#include
#include "audio/music_manager.hpp"
-#include "graphics/irr_driver.hpp"
#include "io/file_manager.hpp"
#include "karts/abstract_kart.hpp"
#include "karts/kart_model.hpp"
diff --git a/src/modes/standard_race.cpp b/src/modes/standard_race.cpp
index a14c13596..1571992bf 100644
--- a/src/modes/standard_race.cpp
+++ b/src/modes/standard_race.cpp
@@ -18,7 +18,6 @@
#include "modes/standard_race.hpp"
#include "challenges/unlock_manager.hpp"
-#include "config/user_config.hpp"
#include "items/powerup_manager.hpp"
#include "karts/abstract_kart.hpp"
#include "karts/controller/controller.hpp"
diff --git a/src/modes/world.cpp b/src/modes/world.cpp
index e49c0a912..e28424c51 100644
--- a/src/modes/world.cpp
+++ b/src/modes/world.cpp
@@ -538,9 +538,10 @@ void World::resetAllKarts()
//that at least one of its wheel will be on the surface of the track
for ( KartList::iterator i=m_karts.begin(); i!=m_karts.end(); i++)
{
- ///start projection from top of kart
- btVector3 up_offset(0, 0.5f * ((*i)->getKartHeight()), 0);
- (*i)->getVehicle()->getRigidBody()->translate (up_offset);
+ Vec3 xyz = (*i)->getXYZ();
+ //start projection from top of kart
+ Vec3 up_offset(0, 0.5f * ((*i)->getKartHeight()), 0);
+ (*i)->setXYZ(xyz+up_offset);
bool kart_over_ground = m_track->findGround(*i);
diff --git a/src/modes/world_status.cpp b/src/modes/world_status.cpp
index 7ed28c4ac..522d0e01e 100644
--- a/src/modes/world_status.cpp
+++ b/src/modes/world_status.cpp
@@ -202,7 +202,9 @@ void WorldStatus::update(const float dt)
m_auxiliary_timer += dt;
// In artist debug mode, when without opponents, skip the ready/set/go counter faster
- if (UserConfigParams::m_artist_debug_mode && race_manager->getNumberOfKarts() == 1)
+ if (UserConfigParams::m_artist_debug_mode &&
+ race_manager->getNumberOfKarts() == 1 &&
+ race_manager->getTrackName() != "tutorial")
m_auxiliary_timer += dt*6;
break;
case MUSIC_PHASE:
diff --git a/src/network/connect_message.cpp b/src/network/connect_message.cpp
index 4bbc3005c..03660c158 100644
--- a/src/network/connect_message.cpp
+++ b/src/network/connect_message.cpp
@@ -25,7 +25,6 @@
# include
#endif
-#include "config/user_config.hpp"
#include "config/player.hpp"
#include "karts/kart_properties_manager.hpp"
#include "states_screens/state_manager.hpp"
diff --git a/src/physics/irr_debug_drawer.hpp b/src/physics/irr_debug_drawer.hpp
index 7b53247c8..00eddcdbf 100644
--- a/src/physics/irr_debug_drawer.hpp
+++ b/src/physics/irr_debug_drawer.hpp
@@ -21,7 +21,6 @@
#include "btBulletDynamicsCommon.h"
-#include "graphics/irr_driver.hpp"
#include "utils/vec3.hpp"
/**
diff --git a/src/physics/physical_object.cpp b/src/physics/physical_object.cpp
index a663baaa6..e5ca94ad9 100644
--- a/src/physics/physical_object.cpp
+++ b/src/physics/physical_object.cpp
@@ -23,7 +23,6 @@
using namespace irr;
-#include "graphics/irr_driver.hpp"
#include "graphics/material_manager.hpp"
#include "graphics/mesh_tools.hpp"
#include "io/file_manager.hpp"
diff --git a/src/physics/physics.cpp b/src/physics/physics.cpp
index cf13ed9d1..eaaeee67d 100644
--- a/src/physics/physics.cpp
+++ b/src/physics/physics.cpp
@@ -19,7 +19,6 @@
#include "physics/physics.hpp"
#include "animations/three_d_animation.hpp"
-#include "config/user_config.hpp"
#include "karts/kart_properties.hpp"
#include "karts/rescue_animation.hpp"
#include "network/race_state.hpp"
diff --git a/src/race/race_manager.hpp b/src/race/race_manager.hpp
index cc6bc07dd..82028b227 100644
--- a/src/race/race_manager.hpp
+++ b/src/race/race_manager.hpp
@@ -260,8 +260,6 @@ public:
float m_overall_time;
/** Needed for restart. */
float m_last_time;
- /** Previous finished position. */
- int m_prev_finish_pos;
/** Kart type: AI, player, network player etc. */
KartType m_kart_type;
/** Player controling the kart, for AI: -1 */
@@ -277,7 +275,7 @@ public:
int init_gp_rank, KartType kt) :
m_ident(ident), m_score(0), m_last_score(0),
m_overall_time(0.0f), m_last_time(0.0f),
- m_prev_finish_pos(prev_finish_pos), m_kart_type(kt),
+ m_kart_type(kt),
m_local_player_id(local_player_id),
m_global_player_id(global_player_id),
m_gp_rank(init_gp_rank)
diff --git a/src/states_screens/addons_screen.cpp b/src/states_screens/addons_screen.cpp
index 5122c109f..19f41d138 100644
--- a/src/states_screens/addons_screen.cpp
+++ b/src/states_screens/addons_screen.cpp
@@ -40,6 +40,18 @@ DEFINE_SCREEN_SINGLETON( AddonsScreen );
AddonsScreen::AddonsScreen() : Screen("addons_screen.stkgui")
{
m_selected_index = -1;
+
+ // Add date filters.
+ m_date_filters.push_back((DateFilter) {_("All") , 0, 0, 0});
+ m_date_filters.push_back((DateFilter) {_("1 week") , 0, 0, 7});
+ m_date_filters.push_back((DateFilter) {_("2 weeks") , 0, 0, 12});
+ m_date_filters.push_back((DateFilter) {_("1 month") , 0, 1, 0});
+ m_date_filters.push_back((DateFilter) {_("3 months") , 0, 3, 0});
+ m_date_filters.push_back((DateFilter) {_("6 months") , 0, 6, 0});
+ m_date_filters.push_back((DateFilter) {_("9 months") , 0, 9, 0});
+ m_date_filters.push_back((DateFilter) {_("1 year") , 1, 0, 0});
+ m_date_filters.push_back((DateFilter) {_("2 years") , 2, 0, 0});
+
} // AddonsScreen
// ----------------------------------------------------------------------------
@@ -70,6 +82,7 @@ void AddonsScreen::loadedFromFile()
GUIEngine::ListWidget* w_list =
getWidget("list_addons");
w_list->setColumnListener(this);
+
} // loadedFromFile
@@ -83,8 +96,32 @@ void AddonsScreen::beforeAddingWidget()
w_list->clearColumns();
w_list->addColumn( _("Add-on name"), 2 );
w_list->addColumn( _("Updated date"), 1 );
-}
+
+ GUIEngine::SpinnerWidget* w_filter_date =
+ getWidget("filter_date");
+ w_filter_date->m_properties[GUIEngine::PROP_MIN_VALUE] = "0";
+ w_filter_date->m_properties[GUIEngine::PROP_MAX_VALUE] =
+ StringUtils::toString(m_date_filters.size() - 1);
+
+ for (int n = 0; n < m_date_filters.size(); n++)
+ {
+ w_filter_date->addLabel(m_date_filters[n].label);
+ }
+ w_filter_date->setValue(0);
+
+ GUIEngine::SpinnerWidget* w_filter_rating =
+ getWidget("filter_rating");
+ w_filter_rating->m_properties[GUIEngine::PROP_MIN_VALUE] = "0";
+ w_filter_rating->m_properties[GUIEngine::PROP_MAX_VALUE] = "4";
+
+ for (int n = 0; n < 5; n++)
+ {
+ w_filter_rating->addLabel(StringUtils::toWString(1.0 + n / 2.0));
+ }
+
+ w_filter_rating->setValue(0);
+}
// ----------------------------------------------------------------------------
void AddonsScreen::init()
@@ -147,6 +184,27 @@ void AddonsScreen::tearDown()
*/
void AddonsScreen::loadList()
{
+
+ // Get the filter by words.
+ GUIEngine::TextBoxWidget* w_filter_name =
+ getWidget("filter_name");
+ core::stringw words = w_filter_name->getText();
+
+ // Get the filter by date.
+ GUIEngine::SpinnerWidget* w_filter_date =
+ getWidget("filter_date");
+ int date_index = w_filter_date->getValue();
+ Time::TimeType date = Time::getTimeSinceEpoch();
+ date = Time::addInterval(date,
+ -m_date_filters[date_index].year,
+ -m_date_filters[date_index].month,
+ -m_date_filters[date_index].day);
+
+ // Get the filter by rating.
+ GUIEngine::SpinnerWidget* w_filter_rating =
+ getWidget("filter_rating");
+ float rating = 1.0 + w_filter_rating->getValue() / 2.0;
+
// First create a list of sorted entries
PtrVector sorted_list;
for(unsigned int i=0; igetNumAddons(); i++)
@@ -163,6 +221,19 @@ void AddonsScreen::loadList()
if (!addon.isInstalled() && (addons_manager->wasError()
|| UserConfigParams::m_internet_status != INetworkHttp::IPERM_ALLOWED ))
continue;
+
+ // Filter by rating.
+ if (addon.getRating() < rating)
+ continue;
+
+ // Filter by date.
+ if (date_index != 0 && Time::compareTime(date, addon.getDate()) > 0)
+ continue;
+
+ // Filter by name, designer and description.
+ if (!addon.filterByWords(words))
+ continue;
+
sorted_list.push_back(&addon);
}
sorted_list.insertionSort(/*start=*/0, m_sort_desc);
@@ -364,6 +435,11 @@ void AddonsScreen::eventCallback(GUIEngine::Widget* widget,
loadList();
}
}
+ else if (name == "filter_search")
+ {
+ loadList();
+ }
+
} // eventCallback
// ----------------------------------------------------------------------------
diff --git a/src/states_screens/addons_screen.hpp b/src/states_screens/addons_screen.hpp
index 8b2e370a3..d78a2cac8 100644
--- a/src/states_screens/addons_screen.hpp
+++ b/src/states_screens/addons_screen.hpp
@@ -28,6 +28,13 @@ namespace irr { namespace gui { class STKModifiedSpriteBank; } }
namespace GUIEngine { class Widget; }
+struct DateFilter {
+ core::stringw label;
+ int year;
+ int month;
+ int day;
+};
+
/**
* \brief Addons screen
* \ingroup states_screens
@@ -70,6 +77,9 @@ private:
/** \brief To check (and set) if sort order is descending **/
bool m_sort_desc;
+ /** List of date filters **/
+ std::vector m_date_filters;
+
public:
/** Load the addons into the main list.*/
diff --git a/src/states_screens/credits.cpp b/src/states_screens/credits.cpp
index 80ff2bb4a..ce17cea31 100644
--- a/src/states_screens/credits.cpp
+++ b/src/states_screens/credits.cpp
@@ -23,7 +23,6 @@
using irr::core::stringw;
using irr::core::stringc;
-#include "config/user_config.hpp"
#include "guiengine/engine.hpp"
#include "guiengine/scalable_font.hpp"
#include "guiengine/screen.hpp"
diff --git a/src/states_screens/dialogs/addons_loading.cpp b/src/states_screens/dialogs/addons_loading.cpp
index 8d3e563fe..cd52e40d4 100644
--- a/src/states_screens/dialogs/addons_loading.cpp
+++ b/src/states_screens/dialogs/addons_loading.cpp
@@ -83,8 +83,8 @@ void AddonsLoading::beforeAddingWidgets()
m_progress = getWidget("progress");
m_back_button = getWidget ("back" );
-
RibbonWidget* r = getWidget("actions");
+ RatingBarWidget* rating = getWidget("rating");
if (m_addon.isInstalled())
{
@@ -107,11 +107,8 @@ void AddonsLoading::beforeAddingWidgets()
->setText(m_addon.getDescription().c_str());
core::stringw revision = _("Version: %d", m_addon.getRevision());
getWidget("revision")->setText(revision, false);
- char rating_val[4];
- std::sprintf(rating_val, "%.1f", m_addon.getRating());
- //I18N: for add-on rating, "Rating: 1.5/3.0"
- core::stringw rating = _("Rating: %s/%s", rating_val, "3.0");
- getWidget("rating")->setText(rating, false);
+ rating->setRating(m_addon.getRating());
+ rating->setStarNumber(3);
// Display flags for this addon
// ============================
@@ -189,12 +186,12 @@ void AddonsLoading::init()
{
flags->getIrrlichtElement()->setOverrideFont(GUIEngine::getSmallFont());
}
-}
+} // init
// ----------------------------------------------------------------------------
void AddonsLoading::escapePressed()
{
- processEvent("back");
+ stopDownload();
ModalDialog::dismiss();
} // escapePressed
@@ -203,45 +200,42 @@ void AddonsLoading::escapePressed()
GUIEngine::EventPropagation
AddonsLoading::processEvent(const std::string& event_source)
{
- if(event_source == "back")
- {
- // Cancel a download only if we are installing/upgrading one
- // (and not uninstalling an installed one):
- if(m_download_request)
- {
- assert(m_download_request);
- // In case of a cancel we can't free the memory, since
- // network_http will potentially update the request. So in
- // order to avoid a memory leak, we let network_http free
- // the request.
- m_download_request->setManageMemory(true);
- m_download_request->cancel();
- }
- dismiss();
- return GUIEngine::EVENT_BLOCK;
- }
- else if(event_source == "install")
- {
- // Only display the progress bar etc. if we are
- // not uninstalling an addon.
- if(!m_addon.isInstalled() || m_addon.needsUpdate())
- {
- m_progress->setValue(0);
- m_progress->setVisible(true);
- // Change the 'back' button into a 'cancel' button.
- m_back_button->setLabel(_("Cancel"));
+ GUIEngine::RibbonWidget* actions_ribbon =
+ getWidget("actions");
- RibbonWidget* r = getWidget("actions");
- r->setVisible(false);
-
- startDownload();
- }
- return GUIEngine::EVENT_BLOCK;
- }
- else if (event_source == "uninstall")
+ if (event_source == "actions")
{
- doUninstall();
- return GUIEngine::EVENT_BLOCK;
+ const std::string& selection =
+ actions_ribbon->getSelectionIDString(PLAYER_ID_GAME_MASTER);
+
+ if(selection == "back")
+ {
+ stopDownload();
+ dismiss();
+ return GUIEngine::EVENT_BLOCK;
+ }
+ else if(selection == "install")
+ {
+ // Only display the progress bar etc. if we are
+ // not uninstalling an addon.
+ if(!m_addon.isInstalled() || m_addon.needsUpdate())
+ {
+ m_progress->setValue(0);
+ m_progress->setVisible(true);
+ // Change the 'back' button into a 'cancel' button.
+ m_back_button->setLabel(_("Cancel"));
+
+ actions_ribbon->setVisible(false);
+
+ startDownload();
+ }
+ return GUIEngine::EVENT_BLOCK;
+ }
+ else if (selection == "uninstall")
+ {
+ doUninstall();
+ return GUIEngine::EVENT_BLOCK;
+ }
}
return GUIEngine::EVENT_LET;
} // processEvent
@@ -295,6 +289,26 @@ void AddonsLoading::startDownload()
/*manage memory*/false);
} // startDownload
+// ----------------------------------------------------------------------------
+/** This function is called when the user click on 'Back', 'Cancel' or press
+ * escape.
+ **/
+void AddonsLoading::stopDownload()
+{
+ // Cancel a download only if we are installing/upgrading one
+ // (and not uninstalling an installed one):
+ if(m_download_request)
+ {
+ // In case of a cancel we can't free the memory, since
+ // network_http will potentially update the request. So in
+ // order to avoid a memory leak, we let network_http free
+ // the request.
+ m_download_request->setManageMemory(true);
+ m_download_request->cancel();
+ };
+} // startDownload
+
+
// ----------------------------------------------------------------------------
/** Called when the asynchronous download of the addon finished.
*/
diff --git a/src/states_screens/dialogs/addons_loading.hpp b/src/states_screens/dialogs/addons_loading.hpp
index 8fbad2c83..80c336830 100644
--- a/src/states_screens/dialogs/addons_loading.hpp
+++ b/src/states_screens/dialogs/addons_loading.hpp
@@ -44,6 +44,7 @@ private:
/** The addon to load. */
Addon m_addon;
void startDownload();
+ void stopDownload();
void doInstall();
void doUninstall();
diff --git a/src/states_screens/dialogs/registration_dialog.cpp b/src/states_screens/dialogs/registration_dialog.cpp
index 246bc71c9..3e0c6f95e 100644
--- a/src/states_screens/dialogs/registration_dialog.cpp
+++ b/src/states_screens/dialogs/registration_dialog.cpp
@@ -163,7 +163,7 @@ bool RegistrationDialog::processInfoEvent(const std::string& eventSource){
getWidget("info")->setText(_("Username has to be between 5 and 30 characters long!"), false);
sfx_manager->quickSound( "anvil" );
}
- else if (m_password.size() < 5 || m_password.size() > 30)
+ else if (m_password.size() < 8 || m_password.size() > 30)
{
getWidget("info")->setText(_("Password has to be between 5 and 30 characters long!"), false);
sfx_manager->quickSound( "anvil" );
diff --git a/src/states_screens/dialogs/select_challenge.cpp b/src/states_screens/dialogs/select_challenge.cpp
index 2b4f885cf..174d67358 100644
--- a/src/states_screens/dialogs/select_challenge.cpp
+++ b/src/states_screens/dialogs/select_challenge.cpp
@@ -137,6 +137,8 @@ SelectChallengeDialog::SelectChallengeDialog(const float percentWidth,
LabelWidget* typeLbl = getWidget("race_type_val");
if (c->getData()->isGrandPrix())
typeLbl->setText(_("Grand Prix"), false );
+ else if (c->getData()->getEnergy(RaceManager::DIFFICULTY_EASY) > 0)
+ typeLbl->setText(_("Nitro challenge"), false );
else
typeLbl->setText( RaceManager::getNameOf(c->getData()->getMinorMode()), false );
diff --git a/src/states_screens/grand_prix_win.cpp b/src/states_screens/grand_prix_win.cpp
index 5fee815d2..c309bf3d1 100644
--- a/src/states_screens/grand_prix_win.cpp
+++ b/src/states_screens/grand_prix_win.cpp
@@ -101,7 +101,7 @@ void GrandPrixWin::init()
const core::dimension2d& frame_size = GUIEngine::getDriver()->getCurrentRenderTargetSize();
- core::stringw message = _("You unlocked a new feature!");
+ core::stringw message = _("You completed a challenge!");
const int message_width = GUIEngine::getFont()->getDimension(message.c_str()).Width + 30;
const int label_height = GUIEngine::getFontHeight() + 15;
diff --git a/src/states_screens/options_screen_audio.cpp b/src/states_screens/options_screen_audio.cpp
index 1bbf98e9f..1b267ca29 100644
--- a/src/states_screens/options_screen_audio.cpp
+++ b/src/states_screens/options_screen_audio.cpp
@@ -20,7 +20,6 @@
#include "audio/music_manager.hpp"
#include "audio/sfx_manager.hpp"
#include "audio/sfx_base.hpp"
-#include "graphics/irr_driver.hpp"
#include "guiengine/screen.hpp"
#include "guiengine/widgets/check_box_widget.hpp"
#include "guiengine/widgets/dynamic_ribbon_widget.hpp"
diff --git a/src/states_screens/options_screen_input2.cpp b/src/states_screens/options_screen_input2.cpp
index 4a04772e2..eb9a8cad5 100644
--- a/src/states_screens/options_screen_input2.cpp
+++ b/src/states_screens/options_screen_input2.cpp
@@ -17,7 +17,6 @@
#include "states_screens/options_screen_input2.hpp"
-#include "graphics/irr_driver.hpp"
#include "guiengine/CGUISpriteBank.h"
#include "guiengine/scalable_font.hpp"
#include "guiengine/screen.hpp"
diff --git a/src/states_screens/options_screen_players.cpp b/src/states_screens/options_screen_players.cpp
index 3ad0f4d97..8b5044612 100644
--- a/src/states_screens/options_screen_players.cpp
+++ b/src/states_screens/options_screen_players.cpp
@@ -20,7 +20,6 @@
#include "challenges/unlock_manager.hpp"
#include "config/player.hpp"
#include "config/device_config.hpp"
-#include "graphics/irr_driver.hpp"
#include "guiengine/engine.hpp"
#include "guiengine/scalable_font.hpp"
#include "guiengine/screen.hpp"
diff --git a/src/states_screens/options_screen_ui.cpp b/src/states_screens/options_screen_ui.cpp
index 93a2dbb15..41ce26541 100644
--- a/src/states_screens/options_screen_ui.cpp
+++ b/src/states_screens/options_screen_ui.cpp
@@ -21,7 +21,6 @@
#include "audio/music_manager.hpp"
#include "audio/sfx_manager.hpp"
#include "audio/sfx_base.hpp"
-#include "graphics/irr_driver.hpp"
#include "guiengine/scalable_font.hpp"
#include "guiengine/screen.hpp"
#include "guiengine/widgets/button_widget.hpp"
diff --git a/src/states_screens/race_gui_base.cpp b/src/states_screens/race_gui_base.cpp
index e824a025b..e58340df3 100644
--- a/src/states_screens/race_gui_base.cpp
+++ b/src/states_screens/race_gui_base.cpp
@@ -712,7 +712,11 @@ void RaceGUIBase::drawGlobalReadySetGo()
UserConfigParams::m_height>>1);
//gui::IGUIFont* font = irr_driver->getRaceFont();
gui::IGUIFont* font = GUIEngine::getTitleFont();
- font->draw(m_string_go.c_str(), pos, color, true, true);
+
+ if (race_manager->getCoinTarget() > 0)
+ font->draw(_("Collect nitro!"), pos, color, true, true);
+ else
+ font->draw(m_string_go.c_str(), pos, color, true, true);
}
break;
default:
diff --git a/src/states_screens/race_gui_overworld.cpp b/src/states_screens/race_gui_overworld.cpp
index 438027052..3e3a5f2ba 100644
--- a/src/states_screens/race_gui_overworld.cpp
+++ b/src/states_screens/race_gui_overworld.cpp
@@ -437,7 +437,8 @@ void RaceGUIOverworld::drawGlobalMiniMap()
if (challenges[n].m_challenge_id != "tutorial" &&
challenges[n].getForceField().m_is_locked) continue;
- if ((kart_xyz - Vec3(challenges[n].m_position)).length2_2d() < CHALLENGE_DISTANCE_SQUARED)
+ if ((kart_xyz - Vec3(challenges[n].m_position)).length2_2d() < CHALLENGE_DISTANCE_SQUARED &&
+ fabsf(kart_xyz[1] - challenges[n].m_position.Y) < CHALLENGE_HEIGHT)
{
m_close_to_a_challenge = true;
diff --git a/src/states_screens/race_gui_overworld.hpp b/src/states_screens/race_gui_overworld.hpp
index 426fa2970..039f27209 100644
--- a/src/states_screens/race_gui_overworld.hpp
+++ b/src/states_screens/race_gui_overworld.hpp
@@ -40,6 +40,8 @@ class RaceSetup;
/** Distance (squared) at which a challenge orb "activates" */
const int CHALLENGE_DISTANCE_SQUARED = 20;
+const int CHALLENGE_HEIGHT = 4;
+
/**
* \brief Handles the in-race GUI (messages, mini-map, rankings, timer, etc...)
* \ingroup states_screens
diff --git a/src/states_screens/race_setup_screen.cpp b/src/states_screens/race_setup_screen.cpp
index 47c844441..b143cfbfd 100644
--- a/src/states_screens/race_setup_screen.cpp
+++ b/src/states_screens/race_setup_screen.cpp
@@ -98,8 +98,19 @@ void RaceSetupScreen::eventCallback(Widget* widget, const std::string& name, con
}
else if (selection == "best")
{
- UserConfigParams::m_difficulty = RaceManager::DIFFICULTY_BEST;
- race_manager->setDifficulty(RaceManager::DIFFICULTY_BEST);
+ if (unlock_manager->getCurrentSlot()->isLocked("difficulty_best"))
+ {
+ unlock_manager->playLockSound();
+ UserConfigParams::m_difficulty = RaceManager::DIFFICULTY_HARD;
+ race_manager->setDifficulty(RaceManager::DIFFICULTY_HARD);
+ w->setSelection(2, PLAYER_ID_GAME_MASTER);
+ w->setFocusForPlayer(PLAYER_ID_GAME_MASTER);
+ }
+ else
+ {
+ UserConfigParams::m_difficulty = RaceManager::DIFFICULTY_BEST;
+ race_manager->setDifficulty(RaceManager::DIFFICULTY_BEST);
+ }
}
}
else if (name == "gamemode")
@@ -169,6 +180,7 @@ void RaceSetupScreen::eventCallback(Widget* widget, const std::string& name, con
{
StateManager::get()->escapePressed();
}
+
} // eventCallback
// -----------------------------------------------------------------------------
@@ -203,8 +215,17 @@ void RaceSetupScreen::init()
Screen::init();
RibbonWidget* w = getWidget("difficulty");
assert( w != NULL );
- w->setSelection( UserConfigParams::m_difficulty, PLAYER_ID_GAME_MASTER );
+ if (UserConfigParams::m_difficulty == RaceManager::DIFFICULTY_BEST &&
+ unlock_manager->getCurrentSlot()->isLocked("difficulty_best"))
+ {
+ w->setSelection(RaceManager::DIFFICULTY_HARD, PLAYER_ID_GAME_MASTER);
+ }
+ else
+ {
+ w->setSelection( UserConfigParams::m_difficulty, PLAYER_ID_GAME_MASTER );
+ }
+
SpinnerWidget* kartamount = getWidget("aikartamount");
kartamount->setActivated();
@@ -306,6 +327,18 @@ void RaceSetupScreen::init()
m_mode_listener = new GameModeRibbonListener(this);
w2->registerHoverListener(m_mode_listener);
+
+
+ if (unlock_manager->getCurrentSlot()->isLocked("difficulty_best"))
+ {
+ RibbonWidget* w = getWidget("difficulty");
+ assert(w != NULL);
+
+ int index = w->findItemNamed("best");
+ Widget* hardestWidget = &w->getChildren()[index];
+ hardestWidget->setBadge(LOCKED_BADGE);
+ hardestWidget->setDeactivated();
+ }
} // init
// -----------------------------------------------------------------------------
diff --git a/src/tinygettext/language.cpp b/src/tinygettext/language.cpp
index ab2b11624..351d40be3 100644
--- a/src/tinygettext/language.cpp
+++ b/src/tinygettext/language.cpp
@@ -39,7 +39,7 @@ struct LanguageSpec {
/** Language Definitions */
//*{
-LanguageSpec languages[] = {
+static const LanguageSpec languages[] = {
{ "aa", 0, 0, "Afar" },
{ "af", 0, 0, "Afrikaans" },
{ "af", "ZA", 0, "Afrikaans (South Africa)" },
@@ -364,7 +364,7 @@ resolve_language_alias(const std::string& name)
Language
Language::from_spec(const std::string& language, const std::string& country, const std::string& modifier)
{
- static std::map > language_map;
+ static std::map > language_map;
if (language_map.empty())
{ // Init language_map
@@ -372,10 +372,10 @@ Language::from_spec(const std::string& language, const std::string& country, con
language_map[languages[i].language].push_back(&languages[i]);
}
- std::map >::iterator i = language_map.find(language);
+ std::map >::iterator i = language_map.find(language);
if (i != language_map.end())
{
- std::vector& lst = i->second;
+ std::vector& lst = i->second;
LanguageSpec tmpspec;
tmpspec.language = language.c_str();
@@ -383,9 +383,9 @@ Language::from_spec(const std::string& language, const std::string& country, con
tmpspec.modifier = modifier.c_str();
Language tmplang(&tmpspec);
- LanguageSpec* best_match = 0;
+ const LanguageSpec* best_match = 0;
int best_match_score = 0;
- for(std::vector::iterator j = lst.begin(); j != lst.end(); ++j)
+ for(std::vector::iterator j = lst.begin(); j != lst.end(); ++j)
{ // Search for the language that best matches the given spec, value country more then modifier
int score = Language::match(Language(*j), tmplang);
@@ -445,7 +445,7 @@ Language::from_env(const std::string& env)
return from_spec(language, country, modifier);
}
-Language::Language(LanguageSpec* language_spec_)
+Language::Language(const LanguageSpec* language_spec_)
: language_spec(language_spec_)
{
}
diff --git a/src/tinygettext/language.hpp b/src/tinygettext/language.hpp
index bd4a3ea63..0ab2f3291 100644
--- a/src/tinygettext/language.hpp
+++ b/src/tinygettext/language.hpp
@@ -28,9 +28,9 @@ struct LanguageSpec;
class Language
{
private:
- LanguageSpec* language_spec;
+ const LanguageSpec* language_spec;
- Language(LanguageSpec* language_spec);
+ Language(const LanguageSpec* language_spec);
public:
/** Create a language from language and country code:
diff --git a/src/tracks/graph_node.cpp b/src/tracks/graph_node.cpp
index 9e193eda4..67e8d1ef3 100644
--- a/src/tracks/graph_node.cpp
+++ b/src/tracks/graph_node.cpp
@@ -18,8 +18,6 @@
#include "tracks/quad_graph.hpp"
-#include "config/user_config.hpp"
-#include "graphics/irr_driver.hpp"
#include "io/file_manager.hpp"
#include "io/xml_node.hpp"
#include "tracks/quad_graph.hpp"
diff --git a/src/tracks/track_object.cpp b/src/tracks/track_object.cpp
index 53a649854..dd49b482c 100644
--- a/src/tracks/track_object.cpp
+++ b/src/tracks/track_object.cpp
@@ -19,7 +19,6 @@
#include "tracks/track_object.hpp"
#include "animations/three_d_animation.hpp"
-#include "graphics/irr_driver.hpp"
#include "io/file_manager.hpp"
#include "io/xml_node.hpp"
#include "input/device_manager.hpp"
diff --git a/src/tracks/track_object_manager.cpp b/src/tracks/track_object_manager.cpp
index 2745a5d0e..5558e2de3 100644
--- a/src/tracks/track_object_manager.cpp
+++ b/src/tracks/track_object_manager.cpp
@@ -19,9 +19,7 @@
#include "tracks/track_object_manager.hpp"
#include "animations/ipo.hpp"
-#include "config/user_config.hpp"
#include "animations/three_d_animation.hpp"
-#include "graphics/irr_driver.hpp"
#include "graphics/lod_node.hpp"
#include "graphics/material_manager.hpp"
#include "io/xml_node.hpp"
@@ -57,7 +55,7 @@ void TrackObjectManager::add(const XMLNode &xml_node)
if (is_lod)
{
- printf("Adding lod obj to group <%s>\n", groupname.c_str());
+ //printf("Adding lod obj to group <%s>\n", groupname.c_str());
m_lod_objects[groupname].push_back(&xml_node);
}
else
diff --git a/src/tracks/track_sector.cpp b/src/tracks/track_sector.cpp
index 9c105f9c0..e7bc0ecd5 100644
--- a/src/tracks/track_sector.cpp
+++ b/src/tracks/track_sector.cpp
@@ -98,6 +98,8 @@ void TrackSector::update(const Vec3 &xyz)
} // update
// ----------------------------------------------------------------------------
+/** Sets current and last valid graph node to the rescue location.
+ */
void TrackSector::rescue()
{
if (m_last_valid_graph_node != QuadGraph::UNKNOWN_SECTOR)
diff --git a/src/utils/time.hpp b/src/utils/time.hpp
index df8ceacec..72e1bff44 100644
--- a/src/utils/time.hpp
+++ b/src/utils/time.hpp
@@ -86,6 +86,35 @@ public:
{
return irr_driver->getDevice()->getTimer()->getRealTime()/1000.0;
}; // getTimeSinceEpoch
+
+ // ------------------------------------------------------------------------
+ /**
+ * \brief Compare two different times.
+ * \return A signed integral indicating the relation between the time.
+ */
+ static int compareTime(TimeType time1, TimeType time2)
+ {
+ double diff = difftime(time1, time2);
+
+ if (diff > 0)
+ return 1;
+ else if (diff < 0)
+ return -1;
+ else
+ return 0;
+ }; // compareTime
+
+ // ------------------------------------------------------------------------
+ /**
+ * \brief Add a interval to a time.
+ */
+ static TimeType addInterval(TimeType time, int year, int month, int day) {
+ struct tm t = *gmtime(&time);
+ t.tm_year += year;
+ t.tm_mon += month;
+ t.tm_mday += day;
+ return mktime(&t);
+ }
class ScopeProfiler
{