From b359e8f9fd288ae6d964f15e5c9a544f878624a0 Mon Sep 17 00:00:00 2001 From: Elderme Date: Sat, 18 Jun 2016 19:28:54 +0200 Subject: [PATCH] Merged with master, solved conflicts --- .travis.yml | 2 +- CHANGELOG.md | 17 +- CMakeLists.txt | 14 +- INSTALL.md | 10 +- README.md | 40 +- data/CREDITS | Bin 16472 -> 16560 bytes .../{subsea.challenge => abyss.challenge} | 8 +- data/challenges/jungle.challenge | 2 +- data/challenges/volcano_island.challenge | 19 + data/grandprix/1_penguinplayground.grandprix | 2 +- data/grandprix/3_tothemoonandback.grandprix | 2 +- data/graphical_restrictions.xml | 17 +- data/gui/ghost_replay_info_dialog.stkgui | 40 + data/gui/ghost_replay_selection.stkgui | 26 + data/gui/grand_prix_lose.stkgui | 9 +- data/gui/grand_prix_win.stkgui | 9 +- data/gui/help1.stkgui | Bin 7162 -> 7162 bytes data/gui/help2.stkgui | Bin 8682 -> 8682 bytes data/gui/help3.stkgui | Bin 8562 -> 8564 bytes data/gui/help4.stkgui | Bin 5858 -> 5858 bytes data/gui/mode_ghost.png | Bin 0 -> 11301 bytes data/gui/online/create_server.stkgui | 36 + data/gui/online/networking_lobby.stkgui | 10 +- data/gui/online/online_screen.stkgui | 63 - .../online/profile_achievements_tab.stkgui | 1 + data/gui/online/profile_friends.stkgui | 1 + data/gui/online/profile_servers.stkgui | 61 + data/gui/online/profile_settings.stkgui | 1 + data/gui/online/server_info_dialog.stkgui | 14 + data/gui/online/waiting_for_others.stkgui | 11 + data/gui/track_info.stkgui | 25 +- data/gui/track_random.png | Bin 8101 -> 24003 bytes data/gui/tracks.stkgui | 11 +- data/gui/tracks_and_gp.stkgui | 30 + data/gui/user_screen.stkgui | 40 +- data/kart_characteristics.xml | 2 +- data/localized_name.txt | 231 + data/po/da_DK.po | 3369 ------------- data/po/supertuxkart.pot | 1096 ++-- data/po/update_po_authors.py | 124 +- data/replay/standard_easy_farm.replay | 2867 +++++++++++ data/replay/standard_easy_hacienda.replay | 4435 +++++++++++++++++ data/replay/standard_easy_island.replay | 3542 +++++++++++++ data/replay/standard_expert_abyss.replay | 2594 ++++++++++ data/replay/standard_expert_mines.replay | 2378 +++++++++ .../standard_expert_stkenterprise.replay | 2239 +++++++++ data/replay/standard_expert_xr591.replay | 2281 +++++++++ .../standard_intermediate_lighthouse.replay | 1924 +++++++ .../standard_intermediate_snowmountain.replay | 2081 ++++++++ .../standard_intermediate_snowpeak.replay | 2515 ++++++++++ data/shaders/bilateralH.comp | 2 +- data/shaders/bilateralV.comp | 2 +- data/shaders/blurshadowH.comp | 2 +- data/shaders/blurshadowV.comp | 2 +- data/shaders/gaussian6h.comp | 2 +- data/shaders/gaussian6v.comp | 2 +- data/shaders/sky.frag | 2 +- data/shaders/ssao.frag | 2 +- data/skins/Forest.stkskin | 4 + data/skins/Ocean.stkskin | 4 + data/skins/Peach.stkskin | 4 + data/skins/Ruby.stkskin | 4 + data/skins/forest/generic.png | Bin 0 -> 23440 bytes data/skins/ocean/generic.png | Bin 0 -> 22771 bytes data/skins/peach/generic.png | Bin 0 -> 25366 bytes data/skins/ruby/generic.png | Bin 0 -> 20300 bytes data/stk_config.xml | 7 - data/supertuxkart.appdata.xml | 26 +- lib/angelscript/include/angelscript.h | 18 +- lib/angelscript/projects/cmake/CMakeLists.txt | 16 +- lib/angelscript/source/as_builder.cpp | 178 +- lib/angelscript/source/as_builder.h | 3 +- lib/angelscript/source/as_bytecode.cpp | 50 +- lib/angelscript/source/as_bytecode.h | 4 +- lib/angelscript/source/as_callfunc.cpp | 19 +- lib/angelscript/source/as_callfunc_arm_gcc.S | 54 +- lib/angelscript/source/as_callfunc_arm_vita.S | 85 +- .../source/as_callfunc_arm_xcode.S | 7 +- lib/angelscript/source/as_callfunc_mips.cpp | 345 +- .../source/as_callfunc_x64_gcc.cpp | 16 +- lib/angelscript/source/as_callfunc_x86.cpp | 18 +- lib/angelscript/source/as_callfunc_xenon.cpp | 40 +- lib/angelscript/source/as_compiler.cpp | 763 ++- lib/angelscript/source/as_compiler.h | 123 +- lib/angelscript/source/as_config.h | 63 +- lib/angelscript/source/as_context.cpp | 85 +- lib/angelscript/source/as_datatype.cpp | 2 +- lib/angelscript/source/as_debug.h | 30 +- lib/angelscript/source/as_gc.cpp | 11 +- lib/angelscript/source/as_module.cpp | 69 +- lib/angelscript/source/as_objecttype.cpp | 22 +- lib/angelscript/source/as_objecttype.h | 3 +- lib/angelscript/source/as_parser.cpp | 308 +- lib/angelscript/source/as_parser.h | 6 +- lib/angelscript/source/as_restore.cpp | 593 ++- lib/angelscript/source/as_scriptengine.cpp | 302 +- lib/angelscript/source/as_scriptengine.h | 10 +- lib/angelscript/source/as_scriptfunction.cpp | 29 +- lib/angelscript/source/as_scriptfunction.h | 16 +- lib/angelscript/source/as_scriptobject.cpp | 40 +- lib/angelscript/source/as_scriptobject.h | 5 +- lib/angelscript/source/as_texts.h | 2 + lib/angelscript/source/as_tokendef.h | 3 +- lib/angelscript/source/as_typeinfo.cpp | 28 +- lib/angelscript/source/as_typeinfo.h | 10 +- lib/bullet/CMakeLists.txt | 4 +- .../CollisionDispatch/btCollisionObject.h | 26 +- .../BulletDynamics/Dynamics/btRigidBody.cpp | 24 +- .../src/BulletDynamics/Dynamics/btRigidBody.h | 90 +- lib/bullet/src/LinearMath/btSerializer.cpp | 197 +- lib/enet/CMakeLists.txt | 4 +- lib/glew/CMakeLists.txt | 8 +- lib/irrlicht/CMakeLists.txt | 4 +- lib/irrlicht/include/EMaterialTypes.h | 9 + lib/irrlicht/include/IMesh.h | 12 + lib/jpeglib/CMakeLists.txt | 4 +- lib/libpng/CMakeLists.txt | 4 +- lib/wiiuse/CMakeLists.txt | 8 +- sources.cmake | 2 +- src/addons/addon.hpp | 1 - src/addons/addons_manager.cpp | 10 +- src/addons/news_manager.cpp | 12 +- src/animations/animation_base.cpp | 6 +- src/animations/ipo.cpp | 8 +- src/animations/three_d_animation.cpp | 12 +- src/audio/sfx_manager.cpp | 1 + src/audio/sfx_openal.cpp | 6 +- src/challenges/challenge_data.cpp | 20 + src/challenges/challenge_data.hpp | 5 + src/config/player_profile.cpp | 2 + src/config/user_config.hpp | 17 +- src/graphics/2dutils.cpp | 10 +- src/graphics/2dutils.hpp | 2 +- src/graphics/camera.cpp | 63 +- src/graphics/camera.hpp | 46 +- src/graphics/central_settings.cpp | 23 +- src/graphics/central_settings.hpp | 4 +- src/graphics/draw_calls.cpp | 4 +- src/graphics/draw_policies.cpp | 13 +- src/graphics/graphics_restrictions.cpp | 3 +- src/graphics/graphics_restrictions.hpp | 3 +- src/graphics/hit_sfx.hpp | 2 +- src/graphics/irr_driver.cpp | 11 +- src/graphics/irr_driver.hpp | 3 +- src/graphics/lighting_passes.cpp | 1 + src/graphics/material.cpp | 21 +- src/graphics/material_manager.cpp | 7 + src/graphics/render_target.cpp | 6 +- src/graphics/shader.cpp | 3 + src/graphics/shader_based_renderer.cpp | 1 + src/graphics/shaders.hpp | 1 - src/graphics/shadow_matrices.cpp | 1 + src/graphics/skybox.cpp | 1 + src/graphics/stk_animated_mesh.cpp | 4 + src/graphics/stk_mesh.cpp | 3 +- src/graphics/stk_mesh_scene_node.cpp | 9 +- src/graphics/stk_scene_manager.cpp | 1 - src/graphics/stk_text_billboard.hpp | 2 +- src/guiengine/engine.cpp | 4 +- src/guiengine/message_queue.cpp | 2 + src/guiengine/message_queue.hpp | 2 +- src/guiengine/skin.cpp | 3 +- src/guiengine/widgets/model_view_widget.cpp | 13 +- src/guiengine/widgets/model_view_widget.hpp | 1 + src/guiengine/widgets/ribbon_widget.cpp | 3 + src/input/device_manager.hpp | 17 +- src/input/gamepad_config.cpp | 16 +- src/input/gamepad_config.hpp | 8 +- src/input/gamepad_device.cpp | 4 +- src/input/gamepad_device.hpp | 2 +- src/input/input_manager.cpp | 133 +- src/io/file_manager.cpp | 36 + src/io/file_manager.hpp | 18 +- src/items/attachment.cpp | 29 +- src/items/flyable.cpp | 38 +- src/items/item.hpp | 1 + src/items/item_manager.cpp | 113 +- src/items/item_manager.hpp | 5 + src/items/powerup.cpp | 9 +- src/items/rubber_ball.cpp | 12 +- src/items/swatter.cpp | 14 +- src/karts/abstract_kart.cpp | 14 +- src/karts/abstract_kart.hpp | 20 +- src/karts/controller/ai_base_controller.cpp | 26 +- src/karts/controller/ai_base_controller.hpp | 21 +- .../controller/ai_base_lap_controller.cpp | 5 +- .../controller/ai_base_lap_controller.hpp | 4 +- src/karts/controller/ai_properties.hpp | 1 + src/karts/controller/arena_ai.cpp | 566 +-- src/karts/controller/arena_ai.hpp | 46 +- src/karts/controller/battle_ai.cpp | 17 +- src/karts/controller/battle_ai.hpp | 3 +- src/karts/controller/controller.cpp | 8 +- src/karts/controller/controller.hpp | 27 +- src/karts/controller/end_controller.cpp | 4 +- src/karts/controller/end_controller.hpp | 38 +- src/karts/controller/ghost_controller.cpp | 85 + src/karts/controller/ghost_controller.hpp | 78 + .../controller/local_player_controller.cpp | 25 +- .../controller/local_player_controller.hpp | 9 + .../controller/network_player_controller.hpp | 4 +- src/karts/controller/player_controller.cpp | 6 +- src/karts/controller/player_controller.hpp | 11 +- src/karts/controller/skidding_ai.cpp | 178 +- src/karts/controller/soccer_ai.cpp | 406 +- src/karts/controller/soccer_ai.hpp | 37 +- src/karts/controller/test_ai.cpp | 2554 ++++++++++ src/karts/controller/test_ai.hpp | 246 + src/karts/ghost_kart.cpp | 163 +- src/karts/ghost_kart.hpp | 49 +- src/karts/kart.cpp | 87 +- src/karts/kart.hpp | 38 +- src/karts/kart_gfx.cpp | 99 + src/karts/kart_gfx.hpp | 5 + src/karts/kart_model.cpp | 110 +- src/karts/kart_model.hpp | 7 +- src/karts/kart_properties.hpp | 5 +- src/karts/moveable.cpp | 17 +- src/karts/moveable.hpp | 1 + src/karts/rescue_animation.cpp | 2 + src/karts/skidding.cpp | 9 +- src/main.cpp | 217 +- src/main_loop.cpp | 20 +- src/modes/cutscene_world.cpp | 8 +- src/modes/easter_egg_hunt.hpp | 16 +- src/modes/follow_the_leader.hpp | 2 +- src/modes/linear_world.cpp | 8 +- src/modes/linear_world.hpp | 8 +- src/modes/overworld.hpp | 2 +- src/modes/profile_world.cpp | 17 +- src/modes/soccer_world.cpp | 504 +- src/modes/soccer_world.hpp | 298 +- src/modes/standard_race.cpp | 9 +- src/modes/standard_race.hpp | 2 +- src/modes/three_strikes_battle.cpp | 38 +- src/modes/three_strikes_battle.hpp | 8 + src/modes/world.cpp | 129 +- src/modes/world.hpp | 6 +- src/modes/world_status.cpp | 41 +- src/modes/world_status.hpp | 5 +- src/modes/world_with_rank.hpp | 2 +- src/network/event.cpp | 34 +- src/network/event.hpp | 23 +- src/network/game_setup.cpp | 21 +- src/network/game_setup.hpp | 3 +- src/network/network.cpp | 31 +- src/network/network.hpp | 7 +- src/network/network_config.cpp | 1 + src/network/network_config.hpp | 9 + src/network/network_console.cpp | 43 +- src/network/network_console.hpp | 12 +- src/network/network_player_profile.cpp | 18 +- src/network/network_player_profile.hpp | 8 +- src/network/network_string.cpp | 123 +- src/network/network_string.hpp | 651 +-- src/network/protocol.cpp | 91 +- src/network/protocol.hpp | 58 +- src/network/protocol_manager.cpp | 288 +- src/network/protocol_manager.hpp | 140 +- .../protocols/client_lobby_room_protocol.cpp | 660 ++- .../protocols/client_lobby_room_protocol.hpp | 107 +- src/network/protocols/connect_to_peer.cpp | 11 +- src/network/protocols/connect_to_peer.hpp | 8 +- src/network/protocols/connect_to_server.cpp | 27 +- src/network/protocols/connect_to_server.hpp | 6 +- .../protocols/controller_events_protocol.cpp | 160 +- .../protocols/controller_events_protocol.hpp | 14 +- .../protocols/game_events_protocol.cpp | 119 +- .../protocols/game_events_protocol.hpp | 24 +- src/network/protocols/get_peer_address.hpp | 11 +- src/network/protocols/get_public_address.cpp | 32 +- src/network/protocols/get_public_address.hpp | 54 +- src/network/protocols/hide_public_address.hpp | 42 +- .../protocols/kart_update_protocol.cpp | 191 +- .../protocols/kart_update_protocol.hpp | 36 +- src/network/protocols/lobby_room_protocol.hpp | 40 +- src/network/protocols/ping_protocol.cpp | 5 +- src/network/protocols/ping_protocol.hpp | 20 +- src/network/protocols/request_connection.cpp | 5 +- src/network/protocols/request_connection.hpp | 14 +- .../protocols/server_lobby_room_protocol.cpp | 575 ++- .../protocols/server_lobby_room_protocol.hpp | 28 +- src/network/protocols/start_game_protocol.cpp | 153 +- src/network/protocols/start_game_protocol.hpp | 12 +- src/network/protocols/stop_server.hpp | 36 +- .../protocols/synchronization_protocol.cpp | 125 +- .../protocols/synchronization_protocol.hpp | 15 +- src/network/race_config.cpp | 22 +- src/network/race_config.hpp | 11 +- ...twork_world.cpp => race_event_manager.cpp} | 53 +- ...twork_world.hpp => race_event_manager.hpp} | 22 +- src/network/server.cpp | 5 + src/network/server.hpp | 13 + src/network/servers_manager.cpp | 34 +- src/network/stk_host.cpp | 129 +- src/network/stk_host.hpp | 42 +- src/network/stk_peer.cpp | 25 +- src/network/stk_peer.hpp | 42 +- src/online/xml_request.hpp | 9 +- src/physics/kart_motion_state.hpp | 16 +- src/physics/physical_object.cpp | 55 +- src/physics/physical_object.hpp | 21 +- src/physics/physics.cpp | 59 +- src/race/grand_prix_data.cpp | 2 +- src/race/race_manager.cpp | 118 +- src/race/race_manager.hpp | 72 +- src/replay/replay_base.cpp | 19 +- src/replay/replay_base.hpp | 56 +- src/replay/replay_play.cpp | 294 +- src/replay/replay_play.hpp | 124 +- src/replay/replay_recorder.cpp | 219 +- src/replay/replay_recorder.hpp | 24 +- src/scriptengine/script_engine.cpp | 2 +- src/scriptengine/script_track.cpp | 22 +- src/states_screens/addons_screen.hpp | 2 +- src/states_screens/create_server_screen.cpp | 35 +- src/states_screens/credits.hpp | 2 +- src/states_screens/cutscene_gui.hpp | 4 +- src/states_screens/dialogs/addons_loading.cpp | 5 +- src/states_screens/dialogs/addons_loading.hpp | 8 +- .../dialogs/confirm_resolution_dialog.hpp | 6 +- src/states_screens/dialogs/debug_slider.hpp | 2 +- .../dialogs/ghost_replay_info_dialog.cpp | 158 + .../dialogs/ghost_replay_info_dialog.hpp | 59 + src/states_screens/dialogs/gp_info_dialog.cpp | 303 -- src/states_screens/dialogs/gp_info_dialog.hpp | 83 - src/states_screens/dialogs/message_dialog.hpp | 11 +- .../dialogs/scripting_console.hpp | 2 +- .../dialogs/select_challenge.cpp | 9 +- .../dialogs/server_info_dialog.cpp | 11 +- .../dialogs/tutorial_message_dialog.hpp | 2 +- src/states_screens/edit_gp_screen.hpp | 4 +- src/states_screens/feature_unlocked.cpp | 2 +- src/states_screens/ghost_replay_selection.cpp | 233 + src/states_screens/ghost_replay_selection.hpp | 82 + src/states_screens/gp_info_screen.hpp | 4 +- src/states_screens/grand_prix_cutscene.hpp | 2 +- .../grand_prix_editor_screen.cpp | 1 - .../grand_prix_editor_screen.hpp | 4 +- src/states_screens/grand_prix_lose.cpp | 3 + src/states_screens/grand_prix_win.cpp | 12 +- src/states_screens/kart_selection.cpp | 37 +- src/states_screens/kart_selection.hpp | 3 + src/states_screens/main_menu_screen.cpp | 37 +- src/states_screens/main_menu_screen.hpp | 4 + src/states_screens/network_kart_selection.cpp | 43 +- src/states_screens/network_kart_selection.hpp | 2 +- src/states_screens/networking_lobby.cpp | 81 +- src/states_screens/networking_lobby.hpp | 2 + src/states_screens/offline_kart_selection.cpp | 1 - .../online_profile_achievements.cpp | 5 +- src/states_screens/online_profile_base.cpp | 48 +- src/states_screens/online_profile_base.hpp | 1 + src/states_screens/online_profile_friends.cpp | 1 + src/states_screens/online_profile_friends.hpp | 2 +- src/states_screens/online_profile_servers.cpp | 181 + src/states_screens/online_profile_servers.hpp | 59 + .../online_profile_settings.cpp | 1 + src/states_screens/online_screen.cpp | 315 -- src/states_screens/online_screen.hpp | 92 - src/states_screens/options_screen_ui.cpp | 7 +- src/states_screens/race_gui.cpp | 8 +- src/states_screens/race_gui_base.cpp | 13 +- src/states_screens/race_result_gui.cpp | 1999 ++++---- src/states_screens/race_result_gui.hpp | 30 +- src/states_screens/race_setup_screen.cpp | 27 +- src/states_screens/register_screen.hpp | 4 +- src/states_screens/server_selection.cpp | 39 +- src/states_screens/server_selection.hpp | 2 +- src/states_screens/track_info_screen.cpp | 99 +- src/states_screens/track_info_screen.hpp | 9 +- src/states_screens/tracks_and_gp_screen.cpp | 322 ++ src/states_screens/tracks_and_gp_screen.hpp | 66 + src/states_screens/tracks_screen.cpp | 131 +- src/states_screens/tracks_screen.hpp | 5 +- src/states_screens/user_screen.cpp | 21 + src/states_screens/user_screen.hpp | 22 +- src/states_screens/waiting_for_others.cpp | 104 + src/states_screens/waiting_for_others.hpp | 49 + src/tracks/battle_graph.cpp | 74 +- src/tracks/battle_graph.hpp | 42 +- src/tracks/check_goal.cpp | 26 +- src/tracks/check_goal.hpp | 24 +- src/tracks/graph_structure.cpp | 6 +- src/tracks/graph_structure.hpp | 8 + src/tracks/nav_poly.cpp | 2 +- src/tracks/nav_poly.hpp | 14 +- src/tracks/quad_graph.hpp | 3 + src/tracks/track.cpp | 88 +- src/tracks/track.hpp | 9 +- src/utils/debug.cpp | 14 +- src/utils/profiler.cpp | 1 + src/utils/translation.cpp | 74 +- src/utils/translation.hpp | 4 + src/utils/vs.hpp | 1 - src/windows_installer/icon_rc.template | 1 - .../prerequisites/oalinst.exe | Bin 782336 -> 0 bytes .../prerequisites/vcredist_x86.exe | Bin 2686232 -> 0 bytes {src => tools}/windows_installer/icon.ico | Bin tools/windows_installer/icon_rc.template | 1 + {src => tools}/windows_installer/install.ico | Bin .../windows_installer/logo_slim.bmp | Bin .../prerequisites/vcredist_x86.exe | Bin 0 -> 13767776 bytes .../windows_installer/stk_installer.bmp | Bin .../windows_installer/supertuxkart.nsi | 506 +- .../windows_installer/uninstall.ico | Bin 406 files changed, 43018 insertions(+), 11640 deletions(-) rename data/challenges/{subsea.challenge => abyss.challenge} (66%) create mode 100644 data/challenges/volcano_island.challenge create mode 100644 data/gui/ghost_replay_info_dialog.stkgui create mode 100644 data/gui/ghost_replay_selection.stkgui create mode 100644 data/gui/mode_ghost.png delete mode 100644 data/gui/online/online_screen.stkgui create mode 100644 data/gui/online/profile_servers.stkgui create mode 100644 data/gui/online/waiting_for_others.stkgui create mode 100644 data/gui/tracks_and_gp.stkgui create mode 100644 data/localized_name.txt delete mode 100644 data/po/da_DK.po create mode 100644 data/replay/standard_easy_farm.replay create mode 100644 data/replay/standard_easy_hacienda.replay create mode 100644 data/replay/standard_easy_island.replay create mode 100644 data/replay/standard_expert_abyss.replay create mode 100644 data/replay/standard_expert_mines.replay create mode 100644 data/replay/standard_expert_stkenterprise.replay create mode 100644 data/replay/standard_expert_xr591.replay create mode 100644 data/replay/standard_intermediate_lighthouse.replay create mode 100644 data/replay/standard_intermediate_snowmountain.replay create mode 100644 data/replay/standard_intermediate_snowpeak.replay create mode 100644 data/skins/forest/generic.png create mode 100644 data/skins/ocean/generic.png create mode 100644 data/skins/peach/generic.png create mode 100644 data/skins/ruby/generic.png create mode 100644 src/karts/controller/ghost_controller.cpp create mode 100644 src/karts/controller/ghost_controller.hpp create mode 100644 src/karts/controller/test_ai.cpp create mode 100644 src/karts/controller/test_ai.hpp rename src/network/{network_world.cpp => race_event_manager.cpp} (62%) rename src/network/{network_world.hpp => race_event_manager.hpp} (70%) mode change 100644 => 100755 create mode 100644 src/states_screens/dialogs/ghost_replay_info_dialog.cpp create mode 100644 src/states_screens/dialogs/ghost_replay_info_dialog.hpp delete mode 100644 src/states_screens/dialogs/gp_info_dialog.cpp delete mode 100644 src/states_screens/dialogs/gp_info_dialog.hpp create mode 100644 src/states_screens/ghost_replay_selection.cpp create mode 100644 src/states_screens/ghost_replay_selection.hpp create mode 100644 src/states_screens/online_profile_servers.cpp create mode 100644 src/states_screens/online_profile_servers.hpp delete mode 100644 src/states_screens/online_screen.cpp delete mode 100644 src/states_screens/online_screen.hpp create mode 100644 src/states_screens/tracks_and_gp_screen.cpp create mode 100644 src/states_screens/tracks_and_gp_screen.hpp create mode 100644 src/states_screens/waiting_for_others.cpp create mode 100644 src/states_screens/waiting_for_others.hpp delete mode 100644 src/windows_installer/icon_rc.template delete mode 100755 src/windows_installer/prerequisites/oalinst.exe delete mode 100755 src/windows_installer/prerequisites/vcredist_x86.exe rename {src => tools}/windows_installer/icon.ico (100%) create mode 100644 tools/windows_installer/icon_rc.template rename {src => tools}/windows_installer/install.ico (100%) rename {src => tools}/windows_installer/logo_slim.bmp (100%) create mode 100755 tools/windows_installer/prerequisites/vcredist_x86.exe rename {src => tools}/windows_installer/stk_installer.bmp (100%) rename {src => tools}/windows_installer/supertuxkart.nsi (56%) mode change 100644 => 100755 rename {src => tools}/windows_installer/uninstall.ico (100%) diff --git a/.travis.yml b/.travis.yml index 81765cf2f..5cdbe2ecc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -47,7 +47,7 @@ script: notifications: irc: channels: - - "irc.freenode.org#stk" + - "irc.freenode.org#supertuxkart" skip_join: false use_notice: true template: diff --git a/CHANGELOG.md b/CHANGELOG.md index ace19a2ff..2c14592f0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,19 @@ -## SupertTuxKart 0.9.1 +## SuperTuxKart 0.9.2 +* Ghost replay races by Benau +* Battle mode AI by Benau +* Soccer mode AI by Benau +* New icy soccer field by samuncle and Benau +* New subsea track by samuncle +* New volcano track by Ponzino +* TTF font rendering by Benau +* Kart properties refactor by Flakebi +* Scripting work under the hood +* Work on the track editor by mhp +* Tweak to challenges +* New farm track song by 0zone0ne and Krobonil +* Bugfixes + +## SuperTuxKart 0.9.1 * Many bug fixes * Started to use scripting in tracks * Significant audio performance improvements diff --git a/CMakeLists.txt b/CMakeLists.txt index ff54abfc2..5afeef9f0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -68,6 +68,7 @@ add_subdirectory("${PROJECT_SOURCE_DIR}/lib/enet") include_directories("${PROJECT_SOURCE_DIR}/lib/enet/include") # Build glew library +add_definitions(-DGLEW_NO_GLU) add_subdirectory("${PROJECT_SOURCE_DIR}/lib/glew") include_directories("${PROJECT_SOURCE_DIR}/lib/glew/include") @@ -117,8 +118,8 @@ endif() include_directories(${STK_SOURCE_DIR}) if(APPLE) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -arch i386") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -arch i386 -F/Library/Frameworks") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -arch x86_64") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -arch x86_64 -F/Library/Frameworks") elseif(MSVC) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP") # Enable multi-processor compilation (faster) endif() @@ -258,7 +259,7 @@ endif() add_definitions(-DHAVE_OGGVORBIS) if(WIN32) - configure_file("${STK_SOURCE_DIR}/windows_installer/icon_rc.template" "${PROJECT_BINARY_DIR}/tmp/icon.rc") + configure_file("${STK_SOURCE_DIR}/../tools/windows_installer/icon_rc.template" "${PROJECT_BINARY_DIR}/tmp/icon.rc") endif() # Provides list of source and header files (STK_SOURCES and STK_HEADERS) @@ -365,12 +366,17 @@ if(UNIX AND NOT APPLE) endif() endif() +# FreeBSD does not search in /usr/local/lib, but at least Freetype is installed there :( +if(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") + SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L/usr/local/lib") +endif() + if(APPLE) # In theory it would be cleaner to let CMake detect the right dependencies. In practice, this means that if a OSX user has # unix-style installs of Vorbis/Ogg/OpenAL/etc. they will be picked up over our frameworks. This is blocking when I make releases : # the mac I use to make STK releases does have other installs of vorbis/ogg/etc. which aren't compatible with STK, so letting # CMake pick the library it wants essentially means I can't build. - set_target_properties(supertuxkart PROPERTIES LINK_FLAGS "-arch i386 -F/Library/Frameworks -framework OpenAL -framework Ogg -framework Vorbis") + set_target_properties(supertuxkart PROPERTIES LINK_FLAGS "-arch x86_64 -F/Library/Frameworks -framework OpenAL -framework Ogg -framework Vorbis") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I/Library/Frameworks/OpenAL.framework/Versions/A/Headers") endif() diff --git a/INSTALL.md b/INSTALL.md index 1ad394617..bfdd65a32 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -1,6 +1,7 @@ # SuperTuxKart Installation Instructions -Note: If you obtained this source code from Github, you also need to download the game assets from Sourceforge using SVN. +Note: If you obtained this source code from Github, you also need to download +the game assets from Sourceforge using SVN. `svn checkout https://svn.code.sf.net/p/supertuxkart/code/stk-assets stk-assets` @@ -16,6 +17,7 @@ First, make sure that you have the following packages installed: * OpenAL (recommended: openal-soft-devel) * Ogg (libogg-dev) * Vorbis (libvorbis-dev) + * Freetype (libfreetype6-dev) * libcurl (libcurl-devel) * libbluetooth (bluez-devel) * libpng (libpng-devel) @@ -25,8 +27,10 @@ First, make sure that you have the following packages installed: Ubuntu command: ``` -sudo apt-get install autoconf automake build-essential cmake libogg-dev libvorbis-dev libopenal-dev libxxf86vm-dev \ -libgl1-mesa-dev libglu1-mesa-dev libcurl4-openssl-dev libfribidi-dev libbluetooth-dev libxrandr-dev +sudo apt-get install build-essential cmake libbluetooth-dev \ +libcurl4-gnutls-dev libfreetype6-dev libfribidi-dev libgl1-mesa-dev \ +libjpeg-dev libogg-dev libopenal-dev libpng-dev libvorbis-dev libxrandr-dev \ +mesa-common-dev pkg-config zlib1g-dev ``` Unpack the files from the tarball like this: diff --git a/README.md b/README.md index 27ff5a639..abc3748d1 100644 --- a/README.md +++ b/README.md @@ -1,59 +1,45 @@ # SuperTuxKart [![Build Status](https://travis-ci.org/supertuxkart/stk-code.png?branch=master)](https://travis-ci.org/supertuxkart/stk-code) -SuperTuxKart is a free kart racing game. It is focusing on fun and -not on realistic kart physics. Instruction can be found on the -in-game help page. +SuperTuxKart is a free kart racing game. It focuses on fun and not on realistic kart physics. Instructions can be found on the in-game help page. The SuperTuxKart homepage can be found at: -The official SuperTuxKart forum is at . If you need support, -this would be the best place to start. +The official SuperTuxKart forum is at . If you need support, this would be the best place to start. Hope you enjoy the game. -- The SuperTuxKart development team. - ## Hardware Requirements -* You need a 3D graphics card. (NVIDIA GeForce 8xxx and higher, ATI Radeon HD 4xxx and higher or Intel HD 3000 and higher) +* You need a 3D graphics card. (NVIDIA GeForce 8xxx and higher, ATI Radeon HD 4xxx and higher or Intel HD 3000 and higher.) * You should have a CPU that's running at 1GHz or better. * You'll need at least 512 MB of free VRAM (video memory). * Disk space: 400MB * Ideally, you want a joystick with at least 6 buttons. - ## Compiling SuperTuxKart ### Windows 1. Install VS 2013 (or later). The free express versions work fine. -2. Download and install a source package - either a released package or from our [git/svn repositories](http://supertuxkart.sourceforge.net/Source_control) -3. Download the latest dependency package depdendencies_for_0.8.2.zip from [here](https://sourceforge.net/projects/supertuxkart/files/SuperTuxKart%20Dependencies/Windows/). Unzip it in the root directory, so that the dependencies directory is next to the src and data directory (if you are updating from a previous dependency package, you can delete the .dll files in the root directory, they are not needed anymore). -4. Download cmake and install it. Then start cmake-gui and select the STK root directory as 'Where is the source code', and a new directory in the root directory (next to src, data etc) as build directory (for now I assume that this directory is called bld). -5. Click on configure. You will be asked to create the directory (yes), then for your VS version. Make sure to select the right version (be aware of the easy to confuse version numbers: VS 2013 = version 12). Click on configure, then generate. This will create the directory 'bld', and a VS solution in that directory. -6. In Visual Studio open the project file generated in the 'bld' folder +2. Download and install a source package - either a released package or from our [git/svn repositories](http://supertuxkart.sourceforge.net/Source_control). +3. Download the latest dependency package from [here](https://sourceforge.net/projects/supertuxkart/files/SuperTuxKart%20Dependencies/Windows/). Unzip it in the root directory, so that the dependencies directory is next to the src and data directories (if you are updating from a previous dependency package, you can delete the .dll files in the root directory, they are not needed anymore). +4. Download cmake and install it. Then start cmake-gui and select the STK root directory as 'Where is the source code', and a new directory in the root directory (next to src, data etc) as the build directory (for now I assume that this directory is called bld). +5. Click on configure. You will be asked to create the directory (yes), then for your VS version. Make sure you select the right version (be aware of the easy to confuse version numbers: VS 2013 = version 12). Click on configure, then generate. This will create the directory 'bld', and a VS solution in that directory. +6. In Visual Studio open the project file generated in the 'bld' folder. 7. Right click on the supertuxkart project in the solution explorer, and select "Set as StartUp Project". 8. Select Build->Build Solution (or press F7) to compile. -Compilation with cygwin is not officially supported, but -this has been done (check with the forum for details). +Compilation with cygwin is not officially supported, but this has been done (check with the forum for details). ### Mac OS X -The latest information about compilation on Mac are on our wiki: - -The Xcode project file is in `/src/ide/Xcode/`, but it still -requires that all dependencies are installed as explained on the wiki. +The latest information about compilation on Mac are on our wiki: ### UNIX See [`INSTALL.md`](INSTALL.md) for details. - ## License -This software is released under the GNU General Public License (GPL) which -can be found in the file [`COPYING`](/COPYING) in the same directory as this file. -Information about the licenses for artwork are contained in -`data/licenses`. - +This software is released under the GNU General Public License (GPL) which can be found in the file [`COPYING`](/COPYING) in the same directory as this file. Information about the licenses for artwork are contained in `data/licenses`. ## 3D coordinates A reminder for those looking at the code and 3d models: @@ -62,6 +48,4 @@ STK : X right, Y up, Z forwards Blender: X right, Y forwards, Z up -The exporters perform the needed transform, so in Blender you just work -with XY plane as ground, and things will appear fine in STK (using XZ -as ground in the code, obviously). +The exporters perform the needed transform, so in Blender you just work with XY plane as ground, and things will appear fine in STK (using XZ as ground in the code, obviously). diff --git a/data/CREDITS b/data/CREDITS index d36394892ab91f94c52c3ae0fb8e6aaf41715b33..96165c2729151f833543c65f7447d9ea4615c165 100755 GIT binary patch delta 140 zcmcc7z__82aYGurv<`y;LpnnSLq0<>LkW;w#E{BRz>vd`$WS?Xu7c#|I`$hZ@&Q2U zJccTUOdy#LRAdFjVL(<6Lo!fd-eg8T(aGC*WF|ZCicG%5Bgd#d`906Z$%}Y}CchBl ho1DU - + - + - + - + diff --git a/data/challenges/jungle.challenge b/data/challenges/jungle.challenge index 46ec0a924..b3e280633 100644 --- a/data/challenges/jungle.challenge +++ b/data/challenges/jungle.challenge @@ -2,7 +2,7 @@ - + diff --git a/data/challenges/volcano_island.challenge b/data/challenges/volcano_island.challenge new file mode 100644 index 000000000..10250c4f1 --- /dev/null +++ b/data/challenges/volcano_island.challenge @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/data/grandprix/1_penguinplayground.grandprix b/data/grandprix/1_penguinplayground.grandprix index 7da95f0c2..a0e7d2b23 100644 --- a/data/grandprix/1_penguinplayground.grandprix +++ b/data/grandprix/1_penguinplayground.grandprix @@ -4,7 +4,7 @@ - + diff --git a/data/grandprix/3_tothemoonandback.grandprix b/data/grandprix/3_tothemoonandback.grandprix index 2d0f4b104..f5535d00f 100644 --- a/data/grandprix/3_tothemoonandback.grandprix +++ b/data/grandprix/3_tothemoonandback.grandprix @@ -5,7 +5,7 @@ - + diff --git a/data/graphical_restrictions.xml b/data/graphical_restrictions.xml index e900c428b..dc0f0f011 100644 --- a/data/graphical_restrictions.xml +++ b/data/graphical_restrictions.xml @@ -4,21 +4,24 @@ - - - + + + + + + - - + + - - + + diff --git a/data/gui/ghost_replay_info_dialog.stkgui b/data/gui/ghost_replay_info_dialog.stkgui new file mode 100644 index 000000000..0a2e90f67 --- /dev/null +++ b/data/gui/ghost_replay_info_dialog.stkgui @@ -0,0 +1,40 @@ + + +
+
+
+ +
+
+
+
+ +
+
+ + +
+
+ + +
+
+ +
+ + + + + +
+
+
diff --git a/data/gui/ghost_replay_selection.stkgui b/data/gui/ghost_replay_selection.stkgui new file mode 100644 index 000000000..dec25c69b --- /dev/null +++ b/data/gui/ghost_replay_selection.stkgui @@ -0,0 +1,26 @@ + + +
+ +
+ +
+ +
+ + + + + +
+
+ + +
+
+ +
+
diff --git a/data/gui/grand_prix_lose.stkgui b/data/gui/grand_prix_lose.stkgui index e08bb49f4..cfb1b17e9 100644 --- a/data/gui/grand_prix_lose.stkgui +++ b/data/gui/grand_prix_lose.stkgui @@ -1,8 +1,9 @@ -
-
diff --git a/data/gui/grand_prix_win.stkgui b/data/gui/grand_prix_win.stkgui index 05d24c048..209f62af0 100644 --- a/data/gui/grand_prix_win.stkgui +++ b/data/gui/grand_prix_win.stkgui @@ -1,9 +1,10 @@ -
-
diff --git a/data/gui/help1.stkgui b/data/gui/help1.stkgui index ee9d19613dff0c46b54029af8e8e75861e65b27b..7983bb68bd7f90d1b792dfdd33daed69a10d4cc0 100644 GIT binary patch delta 14 Vcmexm{>ywr06U}Z=0Nt9A^ywr06XK_&4KJIMF29@1>gVx diff --git a/data/gui/help2.stkgui b/data/gui/help2.stkgui index c3fb7f71244bbb95ffa6dd2e8926d49eed1aca33..95fb79e79fdaaa3f829e2b41f2fa16141e81e943 100644 GIT binary patch delta 14 VcmaFm{K|Pl06U}Z=0NtDQUEVI1x^3} delta 14 VcmaFm{K|Pl06XK_&4KJQr2sNJ1bX|$IzWd{Hz{vkU6 diff --git a/data/gui/help4.stkgui b/data/gui/help4.stkgui index cb0c50dafcfd50be6ac45b4f7cd53fab0cb409b9..b72784bca89f72e6736f14d026a2d277729c47f0 100644 GIT binary patch delta 14 VcmaE)`$%^~06U}Z=0Ns|`~WOK1pfd4 delta 14 VcmaE)`$%^~06XK_&4KI_`2jCL1%Chl diff --git a/data/gui/mode_ghost.png b/data/gui/mode_ghost.png new file mode 100644 index 0000000000000000000000000000000000000000..d41d6ccd340051d0ac1d140d4f1ac3feff254105 GIT binary patch literal 11301 zcmV+=EZWnFP)Dal;TVqL7>?opDI_n)*4EZ)87`FJJRw*D zVkSuHk;>dLOd7*TbO<4BMVEfIr(@4HH;--vklI_?J}pV&dI7bEDU-)=hgN*=7mMrnd$0qI)h>MO)-j3l2;h@mv4_dW>jR5T}t#=^tN$dT(1&e83wwypk z)wJbke0Ye_!9$D>4-pv}U}9thUDwc(3A9uSNsZ@#jOUe8$o&^^IHuB_^Y2j#>5ni{@&NO^U~dS()ZR*BuVDvlh^RU&6`=hdNpNb

NR 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 + + + +

+
+ + + +