diff --git a/db/pre-re/skill_db.txt b/db/pre-re/skill_db.txt index 3624257c30..1d4b727849 100644 --- a/db/pre-re/skill_db.txt +++ b/db/pre-re/skill_db.txt @@ -1250,7 +1250,7 @@ 2569,9,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x0, RL_AM_BLAST,Anti-Material Blast 2570,9,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x0, RL_SLUGSHOT,Slug Shot 2571,7:8:9:10:11,6,2,-1,0x2,2,5,1,no,0,0,0,weapon,0,0x0, RL_HAMMER_OF_GOD,Hammer of God -//2572,0,6,1,-1,0x40,0,5,1,no,0,0,0,weapon,0,0, RL_R_TRIP_PLUSATK,Round Trip Plus Attack +2572,0,6,1,-1,0x40,0,5,1,no,0,0,0,weapon,0,0, RL_R_TRIP_PLUSATK,Round Trip Plus Attack //2573,0,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0, RL_B_FLICKER_ATK,Bind Flicker Attack //2574,0,6,1,-1,0,0,10,1,no,0,0,0,weapon,0,0, RL_GLITTERING_GREED_ATK,Flip The Coin Greed Attack diff --git a/db/pre-re/skill_require_db.txt b/db/pre-re/skill_require_db.txt index 1e4b971d1b..b8b00e65ce 100644 --- a/db/pre-re/skill_require_db.txt +++ b/db/pre-re/skill_require_db.txt @@ -886,7 +886,7 @@ //**** // Rebellion -2551,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RL_GLITTERING_GREED +//2551,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RL_GLITTERING_GREED 2552,0,0,10,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RL_RICHS_COIN 2553,0,0,80:84:88:92:96,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RL_MASS_SPIRAL 2554,0,0,55:60:65:70:75,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RL_BANISHING_BUSTER @@ -908,8 +908,8 @@ 2570,0,0,55:60:65:70:75,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RL_SLUGSHOT 2571,0,0,70:80:90:100:110,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RL_HAMMER_OF_GOD 2572,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RL_R_TRIP_PLUSATK -2573,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RL_B_FLICKER_ATK -2574,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RL_GLITTERING_GREED_ATK +//2573,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RL_B_FLICKER_ATK +//2574,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RL_GLITTERING_GREED_ATK //**** // Kagerou/Oboro diff --git a/db/pre-re/skill_unit_db.txt b/db/pre-re/skill_unit_db.txt index 0632bcfb41..74e1a6df76 100644 --- a/db/pre-re/skill_unit_db.txt +++ b/db/pre-re/skill_unit_db.txt @@ -18,7 +18,10 @@ // 0x0200(UF_ENSEMBLE) Ensemble skill // 0x0400(UF_SONG) Song skill // 0x0800(UF_DUALMODE) Spell has effects both at an interval and when you step in/out +// 0x1000(UF_NOKNOCKBACK) Cannot be knocked back (only unit that can be damaged) // 0x2000(UF_RANGEDSINGLEUNIT) Layout hack, use layout range propriety but only display center. +// 0x4000(UF_REM_CRAZYWEED) Removed if be overlapped by GN_CRAZYWEED +// 0x8000(UF_REM_FIRERAIN) Removed if be overlapped by RL_FIRE_RAIN // Example: 0x006 = 0x002+0x004 -> Cannot be stacked nor cast near targets // // Notes: @@ -27,39 +30,39 @@ // u1 u2 lay r intr target flag // - 12,0x7e, , 0, 0, -1,all, 0x003 //MG_SAFETYWALL - 18,0x7f, , -1, 0, 20,enemy, 0x010 //MG_FIREWALL + 12,0x7e, , 0, 0, -1,all, 0x4003 //MG_SAFETYWALL + 18,0x7f, , -1, 0, 20,enemy, 0x8010 //MG_FIREWALL 21,0x86, , 0, 2,1000,enemy, 0x018 //MG_THUNDERSTORM - 25,0x85, , 1, 0, -1,all, 0x2003 //AL_PNEUMA + 25,0x85, , 1, 0, -1,all, 0x6003 //AL_PNEUMA 27,0x81,0x80, 0, 0, -1,all, 0x00E //AL_WARP 47,0x86, , 0, 2,1000,enemy, 0x080 //AC_SHOWER 70,0x83, , -1, 1,1000,all, 0x018 //PR_SANCTUARY - 79,0x84, , -1, 1,3000,enemy, 0x018 //PR_MAGNUS - 80,0x87,0x88, 0, 1,2000,enemy, 0x006 //WZ_FIREPILLAR + 79,0x84, , -1, 1,3000,enemy, 0x8018 //PR_MAGNUS + 80,0x87,0x88, 0, 1,2000,enemy, 0x4006 //WZ_FIREPILLAR 83,0x86, , 0, 3,1000,enemy, 0x010 //WZ_METEOR 85,0x86, , 0, 6:6:6:6:6:6:6:6:6:6:8,1250,enemy,0x018 //WZ_VERMILION - 87,0x8d, , -1, 0, -1,all, 0x010 //WZ_ICEWALL + 87,0x8d, , -1, 0, -1,all, 0x9010 //WZ_ICEWALL 89,0x86, , 0, 5, 450,enemy, 0x018 //WZ_STORMGUST 91,0x86, , 0, 2,1000,enemy, 0x010 //WZ_HEAVENDRIVE - 92,0x8e, , 2, 0, -1,enemy, 0x010 //WZ_QUAGMIRE -115,0x90, , 0, 1,1000,enemy, 0x006 //HT_SKIDTRAP -116,0x93, , 0, 1,1000,enemy, 0x006 //HT_LANDMINE -117,0x91, , 0, 1,1000,enemy, 0x006 //HT_ANKLESNARE -118,0x94, , 0, 1,1000,enemy, 0x006 //HT_SHOCKWAVE -119,0x95, , 0, 1,1000,enemy, 0x006 //HT_SANDMAN -120,0x96, , 0, 1,1000,enemy, 0x006 //HT_FLASHER -121,0x97, , 0, 1,1000,enemy, 0x006 //HT_FREEZINGTRAP -122,0x8f, , 0, 1,1000,enemy, 0x006 //HT_BLASTMINE -123,0x98, , 0, 1,1000,enemy, 0x006 //HT_CLAYMORETRAP -125,0x99, , 0, 1,1000,all, 0x000 //HT_TALKIEBOX -140,0x92, , -1, 0,1000,enemy, 0x000 //AS_VENOMDUST -220,0xb0, , 0, 0, -1,all, 0x002 //RG_GRAFFITI + 92,0x8e, , 2, 0, -1,enemy, 0x8010 //WZ_QUAGMIRE +115,0x90, , 0, 1,1000,enemy, 0x8006 //HT_SKIDTRAP +116,0x93, , 0, 1,1000,enemy, 0x8006 //HT_LANDMINE +117,0x91, , 0, 1,1000,enemy, 0x9006 //HT_ANKLESNARE +118,0x94, , 0, 1,1000,enemy, 0x8006 //HT_SHOCKWAVE +119,0x95, , 0, 1,1000,enemy, 0x8006 //HT_SANDMAN +120,0x96, , 0, 1,1000,enemy, 0x8006 //HT_FLASHER +121,0x97, , 0, 1,1000,enemy, 0x8006 //HT_FREEZINGTRAP +122,0x8f, , 0, 1,1000,enemy, 0x8006 //HT_BLASTMINE +123,0x98, , 0, 1,1000,enemy, 0x8006 //HT_CLAYMORETRAP +125,0x99, , 0, 1,1000,all, 0x8000 //HT_TALKIEBOX +140,0x92, , -1, 0,1000,enemy, 0x8000 //AS_VENOMDUST +220,0xb0, , 0, 0, -1,all, 0x8002 //RG_GRAFFITI 229,0xb1, , 0, 1,1000,enemy, 0x006 //AM_DEMONSTRATION 254,0x86, , -1, 0, 300,enemy, 0x010 //CR_GRANDCROSS -285,0x9a, , 3, 0, -1,all, 0x010 //SA_VOLCANO -286,0x9b, , 3, 0, -1,all, 0x010 //SA_DELUGE -287,0x9c, , 3, 0, -1,all, 0x010 //SA_VIOLENTGALE -288,0x9d, , 3:3:4:4:5,0, -1,all, 0x010 //SA_LANDPROTECTOR +285,0x9a, , 3, 0, -1,all, 0xC010 //SA_VOLCANO +286,0x9b, , 3, 0, -1,all, 0xC010 //SA_DELUGE +287,0x9c, , 3, 0, -1,all, 0xC010 //SA_VIOLENTGALE +288,0x9d, , 3:3:4:4:5,0, -1,all, 0xC010 //SA_LANDPROTECTOR 306,0x9e, , 4, 0,6000,enemy, 0x200 //BD_LULLABY 307,0x9f, , 4, 0, -1,enemy, 0x220 //BD_RICHMANKIM 308,0xa0, , 4, 0, -1,enemy, 0x200 //BD_ETERNALCHAOS @@ -83,77 +86,77 @@ 362,0xb4, , 0, 2, 300,all, 0x000 //HP_BASILICA 369,0xb3, , -1, 0,10000,all, 0x008 //PA_GOSPEL 395,0xb5, , 4, 0, -1,all, 0x200 //CG_MOONLIT -404,0xb6, , -1, 0, -1,all, 0x000 //PF_FOGWALL -405,0xb7, , 0, 0, -1,enemy, 0x000 //PF_SPIDERWEB +404,0xb6, , -1, 0, -1,all, 0x8000 //PF_FOGWALL +405,0xb7, , 0, 0, -1,enemy, 0x8000 //PF_SPIDERWEB 409,0xb2, , 0,-1, -1,noone, 0x000 //WE_CALLBABY 410,0xb2, , 0,-1, -1,noone, 0x000 //WE_CALLPARENT 428,0x86, , 0, 1, 100,enemy, 0x000 //SG_SUN_WARM 429,0x86, , 0, 1, 100,enemy, 0x000 //SG_MOON_WARM 430,0x86, , 0, 1, 100,enemy, 0x000 //SG_STAR_WARM -484,0xb8, , 2, 0,1000,enemy, 0x808 //HW_GRAVITATION +484,0xb8, , 2, 0,1000,enemy, 0x8808 //HW_GRAVITATION 488,0xb9, , 3, 0, -1,all, 0x200 //CG_HERMODE 516,0x86, , 3, 0, 100,enemy, 0x000 //GS_DESPERADO 521,0xbe, , 0, 1,1000,enemy, 0x000 //GS_GROUNDDRIFT 527,0xbc, , -1, 0,2000,enemy, 0x018 //NJ_TATAMIGAESHI -535,0xbd, , -1, 0, 20,enemy, 0x010 //NJ_KAENSIN -538,0xbb, , 1:1:1:2:2:2:3:3:3:4,0,-1,all,0x010 //NJ_SUITON +535,0xbd, , -1, 0, 20,enemy, 0x8010 //NJ_KAENSIN +538,0xbb, , 1:1:1:2:2:2:3:3:3:4,0,-1,all,0x8010 //NJ_SUITON 670,0xc7, , 1, 4:7:10:13:16:19:22:25:28:31,1000,all,0x008 //NPC_EVILLAND //706,0xfd, , 0, 0,1000,all, 0x000 //NPC_VENOMFOG 2044,0xca, , 0, 2,3000,all, 0x018 //AB_EPICLESIS -2032,0xe1, , 2, 0,1000,enemy, 0x018 //GC_POISONSMOKE +2032,0xe1, , 2, 0,1000,enemy, 0x8018 //GC_POISONSMOKE 2213,0x86, , 0, 9,1000,enemy, 0x018 //WL_COMET 2214,0x86, , 0, 5, 100,enemy, 0x080 //WL_CHAINLIGHTNING 2216,0xcb, , -1, 2,2000,enemy, 0x018 //WL_EARTHSTRAIN -2238,0xd8, , 0, 1,1000,enemy, 0x006 //RA_ELECTRICSHOCKER -2239,0xd9, , 0, 1,1000,enemy, 0x006 //RA_CLUSTERBOMB -2249,0xd2, , 0, 1,1000,enemy, 0x022 //RA_MAGENTATRAP -2250,0xd3, , 0, 1,1000,enemy, 0x022 //RA_COBALTTRAP -2251,0xd4, , 0, 1,1000,enemy, 0x022 //RA_MAIZETRAP -2252,0xd5, , 0, 1,1000,enemy, 0x022 //RA_VERDURETRAP -2253,0xd6, , 0, 1,1000,enemy, 0x002 //RA_FIRINGTRAP -2254,0xd7, , 0, 1,1000,enemy, 0x002 //RA_ICEBOUNDTRAP +2238,0xd8, , 0, 1,1000,enemy, 0x9006 //RA_ELECTRICSHOCKER +2239,0xd9, , 0, 1,1000,enemy, 0x8006 //RA_CLUSTERBOMB +2249,0xd2, , 0, 1,1000,enemy, 0x8022 //RA_MAGENTATRAP +2250,0xd3, , 0, 1,1000,enemy, 0x8022 //RA_COBALTTRAP +2251,0xd4, , 0, 1,1000,enemy, 0x8022 //RA_MAIZETRAP +2252,0xd5, , 0, 1,1000,enemy, 0x8022 //RA_VERDURETRAP +2253,0xd6, , 0, 1,1000,enemy, 0x8002 //RA_FIRINGTRAP +2254,0xd7, , 0, 1,1000,enemy, 0x8002 //RA_ICEBOUNDTRAP 2273,0xe2, , 2, 0, 500,all, 0x000 //NC_NEUTRALBARRIER 2274,0xe3, , 2, 0, 500,friend,0x000 //NC_STEALTHFIELD -2299,0xcc, , 0, 1,1000,all, 0x006 //SC_MANHOLE -2300,0xcd, , 0, 0,1000,all, 0x006 //SC_DIMENSIONDOOR -2301,0xce, , 2, 0, -1,all, 0x200E //SC_CHAOSPANIC -2302,0xcf, , 2, 0, -1,all, 0x2002 //SC_MAELSTROM -2303,0xd0, , 3, 0, -1,all, 0x2058 //SC_BLOODYLUST +2299,0xcc, , 0, 1,1000,all, 0xC006 //SC_MANHOLE +2300,0xcd, , 0, 0,1000,all, 0xC006 //SC_DIMENSIONDOOR +2301,0xce, , 2, 0, -1,all, 0xE00E //SC_CHAOSPANIC +2302,0xcf, , 2, 0, -1,all, 0xE002 //SC_MAELSTROM +2303,0xd0, , 3, 0, -1,all, 0xE058 //SC_BLOODYLUST 2304,0xd1, , 0, 2, 500,enemy, 0x018 //SC_FEINTBOMB 2319,0xec, , 0, 3,5000,all, 0x000 //LG_BANDING -2414,0xda, , 0, 0,1000,enemy, 0x008 //WM_REVERBERATION +2414,0xda, , 0, 0,1000,enemy, 0x1008 //WM_REVERBERATION 2418,0xdb, , 0, 5, 300,enemy, 0x800 //WM_SEVERE_RAINSTORM -2419,0xde, , 0, 1,1000,enemy, 0x014 //WM_POEMOFNETHERWORLD +2419,0xde, , 0, 1,1000,enemy, 0x1014 //WM_POEMOFNETHERWORLD 2443,0xdc, , 0, 0,1000,enemy, 0x00A //SO_FIREWALK 2444,0xdd, , 0, 0,1000,enemy, 0x00A //SO_ELECTRICWALK 2446,0x86, , 0, 3:3:3:4:4,1000,enemy, 0x018 //SO_EARTHGRAVE 2447,0x86, , 0, 3:3:3:4:4,1000,enemy, 0x018 //SO_DIAMONDDUST 2449,0xdf, , 0, 3:3:4:4:5,500,enemy, 0x018 //SO_PSYCHIC_WAVE -2450,0xe0, , 0, 3, 500,enemy, 0x010 //SO_CLOUD_KILL -2452,0xe4, , 0, 3,3000,all, 0x010 //SO_WARMER -2453,0xeb, , 0, 1:1:2:2:3,500,enemy,0x010 //SO_VACUUM_EXTREME +2450,0xe0, , 0, 3, 500,enemy, 0x8010 //SO_CLOUD_KILL +2452,0xe4, , 0, 3,3000,all, 0x8010 //SO_WARMER +2453,0xeb, , 0, 1:1:2:2:3,500,enemy,0x8010 //SO_VACUUM_EXTREME 2465,0xf1, , 0, 1,1000,all, 0x010 //SO_FIRE_INSIGNIA 2466,0xf2, , 0, 1,1000,all, 0x010 //SO_WATER_INSIGNIA 2467,0xf3, , 0, 1,1000,all, 0x010 //SO_WIND_INSIGNIA 2468,0xf4, , 0, 1,1000,all, 0x010 //SO_EARTH_INSIGNIA -2479,0xe5, , 0, 1,1000,enemy, 0x006 //GN_THORNS_TRAP -2482,0xe6,0x7f, 0, 1, 100,all, 0x000 //GN_WALLOFTHORN +2479,0xe5, , 0, 1,1000,enemy, 0xC006 //GN_THORNS_TRAP +2482,0xe6,0x7f, 0, 1, 100,all, 0xD000 //GN_WALLOFTHORN 2484,0x86, , 0, 1, 100,enemy, 0x080 //GN_CRAZYWEED_ATK -2485,0xe7, , 0, 2,2000,enemy, 0x098 //GN_DEMONIC_FIRE +2485,0xe7, , 0, 2,2000,enemy, 0x8098 //GN_DEMONIC_FIRE 2487,0xe8, , 2, 0, -1,enemy, 0x2000 //GN_FIRE_EXPANSION_SMOKE_POWDER 2488,0xe9, , 2, 0, -1,enemy, 0x2000 //GN_FIRE_EXPANSION_TEAR_GAS -2490,0xea, , 0, 1,1000,enemy, 0x002 //GN_HELLS_PLANT +2490,0xea, , 0, 1,1000,enemy, 0x8002 //GN_HELLS_PLANT 2555,0x104, , 0, 1:2:2:3:3,500,enemy,0x6 //RL_B_TRAP 2567,0x105, , -1, 0,1000,enemy, 0x98 //RL_FIRE_RAIN diff --git a/db/re/skill_db.txt b/db/re/skill_db.txt index 5820bf5ff1..004a17c3de 100644 --- a/db/re/skill_db.txt +++ b/db/re/skill_db.txt @@ -1253,7 +1253,7 @@ 2569,9,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x0, RL_AM_BLAST,Anti-Material Blast 2570,9,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x0, RL_SLUGSHOT,Slug Shot 2571,7:8:9:10:11,6,2,-1,0x2,2,5,1,no,0,0,0,weapon,0,0x0, RL_HAMMER_OF_GOD,Hammer of God -//2572,0,6,1,-1,0x40,0,5,1,no,0,0,0,weapon,0,0, RL_R_TRIP_PLUSATK,Round Trip Plus Attack +2572,0,6,1,-1,0x40,0,5,1,no,0,0,0,weapon,0,0, RL_R_TRIP_PLUSATK,Round Trip Plus Attack //2573,0,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0, RL_B_FLICKER_ATK,Bind Flicker Attack //2574,0,6,1,-1,0,0,10,1,no,0,0,0,weapon,0,0, RL_GLITTERING_GREED_ATK,Flip The Coin Greed Attack diff --git a/db/re/skill_require_db.txt b/db/re/skill_require_db.txt index f3fd26310e..cf19810b7d 100644 --- a/db/re/skill_require_db.txt +++ b/db/re/skill_require_db.txt @@ -911,7 +911,7 @@ 2569,0,0,80:84:88:92:96,0,0,0,17:18:19:20:21,0,0,none,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RL_AM_BLAST 2570,0,0,55:60:65:70:75,0,0,0,20,3,1,none,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RL_SLUGSHOT 2571,0,0,70:80:90:100:110,0,0,0,18,3,0,none,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RL_HAMMER_OF_GOD -//2572,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RL_R_TRIP_PLUSATK +2572,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RL_R_TRIP_PLUSATK //2573,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RL_B_FLICKER_ATK //2574,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RL_GLITTERING_GREED_ATK diff --git a/db/re/skill_unit_db.txt b/db/re/skill_unit_db.txt index fe9825ad83..a7a50287ad 100644 --- a/db/re/skill_unit_db.txt +++ b/db/re/skill_unit_db.txt @@ -18,7 +18,10 @@ // 0x0200(UF_ENSEMBLE) Ensemble skill // 0x0400(UF_SONG) Song skill // 0x0800(UF_DUALMODE) Spell has effects both at an interval and when you step in/out +// 0x1000(UF_NOKNOCKBACK) Cannot be knocked back (only unit that can be damaged) // 0x2000(UF_RANGEDSINGLEUNIT) Layout hack, use layout range propriety but only display center. +// 0x4000(UF_REM_CRAZYWEED) Removed if be overlapped by GN_CRAZYWEED +// 0x8000(UF_REM_FIRERAIN) Removed if be overlapped by RL_FIRE_RAIN // Example: 0x006 = 0x002+0x004 -> Cannot be stacked nor cast near targets // // Notes: @@ -27,48 +30,48 @@ // u1 u2 lay r intr target flag // - 12,0x7e, , 0, 0, -1,all, 0x003 //MG_SAFETYWALL - 18,0x7f, , -1, 0, 20,enemy, 0x010 //MG_FIREWALL + 12,0x7e, , 0, 0, -1,all, 0x4003 //MG_SAFETYWALL + 18,0x7f, , -1, 0, 20,enemy, 0x8010 //MG_FIREWALL 21,0x86, , 0, 2,1000,enemy, 0x018 //MG_THUNDERSTORM - 25,0x85, , 1, 0, -1,all, 0x2003 //AL_PNEUMA + 25,0x85, , 1, 0, -1,all, 0x6003 //AL_PNEUMA 27,0x81,0x80, 0, 0, -1,all, 0x00E //AL_WARP 47,0x86, , 0, 2:2:2:2:2:3:3:3:3:3,1000,enemy, 0x080 //AC_SHOWER 70,0x83, , -1, 1,1000,all, 0x018 //PR_SANCTUARY - 79,0x84, , -1, 1,3000,enemy, 0x018 //PR_MAGNUS - 80,0x87,0x88, 0, 1,2000,enemy, 0x006 //WZ_FIREPILLAR + 79,0x84, , -1, 1,3000,enemy, 0x8018 //PR_MAGNUS + 80,0x87,0x88, 0, 1,2000,enemy, 0x4006 //WZ_FIREPILLAR 83,0x86, , 0, 3,1000,enemy, 0x010 //WZ_METEOR 85,0x86, , 0, 6:6:6:6:6:6:6:6:6:6:8,1250,enemy,0x018 //WZ_VERMILION - 87,0x8d, , -1, 0, -1,all, 0x010 //WZ_ICEWALL + 87,0x8d, , -1, 0, -1,all, 0x9010 //WZ_ICEWALL 89,0x86, , 0, 5, 450,enemy, 0x018 //WZ_STORMGUST 91,0x86, , 0, 2,1000,enemy, 0x010 //WZ_HEAVENDRIVE - 92,0x8e, , 2, 0, -1,enemy, 0x010 //WZ_QUAGMIRE -115,0x90, , 0, 1,1000,enemy, 0x006 //HT_SKIDTRAP -116,0x93, , 0, 1,1000,enemy, 0x006 //HT_LANDMINE -117,0x91, , 0, 1,1000,enemy, 0x006 //HT_ANKLESNARE -118,0x94, , 0, 1,1000,enemy, 0x006 //HT_SHOCKWAVE -119,0x95, , 0, 1,1000,enemy, 0x006 //HT_SANDMAN -120,0x96, , 0, 1,1000,enemy, 0x006 //HT_FLASHER -121,0x97, , 0, 1,1000,enemy, 0x006 //HT_FREEZINGTRAP -122,0x8f, , 0, 1,1000,enemy, 0x006 //HT_BLASTMINE -123,0x98, , 0, 1,1000,enemy, 0x006 //HT_CLAYMORETRAP -125,0x99, , 0, 1,1000,all, 0x000 //HT_TALKIEBOX -140,0x92, , -1, 0,1000,enemy, 0x000 //AS_VENOMDUST -220,0xb0, , 0, 0, -1,all, 0x002 //RG_GRAFFITI + 92,0x8e, , 2, 0, -1,enemy, 0x8010 //WZ_QUAGMIRE +115,0x90, , 0, 1,1000,enemy, 0x8006 //HT_SKIDTRAP +116,0x93, , 0, 1,1000,enemy, 0x8006 //HT_LANDMINE +117,0x91, , 0, 1,1000,enemy, 0x9006 //HT_ANKLESNARE +118,0x94, , 0, 1,1000,enemy, 0x8006 //HT_SHOCKWAVE +119,0x95, , 0, 1,1000,enemy, 0x8006 //HT_SANDMAN +120,0x96, , 0, 1,1000,enemy, 0x8006 //HT_FLASHER +121,0x97, , 0, 1,1000,enemy, 0x8006 //HT_FREEZINGTRAP +122,0x8f, , 0, 1,1000,enemy, 0x8006 //HT_BLASTMINE +123,0x98, , 0, 1,1000,enemy, 0x8006 //HT_CLAYMORETRAP +125,0x99, , 0, 1,1000,all, 0x8000 //HT_TALKIEBOX +140,0x92, , -1, 0,1000,enemy, 0x8000 //AS_VENOMDUST +220,0xb0, , 0, 0, -1,all, 0x8002 //RG_GRAFFITI 229,0xb1, , 0, 1,1000,enemy, 0x006 //AM_DEMONSTRATION 254,0x86, , -1, 0, 300,enemy, 0x010 //CR_GRANDCROSS -285,0x9a, , 3, 0, -1,all, 0x010 //SA_VOLCANO -286,0x9b, , 3, 0, -1,all, 0x010 //SA_DELUGE -287,0x9c, , 3, 0, -1,all, 0x010 //SA_VIOLENTGALE -288,0x9d, , 3:3:4:4:5,0, -1,all, 0x010 //SA_LANDPROTECTOR +285,0x9a, , 3, 0, -1,all, 0xC010 //SA_VOLCANO +286,0x9b, , 3, 0, -1,all, 0xC010 //SA_DELUGE +287,0x9c, , 3, 0, -1,all, 0xC010 //SA_VIOLENTGALE +288,0x9d, , 3:3:4:4:5,0, -1,all, 0xC010 //SA_LANDPROTECTOR 306,0x9e, , 4, 0,6000,enemy, 0x200 //BD_LULLABY 307,0x9f, , 4, 0, -1,enemy, 0x220 //BD_RICHMANKIM -308,0xa0, , 4, 0, -1,enemy, 0x200 //BD_ETERNALCHAOS +308,0xa0, , 4, 0, -1,enemy, 0x8200 //BD_ETERNALCHAOS 309,0xa1, , 4, 0, -1,party, 0x200 //BD_DRUMBATTLEFIELD 310,0xa2, , 4, 0, -1,party, 0x200 //BD_RINGNIBELUNGEN -311,0xa3, , 4, 0, -1,all, 0x200 //BD_ROKISWEIL +311,0xa3, , 4, 0, -1,all, 0x8200 //BD_ROKISWEIL 312,0xa4, , 4, 0, -1,party, 0x240 //BD_INTOABYSS 313,0xa5, , 4, 0, -1,party, 0x200 //BD_SIEGFRIED -317,0xa6, , 3, 0,3000,enemy, 0x400 //BA_DISSONANCE +317,0xa6, , 3, 0,3000,enemy, 0x8400 //BA_DISSONANCE 319,0xa7, , 3, 0, -1,all, 0x440 //BA_WHISTLE 320,0xa8, , 3, 0, -1,all, 0x440 //BA_ASSASSINCROSS 321,0xa9, , 3, 0, -1,all, 0x440 //BA_POEMBRAGI @@ -83,21 +86,21 @@ 362,0xb4, , 0, 2, 300,all, 0x000 //HP_BASILICA 369,0xb3, , -1, 0,10000,all, 0x008 //PA_GOSPEL 395,0xb5, , 4, 0, -1,all, 0x200 //CG_MOONLIT -404,0xb6, , -1, 0, -1,all, 0x000 //PF_FOGWALL -405,0xb7, , 0, 0, -1,enemy, 0x000 //PF_SPIDERWEB +404,0xb6, , -1, 0, -1,all, 0x8000 //PF_FOGWALL +405,0xb7, , 0, 0, -1,enemy, 0x8000 //PF_SPIDERWEB 409,0xb2, , 0,-1, -1,noone, 0x000 //WE_CALLBABY 410,0xb2, , 0,-1, -1,noone, 0x000 //WE_CALLPARENT 428,0x86, , 0, 1, 100,enemy, 0x000 //SG_SUN_WARM 429,0x86, , 0, 1, 100,enemy, 0x000 //SG_MOON_WARM 430,0x86, , 0, 1, 100,enemy, 0x000 //SG_STAR_WARM -484,0xb8, , 2, 0, 500,enemy, 0x808 //HW_GRAVITATION +484,0xb8, , 2, 0, 500,enemy, 0x8808 //HW_GRAVITATION 488,0xb9, , 3, 0, -1,all, 0x200 //CG_HERMODE 516,0x86, , 3, 0, 100,enemy, 0x000 //GS_DESPERADO 521,0xbe, , 0, 1,1000,enemy, 0x000 //GS_GROUNDDRIFT 525,0x86, , 0, 2,1000,enemy, 0x018 //NJ_HUUMA 527,0xbc, , -1, 0,2000,enemy, 0x018 //NJ_TATAMIGAESHI -535,0xbd, , -1, 0, 20,enemy, 0x010 //NJ_KAENSIN -538,0xbb, , 1:1:1:2:2:2:3:3:3:4,0,-1,all,0x010 //NJ_SUITON +535,0xbd, , -1, 0, 20,enemy, 0x8010 //NJ_KAENSIN +538,0xbb, , 1:1:1:2:2:2:3:3:3:4,0,-1,all,0x8010 //NJ_SUITON 541,0x86, , 0, 3:3:4:4:5,1000,enemy, 0x018 //NJ_RAIGEKISAI 670,0xc7, , 1, 4:7:10:13:16:19:22:25:28:31,1000,all,0x008 //NPC_EVILLAND @@ -105,57 +108,57 @@ 2044,0xca, , 0, 2,3000,all, 0x018 //AB_EPICLESIS -2032,0xe1, , 2, 0,1000,enemy, 0x018 //GC_POISONSMOKE +2032,0xe1, , 2, 0,1000,enemy, 0x8018 //GC_POISONSMOKE 2213,0x86, , 0, 9,1000,enemy, 0x018 //WL_COMET 2214,0x86, , 0, 5, 100,enemy, 0x080 //WL_CHAINLIGHTNING 2216,0xcb, , -1, 2,2000,enemy, 0x018 //WL_EARTHSTRAIN -2238,0xd8, , 0, 1,1000,enemy, 0x006 //RA_ELECTRICSHOCKER -2239,0xd9, , 0, 1,1000,enemy, 0x006 //RA_CLUSTERBOMB -2249,0xd2, , 0, 1,1000,enemy, 0x022 //RA_MAGENTATRAP -2250,0xd3, , 0, 1,1000,enemy, 0x022 //RA_COBALTTRAP -2251,0xd4, , 0, 1,1000,enemy, 0x022 //RA_MAIZETRAP -2252,0xd5, , 0, 1,1000,enemy, 0x022 //RA_VERDURETRAP -2253,0xd6, , 0, 1,1000,enemy, 0x002 //RA_FIRINGTRAP -2254,0xd7, , 0, 1,1000,enemy, 0x002 //RA_ICEBOUNDTRAP +2238,0xd8, , 0, 1,1000,enemy, 0x9006 //RA_ELECTRICSHOCKER +2239,0xd9, , 0, 1,1000,enemy, 0x8006 //RA_CLUSTERBOMB +2249,0xd2, , 0, 1,1000,enemy, 0x8022 //RA_MAGENTATRAP +2250,0xd3, , 0, 1,1000,enemy, 0x8022 //RA_COBALTTRAP +2251,0xd4, , 0, 1,1000,enemy, 0x8022 //RA_MAIZETRAP +2252,0xd5, , 0, 1,1000,enemy, 0x8022 //RA_VERDURETRAP +2253,0xd6, , 0, 1,1000,enemy, 0x8002 //RA_FIRINGTRAP +2254,0xd7, , 0, 1,1000,enemy, 0x8002 //RA_ICEBOUNDTRAP 2273,0xe2, , 2, 0, 500,all, 0x000 //NC_NEUTRALBARRIER 2274,0xe3, , 2, 0, 500,friend,0x000 //NC_STEALTHFIELD -2299,0xcc, , 0, 1,1000,all, 0x006 //SC_MANHOLE -2300,0xcd, , 0, 0,1000,all, 0x006 //SC_DIMENSIONDOOR -2301,0xce, , 2, 0, -1,all, 0x200E //SC_CHAOSPANIC -2302,0xcf, , 2, 0, -1,all, 0x2002 //SC_MAELSTROM -2303,0xd0, , 3, 0, -1,all, 0x2058 //SC_BLOODYLUST +2299,0xcc, , 0, 1,1000,all, 0xC006 //SC_MANHOLE +2300,0xcd, , 0, 0,1000,all, 0xC006 //SC_DIMENSIONDOOR +2301,0xce, , 2, 0, -1,all, 0xC00E //SC_CHAOSPANIC +2302,0xcf, , 2, 0, -1,all, 0xC002 //SC_MAELSTROM +2303,0xd0, , 3, 0, -1,all, 0xE058 //SC_BLOODYLUST 2304,0xd1, , 0, 2, 500,enemy, 0x018 //SC_FEINTBOMB 2319,0xec, , 0, 3,5000,all, 0x000 //LG_BANDING -2414,0xda, , 0, 0,1000,enemy, 0x008 //WM_REVERBERATION +2414,0xda, , 0, 0,1000,enemy, 0x1008 //WM_REVERBERATION 2418,0xdb, , 0, 5, 300,enemy, 0x800 //WM_SEVERE_RAINSTORM -2419,0xde, , 0, 1,1000,enemy, 0x014 //WM_POEMOFNETHERWORLD +2419,0xde, , 0, 1,1000,enemy, 0x1014 //WM_POEMOFNETHERWORLD 2443,0xdc, , 0, 0,1000,enemy, 0x00A //SO_FIREWALK 2444,0xdd, , 0, 0,1000,enemy, 0x00A //SO_ELECTRICWALK 2446,0x86, , 0, 3:3:3:4:4,1000,enemy, 0x018 //SO_EARTHGRAVE 2447,0x86, , 0, 3:3:3:4:4,1000,enemy, 0x018 //SO_DIAMONDDUST 2449,0xdf, , 0, 3:3:4:4:5,500,enemy, 0x018 //SO_PSYCHIC_WAVE -2450,0xe0, , 0, 3, 500,enemy, 0x010 //SO_CLOUD_KILL -2452,0xe4, , 0, 3,3000,all, 0x010 //SO_WARMER -2453,0xeb, , 0, 1:1:2:2:3,500,enemy,0x010 //SO_VACUUM_EXTREME +2450,0xe0, , 0, 3, 500,enemy, 0x8010 //SO_CLOUD_KILL +2452,0xe4, , 0, 3,3000,all, 0x8010 //SO_WARMER +2453,0xeb, , 0, 1:1:2:2:3,500,enemy,0x8010 //SO_VACUUM_EXTREME 2465,0xf1, , 0, 1,1000,all, 0x010 //SO_FIRE_INSIGNIA 2466,0xf2, , 0, 1,1000,all, 0x010 //SO_WATER_INSIGNIA 2467,0xf3, , 0, 1,1000,all, 0x010 //SO_WIND_INSIGNIA 2468,0xf4, , 0, 1,1000,all, 0x010 //SO_EARTH_INSIGNIA -2479,0xe5, , 0, 1,1000,enemy, 0x006 //GN_THORNS_TRAP -2482,0xe6,0x7f, 0, 1, 100,all, 0x000 //GN_WALLOFTHORN +2479,0xe5, , 0, 1,1000,enemy, 0xC006 //GN_THORNS_TRAP +2482,0xe6,0x7f, 0, 1, 100,all, 0xD000 //GN_WALLOFTHORN 2484,0x86, , 0, 1, 100,enemy, 0x080 //GN_CRAZYWEED_ATK -2485,0xe7, , 0, 2,2000,enemy, 0x098 //GN_DEMONIC_FIRE +2485,0xe7, , 0, 2,2000,enemy, 0x8098 //GN_DEMONIC_FIRE 2487,0xe8, , 2, 0, -1,enemy, 0x2000 //GN_FIRE_EXPANSION_SMOKE_POWDER 2488,0xe9, , 2, 0, -1,enemy, 0x2000 //GN_FIRE_EXPANSION_TEAR_GAS -2490,0xea, , 0, 1,1000,enemy, 0x002 //GN_HELLS_PLANT +2490,0xea, , 0, 1,1000,enemy, 0x8002 //GN_HELLS_PLANT 2555,0x104, , 0, 1:2:2:3:3,500,enemy,0x6 //RL_B_TRAP 2567,0x105, , -1, 0,1000,enemy, 0x98 //RL_FIRE_RAIN @@ -177,10 +180,10 @@ 8043,0xf7, , 1, 0,-1,all, 0x2018 //MH_VOLCANIC_ASH 8208,0x86, , 0, 2,1000,enemy, 0x080 //MA_SHOWER -8209,0x90, , 0, 1,1000,enemy, 0x006 //MA_SKIDTRAP -8210,0x93, , 0, 0,1000,enemy, 0x006 //MA_LANDMINE -8211,0x95, , 0, 1,1000,enemy, 0x006 //MA_SANDMAN -8212,0x97, , 0, 1,1000,enemy, 0x006 //MA_FREEZINGTRAP +8209,0x90, , 0, 1,1000,enemy, 0x8006 //MA_SKIDTRAP +8210,0x93, , 0, 0,1000,enemy, 0x8006 //MA_LANDMINE +8211,0x95, , 0, 1,1000,enemy, 0x8006 //MA_SANDMAN +8212,0x97, , 0, 1,1000,enemy, 0x8006 //MA_FREEZINGTRAP 8403,0xed, , -1, 1,1000,enemy, 0x018 //EL_FIRE_MANTLE 8406,0xee, , 0, 1, -1,friend,0x018 //EL_WATER_BARRIER diff --git a/doc/item_db.txt b/doc/item_db.txt index 1bf3a0d552..1247466b6f 100644 --- a/doc/item_db.txt +++ b/doc/item_db.txt @@ -142,7 +142,7 @@ Loc: Equipment's placement. Values are: 2^16 65536 = Shadow Armor 2^17 131072 = Shadow Weapon 2^18 262144 = Shadow Shield - 2^18 524288 = Shadow Shoes + 2^19 524288 = Shadow Shoes 2^20 1048576 = Shadow Accessory Right (Earring) 2^21 2097152 = Shadow Accessory Left (Pendant) diff --git a/src/map/battle.c b/src/map/battle.c index a4b9534cd4..fd437a5159 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -3701,6 +3701,7 @@ static int battle_calc_attack_skill_ratio(struct Damage wd, struct block_list *s uint16 lv = skill_lv; skillratio += 100 * skill_check_pc_partner(sd,skill_id,&lv,skill_get_splash(skill_id,skill_lv),0); } + RE_LVL_DMOD(100); break; case WM_SOUND_OF_DESTRUCTION: skillratio = (1000 * skill_lv) + (((sd) ? pc_checkskill(sd, WM_LESSON) : skill_get_max(WM_LESSON)) * status_get_int(src)); @@ -3875,6 +3876,9 @@ static int battle_calc_attack_skill_ratio(struct Damage wd, struct block_list *s case RL_R_TRIP: skillratio += -100 + (150 * skill_lv); //(custom) break; + case RL_R_TRIP_PLUSATK: + skillratio += -100 + (50 * skill_lv); //(custom) + break; case RL_H_MINE: skillratio += 100 + (200 * skill_lv); //If damaged by Flicker diff --git a/src/map/pc.c b/src/map/pc.c index e303369d08..2a55cac822 100755 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -1589,6 +1589,7 @@ void pc_calc_skilltree(struct map_session_data *sd) case LG_OVERBRAND_BRANDISH: case LG_OVERBRAND_PLUSATK: case WM_SEVERE_RAINSTORM_MELEE: + case RL_R_TRIP_PLUSATK: continue; default: break; diff --git a/src/map/skill.c b/src/map/skill.c index ab97065c62..a74dd9147f 100755 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -110,6 +110,8 @@ struct s_skill_nounit_layout skill_nounit_layout[MAX_SKILL_UNIT_LAYOUT]; int overbrand_nounit_pos; int overbrand_brandish_nounit_pos; +static char dir_ka = -1; // Holds temporary direction to the target for SR_KNUCKLEARROW + //early declaration int skill_block_check(struct block_list *bl, enum sc_type type, uint16 skill_id); static int skill_check_unit_range (struct block_list *bl, int x, int y, uint16 skill_id, uint16 skill_lv); @@ -2345,67 +2347,68 @@ int skill_strip_equip(struct block_list *src,struct block_list *bl, unsigned sho static int skill_area_temp[8]; /*========================================================================= Used to knock back players, monsters, traps, etc - - 'count' is the number of squares to knock back - - 'direction' indicates the way OPPOSITE to the knockback direction (or -1 for default behavior) - - if 'flag&0x1', position update packets must not be sent. - - if 'flag&0x2', skill blown ignores players' special_state.no_knockback + * @param src Object that give knock back + * @param target Object that receive knock back + * @param count Number of knock back cell requested + * @param dir Direction indicates the way OPPOSITE to the knockback direction (or -1 for default behavior) + * @param flag + 0x01 - position update packets must not be sent; + 0x02 - ignores players' special_state.no_knockback; + These flags "return 'count' instead of 0 if target is cannot be knocked back": + 0x04 - at WOE/BG map; + 0x08 - if target is MD_KNOCKBACK_IMMUNE|MD_BOSS; + 0x10 - if target has 'special_state.no_knockback'; + 0x20 - if target is in Basilica area; + * @return Number of knocked back cells done -------------------------------------------------------------------------*/ -int skill_blown(struct block_list* src, struct block_list* target, int count, int8 dir, int flag) { +short skill_blown(struct block_list* src, struct block_list* target, char count, int8 dir, unsigned char flag) { int dx = 0, dy = 0; - struct skill_unit* su = NULL; nullpo_ret(src); + nullpo_ret(target); + + if (count == 0) + return count; // Actual knockback distance is 0. if (src != target && (map_flag_gvg(target->m) || map[target->m].flag.battleground)) - return 0; //No knocking back in WoE - if (count == 0) - return 0; //Actual knockback distance is 0. + return ((flag&0x04) ? count : 0); // No knocking back in WoE switch (target->type) { case BL_MOB: { struct mob_data* md = BL_CAST(BL_MOB, target); if( md->mob_id == MOBID_EMPERIUM ) - return 0; - //Bosses or imune can't be knocked-back + return count; + // Bosses or imune can't be knocked-back if(src != target && status_get_mode(target)&(MD_KNOCKBACK_IMMUNE|MD_BOSS)) - return 0; + return ((flag&0x08) ? count : 0); } break; case BL_PC: { struct map_session_data *sd = BL_CAST(BL_PC, target); if( sd->sc.data[SC_BASILICA] && sd->sc.data[SC_BASILICA]->val4 == sd->bl.id && !is_boss(src)) - return 0; // Basilica caster can't be knocked-back by normal monsters. + return ((flag&0x20) ? count : 0); // Basilica caster can't be knocked-back by normal monsters. if( !(flag&0x2) && src != target && sd->special_state.no_knockback ) - return 0; + return ((flag&0x10) ? count : 0); } break; - case BL_SKILL: - su = (struct skill_unit *)target; - - if (su && su->group) { - switch (su->group->unit_id) { - case UNT_ICEWALL: - case UNT_ANKLESNARE: - case UNT_ELECTRICSHOCKER: - case UNT_REVERBERATION: - case UNT_NETHERWORLD: - case UNT_WALLOFTHORN: - return 0; //Cannot be knocked back - } + case BL_SKILL: { + struct skill_unit* su = NULL; + su = (struct skill_unit *)target; + if (su && su->group && skill_get_unit_flag(su->group->skill_id)&UF_NOKNOCKBACK) + return count; // Cannot be knocked back } break; } if (dir == -1) // : do the computation here instead of outside - dir = map_calc_dir(target, src->x, src->y); // direction from src to target, reversed + dir = map_calc_dir(target, src->x, src->y); // Direction from src to target, reversed - if (dir >= 0 && dir < 8) - { // take the reversed 'direction' and reverse it + if (dir >= 0 && dir < 8) { // Take the reversed 'direction' and reverse it dx = -dirx[dir]; dy = -diry[dir]; } - return unit_blown(target, dx, dy, count, flag); // send over the proper flag + return unit_blown(target, dx, dy, count, flag); // Send over the proper flag } @@ -3032,6 +3035,9 @@ int64 skill_attack (int attack_type, struct block_list* src, struct block_list * 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, 5); break; + case RL_R_TRIP_PLUSATK: + dmg.dmotion = clif_skill_damage(dsrc,bl,tick,status_get_amotion(src),dmg.dmotion,damage,dmg.div_,skill_id,-1,5); + break; case AB_DUPLELIGHT_MELEE: case AB_DUPLELIGHT_MAGIC: dmg.amotion = 300;/* makes the damage value not overlap with previous damage (when displayed by the client) */ @@ -3075,16 +3081,16 @@ int64 skill_attack (int attack_type, struct block_list* src, struct block_list * //Only knockback if it's still alive, otherwise a "ghost" is left behind. [Skotlex] //Reflected spells do not bounce back (bl == dsrc since it only happens for direct skills) - if (dmg.blewcount > 0 && bl!=dsrc && !status_isdead(bl)) { - int8 dir = -1; // default - switch(skill_id) {//direction + if (dmg.blewcount > 0 && bl != dsrc && !status_isdead(bl)) { + int8 dir = -1; // Default direction + // Skill spesific direction + switch (skill_id) { case MG_FIREWALL: case PR_SANCTUARY: case SC_TRIANGLESHOT: - case SR_KNUCKLEARROW: case GN_WALLOFTHORN: case EL_FIRE_MANTLE: - dir = unit_getdir(bl);// backwards + dir = unit_getdir(bl); // Backwards break; // This ensures the storm randomly pushes instead of exactly a cell backwards per official mechanics. case WZ_STORMGUST: @@ -3097,25 +3103,42 @@ int64 skill_attack (int attack_type, struct block_list* src, struct block_list * if (battle_config.cart_revo_knockback) dir = 6; // Official servers push target to the West break; + case AC_SHOWER: + // Direction between target to actual attacker location instead of the unit location (bugreport:1709) + if (dsrc != src) + dir = map_calc_dir(bl, src->x, src->y); + break; } - //blown-specific handling + // Blown-specific handling switch( skill_id ) { case LG_OVERBRAND_BRANDISH: - if( skill_blown(dsrc,bl,dmg.blewcount,dir,0) < dmg.blewcount ) + // Give knockback damage bonus only hits the wall. (bugreport:9096) + if( skill_blown(dsrc,bl,dmg.blewcount,dir,0x04|0x08|0x10|0x20) < dmg.blewcount ) skill_addtimerskill(src, tick + status_get_amotion(src), bl->id, 0, 0, LG_OVERBRAND_PLUSATK, skill_lv, BF_WEAPON, flag|SD_ANIMATION); break; case SR_KNUCKLEARROW: if (!(flag&4)) { - short i = skill_blown(dsrc, bl, dmg.blewcount, dir, 0); + short x = bl->x, y = bl->y; - if (!map_flag_gvg2(src->m) && !map[src->m].flag.battleground && unit_movepos(src,bl->x,bl->y,1,1)) { + // Ignore knockback damage bonus if in WOE (player cannot be knocked in WOE) + // Boss & Immune Knockback (mode or from bonus bNoKnockBack) target still remains the damage bonus + // (bugreport:9096) + if (skill_blown(dsrc, bl, dmg.blewcount, dir_ka, 0x04) < dmg.blewcount) + skill_addtimerskill(src, tick + 300 * ((flag&2) ? 1 : 2), bl->id, 0, 0, skill_id, skill_lv, BF_WEAPON, flag|4); + + dir_ka = -1; + + // Move attacker to the target position after knocked back + if ((bl->x != x || bl->y != y) && unit_movepos(src,bl->x,bl->y,1,1)) { clif_slide(src, bl->x, bl->y); clif_fixpos(src); } - if (i < dmg.blewcount) - skill_addtimerskill(src, tick + 300 * ((flag&2) ? 1 : 2), bl->id, 0, 0, skill_id, skill_lv, BF_WEAPON, flag|4); } break; + case RL_R_TRIP: + if( skill_blown(dsrc,bl,dmg.blewcount,dir,0) < dmg.blewcount ) + skill_addtimerskill(src, tick + status_get_amotion(src), bl->id, 0, 0, RL_R_TRIP_PLUSATK, skill_lv, BF_WEAPON, flag|SD_ANIMATION); + break; default: skill_blown(dsrc,bl,dmg.blewcount,dir, 0x0 ); if ( !dmg.blewcount && bl->type == BL_SKILL && damage > 0 ){ @@ -5120,15 +5143,18 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint break; case SR_KNUCKLEARROW: - if( !map_flag_gvg(src->m) && !map[src->m].flag.battleground && unit_movepos(src, bl->x, bl->y, 1, 1) ) { - clif_slide(src, bl->x, bl->y); - clif_fixpos(src); - } + // Holds current direction of bl/target to src/attacker before the src is moved to bl location + dir_ka = map_calc_dir(bl, src->x, src->y); + // Has slide effect even in GVG + if( unit_movepos(src, bl->x, bl->y, 1, 1) ) { + clif_slide(src, bl->x, bl->y); + clif_fixpos(src); + } - if( flag&1 ) - skill_attack(BF_WEAPON, src, src, bl, skill_id, skill_lv, tick, flag|SD_LEVEL); - else - skill_addtimerskill(src, tick + 300, bl->id, 0, 0, skill_id, skill_lv, BF_WEAPON, flag|SD_LEVEL|2); + if( flag&1 ) + skill_attack(BF_WEAPON, src, src, bl, skill_id, skill_lv, tick, flag|SD_LEVEL); + else + skill_addtimerskill(src, tick + 300, bl->id, 0, 0, skill_id, skill_lv, BF_WEAPON, flag|SD_LEVEL|2); break; case SR_HOWLINGOFLION: @@ -11490,7 +11516,7 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui case 6: sx = x + w; break; case 7: sy = y + w; sx = x + w; break; } - skill_addtimerskill(src,gettick() + (140 * w),0,sx,sy,skill_id,skill_lv,dir,flag); + skill_addtimerskill(src,gettick() + (40 * w),0,sx,sy,skill_id,skill_lv,dir,flag); } } break; @@ -16259,43 +16285,17 @@ static int skill_cell_overlap(struct block_list *bl, va_list ap) } break; case GN_CRAZYWEED_ATK: - switch(unit->group->unit_id) { - case UNT_WALLOFTHORN: - case UNT_THORNS_TRAP: - case UNT_MANHOLE: - case UNT_DIMENSIONDOOR: - case UNT_BLOODYLUST: - case UNT_CHAOSPANIC: - case UNT_MAELSTROM: - case UNT_FIREPILLAR_ACTIVE: - case UNT_LANDPROTECTOR: - case UNT_VOLCANO: - case UNT_DELUGE: - case UNT_VIOLENTGALE: - case UNT_SAFETYWALL: - case UNT_PNEUMA: - skill_delunit(unit); - return 1; + if (unit->group->skill_id == WZ_FIREPILLAR && unit->group->unit_id != UNT_FIREPILLAR_ACTIVE) + break; + if (skill_get_unit_flag(unit->group->skill_id)&UF_REM_CRAZYWEED) { + skill_delunit(unit); + return 1; } break; case RL_FIRE_RAIN: - switch (unit->group->unit_id) { - case UNT_LANDPROTECTOR: case UNT_ICEWALL: case UNT_FIREWALL: - case UNT_WARMER: case UNT_CLOUD_KILL: case UNT_VACUUM_EXTREME: - case UNT_SPIDERWEB: case UNT_FOGWALL: case UNT_DELUGE: - case UNT_VIOLENTGALE: case UNT_VOLCANO: case UNT_QUAGMIRE: - case UNT_GRAVITATION: case UNT_MAGNUS: case UNT_THORNS_TRAP: - case UNT_WALLOFTHORN: case UNT_DEMONIC_FIRE: case UNT_HELLS_PLANT: - case UNT_POISONSMOKE: case UNT_VENOMDUST: case UNT_MAELSTROM: - case UNT_MANHOLE: case UNT_DIMENSIONDOOR: case UNT_GRAFFITI: - case UNT_LANDMINE: case UNT_SANDMAN: case UNT_SHOCKWAVE: - case UNT_SKIDTRAP: case UNT_ANKLESNARE: case UNT_CLAYMORETRAP: - case UNT_TALKIEBOX: case UNT_FREEZINGTRAP: case UNT_VERDURETRAP: - case UNT_ICEBOUNDTRAP: case UNT_FIRINGTRAP: case UNT_ELECTRICSHOCKER: - case UNT_DISSONANCE: case UNT_ROKISWEIL: case UNT_ETERNALCHAOS: - case UNT_SUITON: case UNT_KAEN: - skill_delunit(unit); - return 1; + if (skill_get_unit_flag(unit->group->skill_id)&UF_REM_FIRERAIN) { + skill_delunit(unit); + return 1; } break; } diff --git a/src/map/skill.h b/src/map/skill.h index 561351aaaf..fc83757b0e 100644 --- a/src/map/skill.h +++ b/src/map/skill.h @@ -253,19 +253,22 @@ struct skill_unit_group_tickset { enum { - UF_DEFNOTENEMY = 0x0001, // If 'defunit_not_enemy' is set, the target is changed to 'friend' - UF_NOREITERATION = 0x0002, // Spell cannot be stacked - UF_NOFOOTSET = 0x0004, // Spell cannot be cast near/on targets - UF_NOOVERLAP = 0x0008, // Spell effects do not overlap - UF_PATHCHECK = 0x0010, // Only cells with a shootable path will be placed - UF_NOPC = 0x0020, // May not target players - UF_NOMOB = 0x0040, // May not target mobs - UF_SKILL = 0x0080, // May target skills - UF_DANCE = 0x0100, // Dance - UF_ENSEMBLE = 0x0200, // Duet - UF_SONG = 0x0400, // Song - UF_DUALMODE = 0x0800, // Spells should trigger both ontimer and onplace/onout/onleft effects. - UF_RANGEDSINGLEUNIT = 0x2000 // hack for ranged layout, only display center + UF_DEFNOTENEMY = 0x0001, // If 'defunit_not_enemy' is set, the target is changed to 'friend' + UF_NOREITERATION = 0x0002, // Spell cannot be stacked + UF_NOFOOTSET = 0x0004, // Spell cannot be cast near/on targets + UF_NOOVERLAP = 0x0008, // Spell effects do not overlap + UF_PATHCHECK = 0x0010, // Only cells with a shootable path will be placed + UF_NOPC = 0x0020, // May not target players + UF_NOMOB = 0x0040, // May not target mobs + UF_SKILL = 0x0080, // May target skills + UF_DANCE = 0x0100, // Dance + UF_ENSEMBLE = 0x0200, // Duet + UF_SONG = 0x0400, // Song + UF_DUALMODE = 0x0800, // Spells should trigger both ontimer and onplace/onout/onleft effects. + UF_NOKNOCKBACK = 0x1000, // Skill unit cannot be knocked back + UF_RANGEDSINGLEUNIT = 0x2000, // hack for ranged layout, only display center + UF_REM_CRAZYWEED = 0x4000, // removed by Crazyweed + UF_REM_FIRERAIN = 0x8000, // removed by Fire Rain }; /// Create Database item @@ -366,7 +369,7 @@ int skill_addtimerskill(struct block_list *src,unsigned int tick,int target,int // Results? Added int skill_additional_effect( struct block_list* src, struct block_list *bl,uint16 skill_id,uint16 skill_lv,int attack_type,int dmg_lv,unsigned int tick); int skill_counter_additional_effect( struct block_list* src, struct block_list *bl,uint16 skill_id,uint16 skill_lv,int attack_type,unsigned int tick); -int skill_blown(struct block_list* src, struct block_list* target, int count, int8 dir, int flag); +short skill_blown(struct block_list* src, struct block_list* target, char count, int8 dir, unsigned char flag); int skill_break_equip(struct block_list *src,struct block_list *bl, unsigned short where, int rate, int flag); int skill_strip_equip(struct block_list *src,struct block_list *bl, unsigned short where, int rate, int lv, int time); // Skills unit diff --git a/src/map/status.c b/src/map/status.c index e2db69e24e..39065e4b46 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -2632,6 +2632,8 @@ static int status_get_hpbonus(struct block_list *bl, enum e_status_bonus type) { if(sc->data[SC_EQC]) bonus -= sc->data[SC_EQC]->val4; } + // Max rate reduce is -100% + bonus = cap_value(bonus,-100,INT_MAX); } return min(bonus,INT_MAX); @@ -2704,6 +2706,8 @@ static int status_get_spbonus(struct block_list *bl, enum e_status_bonus type) { if(sc->data[SC_LIFE_FORCE_F]) bonus += sc->data[SC_LIFE_FORCE_F]->val1; } + // Max rate reduce is -100% + bonus = cap_value(bonus,-100,INT_MAX); } return min(bonus,INT_MAX); diff --git a/src/map/unit.c b/src/map/unit.c index 322a71f81b..d09ef847f1 100644 --- a/src/map/unit.c +++ b/src/map/unit.c @@ -464,7 +464,7 @@ int unit_delay_walktobl_timer(int tid, unsigned int tick, int id, intptr_t data) * &4: Delay walking for can_move * @return 1: Success 0: Fail or unit_walktoxy_sub() */ -int unit_walktoxy( struct block_list *bl, short x, short y, int flag) +int unit_walktoxy( struct block_list *bl, short x, short y, unsigned char flag) { struct unit_data* ud = NULL; struct status_change* sc = NULL; @@ -571,7 +571,7 @@ static int unit_walktobl_sub(int tid, unsigned int tick, int id, intptr_t data) * &2: Start attacking upon arrival within range, otherwise just walk to target * @return 1: Started walking or set timer 0: Failed */ -int unit_walktobl(struct block_list *bl, struct block_list *tbl, int range, int flag) +int unit_walktobl(struct block_list *bl, struct block_list *tbl, int range, unsigned char flag) { struct unit_data *ud = NULL; struct status_change *sc = NULL; diff --git a/src/map/unit.h b/src/map/unit.h index a7a9e3b1ef..45cf12f34d 100644 --- a/src/map/unit.h +++ b/src/map/unit.h @@ -74,8 +74,8 @@ struct view_data { // PC, MOB, PET // Does walk action for unit -int unit_walktoxy( struct block_list *bl, short x, short y, int easy); -int unit_walktobl( struct block_list *bl, struct block_list *target, int range, int easy); +int unit_walktoxy( struct block_list *bl, short x, short y, unsigned char flag); +int unit_walktobl( struct block_list *bl, struct block_list *target, int range, unsigned char flag); int unit_run(struct block_list *bl); int unit_calc_pos(struct block_list *bl, int tx, int ty, uint8 dir); int unit_delay_walktoxy_timer(int tid, unsigned int tick, int id, intptr_t data);