diff options
author | xantara <xantara@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2012-02-22 02:08:57 +0000 |
---|---|---|
committer | xantara <xantara@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2012-02-22 02:08:57 +0000 |
commit | a72cf01c7ca53a6ffc810a2b1983ad8b34ef0467 (patch) | |
tree | c71953f31f482c7c542497b16f265ee5f6eae548 /src | |
parent | 25d71a5dcfbda1f3442982db42bd8d642db12833 (diff) | |
download | hercules-a72cf01c7ca53a6ffc810a2b1983ad8b34ef0467.tar.gz hercules-a72cf01c7ca53a6ffc810a2b1983ad8b34ef0467.tar.bz2 hercules-a72cf01c7ca53a6ffc810a2b1983ad8b34ef0467.tar.xz hercules-a72cf01c7ca53a6ffc810a2b1983ad8b34ef0467.zip |
Applied renewal skill changes: (bugreport:5302)
- Arrow Shower's attack power (50+10*SkillLvl)
- Wind Blade's MATK per hit (from 100% to 150%)
- Storm Gust's chance of freezing (65-5*SkillLvl)
- Land Mine, Blast Mine, Claymore Trap's damage formula
- Spear Quicken's ASPD (fixed 7), CRIT (3*SkillLvl) and FLEE (2*SkillLvl)
- Holy Cross's double damage with 2-handed spear
- Axe Mastery's damage increase also applies to Sword class weapons
- Spiral Pierce's weapon requirement (now allows swords)
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@15626 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src')
-rw-r--r-- | src/map/battle.c | 43 | ||||
-rw-r--r-- | src/map/skill.c | 2 | ||||
-rw-r--r-- | src/map/status.c | 19 |
3 files changed, 56 insertions, 8 deletions
diff --git a/src/map/battle.c b/src/map/battle.c index e9b9862a8..aa9bdbb62 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -892,12 +892,20 @@ int battle_addmastery(struct map_session_data *sd,struct block_list *target,int weapon = sd->weapontype2; switch(weapon) { - case W_DAGGER: case W_1HSWORD: + #if REMODE + if((skill = pc_checkskill(sd,AM_AXEMASTERY)) > 0) + damage += (skill * 3); + #endif + case W_DAGGER: if((skill = pc_checkskill(sd,SM_SWORD)) > 0) damage += (skill * 4); break; case W_2HSWORD: + #if REMODE + if((skill = pc_checkskill(sd,AM_AXEMASTERY)) > 0) + damage += (skill * 3); + #endif if((skill = pc_checkskill(sd,SM_TWOHAND)) > 0) damage += (skill * 4); break; @@ -1617,7 +1625,11 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo break; case AC_SHOWER: case MA_SHOWER: - skillratio += 5*skill_lv-25; + #if REMODE + skillratio += 50+10*skill_lv; + #else + skillratio += -25+5*skill_lv; + #endif break; case AC_CHARGEARROW: case MA_CHARGEARROW: @@ -1718,8 +1730,15 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo break; case NPC_DARKCROSS: case CR_HOLYCROSS: - skillratio += 35*skill_lv; + { + int ratio = 35*skill_lv; + #if REMODE + if(sd && sd->status.weapon == W_2HSPEAR) + ratio *= 2; + #endif + skillratio += ratio; break; + } case AM_DEMONSTRATION: skillratio += 20*skill_lv; break; @@ -3063,6 +3082,11 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list case NJ_RAIGEKISAI: skillratio += 60 + 40*skill_lv; break; + #if REMODE + case NJ_HUUJIN: + skillratio += 50; + break; + #endif case NJ_KAMAITACHI: case NPC_ENERGYDRAIN: skillratio += 100*skill_lv; @@ -3472,6 +3496,18 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list * switch( skill_num ) { +#if REMODE + case HT_LANDMINE: + case MA_LANDMINE: + case HT_BLASTMINE: + case HT_CLAYMORETRAP: + { + int level = sd?sd->status.base_level:status_get_lv(src); + md.damage = skill_lv*sstatus->dex*(3+level/100)*(1+sstatus->int_/35); + md.damage+= md.damage*(rand()%20-10)/100; + md.damage+= 40*(sd?pc_checkskill(sd,RA_RESEARCHTRAP):0); + } +#else case HT_LANDMINE: case MA_LANDMINE: md.damage=skill_lv*(sstatus->dex+75)*(100+sstatus->int_)/100; @@ -3482,6 +3518,7 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list * case HT_CLAYMORETRAP: md.damage=skill_lv*(sstatus->dex/2+75)*(100+sstatus->int_)/100; break; +#endif case HT_BLITZBEAT: case SN_FALCONASSAULT: //Blitz-beat Damage. diff --git a/src/map/skill.c b/src/map/skill.c index 1bd44b612..3e3b88ae2 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -829,7 +829,7 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int * Storm Gust counter was dropped in renewal **/ #if REMODE - sc_start(bl,SC_FREEZE,20+(5*skilllv),skilllv,skill_get_time2(skillid,skilllv)); + sc_start(bl,SC_FREEZE,65-(5*skilllv),skilllv,skill_get_time2(skillid,skilllv)); #else //Tharis pointed out that this is normal freeze chance with a base of 300% if(tsc->sg_counter >= 3 && diff --git a/src/map/status.c b/src/map/status.c index 4e0e8de52..f94201ee9 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -246,7 +246,7 @@ void initChangeTables(void) add_sc( CR_DEVOTION , SC_DEVOTION ); set_sc( CR_PROVIDENCE , SC_PROVIDENCE , SI_PROVIDENCE , SCB_ALL ); set_sc( CR_DEFENDER , SC_DEFENDER , SI_DEFENDER , SCB_SPEED|SCB_ASPD ); - set_sc( CR_SPEARQUICKEN , SC_SPEARQUICKEN , SI_SPEARQUICKEN , SCB_ASPD ); + set_sc( CR_SPEARQUICKEN , SC_SPEARQUICKEN , SI_SPEARQUICKEN , SCB_ASPD|SCB_CRI|SCB_FLEE ); set_sc( MO_STEELBODY , SC_STEELBODY , SI_STEELBODY , SCB_DEF|SCB_MDEF|SCB_ASPD|SCB_SPEED ); add_sc( MO_BLADESTOP , SC_BLADESTOP_WAIT ); add_sc( MO_BLADESTOP , SC_BLADESTOP ); @@ -1604,6 +1604,8 @@ int status_base_amotion_pc(struct map_session_data* sd, struct status_data* stat sd->sc.data[i=SC_ASPDPOTION1] || sd->sc.data[i=SC_ASPDPOTION0] ) amotion -= sd->sc.data[i]->val1*10; + if( sd->sc.data[SC_SPEARQUICKEN] ) + amotion -= 70; } #endif return amotion; @@ -4135,7 +4137,10 @@ static signed short status_calc_critical(struct block_list *bl, struct status_ch critical += 100; if(sc->data[SC__UNLUCKY]) critical -= critical * sc->data[SC__UNLUCKY]->val2 / 100; - +#if REMODE + if (sc->data[SC_SPEARQUICKEN]) + critical += 3*sc->data[SC_SPEARQUICKEN]->val1*10; +#endif return (short)cap_value(critical,10,SHRT_MAX); } @@ -4241,7 +4246,10 @@ static signed short status_calc_flee(struct block_list *bl, struct status_change flee += flee * sc->data[SC_ZEPHYR]->val2 / 100; if( sc->data[SC_MARSHOFABYSS] ) flee -= (9 * sc->data[SC_MARSHOFABYSS]->val3 / 10 + sc->data[SC_MARSHOFABYSS]->val2 / 10) * (bl->type == BL_MOB ? 2 : 1); - +#if REMODE + if( sc->data[SC_SPEARQUICKEN] ) + flee += 2 * sc->data[SC_SPEARQUICKEN]->val1; +#endif return (short)cap_value(flee,1,SHRT_MAX); } @@ -4674,9 +4682,11 @@ static short status_calc_aspd_rate(struct block_list *bl, struct status_change * max < sc->data[SC_ADRENALINE]->val3) max = sc->data[SC_ADRENALINE]->val3; +#if isOFF(REMODE) if(sc->data[SC_SPEARQUICKEN] && max < sc->data[SC_SPEARQUICKEN]->val2) max = sc->data[SC_SPEARQUICKEN]->val2; +#endif if(sc->data[SC_GATLINGFEVER] && max < sc->data[SC_GATLINGFEVER]->val2) @@ -6469,10 +6479,11 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val case SC_MERC_QUICKEN: val2 = 300; break; - +#if isOFF(REMODE) case SC_SPEARQUICKEN: val2 = 200+10*val1; break; +#endif case SC_DANCING: //val1 : Skill ID + LV //val2 : Skill Group of the Dance. |