39 #include "Core-Level-JR.h"
41 void rpgSheet_Fighter_Props::load(
class laPropertyList* pElement)
44 rpgSheet_Acrobate_Props::load(pElement);
46 nHP_Max = nHP = pElement->getInt(
"HP" );
47 nAP = pElement->getInt(
"AP" );
59 sprintf(s,
"attack-%d",i++);
60 a.load( pElement->getChild(s) );
62 vAttacks.push_back(a);
65 catch(laError_PropertyNotDefined&) { };
69 for(
unsigned i=0; i<M_ELEMENTS; i++)
72 sprintf(s,
"DP-%d",i);
73 arDP[i] = pElement->getDouble( s );
77 void rpgSheet_Fighter_Props::load(
class laFileParser *fp)
79 rpgSheet_Acrobate_Props::load(fp);
81 fp->readInt(&nHP_Max);
84 fp->readUnsigned(&nAP);
88 std::vector<rpgAttack>::iterator iter;
90 for(iter=vAttacks.begin(); iter!=vAttacks.end(); iter++)
98 for(
unsigned i=0; i<M_ELEMENTS; i++) fp->readDouble( arDP + i );
103 unsigned rpgSheet_Fighter::attack(
unsigned nAttack, rpgSheet_Fighter* pTarget )
105 return pTarget->hit( this->modAttack(nAttack) );
110 unsigned rpgSheet_Fighter::hit(
rpgAttack attack )
112 int nAttackPower = attack.nAP;
113 double dElementDefense = M_MIN(1, this->modDP(attack.nElement) );
119 double dDefensiveThrow = dElementDefense/2.0 + ((rand()%100)/100.0) * (dElementDefense/2.0);
120 int nDamage = M_MAX(0, nAttackPower * (1 - dDefensiveThrow) );
122 properties()->nHP = M_MAX(0, properties()->nHP - nDamage);
128 unsigned rpgSheet_Fighter::heal(
unsigned hp_heal )
130 if( !isAlive() )
return 0;
132 unsigned nHP_Old = properties()->nHP;
133 properties()->nHP = M_MIN( (properties()->nHP + hp_heal), properties()->nHP_Max);
135 return properties()->nHP - nHP_Old;