SirVer has proposed merging lp:~widelands-dev/widelands/kill_frontier_and_flag_styles into lp:widelands.
Requested reviews: Widelands Developers (widelands-dev) Related bugs: Bug #1332842 in widelands: "Remove support for different flag and frontier 'styles'." https://bugs.launchpad.net/widelands/+bug/1332842 For more details, see: https://code.launchpad.net/~widelands-dev/widelands/kill_frontier_and_flag_styles/+merge/224210 Fixes bug 1332842 and silences some Clang warnings either by fixing the root cause or by disabling the warning if that makes more sense. -- https://code.launchpad.net/~widelands-dev/widelands/kill_frontier_and_flag_styles/+merge/224210 Your team Widelands Developers is requested to review the proposed merge of lp:~widelands-dev/widelands/kill_frontier_and_flag_styles into lp:widelands.
=== modified file 'CMakeLists.txt' --- CMakeLists.txt 2014-06-22 05:28:07 +0000 +++ CMakeLists.txt 2014-06-23 20:29:05 +0000 @@ -120,8 +120,17 @@ add_flag(WL_COMPILE_DIAGNOSTICS "-Wno-padded") add_flag(WL_COMPILE_DIAGNOSTICS "-Wno-sign-conversion") add_flag(WL_COMPILE_DIAGNOSTICS "-Wno-switch-enum") + add_flag(WL_COMPILE_DIAGNOSTICS "-Wno-implicit-fallthrough") add_flag(WL_COMPILE_DIAGNOSTICS "-Qunused-arguments") + # This warning warns when a default case is at a switch that handles all + # cases. While this is super nice, silencing this warning for clang will add + # a warning for GCC (which is not as clever and does not figure out that all + # cases are handled). Therefore we disable the warning and the unreachable as + # they always come in pairs in these cases. + add_flag(WL_COMPILE_DIAGNOSTICS "-Wno-covered-switch-default") + add_flag(WL_COMPILE_DIAGNOSTICS "-Wno-unreachable-code") + # TODO(sirver): weak-vtables should be enabled, but leads to lot of errors right now. add_flag(WL_COMPILE_DIAGNOSTICS "-Wno-weak-vtables") else() === modified file 'src/base/exceptions.cc' --- src/base/exceptions.cc 2014-06-18 15:33:04 +0000 +++ src/base/exceptions.cc 2014-06-23 20:29:05 +0000 @@ -64,8 +64,6 @@ m_what = buffer; } -warning::~warning() noexcept {} - char const * warning::title() const { return m_title.c_str(); === modified file 'src/base/port.h' --- src/base/port.h 2014-06-01 18:00:48 +0000 +++ src/base/port.h 2014-06-23 20:29:05 +0000 @@ -27,6 +27,4 @@ #endif #endif - #endif /* end of include guard: PORT_H */ - === modified file 'src/base/warning.h' --- src/base/warning.h 2014-06-18 14:23:22 +0000 +++ src/base/warning.h 2014-06-23 20:29:05 +0000 @@ -41,7 +41,6 @@ struct warning : public std::exception { explicit warning (char const * title, char const * message, ...) PRINTF_FORMAT(3, 4); - virtual ~warning() noexcept; /// The target of the returned pointer remains valid during the lifetime of /// the warning object. === modified file 'src/economy/fleet.cc' --- src/economy/fleet.cc 2014-06-21 10:24:12 +0000 +++ src/economy/fleet.cc 2014-06-23 20:29:05 +0000 @@ -40,7 +40,16 @@ namespace Widelands { -Map_Object_Descr fleet_descr("fleet", "Fleet"); +namespace { + +// Every Map_Object() needs to have a description. So we make a dummy one for +// Fleet. +Map_Object_Descr* fleet_description() { + static Map_Object_Descr fleet_descr("fleet", "Fleet"); + return &fleet_descr; +} + +} // namespace /** * Fleets are initialized empty. @@ -50,7 +59,7 @@ * The Fleet takes care of merging with existing fleets, if any. */ Fleet::Fleet(Player & player) : - Map_Object(&fleet_descr), + Map_Object(fleet_description()), m_owner(player), m_act_pending(false) { === modified file 'src/game_io/game_player_info_data_packet.cc' --- src/game_io/game_player_info_data_packet.cc 2014-05-11 07:38:01 +0000 +++ src/game_io/game_player_info_data_packet.cc 2014-06-23 20:29:05 +0000 @@ -78,33 +78,6 @@ game.add_player(plnum, 0, tribe_name, name, team); Player & player = game.player(plnum); - { - const Tribe_Descr & tribe = player.tribe(); - try { - player.m_frontier_style_index = - frontier_style_name ? - tribe.frontier_style_index(frontier_style_name) : 0; - } catch (Tribe_Descr::Nonexistent) { - log - ("WARNING: player %1$u has frontier style index \"%2$s\", " - "which does not exist in his tribe %3$s; will use " - "default frontier style \"%4$s\" instead\n", - plnum, frontier_style_name, tribe.name().c_str(), - tribe.frontier_style_name(0).c_str()); - } - try { - player.m_flag_style_index = - flag_style_name ? - tribe.flag_style_index(flag_style_name) : 0; - } catch (Tribe_Descr::Nonexistent) { - log - ("WARNING: player %1$u has flag style index \"%2$s\", " - "which does not exist in his tribe %3$s; will use " - "default flag style \"%4$s\" instead\n", - plnum, flag_style_name, tribe.name().c_str(), - tribe.flag_style_name(0).c_str()); - } - } player.set_see_all(see_all); if (packet_version >= 6) @@ -168,8 +141,6 @@ { const Tribe_Descr & tribe = plr->tribe(); fw.CString(tribe.name().c_str()); - fw.CString(tribe.frontier_style_name(plr->m_frontier_style_index)); - fw.CString(tribe.flag_style_name (plr->m_flag_style_index)); } // Seen fields is in a map packet === modified file 'src/graphic/render/gamerenderer.cc' --- src/graphic/render/gamerenderer.cc 2014-05-27 11:01:15 +0000 +++ src/graphic/render/gamerenderer.cc 2014-06-23 20:29:05 +0000 @@ -133,7 +133,7 @@ if (isborder[F]) { const Player & owner = m_egbase->player(owner_number[F]); - uint32_t const anim_idx = owner.frontier_anim(); + uint32_t const anim_idx = owner.tribe().frontier_animation(); if (vision[F]) m_dst->drawanim(pos[F], anim_idx, 0, &owner); for (uint32_t d = 1; d < 4; ++d) { @@ -221,7 +221,7 @@ } else if (const uint32_t pic = map_object_descr->main_animation()) { m_dst->drawanim(pos[F], pic, 0, owner); } else if (map_object_descr == &Widelands::g_flag_descr) { - m_dst->drawanim(pos[F], owner->flag_anim(), 0, owner); + m_dst->drawanim(pos[F], owner->tribe().flag_animation(), 0, owner); } } } === modified file 'src/io/filesystem/zip_exceptions.h' --- src/io/filesystem/zip_exceptions.h 2014-06-18 14:23:22 +0000 +++ src/io/filesystem/zip_exceptions.h 2014-06-23 20:29:05 +0000 @@ -31,12 +31,11 @@ * "couldn't open file (from zipfile "+m_zipfilename+")"); */ struct ZipOperation_error : public std::logic_error { - explicit ZipOperation_error + ZipOperation_error (const std::string & thrower, const std::string & filename, const std::string & zipfilename, const std::string & message = "problem during zipfile operation") - : std::logic_error (thrower + ": " + message + " (working on '" + filename + @@ -44,8 +43,6 @@ m_thrower(thrower), m_filename(filename), m_zipfilename(zipfilename) {} - virtual ~ZipOperation_error() noexcept {} - std::string m_thrower; std::string m_filename; std::string m_zipfilename; === modified file 'src/logic/player.cc' --- src/logic/player.cc 2014-06-22 11:03:55 +0000 +++ src/logic/player.cc 2014-06-23 20:29:05 +0000 @@ -147,8 +147,6 @@ : m_egbase (the_egbase), m_initialization_index(initialization_index), - m_frontier_style_index(0), - m_flag_style_index (0), m_team_number(0), m_team_player_uptodate(false), m_see_all (false), @@ -184,37 +182,30 @@ void Player::create_default_infrastructure() { const Map & map = egbase().map(); if (map.get_starting_pos(m_plnum)) { - try { - const Tribe_Descr::Initialization & initialization = - tribe().initialization(m_initialization_index); - - Game & game = ref_cast<Game, Editor_Game_Base>(egbase()); + const Tribe_Descr::Initialization & initialization = + tribe().initialization(m_initialization_index); + + Game & game = ref_cast<Game, Editor_Game_Base>(egbase()); + + // Run the corresponding script + std::unique_ptr<LuaTable> table(game.lua().run_script(initialization.script)); + table->do_not_warn_about_unaccessed_keys(); + std::unique_ptr<LuaCoroutine> cr = table->get_coroutine("func"); + cr->push_arg(this); + game.enqueue_command(new Cmd_LuaCoroutine(game.get_gametime(), cr.release())); + + // Check if other starting positions are shared in and initialize them as well + for (uint8_t n = 0; n < m_further_shared_in_player.size(); ++n) { + Coords const further_pos = map.get_starting_pos(m_further_shared_in_player.at(n)); // Run the corresponding script - std::unique_ptr<LuaTable> table(game.lua().run_script(initialization.script)); - table->do_not_warn_about_unaccessed_keys(); - std::unique_ptr<LuaCoroutine> cr = table->get_coroutine("func"); - cr->push_arg(this); - game.enqueue_command(new Cmd_LuaCoroutine(game.get_gametime(), cr.release())); - - // Check if other starting positions are shared in and initialize them as well - for (uint8_t n = 0; n < m_further_shared_in_player.size(); ++n) { - Coords const further_pos = map.get_starting_pos(m_further_shared_in_player.at(n)); - - // Run the corresponding script - std::unique_ptr<LuaCoroutine> ncr = - game.lua() - .run_script(tribe().initialization(m_further_initializations.at(n)).script) - ->get_coroutine("func"); - ncr->push_arg(this); - ncr->push_arg(further_pos); - game.enqueue_command(new Cmd_LuaCoroutine(game.get_gametime(), ncr.release())); - } - } catch (Tribe_Descr::Nonexistent &) { - throw game_data_error - ("the selected initialization index (%u) is outside the range " - "(tribe edited between preload and game start?)", - m_initialization_index); + std::unique_ptr<LuaCoroutine> ncr = + game.lua() + .run_script(tribe().initialization(m_further_initializations.at(n)).script) + ->get_coroutine("func"); + ncr->push_arg(this); + ncr->push_arg(further_pos); + game.enqueue_command(new Cmd_LuaCoroutine(game.get_gametime(), ncr.release())); } } else throw warning === modified file 'src/logic/player.h' --- src/logic/player.h 2014-04-21 18:18:01 +0000 +++ src/logic/player.h 2014-06-23 20:29:05 +0000 @@ -117,8 +117,6 @@ const std::string & get_name() const {return m_name;} void set_name(const std::string & name) {m_name = name;} - void set_frontier_style(uint8_t a) {m_frontier_style_index = a;} - void set_flag_style(uint8_t a) {m_flag_style_index = a;} void set_team_number(TeamNumber team); void create_default_infrastructure(); @@ -505,13 +503,6 @@ void count_civil_bld_lost () {++m_civil_blds_lost;} void count_civil_bld_defeated() {++m_civil_blds_defeated;} - uint32_t frontier_anim() const { - return tribe().frontier_animation(m_frontier_style_index); - } - uint32_t flag_anim () const { - return tribe().flag_animation (m_flag_style_index); - } - // Statistics const Building_Stats_vector & get_building_statistics (const Building_Index& i) const @@ -563,8 +554,6 @@ uint8_t m_initialization_index; std::vector<uint8_t> m_further_initializations; // used in shared kingdom mode std::vector<uint8_t> m_further_shared_in_player; // '' '' '' '' '' - uint8_t m_frontier_style_index; - uint8_t m_flag_style_index; TeamNumber m_team_number; std::vector<Player *> m_team_player; bool m_team_player_uptodate; === modified file 'src/logic/tribe.cc' --- src/logic/tribe.cc 2014-06-21 10:24:12 +0000 +++ src/logic/tribe.cc 2014-06-23 20:29:05 +0000 @@ -241,47 +241,10 @@ PARSE_ORDER_INFORMATION(worker); } - try { - while (Section * const s = root_conf.get_next_section("frontier")) - { - char const * const style_name = s->get_safe_string("name"); - try { - if (m_anim_frontier.empty()) - throw Nonexistent(); - frontier_style_index(style_name); - throw game_data_error("\"%s\" is duplicated", style_name); - } catch (Nonexistent) { - m_anim_frontier.push_back - (std::pair<std::string, uint32_t> - (style_name, g_gr->animations().load(path, *s))); - } - } - if (m_anim_frontier.empty()) - throw game_data_error("none found"); - } catch (const _wexception & e) { - throw game_data_error("frontier styles: %s", e.what()); - } - try { - while (Section * const s = root_conf.get_next_section("flag")) - { - char const * const style_name = s->get_safe_string("name"); - try { - if (m_anim_flag.empty()) - throw Nonexistent(); - flag_style_index(style_name); - throw game_data_error("\"%s\" is duplicated", style_name); - } catch (Nonexistent) { - m_anim_flag.push_back - (std::pair<std::string, uint32_t> - (style_name, - g_gr->animations().load(path, *s))); - } - } - if (m_anim_flag.empty()) - throw game_data_error("none found"); - } catch (const _wexception & e) { - throw game_data_error("flag styles: %s", e.what()); - } + m_frontier_animation_id = + g_gr->animations().load(path, root_conf.get_safe_section("frontier")); + m_flag_animation_id = + g_gr->animations().load(path, root_conf.get_safe_section("flag")); { // Read initializations -- all scripts are initializations currently === modified file 'src/logic/tribe.h' --- src/logic/tribe.h 2014-06-21 16:01:35 +0000 +++ src/logic/tribe.h 2014-06-23 20:29:05 +0000 @@ -132,49 +132,12 @@ return m_worker_types_without_cost; } - typedef std::vector<std::pair<std::string, uint32_t> > AnimationStyles; - struct Nonexistent {}; - uint8_t frontier_style_index(const std::string & stylename) const { - for (uint8_t result = m_anim_frontier.size();;) - if (m_anim_frontier.at(--result).first == stylename) - return result; - throw Nonexistent(); - } - uint8_t flag_style_index (const std::string & stylename) const { - for (uint8_t result = m_anim_flag.size();;) - if (m_anim_flag.at(--result).first == stylename) - return result; - throw Nonexistent(); - } - uint8_t frontier_style_index(char const * const stylename) const { - for (uint8_t result = m_anim_frontier.size();;) - if (m_anim_frontier.at(--result).first == stylename) - return result; - throw Nonexistent(); - } - uint8_t flag_style_index (char const * const stylename) const { - for (uint8_t result = m_anim_flag.size();;) - if (m_anim_flag.at(--result).first == stylename) - return result; - throw Nonexistent(); - } - uint8_t next_frontier_style_index(uint8_t i) const { - return ++i == m_anim_frontier.size() ? 0 : i; - } - uint8_t next_flag_style_index (uint8_t i) const { - return ++i == m_anim_flag .size() ? 0 : i; - } - const std::string & frontier_style_name (uint8_t const i) const { - return m_anim_frontier.at(i).first; - } - const std::string & flag_style_name (uint8_t const i) const { - return m_anim_flag .at(i).first; - } - uint32_t frontier_animation (uint8_t const i) const { - return m_anim_frontier.at(i).second; - } - uint32_t flag_animation (uint8_t const i) const { - return m_anim_flag .at(i).second; + uint32_t frontier_animation() const { + return m_frontier_animation_id; + } + + uint32_t flag_animation() const { + return m_flag_animation_id; } uint32_t get_bob_vision_range() const {return m_bob_vision_range;} @@ -188,14 +151,13 @@ Military_Data get_military_data() const {return m_military_data;} struct Initialization { - std::string script; - std::string descname; + std::string script; + std::string descname; }; - typedef std::vector<Initialization> Initializations; - const Initialization & initialization(uint8_t const index) const { - if (m_initializations.size() <= index) - throw Nonexistent(); - return m_initializations[index]; + + // Returns the initalization at 'index' (which must not be out of bounds). + const Initialization & initialization(const uint8_t index) const { + return m_initializations.at(index); } typedef std::vector<std::vector<Widelands::Ware_Index> > WaresOrder; @@ -214,8 +176,8 @@ private: const std::string m_name; - AnimationStyles m_anim_frontier; - AnimationStyles m_anim_flag; + uint32_t m_frontier_animation_id; + uint32_t m_flag_animation_id; uint32_t m_bob_vision_range; DescriptionMaintainer<Worker_Descr> m_workers; @@ -232,7 +194,7 @@ std::vector<Ware_Index> m_worker_types_without_cost; - Initializations m_initializations; + std::vector<Initialization> m_initializations; Military_Data m_military_data; }; === modified file 'src/profile/profile.cc' --- src/profile/profile.cc 2014-06-18 13:20:33 +0000 +++ src/profile/profile.cc 2014-06-23 20:29:05 +0000 @@ -37,7 +37,7 @@ #include "logic/world/world.h" #define TRUE_WORDS 4 -char const * trueWords[TRUE_WORDS] = +static char const * trueWords[TRUE_WORDS] = { "true", "yes", @@ -46,7 +46,7 @@ }; #define FALSE_WORDS 4 -char const * falseWords[FALSE_WORDS] = +static char const * falseWords[FALSE_WORDS] = { "false", "no", === modified file 'src/scripting/c_utils.h' --- src/scripting/c_utils.h 2014-06-18 13:20:33 +0000 +++ src/scripting/c_utils.h 2014-06-23 20:29:05 +0000 @@ -37,7 +37,7 @@ void report_error(lua_State*, const char*, ...) __attribute__((__format__(__printf__, 2, 3), noreturn)); #else -void report_error [[noreturn]] (lua_State*, const char*, ...) +[[noreturn]] void report_error(lua_State*, const char*, ...) #endif #define luaL_checkint32(L, n) static_cast<int32_t>(luaL_checkinteger(L, (n))) === modified file 'src/scripting/lua_bases.h' --- src/scripting/lua_bases.h 2014-06-12 07:22:23 +0000 +++ src/scripting/lua_bases.h 2014-06-23 20:29:05 +0000 @@ -39,7 +39,7 @@ LUNA_CLASS_HEAD(L_EditorGameBase); L_EditorGameBase() {} - L_EditorGameBase(lua_State * L) { + L_EditorGameBase(lua_State* L) { report_error(L, "Cannot instantiate a 'EditorGameBase' directly!"); } virtual ~L_EditorGameBase() {} @@ -72,7 +72,7 @@ L_PlayerBase() : m_pl(NONE) {} - L_PlayerBase(lua_State * L) : m_pl(NONE) { + L_PlayerBase (lua_State * L) : m_pl(NONE) { report_error(L, "Cannot instantiate a 'PlayerBase' directly!"); } L_PlayerBase(Widelands::Player_Number n) { === modified file 'src/scripting/lua_game.cc' --- src/scripting/lua_game.cc 2014-06-21 10:24:12 +0000 +++ src/scripting/lua_game.cc 2014-06-23 20:29:05 +0000 @@ -96,8 +96,6 @@ METHOD(L_Player, reveal_scenario), METHOD(L_Player, reveal_campaign), METHOD(L_Player, get_buildings), - METHOD(L_Player, set_flag_style), - METHOD(L_Player, set_frontier_style), METHOD(L_Player, get_suitability), METHOD(L_Player, allow_workers), METHOD(L_Player, switchplayer), @@ -759,50 +757,6 @@ } /* RST - .. method:: set_flag_style(name) - - Sets the appearance of the flags for this player to the given style. - The style must be defined for the tribe. - - :arg name: name of style - :type name: :class:`string` -*/ -// UNTESTED, UNUSED so far -int L_Player::set_flag_style(lua_State * L) { - Player & p = get(L, get_game(L)); - const char * name = luaL_checkstring(L, 2); - - try { - p.set_flag_style(p.tribe().flag_style_index(name)); - } catch (Tribe_Descr::Nonexistent &) { - report_error(L, "Flag style <%s> does not exist!\n", name); - } - return 0; -} - -/* RST - .. method:: set_frontier_style(name) - - Sets the appearance of the frontiers for this player to the given style. - The style must be defined for the tribe. - - :arg name: name of style - :type name: :class:`string` -*/ -// UNTESTED, UNUSED so far -int L_Player::set_frontier_style(lua_State * L) { - Player & p = get(L, get_game(L)); - const char * name = luaL_checkstring(L, 2); - - try { - p.set_frontier_style(p.tribe().frontier_style_index(name)); - } catch (Tribe_Descr::Nonexistent &) { - report_error(L, "Frontier style <%s> does not exist!\n", name); - } - return 0; -} - -/* RST .. method:: get_suitability(building, field) Returns the suitability that this building has for this field. This === modified file 'src/scripting/lua_game.h' --- src/scripting/lua_game.h 2014-06-12 07:22:23 +0000 +++ src/scripting/lua_game.h 2014-06-23 20:29:05 +0000 @@ -88,8 +88,6 @@ int reveal_scenario(lua_State * L); int reveal_campaign(lua_State * L); int get_buildings(lua_State * L); - int set_flag_style(lua_State * L); - int set_frontier_style(lua_State * L); int get_suitability(lua_State * L); int allow_workers(lua_State * L); int switchplayer(lua_State * L); @@ -157,7 +155,7 @@ L_Message(uint8_t, Widelands::Message_Id); L_Message() : m_plr(0), m_mid(0) {} - L_Message(lua_State * L) : m_plr(0) { + L_Message(lua_State * L) { report_error(L, "Cannot instantiate a '%s' directly!", className); } === modified file 'src/scripting/lua_map.h' --- src/scripting/lua_map.h 2014-06-21 10:24:12 +0000 +++ src/scripting/lua_map.h 2014-06-23 20:29:05 +0000 @@ -163,7 +163,7 @@ /* * C Methods */ - CASTED_GET(BaseImmovable); + CASTED_GET(BaseImmovable) }; class L_PlayerImmovable : public L_BaseImmovable { @@ -189,7 +189,7 @@ /* * C Methods */ - CASTED_GET(PlayerImmovable); + CASTED_GET(PlayerImmovable) }; class L_PortDock : public L_PlayerImmovable { @@ -213,7 +213,7 @@ /* * C methods */ - CASTED_GET(PortDock); + CASTED_GET(PortDock) }; class L_Building : public L_PlayerImmovable { @@ -239,7 +239,7 @@ /* * C Methods */ - CASTED_GET(Building); + CASTED_GET(Building) }; class L_Flag : public L_PlayerImmovable { === modified file 'src/wui/transport_draw.cc' --- src/wui/transport_draw.cc 2014-02-22 16:49:17 +0000 +++ src/wui/transport_draw.cc 2014-06-23 20:29:05 +0000 @@ -41,7 +41,7 @@ }; dst.drawanim - (pos, owner().flag_anim(), game.get_gametime() - m_animstart, &owner()); + (pos, owner().tribe().flag_animation(), game.get_gametime() - m_animstart, &owner()); const uint32_t ware_filled = m_ware_filled; for (uint32_t i = 0; i < ware_filled; ++i) { // draw wares === modified file 'src/wui/waresdisplay.cc' --- src/wui/waresdisplay.cc 2014-06-08 21:47:45 +0000 +++ src/wui/waresdisplay.cc 2014-06-23 20:29:05 +0000 @@ -297,10 +297,8 @@ switch (m_type) { case Widelands::wwWARE: return m_tribe.wares_order(); - break; case Widelands::wwWORKER: return m_tribe.workers_order(); - break; default: throw wexception("Invalid m_type %d", m_type); } @@ -311,10 +309,8 @@ switch (m_type) { case Widelands::wwWARE: return m_tribe.wares_order_coords(); - break; case Widelands::wwWORKER: return m_tribe.workers_order_coords(); - break; default: throw wexception("Invalid m_type %d", m_type); } === modified file 'tribes/atlanteans/conf' --- tribes/atlanteans/conf 2014-06-22 16:33:32 +0000 +++ tribes/atlanteans/conf 2014-06-23 20:29:05 +0000 @@ -16,13 +16,11 @@ # Some blue fires would be fine, but just an idea [frontier] -name=frontier pics=pics/frontier_??.png hotspot=3 12 # Not just a plain color, maybe a cross or some stribes [flag] -name=flag pics=pics/flag_??.png hotspot=15 35 fps=10 === modified file 'tribes/barbarians/conf' --- tribes/barbarians/conf 2014-06-22 16:33:32 +0000 +++ tribes/barbarians/conf 2014-06-23 20:29:05 +0000 @@ -16,13 +16,11 @@ [frontier] -name=frontier pics=pics/frontier_??.png hotspot=1 19 [flag] -name=flag pics=pics/flag_??.png hotspot=10 38 fps=5 === modified file 'tribes/empire/conf' --- tribes/empire/conf 2014-06-22 16:33:32 +0000 +++ tribes/empire/conf 2014-06-23 20:29:05 +0000 @@ -16,13 +16,11 @@ # No idea for the frontier. Maybe some javelins? [frontier] -name=frontier pics=pics/frontier_??.png hotspot=1 19 # Not just a plain color, maybe a cross or some stribes [flag] -name=flag pics=pics/flag_??.png hotspot=14 38 fps=10
_______________________________________________ Mailing list: https://launchpad.net/~widelands-dev Post to : widelands-dev@lists.launchpad.net Unsubscribe : https://launchpad.net/~widelands-dev More help : https://help.launchpad.net/ListHelp