summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLance <Lance@54d463be-8e91-2dee-dedb-b68131a5f0ec>2006-03-22 07:24:47 +0000
committerLance <Lance@54d463be-8e91-2dee-dedb-b68131a5f0ec>2006-03-22 07:24:47 +0000
commitcdd9705b238a13fadde43448182e4b0a350bac86 (patch)
tree4a815587161184f88e081f8a38526272efcd9c3c /src
parentc0a08200484033b24b89a7f86a65e987810a1320 (diff)
downloadhercules-cdd9705b238a13fadde43448182e4b0a350bac86.tar.gz
hercules-cdd9705b238a13fadde43448182e4b0a350bac86.tar.bz2
hercules-cdd9705b238a13fadde43448182e4b0a350bac86.tar.xz
hercules-cdd9705b238a13fadde43448182e4b0a350bac86.zip
[reddozen's fix]
- Updated Full Buster's damage, status effects, and skill levels - Bullseye now only uses 1 coin - changed Adjustment's required SP - changed Incerase Accuracy's effect bonuses - changed Magical Bullet's SP cost - changed Piercing Shot's damage and SP - changed Desperado's range, hit count, aftercast delay, and SP - fixed Absorb Spirit Sphere being able to remove coins - changed Acid Demonstration's damage to the new Japanese formula git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@5699 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src')
-rw-r--r--src/map/battle.c11
-rw-r--r--src/map/skill.c52
-rw-r--r--src/map/status.c6
3 files changed, 35 insertions, 34 deletions
diff --git a/src/map/battle.c b/src/map/battle.c
index de9a7d636..fc60a1eba 100644
--- a/src/map/battle.c
+++ b/src/map/battle.c
@@ -1893,19 +1893,19 @@ static struct Damage battle_calc_weapon_attack(
if (skill_lv == 10) skillratio += 80;
break;
case GS_PIERCINGSHOT:
- skillratio += 10*skill_lv;
+ skillratio += 100 + 20*skill_lv;
break;
case GS_RAPIDSHOWER:
skillratio += 10*skill_lv;
break;
case GS_DESPERADO:
- skillratio += 50*skill_lv-50;
+ skillratio += 50*skill_lv+50;
break;
case GS_DUST:
skillratio += 50*skill_lv;
break;
case GS_FULLBUSTER:
- skillratio += 150 + 250*skill_lv;
+ skillratio += 300 + 100*skill_lv;
break;
case GS_SPREADATTACK:
skillratio += 20*skill_lv-20;
@@ -3014,7 +3014,8 @@ struct Damage battle_calc_misc_attack(
case CR_ACIDDEMONSTRATION:
//This equation is not official, but it's the closest to the official one
//that Viccious Pucca and the other folks at the forums could come up with. [Skotlex]
- damage = int_ * (int)(sqrt(100*status_get_vit(target))) / 3;
+ // updated the formula based on a Japanese formula found to be exact [Reddozen]
+ damage = (0.7 * status_get_vit(target) * (int_ * int_)) / (status_get_vit(target) + int_);
if (tsd) damage/=2;
aflag = (aflag&~BF_RANGEMASK)|BF_LONG;
break;
@@ -3668,7 +3669,7 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f
} else { //Non pvp/gvg, check party/guild settings.
if (flag&BCT_PARTY || state&BCT_ENEMY) {
int s_party = status_get_party_id(s_bl);
- if(!is_duel s_party && s_party ==status_get_party_id(t_bl)) // +check for duel [LuzZza]
+ if(!is_duel && s_party && s_party == status_get_party_id(t_bl)) // +check for duel [LuzZza]
state |= BCT_PARTY;
}
if (flag&BCT_GUILD || state&BCT_ENEMY) {
diff --git a/src/map/skill.c b/src/map/skill.c
index 44ac95464..ef835eba4 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -1254,6 +1254,9 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int
case GS_PIERCINGSHOT:
sc_start(bl,SC_BLEEDING,(skilllv*3),skilllv,skill_get_time2(skillid,skilllv));
break;
+ case GS_FULLBUSTER:
+ sc_start(bl,SC_BLIND,(2*skilllv),skilllv,skill_get_time2(skillid,1));
+ break;
case NJ_HYOUSYOURAKU:
sc_start(bl,SC_FREEZE,(10+10*skilllv),skilllv,skill_get_time2(skillid,skilllv));
break;
@@ -3952,29 +3955,29 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
case MO_ABSORBSPIRITS: // ?’D
i = 0;
- if (dstsd && dstsd->spiritball > 0 &&
- ((sd && sd == dstsd) || map_flag_vs(src->m)))
+ if (dstsd && dstsd->spiritball > 0)
{
- i = dstsd->spiritball * 7;
- pc_delspiritball(dstsd,dstsd->spiritball,0);
- } else if (dstmd && //??Û‚ªƒ‚ƒ“ƒXƒ^?‚Ì?ê?‡
- //20%‚ÌŠm—¦‚Å??Û‚ÌLv*2‚ÌSP‚ð‰ñ•œ‚·‚é?B?¬Œ÷‚µ‚½‚Æ‚«‚̓^?ƒQƒbƒg(ƒÐ?„D?)ƒÐ????!!
- !(status_get_mode(bl)&MD_BOSS) && rand() % 100 < 20)
- {
- i = 2 * dstmd->db->lv;
- mob_target(dstmd,src,0);
- }
- if (sd){
- if (i > 0x7FFF)
- i = 0x7FFF;
- if (sd->status.sp + i > sd->status.max_sp)
- i = sd->status.max_sp - sd->status.sp;
- if (i) {
- sd->status.sp += i;
- clif_heal(sd->fd,SP_SP,i);
+ if (((sd && sd == dstsd) || map_flag_vs(src->m)) && ((dstsd->class_&MAPID_BASEMASK)!=MAPID_GUNSLINGER))
+ { // split the if for readability, and included gunslingers in the check so that their coins cannot be removed [Reddozen]
+ i = dstsd->spiritball * 7;
+ pc_delspiritball(dstsd,dstsd->spiritball,0);
+ } else if (dstmd && !(status_get_mode(bl)&MD_BOSS) && rand() % 100 < 20)
+ { // check if target is a monster and not a Boss, for the 20% chance to absorb 2 SP per monster's level [Reddozen]
+ i = 2 * dstmd->db->lv;
+ mob_target(dstmd,src,0);
+ }
+ if (sd){
+ if (i > 0x7FFF)
+ i = 0x7FFF;
+ if (sd->status.sp + i > sd->status.max_sp)
+ i = sd->status.max_sp - sd->status.sp;
+ if (i) {
+ sd->status.sp += i;
+ clif_heal(sd->fd,SP_SP,i);
+ }
}
}
- clif_skill_nodamage(src,bl,skillid,skilllv,0);
+ clif_skill_nodamage(src,bl,skillid,skilllv,0);
break;
case AC_MAKINGARROW: /* –î?ì?¬ */
@@ -8139,6 +8142,7 @@ int skill_check_condition(struct map_session_data *sd,int type)
case GS_TRIPLEACTION:
case GS_MAGICALBULLET:
case GS_CRACKER:
+ case GS_BULLSEYE:
spiritball = 1;
if (skill != GS_MAGICALBULLET)
arrow_flag = 1;
@@ -8148,14 +8152,6 @@ int skill_check_condition(struct map_session_data *sd,int type)
}
break;
- case GS_BULLSEYE:
- spiritball = 5;
- if(sd->equip_index[10] < 0) {
- clif_arrow_fail(sd,0);
- return 0;
- }
- break;
-
case GS_MADNESSCANCEL:
spiritball = 4;
if(sd->spiritball >= 4 && sd->sc.data[SC_ADJUSTMENT].timer!=-1)
diff --git a/src/map/status.c b/src/map/status.c
index d576f29a2..eb7f3eff2 100644
--- a/src/map/status.c
+++ b/src/map/status.c
@@ -1728,6 +1728,8 @@ int status_calc_agi(struct block_list *bl, int agi)
agi -= sc->data[SC_QUAGMIRE].val1*(bl->type==BL_PC?5:10);
if(sc->data[SC_SUITON].timer!=-1)
agi -= sc->data[SC_SUITON].val2;
+ if(sc->data[SC_INCREASING].timer!=-1)
+ agi += 4; // added based on skill updates [Reddozen]
}
return agi;
@@ -1806,6 +1808,8 @@ int status_calc_dex(struct block_list *bl, int dex)
dex >>= 1;
else dex += sc->data[SC_BLESSING].val1;
}
+ if(sc->data[SC_INCREASING].timer!=-1)
+ dex += 4; // added based on skill updates [Reddozen]
}
return dex;
@@ -1965,7 +1969,7 @@ int status_calc_hit(struct block_list *bl, int hit)
if(sc->data[SC_ADJUSTMENT].timer!=-1)
hit += 30;
if(sc->data[SC_INCREASING].timer!=-1)
- hit += 50; // RockmanEXE
+ hit += 20; // RockmanEXE; changed based on updated [Reddozen]
}
return hit;