diff --git a/db/import-tmpl/skill_db.txt b/db/import-tmpl/skill_db.txt index a63cb88e85..929922261f 100644 --- a/db/import-tmpl/skill_db.txt +++ b/db/import-tmpl/skill_db.txt @@ -23,47 +23,48 @@ // 10 Cast interrupted when hit? // 11 defense-reduction rate during cast. // 12 inf2 (skill information 2): -// 0x00001- quest skill -// 0x00002- npc skill -// 0x00004- wedding skill -// 0x00008- spirit skill -// 0x00010- guild skill -// 0x00020- song/dance -// 0x00040- ensemble skill -// 0x00080- trap -// 0x00100- skill that damages/targets yourself -// 0x00200- cannot be casted on self (if inf = 4, auto-select target skill) -// 0x00400- usable only on party-members (and enemies if skill is offensive) -// 0x00800- usable only on guild-mates (and enemies if skill is offensive) -// 0x01000- disable usage on enemies (for non-offensive skills). -// 0x02000- free -// 0x04000- chorus skill -// 0x08000- skill that ignore bg reduction -// 0x10000- skill that ignore gvg reduction -// 0x20000- makes 'self'/'place' skill cannot be casted/placed when near NPC (see 'db/skill_nonearnpc_db.txt' for more options) +// 0x00001 - quest skill +// 0x00002 - npc skill +// 0x00004 - wedding skill +// 0x00008 - spirit skill +// 0x00010 - guild skill +// 0x00020 - song/dance +// 0x00040 - ensemble skill +// 0x00080 - trap +// 0x00100 - skill that damages/targets yourself +// 0x00200 - cannot be casted on self (if inf = 4, auto-select target skill) +// 0x00400 - usable only on party-members (and enemies if skill is offensive) +// 0x00800 - usable only on guild-mates (and enemies if skill is offensive) +// 0x01000 - disable usage on enemies (for non-offensive skills). +// 0x02000 - free +// 0x04000 - chorus skill +// 0x08000 - skill that ignore bg reduction +// 0x10000 - skill that ignore gvg reduction +// 0x20000 - makes 'self'/'place' skill cannot be casted/placed when near NPC (see 'db/skill_nonearnpc_db.txt' for more options) // 13 maxcount: max amount of skill instances to place on the ground when // player_land_skill_limit/monster_land_skill_limit is enabled. For skills // that attack using a path, this is the path length to be used. // 14 attack type (none, weapon, magic, misc) // 15 Blowcount (amount of tiles skill knockbacks) // 16 inf3 (skill information 3): -// 0x00001- skill ignores land protector (e.g. arrow shower) -// 0x00002- skill that doesn't end camouflage -// 0x00004- usable skills while hiding -// 0x00008- skill that can be use while in dancing state -// 0x00010- skill that could hit emperium -// 0x00020- skill blocked by statis -// 0x00040- skill blocked by kagehumi -// 0x00080- skill range affected by AC_VULTURE -// 0x00100- skill range affected by GS_SNAKEEYE -// 0x00200- skill range affected by NJ_SHADOWJUMP -// 0x00400- skill range affected by WL_RADIUS -// 0x00800- skill range affected by RA_RESEARCHTRAP -// 0x01000- skill that does not affect user that has NC_HOVERING active -// 0x02000- skill that can be using while riding warg -// 0x04000- skill that can't be used while in mado -// 0x08000- skill that can be used to target while under SC__MANHOLE effect -// 0x10000- skill that affects hidden targets +// 0x00001 - skill ignores land protector (e.g. arrow shower) +// 0x00002 - skill that doesn't end camouflage +// 0x00004 - usable skills while hiding +// 0x00008 - skill that can be use while in dancing state +// 0x00010 - skill that could hit emperium +// 0x00020 - skill blocked by statis +// 0x00040 - skill blocked by kagehumi +// 0x00080 - skill range affected by AC_VULTURE +// 0x00100 - skill range affected by GS_SNAKEEYE +// 0x00200 - skill range affected by NJ_SHADOWJUMP +// 0x00400 - skill range affected by WL_RADIUS +// 0x00800 - skill range affected by RA_RESEARCHTRAP +// 0x01000 - skill that does not affect user that has NC_HOVERING active +// 0x02000 - skill that can be using while riding warg +// 0x04000 - skill that can't be used while in mado +// 0x08000 - skill that can be used to target while under SC__MANHOLE effect +// 0x10000 - skill that affects hidden targets +// 0x20000 - skill that affects SC_GLOOMYDAY_SK // 17 Name // 18 Description diff --git a/db/pre-re/skill_db.txt b/db/pre-re/skill_db.txt index a504cc2e86..5e027805d8 100644 --- a/db/pre-re/skill_db.txt +++ b/db/pre-re/skill_db.txt @@ -23,47 +23,48 @@ // 10 Cast interrupted when hit? // 11 defense-reduction rate during cast. // 12 inf2 (skill information 2): -// 0x00001- quest skill -// 0x00002- npc skill -// 0x00004- wedding skill -// 0x00008- spirit skill -// 0x00010- guild skill -// 0x00020- song/dance -// 0x00040- ensemble skill -// 0x00080- trap -// 0x00100- skill that damages/targets yourself -// 0x00200- cannot be casted on self (if inf = 4, auto-select target skill) -// 0x00400- usable only on party-members (and enemies if skill is offensive) -// 0x00800- usable only on guild-mates (and enemies if skill is offensive) -// 0x01000- disable usage on enemies (for non-offensive skills). -// 0x02000- available skill for SC_AUTOSHADOWSPELL -// 0x04000- chorus skill -// 0x08000- skill that ignore bg reduction -// 0x10000- skill that ignore gvg reduction -// 0x20000- makes 'self'/'place' skill cannot be casted/placed when near NPC (see 'db/skill_nonearnpc_db.txt' for more options) +// 0x00001 - quest skill +// 0x00002 - npc skill +// 0x00004 - wedding skill +// 0x00008 - spirit skill +// 0x00010 - guild skill +// 0x00020 - song/dance +// 0x00040 - ensemble skill +// 0x00080 - trap +// 0x00100 - skill that damages/targets yourself +// 0x00200 - cannot be casted on self (if inf = 4, auto-select target skill) +// 0x00400 - usable only on party-members (and enemies if skill is offensive) +// 0x00800 - usable only on guild-mates (and enemies if skill is offensive) +// 0x01000 - disable usage on enemies (for non-offensive skills). +// 0x02000 - available skill for SC_AUTOSHADOWSPELL +// 0x04000 - chorus skill +// 0x08000 - skill that ignore bg reduction +// 0x10000 - skill that ignore gvg reduction +// 0x20000 - makes 'self'/'place' skill cannot be casted/placed when near NPC (see 'db/skill_nonearnpc_db.txt' for more options) // 13 maxcount: max amount of skill instances to place on the ground when // player_land_skill_limit/monster_land_skill_limit is enabled. For skills // that attack using a path, this is the path length to be used. // 14 attack type (none, weapon, magic, misc) // 15 Blowcount (amount of tiles skill knockbacks) // 16 inf3 (skill information 3): -// 0x00001- skill ignores land protector (e.g. arrow shower) -// 0x00002- skill that doesn't end camouflage -// 0x00004- usable skills while hiding -// 0x00008- skill that can be use while in dancing state -// 0x00010- skill that could hit emperium -// 0x00020- skill blocked by statis -// 0x00040- skill blocked by kagehumi -// 0x00080- skill range affected by AC_VULTURE -// 0x00100- skill range affected by GS_SNAKEEYE -// 0x00200- skill range affected by NJ_SHADOWJUMP -// 0x00400- skill range affected by WL_RADIUS -// 0x00800- skill range affected by RA_RESEARCHTRAP -// 0x01000- skill that does not affect user that has NC_HOVERING active -// 0x02000- skill that can be using while riding warg -// 0x04000- skill that can't be used while in mado -// 0x08000- skill that can be used to target while under SC__MANHOLE effect -// 0x10000- skill that affects hidden targets +// 0x00001 - skill ignores land protector (e.g. arrow shower) +// 0x00002 - skill that doesn't end camouflage +// 0x00004 - usable skills while hiding +// 0x00008 - skill that can be use while in dancing state +// 0x00010 - skill that could hit emperium +// 0x00020 - skill blocked by statis +// 0x00040 - skill blocked by kagehumi +// 0x00080 - skill range affected by AC_VULTURE +// 0x00100 - skill range affected by GS_SNAKEEYE +// 0x00200 - skill range affected by NJ_SHADOWJUMP +// 0x00400 - skill range affected by WL_RADIUS +// 0x00800 - skill range affected by RA_RESEARCHTRAP +// 0x01000 - skill that does not affect user that has NC_HOVERING active +// 0x02000 - skill that can be using while riding warg +// 0x04000 - skill that can't be used while in mado +// 0x08000 - skill that can be used to target while under SC__MANHOLE effect +// 0x10000 - skill that affects hidden targets +// 0x20000 - skill that affects SC_GLOOMYDAY_SK // 17 Name // 18 Description 1,0,0,0,0,0,0,9,0,no,0,0,0,none,0,0x0, NV_BASIC,Basic Skill @@ -144,7 +145,7 @@ // Knight 55,0,0,0,0,0,0,10,0,no,0,0,0,weapon,0,0x0, KN_SPEARMASTERY,Spear Mastery 56,-2,8,1,-1,0,0,10,3,no,0,0,0,weapon,0,0x0, KN_PIERCE,Pierce -57,-2,6,1,-1,0x1,0,10,1,no,0,0,0,weapon,3,0x0, KN_BRANDISHSPEAR,Brandish Spear +57,-2,6,1,-1,0x1,0,10,1,no,0,0,0,weapon,3,0x20000, KN_BRANDISHSPEAR,Brandish Spear 58,-4,6,1,-1,0x2,0,10,1,no,0,0,0,weapon,6,0x0, KN_SPEARSTAB,Spear Stab 59,3:5:7:9:11,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x0, KN_SPEARBOOMERANG,Spear Boomerang 60,0,6,4,0,0x1,0,10,1,no,0,0,0,weapon,0,0x0, KN_TWOHANDQUICKEN,Twohand Quicken @@ -367,7 +368,7 @@ 248,0,0,0,0,0,0,10,0,no,0,0,0,none,0,0x0, CR_TRUST,Faith 249,0,6,4,0,0x1,0,10,1,no,0,0,0,weapon,0,0x0, CR_AUTOGUARD,Guard 250,3,6,1,0,0,0,5,1,no,0,0,0,weapon,5:6:7:8:9,0x0, CR_SHIELDCHARGE,Smite -251,3:5:7:9:11,6,1,0,0,0,5,1,no,0,0,0,weapon,0,0x0, CR_SHIELDBOOMERANG,Shield Boomerang +251,3:5:7:9:11,6,1,0,0,0,5,1,no,0,0,0,weapon,20000,0x0, CR_SHIELDBOOMERANG,Shield Boomerang 252,0,6,4,0,0,0,10,1,no,0,0,0,weapon,0,0x0, CR_REFLECTSHIELD,Shield Reflect 253,-2,8,1,6,0,0,10,-2,no,0,0,0,weapon,0,0x0, CR_HOLYCROSS,Holy Cross 254,5,6,4,6,0x48,0,10,1,no,33,0x100,0,magic,0,0x0, CR_GRANDCROSS,Grand Cross @@ -576,7 +577,7 @@ //**** // Lord Knight -397,5,8,1,-1,0x20,0,5,5,no,0,0,0,weapon,0,0x0, LK_SPIRALPIERCE,Spiral Pierce +397,5,8,1,-1,0x20,0,5,5,no,0,0,0,weapon,0,0x20000, LK_SPIRALPIERCE,Spiral Pierce 398,4,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x0, LK_HEADCRUSH,Traumatic Blow 399,4,6,1,-1,0,0,10,1,no,0,0,0,weapon,0,0x0, LK_JOINTBEAT,Vital Strike @@ -695,7 +696,7 @@ 477,0,6,4,0,0x1,0,10,1,no,0,0,0,weapon,0,0x4000, WS_WEAPONREFINE,Upgrade Weapon 478,3,6,2,0,0x3,3,10,1,no,0,0,0,none,0,0x0, CR_SLIMPITCHER,Aid Condensed Potion 479,1,6,16,0,0x1,0,5,1,yes,0,0,0,weapon,0,0x0, CR_FULLPROTECTION,Full Protection -480,5,8,1,-1,0,0,5,5,no,0,0,0,weapon,0,0x0, PA_SHIELDCHAIN,Shield Chain +480,5,8,1,-1,0,0,5,5,no,0,0,0,weapon,0,0x20000, PA_SHIELDCHAIN,Shield Chain 481,0,0,0,0,0,0,5,0,no,0,0,0,none,0,0x0, HP_MANARECHARGE,Mana Recharge 482,0,6,4,0,0x1,0,5,1,no,0,0,0,magic,0,0x0, PF_DOUBLECASTING,Double Casting 483,16,6,2,0,0x1,1:2:3:4:5,1,1,no,0,0,0,none,0,0x20, HW_GANBANTEIN,Ganbantein @@ -884,7 +885,7 @@ 2001,0,6,4,0,0x1,0,5,1,yes,0,0,0,none,0,0x0, RK_ENCHANTBLADE,Enchant Blade 2002,7:8:9:10:11,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x0, RK_SONICWAVE,Sonic Wave 2003,0,6,4,0,0x1,0,10,1,no,0,0,0,weapon,0,0x0, RK_DEATHBOUND,Death Bound -2004,5,8,1,-1,0,0,10,-5,no,0,0,0,weapon,0,0x0, RK_HUNDREDSPEAR,Hundred Spear +2004,5,8,1,-1,0,0,10,-5,no,0,0,0,weapon,0,0x20000, RK_HUNDREDSPEAR,Hundred Spear 2005,1,6,2,4,0x2,2,5,1,no,0,0,0,weapon,3,0x0, RK_WINDCUTTER,Wind Cutter 2006,0,6,4,-1,0x2,5,5,1,no,0,0,0,weapon,0,0x0, RK_IGNITIONBREAK,Ignition Break 2007,0,0,0,0,0,0,5,0,no,0,0,0,none,0,0x0, RK_DRAGONTRAINING,Dragon Training diff --git a/db/re/skill_db.txt b/db/re/skill_db.txt index 53b11b6653..ddf8a7e9b8 100644 --- a/db/re/skill_db.txt +++ b/db/re/skill_db.txt @@ -23,47 +23,48 @@ // 10 Cast interrupted when hit? // 11 defense-reduction rate during cast. // 12 inf2 (skill information 2): -// 0x00001- quest skill -// 0x00002- npc skill -// 0x00004- wedding skill -// 0x00008- spirit skill -// 0x00010- guild skill -// 0x00020- song/dance -// 0x00040- ensemble skill -// 0x00080- trap -// 0x00100- skill that damages/targets yourself -// 0x00200- cannot be casted on self (if inf = 4, auto-select target skill) -// 0x00400- usable only on party-members (and enemies if skill is offensive) -// 0x00800- usable only on guild-mates (and enemies if skill is offensive) -// 0x01000- disable usage on enemies (for non-offensive skills). -// 0x02000- available skill for SC_AUTOSHADOWSPELL -// 0x04000- chorus skill -// 0x08000- skill that ignore bg reduction -// 0x10000- skill that ignore gvg reduction -// 0x20000- makes 'self'/'place' skill cannot be casted/placed when near NPC (see 'db/skill_nonearnpc_db.txt' for more options) +// 0x00001 - quest skill +// 0x00002 - npc skill +// 0x00004 - wedding skill +// 0x00008 - spirit skill +// 0x00010 - guild skill +// 0x00020 - song/dance +// 0x00040 - ensemble skill +// 0x00080 - trap +// 0x00100 - skill that damages/targets yourself +// 0x00200 - cannot be casted on self (if inf = 4, auto-select target skill) +// 0x00400 - usable only on party-members (and enemies if skill is offensive) +// 0x00800 - usable only on guild-mates (and enemies if skill is offensive) +// 0x01000 - disable usage on enemies (for non-offensive skills). +// 0x02000 - available skill for SC_AUTOSHADOWSPELL +// 0x04000 - chorus skill +// 0x08000 - skill that ignore bg reduction +// 0x10000 - skill that ignore gvg reduction +// 0x20000 - makes 'self'/'place' skill cannot be casted/placed when near NPC (see 'db/skill_nonearnpc_db.txt' for more options) // 13 maxcount: max amount of skill instances to place on the ground when // player_land_skill_limit/monster_land_skill_limit is enabled. For skills // that attack using a path, this is the path length to be used. // 14 attack type (none, weapon, magic, misc) // 15 Blowcount (amount of tiles skill knockbacks) // 16 inf3 (skill information 3): -// 0x00001- skill ignores land protector (e.g. arrow shower) -// 0x00002- skill that doesn't end camouflage -// 0x00004- usable skills while hiding -// 0x00008- skill that can be use while in dancing state -// 0x00010- skill that could hit emperium -// 0x00020- skill blocked by statis -// 0x00040- skill blocked by kagehumi -// 0x00080- skill range affected by AC_VULTURE -// 0x00100- skill range affected by GS_SNAKEEYE -// 0x00200- skill range affected by NJ_SHADOWJUMP -// 0x00400- skill range affected by WL_RADIUS -// 0x00800- skill range affected by RA_RESEARCHTRAP -// 0x01000- skill that does not affect user that has NC_HOVERING active -// 0x02000- skill that can be using while riding warg -// 0x04000- skill that can't be used while in mado -// 0x08000- skill that can be used to target while under SC__MANHOLE effect -// 0x10000- skill that affects hidden targets +// 0x00001 - skill ignores land protector (e.g. arrow shower) +// 0x00002 - skill that doesn't end camouflage +// 0x00004 - usable skills while hiding +// 0x00008 - skill that can be use while in dancing state +// 0x00010 - skill that could hit emperium +// 0x00020 - skill blocked by statis +// 0x00040 - skill blocked by kagehumi +// 0x00080 - skill range affected by AC_VULTURE +// 0x00100 - skill range affected by GS_SNAKEEYE +// 0x00200 - skill range affected by NJ_SHADOWJUMP +// 0x00400 - skill range affected by WL_RADIUS +// 0x00800 - skill range affected by RA_RESEARCHTRAP +// 0x01000 - skill that does not affect user that has NC_HOVERING active +// 0x02000 - skill that can be using while riding warg +// 0x04000 - skill that can't be used while in mado +// 0x08000 - skill that can be used to target while under SC__MANHOLE effect +// 0x10000 - skill that affects hidden targets +// 0x20000 - skill that affects SC_GLOOMYDAY_SK // 17 Name // 18 Description 1,0,0,0,0,0,0,9,0,no,0,0,0,none,0,0x0, NV_BASIC,Basic Skill @@ -144,7 +145,7 @@ // Knight 55,0,0,0,0,0,0,10,0,no,0,0,0,weapon,0,0x0, KN_SPEARMASTERY,Spear Mastery 56,-2,8,1,-1,0,0,10,3,no,0,0,0,weapon,0,0x0, KN_PIERCE,Pierce -57,-2,6,1,-1,0x1,0,10,1,no,0,0,0,weapon,3,0x0, KN_BRANDISHSPEAR,Brandish Spear +57,-2,6,1,-1,0x1,0,10,1,no,0,0,0,weapon,3,0x20000, KN_BRANDISHSPEAR,Brandish Spear 58,-4,6,1,-1,0x2,0,10,1,no,0,0,0,weapon,6,0x0, KN_SPEARSTAB,Spear Stab 59,3:5:7:9:11,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x0, KN_SPEARBOOMERANG,Spear Boomerang 60,0,6,4,0,0x1,0,10,1,no,0,0,0,weapon,0,0x0, KN_TWOHANDQUICKEN,Twohand Quicken @@ -367,7 +368,7 @@ 248,0,0,0,0,0,0,10,0,no,0,0,0,none,0,0x0, CR_TRUST,Faith 249,0,6,4,0,0x1,0,10,1,no,0,0,0,weapon,0,0x0, CR_AUTOGUARD,Guard 250,3,6,1,0,0,0,5,1,no,0,0,0,weapon,5:6:7:8:9,0x0, CR_SHIELDCHARGE,Smite -251,3:5:7:9:11,6,1,0,0,0,5,1,no,0,0,0,weapon,0,0x0, CR_SHIELDBOOMERANG,Shield Boomerang +251,3:5:7:9:11,6,1,0,0,0,5,1,no,0,0,0,weapon,0,0x20000, CR_SHIELDBOOMERANG,Shield Boomerang 252,0,6,4,0,0,0,10,1,no,0,0,0,weapon,0,0x0, CR_REFLECTSHIELD,Shield Reflect 253,-2,8,1,6,0,0,10,-2,no,0,0,0,weapon,0,0x0, CR_HOLYCROSS,Holy Cross 254,5,6,4,6,0x48,0,10,1,no,33,0x100,0,magic,0,0x0, CR_GRANDCROSS,Grand Cross @@ -576,7 +577,7 @@ //**** // Lord Knight -397,5,8,1,-1,0,0,5,5,no,0,0,0,weapon,0,0x0, LK_SPIRALPIERCE,Spiral Pierce +397,5,8,1,-1,0,0,5,5,no,0,0,0,weapon,0,0x20000, LK_SPIRALPIERCE,Spiral Pierce 398,4,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x0, LK_HEADCRUSH,Traumatic Blow 399,4,6,1,-1,0,0,10,1,no,0,0,0,weapon,0,0x0, LK_JOINTBEAT,Vital Strike @@ -695,7 +696,7 @@ 477,0,6,4,0,0x1,0,10,1,no,0,0,0,weapon,0,0x4000, WS_WEAPONREFINE,Upgrade Weapon 478,3,6,2,0,0x3,3,10,1,no,0,0,0,none,0,0x0, CR_SLIMPITCHER,Aid Condensed Potion 479,1,6,16,0,0x1,0,5,1,yes,0,0,0,weapon,0,0x0, CR_FULLPROTECTION,Full Protection -480,5,8,1,-1,0,0,5,5,no,0,0,0,weapon,0,0x0, PA_SHIELDCHAIN,Shield Chain +480,5,8,1,-1,0,0,5,5,no,0,0,0,weapon,0,0x20000, PA_SHIELDCHAIN,Shield Chain 481,0,0,0,0,0,0,5,0,no,0,0,0,none,0,0x0, HP_MANARECHARGE,Mana Recharge 482,0,6,4,0,0x1,0,5,1,no,0,0,0,magic,0,0x0, PF_DOUBLECASTING,Double Casting 483,16,6,2,0,0x1,1:2:3:4:5,1,1,no,0,0,0,none,0,0x20, HW_GANBANTEIN,Ganbantein @@ -884,7 +885,7 @@ 2001,0,6,4,0,0x1,0,5,1,yes,0,0,0,none,0,0x0, RK_ENCHANTBLADE,Enchant Blade 2002,7:8:9:10:11,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x0, RK_SONICWAVE,Sonic Wave 2003,0,6,4,0,0x1,0,10,1,no,0,0,0,weapon,0,0x0, RK_DEATHBOUND,Death Bound -2004,5,8,1,-1,0,0,10,-5,no,0,0,0,weapon,0,0x0, RK_HUNDREDSPEAR,Hundred Spear +2004,5,8,1,-1,0,0,10,-5,no,0,0,0,weapon,0,0x20000, RK_HUNDREDSPEAR,Hundred Spear 2005,1,6,2,4,0x2,2,5,1,no,0,0,0,weapon,3,0x0, RK_WINDCUTTER,Wind Cutter 2006,0,6,4,-1,0x2,5,5,1,no,0,0,0,weapon,0,0x0, RK_IGNITIONBREAK,Ignition Break 2007,0,0,0,0,0,0,5,0,no,0,0,0,none,0,0x0, RK_DRAGONTRAINING,Dragon Training @@ -1069,7 +1070,7 @@ 2307,11,8,1,-1,0,2,5,1,no,0,0,10,weapon,0,0x0, LG_CANNONSPEAR,Cannon Spear 2308,7,6,1,-1,0,0,10,1,no,0,0,0,weapon,0,0x0, LG_BANISHINGPOINT,Banishing Point 2309,0,6,4,0,0x3,2,3,1,no,0,0,0,none,0,0x0, LG_TRAMPLE,Trample -2310,1,6,1,0,0,0,5,1,no,0,0,0,weapon,0,0x0, LG_SHIELDPRESS,Shield Press +2310,1,6,1,0,0,0,5,1,no,0,0,0,weapon,0,0x20000, LG_SHIELDPRESS,Shield Press 2311,0,6,4,0,0x3,3,5,1,no,0,0,0,none,0,0x0, LG_REFLECTDAMAGE,Reflect Damage 2312,5,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x0, LG_PINPOINTATTACK,Pinpoint Attack 2313,0,6,4,0,0x1,0,5,1,yes,0,0,0,none,0,0x0, LG_FORCEOFVANGUARD,Force of Vanguard diff --git a/src/map/battle.c b/src/map/battle.c index 27a241f921..91759494fe 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -2706,6 +2706,11 @@ static struct Damage battle_calc_attack_masteries(struct Damage wd, struct block if (sc) { // Status change considered as masteries uint8 i; +#ifdef RENEWAL + if (sc->data[SC_NIBELUNGEN]) // With renewal, the level 4 weapon limitation has been removed + ATK_ADD(wd.masteryAtk, wd.masteryAtk2, sc->data[SC_NIBELUNGEN]->val2); +#endif + if (sc->data[SC_MIRACLE]) i = 2; //Star anger else @@ -4141,18 +4146,22 @@ static int battle_calc_skill_constant_addition(struct Damage wd, struct block_li * Initial refactoring by Baalberith * Refined and optimized by helvetica */ -struct Damage battle_attack_sc_bonus(struct Damage wd, struct block_list *src, uint16 skill_id) +struct Damage battle_attack_sc_bonus(struct Damage wd, struct block_list *src, struct block_list *target, uint16 skill_id) { struct map_session_data *sd = BL_CAST(BL_PC, src); struct status_change *sc = status_get_sc(src); struct status_data *sstatus = status_get_status_data(src); +#ifdef RENEWAL + struct status_data *tstatus = status_get_status_data(target); +#endif + int inf3 = skill_get_inf3(skill_id); - if( sd ) { + if (sd) { int type; // Kagerou/Oboro Earth Charm effect +15% wATK ARR_FIND(1, 6, type, sd->talisman[type] > 0); - if( type == 2 ) { + if (type == 2) { //KO Earth Charm effect +15% wATK ATK_ADDRATE(wd.damage, wd.damage2, 15 * sd->talisman[type]); #ifdef RENEWAL ATK_ADDRATE(wd.weaponAtk, wd.weaponAtk2, 15 * sd->talisman[type]); @@ -4163,36 +4172,42 @@ struct Damage battle_attack_sc_bonus(struct Damage wd, struct block_list *src, u //The following are applied on top of current damage and are stackable. if (sc) { #ifdef RENEWAL - if (sc->data[SC_WATK_ELEMENT]) - if (skill_id != ASC_METEORASSAULT) - ATK_ADDRATE(wd.weaponAtk, wd.weaponAtk2, sc->data[SC_WATK_ELEMENT]->val2); -#else - if( sc->data[SC_TRUESIGHT] ) - ATK_ADDRATE(wd.damage, wd.damage2, 2*sc->data[SC_TRUESIGHT]->val1); -#endif - if( sc->data[SC_GLOOMYDAY_SK] && - ( skill_id == LK_SPIRALPIERCE || skill_id == KN_BRANDISHSPEAR || - skill_id == CR_SHIELDBOOMERANG || skill_id == PA_SHIELDCHAIN || - skill_id == RK_HUNDREDSPEAR || skill_id == LG_SHIELDPRESS ) ) { - ATK_ADDRATE(wd.damage, wd.damage2, sc->data[SC_GLOOMYDAY_SK]->val2); -#ifdef RENEWAL - ATK_ADDRATE(wd.weaponAtk, wd.weaponAtk2, sc->data[SC_GLOOMYDAY_SK]->val2); -#endif + if (sc->data[SC_WATK_ELEMENT] && skill_id != ASC_METEORASSAULT) + ATK_ADDRATE(wd.weaponAtk, wd.weaponAtk2, sc->data[SC_WATK_ELEMENT]->val2); + if (sc->data[SC_IMPOSITIO]) + ATK_ADD(wd.equipAtk, wd.equipAtk2, sc->data[SC_IMPOSITIO]->val2); + if (sc->data[SC_VOLCANO]) + ATK_ADD(wd.equipAtk, wd.equipAtk2, sc->data[SC_VOLCANO]->val2); + if (sc->data[SC_DRUMBATTLE]) { + if (tstatus->size == SZ_SMALL) { + ATK_ADD(wd.equipAtk, wd.equipAtk2, sc->data[SC_DRUMBATTLE]->val2); + } else if (tstatus->size == SZ_MEDIUM) + ATK_ADD(wd.equipAtk, wd.equipAtk2, 10 * sc->data[SC_DRUMBATTLE]->val1); } + if (sc->data[SC_MADNESSCANCEL]) + ATK_ADD(wd.equipAtk, wd.equipAtk2, 100); + if (sc->data[SC_GATLINGFEVER]) { + if (tstatus->size == SZ_SMALL) { + ATK_ADD(wd.equipAtk, wd.equipAtk2, 10 * sc->data[SC_GATLINGFEVER]->val1); + } else if (tstatus->size == SZ_MEDIUM) { + ATK_ADD(wd.equipAtk, wd.equipAtk2, 5 * sc->data[SC_GATLINGFEVER]->val1); + } else if (tstatus->size == SZ_BIG) + ATK_ADD(wd.equipAtk, wd.equipAtk2, sc->data[SC_GATLINGFEVER]->val1); + } +#else + if (sc->data[SC_TRUESIGHT]) + ATK_ADDRATE(wd.damage, wd.damage2, 2 * sc->data[SC_TRUESIGHT]->val1); +#endif if (sc->data[SC_SPIRIT]) { - if(skill_id == AS_SONICBLOW && sc->data[SC_SPIRIT]->val2 == SL_ASSASIN){ - ATK_ADDRATE(wd.damage, wd.damage2, map_flag_gvg(src->m)?25:100); //+25% dmg on woe/+100% dmg on nonwoe -#ifdef RENEWAL - ATK_ADDRATE(wd.weaponAtk, wd.weaponAtk2, map_flag_gvg(src->m)?25:100); //+25% dmg on woe/+100% dmg on nonwoe -#endif - } else if (skill_id == CR_SHIELDBOOMERANG && (sc->data[SC_SPIRIT]->val2 == SL_CRUSADER)) { + if (skill_id == AS_SONICBLOW && sc->data[SC_SPIRIT]->val2 == SL_ASSASIN) { + ATK_ADDRATE(wd.damage, wd.damage2, map_flag_gvg(src->m) ? 25 : 100); //+25% dmg on woe/+100% dmg on nonwoe + RE_ALLATK_ADDRATE(wd, map_flag_gvg(src->m) ? 25 : 100); //+25% dmg on woe/+100% dmg on nonwoe + } else if (skill_id == CR_SHIELDBOOMERANG && sc->data[SC_SPIRIT]->val2 == SL_CRUSADER) { ATK_ADDRATE(wd.damage, wd.damage2, 100); -#ifdef RENEWAL - ATK_ADDRATE(wd.weaponAtk, wd.weaponAtk2, 100); -#endif + RE_ALLATK_ADDRATE(wd, 100); } } - if( sc->data[SC_EDP] ) { + if (sc->data[SC_EDP]) { switch(skill_id) { case AS_SPLASHER: // Pre-Renewal only: Soul Breaker and Meteor Assault ignores EDP @@ -4234,6 +4249,10 @@ struct Damage battle_attack_sc_bonus(struct Damage wd, struct block_list *src, u #endif } } + if (sc->data[SC_GLOOMYDAY_SK] && (inf3&INF3_SC_GLOOMYDAY_SK)) { + ATK_ADDRATE(wd.damage, wd.damage2, sc->data[SC_GLOOMYDAY_SK]->val2); + RE_ALLATK_ADDRATE(wd, sc->data[SC_GLOOMYDAY_SK]->val2); + } if(sc->data[SC_ZENKAI] && sstatus->rhw.ele == sc->data[SC_ZENKAI]->val2) { ATK_ADD(wd.damage, wd.damage2, 200); @@ -4461,14 +4480,13 @@ struct Damage battle_calc_attack_post_defense(struct Damage wd, struct block_lis struct status_change *sc = status_get_sc(src); struct status_data *sstatus = status_get_status_data(src); - //Post skill/vit reduction damage increases - if( sc ) - { //SC skill damages + // Post skill/vit reduction damage increases + if( sc ) { // SC skill damages if(sc->data[SC_AURABLADE] #ifndef RENEWAL && skill_id != LK_SPIRALPIERCE && skill_id != ML_SPIRALPIERCE #endif - ){ + ) { 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 @@ -4481,14 +4499,11 @@ struct Damage battle_calc_attack_post_defense(struct Damage wd, struct block_lis wd = battle_calc_attack_masteries(wd, src, target, skill_id, skill_lv); //Refine bonus - if( sd && battle_skill_stacks_masteries_vvs(skill_id) && skill_id != MO_INVESTIGATE && skill_id != MO_EXTREMITYFIST ) - { // Counts refine bonus multiple times + if( sd && battle_skill_stacks_masteries_vvs(skill_id) && skill_id != MO_INVESTIGATE && skill_id != MO_EXTREMITYFIST ) { // Counts refine bonus multiple times if( skill_id == MO_FINGEROFFENSIVE ) - { ATK_ADD2(wd.damage, wd.damage2, wd.div_*sstatus->rhw.atk2, wd.div_*sstatus->lhw.atk2); - } else { + else ATK_ADD2(wd.damage, wd.damage2, sstatus->rhw.atk2, sstatus->lhw.atk2); - } } #endif //Set to min of 1 @@ -4496,7 +4511,6 @@ struct Damage battle_calc_attack_post_defense(struct Damage wd, struct block_lis if (is_attack_left_handed(src, skill_id) && wd.damage2 < 1) wd.damage2 = 1; switch (skill_id) { - case AS_SONICBLOW: if(sd && pc_checkskill(sd,AS_SONICACCEL)>0) ATK_ADDRATE(wd.damage, wd.damage2, 10); @@ -5029,7 +5043,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src, struct bl } // final attack bonuses that aren't affected by cards - wd = battle_attack_sc_bonus(wd, src, skill_id); + wd = battle_attack_sc_bonus(wd, src, target, skill_id); if (sd) { //monsters, homuns and pets have their damage computed directly wd.damage = wd.statusAtk + wd.weaponAtk + wd.equipAtk + wd.masteryAtk; @@ -5041,7 +5055,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src, struct bl } #else // final attack bonuses that aren't affected by cards - wd = battle_attack_sc_bonus(wd, src, skill_id); + wd = battle_attack_sc_bonus(wd, src, target, skill_id); #endif if (wd.damage + wd.damage2) { //Check if attack ignores DEF diff --git a/src/map/skill.h b/src/map/skill.h index f849081d00..d07e6bfcd9 100644 --- a/src/map/skill.h +++ b/src/map/skill.h @@ -93,6 +93,7 @@ enum e_skill_inf3 { INF3_DIS_MADO = 0x04000, // Skill that can't be used while in mado INF3_USABLE_MANHOLE = 0x08000, // Skill that can be used to target while under SC__MANHOLE effect INF3_HIT_HIDING = 0x10000, // Skill that affects hidden targets + INF3_SC_GLOOMYDAY_SK = 0x20000, // Skill that affects SC_GLOOMYDAY_SK }; /// Walk intervals at which chase-skills are attempted to be triggered. diff --git a/src/map/status.c b/src/map/status.c index 7041008f05..5b47adf93c 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -359,7 +359,12 @@ void initChangeTables(void) #else SCB_DEF ); #endif - set_sc( BD_RINGNIBELUNGEN , SC_NIBELUNGEN , SI_RINGNIBELUNGEN , SCB_WATK ); + set_sc( BD_RINGNIBELUNGEN , SC_NIBELUNGEN , SI_RINGNIBELUNGEN , +#ifndef RENEWAL + SCB_WATK ); +#else + SCB_NONE ); +#endif set_sc( BD_ROKISWEIL , SC_ROKISWEIL , SI_ROKISWEIL , SCB_NONE ); set_sc( BD_INTOABYSS , SC_INTOABYSS , SI_INTOABYSS , SCB_NONE ); set_sc( BD_SIEGFRIED , SC_SIEGFRIED , SI_SIEGFRIED , SCB_ALL ); @@ -384,7 +389,12 @@ void initChangeTables(void) add_sc( NPC_INVISIBLE , SC_CLOAKING ); set_sc( LK_AURABLADE , SC_AURABLADE , SI_AURABLADE , SCB_NONE ); set_sc( LK_PARRYING , SC_PARRYING , SI_PARRYING , SCB_NONE ); - set_sc( LK_CONCENTRATION , SC_CONCENTRATION , SI_CONCENTRATION , SCB_BATK|SCB_WATK|SCB_HIT|SCB_DEF|SCB_DEF2 ); + set_sc( LK_CONCENTRATION , SC_CONCENTRATION , SI_CONCENTRATION , +#ifndef RENEWAL + SCB_BATK|SCB_WATK|SCB_HIT|SCB_DEF|SCB_DEF2 ); +#else + SCB_HIT|SCB_DEF ); +#endif set_sc( LK_TENSIONRELAX , SC_TENSIONRELAX , SI_TENSIONRELAX , SCB_REGEN ); set_sc( LK_BERSERK , SC_BERSERK , SI_BERSERK , SCB_DEF|SCB_DEF2|SCB_MDEF|SCB_MDEF2|SCB_FLEE|SCB_SPEED|SCB_ASPD|SCB_MAXHP|SCB_REGEN ); set_sc( HP_ASSUMPTIO , SC_ASSUMPTIO , @@ -3530,8 +3540,8 @@ int status_calc_pc_(struct map_session_data* sd, enum e_status_calc_opt opt) if(sc->count) { if(sc->data[SC_CONCENTRATE]) { // Update the card-bonus data - sc->data[SC_CONCENTRATE]->val3 = sd->param_bonus[1]; // Agi - sc->data[SC_CONCENTRATE]->val4 = sd->param_bonus[4]; // Dex + sc->data[SC_CONCENTRATE]->val3 = sd->param_bonus[1]; // Agi + sc->data[SC_CONCENTRATE]->val4 = sd->param_bonus[4]; // Dex } if(sc->data[SC_SIEGFRIED]) { i = sc->data[SC_SIEGFRIED]->val2; @@ -5169,8 +5179,10 @@ static unsigned short status_calc_batk(struct block_list *bl, struct status_chan batk += batk * sc->data[SC_INCATKRATE]->val1/100; if(sc->data[SC_PROVOKE]) batk += batk * sc->data[SC_PROVOKE]->val3/100; +#ifndef RENEWAL if(sc->data[SC_CONCENTRATION]) batk += batk * sc->data[SC_CONCENTRATION]->val2/100; +#endif if(sc->data[SC_SKE]) batk += batk * 3; if(sc->data[SC_BLOODLUST]) @@ -5228,10 +5240,10 @@ static unsigned short status_calc_watk(struct block_list *bl, struct status_chan watk += sc->data[SC_MERC_ATKUP]->val2; if(sc->data[SC_WATER_BARRIER]) watk -= sc->data[SC_WATER_BARRIER]->val3; +#ifndef RENEWAL if(sc->data[SC_NIBELUNGEN]) { if (bl->type != BL_PC) watk += sc->data[SC_NIBELUNGEN]->val2; - #ifndef RENEWAL else { TBL_PC *sd = (TBL_PC*)bl; short index = sd->equip_index[sd->state.lr_flag?EQI_HAND_L:EQI_HAND_R]; @@ -5239,14 +5251,14 @@ static unsigned short status_calc_watk(struct block_list *bl, struct status_chan if(index >= 0 && sd->inventory_data[index] && sd->inventory_data[index]->wlv == 4) watk += sc->data[SC_NIBELUNGEN]->val2; } - #endif } + if(sc->data[SC_CONCENTRATION]) + watk += watk * sc->data[SC_CONCENTRATION]->val2 / 100; +#endif if(sc->data[SC_INCATKRATE]) watk += watk * sc->data[SC_INCATKRATE]->val1/100; if(sc->data[SC_PROVOKE]) watk += watk * sc->data[SC_PROVOKE]->val3/100; - if(sc->data[SC_CONCENTRATION]) - watk += watk * sc->data[SC_CONCENTRATION]->val2/100; if(sc->data[SC_SKE]) watk += watk * 3; if(sc->data[SC_FLEET]) @@ -5739,9 +5751,9 @@ static signed short status_calc_def2(struct block_list *bl, struct status_change def2 += status_get_vit(bl) / 2 * sc->data[SC_ANGELUS]->val2/100; #else def2 += def2 * sc->data[SC_ANGELUS]->val2/100; -#endif if(sc->data[SC_CONCENTRATION]) def2 -= def2 * sc->data[SC_CONCENTRATION]->val4/100; +#endif if(sc->data[SC_POISON]) def2 -= def2 * 25/100; if(sc->data[SC_DPOISON]) @@ -9023,9 +9035,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty val2 = 5*val1; // def increase break; case SC_IMPOSITIO: -#ifndef RENEWAL val2 = 5*val1; // Watk increase -#endif break; case SC_MELTDOWN: val2 = 100*val1; // Chance to break weapon diff --git a/src/map/unit.c b/src/map/unit.c index bde0c9db09..28b5f701ce 100644 --- a/src/map/unit.c +++ b/src/map/unit.c @@ -499,7 +499,7 @@ static int unit_walktoxy_timer(int tid, unsigned int tick, int id, intptr_t data if( md && DIFF_TICK(tick,md->dmgtick) < 3000 ) // Not required not damaged recently clif_move(ud); } else if(ud->state.running) { // Keep trying to run. - if ( !(unit_run(bl, NULL, SC_RUN) || unit_run(bl, sd, SC_WUGDASH)) ) + if (!(unit_run(bl, NULL, SC_RUN) || unit_run(bl, sd, SC_WUGDASH)) ) ud->state.running = 0; } else if (!ud->stepaction && ud->target_to) { // Update target trajectory. @@ -792,7 +792,8 @@ int unit_walktobl(struct block_list *bl, struct block_list *tbl, int range, unsi * Called by unit_run when an object is hit. * @param sd Required only when using SC_WUGDASH */ -void unit_run_hit(struct block_list *bl, struct status_change *sc, struct map_session_data *sd, enum sc_type type) { +void unit_run_hit(struct block_list *bl, struct status_change *sc, struct map_session_data *sd, enum sc_type type) +{ int lv = sc->data[type]->val1; // If you can't run forward, you must be next to a wall, so bounce back. [Skotlex] @@ -819,7 +820,8 @@ void unit_run_hit(struct block_list *bl, struct status_change *sc, struct map_se * @param sd: Required only when using SC_WUGDASH * @return true: Success (Finished running) false: Fail (Hit an object/Couldn't run) */ -bool unit_run(struct block_list *bl, struct map_session_data *sd, enum sc_type type) { +bool unit_run(struct block_list *bl, struct map_session_data *sd, enum sc_type type) +{ struct status_change *sc; short to_x, to_y, dir_x, dir_y; int i; @@ -857,7 +859,7 @@ bool unit_run(struct block_list *bl, struct map_session_data *sd, enum sc_type t } // Can't run forward. - if( (to_x == bl->x && to_y == bl->y ) || (to_x == (bl->x + 1) || to_y == (bl->y + 1)) || (to_x == (bl->x - 1) || to_y == (bl->y - 1))) { + if( (to_x == bl->x && to_y == bl->y) || (to_x == (bl->x + 1) || to_y == (bl->y + 1)) || (to_x == (bl->x - 1) || to_y == (bl->y - 1))) { unit_run_hit(bl, sc, sd, type); return false; } @@ -1402,7 +1404,6 @@ int unit_can_move(struct block_list *bl) { */ int unit_resume_running(int tid, unsigned int tick, int id, intptr_t data) { - struct unit_data *ud = (struct unit_data *)data; TBL_PC *sd = map_id2sd(id);