Index: db/re/skill_db.txt =================================================================== --- db/re/skill_db.txt (revision 17319) +++ db/re/skill_db.txt (working copy) @@ -889,7 +889,7 @@ 2314,1,6,1,-1,0,0,1,1,no,0,0,0,weapon,0, LG_RAGEBURST,Rage Burst 2315,0,6,4,0,0x2,3,3,1,yes,0,0,0,none,2, LG_SHIELDSPELL,Shield Spell 2316,0,6,4,0,0x1,0,5,1,yes,0,0,0,none,0, LG_EXEEDBREAK,Exceed Break -2317,1,6,2,-1,0x2,5,5,1,yes,0,0,0,none,3:4:5:6:7, LG_OVERBRAND,Over Brand //CHECK I know the splash is needed somehow for the strange AoE it gives. +2317,0,6,2,-1,0x2,0,5,1,yes,0,0,0,none,3:4:5:6:7, LG_OVERBRAND,Over Brand //CHECK I know the splash is needed somehow for the strange AoE it gives. 2318,0,6,4,0,0x1,0,5,1,yes,0,0,0,none,0, LG_PRESTIGE,Prestige 2319,0,6,4,0,0x1,3,5,1,no,0,0,0,weapon,0, LG_BANDING,Banding //CHECK Splash isnt needed right? Banding has its own UNIT ID. 2320,0,6,4,-1,0x2,3,5,1,yes,0,0,0,weapon,0, LG_MOONSLASHER,Moon Slasher Index: db/re/skill_unit_db.txt =================================================================== --- db/re/skill_unit_db.txt (revision 17319) +++ db/re/skill_unit_db.txt (working copy) @@ -127,6 +127,7 @@ 2303,0xd0, , 3, 0, -1,all, 0x2018 //SC_BLOODYLUST 2304,0xd1, , 0, 2, -1,enemy, 0x000 //SC_FEINTBOMB +2317,0xec, , -1, 0, -1,enemy, 0x000 //LG_OVERBRAND 2319,0xec, , 0, 3,5000,all, 0x000 //LG_BANDING 2414,0xda, , 0, 0,1000,enemy, 0x008 //WM_REVERBERATION Index: src/map/skill.c =================================================================== --- src/map/skill.c (revision 17319) +++ src/map/skill.c (working copy) @@ -10397,13 +10397,31 @@ case LG_OVERBRAND: { - int width;//according to data from irowiki it actually is a square - for( width = 0; width < 7; width++ ) - for( i = 0; i < 7; i++ ) - map_foreachincell(skill_area_sub, src->m, x-2+i, y-2+width, splash_target(src), src, LG_OVERBRAND_BRANDISH, skill_lv, tick, flag|BCT_ENEMY,skill_castend_damage_id); - for( width = 0; width < 7; width++ ) - for( i = 0; i < 7; i++ ) - map_foreachincell(skill_area_sub, src->m, x-2+i, y-2+width, splash_target(src), src, skill_id, skill_lv, tick, flag|BCT_ENEMY,skill_castend_damage_id); + struct s_skill_unit_layout *layout; + layout = skill_get_unit_layout(skill_id,skill_lv,src,x,y); + short dir = unit_getdir(src), ux, uy; + for( i = 0; i < 53; i++ ) { + if(dir > 0 && dir < 4) { + ux = x+layout->dy[i]; + uy = y+layout->dx[i] * -1; + } else if(dir == 4) { + ux = x+layout->dx[i]; + uy = y+layout->dy[i]; + } else if(dir > 4) { + ux = x+layout->dy[i] * -1; + uy = y+layout->dx[i]; + } else { + ux = x+layout->dx[i]; + uy = y+layout->dy[i] * -1; + } + if(i < 12) { //Close range hits twice + map_foreachincell(skill_area_sub, src->m, ux, uy, splash_target(src), src, LG_OVERBRAND_BRANDISH, skill_lv, tick, flag|BCT_ENEMY,skill_castend_damage_id); + map_foreachincell(skill_area_sub, src->m, ux, uy, splash_target(src), src, skill_id, skill_lv, tick, flag|BCT_ENEMY,skill_castend_damage_id); + } else if(i > 11 && i < 45) //Far sides do knockback damage + map_foreachincell(skill_area_sub, src->m, ux, uy, splash_target(src), src, skill_id, skill_lv, tick, flag|BCT_ENEMY,skill_castend_damage_id); + else //Far middle does piercing damage + map_foreachincell(skill_area_sub, src->m, ux, uy, splash_target(src), src, LG_OVERBRAND_BRANDISH, skill_lv, tick, flag|BCT_ENEMY,skill_castend_damage_id); + } } break; @@ -17530,6 +17548,18 @@ memcpy(skill_unit_layout[pos].dy,dy,sizeof(dy)); } break; + case LG_OVERBRAND: { + static const int dx[] = {-1,-1,-1,-1, 0, 0, 0, 0, 1, 1, 1, 1, + -5,-5,-5,-5,-4,-4,-4,-4,-3,-3,-3,-3,-2,-2,-2,-2, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, + -1,-1,-1, 0, 0, 0, 1, 1, 1}; + static const int dy[] = { 0,-1,-2,-3, 0,-1,-2,-3, 0,-1,-2,-3, + 0,-1,-2,-3, 0,-1,-2,-3, 0,-1,-2,-3, 0,-1,-2,-3, 0,-1,-2,-3, 0,-1,-2,-3, 0,-1,-2,-3, 0,-1,-2,-3, + -4,-5,-6,-4,-5,-6,-4,-5,-6}; + skill_unit_layout[pos].count = 53; + memcpy(skill_unit_layout[pos].dx,dx,sizeof(dx)); + memcpy(skill_unit_layout[pos].dy,dy,sizeof(dy)); + } + break; default: ShowError("unknown unit layout at skill %d\n",i); break;