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