-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 ok, after discussing it a little more with soliton and Dragonking, here is one more attempt at slo
- - slowed units see their movement halved actually, movement is not halved, but movement cost is double this effect was already here before - - slowed units emit no ZoC - - slowed units have one less attack this effect was already there - - slow is cured when resting or being on a village curers/healers don't help. only resting or staying on a village slow does not interact with poison or healing in anyway. here you go -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.1 (GNU/Linux) Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org iD8DBQFDawe0SBeC9Fa95UURAkW/AJ9swpUZsjkH7lyFmIpioYJIqkDLuACfQzQy p83DASLWK8IEvqrG3abpcZo= =twRS -----END PGP SIGNATURE-----
Index: reports.cpp =================================================================== --- reports.cpp (révision 8705) +++ reports.cpp (copie de travail) @@ -126,7 +126,7 @@ } if(u->second.has_flag("slowed")) { unit_status << "misc/slowed.png"; - tooltip << _("slowed: ") << _("This unit has been slowed. It moves at half normal speed and receives one less attack than normal in combat."); + tooltip << _("slowed: ") << _("This unit has been slowed. It moves at half normal speed , receives one less attack than normal in combat, and does not emit a zone of control."); res.add_image(unit_status,tooltip); } if(u->second.has_flag("poisoned")) { Index: actions.cpp =================================================================== --- actions.cpp (révision 8705) +++ actions.cpp (copie de travail) @@ -1219,6 +1212,7 @@ const std::vector<team>& teams) { std::map<gamemap::location,int> healed_units, max_healing; + std::map<gamemap::location,bool> unslowed_units; //a map of healed units to their healers std::multimap<gamemap::location,gamemap::location> healers; @@ -1319,8 +1313,23 @@ } } + // last, add units that need unslowing for(i = units.begin(); i != units.end(); ++i) { + //the unit heals if it's on this side, and it's on a village or + //it has regeneration, and it is wounded if(i->second.side() == side) { + if( i->second.has_flag("slowed") && + (map.gives_healing(i->first) || i->second.is_resting()) ){ + i->second.remove_flag("slowed"); + unslowed_units.insert(std::pair<gamemap::location,int>( i->first, true)); + // add it to healed_units so it gets applied + // note that insert won't add anything if it's already there + healed_units.insert(std::pair<gamemap::location,int>( i->first, 0)); + } + } + } + for(i = units.begin(); i != units.end(); ++i) { + if(i->second.side() == side) { if(i->second.hitpoints() < i->second.max_hitpoints() || i->second.poisoned()){ if(i->second.is_resting()) { @@ -1392,6 +1401,17 @@ const int DelayAmount = 50; + // take care of unslowed units + if(unslowed_units[h->first]) { + if(show_healing) { + events::pump(); + + sound::play_sound("heal.wav"); + SDL_Delay(DelayAmount); + disp.invalidate_unit(); + disp.update_display(); + } + } LOG_NG << "unit is poisoned? " << (u.has_flag("poisoned") ? "yes" : "no") << "," << h->second << "," << max_healing[h->first] << "\n"; Index: unit.cpp =================================================================== --- unit.cpp (révision 8705) +++ unit.cpp (copie de travail) @@ -338,7 +338,6 @@ void unit::end_turn() { - remove_flag("slowed"); if((moves_ != total_movement()) && (moves_ != NOT_MOVED)){ resting_ = false; } @@ -499,7 +498,7 @@ bool unit::emits_zoc() const { - return type().has_zoc() && stone() == false; + return type().has_zoc() && stone() == false && !has_flag("slowed"); } bool unit::matches_filter(const config& cfg) const