Skip to content

Commit

Permalink
Rebalance of KN_BOWLINGBASH (Bowling Bash)
Browse files Browse the repository at this point in the history
- Area of effect: 3x3 -> 5x5 centered on target
- Number of hits changed
  - 2-handed weapons: number of hits depend on number of targets
    - 1 target: 2 hits
    - 2 / 3 targets: 3 hits
    - 4 or more targets: 4 hits
  - other weapons: 2 hits
- Variable cast time removed
- Knockback increased: 1 cell -> 5 cells
- 1 second cooldown added
- After using the skill, caster can't switch weapons for 1 second
- Gutterline feature removed

From massive skills rebalance (1st/2nd/transclass) (2018.10.31)
  • Loading branch information
guilherme-gm committed Apr 7, 2024
1 parent 35b3a92 commit c3a2e51
Show file tree
Hide file tree
Showing 9 changed files with 65 additions and 6 deletions.
2 changes: 1 addition & 1 deletion conf/map/battle/skill.conf
Original file line number Diff line number Diff line change
Expand Up @@ -325,7 +325,7 @@ trap_reflect: true
// Note: If your MVPs are too tough, reduce it to 10.
mob_max_skilllvl: 100

// Area of Bowling Bash chain reaction
// Area of Bowling Bash chain reaction (Pre-renewal only)
// 0: Use official gutter line system
// 1: Gutter line system without demi gutter bug
// 2-20: Area around caster (2 = 5x5, 3 = 7x7, 4 = 9x9, ..., 20 = 41x41)
Expand Down
2 changes: 2 additions & 0 deletions db/constants.conf
Original file line number Diff line number Diff line change
Expand Up @@ -1310,6 +1310,8 @@ constants_db: {

SC_FIRE_EXPANSION_TEAR_GAS_SOB: 718

SC_NO_SWITCH_WEAPON: 719

comment__: "Emotes"
e_gasp: 0
e_what: 1
Expand Down
10 changes: 10 additions & 0 deletions db/pre-re/sc_config.conf
Original file line number Diff line number Diff line change
Expand Up @@ -6408,3 +6408,13 @@ SC_ACTIVE_MONSTER_TRANSFORM: {
SC__FEINTBOMB_MASTER: {
Skill: "SC_FEINTBOMB"
}
SC_NO_SWITCH_WEAPON: {
Flags: {
NoSave: true
NoDispelReset: true
NoBBReset: true
NoClearanceReset: true
Buff: true
}
Icon: "SI_NOEQUIPWEAPON"
}
10 changes: 10 additions & 0 deletions db/re/sc_config.conf
Original file line number Diff line number Diff line change
Expand Up @@ -6414,3 +6414,13 @@ SC_ACTIVE_MONSTER_TRANSFORM: {
SC__FEINTBOMB_MASTER: {
Skill: "SC_FEINTBOMB"
}
SC_NO_SWITCH_WEAPON: {
Flags: {
NoSave: true
NoDispelReset: true
NoBBReset: true
NoClearanceReset: true
Buff: true
}
Icon: "SI_NOEQUIPWEAPON"
}
9 changes: 5 additions & 4 deletions db/re/skill_db.conf
Original file line number Diff line number Diff line change
Expand Up @@ -2317,7 +2317,7 @@ skill_db: (
Description: "Bowling Bash"
MaxLevel: 10
Range: -2
Hit: "BDT_SKILL"
Hit: "BDT_MULTIHIT"
SkillType: {
Enemy: true
}
Expand All @@ -2330,9 +2330,10 @@ skill_db: (
DamageType: {
SplashArea: true
}
SplashRange: 1
KnockBackTiles: 1
CastTime: 350
SplashRange: 2
KnockBackTiles: 5
SkillData1: 1_000 // weapon change block duration
CoolDown: 1_000
FixedCastTime: 350
Requirements: {
SPCost: {
Expand Down
16 changes: 16 additions & 0 deletions src/map/battle.c
Original file line number Diff line number Diff line change
Expand Up @@ -4723,13 +4723,29 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src, struct bl

case GS_GROUNDDRIFT:
case KN_SPEARSTAB:
#ifndef RENEWAL
case KN_BOWLINGBASH:
#endif
case MS_BOWLINGBASH:
case MO_BALKYOUNG:
case TK_TURNKICK:
wd.blewcount=0;
break;

#ifdef RENEWAL
case KN_BOWLINGBASH:
wd.div_ = 2;

// wflag stores the number of affected targets
if (sd != NULL && sd->weapontype == W_2HSWORD) {
if (wflag >= 2 && wflag < 4)
wd.div_ = 3;
else if (wflag >= 4)
wd.div_ = 4;
}
break;
#endif

case KN_AUTOCOUNTER:
wd.flag=(wd.flag&~BF_SKILLMASK)|BF_NORMAL;
break;
Expand Down
4 changes: 3 additions & 1 deletion src/map/pc.c
Original file line number Diff line number Diff line change
Expand Up @@ -1129,8 +1129,10 @@ static int pc_isequip(struct map_session_data *sd, int n)
}

if (sd->sc.count != 0) {
if ((item->equip & EQP_ARMS) != 0 && item->type == IT_WEAPON && sd->sc.data[SC_NOEQUIPWEAPON] != NULL) // Also works with left-hand weapons. [DracoRPG]
if ((item->equip & EQP_ARMS) != 0 && item->type == IT_WEAPON
&& (sd->sc.data[SC_NOEQUIPWEAPON] != NULL || sd->sc.data[SC_NO_SWITCH_WEAPON] != NULL)) { // Also works with left-hand weapons. [DracoRPG]
return 0;
}

if ((item->equip & EQP_SHIELD) != 0 && item->type == IT_ARMOR && sd->sc.data[SC_NOEQUIPSHIELD] != NULL)
return 0;
Expand Down
16 changes: 16 additions & 0 deletions src/map/skill.c
Original file line number Diff line number Diff line change
Expand Up @@ -5281,7 +5281,23 @@ static int skill_castend_damage_id(struct block_list *src, struct block_list *bl
skill->attack(skill->get_type(skill_id, skill_lv), src, src, bl, skill_id, skill_lv, tick, flag);
break;

#ifdef RENEWAL
case KN_BOWLINGBASH:
// skill->area_temp[0] holds the number of targets affected
if (flag & 1) {
int sflag = skill->area_temp[0] | SD_ANIMATION;
skill->attack(skill->get_type(skill_id, skill_lv), src, src, bl, skill_id, skill_lv, tick, sflag);
} else {
sc_start(src, src, SC_NO_SWITCH_WEAPON, 100, 1, skill->get_time(skill_id, skill_lv), skill_id);
skill->area_temp[0] = map->foreachinrange(skill->area_sub, bl, skill->get_splash(skill_id, skill_lv), BL_CHAR, src, skill_id, skill_lv, tick, BCT_ENEMY, skill->area_sub_count);

// recursive invocation of skill->castend_damage_id() with flag|1
map->foreachinrange(skill->area_sub, bl, skill->get_splash(skill_id, skill_lv), skill->splash_target(src), src, skill_id, skill_lv, tick, flag | BCT_ENEMY | SD_SPLASH | 1, skill->castend_damage_id);
}
break;
#else // !RENEWAL
case KN_BOWLINGBASH:
#endif
case MS_BOWLINGBASH:
{
int min_x,max_x,min_y,max_y,i,c,dir,tx,ty;
Expand Down
2 changes: 2 additions & 0 deletions src/map/status.h
Original file line number Diff line number Diff line change
Expand Up @@ -914,6 +914,8 @@ typedef enum sc_type {

SC_FIRE_EXPANSION_TEAR_GAS_SOB,

SC_NO_SWITCH_WEAPON,

#ifndef SC_MAX
SC_MAX, //Automatically updated max, used in for's to check we are within bounds.
#endif
Expand Down

0 comments on commit c3a2e51

Please sign in to comment.