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:
Vincent Stumpf 2023-02-08 16:00:11 -08:00 committed by GitHub
parent 7313495185
commit 6938722f02
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 71 additions and 69 deletions

View File

@ -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:

View File

@ -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;

View File

@ -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;

View File

@ -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) \

View File

@ -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;

View File

@ -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;

View File

@ -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;