Author: shadowmaster
Date: Sun Jul 27 19:59:46 2008
New Revision: 28239

URL: http://svn.gna.org/viewcvs/wesnoth?rev=28239&view=rev
Log:
* Engine automatically plays special music on defeat or victory; default
* lists from which an option is randomly chosen at runtime are provided
* as the default_victory_music and default_defeat_music attributes in
* [game_config] node; this may be overriden per-scenario using the
* victory_music and/or defeat_music attributes on its code - it can also
* be overriden in a [endlevel] block by providing a music= attribute
* with the desired list (feature request/bug #11203).

Modified:
    trunk/changelog
    trunk/data/_main.cfg
    trunk/src/actions.cpp
    trunk/src/game_config.cpp
    trunk/src/game_config.hpp
    trunk/src/game_events.cpp
    trunk/src/menu_events.hpp
    trunk/src/play_controller.cpp
    trunk/src/play_controller.hpp
    trunk/src/playsingle_controller.cpp
    trunk/src/playsingle_controller.hpp

Modified: trunk/changelog
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/changelog?rev=28239&r1=28238&r2=28239&view=diff
==============================================================================
--- trunk/changelog (original)
+++ trunk/changelog Sun Jul 27 19:59:46 2008
@@ -4,6 +4,14 @@
      Latvian, Polish, Slovak
  * Multiplayer:
    * removed the "Great War" MP era
+ * Music and sound effects:
+   * Engine automatically plays special music on defeat or victory; default
+     lists from which an option is randomly chosen at runtime are provided as
+     the default_victory_music and default_defeat_music attributes in
+     [game_config] node; this may be overriden per-scenario using the
+     victory_music and/or defeat_music attributes on its code - it can also
+     be overriden in a [endlevel] block by providing a music= attribute with
+     the desired list (feature request #11203).
  * Python AI
    * Added ai_init.py and ai_launcher.py to make it easier to customize
      AI environment and startup. Both are used by the new embedded python

Modified: trunk/data/_main.cfg
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/data/_main.cfg?rev=28239&r1=28238&r2=28239&view=diff
==============================================================================
--- trunk/data/_main.cfg (original)
+++ trunk/data/_main.cfg Sun Jul 27 19:59:46 2008
@@ -226,6 +226,9 @@
     ellipsis_image="misc/icon-ellipsis.png"
 
     {core/team-colors.cfg}
+
+    default_victory_music="victory.ogg,victory2.ogg"
+    default_defeat_music="defeat.ogg,defeat2.ogg"
 [/game_config]
 
 [textdomain]

Modified: trunk/src/actions.cpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/actions.cpp?rev=28239&r1=28238&r2=28239&view=diff
==============================================================================
--- trunk/src/actions.cpp (original)
+++ trunk/src/actions.cpp Sun Jul 27 19:59:46 2008
@@ -1816,7 +1816,7 @@
 
                LOG_NG << "throwing end level exception...\n";
 
-               throw end_level_exception(found_player ? VICTORY : DEFEAT,
+               throw end_level_exception(found_player ? VICTORY : DEFEAT, "",
                                victory_conditions::get_carryover_percentage(),
                                victory_conditions::get_carryover_add());
        }

Modified: trunk/src/game_config.cpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/game_config.cpp?rev=28239&r1=28238&r2=28239&view=diff
==============================================================================
--- trunk/src/game_config.cpp (original)
+++ trunk/src/game_config.cpp Sun Jul 27 19:59:46 2008
@@ -90,6 +90,9 @@
 
        std::string level_image;
        std::string ellipsis_image;
+       
+       std::string default_victory_music;
+       std::string default_defeat_music;
 
        std::map<std::string, color_range > team_rgb_range;
        std::map<std::string, t_string > team_rgb_name;
@@ -195,6 +198,8 @@
 
                level_image = v["level_image"];
                ellipsis_image = v["ellipsis_image"];
+               default_victory_music = v["default_victory_music"];
+               default_defeat_music = v["default_defeat_music"];
 
                add_color_info(v);
 

Modified: trunk/src/game_config.hpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/game_config.hpp?rev=28239&r1=28238&r2=28239&view=diff
==============================================================================
--- trunk/src/game_config.hpp (original)
+++ trunk/src/game_config.hpp Sun Jul 27 19:59:46 2008
@@ -64,7 +64,7 @@
                terrain_mask_image, grid_image, unreachable_image, linger_image,
                observer_image, tod_bright_image,
                checked_menu_image, unchecked_menu_image, wml_menu_image, 
level_image,
-               ellipsis_image;
+               ellipsis_image, default_victory_music, default_defeat_music;
 
        extern double hp_bar_scaling, xp_bar_scaling;
 

Modified: trunk/src/game_events.cpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/game_events.cpp?rev=28239&r1=28238&r2=28239&view=diff
==============================================================================
--- trunk/src/game_events.cpp (original)
+++ trunk/src/game_events.cpp Sun Jul 27 19:59:46 2008
@@ -2520,6 +2520,8 @@
                }
 
                const std::string result = cfg["result"].base_str(); //do not 
translate
+               const std::string endlevel_music = cfg["music"];
+
                if(result.empty() || result == "victory") {
                        const bool bonus = 
utils::string_bool(cfg["bonus"],true);
                        const int carry_over = lexical_cast_default<int>
@@ -2528,14 +2530,14 @@
                        const bool gold_add = 
utils::string_bool(cfg["carryover_add"],
                                        game_config::gold_carryover_add);
 
-                       throw end_level_exception(VICTORY, carry_over, 
gold_add, bonus);
+                       throw end_level_exception(VICTORY, endlevel_music, 
carry_over, gold_add, bonus);
                } else if(result == "continue") {
-                       throw end_level_exception(LEVEL_CONTINUE);
+                       throw end_level_exception(LEVEL_CONTINUE, 
endlevel_music);
                } else if(result == "continue_no_save") {
                        throw end_level_exception(LEVEL_CONTINUE_NO_SAVE);
                } else {
                        LOG_NG << "throwing event defeat...\n";
-                       throw end_level_exception(DEFEAT);
+                       throw end_level_exception(DEFEAT, endlevel_music);
                }
        }
 

Modified: trunk/src/menu_events.hpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/menu_events.hpp?rev=28239&r1=28238&r2=28239&view=diff
==============================================================================
--- trunk/src/menu_events.hpp (original)
+++ trunk/src/menu_events.hpp Sun Jul 27 19:59:46 2008
@@ -51,18 +51,23 @@
        }
 
 struct end_level_exception {
-       end_level_exception(LEVEL_RESULT res, const int percentage = -1,
-                       const bool add = false, const bool bonus=true) :
+       end_level_exception(LEVEL_RESULT res,
+                           const std::string& endlevel_music_list="",
+                           const int percentage = -1,
+                           const bool add = false, const bool bonus=true
+                                  ):
                result(res),
                gold_bonus(bonus),
                carryover_percentage(percentage),
-               carryover_add(add)
+               carryover_add(add),
+               custom_endlevel_music(endlevel_music_list)
        {}
 
        LEVEL_RESULT result;
        bool gold_bonus;
        int carryover_percentage;
        bool carryover_add;
+       std::string custom_endlevel_music;
 };
 
 struct end_turn_exception {

Modified: trunk/src/play_controller.cpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/play_controller.cpp?rev=28239&r1=28238&r2=28239&view=diff
==============================================================================
--- trunk/src/play_controller.cpp (original)
+++ trunk/src/play_controller.cpp Sun Jul 27 19:59:46 2008
@@ -55,6 +55,10 @@
        start_turn_(status_.turn()), is_host_(true), skip_replay_(skip_replay),
        linger_(false)
 {
+       // Setup victory and defeat music
+       set_victory_music_list(level_["victory_music"]);
+       set_defeat_music_list(level_["defeat_music"]);
+
        status_.teams = &teams_;
        game_config::add_color_info(level);
        hotkey::deactivate_all_scopes();
@@ -908,3 +912,42 @@
        }
 }
 
+namespace {
+       static const std::string empty_str = "";
+}
+
+const std::string& play_controller::select_victory_music() const
+{
+       if(victory_music_.empty())
+               return empty_str;
+
+       const size_t p = gamestate_.rng().get_random() % victory_music_.size();
+       assert(p < victory_music_.size());
+       return victory_music_[p];
+}
+
+const std::string& play_controller::select_defeat_music() const
+{
+       if(defeat_music_.empty())
+               return empty_str;
+
+       const size_t p = gamestate_.rng().get_random() % defeat_music_.size();
+       assert(p < defeat_music_.size());
+       return defeat_music_[p];
+}
+
+
+void play_controller::set_victory_music_list(const std::string& list)
+{
+       victory_music_ = utils::split(list);
+       if(victory_music_.empty())
+               victory_music_ = 
utils::split(game_config::default_victory_music);
+}
+
+void play_controller::set_defeat_music_list(const std::string& list)
+{
+       defeat_music_  = utils::split(list);
+       if(defeat_music_.empty())
+               defeat_music_ = utils::split(game_config::default_defeat_music);
+}
+

Modified: trunk/src/play_controller.hpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/play_controller.hpp?rev=28239&r1=28238&r2=28239&view=diff
==============================================================================
--- trunk/src/play_controller.hpp (original)
+++ trunk/src/play_controller.hpp Sun Jul 27 19:59:46 2008
@@ -154,6 +154,12 @@
        bool skip_replay_;
        bool linger_;
        bool first_turn_;
+       
+       const std::string& select_victory_music() const;
+       const std::string& select_defeat_music()  const;
+       
+       void set_victory_music_list(const std::string& list);
+       void set_defeat_music_list(const std::string& list);
 
 private:
        // Expand AUTOSAVES in the menu items, setting the real savenames.
@@ -164,6 +170,8 @@
        std::vector<wml_menu_item *> wml_commands_;
        static const size_t MAX_WML_COMMANDS = 7;
 
+       std::vector<std::string> victory_music_;
+       std::vector<std::string> defeat_music_;
 };
 
 

Modified: trunk/src/playsingle_controller.cpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/playsingle_controller.cpp?rev=28239&r1=28238&r2=28239&view=diff
==============================================================================
--- trunk/src/playsingle_controller.cpp (original)
+++ trunk/src/playsingle_controller.cpp Sun Jul 27 19:59:46 2008
@@ -304,6 +304,16 @@
                log.quit(status_.turn());
                throw;
        } catch(end_level_exception& end_level) {
+               if(!end_level.custom_endlevel_music.empty()) {
+                       switch(end_level.result) {
+                       case DEFEAT:
+                               
set_defeat_music_list(end_level.custom_endlevel_music);
+                               break;
+                       default:
+                               
set_victory_music_list(end_level.custom_endlevel_music);
+                       }
+               }
+       
                bool obs = team_manager_.is_observer();
                if (game_config::exit_at_end) {
                        exit(0);
@@ -338,10 +348,15 @@
                        } catch(end_level_exception&) {
                        }
 
-                       if (!obs)
+                       if (!obs) {
+                               const std::string& defeat_music = 
select_defeat_music();
+                               if(defeat_music.empty() != true)
+                                       sound::play_music_once(defeat_music);
+
                                return DEFEAT;
-                       else
+                       } else {
                                return QUIT;
+                       }
                } else if (end_level.result == VICTORY
                || end_level.result == LEVEL_CONTINUE
                || end_level.result == LEVEL_CONTINUE_NO_SAVE) {
@@ -349,6 +364,9 @@
                                gamestate_.completion = "running";
                        } else {
                                gamestate_.completion = "victory";
+                               const std::string& victory_music = 
select_victory_music();
+                               if(victory_music.empty() != true)
+                                       sound::play_music_once(victory_music);
                        }
                        
recorder.set_save_info_completion(gamestate_.completion);
                        try {

Modified: trunk/src/playsingle_controller.hpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/playsingle_controller.hpp?rev=28239&r1=28238&r2=28239&view=diff
==============================================================================
--- trunk/src/playsingle_controller.hpp (original)
+++ trunk/src/playsingle_controller.hpp Sun Jul 27 19:59:46 2008
@@ -88,6 +88,9 @@
                    int player_gold,
                    int remaining_gold, int finishing_bonus_per_turn,
                    int turns_left, int finishing_bonus);
+
+       std::vector<std::string> victory_music_;
+       std::vector<std::string> defeat_music_;
 };
 
 


_______________________________________________
Wesnoth-commits mailing list
[email protected]
https://mail.gna.org/listinfo/wesnoth-commits

Reply via email to