diff --git a/db/re/sc_config.conf b/db/re/sc_config.conf index 09b756441cd..9a083bf1920 100644 --- a/db/re/sc_config.conf +++ b/db/re/sc_config.conf @@ -145,6 +145,8 @@ SC_TWOHANDQUICKEN: { } CalcFlags: { Aspd: true + Cri: true + Hit: true } Icon: "SI_TWOHANDQUICKEN" Skill: "KN_TWOHANDQUICKEN" @@ -200,6 +202,7 @@ SC_ANGELUS: { } CalcFlags: { Def2: true + Maxhp: true } Icon: "SI_ANGELUS" Skill: "AL_ANGELUS" @@ -215,6 +218,7 @@ SC_BLESSING: { Str: true Int: true Dex: true + Hit: true } Icon: "SI_BLESSING" Skill: "AL_BLESSING" @@ -228,6 +232,7 @@ SC_INC_AGI: { CalcFlags: { Agi: true Speed: true + Aspd: true } Icon: "SI_INC_AGI" Skill: "AL_INCAGI" @@ -344,6 +349,7 @@ SC_ADRENALINE: { } CalcFlags: { Aspd: true + Hit: true } Icon: "SI_ADRENALINE" Skill: "BS_ADRENALINE" @@ -390,6 +396,7 @@ SC_SHOUT: { } CalcFlags: { Str: true + Batk: true } Icon: "SI_SHOUT" Skill: "MC_LOUD" @@ -838,6 +845,9 @@ SC_ASSUMPTIO: { Buff: true NoMagicBlocked: true } + CalcFlags: { + Def2: true + } Icon: "SI_ASSUMPTIO" Skill: "HP_ASSUMPTIO" } diff --git a/db/re/size_fix.txt b/db/re/size_fix.txt index e8e3774d584..94a285a12a8 100644 --- a/db/re/size_fix.txt +++ b/db/re/size_fix.txt @@ -3,5 +3,5 @@ // Columns: Weapon type, Rows: Target size. // Unarmed, Knife, 1H Sword, 2H Sword, 1H Spear, 2H Spears, 1H Axe, 2H Axe, Mace, 2H Mace, Staff, Bow, Knuckle, Musical Instrument, Whip, Book, Katar, Revolver, Rifle, Shotgun, Gatling Gun, Grenade Launcher, Fuuma Shuriken, 2H Staff 100,100, 75, 75, 75, 75, 50, 50, 75, 75,100,100,100, 75, 75,100, 75,100,100,100,100,100, 75,100 // Size: Small -100, 75,100, 75, 75, 75, 75, 75,100,100,100,100, 75,100,100,100,100,100,100,100,100,100, 75,100 // Size: Medium -100, 50, 75,100,100,100,100,100,100,100,100, 75, 50, 75, 50, 50, 75,100,100,100,100,100,100,100 // Size: Large +100, 75,100, 75, 75, 75, 75, 75,100,100,100,100,100,100,100,100,100,100,100,100,100,100, 75,100 // Size: Medium +100, 50, 75,100,100,100,100,100,100,100,100, 75, 75, 75, 50, 50, 75,100,100,100,100,100,100,100 // Size: Large diff --git a/db/re/skill_db.conf b/db/re/skill_db.conf index 78df2c66b33..48964134f98 100644 --- a/db/re/skill_db.conf +++ b/db/re/skill_db.conf @@ -424,7 +424,7 @@ skill_db: ( } SplashRange: 2 KnockBackTiles: 2 - AfterCastActDelay: 2000 + AfterCastActDelay: 500 CoolDown: 2000 SkillData2: 10000 FixedCastTime: 0 @@ -681,18 +681,7 @@ skill_db: ( } InterruptCast: true CastTime: 400 - AfterCastActDelay: { - Lv1: 1200 - Lv2: 1200 - Lv3: 1600 - Lv4: 1600 - Lv5: 2000 - Lv6: 2000 - Lv7: 2400 - Lv8: 2400 - Lv9: 2800 - Lv10: 2500 - } + AfterCastActDelay: 1400 FixedCastTime: 100 Requirements: { SPCost: { @@ -740,40 +729,29 @@ skill_db: ( } InterruptCast: true CastTime: { - Lv1: 640 - Lv2: 960 - Lv3: 1280 - Lv4: 1600 - Lv5: 1920 - Lv6: 2100 - Lv7: 1560 - Lv8: 2880 - Lv9: 3200 - Lv10: 3520 - } - AfterCastActDelay: { - Lv1: 1000 - Lv2: 1200 - Lv3: 1400 - Lv4: 1600 - Lv5: 1800 + Lv1: 500 + Lv2: 800 + Lv3: 1100 + Lv4: 1400 + Lv5: 1700 Lv6: 2000 - Lv7: 2200 - Lv8: 2400 - Lv9: 2600 - Lv10: 2800 + Lv7: 2300 + Lv8: 2600 + Lv9: 2900 + Lv10: 3200 } + AfterCastActDelay: 1400 FixedCastTime: { - Lv1: 160 - Lv2: 240 - Lv3: 320 - Lv4: 400 - Lv5: 480 - Lv6: 700 - Lv7: 640 - Lv8: 720 - Lv9: 800 - Lv10: 880 + Lv1: 300 + Lv2: 400 + Lv3: 500 + Lv4: 600 + Lv5: 700 + Lv6: 800 + Lv7: 900 + Lv8: 1000 + Lv9: 1100 + Lv10: 1200 } Requirements: { SPCost: { @@ -810,7 +788,7 @@ skill_db: ( Element: "Ele_Water" InterruptCast: true CastTime: 640 - AfterCastActDelay: 1500 + AfterCastActDelay: 500 SkillData2: { Lv1: 3000 Lv2: 6000 @@ -903,42 +881,9 @@ skill_db: ( } SplashRange: 2 InterruptCast: true - CastTime: { - Lv1: 1280 - Lv2: 1280 - Lv3: 1280 - Lv4: 1280 - Lv5: 1280 - Lv6: 800 - Lv7: 800 - Lv8: 800 - Lv9: 800 - Lv10: 800 - } - AfterCastActDelay: { - Lv1: 1500 - Lv2: 1500 - Lv3: 1500 - Lv4: 1500 - Lv5: 1500 - Lv6: 1000 - Lv7: 1000 - Lv8: 1000 - Lv9: 1000 - Lv10: 1000 - } - FixedCastTime: { - Lv1: 320 - Lv2: 320 - Lv3: 320 - Lv4: 320 - Lv5: 320 - Lv6: 200 - Lv7: 200 - Lv8: 200 - Lv9: 200 - Lv10: 200 - } + CastTime: 800 + AfterCastActDelay: 700 + FixedCastTime: 200 Requirements: { SPCost: 25 } @@ -1043,40 +988,29 @@ skill_db: ( } InterruptCast: true CastTime: { - Lv1: 640 - Lv2: 960 - Lv3: 1280 - Lv4: 1600 - Lv5: 1920 - Lv6: 2100 - Lv7: 1560 - Lv8: 2880 - Lv9: 3200 - Lv10: 3520 - } - AfterCastActDelay: { - Lv1: 1000 - Lv2: 1200 - Lv3: 1400 - Lv4: 1600 - Lv5: 1800 + Lv1: 500 + Lv2: 800 + Lv3: 1100 + Lv4: 1400 + Lv5: 1700 Lv6: 2000 - Lv7: 2200 - Lv8: 2400 - Lv9: 2600 - Lv10: 2800 + Lv7: 2300 + Lv8: 2600 + Lv9: 2900 + Lv10: 3200 } + AfterCastActDelay: 1400 FixedCastTime: { - Lv1: 160 - Lv2: 240 - Lv3: 320 - Lv4: 400 - Lv5: 480 - Lv6: 700 - Lv7: 640 - Lv8: 720 - Lv9: 800 - Lv10: 880 + Lv1: 300 + Lv2: 400 + Lv3: 500 + Lv4: 600 + Lv5: 700 + Lv6: 800 + Lv7: 900 + Lv8: 1000 + Lv9: 1100 + Lv10: 1200 } Requirements: { SPCost: { @@ -1124,40 +1058,29 @@ skill_db: ( } InterruptCast: true CastTime: { - Lv1: 640 - Lv2: 960 - Lv3: 1280 - Lv4: 1600 - Lv5: 1920 - Lv6: 2100 - Lv7: 1560 - Lv8: 2880 - Lv9: 3200 - Lv10: 3520 - } - AfterCastActDelay: { - Lv1: 1000 - Lv2: 1200 - Lv3: 1400 - Lv4: 1600 - Lv5: 1800 + Lv1: 500 + Lv2: 800 + Lv3: 1100 + Lv4: 1400 + Lv5: 1700 Lv6: 2000 - Lv7: 2200 - Lv8: 2400 - Lv9: 2600 - Lv10: 2800 + Lv7: 2300 + Lv8: 2600 + Lv9: 2900 + Lv10: 3200 } + AfterCastActDelay: 1400 FixedCastTime: { - Lv1: 160 - Lv2: 240 - Lv3: 320 - Lv4: 400 - Lv5: 480 - Lv6: 700 - Lv7: 640 - Lv8: 720 - Lv9: 800 - Lv10: 880 + Lv1: 300 + Lv2: 400 + Lv3: 500 + Lv4: 600 + Lv5: 700 + Lv6: 800 + Lv7: 900 + Lv8: 1000 + Lv9: 1100 + Lv10: 1200 } Requirements: { SPCost: { @@ -1205,16 +1128,16 @@ skill_db: ( } InterruptCast: true CastTime: { - Lv1: 640 - Lv2: 1280 - Lv3: 1920 - Lv4: 2560 - Lv5: 3200 - Lv6: 3840 - Lv7: 4480 - Lv8: 5120 - Lv9: 5760 - Lv10: 6400 + Lv1: 2700 + Lv2: 2900 + Lv3: 3100 + Lv4: 3300 + Lv5: 3500 + Lv6: 3700 + Lv7: 3900 + Lv8: 4100 + Lv9: 4300 + Lv10: 4500 } AfterCastActDelay: { Lv1: 2000 @@ -1229,18 +1152,7 @@ skill_db: ( Lv10: 2000 } SkillData1: 500 - FixedCastTime: { - Lv1: 160 - Lv2: 320 - Lv3: 480 - Lv4: 640 - Lv5: 800 - Lv6: 960 - Lv7: 1120 - Lv8: 1280 - Lv9: 1440 - Lv10: 1600 - } + FixedCastTime: 1500 Requirements: { SPCost: { Lv1: 29 @@ -2219,20 +2131,22 @@ skill_db: ( Description: "Brandish Spear" MaxLevel: 10 Range: -2 - Hit: "BDT_SKILL" + Hit: "BDT_MULTIHIT" SkillType: { Enemy: true } AttackType: "Weapon" Element: "Ele_Weapon" + NumberOfHits: -3 DamageType: { NoDamage: true } KnockBackTiles: 3 - CastTime: 350 FixedCastTime: 350 + AfterCastActDelay: 500 + CoolDown: 1000 Requirements: { - SPCost: 12 + SPCost: 24 WeaponTypes: { 1HSpears: true 2HSpears: true @@ -2404,7 +2318,8 @@ skill_db: ( Description: "Bowling Bash" MaxLevel: 10 Range: -2 - Hit: "BDT_SKILL" + Hit: "BDT_MULTIHIT" + NumberOfHits: 2 SkillType: { Enemy: true } @@ -2417,9 +2332,9 @@ skill_db: ( DamageType: { SplashArea: true } - SplashRange: 1 - KnockBackTiles: 1 - CastTime: 350 + SplashRange: 2 + KnockBackTiles: 5 + CoolDown: 1000 FixedCastTime: 350 Requirements: { SPCost: { @@ -2466,10 +2381,9 @@ skill_db: ( StatusChange: "SC_IMPOSITIO" Description: "Impositio Manus" MaxLevel: 5 - Range: 9 Hit: "BDT_SKILL" SkillType: { - Friend: true + Self: true } SkillInfo: { BlockedByStasis: true @@ -2477,23 +2391,27 @@ skill_db: ( AttackType: "Magic" DamageType: { NoDamage: true + SplashArea: true } + SplashRange: 18 InterruptCast: true - AfterCastActDelay: 3000 - SkillData1: 60000 - FixedCastTime: 0 + CastTime: 1000 + AfterCastActDelay: 1000 + CoolDown: 30000 + SkillData1: 120000 + FixedCastTime: 500 Requirements: { SPCost: { - Lv1: 13 - Lv2: 16 - Lv3: 19 - Lv4: 22 - Lv5: 25 - Lv6: 28 - Lv7: 31 - Lv8: 34 - Lv9: 37 - Lv10: 40 + Lv1: 59 + Lv2: 62 + Lv3: 65 + Lv4: 68 + Lv5: 71 + Lv6: 74 + Lv7: 77 + Lv8: 80 + Lv9: 83 + Lv10: 86 } } }, @@ -2503,35 +2421,35 @@ skill_db: ( StatusChange: "SC_SUFFRAGIUM" Description: "Suffragium" MaxLevel: 3 - Range: 9 Hit: "BDT_SKILL" SkillType: { - Friend: true - } - SkillInfo: { - NoCastSelf: true + Self: true } AttackType: "Magic" DamageType: { NoDamage: true + SplashArea: true } + SplashRange: 18 InterruptCast: true - AfterCastActDelay: 2000 - SkillData1: { - Lv1: 30000 - Lv2: 20000 - Lv3: 10000 - Lv4: 1 - Lv5: 1 - Lv6: 1 - Lv7: 1 - Lv8: 1 - Lv9: 1 - Lv10: 1 - } - FixedCastTime: 0 + CastTime: 1000 + AfterCastActDelay: 1000 + CoolDown: 30000 + SkillData1: 60000 + FixedCastTime: 500 Requirements: { - SPCost: 8 + SPCost: { + Lv1: 45 + Lv2: 57 + Lv3: 69 + Lv4: 81 + Lv5: 93 + Lv6: 115 + Lv7: 127 + Lv8: 139 + Lv9: 151 + Lv10: 163 + } } }, { @@ -3010,8 +2928,9 @@ skill_db: ( Lv10: 10 } InterruptCast: true - CastTime: 12000 - AfterCastActDelay: 4000 + CastTime: 4000 + CoolDown: 6000 + AfterCastActDelay: 1000 SkillData1: { Lv1: 5000 Lv2: 6000 @@ -3024,7 +2943,7 @@ skill_db: ( Lv9: 13000 Lv10: 14000 } - FixedCastTime: 3000 + FixedCastTime: 1000 Requirements: { SPCost: { Lv1: 40 @@ -3233,22 +3152,23 @@ skill_db: ( Lv10: 5 } InterruptCast: true - CastTime: 9600 - AfterCastActDelay: { - Lv1: 2000 + CastTime: 6300 + AfterCastActDelay: 1000 + CoolDown: { + Lv1: 2500 Lv2: 3000 - Lv3: 3000 + Lv3: 3500 Lv4: 4000 - Lv5: 4000 + Lv5: 4500 Lv6: 5000 - Lv7: 5000 + Lv7: 5500 Lv8: 6000 - Lv9: 6000 + Lv9: 6500 Lv10: 7000 } SkillData1: 500 SkillData2: 5000 - FixedCastTime: 2400 + FixedCastTime: 1500 Requirements: { SPCost: { Lv1: 20 @@ -3316,29 +3236,18 @@ skill_db: ( Lv10: 7 } CastTime: { - Lv1: 1600 - Lv2: 1920 - Lv3: 2240 - Lv4: 2560 - Lv5: 2880 - Lv6: 3200 - Lv7: 3520 - Lv8: 3840 - Lv9: 4160 - Lv10: 4480 - } - FixedCastTime: { - Lv1: 400 - Lv2: 480 - Lv3: 560 - Lv4: 640 - Lv5: 720 - Lv6: 800 - Lv7: 880 - Lv8: 960 - Lv9: 1040 - Lv10: 1120 + Lv1: 2000 + Lv2: 2200 + Lv3: 2400 + Lv4: 2600 + Lv5: 2800 + Lv6: 3000 + Lv7: 3200 + Lv8: 3400 + Lv9: 3600 + Lv10: 3800 } + FixedCastTime: 500 Requirements: { SPCost: { Lv1: 20 @@ -3372,46 +3281,25 @@ skill_db: ( } AttackType: "Magic" Element: "Ele_Wind" - NumberOfHits: -10 + NumberOfHits: -20 InterruptCast: true CastTime: { - Lv1: 9600 - Lv2: 9280 - Lv3: 8960 - Lv4: 8640 - Lv5: 8320 - Lv6: 8000 - Lv7: 7680 - Lv8: 7360 - Lv9: 7040 - Lv10: 6720 - } - AfterCastActDelay: 5000 - SkillData1: 4000 - SkillData2: { - Lv1: 5500 - Lv2: 6000 - Lv3: 6500 - Lv4: 7000 - Lv5: 7500 - Lv6: 8000 - Lv7: 8500 - Lv8: 9000 - Lv9: 9500 - Lv10: 10000 - } - FixedCastTime: { - Lv1: 2400 - Lv2: 2320 - Lv3: 2240 - Lv4: 2160 - Lv5: 2080 - Lv6: 2000 - Lv7: 1920 - Lv8: 1840 - Lv9: 1760 - Lv10: 1680 + Lv1: 6300 + Lv2: 6100 + Lv3: 5900 + Lv4: 5700 + Lv5: 5500 + Lv6: 5300 + Lv7: 5100 + Lv8: 4900 + Lv9: 4700 + Lv10: 4500 } + AfterCastActDelay: 1000 + CoolDown: 5000 + SkillData1: 1000 + SkillData2: 18000 //copied that from rathena, I assume this are Duration1 and Duration2 + FixedCastTime: 1500 Requirements: { SPCost: { Lv1: 60 @@ -3645,32 +3533,22 @@ skill_db: ( InterruptCast: true KnockBackTiles: 2 CastTime: { - Lv1: 3840 - Lv2: 4480 - Lv3: 5120 - Lv4: 5760 - Lv5: 6400 - Lv6: 7040 - Lv7: 7680 - Lv8: 8320 - Lv9: 8960 - Lv10: 9600 + Lv1: 4500 + Lv2: 4700 + Lv3: 4900 + Lv4: 5100 + Lv5: 5300 + Lv6: 5500 + Lv7: 5700 + Lv8: 5900 + Lv9: 6100 + Lv10: 6300 } - AfterCastActDelay: 5000 + AfterCastActDelay: 1000 + CoolDown: 6000 SkillData1: 4600 SkillData2: 12000 - FixedCastTime: { - Lv1: 960 - Lv2: 1120 - Lv3: 1280 - Lv4: 1440 - Lv5: 1600 - Lv6: 1760 - Lv7: 1920 - Lv8: 2080 - Lv9: 2240 - Lv10: 2400 - } + FixedCastTime: 1500 Requirements: { SPCost: 78 } @@ -3717,40 +3595,40 @@ skill_db: ( } InterruptCast: true CastTime: { - Lv1: 448 - Lv2: 896 - Lv3: 1344 - Lv4: 1792 - Lv5: 2240 - Lv6: 2240 - Lv7: 2240 - Lv8: 2240 - Lv9: 2240 - Lv10: 2240 + Lv1: 1200 + Lv2: 1700 + Lv3: 2200 + Lv4: 2700 + Lv5: 3200 + Lv6: 3700 + Lv7: 4200 + Lv8: 4700 + Lv9: 5200 + Lv10: 5700 } AfterCastActDelay: { Lv1: 1000 - Lv2: 1200 - Lv3: 1400 - Lv4: 1600 - Lv5: 1800 - Lv6: 2000 - Lv7: 2200 - Lv8: 2400 - Lv9: 2600 - Lv10: 2800 + Lv2: 1100 + Lv3: 1200 + Lv4: 1300 + Lv5: 1400 + Lv6: 1500 + Lv7: 1600 + Lv8: 1700 + Lv9: 1800 + Lv10: 1900 } FixedCastTime: { - Lv1: 112 - Lv2: 224 - Lv3: 336 - Lv4: 448 - Lv5: 560 - Lv6: 560 - Lv7: 560 - Lv8: 560 - Lv9: 560 - Lv10: 560 + Lv1: 400 + Lv2: 600 + Lv3: 800 + Lv4: 1000 + Lv5: 1200 + Lv6: 1400 + Lv7: 1600 + Lv8: 1800 + Lv9: 2000 + Lv10: 2200 } Requirements: { SPCost: { @@ -3798,43 +3676,33 @@ skill_db: ( } InterruptCast: true CastTime: { - Lv1: 640 - Lv2: 1280 - Lv3: 1920 - Lv4: 2560 - Lv5: 3200 - Lv6: 3200 - Lv7: 3200 - Lv8: 3200 - Lv9: 3200 - Lv10: 3200 + Lv1: 1100 + Lv2: 1300 + Lv3: 1500 + Lv4: 1700 + Lv5: 1900 + Lv6: 2100 + Lv7: 2300 + Lv8: 2500 + Lv9: 2700 + Lv10: 2900 } - AfterCastActDelay: 1000 + AfterCastActDelay: 500 SkillData1: 500 - FixedCastTime: { - Lv1: 160 - Lv2: 320 - Lv3: 480 - Lv4: 640 - Lv5: 800 - Lv6: 800 - Lv7: 800 - Lv8: 800 - Lv9: 800 - Lv10: 800 - } + FixedCastTime: 800 + CoolDown: 1000 Requirements: { SPCost: { - Lv1: 28 - Lv2: 32 - Lv3: 36 - Lv4: 40 - Lv5: 44 - Lv6: 48 - Lv7: 52 - Lv8: 56 - Lv9: 60 - Lv10: 64 + Lv1: 26 + Lv2: 28 + Lv3: 30 + Lv4: 32 + Lv5: 34 + Lv6: 36 + Lv7: 38 + Lv8: 40 + Lv9: 42 + Lv10: 44 } } Unit: { @@ -4385,7 +4253,8 @@ skill_db: ( Lv10: 1 } SkillData2: 5000 - FixedCastTime: 1000 + CastTime: 500 + FixedCastTime: 300 Requirements: { SPCost: 10 Items: { @@ -4742,7 +4611,8 @@ skill_db: ( Lv9: 1 Lv10: 1 } - FixedCastTime: 1000 + CastTime: 500 + FixedCastTime: 300 Requirements: { SPCost: 10 Items: { @@ -4797,7 +4667,8 @@ skill_db: ( Lv9: 180000 Lv10: 200000 } - FixedCastTime: 1000 + CastTime: 500 + FixedCastTime: 300 Requirements: { SPCost: 15 Items: { @@ -5076,9 +4947,10 @@ skill_db: ( AttackType: "Weapon" Element: "Ele_Weapon" NumberOfHits: -8 - AfterCastWalkDelay: 2000 + AfterCastWalkDelay: 500 SkillData2: 5000 FixedCastTime: 0 + CoolDown: 1000 SkillDelayOptions: { IgnoreStatusEffect: true } @@ -5303,40 +5175,29 @@ skill_db: ( InterruptCast: true CastTime: 500 SkillData1: { - Lv1: 5000 - Lv2: 5500 - Lv3: 6000 - Lv4: 6500 + Lv1: 11000 + Lv2: 10000 + Lv3: 9000 + Lv4: 8000 Lv5: 7000 - Lv6: 7500 - Lv7: 8000 - Lv8: 8500 - Lv9: 9000 - Lv10: 9500 - } - SkillData2: { - Lv1: 15000 - Lv2: 20000 - Lv3: 25000 - Lv4: 30000 - Lv5: 35000 - Lv6: 40000 - Lv7: 45000 - Lv8: 50000 - Lv9: 55000 - Lv10: 60000 + Lv6: 6000 + Lv7: 5000 + Lv8: 4000 + Lv9: 3000 + Lv10: 2000 } + SkillData2: 20000 CoolDown: { - Lv1: 7500 - Lv2: 8000 - Lv3: 8500 - Lv4: 9000 - Lv5: 9500 - Lv6: 10000 - Lv7: 10500 - Lv8: 11000 - Lv9: 11500 - Lv10: 12000 + Lv1: 11000 + Lv2: 10000 + Lv3: 9000 + Lv4: 8000 + Lv5: 7000 + Lv6: 6000 + Lv7: 5000 + Lv8: 4000 + Lv9: 3000 + Lv10: 2000 } FixedCastTime: 500 Requirements: { @@ -5352,9 +5213,6 @@ skill_db: ( Lv9: 28 Lv10: 30 } - Items: { - Red_Gemstone: 1 - } } }, { @@ -5653,9 +5511,13 @@ skill_db: ( AttackType: "Weapon" DamageType: { NoDamage: true + SplashArea: true } + SplashRange: -1 SkillData1: 300000 - FixedCastTime: 0 + CastTime: 1000 + FixedCastTime: 500 + Cooldown: 30000 Requirements: { SPCost: 8 } @@ -5678,8 +5540,8 @@ skill_db: ( AttackType: "Magic" Element: "Ele_Holy" InterruptCast: true - CastTime: 1600 - FixedCastTime: 400 + CastTime: 800 + FixedCastTime: 200 Requirements: { SPCost: 15 } @@ -6739,8 +6601,9 @@ skill_db: ( StatusChange: "SC_STUN" Description: "Back Stab" MaxLevel: 10 - Range: -1 - Hit: "BDT_SKILL" + Range: -2 + Hit: "BDT_MULTIHIT" + NumberOfHits: 1 SkillType: { Enemy: true } @@ -6751,13 +6614,14 @@ skill_db: ( AttackType: "Weapon" Element: "Ele_Weapon" DamageType: { - IgnoreFlee: true + IgnoreFlee: false } AfterCastActDelay: 500 SkillData1: 5000 FixedCastTime: 0 + CoolDown: 500 Requirements: { - SPCost: 16 + SPCost: 12 } }, { @@ -6783,11 +6647,11 @@ skill_db: ( SplashArea: true } SplashRange: 3 - SkillData1: 5000 - SkillData2: 20000 + SkillData1: 10000 + SkillData2: 30000 FixedCastTime: 0 Requirements: { - SPCost: 20 + SPCost: 15 State: "Hiding" } }, @@ -7297,16 +7161,16 @@ skill_db: ( CastTime: 500 AfterCastActDelay: 500 SkillData1: { - Lv1: 3 - Lv2: 7 - Lv3: 10 - Lv4: 12 - Lv5: 13 - Lv6: 13 - Lv7: 13 - Lv8: 13 - Lv9: 13 - Lv10: 13 + Lv1: 5 + Lv2: 15 + Lv3: 25 + Lv4: 35 + Lv5: 45 + Lv6: 55 + Lv7: 65 + Lv8: 75 + Lv9: 85 + Lv10: 95 } SkillData2: 120000 FixedCastTime: 500 @@ -7849,8 +7713,9 @@ skill_db: ( IgnoreFlee: true } CastDefRate: 33 - CastTime: 1500 - AfterCastActDelay: 1500 + CastTime: 1000 + AfterCastActDelay: 500 + CoolDown: 1000 AfterCastWalkDelay: 900 SkillData1: 900 SkillData2: { @@ -7865,7 +7730,7 @@ skill_db: ( Lv9: 18000 Lv10: 19000 } - FixedCastTime: 1500 + FixedCastTime: 500 Requirements: { SPCost: { Lv1: 37 @@ -7879,7 +7744,6 @@ skill_db: ( Lv9: 93 Lv10: 100 } - HPRateCost: 20 } Unit: { Id: 0x86 @@ -8082,8 +7946,7 @@ skill_db: ( NoDamage: true } InterruptCast: true - CastTime: 1000 - FixedCastTime: 1000 + FixedCastTime: 500 Requirements: { SPCost: 5 } @@ -8186,20 +8049,10 @@ skill_db: ( } AttackType: "Weapon" Element: "Ele_Weapon" - NumberOfHits: { - Lv1: 1 - Lv2: 2 - Lv3: 3 - Lv4: 4 - Lv5: 5 - Lv6: 6 - Lv7: 7 - Lv8: 8 - Lv9: 9 - Lv10: 10 - } + NumberOfHits: 1 CastTime: 500 AfterCastActDelay: 500 + CoolDown: 1000 AfterCastWalkDelay: { Lv1: 0 Lv2: 200 @@ -8214,19 +8067,19 @@ skill_db: ( } FixedCastTime: 500 Requirements: { - SPCost: 10 - SpiritSphereCost: { - Lv1: 1 - Lv2: 2 - Lv3: 3 - Lv4: 4 - Lv5: 5 - Lv6: 6 - Lv7: 7 - Lv8: 8 - Lv9: 9 - Lv10: 10 + SPCost: { + Lv1: 12 + Lv2: 16 + Lv3: 20 + Lv4: 24 + Lv5: 28 + Lv6: 32 + Lv7: 36 + Lv8: 40 + Lv9: 44 + Lv10: 48 } + SpiritSphereCost: 1 } }, { @@ -8398,7 +8251,7 @@ skill_db: ( Lv9: 1 Lv10: 1 } - SkillData1: 10000 + SkillData1: 3000 SkillData2: 300000 FixedCastTime: { Lv1: 2000 @@ -8527,16 +8380,16 @@ skill_db: ( } Requirements: { SPCost: { - Lv1: 11 - Lv2: 12 - Lv3: 13 - Lv4: 14 - Lv5: 15 - Lv6: 16 - Lv7: 17 - Lv8: 18 - Lv9: 19 - Lv10: 20 + Lv1: 3 + Lv2: 4 + Lv3: 5 + Lv4: 6 + Lv5: 7 + Lv6: 8 + Lv7: 9 + Lv8: 10 + Lv9: 11 + Lv10: 12 } WeaponTypes: { NoWeapon: true @@ -8713,10 +8566,10 @@ skill_db: ( } InterruptCast: true SkillData1: { - Lv1: 1200000 - Lv2: 1200000 + Lv1: 600000 + Lv2: 900000 Lv3: 1200000 - Lv4: 1200000 + Lv4: 1500000 Lv5: 1800000 Lv6: 1800000 Lv7: 1800000 @@ -8724,11 +8577,12 @@ skill_db: ( Lv9: 1800000 Lv10: 1800000 } - FixedCastTime: 3000 + FixedCastTime: 1000 + CastTime: 1000 Requirements: { SPCost: 40 Items: { - Boody_Red: 1 + Scarlet_Pts: 1 } } }, @@ -8755,10 +8609,10 @@ skill_db: ( } InterruptCast: true SkillData1: { - Lv1: 1200000 - Lv2: 1200000 + Lv1: 600000 + Lv2: 900000 Lv3: 1200000 - Lv4: 1200000 + Lv4: 1500000 Lv5: 1800000 Lv6: 1800000 Lv7: 1800000 @@ -8766,11 +8620,12 @@ skill_db: ( Lv9: 1800000 Lv10: 1800000 } - FixedCastTime: 3000 + FixedCastTime: 1000 + CastTime: 1000 Requirements: { SPCost: 40 Items: { - Crystal_Blue: 1 + Indigo_Pts: 1 } } }, @@ -8797,10 +8652,10 @@ skill_db: ( } InterruptCast: true SkillData1: { - Lv1: 1200000 - Lv2: 1200000 + Lv1: 600000 + Lv2: 900000 Lv3: 1200000 - Lv4: 1200000 + Lv4: 1500000 Lv5: 1800000 Lv6: 1800000 Lv7: 1800000 @@ -8808,11 +8663,12 @@ skill_db: ( Lv9: 1800000 Lv10: 1800000 } - FixedCastTime: 3000 + FixedCastTime: 1000 + CastTime: 1000 Requirements: { SPCost: 40 Items: { - Wind_Of_Verdure: 1 + Yellow_Wish_Pts: 1 } } }, @@ -8839,10 +8695,10 @@ skill_db: ( } InterruptCast: true SkillData1: { - Lv1: 1200000 - Lv2: 1200000 + Lv1: 600000 + Lv2: 900000 Lv3: 1200000 - Lv4: 1200000 + Lv4: 1500000 Lv5: 1800000 Lv6: 1800000 Lv7: 1800000 @@ -8850,11 +8706,12 @@ skill_db: ( Lv9: 1800000 Lv10: 1800000 } - FixedCastTime: 3000 + FixedCastTime: 1000 + CastTime: 1000 Requirements: { SPCost: 40 Items: { - Yellow_Live: 1 + Lime_Green_Pts: 1 } } }, @@ -8914,7 +8771,7 @@ skill_db: ( Lv10: 30 } Items: { - Yellow_Gemstone: 1 + Blue_Gemstone: 1 } } Unit: { @@ -8975,7 +8832,7 @@ skill_db: ( Lv10: 30 } Items: { - Yellow_Gemstone: 1 + Blue_Gemstone: 1 } } Unit: { @@ -9036,7 +8893,7 @@ skill_db: ( Lv10: 30 } Items: { - Yellow_Gemstone: 1 + Blue_Gemstone: 1 } } Unit: { @@ -9497,6 +9354,8 @@ skill_db: ( DamageType: { NoDamage: true } + AfterCastActDelay: 300 + CoolDown: 10000 Requirements: { SPCost: 1 WeaponTypes: { @@ -9524,8 +9383,11 @@ skill_db: ( SkillData1: 60000 SkillData2: 15000 FixedCastTime: 0 + AfterCastActDelay: 300 + CastTime: 1000 + CoolDown: 20000 Requirements: { - SPCost: 20 + SPCost: 40 WeaponTypes: { Instruments: true Whips: true @@ -9558,9 +9420,12 @@ skill_db: ( DamageType: { NoDamage: true } - SkillData1: 60000 + SkillData1: 180000 SkillData2: 60000 FixedCastTime: 0 + CastTime: 1000 + CoolDown: 20000 + AfterCastActDelay: 300 Requirements: { SPCost: 20 WeaponTypes: { @@ -9570,7 +9435,7 @@ skill_db: ( } Unit: { Id: 0x9f - Layout: 4 + Layout: 15 Interval: -1 Target: "Enemy" Flag: { @@ -9599,8 +9464,11 @@ skill_db: ( SkillData1: 60000 SkillData2: 60000 FixedCastTime: 0 + CastTime: 1000 + CoolDown: 60000 + AfterCastActDelay: 300 Requirements: { - SPCost: 30 + SPCost: 120 WeaponTypes: { Instruments: true Whips: true @@ -9633,21 +9501,24 @@ skill_db: ( DamageType: { NoDamage: true } - SkillData1: 60000 + SkillData1: 180000 SkillData2: 60000 FixedCastTime: 0 + AfterCastActDelay: 300 + CastTime: 1000 + CoolDown: 20000 Requirements: { SPCost: { - Lv1: 38 - Lv2: 41 - Lv3: 44 - Lv4: 47 - Lv5: 50 - Lv6: 53 - Lv7: 56 - Lv8: 59 - Lv9: 62 - Lv10: 65 + Lv1: 50 + Lv2: 54 + Lv3: 58 + Lv4: 62 + Lv5: 66 + Lv6: 70 + Lv7: 74 + Lv8: 78 + Lv9: 82 + Lv10: 86 } WeaponTypes: { Instruments: true @@ -9656,7 +9527,7 @@ skill_db: ( } Unit: { Id: 0xa1 - Layout: 4 + Layout: 15 Interval: -1 Target: "Party" Flag: { @@ -9732,6 +9603,9 @@ skill_db: ( SkillData1: 60000 SkillData2: 60000 FixedCastTime: 0 + CastTime: 1000 + CoolDown: 20000 + AfterCastActDelay: 300 Requirements: { SPCost: 15 WeaponTypes: { @@ -9766,11 +9640,14 @@ skill_db: ( DamageType: { NoDamage: true } - SkillData1: 60000 + SkillData1: 180000 SkillData2: 60000 FixedCastTime: 0 + CastTime: 1000 + CoolDown: 20000 + AfterCastActDelay: 300 Requirements: { - SPCost: 10 + SPCost: 70 WeaponTypes: { Instruments: true Whips: true @@ -9778,7 +9655,7 @@ skill_db: ( } Unit: { Id: 0xa4 - Layout: 4 + Layout: 15 Interval: -1 Target: "Party" Flag: { @@ -9804,9 +9681,12 @@ skill_db: ( DamageType: { NoDamage: true } - SkillData1: 60000 + SkillData1: 180000 SkillData2: 60000 FixedCastTime: 0 + CastTime: 1000 + CoolDown: 20000 + AfterCastActDelay: 300 Requirements: { SPCost: 20 WeaponTypes: { @@ -9816,7 +9696,7 @@ skill_db: ( } Unit: { Id: 0xa5 - Layout: 4 + Layout: 15 Interval: -1 Target: "Party" Flag: { @@ -9838,27 +9718,17 @@ skill_db: ( Description: "Melody Strike" MaxLevel: 5 Range: 9 - Hit: "BDT_SKILL" + Hit: "BDT_MULTIHIT" SkillType: { Enemy: true } AttackType: "Weapon" Element: "Ele_Weapon" - CastTime: 1200 - FixedCastTime: 300 + NumberOfHits: 2 + CastTime: 500 + AfterCastActDelay: 300 Requirements: { - SPCost: { - Lv1: 1 - Lv2: 3 - Lv3: 5 - Lv4: 7 - Lv5: 9 - Lv6: 11 - Lv7: 13 - Lv8: 15 - Lv9: 17 - Lv10: 19 - } + SPCost: 12 WeaponTypes: { Instruments: true } @@ -9881,26 +9751,28 @@ skill_db: ( Song: true BlockedByStasis: true } - AttackType: "Misc" + AttackType: "Magic" + Element: "Ele_Neutral" DamageType: { - NoDamage: true IgnoreFlee: true } - SkillData1: 30000 - SkillData2: 3000 + SkillData1: 4000 + SkillData2: 10000 + CoolDown: 5000 + AfterCastActDelay: 300 FixedCastTime: 0 Requirements: { SPCost: { - Lv1: 18 - Lv2: 21 - Lv3: 24 - Lv4: 27 - Lv5: 30 - Lv6: 33 - Lv7: 36 - Lv8: 39 - Lv9: 42 - Lv10: 45 + Lv1: 35 + Lv2: 38 + Lv3: 41 + Lv4: 44 + Lv5: 47 + Lv6: 50 + Lv7: 53 + Lv8: 56 + Lv9: 59 + Lv10: 62 } WeaponTypes: { Instruments: true @@ -9908,8 +9780,8 @@ skill_db: ( } Unit: { Id: 0xa6 - Layout: 3 - Interval: 3000 + Layout: 4 + Interval: 10000 Target: "Enemy" Flag: { UF_SONG: true @@ -9932,7 +9804,8 @@ skill_db: ( SplashArea: true } SplashRange: -1 - AfterCastActDelay: 4000 + AfterCastActDelay: 300 + CoolDown: 4000 SkillData2: { Lv1: 10000 Lv2: 11000 @@ -9979,21 +9852,24 @@ skill_db: ( DamageType: { NoDamage: true } - SkillData1: 60000 + SkillData1: 180000 SkillData2: 20000 + CastTime: 1000 + AfterCastActDelay: 500 + CoolDown: 20000 FixedCastTime: 0 Requirements: { SPCost: { - Lv1: 24 - Lv2: 28 - Lv3: 32 - Lv4: 36 - Lv5: 40 - Lv6: 44 - Lv7: 48 - Lv8: 52 - Lv9: 56 - Lv10: 60 + Lv1: 22 + Lv2: 24 + Lv3: 26 + Lv4: 28 + Lv5: 30 + Lv6: 32 + Lv7: 34 + Lv8: 36 + Lv9: 38 + Lv10: 40 } WeaponTypes: { Instruments: true @@ -10002,7 +9878,7 @@ skill_db: ( } Unit: { Id: 0xa7 - Layout: 3 + Layout: 15 Interval: 3000 Target: "All" Flag: { @@ -10030,21 +9906,24 @@ skill_db: ( DamageType: { NoDamage: true } - SkillData1: 120000 + SkillData1: 180000 SkillData2: 20000 FixedCastTime: 0 + CastTime: 1000 + AfterCastActDelay: 500 + CoolDown: 20000 Requirements: { SPCost: { - Lv1: 38 - Lv2: 41 - Lv3: 44 - Lv4: 47 - Lv5: 50 - Lv6: 53 - Lv7: 56 - Lv8: 59 - Lv9: 62 - Lv10: 65 + Lv1: 40 + Lv2: 45 + Lv3: 50 + Lv4: 55 + Lv5: 60 + Lv6: 65 + Lv7: 70 + Lv8: 75 + Lv9: 80 + Lv10: 85 } WeaponTypes: { Instruments: true @@ -10053,7 +9932,7 @@ skill_db: ( } Unit: { Id: 0xa8 - Layout: 3 + Layout: 15 Interval: 3000 Target: "All" Flag: { @@ -10083,19 +9962,21 @@ skill_db: ( } SkillData1: 180000 SkillData2: 20000 - FixedCastTime: 0 + FixedCastTime: 1000 + AfterCastActDelay: 500 + CoolDown: 20000 Requirements: { SPCost: { - Lv1: 40 - Lv2: 45 - Lv3: 50 - Lv4: 55 - Lv5: 60 - Lv6: 65 - Lv7: 70 - Lv8: 75 - Lv9: 80 - Lv10: 85 + Lv1: 65 + Lv2: 70 + Lv3: 75 + Lv4: 80 + Lv5: 85 + Lv6: 90 + Lv7: 95 + Lv8: 100 + Lv9: 105 + Lv10: 110 } WeaponTypes: { Instruments: true @@ -10104,7 +9985,7 @@ skill_db: ( } Unit: { Id: 0xa9 - Layout: 3 + Layout: 15 Interval: 3000 Target: "All" Flag: { @@ -10132,8 +10013,11 @@ skill_db: ( DamageType: { NoDamage: true } - SkillData1: 180000 + SkillData1: 60000 SkillData2: 20000 + CastTime: 1000 + AfterCastActDelay: 500 + CoolDown: 20000 FixedCastTime: 0 Requirements: { SPCost: { @@ -10155,7 +10039,7 @@ skill_db: ( } Unit: { Id: 0xaa - Layout: 3 + Layout: 15 Interval: 6000 Target: "All" Flag: { @@ -10179,27 +10063,17 @@ skill_db: ( Description: "Slinging Arrow" MaxLevel: 5 Range: 9 - Hit: "BDT_SKILL" + Hit: "BDT_MULTIHIT" SkillType: { Enemy: true } AttackType: "Weapon" Element: "Ele_Weapon" - CastTime: 1200 - FixedCastTime: 300 + NumberOfHits: 2 + CastTime: 500 + AfterCastActDelay: 300 Requirements: { - SPCost: { - Lv1: 1 - Lv2: 3 - Lv3: 5 - Lv4: 7 - Lv5: 9 - Lv6: 11 - Lv7: 13 - Lv8: 15 - Lv9: 17 - Lv10: 19 - } + SPCost: 12 WeaponTypes: { Whips: true } @@ -10228,19 +10102,21 @@ skill_db: ( } SkillData1: 30000 SkillData2: 3000 + AfterCastActDelay: 300 + CoolDown: 5000 FixedCastTime: 0 Requirements: { SPCost: { - Lv1: 23 - Lv2: 26 - Lv3: 29 - Lv4: 32 - Lv5: 35 - Lv6: 38 - Lv7: 41 - Lv8: 44 - Lv9: 47 - Lv10: 50 + Lv1: 35 + Lv2: 38 + Lv3: 41 + Lv4: 44 + Lv5: 47 + Lv6: 50 + Lv7: 53 + Lv8: 56 + Lv9: 59 + Lv10: 62 } WeaponTypes: { Whips: true @@ -10248,7 +10124,7 @@ skill_db: ( } Unit: { Id: 0xab - Layout: 3 + Layout: 4 Interval: 3000 Target: "Enemy" Flag: { @@ -10272,7 +10148,8 @@ skill_db: ( SplashArea: true } SplashRange: -1 - AfterCastActDelay: 4000 + AfterCastActDelay: 300 + CoolDown: 4000 SkillData2: 5000 FixedCastTime: 0 Requirements: { @@ -10308,21 +10185,24 @@ skill_db: ( DamageType: { NoDamage: true } - SkillData1: 60000 + SkillData1: 180000 SkillData2: 20000 FixedCastTime: 0 + CastTime: 1000 + CoolDown: 20000 + AfterCastActDelay: 500 Requirements: { SPCost: { - Lv1: 22 - Lv2: 24 - Lv3: 26 - Lv4: 28 - Lv5: 30 - Lv6: 32 - Lv7: 34 - Lv8: 36 - Lv9: 38 - Lv10: 40 + Lv1: 33 + Lv2: 36 + Lv3: 39 + Lv4: 42 + Lv5: 45 + Lv6: 48 + Lv7: 51 + Lv8: 54 + Lv9: 57 + Lv10: 60 } WeaponTypes: { Instruments: true @@ -10331,7 +10211,7 @@ skill_db: ( } Unit: { Id: 0xac - Layout: 3 + Layout: 15 Interval: 3000 Target: "All" Flag: { @@ -10359,21 +10239,24 @@ skill_db: ( DamageType: { NoDamage: true } - SkillData1: 180000 + SkillData1: 60000 SkillData2: 20000 FixedCastTime: 0 + CastTime: 1000 + AfterCastActDelay: 500 + CoolDown: 20000 Requirements: { SPCost: { - Lv1: 28 - Lv2: 31 - Lv3: 34 - Lv4: 37 - Lv5: 40 - Lv6: 43 - Lv7: 46 - Lv8: 49 - Lv9: 52 - Lv10: 55 + Lv1: 38 + Lv2: 41 + Lv3: 44 + Lv4: 47 + Lv5: 50 + Lv6: 53 + Lv7: 56 + Lv8: 59 + Lv9: 62 + Lv10: 65 } WeaponTypes: { Instruments: true @@ -10382,7 +10265,7 @@ skill_db: ( } Unit: { Id: 0xad - Layout: 3 + Layout: 4 Interval: 3000 Target: "Enemy" Flag: { @@ -10409,21 +10292,24 @@ skill_db: ( DamageType: { NoDamage: true } - SkillData1: 120000 + SkillData1: 180000 SkillData2: 20000 FixedCastTime: 0 + CastTime: 1000 + AfterCastActDelay: 500 + CoolDown: 20000 Requirements: { SPCost: { - Lv1: 43 - Lv2: 46 - Lv3: 49 - Lv4: 52 - Lv5: 55 - Lv6: 58 - Lv7: 61 - Lv8: 64 - Lv9: 67 - Lv10: 70 + Lv1: 40 + Lv2: 45 + Lv3: 50 + Lv4: 55 + Lv5: 60 + Lv6: 65 + Lv7: 70 + Lv8: 75 + Lv9: 80 + Lv10: 85 } WeaponTypes: { Instruments: true @@ -10432,7 +10318,7 @@ skill_db: ( } Unit: { Id: 0xae - Layout: 3 + Layout: 15 Interval: 3000 Target: "All" Flag: { @@ -10463,18 +10349,21 @@ skill_db: ( SkillData1: 180000 SkillData2: 20000 FixedCastTime: 0 + CastTime: 1000 + CoolDown: 20000 + AfterCastActDelay: 500 Requirements: { SPCost: { - Lv1: 40 - Lv2: 45 - Lv3: 50 - Lv4: 55 - Lv5: 60 - Lv6: 65 - Lv7: 70 - Lv8: 75 - Lv9: 80 - Lv10: 85 + Lv1: 60 + Lv2: 63 + Lv3: 66 + Lv4: 69 + Lv5: 72 + Lv6: 75 + Lv7: 78 + Lv8: 81 + Lv9: 84 + Lv10: 87 } WeaponTypes: { Instruments: true @@ -10483,7 +10372,7 @@ skill_db: ( } Unit: { Id: 0xaf - Layout: 3 + Layout: 15 Interval: 3000 Target: "All" Flag: { @@ -11143,32 +11032,10 @@ skill_db: ( DamageType: { NoDamage: true } - SkillData1: { - Lv1: 25000 - Lv2: 30000 - Lv3: 35000 - Lv4: 40000 - Lv5: 45000 - Lv6: 50000 - Lv7: 55000 - Lv8: 60000 - Lv9: 65000 - Lv10: 70000 - } + SkillData1: 60000 FixedCastTime: 0 Requirements: { - SPCost: { - Lv1: 14 - Lv2: 18 - Lv3: 22 - Lv4: 26 - Lv5: 30 - Lv6: 34 - Lv7: 38 - Lv8: 42 - Lv9: 46 - Lv10: 50 - } + SPCost: 20 } }, { @@ -11241,18 +11108,7 @@ skill_db: ( Lv9: 2400 Lv10: 2400 } - AfterCastActDelay: { - Lv1: 1100 - Lv2: 1200 - Lv3: 1300 - Lv4: 1400 - Lv5: 1500 - Lv6: 1600 - Lv7: 1700 - Lv8: 1800 - Lv9: 1900 - Lv10: 2000 - } + AfterCastActDelay: 500 SkillData1: { Lv1: 20000 Lv2: 40000 @@ -11463,28 +11319,19 @@ skill_db: ( MaxLevel: 5 Range: 9 Hit: "BDT_MULTIHIT" + NumberOfHits: -3 SkillType: { Enemy: true } - AttackType: "Misc" + AttackType: "Magic" + Element: "Ele_Holy" DamageType: { IgnoreElement: true IgnoreFlee: true IgnoreDefCards: true } - CastTime: 1600 - AfterCastActDelay: { - Lv1: 2000 - Lv2: 2500 - Lv3: 3000 - Lv4: 3500 - Lv5: 4000 - Lv6: 4500 - Lv7: 5000 - Lv8: 5500 - Lv9: 6000 - Lv10: 6500 - } + CastTime: 1000 + AfterCastActDelay: 1000 SkillData2: { Lv1: 2000 Lv2: 3000 @@ -11722,18 +11569,7 @@ skill_db: ( DamageType: { NoDamage: true } - CastTime: { - Lv1: 1000 - Lv2: 1200 - Lv3: 1400 - Lv4: 1600 - Lv5: 1800 - Lv6: 2000 - Lv7: 2200 - Lv8: 2400 - Lv9: 2600 - Lv10: 2800 - } + AfterCastActDelay: 500 Requirements: { SPCost: { Lv1: 1 @@ -11844,18 +11680,18 @@ skill_db: ( DamageType: { NoDamage: true } - AfterCastActDelay: 2000 + CoolDown: 2000 SkillData1: { Lv1: 40000 - Lv2: 45000 - Lv3: 50000 - Lv4: 55000 - Lv5: 60000 - Lv6: 65000 - Lv7: 70000 - Lv8: 75000 - Lv9: 80000 - Lv10: 85000 + Lv2: 60000 + Lv3: 80000 + Lv4: 100000 + Lv5: 120000 + Lv6: 140000 + Lv7: 160000 + Lv8: 180000 + Lv9: 200000 + Lv10: 220000 } SkillData2: { Lv1: 20000 @@ -12030,19 +11866,19 @@ skill_db: ( Name: "SN_SHARPSHOOTING" Description: "Focused Arrow Strike" MaxLevel: 5 - Range: 9 + Range: 11 Hit: "BDT_MULTIHIT" SkillType: { Enemy: true } AttackType: "Weapon" Element: "Ele_Weapon" - SplashRange: 1 + SplashRange: 2 InterruptCast: true SkillInstances: 13 - CastTime: 1000 - AfterCastActDelay: 1500 - FixedCastTime: 1000 + CastTime: 500 + AfterCastActDelay: 500 + FixedCastTime: 500 Requirements: { SPCost: { Lv1: 18 @@ -12301,32 +12137,11 @@ skill_db: ( Element: "Ele_Weapon" NumberOfHits: -9 InterruptCast: true - CastTime: { - Lv1: 1600 - Lv2: 1760 - Lv3: 1920 - Lv4: 2080 - Lv5: 2240 - Lv6: 2400 - Lv7: 2560 - Lv8: 2720 - Lv9: 2880 - Lv10: 3040 - } - AfterCastActDelay: 2000 - AfterCastWalkDelay: 2000 - FixedCastTime: { - Lv1: 400 - Lv2: 440 - Lv3: 480 - Lv4: 520 - Lv5: 560 - Lv6: 600 - Lv7: 640 - Lv8: 680 - Lv9: 720 - Lv10: 760 - } + CastTime: 1500 + AfterCastActDelay: 500 + AfterCastWalkDelay: 500 + FixedCastTime: 500 + CoolDown: 1500 SkillDelayOptions: { IgnoreStatusEffect: true } @@ -12452,43 +12267,10 @@ skill_db: ( AttackType: "Weapon" Element: "Ele_Weapon" NumberOfHits: 5 - CastTime: { - Lv1: 150 - Lv2: 250 - Lv3: 350 - Lv4: 450 - Lv5: 500 - Lv6: 500 - Lv7: 500 - Lv8: 500 - Lv9: 500 - Lv10: 500 - } - AfterCastActDelay: { - Lv1: 1200 - Lv2: 1400 - Lv3: 1600 - Lv4: 1800 - Lv5: 2000 - Lv6: 2200 - Lv7: 2400 - Lv8: 2600 - Lv9: 2800 - Lv10: 3000 - } + CastTime: 250 + AfterCastActDelay: 1000 SkillData2: 1000 - FixedCastTime: { - Lv1: 150 - Lv2: 250 - Lv3: 350 - Lv4: 450 - Lv5: 500 - Lv6: 500 - Lv7: 500 - Lv8: 500 - Lv9: 500 - Lv10: 500 - } + FixedCastTime: 300 Requirements: { SPCost: { Lv1: 18 @@ -12591,7 +12373,7 @@ skill_db: ( Element: "Ele_Ghost" DamageType: { SplashArea: true - SplitDamage: true + SplitDamage: false } SplashRange: 1 NumberOfHits: { @@ -12607,10 +12389,11 @@ skill_db: ( Lv10: 10 } InterruptCast: true - CastTime: 800 - AfterCastActDelay: 1000 + CastTime: 500 + Cooldown: 1000 + AfterCastActDelay: 500 SkillData2: 45000 - FixedCastTime: 200 + FixedCastTime: 300 Requirements: { SPCost: { Lv1: 10 @@ -12640,7 +12423,8 @@ skill_db: ( } InterruptCast: true SkillData1: 600000 - FixedCastTime: 2000 + FixedCastTime: 1000 + CoolDown:1000 Requirements: { SPCost: 20 } @@ -12702,7 +12486,7 @@ skill_db: ( NoDamage: true } InterruptCast: true - FixedCastTime: 5000 + FixedCastTime: 2500 CastTimeOptions: { IgnoreDex: true IgnoreStatusEffect: true @@ -12797,7 +12581,7 @@ skill_db: ( } SplashRange: 2 CastTime: 250 - AfterCastActDelay: 500 + CoolDown: 500 SkillData2: { Lv1: 10000 Lv2: 5000 @@ -12813,16 +12597,16 @@ skill_db: ( FixedCastTime: 250 Requirements: { SPCost: { - Lv1: 10 - Lv2: 12 - Lv3: 14 - Lv4: 16 - Lv5: 18 - Lv6: 20 - Lv7: 22 - Lv8: 24 - Lv9: 26 - Lv10: 28 + Lv1: 13 + Lv2: 16 + Lv3: 19 + Lv4: 22 + Lv5: 25 + Lv6: 28 + Lv7: 31 + Lv8: 34 + Lv9: 37 + Lv10: 40 } } }, @@ -15201,14 +14985,14 @@ skill_db: ( Name: "PA_SHIELDCHAIN" Description: "Shield Chain" MaxLevel: 5 - Range: 5 + Range: 11 Hit: "BDT_MULTIHIT" SkillType: { Enemy: true } AttackType: "Weapon" Element: "Ele_Weapon" - NumberOfHits: 5 + NumberOfHits: -5 CastTime: 800 AfterCastActDelay: 1000 FixedCastTime: 200 @@ -15315,55 +15099,56 @@ skill_db: ( Description: "Gravitation Field" MaxLevel: 5 Range: 18 - Hit: "BDT_SKILL" + Hit: "BDT_MULTIHIT" + NumberOfHits: { + Lv1: 2 + Lv2: 4 + Lv3: 6 + Lv4: 8 + Lv5: 10 + Lv6: 12 + Lv7: 14 + Lv8: 16 + Lv9: 18 + Lv10: 20 + } SkillType: { Place: true } SkillInfo: { BlockedByStasis: true } - AttackType: "Misc" - Element: "Ele_Earth" + AttackType: "Magic" + Element: "Ele_Neutral" DamageType: { NoDamage: true IgnoreElement: true IgnoreDefCards: true } InterruptCast: true - SkillData1: { - Lv1: 5000 - Lv2: 6000 - Lv3: 7000 - Lv4: 8000 - Lv5: 9000 - Lv6: 10000 - Lv7: 11000 - Lv8: 12000 - Lv9: 13000 - Lv10: 14000 - } - FixedCastTime: 5000 + SkillData1: 100 + FixedCastTime: 1000 + CastTime: 5000 + CoolDown: 5000 + AfterCastActDelay: 1000 Requirements: { SPCost: { - Lv1: 20 - Lv2: 40 - Lv3: 60 - Lv4: 80 + Lv1: 60 + Lv2: 70 + Lv3: 80 + Lv4: 90 Lv5: 100 - Lv6: 120 - Lv7: 140 - Lv8: 160 - Lv9: 180 - Lv10: 200 - } - Items: { - Blue_Gemstone: 1 + Lv6: 110 + Lv7: 120 + Lv8: 130 + Lv9: 140 + Lv10: 150 } } Unit: { Id: 0xb8 Layout: 2 - Interval: 500 + Interval: 5100 Target: "Enemy" Flag: { UF_NOOVERLAP: true @@ -18959,8 +18744,7 @@ skill_db: ( } AttackType: "Weapon" Element: "Ele_Weapon" - CastTime: 250 - FixedCastTime: 250 + CoolDown: 500 Requirements: { SPCost: 40 } @@ -38759,7 +38543,7 @@ skill_db: ( } SplashRange: 2 KnockBackTiles: 2 - AfterCastActDelay: 2000 + AfterCastActDelay: 500 CoolDown: 2000 SkillData2: 10000 FixedCastTime: 0 @@ -38784,8 +38568,9 @@ skill_db: ( Name: "MS_BOWLINGBASH" Description: "Bowling_Bash" MaxLevel: 10 - Range: -2 - Hit: "BDT_SKILL" + Range: 1 + Hit: "BDT_MULTIHIT" + NumberOfHits: 2 SkillType: { Enemy: true } @@ -38794,11 +38579,10 @@ skill_db: ( DamageType: { SplashArea: true } - SplashRange: 1 - KnockBackTiles: 1 + SplashRange: 2 + KnockBackTiles: 5 CastTime: 700 - AfterCastActDelay: 2500 - FixedCastTime: 0 + FixedCastTime: 350 Requirements: { SPCost: { Lv1: 13 diff --git a/src/map/battle.c b/src/map/battle.c index c7dfed6d7b1..61c6bb563d3 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -521,7 +521,7 @@ static int64 battle_calc_weapon_damage(struct block_list *src, struct block_list } #ifdef RENEWAL_EDP - if ( sc && sc->data[SC_EDP] && skill_id != AS_GRIMTOOTH && skill_id != AS_VENOMKNIFE && skill_id != ASC_BREAKER ) { + if (sc && sc->data[SC_EDP] && skill_id != AS_GRIMTOOTH && skill_id != AS_VENOMKNIFE && skill_id != ASC_METEORASSAULT) { //SOUL DESTROYER gets benefit from EDP, but Meteor Assault doesnt struct status_data *tstatus; tstatus = status->get_status_data(bl); eatk += damage * 0x19 * battle->attr_fix_table[tstatus->ele_lv - 1][ELE_POISON][tstatus->def_ele] / 10000; @@ -1676,11 +1676,46 @@ static int battle_calc_skillratio(int attack_type, struct block_list *src, struc skillratio += 30 * skill_lv; break; case WZ_STORMGUST: +#ifdef RENEWAL + skillratio -= 30; // Offset only once + skillratio += 50 * skill_lv; +#else skillratio += 40 * skill_lv; +#endif break; - case HW_NAPALMVULCAN: - skillratio += 10 * skill_lv - 30; + case WZ_VERMILION: +#ifdef RENEWAL + skillratio += 300 + skill_lv * 100; //technically monsters should be using the old one, but w/e +#else + skillratio += 20 * skill_lv - 20; +#endif + break; +#ifdef RENEWAL + case WZ_HEAVENDRIVE: + case WZ_METEOR: + skillratio += 25; break; + case WZ_EARTHSPIKE: + skillratio += 100; + break; + case PR_MAGNUS: + if (battle->check_undead(tst->race,tst->def_ele) || tst->race == RC_DEMON) + skillratio += 30; + break; + case HW_GRAVITATION: + skillratio += -100 + 100 * skill_lv; + RE_LVL_DMOD(100); + break; + case BA_DISSONANCE: + skillratio += skill_lv * 10; + if ((skill_lv = pc->checkskill(sd, BA_MUSICALLESSON)) > 0) + skillratio += (skill_lv * 3); + break; +#endif + case HW_NAPALMVULCAN: + skillratio += 70 * skill_lv - 100; + RE_LVL_DMOD(100); + break; case SL_STIN: skillratio += (tst->size!=SZ_SMALL?-99:10*skill_lv); //target size must be small (0) for full damage. break; @@ -1713,6 +1748,11 @@ static int battle_calc_skillratio(int attack_type, struct block_list *src, struc if (sd && sd->charm_type == CHARM_TYPE_WATER && sd->charm_count > 0) skillratio += 5 * sd->charm_count; break; + case NJ_HUUJIN: + skillratio += 50; + if (sd && sd->charm_type == CHARM_TYPE_WIND && sd->charm_count > 0) + skillratio += 20 * sd->charm_count; + break; #endif case NJ_HYOUSYOURAKU: skillratio += 50 * skill_lv; @@ -1730,34 +1770,7 @@ static int battle_calc_skillratio(int attack_type, struct block_list *src, struc /* Fall through */ case NPC_ENERGYDRAIN: skillratio += 100 * skill_lv; - break; - #ifdef RENEWAL - case WZ_HEAVENDRIVE: - case WZ_METEOR: - skillratio += 25; - break; - case WZ_VERMILION: - { - int interval = 0, per = interval, ratio = per; - while( (per++) < skill_lv ){ - ratio += interval; - if(per%3==0) interval += 20; - } - if( skill_lv > 9 ) - ratio -= 10; - skillratio += ratio; - } - break; - case NJ_HUUJIN: - skillratio += 50; - if (sd && sd->charm_type == CHARM_TYPE_WIND && sd->charm_count > 0) - skillratio += 20 * sd->charm_count; - break; - #else - case WZ_VERMILION: - skillratio += 20*skill_lv-20; - break; - #endif + break; /** * Summoner **/ @@ -2082,22 +2095,28 @@ static int battle_calc_skillratio(int attack_type, struct block_list *src, struc case KN_SPEARBOOMERANG: skillratio += 50*skill_lv; break; +#ifdef RENEWAL case KN_BRANDISHSPEAR: + skillratio += -100 + 400 + 100 * skill_lv + st->str * 5; //rathena is using * 3 here, but IRO and other sites say it's str*5. + break; +#else + case KN_BRANDISHSPEAR: +#endif case ML_BRANDISH: - { - int ratio = 100 + 20 * skill_lv; - skillratio += ratio - 100; - if(skill_lv>3 && flag==1) skillratio += ratio / 2; - if(skill_lv>6 && flag==1) skillratio += ratio / 4; - if(skill_lv>9 && flag==1) skillratio += ratio / 8; - if(skill_lv>6 && flag==2) skillratio += ratio / 2; - if(skill_lv>9 && flag==2) skillratio += ratio / 4; - if(skill_lv>9 && flag==3) skillratio += ratio / 2; + { + int ratio = 100 + 20 * skill_lv; + skillratio += ratio - 100; + if (skill_lv>3 && flag == 1) skillratio += ratio / 2; + if (skill_lv>6 && flag == 1) skillratio += ratio / 4; + if(skill_lv>9 && flag==1) skillratio += ratio / 8; + if(skill_lv>6 && flag==2) skillratio += ratio / 2; + if(skill_lv>9 && flag==2) skillratio += ratio / 4; + if(skill_lv>9 && flag==3) skillratio += ratio / 2; + } break; - } case KN_BOWLINGBASH: case MS_BOWLINGBASH: - skillratio+= 40 * skill_lv; + skillratio += 40 * skill_lv; break; case AS_GRIMTOOTH: skillratio += 20 * skill_lv; @@ -2106,7 +2125,14 @@ static int battle_calc_skillratio(int attack_type, struct block_list *src, struc skillratio += 30 * skill_lv; break; case AS_SONICBLOW: +#ifdef RENEWAL + + skillratio += 100 + 100 * skill_lv; + if (tst->hp < (tst->max_hp / 2)) + skillratio += skillratio / 2; +#else skillratio += 300 + 40 * skill_lv; +#endif break; case TF_SPRINKLESAND: skillratio += 30; @@ -2150,7 +2176,11 @@ static int battle_calc_skillratio(int attack_type, struct block_list *src, struc skillratio += 200 + 40 * skill_lv; break; case RG_RAID: +#ifdef RENEWAL + skillratio += -50 + 150 * skill_lv; +#else skillratio += 40 * skill_lv; +#endif break; case RG_INTIMIDATE: skillratio += 30 * skill_lv; @@ -2159,7 +2189,11 @@ static int battle_calc_skillratio(int attack_type, struct block_list *src, struc skillratio += 20 * skill_lv; break; case CR_SHIELDBOOMERANG: +#ifdef RENEWAL + skillratio += -100 + 80 * skill_lv; +#else skillratio += 30 * skill_lv; +#endif break; case NPC_DARKCROSS: case CR_HOLYCROSS: @@ -2173,23 +2207,44 @@ static int battle_calc_skillratio(int attack_type, struct block_list *src, struc break; } case AM_DEMONSTRATION: +#ifdef RENEWAL + skillratio += -100 + 60 * skill_lv; + if (sd) + skillratio += 20 * pc->checkskill(sd,AM_LEARNINGPOTION); + break; +#else skillratio += 20 * skill_lv; +#endif break; case AM_ACIDTERROR: #ifdef RENEWAL - skillratio += 80 * skill_lv + 100; + skillratio += -100 + 200 * skill_lv; + if (sd) + skillratio += 20 * pc->checkskill(sd,AM_LEARNINGPOTION); #else skillratio += 40 * skill_lv; #endif break; case MO_FINGEROFFENSIVE: +#ifdef RENEWAL + skillratio+= 500 + 200 * skill_lv; + if (tsc && tsc->data[SC_BLADESTOP]) // +50% on targets under Root skill + skillratio += skillratio/2; +#else skillratio+= 50 * skill_lv; +#endif break; case MO_INVESTIGATE: +#ifdef RENEWAL + skillratio += -100 + 100 * skill_lv; + if (tsc && tsc->data[SC_BLADESTOP]) // +50% on targets under Root skill + skillratio += skillratio/2; +#else skillratio += 75 * skill_lv; +#endif break; case MO_EXTREMITYFIST: - #ifndef RENEWAL +#ifndef RENEWAL { //Overflow check. [Skotlex] unsigned int ratio = skillratio + 100*(8 + st->sp/10); @@ -2203,23 +2258,52 @@ static int battle_calc_skillratio(int attack_type, struct block_list *src, struc skillratio += 20 * skill_lv; break; case MO_CHAINCOMBO: - skillratio += 50 + 50 * skill_lv; +#ifdef RENEWAL + skillratio += 150 + 50 * skill_lv; + if (sd != NULL && sd->weapontype == W_KNUCKLE) + skillratio *= 2; ///TODO: should display the damage as 6 hits and the sp cost should be reduce to 6. +#else + skillratio += 50 + 50 * skill_lv; +#endif break; case MO_COMBOFINISH: +#ifdef RENEWAL + skillratio += 500 + 150 * skill_lv + (5 * st->str); +#else skillratio += 140 + 60 * skill_lv; +#endif break; case BA_MUSICALSTRIKE: case DC_THROWARROW: +#ifdef RENEWAL + skillratio += 10 + 40 * skill_lv; +#else skillratio += 25 + 25 * skill_lv; +#endif break; case CH_TIGERFIST: - skillratio += 100 * skill_lv - 60; +#ifdef RENEWAL + skillratio += 150 * skill_lv + 400; + RE_LVL_DMOD(100); +#else + skillratio += 100 * skill_lv -60; +#endif break; case CH_CHAINCRUSH: +#ifdef RENEWAL + skillratio += -100 + 200 * skill_lv; + RE_LVL_DMOD(100); +#else skillratio += 300 + 100 * skill_lv; +#endif break; case CH_PALMSTRIKE: +#ifdef RENEWAL + skillratio += 100 + 100 * skill_lv + 5 * st->str; + RE_LVL_DMOD(100); +#else skillratio += 100 + 100 * skill_lv; +#endif break; case LK_HEADCRUSH: skillratio += 40 * skill_lv; @@ -2231,35 +2315,66 @@ static int battle_calc_skillratio(int attack_type, struct block_list *src, struc skillratio += i; break; case ASC_METEORASSAULT: +#ifdef RENEWAL + skillratio += 100 + 120 * skill_lv + 5 * st->str; + RE_LVL_DMOD(100); +#else skillratio += 40 * skill_lv - 60; +#endif break; case SN_SHARPSHOOTING: case MA_SHARPSHOOTING: +#ifdef RENEWAL + skillratio += 200 + 300 * skill_lv; + RE_LVL_DMOD(100); +#else skillratio += 100 + 50 * skill_lv; break; +#endif case CG_ARROWVULCAN: +#ifdef RENEWAL + skillratio += 400 + 100 * skill_lv; + RE_LVL_DMOD(100); +#else skillratio += 100 + 100 * skill_lv; +#endif break; case AS_SPLASHER: +#ifdef RENEWAL + skillratio += -100 + 400 + 100 * skill_lv; +#else skillratio += 400 + 50 * skill_lv; if(sd) skillratio += 20 * pc->checkskill(sd,AS_POISONREACT); +#endif break; - #ifndef RENEWAL +#ifndef RENEWAL case ASC_BREAKER: skillratio += 100*skill_lv-100; - #else +#else case LK_SPIRALPIERCE: case ML_SPIRALPIERCE: - skillratio += 50 * skill_lv; - #endif + skillratio += 50 + 50 * skill_lv; + RE_LVL_DMOD(100); +#endif break; case PA_SACRIFICE: skillratio += 10 * skill_lv - 10; break; case PA_SHIELDCHAIN: +#ifdef RENEWAL + skillratio += 200 + 200 * skill_lv; + RE_LVL_DMOD(100); +#else skillratio += 30 * skill_lv; +#endif + break; +#ifdef RENEWAL + case PA_PRESSURE: + skillratio += +400 + 150 * skill_lv; + RE_LVL_DMOD(100); break; +#endif case WS_CARTTERMINATION: i = 10 * (16 - skill_lv); if (i < 1) i = 1; @@ -2364,8 +2479,8 @@ static int battle_calc_skillratio(int attack_type, struct block_list *src, struc skillratio += ((skill_lv-1)%5+1) * 100; break; case RK_SONICWAVE: - skillratio = (skill_lv + 5) * 100; - skillratio = skillratio * (100 + (status->get_lv(src)-100) / 2) / 100; + skillratio += 950 + skill_lv * 150; //2022 update, got this from rathena and decided to update it + RE_LVL_DMOD(100); break; case RK_HUNDREDSPEAR: skillratio += 500 + (80 * skill_lv); @@ -2902,14 +3017,6 @@ static int battle_calc_skillratio(int attack_type, struct block_list *src, struc } //Skill damage modifiers that stack linearly if(sc && skill_id != PA_SACRIFICE){ -#ifdef RENEWAL_EDP - if( sc->data[SC_EDP] ){ - if( skill_id == AS_SONICBLOW || - skill_id == GC_COUNTERSLASH || - skill_id == GC_CROSSIMPACT ) - skillratio >>= 1; - } -#endif if(sc->data[SC_OVERTHRUST]) skillratio += sc->data[SC_OVERTHRUST]->val3; if(sc->data[SC_OVERTHRUSTMAX]) @@ -2999,7 +3106,9 @@ static int64 battle_calc_damage(struct block_list *src, struct block_list *bl, s return 1; switch(skill_id) { +#ifndef RENEWAL case PA_PRESSURE: +#endif case SP_SOULEXPLOSION: return damage; //This skill bypass everything else. } @@ -3780,7 +3889,11 @@ static int battle_range_type(struct block_list *src, struct block_list *target, else return BF_LONG; } - + // Renewal changes to ranged physical damage +#ifdef RENEWAL + if (skill_id == KN_BRANDISHSPEAR) + return BF_SHORT; +#endif //based on used skill's range if (skill->get_range2(src, skill_id, skill_lv) < 5) return BF_SHORT; @@ -4233,14 +4346,18 @@ static struct Damage battle_calc_misc_attack(struct block_list *src, struct bloc //Blitz-beat Damage. if(!sd || (temp = pc->checkskill(sd,HT_STEELCROW)) <= 0) temp=0; +#ifdef RENEWAL + md.damage=(sstatus->dex/10+sstatus->agi/2+temp*3+10*pc->checkskill(sd,HT_BLITZBEAT))*2; +#else md.damage=(sstatus->dex/10+sstatus->int_/2+temp*3+40)*2; if(mflag > 1) //Autocasted Blitz. nk|=NK_SPLASHSPLIT; - +#endif if (skill_id == SN_FALCONASSAULT) { //Div fix of Blitzbeat - temp = skill->get_num(HT_BLITZBEAT, 5); - damage_div_fix(md.damage, temp); + int temp2; + temp2 = skill->get_num(HT_BLITZBEAT, 5); + damage_div_fix(md.damage, temp2); //Falcon Assault Modifier md.damage=md.damage*(150+70*skill_lv)/100; @@ -4249,11 +4366,16 @@ static struct Damage battle_calc_misc_attack(struct block_list *src, struct bloc case TF_THROWSTONE: md.damage=50; break; +#ifndef RENEWAL //This skills no longer do flat damage on renewal case BA_DISSONANCE: md.damage=30+skill_lv*10; if (sd) md.damage+= 3*pc->checkskill(sd,BA_MUSICALLESSON); break; + case PA_PRESSURE: + md.damage=500+300*skill_lv; + break; +#endif case NPC_SELFDESTRUCTION: md.damage = sstatus->hp; break; @@ -4264,9 +4386,6 @@ static struct Damage battle_calc_misc_attack(struct block_list *src, struct bloc md.damage = 500 + (skill_lv-1)*1000 + rnd()%1000; if(md.damage > 9999) md.damage = 9999; break; - case PA_PRESSURE: - md.damage=500+300*skill_lv; - break; case PA_GOSPEL: md.damage = 1+rnd()%9999; break; @@ -4355,19 +4474,18 @@ static struct Damage battle_calc_misc_attack(struct block_list *src, struct bloc int64 matk = battle->calc_magic_attack(src, target, skill_id, skill_lv, mflag).damage; short totaldef = status->get_total_def(target) + status->get_total_mdef(target); int64 atk = battle->calc_base_damage(src, target, skill_id, skill_lv, nk, false, s_ele, ELE_NEUTRAL, EQI_HAND_R, (sc && sc->data[SC_MAXIMIZEPOWER] ? 1 : 0) | (sc && sc->data[SC_WEAPONPERFECT] ? 8 : 0), md.flag); -#ifdef RENEWAL_EDP - if( sc && sc->data[SC_EDP] ) - ratio >>= 1; -#endif + md.damage = (matk + atk) * ratio / 100; md.damage -= totaldef; #endif } break; +#ifndef RENEWAL case HW_GRAVITATION: md.damage = 200+200*skill_lv; md.dmotion = 0; //No flinch animation. break; +#endif case NPC_EVILLAND: md.damage = skill->calc_heal(src,target,skill_id,skill_lv,false); break; @@ -4691,7 +4809,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src, struct bl if (battle_config.finger_offensive_type) wd.div_ = 1; else - wd.div_ = sd->spiritball_old; + wd.div_ = sd->spiritball_old; ///This increases the number of hits per spiritball? if so shoud be removed from Renewal code } break; case HT_PHANTASMIC: @@ -4719,13 +4837,28 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src, struct bl case GS_GROUNDDRIFT: case KN_SPEARSTAB: - case KN_BOWLINGBASH: +#ifndef RENEWAL + case KN_BOWLINGBASH: case MS_BOWLINGBASH: +#endif case MO_BALKYOUNG: case TK_TURNKICK: wd.blewcount=0; break; - +#ifdef RENEWAL + case KN_BOWLINGBASH: + if (sd != NULL && sd->weapontype == W_2HSWORD) { //2handed swords deal more hits damage if there are more than 2 enemies in area + //if (wflag >= 2 && wflag <= 3) // NOT WORKING ATM, keeping 4 hits for 2hswords on any target + // wd.div_ = 3; + //else if (wflag >= 4) + wd.div_ = 4; + } + break; + case RG_BACKSTAP: + if (sd != NULL && sd->weapontype == W_DAGGER) + wd.div_ = 2; + break; +#endif case KN_AUTOCOUNTER: wd.flag=(wd.flag&~BF_SKILLMASK)|BF_NORMAL; break; @@ -4964,7 +5097,11 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src, struct bl break; case SN_SHARPSHOOTING: case MA_SHARPSHOOTING: +#ifdef RENEWAL + cri += 500; +#else cri += 200; +#endif break; case NJ_KIRIKAGE: cri += 250 + 50*skill_lv; @@ -5093,6 +5230,11 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src, struct bl case LG_BANISHINGPOINT: hitrate += 3 * skill_lv; break; +#ifdef RENEWAL + case RG_BACKSTAP: + hitrate += skill_lv * 4; //Renewal buff: added hitrate on Back Stab + break; +#endif case RL_SLUGSHOT: { int dist = distance_bl(src, target); @@ -5377,7 +5519,10 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src, struct bl short totaldef = status->get_total_def(target); GET_NORMAL_ATTACK((sc && sc->data[SC_MAXIMIZEPOWER] ? 1 : 0) | 8, skill_id); if ( wd.damage ) { - ATK_ADD(250 * (skill_lv + 1) + (10 * (status_get_sp(src) + 1) * wd.damage / 100) + (8 * wd.damage)); + if (sd->spiritball > 5) + ATK_ADD(2*(250 + (150 * skill_lv) + (10 * (status_get_sp(src) + 1) * wd.damage / 100) + (8 * wd.damage))); //pretty sure the bonus damage was slightly off + else + ATK_ADD(250 + (150 * skill_lv) + (10 * (status_get_sp(src) + 1) * wd.damage / 100) + (8 * wd.damage)); ATK_ADD(-totaldef); } } @@ -5393,9 +5538,11 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src, struct bl ATK_ADD(sstatus->rhw.atk2); //Else use Atk2 ATK_RATE(battle->calc_skillratio(BF_WEAPON, src, target, skill_id, skill_lv, skillratio, wflag)); break; - case AM_DEMONSTRATION: + + case AM_DEMONSTRATION: case AM_ACIDTERROR: // [malufett/Hercules] { + #ifndef RENEWAL //on renewal this nonsense of using both atk and matk was removed, both skills use ATK int64 matk; int totaldef = status->get_total_def(target) + status->get_total_mdef(target); matk = battle->calc_cardfix(BF_MAGIC, src, target, nk, s_ele, 0, status->get_matk(src, 2), 0, wd.flag); @@ -5405,6 +5552,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src, struct bl ATK_RATE(battle->calc_skillratio(BF_WEAPON, src, target, skill_id, skill_lv, skillratio, wflag)); ATK_ADD(matk); ATK_ADD(-totaldef); + #endif if ( skill_id == AM_ACIDTERROR && is_boss(target) ) ATK_RATE(50); if ( skill_id == AM_DEMONSTRATION ) @@ -5436,11 +5584,11 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src, struct bl ATK_ADD(sd->inventory_data[index]->weight * 7 / 100); switch (tstatus->size) { - case SZ_SMALL: //Small: 115% - ATK_RATE(115); + case SZ_SMALL: //Small: 115% >>> changed to 125% on update + ATK_RATE(125); break; - case SZ_BIG: //Large: 85% - ATK_RATE(85); + case SZ_BIG: //Large: 85% >>> changed to 75% in update + ATK_RATE(75); } wd.damage = battle->calc_masteryfix(src, target, skill_id, skill_lv, wd.damage, wd.div_, 0, flag.weapon); wd.damage = battle->calc_cardfix2(src, target, wd.damage, s_ele, nk, wd.flag); @@ -5751,8 +5899,10 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src, struct bl int lv = sc->data[SC_AURABLADE]->val1; #ifdef RENEWAL lv *= ((skill_id == LK_SPIRALPIERCE || skill_id == ML_SPIRALPIERCE)?wd.div_:1); // +100 per hit in lv 5 -#endif + ATK_ADD(sd->status.base_level * (lv+3)); //damage increased quite a lot +#else ATK_ADD(20*lv); +#endif } if( !skill_id ) { @@ -6573,7 +6723,11 @@ static enum damage_lv battle_weapon_attack(struct block_list *src, struct block_ } if(sd && (skillv = pc->checkskill(sd,MO_TRIPLEATTACK)) > 0) { +#ifdef RENEWAL + int triple_rate= 30; //Base Rate +#else int triple_rate= 30 - skillv; //Base Rate +#endif if (sc && sc->data[SC_SKILLRATE_UP] && sc->data[SC_SKILLRATE_UP]->val1 == MO_TRIPLEATTACK) { triple_rate+= triple_rate*(sc->data[SC_SKILLRATE_UP]->val2)/100; status_change_end(src, SC_SKILLRATE_UP, INVALID_TIMER); @@ -6722,12 +6876,14 @@ static enum damage_lv battle_weapon_attack(struct block_list *src, struct block_ int sp = 0; uint16 skill_id = sc->data[SC_AUTOSPELL]->val2; uint16 skill_lv = sc->data[SC_AUTOSPELL]->val3; +#ifndef RENEWAL int i = rnd()%100; if (sc->data[SC_SOULLINK] && sc->data[SC_SOULLINK]->val2 == SL_SAGE) i = 0; //Max chance, no skill_lv reduction. [Skotlex] if (i >= 50) skill_lv -= 2; else if (i >= 15) skill_lv--; if (skill_lv < 1) skill_lv = 1; +#endif sp = skill->get_sp(skill_id,skill_lv) * 2 / 3; if (status->charge(src, 0, sp)) { @@ -7372,8 +7528,13 @@ static bool battle_check_range(struct block_list *src, struct block_list *bl, in return path->search_long(NULL,src,src->m,src->x,src->y,bl->x,bl->y,CELL_CHKWALL); } -// can be converted in future into macroses from common/config -static const struct config_data_old battle_data[] = { +static const struct battle_data { + const char* str; + int* val; + int defval; + int min; + int max; +} battle_data[] = { { "warp_point_debug", &battle_config.warp_point_debug, 0, 0, 1, }, { "enable_critical", &battle_config.enable_critical, BL_PC, BL_NUL, BL_ALL, }, { "mob_critical_rate", &battle_config.mob_critical_rate, 100, 0, INT_MAX, }, @@ -8171,4 +8332,4 @@ void battle_defaults(void) battle->calc_skillratio_magic_unknown = battle_calc_skillratio_magic_unknown; battle->calc_skillratio_weapon_unknown = battle_calc_skillratio_weapon_unknown; battle->calc_misc_attack_unknown = battle_calc_misc_attack_unknown; -} +} \ No newline at end of file diff --git a/src/map/clif.c b/src/map/clif.c index 2dd22b437a1..1defdc01ac5 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -8013,6 +8013,26 @@ static void clif_autospell(struct map_session_data *sd, uint16 skill_lv) p->packetType = HEADER_ZC_AUTOSPELLLIST; int index = 0; +#ifdef RENEWAL + if (skill_lv > 0 && pc->checkskill(sd, MG_COLDBOLT) > 0) + p->skills[index++] = MG_COLDBOLT; + if (skill_lv > 0 && pc->checkskill(sd, MG_FIREBOLT) > 0) + p->skills[index++] = MG_FIREBOLT; + if (skill_lv > 0 && pc->checkskill(sd, MG_LIGHTNINGBOLT) > 0) + p->skills[index++] = MG_LIGHTNINGBOLT; + if (skill_lv > 3 && pc->checkskill(sd, MG_SOULSTRIKE) > 0) + p->skills[index++] = MG_SOULSTRIKE; + if (skill_lv > 3 && pc->checkskill(sd, MG_FIREBALL) > 0) + p->skills[index++] = MG_FIREBALL; + if (skill_lv > 6 && pc->checkskill(sd, MG_FROSTDIVER) > 0) + p->skills[index++] = MG_FROSTDIVER; + if (skill_lv > 6 && pc->checkskill(sd, WZ_EARTHSPIKE) > 0) + p->skills[index++] = WZ_EARTHSPIKE; + if (skill_lv > 9 && pc->checkskill(sd, MG_THUNDERSTORM) > 0) + p->skills[index++] = MG_THUNDERSTORM; + if (skill_lv > 9 && pc->checkskill(sd, WZ_HEAVENDRIVE) > 0) + p->skills[index++] = WZ_HEAVENDRIVE; +#else if (skill_lv > 0 && pc->checkskill(sd, MG_NAPALMBEAT) > 0) p->skills[index++] = MG_NAPALMBEAT; if (skill_lv > 1 && pc->checkskill(sd, MG_COLDBOLT) > 0) @@ -8027,6 +8047,7 @@ static void clif_autospell(struct map_session_data *sd, uint16 skill_lv) p->skills[index++] = MG_FIREBALL; if (skill_lv > 9 && pc->checkskill(sd, MG_FROSTDIVER) > 0) p->skills[index++] = MG_FROSTDIVER; +#endif #if PACKETVER_MAIN_NUM >= 20181128 || PACKETVER_RE_NUM >= 20181031 const int len = sizeof(struct PACKET_ZC_AUTOSPELLLIST) + index * 4; diff --git a/src/map/skill.c b/src/map/skill.c index 4fdb0fe0e81..382d8384d4e 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -1124,6 +1124,7 @@ static sc_type skill_get_sc_type(int skill_id) static int skill_calc_heal(struct block_list *src, struct block_list *target, uint16 skill_id, uint16 skill_lv, bool heal) { int skill2_lv, hp; + struct map_session_data *sd = BL_CAST(BL_PC, src); struct map_session_data *tsd = BL_CAST(BL_PC, target); struct status_change* sc; @@ -1134,14 +1135,12 @@ static int skill_calc_heal(struct block_list *src, struct block_list *target, ui case SU_TUNABELLY: hp = status_get_max_hp(target) * ((20 * skill_lv) - 10) / 100; break; +#ifndef RENEWAL //heal removed in RENEWAL, buffs incoming heal case BA_APPLEIDUN: -#ifdef RENEWAL - hp = 100+5*skill_lv+5*(status_get_vit(src)/10); // HP recovery -#else // not RENEWAL hp = 30+5*skill_lv+5*(status_get_vit(src)/10); // HP recovery -#endif // RENEWAL - if( sd ) + if( sd ) hp += 5*pc->checkskill(sd,BA_MUSICALLESSON); +#endif break; case PR_SANCTUARY: hp = (skill_lv>6)?777:skill_lv*100; @@ -1154,7 +1153,7 @@ static int skill_calc_heal(struct block_list *src, struct block_list *target, ui return battle_config.max_heal; #ifdef RENEWAL /** - * Renewal Heal Formula + * RENEWAL Heal Formula * Formula: ( [(Base Level + INT) / 5] ? 30 ) ? (Heal Level / 10) ? (Modifiers) + MATK **/ hp = (status->get_lv(src) + status_get_int(src)) / 5 * 30 * skill_lv / 10; @@ -1203,6 +1202,12 @@ static int skill_calc_heal(struct block_list *src, struct block_list *target, ui hp = hp * 150 / 100; if (sc->data[SC_NO_RECOVER_STATE]) hp = 0; +#ifdef RENEWAL + if(sc->data[SC_ASSUMPTIO]) + hp += hp * (sc->data[SC_ASSUMPTIO]->val1 * 2) / 100; + if(sc->data[SC_APPLEIDUN]) + hp += hp * (sc->data[SC_APPLEIDUN]->val3) / 100; +#endif } #ifdef RENEWAL @@ -1722,7 +1727,7 @@ static int skill_additional_effect(struct block_list *src, struct block_list *bl case WZ_STORMGUST: /** - * Storm Gust counter was dropped in renewal + * Storm Gust counter was dropped in RENEWAL **/ #ifdef RENEWAL sc_start(src, bl, SC_FREEZE, 65 - (5 * skill_lv), skill_lv, skill->get_time2(skill_id, skill_lv), skill_id); @@ -1800,7 +1805,11 @@ static int skill_additional_effect(struct block_list *src, struct block_list *bl break; case AM_DEMONSTRATION: +#ifdef RENEWAL + skill->break_equip(bl, EQP_WEAPON, 300*skill_lv, BCT_ENEMY); //RENEWAL improved chance to break +#else skill->break_equip(bl, EQP_WEAPON, 100*skill_lv, BCT_ENEMY); +#endif break; case CR_SHIELDCHARGE: @@ -2368,8 +2377,10 @@ static int skill_additional_effect(struct block_list *src, struct block_list *bl rate += 10; if(sc->data[SC_OVERTHRUST]) rate += 10; - if(sc->data[SC_OVERTHRUSTMAX]) +#ifndef RENEWAL + if(sc->data[SC_OVERTHRUSTMAX]) //RENEWAL removed this chance to break rate += 10; +#endif } if( rate ) skill->break_equip(src, EQP_WEAPON, rate, BCT_SELF); @@ -3211,12 +3222,14 @@ static int skill_attack(int attack_type, struct block_list *src, struct block_li //Trick Dead protects you from damage, but not from buffs and the like, hence it's placed here. if (sc && sc->data[SC_TRICKDEAD]) return 0; +#ifndef RENEWAL if ( skill_id != HW_GRAVITATION ) { struct status_change *csc = status->get_sc(src); if(csc && csc->data[SC_GRAVITATION] && csc->data[SC_GRAVITATION]->val3 == BCT_SELF ) return 0; } - +#endif + //Gravitational field was reworked an now it's just a boring damage spell dmg = battle->calc_attack(attack_type,src,bl,skill_id,skill_lv,flag&0xFFF); //Skotlex: Adjusted to the new system @@ -3277,7 +3290,7 @@ static int skill_attack(int attack_type, struct block_list *src, struct block_li #ifdef RENEWAL if( dmg.dmg_lv != ATK_MISS ) // Wiz SL canceled and consumed fragment #else - // issue:6415 in pre-renewal Kaite reflected the entire damage received + // issue:6415 in pre-RENEWAL Kaite reflected the entire damage received // regardless of caster's equipment (Aegis 11.1) if( dmg.dmg_lv != ATK_MISS && reflecttype == 1 ) //Wiz SL canceled and consumed fragment #endif @@ -3579,9 +3592,11 @@ static int skill_attack(int attack_type, struct block_list *src, struct block_li case HT_LANDMINE: dmg.dmotion = clif->skill_damage(dsrc,bl,tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skill_id, -1, type); break; +#ifndef RENEWAL case HW_GRAVITATION: dmg.dmotion = clif->damage(bl, bl, 0, 0, damage, 1, BDT_ENDURE, 0); break; +#endif case WZ_SIGHTBLASTER: dmg.dmotion = clif->skill_damage(src,bl,tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skill_id, (flag&SD_LEVEL) ? -1 : skill_lv, BDT_SPLASH); break; @@ -4983,6 +4998,32 @@ static int skill_castend_damage_id(struct block_list *src, struct block_list *bl case RG_BACKSTAP: { +#ifdef RENEWAL //copied code from Asura strike with i=1 + short x, y, i = 1; + struct block_list *mbl = bl; + skill->attack(BF_WEAPON,src,src,bl,skill_id,skill_lv,tick,flag); + + enum unit_dir dir = map->calc_dir(src, bl->x, bl->y); + if (Assert_chk(dir >= UNIT_DIR_FIRST && dir < UNIT_DIR_MAX)) { + map->freeblock_unlock(); // unblock before assert-returning + return 0; + } + x = i * dirx[dir]; + y = i * diry[dir]; + if ((mbl == src || (!map_flag_gvg2(src->m) && !map->list[src->m].flag.battleground))) { + if (unit->move_pos(src, mbl->x + x, mbl->y + y, 1, true) != 0) { + // The cell is not reachable (wall, object, ...), move next to the target + if (x > 0) x = -1; + else if (x < 0) x = 1; + if (y > 0) y = -1; + else if (y < 0) y = 1; + + unit->move_pos(src, bl->x + x, bl->y + y, 1, true); + } + clif->slide(src, src->x, src->y); + clif->fixpos(src); + } +#else //old backstab, PRE-RE enum unit_dir dir = map->calc_dir(src, bl->x, bl->y); enum unit_dir t_dir = unit->getdir(bl); if ((!check_distance_bl(src, bl, 0) && map->check_dir(dir, t_dir) == 0) || bl->type == BL_SKILL) { @@ -4993,9 +5034,9 @@ static int skill_castend_damage_id(struct block_list *src, struct block_list *bl } else if (sd) clif->skill_fail(sd, skill_id, USESKILL_FAIL_LEVEL, 0, 0); +#endif } break; - case MO_FINGEROFFENSIVE: skill->attack(BF_WEAPON,src,src,bl,skill_id,skill_lv,tick,flag); if (battle_config.finger_offensive_type && sd) { @@ -5078,6 +5119,10 @@ static int skill_castend_damage_id(struct block_list *src, struct block_list *bl // Splash attack skills. case AS_GRIMTOOTH: case MC_CARTREVOLUTION: +#ifdef RENEWAL + case KN_BOWLINGBASH: + case MS_BOWLINGBASH: +#endif case NPC_SPLASHATTACK: flag |= SD_PREAMBLE; // a fake packet will be sent for the first target to be hit FALLTHROUGH @@ -5237,15 +5282,15 @@ static int skill_castend_damage_id(struct block_list *src, struct block_list *bl //special case: Venom Splasher uses a different range for searching than for splashing if( flag&SD_LEVEL || skill->get_nk(skill_id)&NK_SPLASHSPLIT ) skill->area_temp[0] = map->foreachinrange(skill->area_sub, bl, (skill_id == AS_SPLASHER)?1: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); - +#ifdef RENEWAL //RENEWAL removed the gem cost if (skill_id == AS_SPLASHER) { - // Prevent double item consumption when the target explodes (item requirements have already been processed in skill_castend_nodamage_id) - flag |= 1; + // Prevent double item consumption when the target explodes (item requirements have already been processed in skill_castend_nodamage_id). + flag |= 1; } - +#endif if (sd && skill_id == SU_LUNATICCARROTBEAT) { short item_idx = pc->search_inventory(sd, ITEMID_CARROT); @@ -5273,7 +5318,11 @@ static int skill_castend_damage_id(struct block_list *src, struct block_list *bl else skill->attack(skill->get_type(skill_id, skill_lv), src, src, bl, skill_id, skill_lv, tick, flag); break; - +#ifdef RENEWAL + //skill->attack(skill->get_type(skill_id, skill_lv), src, src, bl, skill_id, skill_lv, tick, flag|SD_ANIMATION); + //skill->area_temp[0] = map->foreachinrange(skill->area_sub, bl, skill->get_splash(skill_id, skill_lv),skill->splash_target(src), 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),skill->splash_target(src), src,skill_id,skill_lv,tick,flag | BCT_ENEMY | SD_SPLASH | 1, skill->castend_damage_id); +#else case KN_BOWLINGBASH: case MS_BOWLINGBASH: { @@ -5350,8 +5399,8 @@ static int skill_castend_damage_id(struct block_list *src, struct block_list *bl // 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; - case KN_SPEARSTAB: if(flag&1) { if (bl->id==skill->area_temp[1]) @@ -6373,10 +6422,15 @@ static int skill_castend_id(int tid, int64 tick, int id, intptr_t data) } if(ud->skill_id == RG_BACKSTAP) { + #ifndef RENEWAL enum unit_dir dir = map->calc_dir(src, target->x, target->y); enum unit_dir t_dir = unit->getdir(target); - if (check_distance_bl(src, target, 0) || map->check_dir(dir, t_dir) != 0) { - break; + if (map->check_dir(dir, t_dir) != 0) { + break; + } + #endif + if (check_distance_bl(src, target, 0)) { + break; } } @@ -7228,13 +7282,18 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list * break; } } +#ifdef RENEWAL + if (!clif->skill_nodamage(src, bl, skill_id, skill_lv, sc_start(src, bl, type, 100, skill_lv, skill->get_time(skill_id, skill_lv), skill_id))) { //RENEWAL buff never fails +#else // 100% success rate at lv4 & 5, but lasts longer at lv5 if (!clif->skill_nodamage(src, bl, skill_id, skill_lv, sc_start(src, bl, type, (60 + skill_lv * 10), skill_lv, skill->get_time(skill_id, skill_lv), skill_id))) { +#endif if (sd) clif->skill_fail(sd, skill_id, USESKILL_FAIL_LEVEL, 0, 0); if (skill->break_equip(bl, EQP_WEAPON, 10000, BCT_PARTY) && sd && sd != dstsd) clif->message(sd->fd, msg_sd(sd,869)); // "You broke the target's weapon." } + break; case PR_ASPERSIO: @@ -7307,9 +7366,11 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list * break; } case PR_SLOWPOISON: - case PR_IMPOSITIO: case PR_LEXAETERNA: +#ifndef RENEWAL + case PR_IMPOSITIO: case PR_SUFFRAGIUM: +#endif case PR_BENEDICTIO: case LK_BERSERK: case MS_BERSERK: @@ -7872,6 +7933,10 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list * break; case AL_ANGELUS: +#ifdef RENEWAL + case PR_SUFFRAGIUM: + case PR_IMPOSITIO: +#endif case PR_MAGNIFICAT: case PR_GLORIA: case SN_WINDWALK: @@ -8775,18 +8840,20 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list * case SA_AUTOSPELL: clif->skill_nodamage(src,bl,skill_id,skill_lv,1); if(sd){ - sd->state.workinprogress = 3; + sd->state.workinprogress = 0; clif->autospell(sd,skill_lv); - }else { + } +#ifndef RENEWAL + else { int maxlv=1,spellid=0; static const int spellarray[3] = { MG_COLDBOLT,MG_FIREBOLT,MG_LIGHTNINGBOLT }; if(skill_lv >= 10) { spellid = MG_FROSTDIVER; -#if 0 + #if 0 if (tsc && tsc->data[SC_SOULLINK] && tsc->data[SC_SOULLINK]->val2 == SA_SAGE) maxlv = 10; else -#endif // 0 + #endif // 0 maxlv = skill_lv - 9; } else if(skill_lv >=8) { @@ -8810,8 +8877,8 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list * sc_start4(src,src,SC_AUTOSPELL,100,skill_lv,spellid,maxlv,0, skill->get_time(SA_AUTOSPELL, skill_lv), SA_AUTOSPELL); } +#endif break; - case BS_GREED: if(sd){ clif->skill_nodamage(src,bl,skill_id,skill_lv,1); @@ -9154,7 +9221,7 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list * case AS_SPLASHER: if( tstatus->mode&MD_BOSS #ifndef RENEWAL - /** Renewal dropped the 3/4 hp requirement **/ + /** RENEWAL dropped the 3/4 hp requirement **/ || tstatus-> hp > tstatus->max_hp*3/4 #endif // RENEWAL ) { @@ -12215,7 +12282,6 @@ static int skill_castend_pos2(struct block_list *src, int x, int y, uint16 skill FALLTHROUGH case MG_FIREWALL: case MG_THUNDERSTORM: - case AL_PNEUMA: case WZ_FIREPILLAR: case WZ_QUAGMIRE: @@ -12276,9 +12342,10 @@ static int skill_castend_pos2(struct block_list *src, int x, int y, uint16 skill case NJ_HYOUSYOURAKU: case NJ_RAIGEKISAI: case NJ_KAMAITACHI: - #ifdef RENEWAL +#ifdef RENEWAL case NJ_HUUMA: - #endif + case HW_GRAVITATION: +#endif case NPC_EARTHQUAKE: case NPC_EVILLAND: case WL_COMET: @@ -12569,13 +12636,13 @@ static int skill_castend_pos2(struct block_list *src, int x, int y, uint16 skill return 1; } break; - +#ifndef RENEWAL case HW_GRAVITATION: if ((sg = skill->unitsetting(src,skill_id,skill_lv,x,y,0))) sc_start4(src, src, type, 100, skill_lv, 0, BCT_SELF, sg->group_id, skill->get_time(skill_id, skill_lv), skill_id); flag|=1; break; - +#endif // Plant Cultivation [Celest] case CR_CULTIVATION: if (sd) { @@ -13234,22 +13301,32 @@ static struct skill_unit_group *skill_unitsetting(struct block_list *src, uint16 val1 = 10; //FIXME: This value is not used anywhere, what is it for? [Skotlex] break; case BA_WHISTLE: +#ifdef RENEWAL + val1 = 18 + skill_lv*2; // Flee increase + val2 = (skill_lv + 1) / 2; // Perfect dodge increase +#else val1 = skill_lv +st->agi/10; // Flee increase val2 = ((skill_lv+1)/2)+st->luk/10; // Perfect dodge increase if(sd){ val1 += pc->checkskill(sd,BA_MUSICALLESSON); val2 += pc->checkskill(sd,BA_MUSICALLESSON); } +#endif break; case DC_HUMMING: +#ifdef RENEWAL + val1 = 4*skill_lv; +#else val1 = 2*skill_lv+st->dex/10; // Hit increase - #ifdef RENEWAL - val1 *= 2; - #endif - if(sd) + if(sd) val1 += pc->checkskill(sd,DC_DANCINGLESSON); +#endif break; case BA_POEMBRAGI: +#ifdef RENEWAL + val1 = 2 * skill_lv; // Casting time reduction + val2 = 3 * skill_lv; // After-cast delay reduction +#else val1 = 3*skill_lv+st->dex/10; // Casting time reduction //For some reason at level 10 the base delay reduction is 50%. val2 = (skill_lv<10?3*skill_lv:50)+st->int_/5; // After-cast delay reduction @@ -13257,6 +13334,7 @@ static struct skill_unit_group *skill_unitsetting(struct block_list *src, uint16 val1 += 2*pc->checkskill(sd,BA_MUSICALLESSON); val2 += 2*pc->checkskill(sd,BA_MUSICALLESSON); } +#endif break; case DC_DONTFORGETME: #ifdef RENEWAL @@ -13265,24 +13343,34 @@ static struct skill_unit_group *skill_unitsetting(struct block_list *src, uint16 #else val1 = st->dex/10 + 3*skill_lv + 5; // ASPD decrease val2 = st->agi/10 + 3*skill_lv + 5; // Movement speed adjustment. -#endif if(sd){ val1 += pc->checkskill(sd,DC_DANCINGLESSON); val2 += pc->checkskill(sd,DC_DANCINGLESSON); } +#endif break; case BA_APPLEIDUN: - val1 = 5+2*skill_lv+st->vit/10; // MaxHP percent increase +#ifdef RENEWAL + val2 = 9 + skill_lv + skill_lv/5; // MaxHP percent increase + val3 = skill_lv * 2; //heal buff +#else + val2 = 5+2*skill_lv+st->vit/10; // MaxHP percent increase if(sd) - val1 += pc->checkskill(sd,BA_MUSICALLESSON); + val2 += pc->checkskill(sd,BA_MUSICALLESSON); +#endif break; case DC_SERVICEFORYOU: +#ifdef RENEWAL + val1 = 9+skill_lv+(st->int_/10)*2; // MaxSP percent increase + val2 = 5*skill_lv; // SP cost reduction +#else val1 = 15+skill_lv+(st->int_/10); // MaxSP percent increase val2 = 20+3*skill_lv+(st->int_/10); // SP cost reduction if(sd){ val1 += pc->checkskill(sd,DC_DANCINGLESSON) / 2; val2 += pc->checkskill(sd,DC_DANCINGLESSON) / 2; } +#endif break; case BA_ASSASSINCROSS: if(sd) @@ -13298,15 +13386,20 @@ static struct skill_unit_group *skill_unitsetting(struct block_list *src, uint16 #endif break; case DC_FORTUNEKISS: +#ifdef RENEWAL + val1 = skill_lv; // Critical increase + val1 *= 10; +#else val1 = 10+skill_lv+(st->luk/10); // Critical increase if(sd) val1 += pc->checkskill(sd,DC_DANCINGLESSON); - val1*=10; //Because every 10 crit is an actual cri point. + val1 *= 10; +#endif break; case BD_DRUMBATTLEFIELD: #ifdef RENEWAL - val1 = (skill_lv+5)*25; //Watk increase - val2 = skill_lv*10; //Def increase + val1 = 15 + (skill_lv*5); //Watk increase + val2 = skill_lv*15; //Def increase #else val1 = (skill_lv+1)*25; //Watk increase val2 = (skill_lv+1)*2; //Def increase @@ -13316,11 +13409,20 @@ static struct skill_unit_group *skill_unitsetting(struct block_list *src, uint16 val1 = (skill_lv+2)*25; //Watk increase break; case BD_RICHMANKIM: +#ifdef RENEWAL + val1 = 10 + 10*skill_lv; //Exp increase bonus. +#else val1 = 25 + 11*skill_lv; //Exp increase bonus. +#endif break; case BD_SIEGFRIED: +#ifdef RENEWAL + val1 = skill_lv*3; //Elemental Resistance RENEWAL reword + val2 = skill_lv*5; //Status ailment resistance RENEWAL rework +#else val1 = 55 + skill_lv*5; //Elemental Resistance val2 = skill_lv*10; //Status ailment resistance +#endif break; case WE_CALLPARTNER: if (sd) val1 = sd->status.partner_id; @@ -13919,7 +14021,9 @@ static int skill_unit_onplace_timer(struct skill_unit *src, struct block_list *b case HT_FREEZINGTRAP: case HT_BLASTMINE: case HT_CLAYMORETRAP: +#ifndef RENEWAL case HW_GRAVITATION: +#endif case SA_DELUGE: case SA_VOLCANO: case SA_VIOLENTGALE: @@ -14027,8 +14131,10 @@ static int skill_unit_onplace_timer(struct skill_unit *src, struct block_list *b break; case UNT_MAGNUS: +#ifndef RENEWAL if (!battle->check_undead(tstatus->race,tstatus->def_ele) && tstatus->race!=RC_DEMON) break; +#endif skill->attack(BF_MAGIC,ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,0); break; @@ -14061,7 +14167,7 @@ static int skill_unit_onplace_timer(struct skill_unit *src, struct block_list *b } break; /** - * The storm gust counter was dropped in renewal + * The storm gust counter was dropped in RENEWAL **/ #ifndef RENEWAL case WZ_STORMGUST: //SG counter does not reset per stormgust. IE: One hit from a SG and two hits from another will freeze you. @@ -14847,7 +14953,9 @@ static int skill_unit_onleft(uint16 skill_id, struct block_list *bl, int64 tick) case SA_DELUGE: case SA_VIOLENTGALE: case CG_HERMODE: +#ifndef RENEWAL case HW_GRAVITATION: +#endif case NJ_SUITON: case SC_MAELSTROM: case EL_WATER_BARRIER: @@ -17046,7 +17154,11 @@ static struct skill_condition skill_get_requirement(struct map_session_data *sd, switch( sc->data[SC_COMBOATTACK]->val1 ) { case MO_COMBOFINISH: +#ifdef RENEWAL + req.spiritball = 1; //RENEWAL buff +#else req.spiritball = 4; +#endif break; case CH_TIGERFIST: req.spiritball = 3; @@ -17152,12 +17264,13 @@ static int skill_castfix(struct block_list *bl, uint16 skill_id, uint16 skill_lv //ShowInfo("Castime castfix = %d\n",time); return time; } - /*========================================== * Does cast-time reductions based on sc data. *------------------------------------------*/ + static int skill_castfix_sc(struct block_list *bl, int time) { +#ifndef RENEWAL_CAST ///seems like this is only used for pre-RENEWAL cast, there fore it's better to keep it separated. struct status_change *sc = status->get_sc(bl); if( time < 0 ) @@ -17185,12 +17298,12 @@ static int skill_castfix_sc(struct block_list *bl, int time) time -= time * sc->data[SC_POEMBRAGI]->val2 / 100; if (sc->data[SC_SKF_CAST] != NULL) time -= time * sc->data[SC_SKF_CAST]->val1 / 100; - if (sc->data[SC_IZAYOI]) - time -= time * 50 / 100; + } time = max(time, 0); //ShowInfo("Castime castfix_sc = %d\n",time); +#endif return time; } @@ -17254,7 +17367,9 @@ static int skill_vfcastfix(struct block_list *bl, double time, uint16 skill_id, // Variable cast reduction bonuses if (sc->data[SC_SUFFRAGIUM]) { VARCAST_REDUCTION(sc->data[SC_SUFFRAGIUM]->val2); - status_change_end(bl, SC_SUFFRAGIUM, INVALID_TIMER); + #ifndef RENEWAL + status_change_end(bl, SC_SUFFRAGIUM, INVALID_TIMER); //RENEWAL rebalance removed the condition of only 1 cast + #endif } if (sc->data[SC_MEMORIZE]) { VARCAST_REDUCTION(50); @@ -17792,7 +17907,12 @@ static int skill_autospell(struct map_session_data *sd, uint16 skill_id) lv=pc->checkskill(sd,skill_id); if(!skill_lv || !lv) return 0; // Player must learn the skill before doing auto-spell [Lance] - +#ifdef RENEWAL + if((skill_id==MG_COLDBOLT || skill_id==MG_FIREBOLT || skill_id==MG_LIGHTNINGBOLT) && (sd->sc.data[SC_SOULLINK] && sd->sc.data[SC_SOULLINK]->val2 == SL_SAGE)) + maxlv = 10; //Soul Linker bonus. [Skotlex] + else + maxlv = skill_lv/2; +#else if(skill_id==MG_NAPALMBEAT) maxlv=3; else if(skill_id==MG_COLDBOLT || skill_id==MG_FIREBOLT || skill_id==MG_LIGHTNINGBOLT){ if (sd->sc.data[SC_SOULLINK] && sd->sc.data[SC_SOULLINK]->val2 == SL_SAGE) @@ -17812,7 +17932,7 @@ static int skill_autospell(struct map_session_data *sd, uint16 skill_id) } else if(skill_id==MG_FROSTDIVER) maxlv=1; else return 0; - +#endif if(maxlv > lv) maxlv = lv; diff --git a/src/map/status.c b/src/map/status.c index aaaf62c2af4..9c7acdbda21 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -974,7 +974,9 @@ static int status_check_skilluse(struct block_list *src, struct block_list *targ switch (skill_id) { //Usable skills while hiding. case TF_HIDING: case AS_GRIMTOOTH: - case RG_BACKSTAP: +#ifndef RENEWAL //backstab rework cant be used while hiding + case RG_BACKSTAP: +#endif case RG_RAID: case NJ_SHADOWJUMP: case NJ_KIRIKAGE: @@ -1913,7 +1915,6 @@ static int status_calc_pc_(struct map_session_data *sd, enum e_status_calc_opt o if ((pc->checkskill(sd,SU_SPRITEMABLE)) > 0) bstatus->max_hp += 1000; - // Apply relative modifiers from equipment if(sd->hprate < 0) sd->hprate = 0; @@ -1926,7 +1927,6 @@ static int status_calc_pc_(struct map_session_data *sd, enum e_status_calc_opt o bstatus->max_hp = battle_config.max_hp; else if(!bstatus->max_hp) bstatus->max_hp = 1; - // ----- SP MAX CALCULATION ----- // Basic MaxSP value @@ -1948,7 +1948,12 @@ static int status_calc_pc_(struct map_session_data *sd, enum e_status_calc_opt o bstatus->max_sp += 30 * skill_lv; if ((pc->checkskill(sd,SU_SPRITEMABLE)) > 0) bstatus->max_sp += 100; - +#ifdef RENEWAL + if ((skill_lv = pc->checkskill(sd, BA_MUSICALLESSON)) > 0) + bstatus->max_sp += (int64)bstatus->max_sp * skill_lv / 100; + if((skill_lv = pc->checkskill(sd,DC_DANCINGLESSON)) > 0) + bstatus->max_sp += (int64)bstatus->max_sp * skill_lv/100; +#endif // Apply relative modifiers from equipment if(sd->sprate < 0) sd->sprate = 0; @@ -2004,9 +2009,9 @@ static int status_calc_pc_(struct map_session_data *sd, enum e_status_calc_opt o sd->critical_rate = 0; if(sd->critical_rate != 100) bstatus->cri = bstatus->cri * sd->critical_rate/100; + if (pc->checkskill(sd, SU_POWEROFLIFE) > 0) bstatus->cri += 20; - if(sd->flee2_rate < 0) sd->flee2_rate = 0; if(sd->flee2_rate != 100) @@ -2050,6 +2055,17 @@ static int status_calc_pc_(struct map_session_data *sd, enum e_status_calc_opt o bstatus->flee += (skill_lv*3)>>1; if (pc->checkskill(sd, SU_POWEROFLIFE) > 0) bstatus->flee += 20; + + // ----- CRITICAL CALCULATION ----- +#ifdef RENEWAL + if ((skill_lv = pc->checkskill(sd, DC_DANCINGLESSON)) > 0) + bstatus->cri += skill_lv * 10; + if ((skill_lv = pc->checkskill(sd, PR_MACEMASTERY)) > 0 && (sd->weapontype == W_MACE || sd->weapontype == W_2HMACE)) + bstatus->cri += skill_lv * 10; +#endif + + + // ----- EQUIPMENT-DEF CALCULATION ----- // Apply relative modifiers from equipment @@ -2192,7 +2208,6 @@ static int status_calc_pc_(struct map_session_data *sd, enum e_status_calc_opt o sd->subrace[RC_DRAGON] += skill_lv; #endif } - if ((skill_lv = pc->checkskill(sd, AB_EUCHARISTICA)) > 0) { sd->right_weapon.addrace[RC_DEMON] += skill_lv; sd->right_weapon.addele[ELE_DARK] += skill_lv; @@ -2304,7 +2319,17 @@ static int status_calc_pc_(struct map_session_data *sd, enum e_status_calc_opt o sd->magic_addele[ELE_WIND] += 25; if (sc->data[SC_EARTH_INSIGNIA] && sc->data[SC_EARTH_INSIGNIA]->val1 == 3) sd->magic_addele[ELE_EARTH] += 25; - +#ifdef RENEWAL //renewal endow buff + if (sc->data[SC_PROPERTYFIRE]) + sd->magic_addele[ELE_FIRE] += sc->data[SC_PROPERTYFIRE]->val1; + if (sc->data[SC_PROPERTYWATER]) + sd->magic_addele[ELE_WATER] += sc->data[SC_PROPERTYWATER]->val1; + if (sc->data[SC_PROPERTYWIND]) + sd->magic_addele[ELE_WIND] += sc->data[SC_PROPERTYWIND]->val1; + if (sc->data[SC_PROPERTYGROUND]) + sd->magic_addele[ELE_EARTH] += sc->data[SC_PROPERTYGROUND]->val1; + //NEW BASILICA REWORK SHOULD BE PUT HERE PROBABLY +#endif // Geffen Scrolls if (sc->data[SC_SKELSCROLL]) { #ifdef RENEWAL @@ -2351,7 +2376,12 @@ static int status_calc_pc_(struct map_session_data *sd, enum e_status_calc_opt o sd->right_weapon.addrace[RC_DEMON] += sc->data[SC_PHI_DEMON]->val1; sd->left_weapon.addrace[RC_DEMON] += sc->data[SC_PHI_DEMON]->val1; } +#ifdef RENEWAL + if (sc->data[SC_FORTUNE]) + sd->bonus.crit_atk_rate += sc->data[SC_FORTUNE]->val1 * 2 / 10; +#endif } + status->copy(&sd->battle_status, bstatus); // ----- CLIENT-SIDE REFRESH ----- @@ -3644,6 +3674,13 @@ static int status_base_amotion_pc(struct map_session_data *sd, struct status_dat val += (skill_lv - 1) / 2 + 1; if ( (skill_lv = pc->checkskill(sd, GS_SINGLEACTION)) > 0 ) val += ((skill_lv + 1) / 2); +#ifdef RENEWAL + if ((skill_lv = pc->checkskill(sd, BA_MUSICALLESSON)) > 0) + val += skill_lv; + if ((skill_lv = pc->checkskill(sd, RG_PLAGIARISM)) > 0) + val += skill_lv; +#endif + amotion = ((int)(temp + ((float)(status->calc_aspd(&sd->bl, &sd->sc, 1) + val) * st->agi / 200)) - min(amotion, 200)); #else // base weapon delay @@ -4350,7 +4387,10 @@ static int status_calc_batk(struct block_list *bl, struct status_change *sc, int batk += batk * sc->data[SC_SHRIMP]->val2 / 100; if (sc->data[SC_SUNSTANCE] != NULL) batk += batk * sc->data[SC_SUNSTANCE]->val2 / 100; - +#ifdef RENEWAL + if (sc->data[SC_SHOUT]) + batk += 30; //should we use a variable for later changes? +#endif return cap_value(batk, battle_config.batk_min, battle_config.batk_max); } @@ -4533,7 +4573,9 @@ static int status_calc_matk(struct block_list *bl, struct status_change *sc, int matk += sc->data[SC_MTF_MATK]->val1; if (sc->data[SC_MYSTICSCROLL]) matk += matk * sc->data[SC_MYSTICSCROLL]->val1 / 100; - + if (sc->data[SC_VOLCANO]) + matk += sc->data[SC_VOLCANO]->val2; //renewal buff + // Eden Crystal Synthesis if (sc->data[SC_QUEST_BUFF1]) matk += sc->data[SC_QUEST_BUFF1]->val1; @@ -4566,12 +4608,10 @@ static int status_calc_critical(struct block_list *bl, struct status_change *sc, { if (!sc || !sc->count) return cap_value(critical, battle_config.critical_min, battle_config.critical_max); - if (!viewable) { /* some statuses that are hidden in the status window */ return cap_value(critical, battle_config.critical_min, battle_config.critical_max); } - if (sc->data[SC_CRITICALPERCENT]) critical += sc->data[SC_CRITICALPERCENT]->val2; if (sc->data[SC_FOOD_CRITICALSUCCESSVALUE]) @@ -4589,8 +4629,9 @@ static int status_calc_critical(struct block_list *bl, struct status_change *sc, #ifdef RENEWAL if (sc->data[SC_SPEARQUICKEN]) critical += 3*sc->data[SC_SPEARQUICKEN]->val1 * 10; + if (sc->data[SC_TWOHANDQUICKEN]) + critical += sc->data[SC_TWOHANDQUICKEN]->val4 * 10; #endif - if (sc->data[SC__INVISIBILITY]) critical += sc->data[SC__INVISIBILITY]->val3; if (sc->data[SC__UNLUCKY]) @@ -4660,6 +4701,14 @@ static int status_calc_hit(struct block_list *bl, struct status_change *sc, int hit -= sc->data[SC_HEAT_BARREL]->val4; if (sc->data[SC_SOULFALCON] != NULL) hit += sc->data[SC_SOULFALCON]->val3; +#ifdef RENEWAL + if(sc->data[SC_BLESSING]) + hit += sc->data[SC_BLESSING]->val2 * 2; //hit increase, renewal only + if(sc->data[SC_TWOHANDQUICKEN]) + hit += sc->data[SC_TWOHANDQUICKEN]->val1 * 2; ///Hit bonus, used in renewal only + if(sc->data[SC_ADRENALINE]) + hit += sc->data[SC_ADRENALINE]->val1 * 3 + 5; //hit increase, renewal only +#endif return cap_value(hit, battle_config.hit_min, battle_config.hit_max); } @@ -4906,7 +4955,7 @@ static signed short status_calc_def2(struct block_list *bl, struct status_change /* some statuses that are hidden in the status window */ #ifdef RENEWAL if (sc->data[SC_ASSUMPTIO]) - def2 <<= 1; + def2 += sc->data[SC_ASSUMPTIO]->val1 * 50; //TODO: Assumptio should increase heal received by (skill lvl * 2%) #endif if (sc->data[SC_CAMOUFLAGE]) def2 -= def2 * 5 * (10-sc->data[SC_CAMOUFLAGE]->val4) / 100; @@ -5044,9 +5093,9 @@ static signed short status_calc_mdef2(struct block_list *bl, struct status_chang if(sc->data[SC_MINDBREAKER]) mdef2 -= mdef2 * sc->data[SC_MINDBREAKER]->val3/100; #ifdef RENEWAL - if (sc->data[SC_ASSUMPTIO]) - mdef2 <<= 1; - return (short)cap_value(mdef2,SHRT_MIN,SHRT_MAX); + //if (sc->data[SC_ASSUMPTIO]) + // mdef2 <<= 1; + //return (short)cap_value(mdef2,SHRT_MIN,SHRT_MAX); #else return (short)cap_value(mdef2,1,SHRT_MAX); #endif @@ -5335,7 +5384,6 @@ static short status_calc_aspd(struct block_list *bl, struct status_change *sc, s bonus = 15; else if (sc->data[SC_GS_MADNESSCANCEL] && bonus < 20) bonus = 20; - } else { // ASPD percentage values if (sc->data[SC_DONTFORGETME]) @@ -5403,8 +5451,17 @@ static short status_calc_aspd(struct block_list *bl, struct status_change *sc, s bonus += sc->data[SC_STEAMPACK]->val2; if (sc->data[SC_SKF_ASPD] != NULL) bonus += sc->data[SC_SKF_ASPD]->val1; - } - + #ifdef RENEWAL + if (sc->data[SC_INC_AGI]) + bonus += sc->data[SC_INC_AGI]->val1; + if (sc->data[SC_TWOHANDQUICKEN]) + bonus += sc->data[SC_TWOHANDQUICKEN]->val3; + if(sc->data[SC_ADRENALINE]) + bonus += sc->data[SC_ADRENALINE]->val4; + if(sc->data[SC_SPEARQUICKEN]) + bonus += sc->data[SC_SPEARQUICKEN]->val3; + #endif + } return (bonus + pots); #else return 0; @@ -5427,7 +5484,6 @@ static short status_calc_fix_aspd(struct block_list *bl, struct status_change *s aspd -= sc->data[SC_HEAT_BARREL]->val1 * 10; if (sc->data[SC_SOULSHADOW] != NULL) aspd -= 10 * sc->data[SC_SOULSHADOW]->val2; - if (sc->data[SC_OVERED_BOOST]) // should be final and unmodifiable by any means aspd = (200 - sc->data[SC_OVERED_BOOST]->val3) * 10; return cap_value(aspd, 0, 2000); // will be recap for proper bl anyway @@ -5578,7 +5634,10 @@ static short status_calc_aspd_rate(struct block_list *bl, struct status_change * aspd_rate -= sc->data[SC_SKF_ASPD]->val1 * 10; if (sc->data[SC_STARSTANCE] != NULL) aspd_rate -= 10 * sc->data[SC_STARSTANCE]->val2; - +#ifdef RENEWAL //just in case people want to use classic aspd with renewal. Not going to add the other buffed skills because they are already very strong in classic. + if (sc->data[SC_INC_AGI]) + aspd_rate -= sc->data[SC_INC_AGI]->val1 * 10; +#endif return (short)cap_value(aspd_rate,0,SHRT_MAX); } @@ -5678,6 +5737,10 @@ static unsigned int status_calc_maxhp(struct block_list *bl, struct status_chang maxhp -= maxhp * sc->data[SC_GM_BATTLE2]->val1 / 100; if (sc->data[SC_LUNARSTANCE] != NULL) maxhp += maxhp * sc->data[SC_LUNARSTANCE]->val2 / 100; +#ifdef RENEWAL + if (sc->data[SC_ANGELUS]) + maxhp += sc->data[SC_ANGELUS]->val2 * 10; +#endif return (unsigned int)cap_value(maxhp, 1, UINT_MAX); } @@ -7450,15 +7513,15 @@ static int status_change_start_sub(struct block_list *src, struct block_list *bl total_tick = INFINITE_DURATION; // duration sent to the client should be infinite break; case SC_EDP: // [Celest] - //Chance to Poison enemies. #ifdef RENEWAL_EDP - val2 = ((val1 + 1) / 2 + 2); + val2 = ((val1 + 1) / 2 + 2); //Chance to Poison enemies. + val3 = 150 + val1 * 30; //From rathena and iROwiki = dmg *(2.5 + (edp level * .3)). Since we are adding damage in the calculations, the formula for renewal is 150+30*lvl #else - val2 = val1 + 2; -#endif + val2 = val1 + 2; //Chance to Poison enemies. val3 = 50 * (val1 + 1); //Damage increase (+50 +50*lv%) - if( sd )//[Ind] - iROwiki says each level increases its duration by 3 seconds - total_tick += pc->checkskill(sd,GC_RESEARCHNEWPOISON)*3000; +#endif + if (sd && pc->checkskill(sd,GC_RESEARCHNEWPOISON) > 0) //[Ind] - iROwiki says each level increases its duration by 3 seconds >[gbasso] updated in 2022 to researchlvl*15 + 30sec + total_tick += 30000 + pc->checkskill(sd, GC_RESEARCHNEWPOISON) * 15000; break; case SC_POISONREACT: val2=(val1+1)/2 + val1/10; // Number of counters [Skotlex] @@ -7555,7 +7618,14 @@ static int status_change_start_sub(struct block_list *src, struct block_list *bl //Val1 Skill LV of Autospell //Val2 Skill ID to cast //Val3 Max Lv to cast + #ifdef RENEWAL + val3 = val1/2; //idk if it is needed, already done this in skill.c + if (val3<1) + val3 =1; + val4 = val1*2; //Chance of casting + #else val4 = 5 + val1*2; //Chance of casting + #endif break; case SC_VOLCANO: val2 = val1*10; //Watk increase @@ -7591,18 +7661,19 @@ static int status_change_start_sub(struct block_list *src, struct block_list *bl break; case SC_ONEHANDQUICKEN: case SC_TWOHANDQUICKEN: - val2 = 300; + val2 = 300; //"flat" aspd bonus + val3 = 10; //%aspd bonus, used in Renewal only + val4 = val1 + 2; //%Crit rate bonus, used in Renewal only, it is x10 in calc if (val1 > 10) //For boss casted skills [Skotlex] val2 += 20*(val1-10); break; case SC_MER_QUICKEN: val2 = 300; break; - #ifndef RENEWAL_ASPD case SC_SPEARQUICKEN: val2 = 200+10*val1; + val3 = 10; //used in renewal break; - #endif case SC_DANCING: //val1 : Skill ID + LV //val2 : Skill Group of the Dance. @@ -8081,15 +8152,21 @@ static int status_change_start_sub(struct block_list *src, struct block_list *bl case SC_ADRENALINE2: case SC_ADRENALINE: val3 = (val2) ? 300 : 200; // aspd increase + val4 = 10; //%aspd increase, used in renewal only FALLTHROUGH case SC_WEAPONPERFECT: if(sd && pc->checkskill(sd,BS_HILTBINDING)>0) total_tick += total_tick / 10; break; case SC_LKCONCENTRATION: - val2 = 5*val1; //Batk/Watk Increase val3 = 10*val1; //Hit Increase + #ifdef RENEWAL + val2 = 5 + 2*val1; //Batk/Watk Increase >>RENEWAL changed + val4 = 5 + 2*val1; //Def reduction >>RENEWAL changed + #else + val2 = 5*val1; //Batk/Watk Increase val4 = 5*val1; //Def reduction + #endif sc_start(src, bl, SC_ENDURE, 100, 1, total_tick, skill_id); // Endure effect break; case SC_ANGELUS: @@ -8262,7 +8339,11 @@ static int status_change_start_sub(struct block_list *src, struct block_list *bl val2 = val1*10; //Actual boost (since 100% = 1000) break; case SC_SUFFRAGIUM: +#ifdef RENEWAL + val2 = 5 + 5 * val1; //Speed cast decrease +#else val2 = 15 * val1; //Speed cast decrease +#endif break; case SC_HEALPLUS: if (val1 < 1) @@ -10225,6 +10306,7 @@ static bool status_end_sc_before_start(struct block_list *bl, struct status_data } break; +#ifndef RENEWAL case SC_ASSUMPTIO: status_change_end(bl, SC_KYRIE, INVALID_TIMER); status_change_end(bl, SC_KAITE, INVALID_TIMER); @@ -10232,6 +10314,7 @@ static bool status_end_sc_before_start(struct block_list *bl, struct status_data case SC_KAITE: status_change_end(bl, SC_ASSUMPTIO, INVALID_TIMER); break; +#endif case SC_CARTBOOST: if (sc->data[SC_DEC_AGI] != NULL || sc->data[SC_ADORAMUS] != NULL) { // Cancel Decrease Agi, but take no further effect [Skotlex] @@ -11916,7 +11999,9 @@ static int status_change_timer(int tid, int64 tick, int id, intptr_t data) case BD_DRUMBATTLEFIELD: case BD_RINGNIBELUNGEN: case BD_SIEGFRIED: +#ifndef RENEWAL case BA_DISSONANCE: +#endif case BA_ASSASSINCROSS: case DC_UGLYDANCE: s=3;