Author: boucman
Date: Tue Aug  2 10:25:22 2011
New Revision: 50547

URL: http://svn.gna.org/viewcvs/wesnoth?rev=50547&view=rev
Log:
apply patch #2857 : Implemented sub= and divide= for weapon special codeblocks 
by Espreon

Modified:
    trunk/data/campaigns/Eastern_Invasion/utils/abilities.cfg
    trunk/src/unit_abilities.cpp
    trunk/src/unit_abilities.hpp

Modified: trunk/data/campaigns/Eastern_Invasion/utils/abilities.cfg
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/data/campaigns/Eastern_Invasion/utils/abilities.cfg?rev=50547&r1=50546&r2=50547&view=diff
==============================================================================
--- trunk/data/campaigns/Eastern_Invasion/utils/abilities.cfg (original)
+++ trunk/data/campaigns/Eastern_Invasion/utils/abilities.cfg Tue Aug  2 
10:25:22 2011
@@ -11,7 +11,7 @@
 When this attack is used on offense, the opponent will retaliate with one less 
strike than normally, to a minimum of one strike."
         description_inactive= _ "Shock:
 When this attack is used on offense, the opponent will retaliate with one less 
strike than normally, to a minimum of one strike."
-        add=-1
+        sub=1
         active_on=offense
         apply_to=opponent
         [filter_base_value]

Modified: trunk/src/unit_abilities.cpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/unit_abilities.cpp?rev=50547&r1=50546&r2=50547&view=diff
==============================================================================
--- trunk/src/unit_abilities.cpp (original)
+++ trunk/src/unit_abilities.cpp Tue Aug  2 10:25:22 2011
@@ -20,11 +20,15 @@
 
 #include "foreach.hpp"
 #include "gamestatus.hpp"
+#include "log.hpp"
 #include "resources.hpp"
 #include "terrain_filter.hpp"
 #include "unit.hpp"
 #include "team.hpp"
 #include "unit_abilities.hpp"
+
+static lg::log_domain log_engine("engine");
+#define ERR_NG LOG_STREAM(err, log_engine)
 
 
 
@@ -805,6 +809,7 @@
        bool value_is_set = false;
        std::map<std::string,individual_effect> values_add;
        std::map<std::string,individual_effect> values_mul;
+       std::map<std::string,individual_effect> values_div;
 
        individual_effect set_effect;
 
@@ -841,11 +846,29 @@
                                
values_add[effect_id].set(ADD,add,i->first,i->second);
                        }
                }
+               if (const config::attribute_value *v = cfg.get("sub")) {
+                       int sub = - *v;
+                       std::map<std::string,individual_effect>::iterator 
sub_effect = values_add.find(effect_id);
+                       if(sub_effect == values_add.end() || sub > 
sub_effect->second.value) {
+                               
values_add[effect_id].set(ADD,sub,i->first,i->second);
+                       }
+               }
                if (const config::attribute_value *v = cfg.get("multiply")) {
                        int multiply = int(v->to_double() * 100);
                        std::map<std::string,individual_effect>::iterator 
mul_effect = values_mul.find(effect_id);
                        if(mul_effect == values_mul.end() || multiply > 
mul_effect->second.value) {
                                
values_mul[effect_id].set(MUL,multiply,i->first,i->second);
+                       }
+               }
+               if (const config::attribute_value *v = cfg.get("divide")) {
+                       if (*v == 0) {
+                               ERR_NG << "division by zero with division= in 
weapon special " << effect_id << "\n";
+                               return;
+                       }
+                       int divide = int(v->to_double() * 100);
+                       std::map<std::string,individual_effect>::iterator 
div_effect = values_div.find(effect_id);
+                       if(div_effect == values_div.end() || divide > 
div_effect->second.value) {
+                               
values_div[effect_id].set(DIV,divide,i->first,i->second);
                        }
                }
        }
@@ -862,6 +885,11 @@
                divisor *= 100;
                effect_list_.push_back(e->second);
        }
+       for (e = values_div.begin(), e_end = values_div.end(); e != e_end; ++e) 
{
+               multiplier *= 100;
+               divisor *= e->second.value;
+               effect_list_.push_back(e->second);
+       }
        int addition = 0;
        for (e = values_add.begin(), e_end = values_add.end(); e != e_end; ++e) 
{
                addition += e->second.value;

Modified: trunk/src/unit_abilities.hpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/unit_abilities.hpp?rev=50547&r1=50546&r2=50547&view=diff
==============================================================================
--- trunk/src/unit_abilities.hpp (original)
+++ trunk/src/unit_abilities.hpp Tue Aug  2 10:25:22 2011
@@ -26,7 +26,7 @@
 {
 bool filter_base_matches(const config& cfg, int def);
 
-enum value_modifier {NOT_USED,SET,ADD,MUL};
+enum value_modifier {NOT_USED,SET,ADD,MUL,DIV};
 
 struct individual_effect
 {


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

Reply via email to