Преглед изворни кода

More details for Rebirth ability.

DjWarmonger пре 14 година
родитељ
комит
a7577ccb6b
4 измењених фајлова са 14 додато и 3 уклоњено
  1. 3 0
      client/CBattleInterface.cpp
  2. 1 0
      config/bonusnames.txt
  3. 6 2
      lib/CCreatureHandler.cpp
  4. 4 1
      lib/CCreatureSet.cpp

+ 3 - 0
client/CBattleInterface.cpp

@@ -2536,7 +2536,10 @@ void CBattleInterface::stacksAreAttacked(std::vector<SStackAttackedInfo> attacke
 	{
 		addNewAnim(new CDefenceAnim(attackedInfos[h], this));
 		if (attackedInfos[h].rebirth)
+		{
 			displayEffect(50, attackedInfos[h].defender->position); //TODO: play reverse death animation
+			CCS->soundh->playSound(soundBase::RESURECT);
+		}
 	}
 	waitForAnims();
 	for(int h = 0; h < attackedInfos.size(); ++h)

+ 1 - 0
config/bonusnames.txt

@@ -47,3 +47,4 @@ AIR_IMMUNITY	Immune to Air
 EARTH_IMMUNITY	Immune to Earth	
 DIRECT_DAMAGE_IMMUNITY	Direct Damage Immunity	Immune to direct damage spells
 RECEPTIVE	Receptive	No Immunity to Friendly Spells
+REBIRTH	Rebirth (%d%)	Stack will rise after death

+ 6 - 2
lib/CCreatureHandler.cpp

@@ -893,7 +893,10 @@ void CCreatureHandler::loadStackExp(Bonus & b, BonusList & bl, std::string & src
 					return;
 				}
 				return;
-			case 'r': //TODO: Rebirth on/off? makes sense?
+			case 'r':
+				b.type = Bonus::REBIRTH; //on/off? makes sense?
+				b.subtype = 0;
+				b.val = 20; //arbitrary value
 				break;
 			case 'R':
 				b.type = Bonus::BLOCKS_RETALIATION; break;
@@ -1044,7 +1047,8 @@ void CCreatureHandler::loadStackExp(Bonus & b, BonusList & bl, std::string & src
 
 	if (enable) //0 and 2 means non-active, 1 - active
 	{
-		b.val = 0; //on-off ability, no value specified
+		if (b.type != Bonus::REBIRTH)
+			b.val = 0; //on-off ability, no value specified
 		loadToIt (curVal, src, it, 4); // 0 level is never active
 		for (int i = 1; i < 11; ++i)
 		{

+ 4 - 1
lib/CCreatureSet.cpp

@@ -574,6 +574,7 @@ std::string CStackInstance::bonusToString(Bonus *bonus, bool description) const
 				case Bonus::ATTACKS_ALL_ADJACENT:
 				case Bonus::ADDITIONAL_ATTACK: //TODO: what with more than one attack? Axe of Ferocity for example
 				case Bonus::FULL_HP_REGENERATION:
+				case Bonus::REBIRTH:
 				case Bonus::LIFE_DRAIN: //TODO: chance, hp percentage?
 				case Bonus::SELF_MORALE:
 				case Bonus::SELF_LUCK:
@@ -638,6 +639,7 @@ std::string CStackInstance::bonusToString(Bonus *bonus, bool description) const
 				case Bonus::CHANGES_SPELL_COST_FOR_ALLY:
 				case Bonus::CHANGES_SPELL_COST_FOR_ENEMY:
 				case Bonus::ENEMY_DEFENCE_REDUCTION:
+				case Bonus::REBIRTH:
 				case Bonus::DEATH_STARE:
 					boost::algorithm::replace_first(text, "%d", boost::lexical_cast<std::string>(valOfBonuses(Selector::typeSubtype(bonus->type, bonus->subtype))));
 					break;
@@ -737,7 +739,8 @@ std::string CStackInstance::bonusToGraphics(Bonus *bonus) const
 			fileName = "E_OBST.bmp"; break;
 		case Bonus::ENEMY_DEFENCE_REDUCTION:
 			fileName = "E_RDEF.bmp"; break;
-			//"E_REBIRTH.bmp"
+		case Bonus::REBIRTH:
+			fileName = "E_REBIRTH.bmp"; break;
 		case Bonus::BLOCKS_RETALIATION:
 			fileName = "E_RETAIL.bmp"; break;
 		case Bonus::ADDITIONAL_RETALIATION: