From 66dd5e112cd6b14d406764e56c9812071825a27b Mon Sep 17 00:00:00 2001 From: skotlex Date: Thu, 25 May 2006 19:15:17 +0000 Subject: - Simplified ASC_BREAKER by making it a BF_WEAPON attack with an additional int-based damage component (which is added right before elemental modifiers). git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@6760 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog-Trunk.txt | 3 +++ src/map/battle.c | 17 ++++++----------- src/map/skill.c | 18 +----------------- 3 files changed, 10 insertions(+), 28 deletions(-) diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index 46332b02e..9a2eed08a 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -4,6 +4,9 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK. 2006/05/25 + * Simplified ASC_BREAKER by making it a BF_WEAPON attack with an additional + int-based damage component (which is added right before elemental + modifiers) as described by AuronX. Pending further refining. [Skotlex] * Resolved differences between Stable/Trunk msg_athena.conf. [Lupus] Fixed atcommand @request MSG numbers accordinly. On adding new MSG strings, plzm reserve them in STABLE msg_athena.conf, too diff --git a/src/map/battle.c b/src/map/battle.c index b1e211189..77e5bc7d7 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -399,8 +399,8 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,int damage,i if(flag&BF_LONG && map_getcell(bl->m, bl->x, bl->y, CELL_CHKPNEUMA) && ((flag&BF_WEAPON && skill_num != NPC_GUIDEDATTACK) || - (flag&BF_MISC && skill_num != PA_PRESSURE) || - (flag&BF_MAGIC && skill_num == ASC_BREAKER))){ // It should block only physical part of Breaker! [Lupus], on the contrary, players all over the boards say it completely blocks Breaker x.x' [Skotlex] + (flag&BF_MISC && skill_num != PA_PRESSURE) + )){ return 0; } @@ -474,8 +474,7 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,int damage,i //Now damage increasing effects if(sc->data[SC_AETERNA].timer!=-1 && skill_num != PA_PRESSURE && skill_num != PF_SOULBURN){ damage<<=1; - if (skill_num != ASC_BREAKER || flag & BF_MAGIC) //Only end it on the second attack of breaker. [Skotlex] - status_change_end( bl,SC_AETERNA,-1 ); + status_change_end( bl,SC_AETERNA,-1 ); } if(sc->data[SC_SPIDERWEB].timer!=-1) // [Celest] @@ -1985,6 +1984,9 @@ static struct Damage battle_calc_weapon_attack( if(skill_num==TF_POISON) ATK_ADD(15*skill_lv); + if(skill_num==ASC_BREAKER) //Breaker's int-based damage. + ATK_ADD(rand()%500 + 500 + skill_lv * status_get_int(src) * 5); + if ((sd && (skill_num || !battle_config.pc_attack_attr_none)) || (md && (skill_num || !battle_config.mob_attack_attr_none)) || (pd && (skill_num || !battle_config.pet_attack_attr_none))) @@ -2373,9 +2375,6 @@ struct Damage battle_calc_magic_attack( else if (s_ele == -2) //Use status element s_ele = status_get_attack_sc_element(src); - if (skill_num == ASC_BREAKER) // Soul Breaker's magical part is neutral, although pl=-1 for the physical part to take weapon element - s_ele = 0; - //Set miscellaneous data that needs be filled if(sd) { sd->state.arrow_atk = 0; @@ -2422,7 +2421,6 @@ struct Damage battle_calc_magic_attack( flag.elefix = 0; break; case PR_ASPERSIO: - case ASC_BREAKER: flag.imdef = 1; case PF_SOULBURN: //Does not ignores mdef flag.elefix = 0; @@ -2486,9 +2484,6 @@ struct Damage battle_calc_magic_attack( } else ad.damage = tsd->status.sp * 2; break; - case ASC_BREAKER: - ad.damage = rand()%500 + 500 + skill_lv * status_get_int(src) * 5; - break; case HW_GRAVITATION: ad.damage = 200+200*skill_lv; break; diff --git a/src/map/skill.c b/src/map/skill.c index 7c6af9178..689844657 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -1704,7 +1704,6 @@ int skill_attack( int attack_type, struct block_list* src, struct block_list *ds struct status_change *sc; struct map_session_data *sd=NULL, *tsd=NULL; int type,lv,damage,rdamage=0; - static int tmpdmg = 0; if(skillid > 0 && skilllv <= 0) return 0; @@ -1944,17 +1943,6 @@ int skill_attack( int attack_type, struct block_list* src, struct block_list *ds dmg.dmotion = clif_skill_damage(dsrc,bl,tick,dmg.amotion,dmg.dmotion, damage, dmg.div_, CR_HOLYCROSS, -1, 5); break; - case ASC_BREAKER: // [celest] - if (attack_type&BF_WEAPON) { // the 1st attack won't really deal any damage - tmpdmg = damage; // store the temporary weapon damage - return 0; //Wait for the second iteration to do all the work below. - } - if (tmpdmg == 0 || damage == 0) // if one or both attack(s) missed, display a 'miss' - clif_skill_damage(dsrc, bl, tick, dmg.amotion, dmg.dmotion, 0, dmg.div_, skillid, skilllv, type); - damage += tmpdmg; // add weapon and magic damage - tmpdmg = 0; // clear the temporary weapon damage - dmg.dmotion = clif_skill_damage(dsrc, bl, tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skillid, skilllv, type); - break; case NPC_SELFDESTRUCTION: if(src->type==BL_PC) dmg.blewcount = 10; @@ -2546,6 +2534,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl,int s case HT_POWER: case TK_DOWNKICK: case TK_COUNTER: + case ASC_BREAKER: skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag); break; @@ -2574,11 +2563,6 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl,int s if (unit_movepos(src, bl->x, bl->y, 0, 0)) clif_slide(src,bl->x,bl->y); break; - case ASC_BREAKER: /* ソウルブレ?カ? */ // [DracoRPG] - // Separate weapon and magic attacks - skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag); - skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); - break; case SN_SHARPSHOOTING: /* シャ?プシュ?ティング */ // Does it stop if touch an obstacle? it shouldn't shoot trough walls -- cgit v1.2.3-70-g09d2