diff options
author | shennetsind <shennetsind@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2012-02-09 01:37:48 +0000 |
---|---|---|
committer | shennetsind <shennetsind@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2012-02-09 01:37:48 +0000 |
commit | 3d56a0bf4a4ac9da69eac47560b18e2f770d2747 (patch) | |
tree | 0964f7a067aa4f55e90707cf25ff6c875469037a | |
parent | afe5db9b8300ed02e0a57c75b28d5c02baed58da (diff) | |
download | hercules-3d56a0bf4a4ac9da69eac47560b18e2f770d2747.tar.gz hercules-3d56a0bf4a4ac9da69eac47560b18e2f770d2747.tar.bz2 hercules-3d56a0bf4a4ac9da69eac47560b18e2f770d2747.tar.xz hercules-3d56a0bf4a4ac9da69eac47560b18e2f770d2747.zip |
Added some renewal behaviors of skills from bugreport:5302 (all under renewal mode)
- Steel body no longer sets def and mdef at 90, instead it reduces incoming damage by 1/10.
- Storm Gust no longer possesses a hit counter; instead every hit have a chance to freeze of 20+(5 x skill_level).
- Thunder Storm skill ratio was increased from 80% to 100%
- Misc: added isOFF macro to replace REMODE == 0 compiler-level-checks.
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@15553 54d463be-8e91-2dee-dedb-b68131a5f0ec
-rw-r--r-- | src/map/battle.c | 16 | ||||
-rw-r--r-- | src/map/config/Data/Const.h | 1 | ||||
-rw-r--r-- | src/map/skill.c | 13 | ||||
-rw-r--r-- | src/map/status.c | 24 | ||||
-rw-r--r-- | src/map/status.h | 5 |
5 files changed, 49 insertions, 10 deletions
diff --git a/src/map/battle.c b/src/map/battle.c index fe637a5ce..efcf199aa 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -544,7 +544,14 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,struct Damag //Reduction: 6% + 6% every 20% damage -= damage * 6 * (1+per) / 100; } - +/** + * In renewal steel body reduces all incoming damage by 1/10 + **/ +#if REMODE + if( sc->data[SC_STEELBODY] ) { + damage = damage > 10 ? damage / 10 : 1; + } +#endif // FIXME: // So Reject Sword calculates the redirected damage before calculating WoE/BG reduction? This is weird. [Inkfish] if((sce=sc->data[SC_REJECTSWORD]) && flag&BF_WEAPON && @@ -727,7 +734,7 @@ int battle_calc_gvg_damage(struct block_list *src,struct block_list *bl,int dama if(class_ == MOBID_EMPERIUM && flag&BF_SKILL) { //Skill immunity. switch (skill_num) { -#if REMODE == 0 +#if isOFF(REMODE) case MO_TRIPLEATTACK: #endif case HW_GRAVITATION: @@ -2862,9 +2869,14 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list case MG_FIREWALL: skillratio -= 50; break; + /** + * in Renewal Thunder Storm boost is 100% (in pre-re, 80%) + **/ + #if isOFF(REMODE) case MG_THUNDERSTORM: skillratio -= 20; break; + #endif case MG_FROSTDIVER: skillratio += 10*skill_lv; break; diff --git a/src/map/config/Data/Const.h b/src/map/config/Data/Const.h index f8da4c90b..498e05c17 100644 --- a/src/map/config/Data/Const.h +++ b/src/map/config/Data/Const.h @@ -26,6 +26,7 @@ #define CONST_CASTRATE_CALC (status_get_dex(bl)) #endif +#define isOFF(def) (def == 0) /** * "Sane Checks" to save you from compiling with cool bugs diff --git a/src/map/skill.c b/src/map/skill.c index 81ffb2333..3179853c2 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -800,6 +800,12 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int break; case WZ_STORMGUST: + /** + * Storm Gust counter was dropped in renewal + **/ + #if REMODE + sc_start(bl,SC_FREEZE,20+(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 && sc_start(bl,SC_FREEZE,300,skilllv,skill_get_time2(skillid,skilllv))) @@ -809,6 +815,7 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int **/ else if( tsc->sg_counter > 250 ) tsc->sg_counter = 0; + #endif break; case WZ_METEOR: @@ -9564,13 +9571,17 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns ++count < SKILLUNITTIMER_INTERVAL/sg->interval && !status_isdead(bl) ); } break; + /** + * The storm gust counter was dropped in renewal + **/ + #if isOFF(REMODE) case WZ_STORMGUST: //SG counter does not reset per stormgust. IE: One hit from a SG and two hits from another will freeze you. if (tsc) tsc->sg_counter++; //SG hit counter. if (skill_attack(skill_get_type(sg->skill_id),ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,0) <= 0 && tsc) tsc->sg_counter=0; //Attack absorbed. break; - + #endif case GS_DESPERADO: if (rnd()%100 < src->val1) skill_attack(BF_WEAPON,ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,0); diff --git a/src/map/status.c b/src/map/status.c index 44fdb3401..c745bad51 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -2635,7 +2635,7 @@ int status_calc_pc_(struct map_session_data* sd, bool first) status->def = cap_value(i, CHAR_MIN, CHAR_MAX); #endif } -#if REMODE == 0 +#if isOFF(REMODE) /** * The following setting does not affect Renewal Mode **/ @@ -2658,7 +2658,7 @@ int status_calc_pc_(struct map_session_data* sd, bool first) status->mdef = cap_value(i, CHAR_MIN, CHAR_MAX); #endif } -#if REMODE == 0 +#if isOFF(REMODE) /** * The following setting does not affect Renewal Mode **/ @@ -3387,14 +3387,14 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag) if( bl->type&BL_PC && sd->matk_rate != 100 ) { //Bonuses from previous matk - #if REMODE == 0 //Only changed in non-re [RRInd] + #if isOFF(REMODE) //Only changed in non-re [RRInd] status->matk_max = status->matk_max * sd->matk_rate/100; #endif status->matk_min = status->matk_min * sd->matk_rate/100; } status->matk_min = status_calc_matk(bl, sc, status->matk_min); - #if REMODE == 0 //Only changed in non-re [RRInd] + #if isOFF(REMODE) //Only changed in non-re [RRInd] status->matk_max = status_calc_matk(bl, sc, status->matk_max); #endif @@ -4136,8 +4136,13 @@ static signed short status_calc_flee2(struct block_list *bl, struct status_chang return 100; if(sc->data[SC_KEEPING]) return 90; +/** + * In renewal it no longer provides 90 def + **/ +#if isOFF(REMODE) if(sc->data[SC_STEELBODY]) return 90; +#endif if(sc->data[SC_ARMORCHANGE]) def += sc->data[SC_ARMORCHANGE]->val2; if(sc->data[SC_DRUMBATTLE]) @@ -4252,8 +4257,13 @@ static signed short status_calc_def2(struct block_list *bl, struct status_change return 0; if(sc->data[SC_BARRIER]) return 100; +/** + * In renewal it no longer provides 90 mdef + **/ +#if isOFF(REMODE) if(sc->data[SC_STEELBODY]) return 90; +#endif if(sc->data[SC_ARMORCHANGE]) mdef += sc->data[SC_ARMORCHANGE]->val3; if(sc->data[SC_STONE] && sc->opt1 == OPT1_STONE) @@ -4472,7 +4482,7 @@ static unsigned short status_calc_speed(struct block_list *bl, struct status_cha /// Note that the scale of aspd_rate is 1000 = 100%. static short status_calc_aspd_rate(struct block_list *bl, struct status_change *sc, int aspd_rate) { -#if REMODE == 0 +#if isOFF(REMODE) /** * this variable is not used unless in non-RE **/ @@ -4546,7 +4556,7 @@ static short status_calc_aspd_rate(struct block_list *bl, struct status_change * else if(sc->data[SC_MADNESSCANCEL]) aspd_rate -= 200; } -#if REMODE == 0 +#if isOFF(REMODE) /** * in RE they give a fixed boost -- we do so along SERVICE4U in status_base_amotion_pc **/ @@ -6205,7 +6215,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val case SC_EXPLOSIONSPIRITS: val2 = 75 + 25*val1; //Cri bonus break; -#if REMODE == 0 +#if isOFF(REMODE) /** * Only in non-RE it's var is changed **/ diff --git a/src/map/status.h b/src/map/status.h index 03310c3e3..1e72f9b5f 100644 --- a/src/map/status.h +++ b/src/map/status.h @@ -1446,7 +1446,12 @@ struct status_change { unsigned short mp_matk_min, mp_matk_max; //Previous matk min/max for ground spells (Amplify magic power) //int sg_id; //ID of the previous Storm gust that hit you short comet_x, comet_y; // Point where src casted Comet - required to calculate damage from this point +/** + * The Storm Gust counter was dropped in renewal + **/ +#if isOFF(REMODE) unsigned char sg_counter; //Storm gust counter (previous hits from storm gust) +#endif struct status_change_entry *data[SC_MAX]; }; |