Fixes Bowling Bash behavior (#5598)

* Fixes #5489.
* Removes the gutterline feature from Bowling Bash in renewal mode.
* Skill will now behave as a normal 5x5 AoE.
* Fixes knockback getting removed during battle calculation.
Thanks to @humanwizzard and @Daegaladh!
This commit is contained in:
Aleos 2021-01-07 08:44:33 -05:00 committed by GitHub
parent f57b037b83
commit 0ea169086e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 45 additions and 10 deletions

View File

@ -303,7 +303,7 @@ dancing_weaponswitch_fix: yes
// 3: 1+2
skill_trap_type: 0
// 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)

View File

@ -2279,8 +2279,6 @@ Body:
MaxLevel: 10
Type: Weapon
TargetType: Attack
DamageFlags:
Splash: true
Flags:
TargetTrap: true
Range: -2
@ -2288,7 +2286,27 @@ Body:
HitCount: 2
Element: Weapon
SplashArea: 2
Knockback: 1
Knockback:
- Level: 1
Amount: 1
- Level: 2
Amount: 1
- Level: 3
Amount: 2
- Level: 4
Amount: 2
- Level: 5
Amount: 3
- Level: 6
Amount: 3
- Level: 7
Amount: 4
- Level: 8
Amount: 4
- Level: 9
Amount: 5
- Level: 10
Amount: 5
CopyFlags:
Skill:
Plagiarism: true

View File

@ -5668,17 +5668,24 @@ static struct Damage initialize_weapon_data(struct block_list *src, struct block
wd.amotion = sstatus->amotion;
//Fall through
case KN_SPEARSTAB:
#ifndef RENEWAL
case KN_BOWLINGBASH:
#ifdef RENEWAL
if (skill_id == KN_BOWLINGBASH && sd && sd->status.weapon == W_2HSWORD)
wd.div_ = cap_value(wd.miscflag, 2, 4);
#endif
case MS_BOWLINGBASH:
case MO_BALKYOUNG:
case TK_TURNKICK:
wd.blewcount = 0;
break;
#ifdef RENEWAL
case KN_BOWLINGBASH:
if (sd && sd->status.weapon == W_2HSWORD) {
if (wd.miscflag >= 2 && wd.miscflag <= 3)
wd.div_ = 3;
else if (wd.miscflag >= 4)
wd.div_ = 4;
}
break;
#endif
case KN_AUTOCOUNTER:
wd.flag = (wd.flag&~BF_SKILLMASK)|BF_NORMAL;
break;

View File

@ -5278,7 +5278,19 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
skill_attack(skill_get_type(skill_id), src, src, bl, skill_id, skill_lv, tick, flag);
break;
#ifdef RENEWAL
case KN_BOWLINGBASH:
if (flag & 1) {
skill_attack(skill_get_type(skill_id), src, src, bl, skill_id, skill_lv, tick, (skill_area_temp[0]) > 0 ? SD_ANIMATION | skill_area_temp[0] : skill_area_temp[0]);
skill_blown(src, bl, skill_get_blewcount(skill_id, skill_lv), -1, BLOWN_NONE);
} else {
skill_area_temp[0] = map_foreachinallrange(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);
map_foreachinrange(skill_area_sub, bl, skill_get_splash(skill_id, skill_lv), BL_CHAR|BL_SKILL, src, skill_id, skill_lv, tick, flag | BCT_ENEMY | SD_SPLASH | 1, skill_castend_damage_id);
}
break;
#else
case KN_BOWLINGBASH:
#endif
case MS_BOWLINGBASH:
{
int min_x,max_x,min_y,max_y,i,c,dir,tx,ty;
@ -5350,10 +5362,8 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
break;
}
}
#ifndef RENEWAL
// Original hit or chain hit depending on flag
skill_attack(BF_WEAPON,src,src,bl,skill_id,skill_lv,tick,(flag&0xFFF)>0?SD_ANIMATION:0);
#endif
}
break;