Replace the bitshift optimizations for multiplication (#7590)
* These were originally bitshifts because it was 'faster', but now with modern compilers and hardware, the only thing it does now is confuse developers who have to read the code
This commit is contained in:
parent
7313495185
commit
6938722f02
@ -1247,7 +1247,7 @@ bool battle_status_block_damage(struct block_list *src, struct block_list *targe
|
||||
(skill_id == 0 && (status_get_status_data(src))->rhw.ele == ELE_GHOST))
|
||||
{
|
||||
if (skill_id == WL_SOULEXPANSION)
|
||||
damage <<= 1; // If used against a player in White Imprison, the skill deals double damage.
|
||||
damage *= 2; // If used against a player in White Imprison, the skill deals double damage.
|
||||
status_change_end(target, SC_WHITEIMPRISON); // Those skills do damage and removes effect
|
||||
} else {
|
||||
d->dmg_lv = ATK_BLOCK;
|
||||
@ -1480,12 +1480,12 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
|
||||
// Damage increasing effects
|
||||
#ifdef RENEWAL // Flat +400% damage from melee
|
||||
if (sc->getSCE(SC_KAITE) && (flag&(BF_SHORT|BF_MAGIC)) == BF_SHORT)
|
||||
damage <<= 2;
|
||||
damage *= 4;
|
||||
#endif
|
||||
|
||||
if (sc->getSCE(SC_AETERNA) && skill_id != PF_SOULBURN) {
|
||||
if (src->type != BL_MER || !skill_id)
|
||||
damage <<= 1; // Lex Aeterna only doubles damage of regular attacks from mercenaries
|
||||
damage *= 2; // Lex Aeterna only doubles damage of regular attacks from mercenaries
|
||||
|
||||
#ifndef RENEWAL
|
||||
if( skill_id != ASC_BREAKER || !(flag&BF_WEAPON) )
|
||||
@ -1537,7 +1537,7 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
|
||||
}
|
||||
|
||||
if (sc->getSCE(SC_SOUNDOFDESTRUCTION))
|
||||
damage <<= 1;
|
||||
damage *= 2;
|
||||
if (sc->getSCE(SC_DARKCROW) && (flag&(BF_SHORT|BF_MAGIC)) == BF_SHORT) {
|
||||
int bonus = sc->getSCE(SC_DARKCROW)->val2;
|
||||
if( sc->getSCE(SC_BURNT) && status_get_element(src) == ELE_FIRE )
|
||||
@ -1560,7 +1560,7 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
|
||||
if( map_flag_vs(bl->m) )
|
||||
damage = (int64)damage*2/3; //Receive 66% damage
|
||||
else
|
||||
damage >>= 1; //Receive 50% damage
|
||||
damage /= 2; //Receive 50% damage
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -1580,7 +1580,7 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
|
||||
if(flag&BF_SKILL) //25% reduction
|
||||
damage -= damage * 25 / 100;
|
||||
else if ((flag&(BF_LONG|BF_WEAPON)) == (BF_LONG|BF_WEAPON))
|
||||
damage >>= 2; //75% reduction
|
||||
damage /= 4; //75% reduction
|
||||
}
|
||||
|
||||
if (sc->getSCE(SC_SPORE_EXPLOSION) && (flag & BF_LONG) == BF_LONG)
|
||||
@ -1768,7 +1768,7 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
|
||||
break;
|
||||
case RC2_OGH_ATK_DEF:
|
||||
if (sc->getSCE(SC_GLASTHEIM_ATK))
|
||||
damage <<= 1;
|
||||
damage *= 2;
|
||||
break;
|
||||
case RC2_BIO5_SWORDMAN_THIEF:
|
||||
if (sce = sc->getSCE(SC_LHZ_DUN_N1))
|
||||
@ -2795,7 +2795,7 @@ static bool is_attack_critical(struct Damage* wd, struct block_list *src, struct
|
||||
cri -= tstatus->luk * ((!sd && tsd) ? 3 : 2);
|
||||
|
||||
if( tsc && tsc->getSCE(SC_SLEEP) )
|
||||
cri <<= 1;
|
||||
cri *= 2;
|
||||
|
||||
switch(skill_id) {
|
||||
case 0:
|
||||
@ -2808,7 +2808,7 @@ static bool is_attack_critical(struct Damage* wd, struct block_list *src, struct
|
||||
(battle_config.auto_counter_type&src->type))
|
||||
return true;
|
||||
else
|
||||
cri <<= 1;
|
||||
cri *= 2;
|
||||
break;
|
||||
case SN_SHARPSHOOTING:
|
||||
case MA_SHARPSHOOTING:
|
||||
@ -4062,7 +4062,7 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
|
||||
case AS_SONICBLOW:
|
||||
#ifdef RENEWAL
|
||||
skillratio += 100 + 100 * skill_lv;
|
||||
if (tstatus->hp < tstatus->max_hp >> 1)
|
||||
if (tstatus->hp < (tstatus->max_hp / 2))
|
||||
skillratio += skillratio / 2;
|
||||
#else
|
||||
skillratio += 300 + 40 * skill_lv;
|
||||
@ -4245,7 +4245,7 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
|
||||
case LK_JOINTBEAT:
|
||||
skillratio += 10 * skill_lv - 50;
|
||||
if (wd->miscflag & BREAK_NECK || (tsc && tsc->getSCE(SC_JOINTBEAT) && tsc->getSCE(SC_JOINTBEAT)->val2 & BREAK_NECK)) // The 2x damage is only for the BREAK_NECK ailment.
|
||||
skillratio <<= 1;
|
||||
skillratio *= 2;
|
||||
break;
|
||||
#ifdef RENEWAL
|
||||
// Renewal: skill ratio applies to entire damage [helvetica]
|
||||
@ -4839,7 +4839,7 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
|
||||
if (sd) {
|
||||
skillratio += pc_checkskill(sd, WM_LESSON) * 50; // !TODO: Confirm bonus
|
||||
if (skill_check_pc_partner(sd, skill_id, &skill_lv, AREA_SIZE, 0) > 0)
|
||||
skillratio <<= 1;
|
||||
skillratio *= 2;
|
||||
}
|
||||
RE_LVL_DMOD(100);
|
||||
break;
|
||||
@ -5053,7 +5053,7 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
|
||||
case SU_PICKYPECK:
|
||||
case SU_PICKYPECK_DOUBLE_ATK:
|
||||
skillratio += 100 + 100 * skill_lv;
|
||||
if (status_get_hp(target) < status_get_max_hp(target) >> 1)
|
||||
if (status_get_hp(target) < (status_get_max_hp(target) / 2))
|
||||
skillratio *= 2;
|
||||
if (sd && pc_checkskill(sd, SU_SPIRITOFLIFE))
|
||||
skillratio += skillratio * status_get_hp(src) / status_get_max_hp(src);
|
||||
@ -6192,7 +6192,7 @@ static struct Damage initialize_weapon_data(struct block_list *src, struct block
|
||||
wd.amotion = (skill_id && skill_get_inf(skill_id)&INF_GROUND_SKILL)?0:sstatus->amotion; //Amotion should be 0 for ground skills.
|
||||
// counter attack DOES obey ASPD delay on official, uncomment if you want the old (bad) behavior [helvetica]
|
||||
/*if(skill_id == KN_AUTOCOUNTER)
|
||||
wd.amotion >>= 1; */
|
||||
wd.amotion /= 2; */
|
||||
wd.dmotion = tstatus->dmotion;
|
||||
wd.blewcount =skill_get_blewcount(skill_id,skill_lv);
|
||||
wd.miscflag = wflag;
|
||||
@ -8088,7 +8088,8 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *
|
||||
md.damage = (int)((int64)7*tstatus->vit*sstatus->int_*sstatus->int_ / (10*(tstatus->vit+sstatus->int_)));
|
||||
else
|
||||
md.damage = 0;
|
||||
if (tsd) md.damage>>=1;
|
||||
if (tsd)
|
||||
md.damage /= 2;
|
||||
#endif
|
||||
break;
|
||||
case NJ_ZENYNAGE:
|
||||
|
@ -2618,7 +2618,7 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
|
||||
//TODO: Determine if this should go before calculating the MVP player instead of after.
|
||||
if (UINT_MAX - md->dmglog[0].dmg > md->tdmg) {
|
||||
md->tdmg += md->dmglog[0].dmg;
|
||||
md->dmglog[0].dmg<<=1;
|
||||
md->dmglog[0].dmg *= 2;
|
||||
} else {
|
||||
md->dmglog[0].dmg+= UINT_MAX - md->tdmg;
|
||||
md->tdmg = UINT_MAX;
|
||||
|
@ -10389,7 +10389,7 @@ int pc_itemheal(map_session_data *sd, t_itemid itemid, int hp, int sp)
|
||||
int bonus, tmp, penalty = 0;
|
||||
|
||||
if (hp) {
|
||||
bonus = 100 + (sd->battle_status.vit << 1) + pc_checkskill(sd, SM_RECOVERY) * 10 + pc_checkskill(sd, AM_LEARNINGPOTION) * 5;
|
||||
bonus = 100 + (sd->battle_status.vit * 2) + pc_checkskill(sd, SM_RECOVERY) * 10 + pc_checkskill(sd, AM_LEARNINGPOTION) * 5;
|
||||
// A potion produced by an Alchemist in the Fame Top 10 gets +50% effect [DracoRPG]
|
||||
if (potion_flag == 2) {
|
||||
bonus += bonus * 50 / 100;
|
||||
@ -10425,7 +10425,7 @@ int pc_itemheal(map_session_data *sd, t_itemid itemid, int hp, int sp)
|
||||
hp = tmp;
|
||||
}
|
||||
if (sp) {
|
||||
bonus = 100 + (sd->battle_status.int_ << 1) + pc_checkskill(sd, MG_SRECOVERY) * 10 + pc_checkskill(sd, AM_LEARNINGPOTION) * 5;
|
||||
bonus = 100 + (sd->battle_status.int_ * 2) + pc_checkskill(sd, MG_SRECOVERY) * 10 + pc_checkskill(sd, AM_LEARNINGPOTION) * 5;
|
||||
// A potion produced by an Alchemist in the Fame Top 10 gets +50% effect [DracoRPG]
|
||||
if (potion_flag == 2)
|
||||
bonus += bonus * 50 / 100;
|
||||
|
@ -1234,7 +1234,7 @@ enum e_mado_type : uint16 {
|
||||
#define pc_leftside_def(sd) ((sd)->battle_status.def)
|
||||
#define pc_rightside_def(sd) ((sd)->battle_status.def2)
|
||||
#define pc_leftside_mdef(sd) ((sd)->battle_status.mdef)
|
||||
#define pc_rightside_mdef(sd) ( (sd)->battle_status.mdef2 - ((sd)->battle_status.vit>>1) )
|
||||
#define pc_rightside_mdef(sd) ( (sd)->battle_status.mdef2 - ((sd)->battle_status.vit / 2) )
|
||||
#define pc_leftside_matk(sd) \
|
||||
(\
|
||||
((sd)->sc.getSCE(SC_MAGICPOWER) && (sd)->sc.getSCE(SC_MAGICPOWER)->val4) \
|
||||
|
@ -1630,7 +1630,7 @@ int pet_food(map_session_data *sd, struct pet_data *pd)
|
||||
k = pet_db_ptr->r_hungry;
|
||||
|
||||
if( pd->pet.hungry > PET_HUNGRY_NEUTRAL) {
|
||||
k >>= 1;
|
||||
k /= 2;
|
||||
k = max(k, 1);
|
||||
}
|
||||
|
||||
@ -1753,7 +1753,7 @@ static int pet_ai_sub_hard(struct pet_data *pd, map_session_data *sd, t_tick tic
|
||||
if (DIFF_TICK(tick, pd->ud.canmove_tick) < 0)
|
||||
return 0; // Can't move yet.
|
||||
|
||||
pd->status.speed = (sd->battle_status.speed>>1);
|
||||
pd->status.speed = (sd->battle_status.speed / 2);
|
||||
|
||||
if(pd->status.speed == 0)
|
||||
pd->status.speed = 1;
|
||||
|
@ -601,7 +601,7 @@ int skill_calc_heal(struct block_list *src, struct block_list *target, uint16 sk
|
||||
}
|
||||
|
||||
if( (!heal || (target && target->type == BL_MER)) && skill_id != NPC_EVILLAND )
|
||||
hp >>= 1;
|
||||
hp /= 2;
|
||||
|
||||
if (sd) {
|
||||
if (pc_checkskill(sd, SU_POWEROFSEA) > 0) {
|
||||
@ -2704,7 +2704,7 @@ int skill_counter_additional_effect (struct block_list* src, struct block_list *
|
||||
|
||||
//Physical range attacks only trigger autospells half of the time
|
||||
if ((attack_type&(BF_WEAPON|BF_LONG)) == (BF_WEAPON|BF_LONG))
|
||||
autospl_rate>>=1;
|
||||
autospl_rate /= 2;
|
||||
|
||||
dstsd->state.autocast = 1;
|
||||
if ( skill_isNotOk(autospl_skill_id, dstsd) ) {
|
||||
@ -9224,13 +9224,13 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
||||
} else {
|
||||
if( potion_hp > 0 ) {
|
||||
hp = potion_hp * (100 + pc_checkskill(sd,AM_POTIONPITCHER)*10 + pc_checkskill(sd,AM_LEARNINGPOTION)*5)*bonus/10000;
|
||||
hp = hp * (100 + (tstatus->vit<<1)) / 100;
|
||||
hp = hp * (100 + (tstatus->vit * 2)) / 100;
|
||||
if( dstsd )
|
||||
hp = hp * (100 + pc_checkskill(dstsd,SM_RECOVERY)*10) / 100;
|
||||
}
|
||||
if( potion_sp > 0 ) {
|
||||
sp = potion_sp * (100 + pc_checkskill(sd,AM_POTIONPITCHER)*10 + pc_checkskill(sd,AM_LEARNINGPOTION)*5)*bonus/10000;
|
||||
sp = sp * (100 + (tstatus->int_<<1)) / 100;
|
||||
sp = sp * (100 + (tstatus->int_ * 2)) / 100;
|
||||
if( dstsd )
|
||||
sp = sp * (100 + pc_checkskill(dstsd,MG_SRECOVERY)*10) / 100;
|
||||
}
|
||||
@ -9257,7 +9257,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
||||
default: hp = 325; break;
|
||||
}
|
||||
hp = (hp + rnd()%(skill_lv*20+1)) * (150 + skill_lv*10) / 100;
|
||||
hp = hp * (100 + (tstatus->vit<<1)) / 100;
|
||||
hp = hp * (100 + (tstatus->vit * 2)) / 100;
|
||||
if( dstsd )
|
||||
hp = hp * (100 + pc_checkskill(dstsd,SM_RECOVERY)*10) / 100;
|
||||
}
|
||||
@ -9520,7 +9520,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
||||
status_zap(bl, hp, sp);
|
||||
|
||||
if (hp && skill_lv >= 5)
|
||||
hp>>=1; //Recover half damaged HP at level 5 [Skotlex]
|
||||
hp /= 2; //Recover half damaged HP at level 5 [Skotlex]
|
||||
else
|
||||
hp = 0;
|
||||
|
||||
@ -10058,8 +10058,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
||||
break;
|
||||
if (potion_hp || potion_sp) {
|
||||
int hp = potion_hp, sp = potion_sp;
|
||||
hp = hp * (100 + (tstatus->vit<<1))/100;
|
||||
sp = sp * (100 + (tstatus->int_<<1))/100;
|
||||
hp = hp * (100 + (tstatus->vit * 2))/100;
|
||||
sp = sp * (100 + (tstatus->int_ * 2))/100;
|
||||
if (dstsd) {
|
||||
if (hp)
|
||||
hp = hp * (100 + pc_checkskill(dstsd,SM_RECOVERY)*10 + pc_skillheal2_bonus(dstsd, skill_id))/100;
|
||||
@ -21979,6 +21979,7 @@ bool skill_produce_mix(map_session_data *sd, uint16 skill_id, t_itemid nameid, i
|
||||
default:
|
||||
if (skill_produce_db[idx].itemlv > 10 && skill_produce_db[idx].itemlv <= 20 ) { //Cooking items.
|
||||
clif_specialeffect(&sd->bl, EF_COOKING_FAIL, AREA);
|
||||
// todo: What in the world is this calculation
|
||||
pc_setparam(sd, SP_COOKMASTERY, sd->cook_mastery - ( 1 << ((skill_produce_db[idx].itemlv - 11) / 2) ) - ( ( ( 1 << ((skill_produce_db[idx].itemlv - 11) / 2) ) >> 1 ) * 3 ));
|
||||
}
|
||||
break;
|
||||
|
@ -1513,7 +1513,7 @@ int status_damage(struct block_list *src,struct block_list *target,int64 dhp, in
|
||||
}
|
||||
}
|
||||
#endif
|
||||
if(sc->getSCE(SC_DANCING) && (unsigned int)hp > status->max_hp>>2)
|
||||
if(sc->getSCE(SC_DANCING) && hp > (status->max_hp / 4))
|
||||
status_change_end(target, SC_DANCING);
|
||||
if(sc->getSCE(SC_CLOAKINGEXCEED) && --(sc->getSCE(SC_CLOAKINGEXCEED)->val2) <= 0)
|
||||
status_change_end(target, SC_CLOAKINGEXCEED);
|
||||
@ -1533,7 +1533,7 @@ int status_damage(struct block_list *src,struct block_list *target,int64 dhp, in
|
||||
if (sc && hp && status->hp) {
|
||||
if (sc->getSCE(SC_AUTOBERSERK) &&
|
||||
(!sc->getSCE(SC_PROVOKE) || !sc->getSCE(SC_PROVOKE)->val4) &&
|
||||
status->hp < status->max_hp>>2)
|
||||
status->hp < status->max_hp / 4)
|
||||
sc_start4(src,target,SC_PROVOKE,100,10,0,0,1,0);
|
||||
if (sc->getSCE(SC_BERSERK) && status->hp <= 100)
|
||||
status_change_end(target, SC_BERSERK);
|
||||
@ -1751,7 +1751,7 @@ int status_heal(struct block_list *bl,int64 hhp,int64 hsp, int64 hap, int flag)
|
||||
sc->getSCE(SC_AUTOBERSERK) &&
|
||||
sc->getSCE(SC_PROVOKE) &&
|
||||
sc->getSCE(SC_PROVOKE)->val4==1 &&
|
||||
status->hp>=status->max_hp>>2
|
||||
status->hp >= status->max_hp / 4
|
||||
) // End auto berserk.
|
||||
status_change_end(bl, SC_PROVOKE);
|
||||
|
||||
@ -2598,7 +2598,7 @@ void status_calc_misc(struct block_list *bl, struct status_data *status, int lev
|
||||
status->def2 = cap_value(stat, 0, SHRT_MAX);
|
||||
// Mdef2
|
||||
stat = status->mdef2;
|
||||
stat += status->int_ + (status->vit>>1);
|
||||
stat += status->int_ + (status->vit / 2);
|
||||
status->mdef2 = cap_value(stat, 0, SHRT_MAX);
|
||||
#endif
|
||||
|
||||
@ -2738,18 +2738,18 @@ int status_calc_mob_(struct mob_data* md, uint8 opt)
|
||||
|
||||
if (flag&2 && battle_config.mob_size_influence) { // Change for sized monsters [Valaris]
|
||||
if (md->special_state.size == SZ_MEDIUM) {
|
||||
status->max_hp >>= 1;
|
||||
status->max_sp >>= 1;
|
||||
status->max_hp /= 2;
|
||||
status->max_sp /= 2;
|
||||
if (!status->max_hp) status->max_hp = 1;
|
||||
if (!status->max_sp) status->max_sp = 1;
|
||||
status->hp = status->max_hp;
|
||||
status->sp = status->max_sp;
|
||||
status->str >>= 1;
|
||||
status->agi >>= 1;
|
||||
status->vit >>= 1;
|
||||
status->int_ >>= 1;
|
||||
status->dex >>= 1;
|
||||
status->luk >>= 1;
|
||||
status->str /= 2;
|
||||
status->agi /= 2;
|
||||
status->vit /= 2;
|
||||
status->int_ /= 2;
|
||||
status->dex /= 2;
|
||||
status->luk /= 2;
|
||||
if (!status->str) status->str = 1;
|
||||
if (!status->agi) status->agi = 1;
|
||||
if (!status->vit) status->vit = 1;
|
||||
@ -2757,16 +2757,16 @@ int status_calc_mob_(struct mob_data* md, uint8 opt)
|
||||
if (!status->dex) status->dex = 1;
|
||||
if (!status->luk) status->luk = 1;
|
||||
} else if (md->special_state.size == SZ_BIG) {
|
||||
status->max_hp <<= 1;
|
||||
status->max_sp <<= 1;
|
||||
status->max_hp *= 2;
|
||||
status->max_sp *= 2;
|
||||
status->hp = status->max_hp;
|
||||
status->sp = status->max_sp;
|
||||
status->str <<= 1;
|
||||
status->agi <<= 1;
|
||||
status->vit <<= 1;
|
||||
status->int_ <<= 1;
|
||||
status->dex <<= 1;
|
||||
status->luk <<= 1;
|
||||
status->str *= 2;
|
||||
status->agi *= 2;
|
||||
status->vit *= 2;
|
||||
status->int_ *= 2;
|
||||
status->dex *= 2;
|
||||
status->luk *= 2;
|
||||
}
|
||||
}
|
||||
|
||||
@ -4208,7 +4208,7 @@ int status_calc_pc_sub(map_session_data* sd, uint8 opt)
|
||||
} else {
|
||||
if((sd->class_&MAPID_BASEMASK) == MAPID_NOVICE && !(sd->class_&JOBL_2)
|
||||
&& battle_config.restart_hp_rate < 50)
|
||||
base_status->hp = base_status->max_hp>>1;
|
||||
base_status->hp = base_status->max_hp / 2;
|
||||
else
|
||||
base_status->hp = (int64)base_status->max_hp * battle_config.restart_hp_rate/100;
|
||||
if(!base_status->hp)
|
||||
@ -4336,7 +4336,7 @@ int status_calc_pc_sub(map_session_data* sd, uint8 opt)
|
||||
if((skill=pc_checkskill(sd,TF_MISS))>0)
|
||||
base_status->flee += skill*(sd->class_&JOBL_2 && (sd->class_&MAPID_BASEMASK) == MAPID_THIEF? 4 : 3);
|
||||
if((skill=pc_checkskill(sd,MO_DODGE))>0)
|
||||
base_status->flee += (skill*3)>>1;
|
||||
base_status->flee += (skill*3) / 2;
|
||||
if (pc_checkskill(sd, SU_POWEROFLIFE) > 0)
|
||||
base_status->flee += 20;
|
||||
if ((skill = pc_checkskill(sd, SHC_SHADOW_SENSE)) > 0)
|
||||
@ -5105,7 +5105,7 @@ void status_calc_regen(struct block_list *bl, struct status_data *status, struct
|
||||
|
||||
val = 1 + (status->int_/6) + (status->max_sp/100);
|
||||
if( status->int_ >= 120 )
|
||||
val += ((status->int_-120)>>1) + 4;
|
||||
val += ((status->int_-120) / 2) + 4;
|
||||
|
||||
if( sd && sd->sprecov_rate != 100 )
|
||||
val = val*sd->sprecov_rate/100;
|
||||
@ -5724,7 +5724,7 @@ void status_calc_bl_main(struct block_list *bl, std::bitset<SCB_MAX> flag)
|
||||
#ifdef RENEWAL
|
||||
+ (int)( ((float)status->dex/5 - (float)b_status->dex/5) + ((float)status->vit/5 - (float)b_status->vit/5) )
|
||||
#else
|
||||
+ ((status->vit - b_status->vit)>>1)
|
||||
+ ((status->vit - b_status->vit) / 2)
|
||||
#endif
|
||||
);
|
||||
}
|
||||
@ -5754,7 +5754,7 @@ void status_calc_bl_main(struct block_list *bl, std::bitset<SCB_MAX> flag)
|
||||
/// After status_calc_critical so the bonus is applied despite if you have or not a sc bugreport:5240
|
||||
if (sd) {
|
||||
if (sd->status.weapon == W_KATAR)
|
||||
status->cri <<= 1;
|
||||
status->cri *= 2;
|
||||
}
|
||||
}
|
||||
|
||||
@ -7558,7 +7558,7 @@ static defType status_calc_def(struct block_list *bl, status_change *sc, int def
|
||||
if (bl->type == BL_PC)
|
||||
return 0;
|
||||
else
|
||||
return def >>= 1;
|
||||
return def /= 2;
|
||||
}
|
||||
if(sc->getSCE(SC_DEFSET))
|
||||
return sc->getSCE(SC_DEFSET)->val1;
|
||||
@ -7583,15 +7583,15 @@ static defType status_calc_def(struct block_list *bl, status_change *sc, int def
|
||||
if(sc->getSCE(SC_STONEHARDSKIN))
|
||||
def += sc->getSCE(SC_STONEHARDSKIN)->val1;
|
||||
if(sc->getSCE(SC_STONE))
|
||||
def >>=1;
|
||||
def /= 2;
|
||||
if(sc->getSCE(SC_FREEZE))
|
||||
def >>=1;
|
||||
def /= 2;
|
||||
if(sc->getSCE(SC_SIGNUMCRUCIS))
|
||||
def -= def * sc->getSCE(SC_SIGNUMCRUCIS)->val2/100;
|
||||
if(sc->getSCE(SC_CONCENTRATION))
|
||||
def -= def * sc->getSCE(SC_CONCENTRATION)->val4/100;
|
||||
if(sc->getSCE(SC_SKE))
|
||||
def >>=1;
|
||||
def /= 2;
|
||||
if(sc->getSCE(SC_PROVOKE) && bl->type != BL_PC) // Provoke doesn't alter player defense->
|
||||
def -= def * sc->getSCE(SC_PROVOKE)->val3/100;
|
||||
if(sc->getSCE(SC_STRIPSHIELD) && bl->type != BL_PC) // Player doesn't have def reduction only equip removed
|
||||
@ -7737,7 +7737,7 @@ static defType status_calc_mdef(struct block_list *bl, status_change *sc, int md
|
||||
if (bl->type == BL_PC)
|
||||
return 0;
|
||||
else
|
||||
return mdef >>= 1;
|
||||
return mdef / 2;
|
||||
}
|
||||
if(sc->getSCE(SC_MDEFSET))
|
||||
return sc->getSCE(SC_MDEFSET)->val1;
|
||||
@ -9408,7 +9408,7 @@ t_tick status_get_sc_def(struct block_list *src, struct block_list *bl, enum sc_
|
||||
tick_def2 = status->luk*100;
|
||||
} else {
|
||||
// For monsters: 30000 - 200*vit
|
||||
tick>>=1;
|
||||
tick /= 2;
|
||||
tick_def = (status->vit*200)/3;
|
||||
}
|
||||
#else
|
||||
@ -9512,7 +9512,7 @@ t_tick status_get_sc_def(struct block_list *src, struct block_list *bl, enum sc_
|
||||
break;
|
||||
case SC_DECREASEAGI:
|
||||
if (sd)
|
||||
tick >>= 1; // Half duration for players.
|
||||
tick /= 2; // Half duration for players.
|
||||
sc_def2 = status->mdef*100;
|
||||
break;
|
||||
case SC_ANKLE:
|
||||
@ -10496,7 +10496,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
|
||||
tick = INFINITE_TICK;
|
||||
break;
|
||||
case SC_AUTOBERSERK:
|
||||
if (status->hp < status->max_hp>>2 &&
|
||||
if (status->hp < status->max_hp / 4 &&
|
||||
(!sc->getSCE(SC_PROVOKE) || sc->getSCE(SC_PROVOKE)->val4==0))
|
||||
sc_start4(src,bl,SC_PROVOKE,100,10,0,0,1,60000);
|
||||
tick = INFINITE_TICK;
|
||||
@ -10785,10 +10785,10 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
|
||||
|
||||
case SC_DPOISON:
|
||||
// Lose 10/15% of your life as long as it doesn't brings life below 25%
|
||||
if (status->hp > status->max_hp>>2) {
|
||||
if (status->hp > status->max_hp / 4) {
|
||||
int diff = status->max_hp*(bl->type==BL_PC?10:15)/100;
|
||||
if (status->hp - diff < status->max_hp>>2)
|
||||
diff = status->hp - (status->max_hp>>2);
|
||||
if (status->hp - diff < status->max_hp / 4)
|
||||
diff = status->hp - (status->max_hp / 4);
|
||||
status_zap(bl, diff, 0);
|
||||
}
|
||||
// Fall through
|
||||
@ -10909,7 +10909,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
|
||||
map_session_data *tsd;
|
||||
int i;
|
||||
for( i = val2 = 0; i < val1; i++) {
|
||||
int t = 5-(i>>1);
|
||||
int t = 5-(i / 2);
|
||||
val2 += (t < 0)? 1:t;
|
||||
}
|
||||
|
||||
@ -12255,7 +12255,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
|
||||
case SC_TUNAPARTY:
|
||||
val2 = (status->max_hp * (val1 * 10) / 100); // Max HP% to absorb
|
||||
if (sd && pc_checkskill(sd, SU_SPIRITOFSEA))
|
||||
val2 <<= 1; // Double the shield life
|
||||
val2 *= 2; // Double the shield life
|
||||
break;
|
||||
case SC_HISS:
|
||||
val2 = 50; // Perfect Dodge
|
||||
@ -14967,7 +14967,7 @@ static int status_natural_heal(struct block_list* bl, va_list args)
|
||||
if(flag&(RGN_SHP)) { // Sitting HP regen
|
||||
rate = (int)(natural_heal_diff_tick * (sregen->rate.hp / 100.));
|
||||
if (regen->state.overweight)
|
||||
rate >>= 1; // Half as fast when overweight.
|
||||
rate /= 2; // Half as fast when overweight.
|
||||
sregen->tick.hp += rate;
|
||||
while(sregen->tick.hp >= (unsigned int)battle_config.natural_heal_skill_interval) {
|
||||
sregen->tick.hp -= battle_config.natural_heal_skill_interval;
|
||||
@ -14980,7 +14980,7 @@ static int status_natural_heal(struct block_list* bl, va_list args)
|
||||
if(flag&(RGN_SSP)) { // Sitting SP regen
|
||||
rate = (int)(natural_heal_diff_tick * (sregen->rate.sp / 100.));
|
||||
if (regen->state.overweight)
|
||||
rate >>= 1; // Half as fast when overweight.
|
||||
rate /= 2; // Half as fast when overweight.
|
||||
sregen->tick.sp += rate;
|
||||
while(sregen->tick.sp >= (unsigned int)battle_config.natural_heal_skill_interval) {
|
||||
sregen->tick.sp -= battle_config.natural_heal_skill_interval;
|
||||
|
Loading…
x
Reference in New Issue
Block a user